<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Posts on Hatred&#39;s Log Place</title>
    <link>https://htrd.su/post/</link>
    <description>Recent content in Posts on Hatred&#39;s Log Place</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>ru</language>
    <managingEditor>adrozdoff@gmail.com (Alexander Drozdov)</managingEditor>
    <webMaster>adrozdoff@gmail.com (Alexander Drozdov)</webMaster>
    <lastBuildDate>Mon, 13 Oct 2025 16:24:09 +1000</lastBuildDate>
    
        <atom:link href="https://htrd.su/post/index.xml" rel="self" type="application/rss+xml" />
    
    
    <item>
      <title>Кыргызстан 2025</title>
      <link>https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/</link>
      <pubDate>Mon, 13 Oct 2025 16:24:09 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/</guid>
      <description>&lt;h2 id=&#34;пролог&#34;&gt;Пролог&lt;/h2&gt;
&lt;p&gt;Киригизия началась для меня относительно спонтанно. Это если смотреть на то, как готовились к другим походам, когда билеты покупались уже в январе, а вся основная канва была ясна и понятна к концу осени предыдущего года.&lt;/p&gt;
&lt;p&gt;Тут же март месяц, в группе «ПВД анонсы» сообщение от Вовы с которым единожды ходил на г.Мечта под руководством Зелёного осенью прошлого (2024) года… Мысли начали делать жуууууу в голове. Робко уточняю количество мест (планируется передвижение на авто, поэтому число участников ограничено 4 персонами), но оказывается, что желающих пока только два: собственно Вова и Даша. С Дашей тоже ходили только Мечту и (склероз хорошая болезнь: каждый день новости), как оказалось позже, встречали вместе 2024 НГ на Фалазе с GT.&lt;/p&gt;
&lt;p&gt;Но желание куда-то, особенно в новый район, выбраться на фоне тотального оскуднения собственной фантазии, всё же взяло верх. Решаюсь и вписываюсь.&lt;/p&gt;
&lt;p&gt;При подготовке был некоторый дискомфорт: коллектив новый, подходы к организации другие. В какой-то момент даже закрались крамольные мысли о возможном срыве сего мероприятия. Но вот определены сроки, куплены билеты (точнее покупкой билетов определились сроки, но это несущественные мелочи) и в группе-обсуждении прозвучал возглас Даши: «Мы на полпути в Киргизию!». Точка невозврата пройдена, обратного пути нет! Билеты были куплены на даты 4-19 сентября 2025.&lt;/p&gt;
&lt;p&gt;В отсутствии схоженности и слаженности, как-то гладко и само собой распределяются обязанности. Даша занимается раскладкой «под ключ». Я по её лекалам составляю и корректирую аптечку, формирую ремкомплект (дополняю свой регулярный), подбираю карты под навигатор, рисую трек по озвученной нитке маршрута пешеходной части (об этом ниже), делаю намётки по покупке газа и подбиваю общественное снаряжение (по итогу и распределял его по участникам). Вова занимается организационными моментами, типа аренды авто, квартир. Так же прорабатываем точки интереса для автомобильной части путешествия. Тут я, правда, откровенно филоню. В начала августа к нам подключается и четвёртый участник: тёска Саша (далее на него буду ссылаться как СашаЛ). Немного корректируется раскладка, проверяется расчёт газа. Согласовываем палатки.&lt;/p&gt;
&lt;p&gt;По совместным обсуждениям у нас рождается такой план:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;День 0. Прибытие, покупка газа, обмен налички, оформление карт.&lt;/li&gt;
&lt;li&gt;День 1. Выдвижение в сторону Каракола по северу оз.Иссык-Куль. Посещение башни Бурана. Радиалка на оз.Коль-Тор. Кегетинское ущелье и его водопады, где и ночуем.&lt;/li&gt;
&lt;li&gt;День 2. Боомское ущелье (тут просто идёт дорога и течёт река Чу). Петроглифы в Чолпон-Ате. Проехать Григорьевское и Семёновские ущелья. Прибытие в Каракол и ночёвка там.&lt;/li&gt;
&lt;li&gt;День 3-9. Оставляем машину на платной стоянке в Каракол и на такси до курорта Джеты-Огуз (но тут всё скорректировалось на месте). Пешеходная часть по нитке: курорт Джети-Огуз (радиальное посещение видовой площадки)  — р. Джети-Огуз — р. Телеты зап. - перевал Телеты (1А, 3800 м) — р. Телеты — р. Уюнтор — р. Каракол — альплагерь Каракол — стоянка Сирота — р. Кургак-Тор — оз. Ала-Кёль — перевал Панорамный (1А, 3770 м, радиально) — перевал Ала-кёль Северный (1А, 3900 м) — р. Кельдеке — р. Арашан — стоянка Алтын-Арашан. Термальные источники. Выброска в Каракол. Рассматривался вариант пешего выхода со стоянки Алтын-Арашан до Теплоключенки. Ночёвка в живописной долине реки Тургенаксу, недалеко от метеостанции недалеко от перевала Чон-Ашу.
Опционально и по возможности сходить пик 30 лет ВЛКСМ.
Перевал Телеты: 1А, высота 3800 м, снежный склон, крутизна склона до 30 градусов.
Перевал Алакёль Северный: 1А, высота 3900 м, снежный склон, крутизна северо-восточного склона до 40 градусов.
Перевал Панорамный: 1А, высота 3771, скальный.&lt;/li&gt;
&lt;li&gt;День 10. Автопосещение перевала Чон-Ашу. Встреча рассвета там. Перевал Чон-Ашу (тюрк. “Большой перевал”) через Терскей-Алатау расположен на высоте 3982 м. На перевале есть дом дорожного мастера. С Чон-Ашу в ясную погоду виден на юго-юго-западе хребет Куплю с пиками Обручева (около 5000 м), Советской Конституции (5220 м) и Карпинского (5025 м).
Далее каньон Барскоон (водопады слёзы Барса, Брызги шампанского). Каньон Сказка. Ущелье Ак-Сай (и горы Кызылтау).&lt;/li&gt;
&lt;li&gt;День 11. река Калмак-Ашуу, выскокогорное зозеро Сон-Кель. Перевалы Тескей-Торпок («33 попугая»), Молдо-Ашу.
Водохранилище Орто-Токой.&lt;/li&gt;
&lt;li&gt;День 12-14. нацпарк Ала-арча, пик Учитель 4540 м. Вечером возвращение в Бишкек и ночёвка там.&lt;/li&gt;
&lt;li&gt;День 15. Вылет.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Но, как известно, планы рождены для того, что бы они менялись. Так вышло и у нас.&lt;/p&gt;
&lt;p&gt;И вот близится 4 сентября. Загодя забираем у Даши расфасованные по приёмам пищи пакеты. Она, умничка, всю раскладку сделала «под ключ» сама: и составление, и закупку и фасовку. Хотя грозилась привлекать. Только перекусы были оставлены как самостоятельная работа.&lt;/p&gt;
&lt;p&gt;Договариваемся, что поедем в аэропорт на машине Вовы, там её оставим в зоне F, где стоимость парковки 200 руб день.&lt;/p&gt;
&lt;h2 id=&#34;день-0-4-сентября-прибытие&#34;&gt;День 0: 4 сентября, прибытие&lt;/h2&gt;
&lt;p&gt;День отлёта. Сказано — сделано. Собираемся по адресам, настроение — боевое и чуть бьёт мандраж.&lt;/p&gt;
&lt;p&gt;На входном досмотре нам говорят достать зажигалки из багажа и что их можно только по одной на человека в ручную кладь. Благо захватил скотч. Аккуратно подрезаю упаковку, достаю зажигалки, распределяю по участникам. А вот одну так и не заметили. Вспомнили про неё только когда прибыли.&lt;/p&gt;
&lt;p&gt;Тут начинается первое приключение: вылет начинают задерживать. А стыковка в Новосибирске у нас не такая уж и большая. Хорошо, что для спокойствия все перелёты брались едиными билетом. Да, планы скорректирует, но хотя бы долетим, куда хотим без финансовых потерь.&lt;/p&gt;
&lt;p&gt;Сам перелёт описывать смысла нет, а вот стыковка это было огонь: нас встречали, всех, кто на Бишкек и организовали «зелёный коридок», прошли и таможню и досмотры без очередей. Да ещё так добежали, что пришлось ждать начала посадки на рейс до Бишкека.&lt;/p&gt;
&lt;p&gt;По прилёту активируем заранее купленные e-sim для интернета и получаем машину. Решили доплатить, что бы нам её пригнали в Аэропорт, дабы не таскаться по городу с рюкзаками. Обычные формальности типа договора, осмотра машины, фиксацию на видео сколов и повреждений, уровня топлива, наличия запаски и домкрата. Не оказалось компрессора, к счастью он нам и не потребовался.&lt;/p&gt;
&lt;p&gt;И тут начинаем действовать по заранее запасённому плану. Едем в сторону Бакаи Банк и обменников. По ходу фотографируемся на стелле Бишкека:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250921004131.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Меняем валюту: я сконвертировал 30000 руб на начало. Ребята отправляются в отделение банка оформлять карты. Тут и начинаются первые корректировки плана. Для начала: пробки сильно замедляют передвижение. Плюс время оформления карт тоже оказалось существенным. Поэтому осмотра достопримечательностей в первый день сделать не получается. Но кровь из носу, нужно выполнить программу-минимум: купить газ.&lt;/p&gt;
&lt;p&gt;Решаю заняться этой задачей, пока ребята оформляются. Открываю свои заметки: недалеко фирменный магазин RedFox, в шаговой доступности. Отправляюсь туда, но там только баллоны на 230 грамм. Нам по расчёту нужно 4 баллона на 450г. Интересуюсь, где можно таким разжиться, меня отправляют на улицу Урусбекова на пересечении с Киевской, мол там много магазинов тематики охота-рыбалка, скорее всего там есть. По навигатору (2GIS отлично работает в Кыргызстане, рекомендую заранее скачать оффлайн карты, как и карты для maps.me) мне туда топать около 30-40 минут. А потом ещё обратно. Заглядываю сначала к ребятам, узнать, как обстоят дела с оформлением карт, благо что маршрут проходит аккурат через них. А дела обстоят очень медленно. Усугубляет дело то, что близится и время закрытия магазинов. Правда Даша к этому моменту уже освободилась, поэтому думаем вместе и приходим к выводу, что я пешком успеваю до закрытия, пробегаюсь по магазинам, а они потом просто подъезжают и забирают меня с покупками. Что прекрасно: навигатор показывает примерно одинаковое время достижения цели, что на авто, что пешим ходом. Ставлю своей целью магазин Робинзон и включаю форсаж. На наше счастью, там оказалось три вида газа нужного нам объёма, выбрал самый знакомый мне и скинул в общий чат геоточку. Командная работа во всей красе. А магазин Робинзон рекомендую!&lt;/p&gt;
&lt;p&gt;Далее отправляемся откушать местной кухни в Navat. Мне очень понравилось жаркое Куурдак. Затем закупиться в Spar и заселяться. С последним тоже случилась накладка. Мы уже было подумали, что работает старая добрая схема: «ой, а жильё продлили/не освободили, но давайте мы вам дадим дороже и у чёрта на рогах». Но нет, дали не дальше, лучше и дешевле. Поэтому на обратном пути обратились к этой же хозяйке. С дороги стираемся, моемся, в люлю и спать.&lt;/p&gt;
&lt;h2 id=&#34;день-1-5-сентября-башня-бурана-озкель-тор-и-ущкегеты&#34;&gt;День 1: 5 сентября, башня Бурана, оз.Кель-Тор и ущ.Кегеты&lt;/h2&gt;
&lt;p&gt;Вот и первый активный день. Оставляем ключи под ковриком, отписываемся хозяйке, завтракаем в Spar. По дороге смотрим мечеть Имам Сарахси и «чиним» форсунки стеклоомывателя на хорьке (Toyota Harrier 1998 года — наш напарник до конца путешествия). Ломаем иголку. Тут пригодился ремкомплект, по крайней мере тонкогубцы.&lt;/p&gt;
&lt;p&gt;Следующая наша цель: башня Бурана.&lt;/p&gt;
&lt;p&gt;По дороге запасаемся яблоками:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250921004217.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Сама башня, значится как минарет 9-11 веков и является одним из древнейших минаретов из жжёного кирпича:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250921004237.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Там же можно наблюдать каменные изваяния Балбалы и петроглифы. Но фото не делал.&lt;/p&gt;
&lt;p&gt;После башни движемся в к началу радиалки на озеро Коль-Тор. Оно в составе парка, экосбор что-то вроде 80 сом с человека.&lt;/p&gt;
&lt;p&gt;Вопреки ожиданию, прогулка к озеру получилась с достаточно ощутимым наборов высоты около 833 метров на дистанции 5 км (почти 11 км на круг) и заняла около 4 часов. Максимальная высота при этом была 2757 метров. Но оно того стоило! И сама тропа живописна и само озеро. Плюс эдакая акклиматизация.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250921004301.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250921004312.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250921004326.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;По озеру за отдельную плату на лодках катают туристов. Можно купить чая с малиновым вареньем и сырную лепёшку.
Далее спуск, снова в машину и следующая остановка: водопад Кегетинский в одноимённом ущелье:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250921004342.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;После водопада решаем забраться как можно дальше по ущелью на машине, пока совсем страшно не станет, в сторону пер.Кегеты (3805). Попутно высматривали места, где поставить палатки на первую ночёвку. Добрались до высоты примерно 3400 метров, появились неприятные ощущения в затылочной области, но виды очень красивые:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250921004359.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Для стоянки нашли не менее живописное место, где отужинали купленными по дроге продуктами (N42.5060280 E75.0877406 высота 2392):
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250921004412.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;день-2-6-сентября-озиссык-куль-поскаракол&#34;&gt;День 2: 6 сентября, оз.Иссык-Куль, пос.Каракол&lt;/h2&gt;
&lt;p&gt;На следующий день мы достигли озера Иссык-Куль и не смогли отказать себе в желании искупаться там и откушать арбуза. Хотя гвоздём программы стал кумыс Башкортостана, купленный в Кыргызстане и произведённый в республике Беларусь:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250921004426.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250921004433.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;А вот Кууардак в этой заведении (запамятовал, где мы вообще останавливались) оказался вполне себе достойным.&lt;/p&gt;
&lt;p&gt;После были ущелья 	Григорьевское и Семёновское. Но они уже не вызывали такого вау-эффекта как Кегеты. Хотя и нашли одно озеро, но ужасно загаженное. Хотя годные кадры и тут получилось сделать:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250921004450.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Так как ущелья нас не зацепили успеваем добраться до темна в Каракол, где по пути забронировали проживание в юрте через Booking (оплата на месте):
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250921004520.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;По сути: обычный гостевой дом, только юрта. Стоят 4 кровати, удобства рядом. Из годного: сочная и сладка груша прямо над нами. Набрали немного с собой в дорогу. А ещё суровая книга почёта (и уважения):
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020251013155502.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;И снова планы корректируются. Оказывается в Караколе нет платных стоянок, как мы рассчитывали, где бы можно было оставить машину на время пешки. Хозяин юрточного кампинга рекомендует оставить машину в Лесном (это финиш нашего маршрута, опционально я рисовал трек как раз до него, а не до Теплоключенки), а от туда добраться на такси до места Джеты-Огуз и далее уже начинать маршрут.&lt;/p&gt;
&lt;h2 id=&#34;день-3-7-сентября-подходы-по-джеты-огуз&#34;&gt;День 3: 7 сентября, подходы по Джеты-Огуз&lt;/h2&gt;
&lt;p&gt;На утро  7 сентября договариваемся с хозяином на завтрак в 7:30. После чего собираемся и стартуем в Лесное. Там ставим машину за 250 сом/сутки (хозяин требует плату вперёд). Сам же хозяин на древнем фольцвагене за 2000 сом соглашается довезти нас до Джеты-Огуз. Там поднимаемся на дежурную видовую, делаем фото красных скал, 7 быков и разбитое сердце:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250921010736.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;И наша команда на старте:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250921021147.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;А вот дальше начинается дуротоп. Отчего-то упустил момент, что дорога от Джеты-Огуз идёт дальше и вполне себе достойного качества. Но это ладно: благодаря этому самому достойному качеству по ней постоянно гоняют автомобили, накрывая пешеходов облаками пыли. По факту можно вполне себе заброситься до водопада Девичьи Косы, сократив себе путь на 5-7 километров.
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250921012016.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;К обеду дошли до отворота на р.Телелы-Западная. Где и остановились для приёма пищи. Отсюда же начинается приятная для пешего движения дорога с видами ласкающими взор:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250921012625.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Но даже с учётом дуротопа, мы успешно проскакали отметку 15 км и остановились лагерем под самым началом подъёмом на перевал Телеты. Пройдя около 20 км.&lt;/p&gt;
&lt;p&gt;По дороге встретили пару - &amp;ldquo;смешанную&amp;rdquo; группу из Владивостока и Питера. Они идут тем же маршрутом, что и мы, только не делали глупость и забросились до Девичьих кос. С другой стороны, мы прошли кордон бесплатно.&lt;/p&gt;
&lt;p&gt;По ночи замечаем мелькание фонарей со стороны перевала: кто-то спускается. Часто останавливаются, с Дашей обсуждаем, что вдруг что не так, стоит хотя бы кипятка сделать, чаем обогреть. Выдвигаюсь на встречу. Оказалось - два американских туриста. По методу &amp;ldquo;мальчик на пальцах объяснил, что его зовут Хуан&amp;rdquo;, выясняю, что у них всё ок, просто так получилось. Но предлагаю, что бы не искать места по ночи под лагерь ставится рядом с нами: есть удобное место. Соглашаются. Выясняем, что это уже седьмой день их пути и сегодняшняя ночёвка будет последней, после чего выходят в Джеты-Огуз и завершают трекинг. За сим отправляемся спать.&lt;/p&gt;
&lt;p&gt;Протопали примерно 19.8 км (20 по треку, минус 10% на &amp;ldquo;бороды&amp;rdquo;). Набрали 1095 м. Сбросили 75 м. Начали движение в 10:32. Окончили в 18:18. Суммарно шли 7 часов 45 минут.&lt;/p&gt;
&lt;h2 id=&#34;день-4-8-сентября-перевал-телеты-и-альплагерь-каракол&#34;&gt;День 4: 8 сентября, перевал Телеты и альплагерь Каракол&lt;/h2&gt;
&lt;p&gt;Перевальный день.&lt;/p&gt;
&lt;p&gt;Сначала шли вверх, пока вверх не кончится. Потом шли вниз, пока вниз не кончится.&lt;/p&gt;
&lt;p&gt;Дорога и сам перевал запомнились только тем, что дались как-то очень уж тяжело. На последних метрах трёхста подъёма даже пришлось перейти на счёт до 100 с короткими перерывами на восстановление дыхания. Списываю на аклиматизацию. Хотя ребята шпарят бодрее. Саня вообще норовит убежать без оглядки.&lt;/p&gt;
&lt;p&gt;Вид с перевала не особо примечателен. У меня даже фото не сохранилось. Тура нет. Записок нет. Оставляем свою, рукописную. И делаем небольшой тур.&lt;/p&gt;
&lt;p&gt;На спуске тоже было тяжело, особенно последний сброс очень крутой: большая нагрузка на ноги.&lt;/p&gt;
&lt;p&gt;Фотографии красноречивее слов:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250921015711.jpeg&#34; alt=&#34;&#34;&gt;
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250921015722.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;А это уже в самом низу, когда вышли к р.Уюнтор, в месте где в неё впадает р.Телеты:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250921020445.jpeg&#34; alt=&#34;&#34;&gt;
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250921020458.jpeg&#34; alt=&#34;&#34;&gt;
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250921020505.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Обед у нас затянулся. Пока обедали, регулярно подрывались шугать коров от наших вещей. В это же время спустилась с перевала пара из Испании. И сразу разбили лагерь. Как оказалось, они планировали идти на Ала-Кёль через перевал Панорамный, хотя для неподготовленных туристов тропа помечена как &amp;ldquo;not for hikking&amp;rdquo;. Даша подсказала им это, что бы не страдали лишний раз.&lt;/p&gt;
&lt;p&gt;Тем временем поднимаемся и топаем в сторону лагеря Каракол. Ноги идут очень медленно и печально. А вот пейзажи продолжают радовать глаз:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250922105502.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Лагерь разбили на полянах чуть выше самого альплагеря на притоке р.Каракол - р.Айтор. В этом месте есть выходы чистой и прозрачной воды: воды самих рек Каракол и Айтор мутные, для готовки малопригодные. Да&amp;hellip; Река Каракол появляется после слияния рек Уюнтор (на которой обедали) и Кельтор. Присутствует некая засранность, но если к коровьим лепёшкам и лошадиным каштанам уже как-то привыкли, то диверсии от двуногих прямоходящих не очень импонируют.&lt;/p&gt;
&lt;p&gt;Принимаем банные процедуры, ужинаем и на боковую.&lt;/p&gt;
&lt;p&gt;Ночевали с таким видом:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250922110146.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Протопали примерно 14.76 км (16.4 по треку, минус 10% на &amp;ldquo;бороды&amp;rdquo;). Набрали 860 м. Сбросили 1280 м. Начали движение в 7:40. Окончили в 17:58. Суммарно шли 10 часов 18 минут.&lt;/p&gt;
&lt;h2 id=&#34;день-5-9-сентября-озала-кёль-и-окрестности&#34;&gt;День 5: 9 сентября, оз.Ала-Кёль и окрестности&lt;/h2&gt;
&lt;p&gt;Подъём, завтрак. Прислушиваемся к ощущениям после вчерашнего перехода: мышцы шепчут, что они есть, но когда пошли, оказалось всё не так уж и плохо. Хотя, возможно, сказывается то, что у меня ушли два приёма пищи и рюкзак несколько полегчал.&lt;/p&gt;
&lt;p&gt;Подъём очень живописный, сильно отличается в лучшую сторону от подъёма на перевал Телеты. Где-то внизу в началале распадка был наш лагерь:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250923094429.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Водопады, водосливы:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250923094523.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;За две ходки по 45 минут достигаем приюта Сирота. Дальше крутизна подъёма несколько увеличивается, но нас уже не остановить. Начинаем замечаться идущие впереди группы, а так же сокращать расстояние с ними, хотя, по моим сугубо личным впечатлениям, идём мы медленно (хотя быстрее я бы и не смог, наверное).&lt;/p&gt;
&lt;p&gt;К приюту сверху шуруют партии &amp;ldquo;шерпов&amp;rdquo;: убирают базовый лагерь, который использовался альп-секцией. Картина эпичная: от формы одежды, до вариантов груза: тут и обвешанные до неузнаваемости рюкзаки, и холодильники, и генераторы. Лоси одним словом.&lt;/p&gt;
&lt;p&gt;Вскоре достигаем и последнего взлёта за которым поджидает нас озеро. Сам водопад:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250923100323.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;И мы на фоне него:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250923100301.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Здесь же нагнали (ну точнее нагнали раньше, но вышло недопонимание) российскую группу из трёх человек: Адыгея, Питер и (вроде) Москва. Это вторая русская группа на маршруте. Мы в меньшинстве.&lt;/p&gt;
&lt;p&gt;К двум часам дня вываливаемся наверх к озеру Ала-Кёль:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250923100410.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;На скалах есть места под палатки, с выложенными стенками. Но решаем, что слишком далеко от воды и хочется поближе к озеру. Ещё немного набора высоты, для обхода прижимов, совет от местного гида, что лучше становиться дальше, пропуск ещё одного стояночного места и к трём часам мы на месте нашей следующей стоянки.&lt;/p&gt;
&lt;p&gt;Разбиваем лагерь, обедаем и около пяти часов вечера решаем, что стоит сходить в радиалку до ледника и малых озёр, к &amp;ldquo;истоку&amp;rdquo; Ала-Кёль. Запасаемся штормовой одеждой (пытается греметь гром), водой и фонариками и в путь. Вова остаётся в лагере: кружится голова. Списываем на проявление горняшки.&lt;/p&gt;
&lt;p&gt;Ала-Кёль с обратной стороны, видно, почему брали штормовую одежду:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250923100955.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Озеро под ледником, грозовую тучу отнесло, проявилось голубое предзакатное небо:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250923101028.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Ледник Такыртор и безымянная вершина 4161м:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250923101306.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;С леднника идёт выход на целую пачку перевалов:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ала-Кёль Южный (3700)&lt;/li&gt;
&lt;li&gt;Семи Озёр (3876)&lt;/li&gt;
&lt;li&gt;Такыртор (4040)&lt;/li&gt;
&lt;li&gt;Щелкунчик (4080)&lt;/li&gt;
&lt;li&gt;Удобный (4000)
Хотя судя по нанесённым на карту трекам, ходится, в основном пер.Такыртор:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250923102034.jpeg&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Саня ломанулся на ледник, я с Дашей решаем не ходить туда. Делаем местные фото, отправляемся по направлению к озеру Сердечко. Вообще, мелкие озёра могут иметь занятную форму, вот, к примеру, &amp;ldquo;муравьед&amp;rdquo;:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250923102556.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;А вот почему &amp;ldquo;Сердечко&amp;rdquo; мы поняли только на следующий день:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250923102622.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Очень бросается в глаза то, что всё озёра мутные (Сердечко исключение - такое же бирюзовое, как Ала-Кёль), питающие реки - мутные, они же впадают в Ала-Кёль, а вот вытекающая река Кургак-Тор вполне себе прозрачная и чистая. Будто Ала-Кёль выполнять роль отстойника и фильтра.&lt;/p&gt;
&lt;p&gt;После озёр шуруем в лагерь. После кемпинга на мысу (координаты: N42.318710 E78.549037, тут можно разжиться платным интернетом через Старлинк) приходится уже включать фонарики. Тем временем тучи опять начинают закрывать небо и мелькают отдалённые всполохи молний. По дороге встречаются мрачные лица групп, которые только дошли. Непонятно: поздно вышли, или просто не были готовы к такому пути. Все шли в сторону кемпинга.&lt;/p&gt;
&lt;p&gt;Буквально по приходу в лагерь налетает снежный заряд. Вова к тому времени только-только накипятил воды, быстро делаем чай и разбегаемся по палаткам. Решаем оставаться без ужина и ложиться спать после чаепития. Завтра, вроде как намечена днёвка.&lt;/p&gt;
&lt;p&gt;Протопали примерно 16.38 км (18.2 км по треку). Набрали 1390 м. Сбросили 405 м. Начали движение в 9:16. Окончили в 20:17. Суммарно шли 11 часов 01 минуту.&lt;/p&gt;
&lt;h2 id=&#34;день-6-10-сентября-радиалка-на-перпанорамный-и-несостоявшаяся-днёвка&#34;&gt;День 6: 10 сентября, радиалка на пер.Панорамный и несостоявшаяся днёвка.&lt;/h2&gt;
&lt;p&gt;Изначально, при проработке машрута заинтересовало название перевала - Понорамный. Ну не просто так дают такие говорящие названия, значит стоит ожидать какого-то ВАУ-эффекта. Поэтому он и был обозначен в плане, пусть и опциональным пунктом. Ещё более опциональным пунктом был обозначен и пик 30 Лет ВЛКСМ.&lt;/p&gt;
&lt;p&gt;Подъём, завтрак, берём с собой мелкие рюкзачки со штормовой одеждой и питьём. Фонарик маст-хэв. Знаем мы эти &amp;ldquo;войти и выйти, делов на 5 минут&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Ночью, кстати, был заморозок: в некоторых бутылках и на лужах наблюдаем лёд.&lt;/p&gt;
&lt;p&gt;Но стоянках встречаем группу Владивосток-Питер и Адыгея-Питер-Москва(?). Вторые вроде как тоже хотели ходить перевал Панорамный, но отказываются от этого решения. Планируют подниматься на пер.Ала-Кёль Северный и разделить выход в Алтын-Арашан на два перехода. По факту обе группы уходят за перевал Ала-Кёль Северный.&lt;/p&gt;
&lt;p&gt;Мы же шуруем дальше. Переправляемся через исток р.Кургак-Тор, что вытекает из озера (и далее разливается предозёрным водопадом). Тут оказывается тоже есть места под палатки и достаточно удобные. Плюс недалеко от воды. На заметку: ближе ходить на Панорамный, но дальше до ледника.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250925130342.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;К перевалу идёт хорошая тропа, ошибиться и пройти мимо нужно постараться. Сначала траверсит склон вдоль озера, а затем начинает забираться вверх. Кому как, а мне показалось, что идти рядом по куруму значительно проще и быстрее, нежели по натоптанной сыпухе.&lt;/p&gt;
&lt;p&gt;Подъём на перевал как обычно, по правилу: вверх, пока вверх не кончится. Но наверху&amp;hellip; А на верху он оправдывает своё название!&lt;/p&gt;
&lt;p&gt;Тут и вид на окружающие снежные вершины (напомню: с вечера нас снегодождь загнал в палатки, а потом и ещё посыпал их немного некоторое время):
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250925130544.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250925130601.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250925130609.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Жаль только небо затянуло тучами, фотографиям явно не хватает красок. Но вид завораживающий.&lt;/p&gt;
&lt;p&gt;Вид на Ала-Кёль с перевала:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250925130713.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Всё бы ничего, но ветер лютый. Плюс по долине Каракола собирает грозовые тучи, которые могут в любой момент разрядиться снежным зарядом. В планах было попытаться подняться и на пик 30 лет ВЛКСМ, вот на него даже натоптанные тропы видно:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250925130904.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Но стушевались от непогоды. Решаем пропустить сиё действие.&lt;/p&gt;
&lt;p&gt;На этом же перевале сняли первую записку от сборной группы Минск-Москва-Алматы, ходившие 3 к.с. месяц назад:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250925131517.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Взамен оставили свою рукописную.&lt;/p&gt;
&lt;p&gt;Спуск получился быстрым, как и подходы в лагерь. Стоянки по дороге уже пустые: все снялись и топают на перевал. Группу Адыгея-Питер-Москва узнаётся по характерным одинаковым оранжевым накидкам от дождя на рюкзаках. Пока готовили и обедали они потихоньку лезли в перевал. Ну а пока мы сами спускались и шли обратно в лагерь, коллегиально решили, что стоит тоже подниматься, переходить перевал и где-то ночевать на другой стороне, упростив переход на завтра к Алтын-Арашану.&lt;/p&gt;
&lt;p&gt;Пока готовили обед да принимали пишу нас таки накрыл снежный заряд. Но сомнения по части отказала с подъёмом на пик 30 лет ВЛКСМ всё ещё остаются.&lt;/p&gt;
&lt;p&gt;После приёма пищи быстро сворачиваем лагерь. Что удобно, прямо от нас идёт тропка, которая соединяется с основным подъёмом на перевал. Подъём более крутой, но нас это не особо смущает. Зато не надо делать крюк назад.&lt;/p&gt;
&lt;p&gt;Вид на &amp;ldquo;исток&amp;rdquo; Ала-Кёль с перевальной тропы:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250925132501.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Помните про бесформенное озеро Сердечко? Отсюда становится понятно, почему оно так называется:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250925132544.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Обратите внимание, какой белый ледник! Это результат ночного, пусть и не обильного, снега, а так же только что прошедшего снежного заряда. Вчера он был аж чёрным. Сейчас же - красота!&lt;/p&gt;
&lt;p&gt;А вот на обратную сторону перевала виды не впечатлили:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250925132707.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Серо и неуютно. Плюс ещё и ветер дует. Спрятались за небольшой стенкой передохнуть немного:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250925133133.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Нахожу неприметный тур, а там записку от Московского турклуба Вестра, ходившие горный поход 3 к.с. тоже месяц назад:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250925133328.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;По аналогии, оставляем своё рукописное творение, после чего отправляемся на спуск.&lt;/p&gt;
&lt;p&gt;Спуск по сыпухе, местами получается &amp;ldquo;глиссировать&amp;rdquo;, поэтому перевальный взлёт остаётся за спиной достаточно быстро.&lt;/p&gt;
&lt;p&gt;Удобных мест для стоянок после перевала не так много. Точнее как: воткнуться есть всегда и везде. Если потребуется. Но что бы сразу и близость к воде и ровная площадка с подстриженным газончиком, то это нужно выбирать. В результате после перевала прошли примерно 6 км и почти из самого выхода в ущелье р.Арашан поставили лагерь. Но место достаточно чудное. Про козий помёт говорить не буду (хотя уже сказал), ибо следы пребывания коров, лошадей и приравненных к ним категорий крупного (и не только) рогатого (и не только) скота это данность почти для всех стоянок. Быстро привыкаешь.&lt;/p&gt;
&lt;p&gt;Предзакатные виды от лагеря:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250925134328.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250925134336.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250925134345.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250925134355.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250925134403.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Погода дала возможность отужинать, но на чай ресурса не хватило. Правда начавшийся дождик больше попугал и быстро прекратился, поэтому снова выползли из палаток, приготовили чаю и расползлись уже обратно до следующего дня.&lt;/p&gt;
&lt;p&gt;Протопали примерно 13.5 км (15 км по треку). Набрали 985 м. Сбросили 1460 м. Начали движение в 8:39. Окончили в 18:03. Суммарно шли 9 часов 23 минут.&lt;/p&gt;
&lt;h2 id=&#34;день-7-11-сентября-алтын-арашан-переброска-в-долину-реки-турген-ак-суу&#34;&gt;День 7: 11 сентября, Алтын-Арашан, переброска в долину реки Турген-Ак-Суу&lt;/h2&gt;
&lt;p&gt;Попытались встать к рассвету. Но не учли где точно встаёт солнце, поэтому больше наблюдали отсветы рассвета, нежели сам рассвет.
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250925142555.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250925142602.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250925142610.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Остановись, Мгновенье, ты прекрасно:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250925142846.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Ночью опять был заморозок, разукрасивший скудную местную растительность:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250925142740.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Как обычно, завтрак, сборы.&lt;/p&gt;
&lt;p&gt;Горы, палатка, утренний чай:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250925144101.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Выходим когда солнце уже почти полностью осветило долину:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250925142928.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Сегодня красок явно больше.&lt;/p&gt;
&lt;p&gt;Спуск с р.Арашан значительно проще, да и живописнее, чем спуск с пер.Телеты:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250925143105.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250925143124.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Радостные лица после спуска (попросили группу из Израиля нас сфотографировать, удивились, тому, как я понял что они Израильтяне :-) ):
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250925144446.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;До Алтын-Арашана дошли без напряга за две ходки. Там пооткисали в родоновых ваннах:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250925144559.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;После чего отобедали в местной кафешке (чай - бесплатно, за донат). К слову, не дорого.&lt;/p&gt;
&lt;p&gt;Там СаняЛ зазнакомился с Чито. Парень посетил уже под 6 десятков стран, изучает русский. Сам из Испании, говорит, сделал 6 перелётов, что бы попасть в Кыргызстан. Сидели общались. Жаловался, что накрыла горняшка в одном из самых неприятных проявлений. Пока живёт тут, приходит в себя:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250925145213.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Пока подходили к стоянкам, да купались в родоновых ваннах, обсудили необходимость топать ногами до Лесного, по дороге, по которой гоняют машины. Решили исходить из цены вопроса. СаняЛ ещё перед обедом закинул удочку и получилось выудить цену в 5000 сом. Решаем, что на четверых вполне себе норм и после обеда загружаемся в УАЗ (насколько в нём вместительный багажник!) и козлим (на первых метрах дороги по другому не скажешь) в сторону Лесного.&lt;/p&gt;
&lt;p&gt;Фраза дня: &amp;ldquo;дверь нормально закрывай&amp;rdquo;. Хотя кусок мха на бензонасосе тоже было эпично.&lt;/p&gt;
&lt;p&gt;До лесного добираемся где-то за час. Дальше небольшой квест с получением сдачи за парковку (заплачено за 7 дней, по факту 5 вышло&amp;hellip; быстро мы прошли маршрут однака). И выдвигаемся для начала посмотреть горячие источники на Ак-Суу, чисто на заметку.&lt;/p&gt;
&lt;p&gt;В Караколе заежаем в кафе, где фиксируем окончание пешей части:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250929173153.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Следующая точка: музей Пржевальского. Но добираемся уже к закрытию, поэтому просто запоминаем и откладываем на следующий день. Благо он будет по пути.&lt;/p&gt;
&lt;p&gt;Ну а следующая точка: ночёвка в долине реки Турген-Ак-Суу. Точку нашла Даша, изучая материалы по Киргизии. Приманило шикарными видами. Останавливаемся недалеко от метеостанции. Виды действительно хороши:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250925150330.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Рядом есть ручей с чистой водой. Разбиваем лагерь, кто-то устраивает постирушки, пока ещё светло. Ужинаем уже в темноте. На завтра решаем ехать на перевал Чон-Ашу, встречать рассвет. По ходу пьессы вспоминается и 
&lt;a href=&#34;https://frantsouzov.livejournal.com/183019.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;город-призрак Иныльчек&lt;/a&gt;. Возникает желание позавтракать там на кухне&amp;hellip; Но это уже дело следующего дня.&lt;/p&gt;
&lt;p&gt;Протопали примерно 4.7 км (5.22 км по треку). Набрали 55 м. Сбросили 530 м. Начали движение в 8:44. Окончили в 10:20. Суммарно шли 1 час 35 минут.&lt;/p&gt;
&lt;h2 id=&#34;день-8-12-сентября-перевал-чон-ашуу-музей-пржевальского&#34;&gt;День 8: 12 сентября, перевал Чон-Ашуу, музей Пржевальского&lt;/h2&gt;
&lt;p&gt;Встаём сильно затемно и быстро собираем лагерь без завтрака. Грузимся в машину&amp;hellip;&lt;/p&gt;
&lt;p&gt;Изначальным планом было просто сгонять на рассвет на перевал и вернуться в лагерь на завтрак. Но как уже сказал, вспомнили про 
&lt;a href=&#34;https://frantsouzov.livejournal.com/183019.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;город-призрак Иныльчек&lt;/a&gt;, поэтому и снимаем полностью лагерь.&lt;/p&gt;
&lt;p&gt;Потемну к перевалу особенно ничего не рассмотришь, но успеваем к рассвету. Жаль, что сам рассвет закрывают горы, но зато открывается вид на 5-7 тысячники с седыми вершинами:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250929164545.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Дорога через этот перевал как раз появилась при строительстве комбината в городе Иныльчек. Строили её девять лет с 1980 года. Перевал строителям пришлось опустить на 40 метров, что бы добиться приемлемых углов дороги. Высота 3805 метров.&lt;/p&gt;
&lt;p&gt;Дальше вниз. Вспоминаем, что город находится в погранзоне, пропуск куда мы не оформляли. Но решаем прокатиться докуда получится и на месте уже сориентироваться.&lt;/p&gt;
&lt;p&gt;Встречаем яков. Почему-то вызывают больше положительных эмоций, нежели коровы:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250929165324.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;В северной части Кыргызстана подобных встреч не было. Возможно, какие-то особенности климата и целесообразности.&lt;/p&gt;
&lt;p&gt;По долине реки Оттук идёт хорошая дорога, даже с асфальтовым покрытием и почти без ям. Вот наш пепелац на фоне отрогов подсвеченных восходящим солнцем:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250929170212.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Ествественно дальше был приграничный КПП. Заспанные погранцы сказали, что без пропусков нини, поэтому разворачиваемся и едем обратно на перевал принимать солнечные ванны и завтракать (завтрак на 3500):
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250929170402.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Сомневаемся в необходимости залезть на один из местных пупырей: от места нашей остановки наверх даже трек какой-то проглядывается и набрать каких-то 500 метров (делов-то: войти и выйти). Но лень берёт своё и двигаемся в сторону музея Пржевальского.&lt;/p&gt;
&lt;p&gt;С обратной стороны открываются виды на то, что было скрыто темнотой на подъезде:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250929170836.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;А ещё встречаем около 5 или 7 (точно так подсчитать не смогли) белоголовых грифов: терзали падшего жеребёнка. СаняЛ погонялся за ними на коптере.&lt;/p&gt;
&lt;p&gt;В музее вписались на экскурсию, пока ожидали начала погоняли по территории. Ребята устроили фотосессию с переодеванием:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250929171257.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Сижу за решёткой в темнице сырой:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250929171433.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Музей небольшой. К повторному посещению не рекомендовал бы, но если впервые, то имеет смысл взять сразу с экскурсией. Тем более, что 
&lt;a href=&#34;https://vladlib.ru/n15_04_22_7/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&amp;ldquo;испытательным сроком&amp;rdquo;&lt;/a&gt; у Пржевальского был наш родной Приморский край (тогда Уссурийский край).
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250929172058.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Здесь же находится и его могила.&lt;/p&gt;
&lt;p&gt;Обедаем в Караколе местной кухней (TBD: вспомнить бы где), порции такие, что, я и Даша просим уложить в контейнеры и забрать с собой.&lt;/p&gt;
&lt;p&gt;Следующая наша цель: ущелье Барскаун с его водопадами (с поэтическими названиями Слезы Барса, Чаша Манаса), перевалы Барскон (3819) и Соёк (4028), а так же ущелье Сказка. Но понимаем, что сегодня уже не успеваем, поэтому в дороге бронируем гостевой дом в Тосоре и сразу отправляемся туда.&lt;/p&gt;
&lt;p&gt;На подъезде заприметили интересную косу (N42.170229 E77.474100) и без лишних раздумий туда заскочили. В закатном солнце всё выглядит очень тепло и лампово:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250929172723.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Заселяемся с небольшой заминкой: хозяев не дозовёшься. Но в остальном всё было неплохо. По полной загрузили стиральную машину, перетряхнули рюкзаки, помылись, побрились и спать уложились. Нет, ещё поужинали :)&lt;/p&gt;
&lt;h2 id=&#34;день-9-13-сентября-ущелье-барскаун-перевал-соёк-ущелье-сказка-каньон-ак-сай&#34;&gt;День 9: 13 сентября, ущелье Барскаун, перевал Соёк, ущелье Сказка, каньон Ак-Сай&lt;/h2&gt;
&lt;p&gt;Подъём, завтрак, сборы. Хозяев нет, поэтому закрываем помещение, ключ под коврик и сообщение в Booking, в ответ пожелание хорошего пути.&lt;/p&gt;
&lt;p&gt;На водопадах особо не задержались. Вова сфотографировался с бюстом Гагарина, который посещал эти места. СаняЛ облетел водопады на коптере, на чём решили, что мы туда сходили.&lt;/p&gt;
&lt;p&gt;Первый перевал - Барскон, открывает путь на горное плато, как обычно, не без горного озера:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250929180120.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;И вид с самого перевала на север (в сторону ущелья Барскаун):
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250929180222.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Дорога по плато в один момент раздваивается: прямо на перевал Соёк, а направо - золоторудный карьер Кумтор. Через Соёк дорога дальше уходит в Китай. Много китайских рабочих, как потом нам пояснили: дорогу будут закатывать в асфальт до самого Китая. Инвестиционный проект. От как.&lt;/p&gt;
&lt;p&gt;Виды с перевала Соёк:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250929180819.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250929180842.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Даша говорит, что это её первая высота 4000+:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250929180831.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Но вроде как в Китае она забиралась и повыше. Сходимся во мнении, что нужно ещё куда-то ножками сходить, что бы уже всё по чесноку было.&lt;/p&gt;
&lt;p&gt;Мимо козерога на фото решил заскочить на насыпь ЛЭП лёгким бегом. Бегать на 4000+ скажу я вам&amp;hellip; Не нужно :) Сердце не сразу, но раскрутилось до состояния &amp;ldquo;стучит в ушах&amp;rdquo;, плюс ещё металлический привкус во рту минут 20-30 не проходил.&lt;/p&gt;
&lt;p&gt;На обратном пути пришлось достаточно долго простоять перед спуском на перевале Барскон: пропускали конвой тяжелогрузов.&lt;/p&gt;
&lt;p&gt;В общем, добираемся и до Сказки&amp;hellip; что могу сказать: красиво, но слишком многолюдно. Фото красноречивее слов:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250929182719.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250929182728.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250929182741.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;А некоторые результаты водной, ветровой и прочих эрозий вызывают странные ассоциации:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250929183205.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;В планах было здесь же и пообедать, на картах даже был обозначен источник воды, но внешний вид его нам доверия не внушил, а запасов с собой у нас не было. Поэтому собираемся и отчаливаем.&lt;/p&gt;
&lt;p&gt;На обед остановились в какой-то придорожной забегаловке. И он нам запомнился. Первый и единственный раз, когда еда была отвратительной. Точнее мясо. Вроде и говядина, но жира там было больше, чем мяса. Если лагман босо ещё как-то зашёл, то кууардак был совсем не совсем. Но ничего, когда совсем всё хорошо, это тоже плохо.&lt;/p&gt;
&lt;p&gt;Далее нас ждал каньон Ак-Сай (&amp;ldquo;Забытые реки&amp;rdquo;). По дороге прикупили арбуз. Если сам каньон лично у меня не вызывал ВАУ-эффекта: серость и серость, то прогулка на видовую уже от озера Иссык-Куль и обзор сверху несколько изменило впечатления. Жаль только, что к этому моменту небо затянули тучи: с солнечной подсветкой было бы больше красок.&lt;/p&gt;
&lt;p&gt;Итак, на картах maps.me сама территория значится как горы Кызылтау. И все эти хребтики, каньоны - результаты водной эрозии. И основа - осадочные породы:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250929185152.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Ну и наши мордолица на фоне, куда без них:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250929185308.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;В планах у нас остаться ночевать на берегу озера Иссык-Куль. Вот только не совсем мне ясен порыв по которому мы решили ехать дальше вдоль берега. Могу придумать оправдание: искать воду? :) В общем на картах дорога есть, и даже в начале она очень хороша. Правда в какой-то момент начинаются промоины. Первую аккуратно прокатываем, через некоторое время ещё одна со спрыгом явно не под Хорька, но есть объезд по берегу с неиллюзорным шансом закопаться и организовать себе очень нетомный вечер. Пока ходим с Вовой примеряемся, СаняЛ жопом сдаёт по промоине, чем минует спрыг и чётенько закатывает по заезду. Кросавчег! В общем, продолжаем путь дальше. Промоины были ещё, но далеко не такие эпичные, даже из машины не выгружались.&lt;/p&gt;
&lt;p&gt;Тем временем&amp;hellip; А тем временем поднялся некислый такой ветер, который начал гонять пыль по всему берегу, иногда даже поднимая небольшие песчаные вихри. В общем, к своему великому сожалению, но ночёвку на берегу решаем отменить и ехать к следующей точке - некий 
&lt;a href=&#34;https://omaps.app/kz57qD7Kfb/%D0%92%D0%BE%D0%B4%D0%BE%D0%BF%D0%B0%D0%B4&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;безымянный водопад&lt;/a&gt; на реке Арктерек. Благо, что от района озера Кара-Куль (мутное какое-то), куда мы проехали вдоль берега, обогнув весь массив вымытых гор, уже идёт нормальная грунтовая дорога.&lt;/p&gt;
&lt;p&gt;На въезде в Кызыл-Туу у колонки пытаемся набрать воды, но терпим фиаско. Как позже узнали: колонки отменили, остались только неработающая фурнитура. Видим местного, моющего машину, он с радостью разрешил нам набрать воды да ещё угостил вкуснейшими яблоками.&lt;/p&gt;
&lt;p&gt;Пробираемся дальше через посёлок, уже изрядно стемнело. Пересекаем реку по мостику, и упираемся в ворота, открытые, но ворота. Аккуратно заезжаем, встречаем местного дедулю, пытаемся объясниться (по-русски говорит очень невнятно). В общем это территория &amp;ldquo;совхоза&amp;rdquo;, что бы это ни значило (СОВместное ХОЗяйства родом из СССР, и что оно может означать сейчас - это вопрос). Но со словами: &amp;ldquo;проезжайте до конца, становитесь вдоль забора, ставьте палатки, отдыхайте&amp;rdquo; (пересказ вольный) он разрешает нам расположиться на ночлег. Что и говорить: от души!&lt;/p&gt;
&lt;p&gt;В конце, возле плетёного забора действительно очень удобная полянка. Да ещё тепло! И ветра здесь нет от слова совсем. В общем лагерь получился очень уютным:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250930194019.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Ужин не делали, ели арбуз того и хватило. Кто-то сидел в тырнете: сказывалась близость населённого пункта, кто-то валялся и пялился в звёздное небо. Ко сну отошли значительно позже всех предыдущих ночёвок, больно уж душевно было.&lt;/p&gt;
&lt;h2 id=&#34;день-10-14-сентября-водохранилищие-орто-токой-озеро-сон-кёль-перевалы-калмак-ашуу-терскей-торпок-и-молдо-ашуу&#34;&gt;День 10: 14 сентября, водохранилищие Орто-Токой, озеро Сон-Кёль, перевалы Калмак-Ашуу, Терскей-Торпок и Молдо-Ашуу&lt;/h2&gt;
&lt;p&gt;Самый длительный автопробег, но об этом далее. С вечера по причине поздней установки лагеря запечатлеть весь объём лухари у нас не получилось, поэтому немного утренних фотографий.&lt;/p&gt;
&lt;p&gt;Для начала водопад, в роли которого оказался местный гидроузел:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250930223542.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Он оказался буквально &amp;ldquo;за воротами&amp;rdquo; нашей стоянки:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250930223652.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250930223659.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Тополиная аллея, в конце которой мы и стояли:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250930223724.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Ну и пейзажи с бек-ярда:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250930223802.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Завтрак, сборы, в путь. Первая точка на сегодня - Орто-Токойское водохранилище.&lt;/p&gt;
&lt;p&gt;Пока ехали, в одном из мест дорожных работ заскочили жёстко на асфальтовую ступеньку. После чего (хотя может это и совпадение: в горах машина и раньше лениво слушала газа, возможно проблема просто усугубилась) стал вываливаться временами чек на приборке, после которого на автомате оставались только первая и третья скорости. После глушения двигателя чек сбрасывался, машина некоторое время ехала на всех четырёх скоростях, но потом всё возвращалось на круги своя. Забегая вперёд: так и проездили до самого возврата машины.&lt;/p&gt;
&lt;p&gt;По пути к нему встретили корабли пустыни:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250930224050.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;А про водохранилище&amp;hellip; Мы его не увидели. Судя по картам, дорога проходит прямо вдоль него, но выглядит всё так, что воды мало в этому году и водохранилище заметно спущено. В общем, ни фотографий, ни впечатлений. Поэтому движемся дальше к озеру Сон-Кёль, куда навигатор прокладывает путь через перевал Калмак-Ашуу.&lt;/p&gt;
&lt;p&gt;Где-то на подъёме на перевал:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250930224319.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Перевал не сложный, дорога нормальная. Наверху, как обычно видовая и куча туристов. После дорога вываливается на горное плато, где и расположено озеро. А высота как-бы больше 3000 метров!&lt;/p&gt;
&lt;p&gt;На берегу озера очень много стоянок, юрточных кемпингов и вот этого всего. При желании можно без палатки ночевать и без горелки и котлов кушать. Но это не наш метод. Про наш метод, на примере обеда, чуть дальше.&lt;/p&gt;
&lt;p&gt;Изначально в планах было заезжать сюда через перевал Терскей-Торпок, он же, в народе, &amp;ldquo;33 попугая&amp;rdquo;, вроде как по числу поворотов на нём. Хотя я пересчитвал по карте, насчитал 29. Потом 28. Решил, что термин &amp;ldquo;поворот&amp;rdquo; может быть очень растяжимым понятием. В общем, раз навигатор привёл не через него, то решаем посмотреть на попугаев хотя бы сверху:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250930225105.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250930225054.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Ветер быстро загоняет нас в машину и выдвигаемся в сторону перевала Молдо-Ашуу. По пути начинаем высматривать место получше, что бы съехать и пообедать на берегу озера.&lt;/p&gt;
&lt;p&gt;Пообедать. На берегу озера. Я же написал про ветер? Написал. В общем до берега мы всё же доехали, вышли, потоптались как пингвины из мультика Мадагаскар у побережья Антарктиды, сели обратно в транспорт и поехали искать более удачные места для стоянки. К слову ветер такой, что даже барашки по озеру гуляли:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020250930225658.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Был даже соблазн в ближайшем юрточном лагере в кафешку заехать, но мы побороли эту слабость. И нашли самое подходящее для нас место: русло высохшей реки! Вот он - наш метод!&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020251001114050.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Действительно, в такой &amp;ldquo;ветрозащите&amp;rdquo; оказывается значительно меньше воздействия непогоды. А ясное небо и солнце делают остановку ещё более приятной.&lt;/p&gt;
&lt;p&gt;Заканчиваем обед и по коням. По дороге есть обозначения петроглифов, которые скорее всего интересны для тех, кто в теме, для нас же, единожды виденные, особого интереса уже представляют. Шутим, что надписи на скалах типа &amp;ldquo;ДМБ 95&amp;rdquo;, &amp;ldquo;Здесь был Вася&amp;rdquo; и &amp;ldquo;Лена + Паша = ❤️&amp;rdquo; через тысчётнку-другую лет тоже будут считаться за петроглифы.&lt;/p&gt;
&lt;p&gt;Так и доезжаем до перевала Молдо-Ашуу. И что я могу вам сказать. А он действительно красив! Как при обзоре сверху, так и с промежуточных остановок. И пусть поворотов здесь меньше, чем на Терскей-Торпок, но видов это ни разу не умаляет.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020251002105220.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020251002105234.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020251002105247.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Хотя по мне, так фотографии не сильно передают картинку. Но что есть, то есть.&lt;/p&gt;
&lt;p&gt;В конце спуска с перевала (или в начале подъёма, как смотреть) есть ручей с чистой водой. Останавливаемся, пополняем дежурные запасы воды.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020251002105507.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;На подъездах тоже не менее эпичные виды:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020251002105547.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Ближе к цивилизации, при выезде на основную трассу встречает заправка с забавным для слуха русско-говорящего человека:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020251002130827.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Дальше только путь. Как у самурая (нет). Из наиболее ярких воспоминаний это город Нарын с его фейковыми видовыми типа &amp;ldquo;Мост&amp;rdquo; (никакого моста нет) и перекопанной центральной улицей, при чём так, что иногда по перевалам кажется, что проще ехать; да фары нашего пепелаца, которые на ближнем свете слепят всех, о чём потом сообщили арендодателю. Время от времени делали остановки сбросить чек и вернуть четвёртую скорость.&lt;/p&gt;
&lt;p&gt;По пути делаем бронирование в Балыкчи, куда добираемся уже затемно, потом ещё и не сразу находим гостевой дом: с локацией адресов тут то ещё приключение. Гостевой дом оформлен в стиле &amp;ldquo;в деревне у бабушки&amp;rdquo;, причём сделано это сознательно, но тоже с включённым завтраком. Ужинаем арбузом, купленном в Нарыне, приводим себя в порядок и спать. За сегодня был самый длинный автопробег: около 600 км.&lt;/p&gt;
&lt;h2 id=&#34;день-11-15-сентября-люксембург-клубника-ала-арча-и-хижина-рацека&#34;&gt;День 11: 15 сентября, Люксембург, клубника, Ала-Арча и хижина Рацека.&lt;/h2&gt;
&lt;p&gt;Основная цель сегодняшнего дня это добраться до Ала-Арчи и подняться к хижине Рацека, что бы дальше сходить пик Учитель.&lt;/p&gt;
&lt;p&gt;Ночью спал плохо, а под утро на чердаке активизировалась голубятня: кто бы мог думать, что голуби, помимо своих &amp;ldquo;курлык&amp;rdquo; ещё и топают как слоны. Поднялся рано. Пока ребята досматривали сны, накипятил воды в чайнике и залил термоса. Немного сложил свой рюкзак, отправил поздравления для дочери с днём рождения. И уселся дочитывать книгу: поздний Лукьяненко куда-то скатился, либо я уже перерос: насколько мне понравилось в своё время &amp;ldquo;Не время для драконов&amp;rdquo;, как минимум, концептуально, и насколько убого &amp;ldquo;современное&amp;rdquo; продолжение &amp;ldquo;Не место для людей&amp;rdquo;, но узнать, что же будет в концовке было делом принципа.&lt;/p&gt;
&lt;p&gt;К 8:30 подоспел завтрак. Без изысков, но сытно. Загружаемся. Просим у хозяйки немного Ферри: добавить в бачок омывателя, что бы смыть следы тушек насекомых на стекле. В путь отправляемся только в начале десятого или около того. Не рано.&lt;/p&gt;
&lt;p&gt;Под пути пытаемся заехать на рынок, но что-то нас останавливает. Поэтому посещаем SPAR, пьём кофе, перекусываем и дальше в путь.&lt;/p&gt;
&lt;p&gt;В Боомском ущелье пропускаем коварный знак 40 при ограничении 90 на маршруте. Ну и естественно попадаем на радар патруля. Ощущения от общения с местными гайцами, будто вернулся в наши 90е. Кто знает о чём я, тот меня поймёт. Без деталей, но пришлось расстаться с 5000 сом. Было огромное желание растрясти и на побольше, но на штраф-стоянку развести не вышло, при наличии в машине трёх водителей. И таких бедолаг как мы скопилось изрядно.&lt;/p&gt;
&lt;p&gt;По дороге заезжаем в Люксембург:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020251006132443.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;А на подъезде к Кашка-Суу на полях покупаем (внимание: 15 сентября!) ведро клубники за 500 сом:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020251006132548.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;В Кашка-Суу останавливаемся на обед в Бакай Fish (обслуживание неторопливое, но кормят вкусно). Воспоминания о форели до сих пор вызывает обильное слюноотделение:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020251006132857.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;К парку Ала-Арча подъехали около 15:40. Здесь оставляем машину на платной стоянке, перекидываем рюкзаки, оставляя только то, что нужно. Не раньше, чем в 16:00 оплачиваем вход в парк (200 сом с человека, платить через терминал наличкой /сдачу не даёт!/ или картой /если есть/). Дальше на шатле добираемся почти до реки Ак-Сай вдоль которой и идёт подъём до хижины Рацека:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020251006133937.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Маршрут начинаем около 16:45&amp;hellip; Если верить описаниям, то подъём до хижины занимает 7-8 часов. Морально настроился ставить лагерь в полночь. Да ещё и прогноз на следующий день какой-то не прогноз. Но надеемся, что пронесёт.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020251006134159.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Стрижка только начата&amp;rdquo; (c):
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020251006134255.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Подъём изрядно вымотал: по разным прикидкам набор от 1100 до 1300 метров. Пришли, естественно, уже по темноте, но потребовалось на это дело только 3:45. Кто молодцы? Мы молодцы!&lt;/p&gt;
&lt;p&gt;На хижине &lt;del&gt;утиль-сбор&lt;/del&gt; рекреационный сбор 150 сом с человека. Можно ночевать на нарах в тепле за 850 сом/чел/ночь. Можно покушать в баре или отведать чего горячительного там же. Цены прикидывайте. Из бонусов: бесплатный WiFi, но на ночь его гасят. Гонят его через ретранслятор направленный на одном из пиков, хитро. Мест для палаток много, так что находим подходящее без проблем. Мыши тут шныряют чуть не по ногам, так что стоит быть осторожнее с продуктами.&lt;/p&gt;
&lt;p&gt;От ужина решаем отказаться, попить только чай и ложиться спать, так как очень сильно устали, но при этом форелька ещё не до конца провалилась.&lt;/p&gt;
&lt;p&gt;Зашли и в бар, пообщались с барменом. Сделали запись в гостевой книге. Уточнили прогноз на завтра, что вкупе с замечаниями бармена несколько поубавило оптимизма. С тем и отправились спать.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020251006135546.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;день-12-16-сентября-пик-учитель-горячие-источники-возвращение-в-бишкек&#34;&gt;День 12: 16 сентября, &lt;del&gt;пик Учитель&lt;/del&gt; горячие источники, возвращение в Бишкек&lt;/h2&gt;
&lt;p&gt;А ночью пошёл снег. Точнее сначала дождь. А потом снег. А когда и в перемешку.&lt;/p&gt;
&lt;p&gt;В палатках отлёживались до талого. Пока не поняли, что мало чего поменяется в окружающей нас действительности. Интернета не было, уточнить по прогнозу тоже не получилось. Хотя достаточно было выглянуть за порог.&lt;/p&gt;
&lt;p&gt;Утренние пейзажи, конечно, были великолепны:
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020251006140331.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020251006140343.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Но прикинув всё за и против: это и наличие тёплых вещей и целостность ботинок, решаем, что на Учитель мы не идём. Безусловно, это жирный минус к морали группы. Но лучше не сходить на гору, чем оставить там частичку (привет обморожения) или даже всего (без комментариев) себя.&lt;/p&gt;
&lt;p&gt;Завтракаем, собираем лагерь и дуем вниз. Где нас встречает ещё более хмурая погодка с обложным дождём. Дожидаемся шатла и выбрасываемся до стоянки. Максимально оперативно переодеваемся, загружаемся и выдвигаемся.&lt;/p&gt;
&lt;p&gt;По пути прикидываем, куда бы ещё заехать, решаем поискать горячие источники в окрестностях. Определяем пару точек и останавливаемся на обед в районе Кашка-Суу: какой-то кемпинг/база отдыха с беседками. Явно уже в состоянии &amp;ldquo;давненько тут никого не было&amp;rdquo;. На дурачка планировалось воспользоваться навесом под которым приготовить и поесть. Но подошёл или охранник или хозяин. Пришлось сторговаться на на 200 сом, что бы часик поэксплуатировать видавший виды навес. Мужичок поворчал, что все прижимистые стали, но деньгу взял и нас пустил.&lt;/p&gt;
&lt;p&gt;Теперь к источникам. Интернеты и навигатор подсказали наличие источников в Аламундунском ущелье. Сначала доехали то конца дороги, где значился &amp;ldquo;Тёплые ключи - лечебно-оздоровительный комплекс&amp;rdquo;, но ничего путного там не заметили. По пути туда примечаем &amp;ldquo;Mountain View Resort&amp;rdquo; и туда же заскакиваем на обратном пути. И это было верным решением: всё, что нам требовалось! Тёплые бассейны под открытым небом (вдвойне приятно, когда вокруг идёт дождь, а ты греешься). Хамам, сауна и баня на дровах: посетили всё. Мораль группы вернулась к исходному состоянию.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020251006142542.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;По дороге к источникам Вова срастил жильё у того же человека, где мы ночевали по прилёту: да, вышла накладка изначально, но то, как она была исправлена, нас очень устроило (&amp;ldquo;ошибаться можно - врать нельзя&amp;rdquo; (с)). Получилось заселиться на 3 ночи за 15 тыс сом в трёхкомнатную квартиру с двумя санузлами и огромной кухней-гостинной.&lt;/p&gt;
&lt;p&gt;На этом день можно считать завершённым. Больше особых впечатлений он не оставил. По крайней мере у меня.&lt;/p&gt;
&lt;h2 id=&#34;день-13-17-сентября-бишкек-конная-прогулка-чемпион-самса&#34;&gt;День 13: 17 сентября, Бишкек, конная прогулка, Чемпион Самса&lt;/h2&gt;
&lt;p&gt;Дрыхнем. Ленимся. Продолжаем чистить пёрышки.&lt;/p&gt;
&lt;p&gt;Погуляли по точкам интереса в Бишкеке, которые планировалось посетить по прилёту, но не вышло, из-за длительности оформления карт. Город достаточно зелёный. Много бульваров. Деревьев. Хороши местные кофейни.&lt;/p&gt;
&lt;p&gt;Сращиваем конную прогулку на вечер. Утверждают 2-3 часа с подъёмом в горы. Решаем поглядеть. По факту оказалось, что минут за 40 смогли обернуться. Инструктор утверждает: быстро ехали! Вечно этот Владивосток быстро &amp;ldquo;едет&amp;rdquo;: семидневный маршрут за пять проскочил, двухчасовой конный за сорок минут. Ни в какие ворота прям.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020251006143929.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020251006143940.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;По возвращению посетили рынок Орто-Сай. Ну рынок и рынок, но там есть павильон &amp;ldquo;Чемпион-Самса&amp;rdquo;. Такой вкусной самсы я ещё не ел! Вова в очередь вообще раза три становился. Кушали там же рядом, на бордюрке, подстелив картонку под пятую точку. Будете там - обязательно посетите.&lt;/p&gt;
&lt;h2 id=&#34;день-14-18-сентября-бишкек-мы-безлошадные-ошский-рынок-и-иностранцы-афтепати&#34;&gt;День 14: 18 сентября, Бишкек, мы безлошадные, Ошский рынок и иностранцы, афтепати&lt;/h2&gt;
&lt;p&gt;После завтрака Вова стартует мыть машину, благо мойка недалеко от нас, в шаговой доступности. Через час зовёт к себе пить кофе в Choccoberry. Собираемся и к нему. Пропускаем по чашке, кто кофе, кто какао и забираем машину из мойки рядом.&lt;/p&gt;
&lt;p&gt;Успешно её сдаём. Говорим про проблемы с тягой в горах и с фарами. Новых сколов и трещин не сделали, поэтому ничего сверху не доплачиваем. И отправляемся на Ошский рынок на общественном транспорте. Стоит отметить, что неплохо показывает маршруты и ближайшие автобусы 2gis, понятно - нужен интернет живой.&lt;/p&gt;
&lt;p&gt;На рынке закупаемся кто чем, я же только сыр купил с абрикосом. Был смешной момент возе одного из лотков: что-то смотрим, продавец, видя нашу заинтересованность:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;П: One hundred&amp;hellip;&lt;/li&gt;
&lt;li&gt;Мы: да можно по Русски&lt;/li&gt;
&lt;li&gt;П: Ой, а я подумала - иностранцы!&lt;/li&gt;
&lt;li&gt;Мы: ну&amp;hellip; формально-то да&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Как обычно, не обходимся без арбуза, так как отобедать решаем тут же в столовой, а как мы уже поняли: неплотно покушать в Киргизии не получается. Всё очень вкусное и много.&lt;/p&gt;
&lt;p&gt;До дома доходим пешком: что там 5 км по ровной поверхности.&lt;/p&gt;
&lt;p&gt;Кто собирается. Но в целом - лежбище морских котиков. А под вечер решаем посетить ирландский паб в надежде послушать живую музыку и подвести черту эдаким афтерпати. Посидели чудесно, пиво понравилось, сыграли пару партий в бильярд (правила я опять забыл):&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020251006150545.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020251006150618.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;день-15-19-сентября-до-свидания-кыргызстан&#34;&gt;День 15: 19 сентября, до свидания Кыргызстан&lt;/h2&gt;
&lt;p&gt;Эх. В любом походе наступает этот день. День отъезда. А на душе лёгкая грусть, как после окончания хорошей книжки.&lt;/p&gt;
&lt;p&gt;Подъём, завтрак. Поход в кофейню, на этот раз в Бублик. Дособираем и допаковываем рюкзаки. Такси, аэропорт, самолёт.&lt;/p&gt;
&lt;p&gt;До свидания Кыргызстан. И огромное спасибо нашей команде за это путешествие!
&lt;img src=&#34;https://htrd.su/blog/2025/10/13/kyrgyzstan_2025/_images/Pasted%20image%2020251006151210.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;эпилог&#34;&gt;Эпилог&lt;/h2&gt;
&lt;p&gt;Душевно прошли 69.14 км на пешеходной части (и ещё километров 14 в Ала-Арче с набром 1300 и километров 10-12 на озеро Кель-Тор) за 5 дней. Хотелось бы больше, но как вышло.&lt;/p&gt;
&lt;p&gt;Горняшка никого особо не стукнула. Повозила немного Вову после подъёма на Ала-Кёль, но и быстро отпустила.&lt;/p&gt;
&lt;p&gt;На наших маршрутных перевалах (Телеты, Ала-Кёль Северный, Панорамный) в первую половину сентября кошки не нужны. Протаскали зря. Не пригодились и гамаши. Но они пусть лучше будут, чем вдруг присыпет снегом, а их нет.&lt;/p&gt;
&lt;p&gt;Очень повезло с погодой. Хотя на пик Учитель она уже не дала сходить. Что немного огорчило.&lt;/p&gt;
&lt;p&gt;Зря протаскал и некоторые тёплые вещи: комплект Polartec 100 верх/низ (движение и сон). Не пригодилась и тонкая термуха на низ. Тёплую кофту из Polartec Thermal Pro тоже надел ровно один раз - в основном накидывал лёгкую пуховку. Но это нам с погодой повезло: в дождь точно пуховка не вывезет. Зря взял и софтшельную куртку, вполне достаточно обычной мембраны, в тех условиях она оптимальна. Не потребовался и на всей пешей части павер-банк: тут нужно пересматривать подход к энергообеспеечению похода. К примеру, брать 1.5В Li-Ion &amp;ldquo;химию&amp;rdquo; для навигатора и компактный зарядник от USB (есть и батареи со встроенным портом зарядки) и обходится 1-2 комплектами батарей для навигатора, вместо комплекта на 1.5 дня. Тот же фонарик на комплектном аккумуляторе (Petzl ACCU CORE) отработал всё время похода без подзарядки (если же двигаться в ночи, то второй комплект обязателен).&lt;/p&gt;
&lt;p&gt;Очень вкусная и не дорогая местная еда. Особенно мне понравился Лагман Босо и Куурдак. Рекомендую! Чемпион Самса тоже обязателен к посещению (г.Бишкек).&lt;/p&gt;
&lt;p&gt;Пропуск в погранзону нужно делать сразу без раздумий, если берётся машина в аренду: если освободятся дни, есть куда сгонять и что посмотреть.&lt;/p&gt;
&lt;p&gt;Негативного отношения от местных или других групп не ощутили. Ровным счётом наоборот.&lt;/p&gt;
&lt;p&gt;Воду для питья и готовки всегда стоит иметь в машине про запас. Не всегда получится остановиться и переночевать у реки с чистой водой.&lt;/p&gt;
&lt;p&gt;Отлично работает Booking для бронирования, но найти точку бывает проблемно. Лучше иметь возможность совершать звонки что бы уточниться. МТС (Дальневосточные тарифы) вполне не дорого с этим справляются. Раз про операторов начали, то M8.tel предоставляет тарифы на eSIM чисто для интернета. Отработал без проблем. Активируется по началу работы, что тоже очень удобно при покупке заранее. Хотя ребята нашли и дешевле. Достаточно живо общение идёт через WhatsApp.&lt;/p&gt;
&lt;p&gt;Многие частники иногда идут на приём денег в рублях, особенно когда про крупные суммы речь идёт: прикидывают курс прямо сейчас и указывают цену. На Booking цена в долларах, стоит сразу пересчитывать в сомы, наиболее близкое значение будет выходить.&lt;/p&gt;
&lt;p&gt;Если не планируется много городских и культурных развлечений, то вполне хватит на весь поход 30 тыс руб. Культурные горячие источники, конные прогулки и так далее будут есть эту сумму нещадно. Аренда Хорька 98 года на 14 дней вышла примерно в 50 тыс руб.&lt;/p&gt;
&lt;h2 id=&#34;фото-треки&#34;&gt;Фото, треки&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Фото:
&lt;ul&gt;
&lt;li&gt;Мои: 
&lt;a href=&#34;https://disk.yandex.ru/a/KFtmfNlcpajlrA&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://disk.yandex.ru/a/KFtmfNlcpajlrA&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Отчёты:
&lt;ul&gt;
&lt;li&gt;Отчёт о путешествии от Даши: 
&lt;a href=&#34;https://dzen.ru/a/aUa47k-K1iSA1GSP&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://dzen.ru/a/aUa47k-K1iSA1GSP&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;GPS:
&lt;ul&gt;
&lt;li&gt;Тут всё в одном файле: точки, треки на Коль-Тор, пешая часть и трек (неполный) до Хижины Рацека и обратно, все точки сняты с местности:
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;_files/kyrgyzstan-2025-result.zip&#34;&gt;kyrgyzstan-2025-result.zip&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>NuttX: работа с тредами в GDB и OpenOCD</title>
      <link>https://htrd.su/blog/2025/06/23/nuttx-gdb-openocd-threads/</link>
      <pubDate>Mon, 23 Jun 2025 14:03:01 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2025/06/23/nuttx-gdb-openocd-threads/</guid>
      <description>&lt;p&gt;Просто заметка, что бы самому потом не потерять.&lt;/p&gt;
&lt;p&gt;Руководство для отладки потоков в RTOS NuttX:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://nuttx.apache.org/docs/latest/quickstart/debugging.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://nuttx.apache.org/docs/latest/quickstart/debugging.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Отмечу, что последние версии GDB и OpenOCD включают весь необходимый софт для работы. А если грузить ELF как-то так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;arm-none-eabi-gdb main.elf &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;  -ex &lt;span class=&#34;s2&#34;&gt;&amp;#34;target extended-remote | openocd -f interface/stlink.cfg -f &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;OPENOCD_CFG&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; -c &amp;#39;gdb_port pipe&amp;#39; -c &amp;#39;\$_CHIPNAME.cpu0 configure -rtos nuttx&amp;#39;&amp;#34;&lt;/span&gt; -x openocd_nuttx_gdb.rc
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;То содержимое &lt;code&gt;openocd_nuttx_gdb.rc&lt;/code&gt; стоит сделать таким:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;define hookpost-file  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;nb&#34;&gt;eval&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;monitor nuttx.pid_offset %d&amp;#34;&lt;/span&gt;, &lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;((&lt;/span&gt;struct tcb_s *&lt;span class=&#34;o&#34;&gt;)(&lt;/span&gt;0&lt;span class=&#34;o&#34;&gt;))&lt;/span&gt;-&amp;gt;pid  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;nb&#34;&gt;eval&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;monitor nuttx.xcpreg_offset %d&amp;#34;&lt;/span&gt;, &lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;((&lt;/span&gt;struct tcb_s *&lt;span class=&#34;o&#34;&gt;)(&lt;/span&gt;0&lt;span class=&#34;o&#34;&gt;))&lt;/span&gt;-&amp;gt;xcp.regs  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;nb&#34;&gt;eval&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;monitor nuttx.state_offset %d&amp;#34;&lt;/span&gt;, &lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;((&lt;/span&gt;struct tcb_s *&lt;span class=&#34;o&#34;&gt;)(&lt;/span&gt;0&lt;span class=&#34;o&#34;&gt;))&lt;/span&gt;-&amp;gt;task_state  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;nb&#34;&gt;eval&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;monitor nuttx.name_offset %d&amp;#34;&lt;/span&gt;, &lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;((&lt;/span&gt;struct tcb_s *&lt;span class=&#34;o&#34;&gt;)(&lt;/span&gt;0&lt;span class=&#34;o&#34;&gt;))&lt;/span&gt;-&amp;gt;name  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;nb&#34;&gt;eval&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;monitor nuttx.name_size %d&amp;#34;&lt;/span&gt;, sizeof&lt;span class=&#34;o&#34;&gt;(((&lt;/span&gt;struct tcb_s *&lt;span class=&#34;o&#34;&gt;)(&lt;/span&gt;0&lt;span class=&#34;o&#34;&gt;))&lt;/span&gt;-&amp;gt;name&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;end  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;eval&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;monitor nuttx.pid_offset %d&amp;#34;&lt;/span&gt;, &lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;((&lt;/span&gt;struct tcb_s *&lt;span class=&#34;o&#34;&gt;)(&lt;/span&gt;0&lt;span class=&#34;o&#34;&gt;))&lt;/span&gt;-&amp;gt;pid  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;eval&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;monitor nuttx.xcpreg_offset %d&amp;#34;&lt;/span&gt;, &lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;((&lt;/span&gt;struct tcb_s *&lt;span class=&#34;o&#34;&gt;)(&lt;/span&gt;0&lt;span class=&#34;o&#34;&gt;))&lt;/span&gt;-&amp;gt;xcp.regs  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;eval&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;monitor nuttx.state_offset %d&amp;#34;&lt;/span&gt;, &lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;((&lt;/span&gt;struct tcb_s *&lt;span class=&#34;o&#34;&gt;)(&lt;/span&gt;0&lt;span class=&#34;o&#34;&gt;))&lt;/span&gt;-&amp;gt;task_state  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;eval&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;monitor nuttx.name_offset %d&amp;#34;&lt;/span&gt;, &lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;((&lt;/span&gt;struct tcb_s *&lt;span class=&#34;o&#34;&gt;)(&lt;/span&gt;0&lt;span class=&#34;o&#34;&gt;))&lt;/span&gt;-&amp;gt;name  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;eval&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;monitor nuttx.name_size %d&amp;#34;&lt;/span&gt;, sizeof&lt;span class=&#34;o&#34;&gt;(((&lt;/span&gt;struct tcb_s *&lt;span class=&#34;o&#34;&gt;)(&lt;/span&gt;0&lt;span class=&#34;o&#34;&gt;))&lt;/span&gt;-&amp;gt;name&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;т.е. что бы и хуком на команду file сработало и сразу же отработало. Как будет более красивое решение - подправлю.&lt;/p&gt;
&lt;p&gt;Ещё остался не опробованным вариант отладки с включенной PROCFS и скриптом &lt;code&gt;nuttx/tools/pynuttx/gdbinit.py&lt;/code&gt; из поставки NuttX.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>GPS: альманах, эфемерис, эфемериды</title>
      <link>https://htrd.su/blog/2025/06/10/gps-almanac-ephemeris-ephemerides/</link>
      <pubDate>Tue, 10 Jun 2025 12:46:06 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2025/06/10/gps-almanac-ephemeris-ephemerides/</guid>
      <description>&lt;p&gt;Две очень хорошие статьи, что бы расставить точки над i:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://baskcompany.ru/info/news/almanac_ephemeris.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://baskcompany.ru/info/news/almanac_ephemeris.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://nestor.minsk.by/kg/2006/45/kg64519.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://nestor.minsk.by/kg/2006/45/kg64519.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Тезисно:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Все спутники передают два типа данных: &lt;strong&gt;альманах&lt;/strong&gt; и &lt;strong&gt;эфемерис&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Альманах&lt;/strong&gt; содержит данные &lt;strong&gt;всех&lt;/strong&gt; спутников. Каждый спутник передаёт альманах для &lt;strong&gt;всех&lt;/strong&gt; спутников. Но точность низкая. Действителен до нескольких месяцев.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Эфемерис&lt;/strong&gt; содержит точные корректировки орбиты и часов конкретного спутника. Каждый спутник передаёт только свои данные. Данные действительны около 30 минут, передаются каждые 30 сек.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Эфемериды&lt;/strong&gt; - содержимое эфемериса и альманаха. Т.е. это те самые параметры орбиты и ухода часов конкретного спутника, позволяющие определить его местоположение в зависимости от времени.&lt;/li&gt;
&lt;li&gt;Горячий старт: когда выключили и включили устройство в пределах 30 минут, когда эфемерисы ещё не протухли.&lt;/li&gt;
&lt;li&gt;Тёплый старт: когда устройство было выключено более 30 минут, эфемерисы успели протухнуть, навигатор ищет спутники по альманаху.&lt;/li&gt;
&lt;li&gt;Холодный старт: сбой часов, оооочень долгое отключение или перемещение навигатора на большое расстояние в выключенном состоянии. Альманах протух, идёт &amp;ldquo;поиск неба&amp;rdquo; (переинициализация).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Дополнительно:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://glonass-iac.ru/gps/ephemeris/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://glonass-iac.ru/gps/ephemeris/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://orsyst.ru/blog10&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://orsyst.ru/blog10&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>nVidia: перестаёт работать аппаратное кодирование видео после suspend</title>
      <link>https://htrd.su/blog/2025/04/01/nvidia-uvm-suspend-issue/</link>
      <pubDate>Tue, 01 Apr 2025 10:58:15 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2025/04/01/nvidia-uvm-suspend-issue/</guid>
      <description>&lt;p&gt;Проблема: после вывода ноутбука в сон и последующего пробуждения FFmpeg выдаёт примерно следующее:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;AVHWDeviceContext @ 0x55ec837f1800&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; cu-&amp;gt;cuInit&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; failed -&amp;gt; CUDA_ERROR_UNKNOWN: unknown error Device creation failed: -1313558101.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Команда у меня такая:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ffmpeg -vsync &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; -hwaccel cuda -hwaccel_output_format cuda  -i INPUT.mkv -c:a mp3 -c:v h264_nvenc -profile baseline  -y OUTPUT.mkv
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;С аналогичной ошибкой отваливается и Kdenlive при попытке использовать аппаратный кодек.&lt;/p&gt;
&lt;p&gt;Как оказалось, 
&lt;a href=&#34;https://github.com/NVIDIA/open-gpu-kernel-modules/issues/689&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;ошибка известная&lt;/a&gt; (
&lt;a href=&#34;https://forums.developer.nvidia.com/t/graphics-and-some-graphics-card-functionality-broken-after-computer-is-put-to-sleep-for-a-long-period-of-time/237599/2&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;и на форуме nVidia&lt;/a&gt;), там же можно найти WA:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;This bug disappears after running nvidia-bug-report.sh for some reason, CUDA works again after running nvidia-bug-report.sh.&lt;/p&gt;
&lt;p&gt;Edit: After more research I found out that running nvidia-settings as root somehow fixes the problem.&lt;br /&gt;
Edit 2: Loading the nvidia-uvm module though &lt;code&gt;modprobe nvidia-uvm&lt;/code&gt; fixes this issue&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;
&lt;a href=&#34;https://github.com/NixOS/nixpkgs/issues/334180&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Схожая проблема&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;WA:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo modprobe -r nvidia_uvm
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo modprobe    nvidia_uvm
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Я засунул эти команды в suspend-hook Systemd:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl edit --force --full nvidia-uvm-wa-sleep.service
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Содержимое:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-ini&#34; data-lang=&#34;ini&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;[Unit]  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;Description&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;nVidia UVM suspend bug WA  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;Before&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;sleep.target    &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;StopWhenUnneeded&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;yes  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;[Service]      &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;Type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;oneshot  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;RemainAfterExit&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;yes     &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;ExecStart&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;modprobe -r nvidia_uvm              &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;ExecStop&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;modprobe nvidia_uvm                     
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;[Install]  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;WantedBy&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;sleep.target&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Включить:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl &lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt; nvidia-uvm-wa-sleep.service
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Содержимое юнита по мотивам:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://wiki.archlinux.org/title/Power_management/Suspend_and_hibernate#Combined_sleep/resume_unit&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://wiki.archlinux.org/title/Power_management/Suspend_and_hibernate#Combined_sleep/resume_unit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>C&#43;&#43;: заметки на полях про ref-qualified методы</title>
      <link>https://htrd.su/blog/2025/03/24/cxx-ref-qualified-methods/</link>
      <pubDate>Mon, 24 Mar 2025 12:15:44 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2025/03/24/cxx-ref-qualified-methods/</guid>
      <description>&lt;p&gt;Самостоятельное осмысление навеянное 
&lt;a href=&#34;https://t.me/grokaemcpp/627&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://t.me/grokaemcpp/627&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Не задумывался над сценариями использования, хотя они есть с C++11.&lt;/p&gt;
&lt;p&gt;Раньше была возможность использовать квалификатор &lt;code&gt;const&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Foo&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;method&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;        &lt;span class=&#34;c1&#34;&gt;// (1)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;method&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;// (2)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Тут вроде логично, когда какой метод будет вызван.&lt;/p&gt;
&lt;p&gt;C++11 добавил возможность пометить метод квалификатором ссылочности: ref-qualified:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;amp;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;const&amp;amp;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;const&amp;amp;&amp;amp;&lt;/code&gt; - хотят это сценарий очень странный.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Первое&lt;/strong&gt;, что нужно отметить, что если хотя бы один из них определён, то он кофликтует с &lt;code&gt;(1)&lt;/code&gt; и &lt;code&gt;(2)&lt;/code&gt;. Т.е. у вас или ref-qualified или non-ref-qualified:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Foo&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#if 0&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;  void method();        // (1)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;  void method() const;  // (2)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;#else
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;method&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;        &lt;span class=&#34;c1&#34;&gt;// (3)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;method&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;   &lt;span class=&#34;c1&#34;&gt;// (4)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;method&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;       &lt;span class=&#34;c1&#34;&gt;// (5)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;method&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;// (6)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;#endif
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Второе&lt;/strong&gt;: что и когда вызывается (&lt;code&gt;или&lt;/code&gt; - ниже обозначает, два случая, для сравнения: когда использует и когда не используется ref-квалификация ):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Foo&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;foo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;foo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;method&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;           &lt;span class=&#34;c1&#34;&gt;// (а) вызовется или (1) или (3), либо ОШИБКА, если перегрузка не указана
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Foo&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;const_foo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;const_foo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;method&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;      &lt;span class=&#34;c1&#34;&gt;// (б) вызовется или (2) или (4), либо ОШИБКА, если перегрузка не указана
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Foo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{}.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;method&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;         &lt;span class=&#34;c1&#34;&gt;// (в) вызовется или (1) или (5), либо (4), если перегрузка не указана
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Foo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){}.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;method&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// (г) вызовется или (2) или (6), либо (4), если перегрузка не указана
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Тут логика такая&lt;/strong&gt;: есть имя - вызовется &lt;code&gt;&amp;amp;&lt;/code&gt;, нет имени - вызовется &lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt;. И стоит внимательно посмотреть кейсы &lt;code&gt;(в)&lt;/code&gt; и &lt;code&gt;(г)&lt;/code&gt; для &amp;ldquo;старого&amp;rdquo; поведения и нового, но когда перегрузка по &lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt; не указана.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Третье&lt;/strong&gt;: перегрузки могут быть помечены &lt;code&gt;delete&lt;/code&gt;: удалённые функции тоже используются в поиске перегрузок и, если наиболее подходящая перегрузка удалена - будет ошибка компиляции.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ну и для чего может быть нужно&lt;/strong&gt;: оптимизации и защита. К примеру, если мы вызвали &lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt; метод, то мы точно знаем, что мы - временный объект. поэтому, мы можем сделать не просто возврат чего-то, а сделать этому &lt;code&gt;std::move()&lt;/code&gt;, пометить метод &lt;code&gt;delete&lt;/code&gt; и запретить вызваться или вернуть копию, а не ссылку или указатель.&lt;/p&gt;
&lt;p&gt;Другой пример: &lt;strong&gt;висячие ссылки&lt;/strong&gt; или другие отсылки к уничтоженным ресурсам.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Bar&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;_val&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#if 0&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;    std::string_view get() const { return _val; }    // (7)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;#else
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string_view&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;_val&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;   &lt;span class=&#34;c1&#34;&gt;// (8)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt;      &lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt;     &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;_val&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;   &lt;span class=&#34;c1&#34;&gt;// (9) - можно и std::move(_val), но зависит от
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;endif&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Тут вместо &lt;code&gt;std::string_view&lt;/code&gt; может быть &lt;code&gt;const std::string&amp;amp;&lt;/code&gt;, но со &lt;code&gt;string_view&lt;/code&gt; можно проще отловить ситуацию с доступом к уничтоженному объекту:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// как помощиник
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Bar&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Bar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sv&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;().&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// (д)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;some_function&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;         &lt;span class=&#34;c1&#34;&gt;// (е)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Здесь без ref-qualified методов в &lt;code&gt;(д)&lt;/code&gt; будет вызван &lt;code&gt;(7)&lt;/code&gt;, что приведёт в &lt;code&gt;(е)&lt;/code&gt; и дальше по коду к обращению к уничтоженному объекту &lt;code&gt;Bar::_val&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;При использовании перегрузок по ref-qualified, будет вызван &lt;code&gt;(9)&lt;/code&gt; и мы вернём копию строки (или более оптимально, если через &lt;code&gt;std::move(_val)&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Отсюда, имхо, основное применение: &lt;strong&gt;если возвращаем некий референс (ссылку, view/span) на внутреннюю структуру класса, то имеет смысл использовать указание ссылочных квалификаторов, причём обоих: &lt;code&gt;&amp;amp;&lt;/code&gt; и&lt;code&gt; &amp;amp;&amp;amp;&lt;/code&gt; - второй будет уточнять поведение для временного объекта. Если уточнения по поведение не нужно, то использование ссылочных квалификаторов избыточно (но смотреть кейсы кейсы &lt;code&gt;(в)&lt;/code&gt; и &lt;code&gt;(г)&lt;/code&gt;) .&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>LocalSend: отправка файлов между устройсвами внутри LAN</title>
      <link>https://htrd.su/blog/2025/03/05/localsend/</link>
      <pubDate>Wed, 05 Mar 2025 21:58:27 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2025/03/05/localsend/</guid>
      <description>&lt;p&gt;На правах мемориза.&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://github.com/localsend/localsend&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;LocalSend&lt;/a&gt; (
&lt;a href=&#34;https://localsend.org/ru&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;официальный сайт&lt;/a&gt;) - удобный инструмент для обмена файлами между устройствами в локальной сети без подготовленной инфраструктуры. Что примечательно - open source.&lt;/p&gt;
&lt;p&gt;Мне потребовалось что бы быстро перекидывать файлы между несколькими андроидами и ноутбуком на Linux. Для своих персональных устройств я использую давно 
&lt;a href=&#34;https://kdeconnect.kde.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;KDE Connect&lt;/a&gt;, но привязывать &amp;ldquo;левые&amp;rdquo; устройства и потом каждый раз отвязывать - не добно. А вот LocalSend решает.&lt;/p&gt;
&lt;p&gt;Для полноты картины, обсуждение на 4PDA:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://4pda.to/forum/index.php?showtopic=1063582&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://4pda.to/forum/index.php?showtopic=1063582&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;На андроид можно поставить их Google Play, F-Droid и ручками APK. На Manjaro - есть в AUR.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Туннелирование TCP в AnyDesk</title>
      <link>https://htrd.su/blog/2025/01/24/anydesk-tcp-tunneling-note/</link>
      <pubDate>Fri, 24 Jan 2025 11:25:09 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2025/01/24/anydesk-tcp-tunneling-note/</guid>
      <description>&lt;p&gt;Просто заметка по версиям.&lt;/p&gt;
&lt;p&gt;В AnyDesk есть возможность туннелирования TCP. Да, вот прям как в SSH. Очень удобно для использования в &amp;ldquo;чужом&amp;rdquo; или неподготовленном окружении. Использовал, например, для удалённой отладки кода на устройствах очень сильно далеко от меня (вплоть до другого континента)&lt;/p&gt;
&lt;p&gt;Доступна в бесплатной версии, но с нюансом:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;до версии &lt;strong&gt;6.2.1&lt;/strong&gt; включительно оно доступно из коробки&lt;/li&gt;
&lt;li&gt;после, доступно только после регистрации аккаунта (?)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;При этом версия 6.2.1 пока работает. FYI.&lt;/p&gt;
&lt;p&gt;Ну и сразу. Есть 
&lt;a href=&#34;https://rustdesk.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;RustDesk&lt;/a&gt;. Возможности форвардинга есть. Плюс можно свой сервер разворачивать. В реальных условиях пока не проверял.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>QtCreator Remote Linux Debug session does not start</title>
      <link>https://htrd.su/blog/2025/01/21/qtc-remote-linux-debug-session-does-not-start/</link>
      <pubDate>Tue, 21 Jan 2025 16:53:11 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2025/01/21/qtc-remote-linux-debug-session-does-not-start/</guid>
      <description>&lt;p&gt;Не стартует удалённая отладка. Причём без какого-то фидбека.&lt;/p&gt;
&lt;p&gt;Если включить логи:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;QT_LOGGING_RULES&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;*=true;qt.*=false;qtc.*=true;qtc.clang*=true&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;и запустить сессию QtC, то при запуске отладки можно увидеть что-то вроде:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;qtc.utils.process: Process &lt;span class=&#34;m&#34;&gt;162&lt;/span&gt; starting &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;non blocking, main thread&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:  --multi :10000
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;qtc.utils.process: Process &lt;span class=&#34;m&#34;&gt;162&lt;/span&gt; finished: &lt;span class=&#34;nv&#34;&gt;result&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;3, &lt;span class=&#34;nv&#34;&gt;ex&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;255, &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; bytes stdout: &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;, &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; bytes stderr: &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;, &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; ms elapsed
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Суть проблемы в том, что на удалённой стороне просто не установлен gdbserver. Соответственно нужно его установить и всё починится.&lt;/p&gt;
&lt;p&gt;Как минимум на версии 16.x проблема присутствует. Как и на 17.0.0-beta1 (16.0.82). Проблема определена в переписке.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>easyeda2kicad</title>
      <link>https://htrd.su/blog/2024/11/29/easyeda2kicad/</link>
      <pubDate>Fri, 29 Nov 2024 11:19:10 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2024/11/29/easyeda2kicad/</guid>
      <description>&lt;p&gt;Веб-сервисы вещь хорошая и удобная&amp;hellip; Пока их не блокируют. Поэтому предпочитаю для своих домашний поделок использовать KiCAD. Естественно, что не всегда хватает какого-то символа, посадочного места или 3D вида компонента. При этом в той же EasyEDA есть куча оных уже в готовом виде. Если не вдаваться в подробности соответствия каким-то стандартам, то было бы неплохо, стащить оную и использовать у себя.&lt;/p&gt;
&lt;p&gt;Первым тулом, которым я пользовался был (да и останется на всякий случай) - 
&lt;a href=&#34;http://pages.rigoligo.cc/LC2KiCad/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;lc2kicad&lt;/a&gt; поставить, пока, можно из AUR:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yay -S lc2kicad
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;но репозиторий уже в архиве, а автор отписался, что проект всё.&lt;/p&gt;
&lt;p&gt;И вот сегодня открыл для себя новый проект: 
&lt;a href=&#34;https://github.com/uPesy/easyeda2kicad.py&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;easyeda2kicad&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;И основная его фишка в том, что по указанному ID он может скачать сразу символ, посадочное место и 3D модель. Положить это в единое место к которому можно настроить пути и потом пользоваться централизованно.&lt;/p&gt;
&lt;p&gt;Начнём с ID, откуда его брать. Первое: из каталога LCSC, называется:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;LCSC Part #
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;на странице товара.&lt;/p&gt;
&lt;p&gt;Например для 
&lt;a href=&#34;https://www.lcsc.com/product-detail/Aluminum-Electrolytic-Capacitors-SMD_Lelon-VZT101M1HTR-0607_C311622.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Lelon VZT101M1HTR-0607&lt;/a&gt; это будет &lt;strong&gt;C311622&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Второе, но, наверное, самое простое и удобное для моих целей - непосредственно у EasyEDA.&lt;/p&gt;
&lt;p&gt;Открываем 
&lt;a href=&#34;https://easyeda.com/editor&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;его&lt;/a&gt;. И сразу открываем &lt;strong&gt;Библиотеку&lt;/strong&gt; (&lt;strong&gt;Library&lt;/strong&gt;) символов (лупа с тараканиной слева). В поиске вводим нужные ключевые слова, для примера, &lt;em&gt;&lt;strong&gt;XL6009&lt;/strong&gt;&lt;/em&gt;  и жмём Enter. Мне нужен был модуль, он там в списке один, самый первый. Выбираем его и в самом низу окошка видим &lt;strong&gt;LCSC Код#&lt;/strong&gt; (&lt;strong&gt;LCSC Part#&lt;/strong&gt;). Для искомого модуля: &lt;em&gt;&lt;strong&gt;C2908146&lt;/strong&gt;&lt;/em&gt;. К сожалению, текст не выделяется, можно:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;переписать внучную&lt;/li&gt;
&lt;li&gt;нажать, подождать открытия страницы и скопировать там&lt;/li&gt;
&lt;li&gt;я же, в Firefox ПКМ → Inspect и копирую текст из DOM. Но тут кому как удобно.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Далее сама магия:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;easyeda2kicad --lcsc_id C2908146 --full
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Без дополнительных телодвижения у вас появится библиотека в &lt;strong&gt;~/Documents/Kicad/easyeda2kicad&lt;/strong&gt;. Переопределить путь и название библиотеки можно через параметр &lt;code&gt;--output ~/electronic/KiCAD/my_lib&lt;/code&gt;. В версии без &lt;code&gt;--output&lt;/code&gt; будет такие подкаталоги/файлы:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;easyeda2kicad.kicad_sym&lt;/code&gt; - символы, путь к нему нужно указать в KiCAD в настройках библиотек символов&lt;/li&gt;
&lt;li&gt;&lt;code&gt;easyeda2kicad.pretty/&lt;/code&gt; -  посадочные места, путь к нему нужно указать в KiCAD в настройках библиотек посадочных мест&lt;/li&gt;
&lt;li&gt;&lt;code&gt;easyeda2kicad.3dshapes/&lt;/code&gt;  - 3D модели&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Про последние немного детальнее. Судя по всему этот механизм в KiCAD ещё не совсем отлажен, поэтому с моделями постоянно какая-то каша. Но, easyeda2kicad сделали просто. Они воспользовались возможность определять подстановочные переменные в KiCAD и внутри посадочного места сразу указывают путь к 3D модели вида: &lt;code&gt;${EASYEDA2KICAD}/easyeda2kicad.3dshapes/XFMR-SMD_XL6009.wrl&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Соответственно, надо сделать всего-то следующее, открыть KiCAD, зайти &lt;strong&gt;Настройки&lt;/strong&gt; → &lt;strong&gt;Настроить пути&lt;/strong&gt;, далее нажать &amp;ldquo;&lt;strong&gt;+&lt;/strong&gt;&amp;rdquo; указать имя переменной &lt;code&gt;EASYEDA2KICAD&lt;/code&gt; и указать полный путь к корню, где лежат все файлы и каталоги &lt;code&gt;easyeda2kicad.*&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;В случае с указанием &lt;code&gt;--output ...&lt;/code&gt; файлы будут иметь вид:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;~/electronic/KiCAD/my_lib.kicad_sym&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;~/electronic/KiCAD/my_lib.pretty&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;~/electronic/KiCAD/my_lib.3dshapes&lt;/code&gt;
а пути к 3D моделям будут установлены жёстко в абсолютные значения. Стоит учитывать.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;На этом всё, нужно рестартовать KiCAD, иначе у меня не подтянулись изменения в подстановочных переменных и начинать пользоваться.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Очень мелкая печать из Inkscape</title>
      <link>https://htrd.su/blog/2024/10/29/small-sized-printing-from-inkscape/</link>
      <pubDate>Tue, 29 Oct 2024 11:40:39 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2024/10/29/small-sized-printing-from-inkscape/</guid>
      <description>&lt;p&gt;Столкнулся с проблемой: при печати из Inkscape изображения получаются очень мелкими.&lt;/p&gt;
&lt;p&gt;Гуглинг 
&lt;a href=&#34;https://forum.artixlinux.org/index.php/topic,7249.0.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;навёл&lt;/a&gt; на то, что это проблема с xdg-desktop-portal-kde. Парень из форма создал 
&lt;a href=&#34;https://bugs.kde.org/show_bug.cgi?id=492681&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Bug Report&lt;/a&gt; в котором есть возможный WA. И там же есть отсылка на 
&lt;a href=&#34;https://gitlab.com/inkscape/inbox/-/issues/11068&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;репорт&lt;/a&gt; в самом проекте Inkscape.&lt;/p&gt;
&lt;p&gt;Если коротко: xdg-desktop-portal это некая сущность (или сучность?) которая позволяет приложениям на различных тулкитах более бесшовно интегрироваться в &amp;ldquo;неродные&amp;rdquo; окружения рабочего стола: Gtk в окружение KDE и Qt в окружения на базе Gtk (Gnome, Cinnamon, Mate &amp;amp; etc). Интеграция по большей части затрагивает только переиспользование стандартных системных диалогов, типа диалогов открытия файлов, сохранения, вывода окон предупреждений, диалогов печати (тут отдельный акцент). В общем, все те вещи, которые вроде более приятны глазу, но жить без них можно (&amp;ldquo;вам шашечки или ехать?&amp;rdquo;). Но и дополнительный слой абстракции, который сам по себе может нести баги.&lt;/p&gt;
&lt;p&gt;Собственно проблема как раз и заключается в стыке разных сред при использовании диалога печати. Причём 
&lt;a href=&#34;https://gitlab.com/inkscape/inbox/-/issues/783#note_1642923028&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;сначала&lt;/a&gt; поддержку Desktop Portal реализовали в Inkscape и сразу же это вызвало 
&lt;a href=&#34;https://gitlab.com/inkscape/inbox/-/issues/11068&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;проблемы&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Ладно, теперь к сути. Мне ехать нужно. Решение в лоб это общесистемно заявить:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;GTK_USE_PORTAL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Собственно после чего все приложения Gtk в окружении KDE станут использовать Gtk диалоги. Как оказалось, если использовать в массе, так себе. К визуалу тоже быстро привыкаешь :)&lt;/p&gt;
&lt;p&gt;Поэтому достаточно сделать следующее:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Меню&lt;/li&gt;
&lt;li&gt;Находим Inkscape&lt;/li&gt;
&lt;li&gt;ПКМ → Изменить приложение&amp;hellip;&lt;/li&gt;
&lt;li&gt;Вкладка Приложение&lt;/li&gt;
&lt;li&gt;В поле &amp;ldquo;Переменные окружения&amp;rdquo; вставляем &lt;code&gt;GTK_USE_PORTAL=0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;OK&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Теперь:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;если открыть Inkscape через меню или быстрый запуск, он запустится с этим значением&lt;/li&gt;
&lt;li&gt;если открыть SVG файл через Dolphin, то он тоже откроется с этим флагом&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Если открывать через терминал ручками: &lt;code&gt;inkscape file.svg&lt;/code&gt;, то имеет смысл завести alias с установкой переменной окружения в нужное значение. Если в скриптах (хммм), то указать явно в скрипте.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Капитанский мостик по хребту</title>
      <link>https://htrd.su/blog/2024/10/13/cap-mostik-by-the-ridge/</link>
      <pubDate>Sun, 13 Oct 2024 10:44:27 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2024/10/13/cap-mostik-by-the-ridge/</guid>
      <description>&lt;p&gt;Когда ходили 
&lt;a href=&#34;https://htrd.su/blog/2024/05/10/krivaya-litovka-nonstop/&#34;&gt;нонстоп&lt;/a&gt; после нефтебазы немного не туда сунулись по пути на Капитанский мостик, но возникло жаление по осени прогуляться тут с сыном, просто посмотреть, куда идут дороги. Сентябрь пришёл, время реализовывать планы. Что бы долго не тянуть выбрали &lt;strong&gt;7&lt;/strong&gt; сентября.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/files/2024/10/13/cap-mostik-by-the-ridge/map.webp&#34; alt=&#34;map.webp&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;лирика&#34;&gt;Лирика&lt;/h2&gt;
&lt;p&gt;Выход получился несложный. За нефтебазой более заметная дорога уходит вверх, а почти сразу случается неприметное ответвление, которое вполне себе ходибельное. Далее дорога плавно переходит в звериную тропу, которая в какой-то момент заканчивается. На треке ключевые моменты обозначены как &lt;code&gt;КОНДОР&lt;/code&gt; и &lt;code&gt;КОНТРОП&lt;/code&gt;. Но от конца тропы до хребтика - два шага. Сам хребет - типичный представитель &amp;ldquo;Милых приморских рощ&amp;rdquo; (МПР), то есть заросших густой мелкой порослью. Но вполне проходимый. Через 4.5 км движения от старта, стыкуемся с тропой, которая тоже вываливается на хребтик и уже бодро топаем до видовой площадки. Там перекус и чай и обратно вниз. На Смольном искупались, приготовили обед и до машины.&lt;/p&gt;
&lt;p&gt;По дороге насобирали грибов, которые потом как только не идентифицировали:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;предположение первое: &amp;ldquo;съедобные, нужно вымачивать, иначе горчат&amp;rdquo;, но без названия
&lt;ul&gt;
&lt;li&gt;туда же: &amp;ldquo;знаю одно-съедобные&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;назвали даже &amp;ldquo;&lt;strong&gt;белым&lt;/strong&gt;&amp;rdquo;, хотя точно не он&lt;/li&gt;
&lt;li&gt;назвали &lt;strong&gt;царским грибом&lt;/strong&gt;, но фото в интернете дают совсем другу картинку&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;дубовик&lt;/strong&gt;, но по картинке тоже не бьётся&lt;/li&gt;
&lt;li&gt;был вариант - &lt;strong&gt;подберёзовик&lt;/strong&gt;, но тоже не бьётся&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;маховички&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Грибы трубчатые, что в условиях приморья идентифицирует их как съедобные. В пищу оказались вкусными. Наиболее похожая картинка дала результат - 
&lt;a href=&#34;https://wikigrib.ru/maslyonok-raskrashennyj/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;strong&gt;маслёнок раскрашенный&lt;/strong&gt;&lt;/a&gt; (и 
&lt;a href=&#34;https://mycology.su/suillus-spraguei.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;второй вариант&lt;/a&gt;). По виду шляпки 1 в 1.&lt;/p&gt;
&lt;p&gt;При выходе на дорогу на смольные, нашли немного лещины. Не спелой, но насобирали, на радость ребёнку.&lt;/p&gt;
&lt;h2 id=&#34;фото-и-gps&#34;&gt;Фото и GPS&lt;/h2&gt;
&lt;p&gt;Немного фото и геоданных.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://disk.yandex.ru/a/2bOm4eSeGaM2VA&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Фото&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://htrd.su/files/2024/10/13/cap-mostik-by-the-ridge/%d0%9a%d0%b0%d0%bf%d0%b8%d1%82%d0%b0%d0%bd%d1%81%d0%ba%d0%b8%d0%b9%20%d0%bc%d0%be%d1%81%d1%82%d0%b8%d0%ba%20%d0%bf%d0%be%20%d1%85%d1%80%d0%b5%d0%b1%d1%82%d1%83.gpx.gz&#34;&gt;Капитанский мостик по хребту.gpx.gz&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;полутехническая-информация&#34;&gt;Полутехническая информация&lt;/h2&gt;
&lt;p&gt;Сводка:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;День&lt;/th&gt;
          &lt;th&gt;Протопали,  &lt;br&gt;км&lt;/th&gt;
          &lt;th&gt;Набор высоты,  &lt;br&gt;м&lt;/th&gt;
          &lt;th&gt;Сброс высоты,  &lt;br&gt;м&lt;/th&gt;
          &lt;th&gt;Время/в движении,  &lt;br&gt;ч&lt;/th&gt;
          &lt;th&gt;Скорость/в движении,&lt;/th&gt;
          &lt;th&gt;Начало движения,  &lt;br&gt;ч&lt;/th&gt;
          &lt;th&gt;Конец движения,  &lt;br&gt;ч&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;7 сент&lt;/td&gt;
          &lt;td&gt;10.5&lt;/td&gt;
          &lt;td&gt;395&lt;/td&gt;
          &lt;td&gt;415&lt;/td&gt;
          &lt;td&gt;06:56/04:04&lt;/td&gt;
          &lt;td&gt;1.5/2.6&lt;/td&gt;
          &lt;td&gt;10:27&lt;/td&gt;
          &lt;td&gt;17:23&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;strong&gt;10.5&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;395&lt;/td&gt;
          &lt;td&gt;415&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;—&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;—&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;—&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;—&lt;/strong&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Профиль высот:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/files/2024/10/13/cap-mostik-by-the-ridge/profile.webp&#34; alt=&#34;profile.webp&#34;&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Внезапный Лысый Дед</title>
      <link>https://htrd.su/blog/2024/10/12/lisiy_ded/</link>
      <pubDate>Sat, 12 Oct 2024 21:16:35 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2024/10/12/lisiy_ded/</guid>
      <description>&lt;p&gt;Внезапный поход на вершину, которую ещё не доводилось сходить. Сходили &lt;strong&gt;17-18&lt;/strong&gt; августа, но руки написать дошли только сейчас.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/files/2024/10/12/lisiy_ded/map.webp&#34; alt=&#34;map.webp&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;лирико-хронологическая-часть&#34;&gt;Лирико-хронологическая часть&lt;/h2&gt;
&lt;p&gt;Вообще, ходить летом не особенно доставляет удовольствие: мошка, комары, клещи, жара и высокая влажность. Но тут всё зарешал звонок Димы, который свести к: &amp;ldquo;Шеф, всё пропало! Отпуск заканчивается, все по пляжам, а я хочу в лес!&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Долго не запрягал. Выходные свободны, идём. Да если идти, при всех красотах летнего похода, то туда, где поинтересней. А где может быть интереснее если не там, где ещё не был? Поэтому выбор пал на Лысый Дед.&lt;/p&gt;
&lt;p&gt;Варганю &amp;ldquo;тяп-ляп&amp;rdquo; раскладку на двоих, что бы меньше готовить и больше запаривать/разогревать. Даже дорогу только мельком глянул: на месте разберёмся.&lt;/p&gt;
&lt;p&gt;В субботу закидываю рюкзак в машину, заправляюсь, забираю Диму на Постышева, там же в Рэми докупаю недостающие компоненты раскладки.&lt;/p&gt;
&lt;p&gt;В дороге удивило одно: есть сворот на Молёный мыс с трассы с указателем, но дорога там сразу кажется какой-то ушатанной. И навигатор там не желает прокладывать маршрут, предлагает ехать дальше и сворачивать недалеко от поворота на Большой камень. А вот там никакого указателя нет. Чудеса. Но ехали именно по этому пути. Дорога вполне себе нормальная. А вот дальше деревни мы далеко уехать не смогли, не для форика дорога. Хотя, если бы размытое начало можно было как-то проскочить, то дальше вполне себе проезжабельная.&lt;/p&gt;
&lt;p&gt;В общем, оставляем машину и в путь. Выбрали вариант маршрута с подходом по дороге до поляны, там ставим лагерь, перекусываем и налегке в радиалку на гору. С небольшой под-радиалкой на место крушения самолёта МИГ-17Ф.&lt;/p&gt;
&lt;p&gt;Тропа маркирована. Но в одном месте немного потеряли ориентиры, а по навигатору она уходит как дальше по распадку, так и ответвляется и начинает забираться на хребет. Ну мы и пошли зашагивать на него.&lt;/p&gt;
&lt;p&gt;То, что изначально показалось тропой, быстро сошло на нет. Поэтому шли, как логичнее&amp;hellip; И вот что интересно: тропы нет, а маркировка встречается. Причём именно там, где мы выбирали наиболее логичное направление движения. Особенность этих отметок: они очень высоко. Будто вязали их зимой, по глубокому снегу.&lt;/p&gt;
&lt;p&gt;Не скажу, что вскоре, но всё же мы выбрались на хребет. А там&amp;hellip; Дорога! Нет, не дорога с колеёй, а фигурально: широченная тропа. Будто отары овец по ней регулярно прогоняют. Идти одно удовольствие. Набор очень плавный. В голове вообще не отложилось крутых взлётов, только пару чуть более крутых, чем весь остальной маршрут.&lt;/p&gt;
&lt;p&gt;По ходу движения приметили то место, где тропа начинает валиться раньше в распадок. Решили по ней пройти на обратном пути.&lt;/p&gt;
&lt;p&gt;Начало радиалки к месту крушения МИГ-17Ф отмечено, прозевать почти невозможно. Сходили на него сразу, а то знаем мы эту повышенную ленивость на обратном пути&amp;hellip;&lt;/p&gt;
&lt;p&gt;После отвилки будет, пожалуй, самый приметный взлёт. Но как говорил ранее: чисто по сравнению с остальным, ленивым  и пологим набором.&lt;/p&gt;
&lt;p&gt;Ближе к вершине посетили место крушения ещё одного самолёта: ИЛ-28Т. Тропа практически проходит через него, всего-то нужно сделать метров 50 туда и столько же обратно.&lt;/p&gt;
&lt;p&gt;Вообще, насколько я знаю, в окрестностях Лысого деда находятся места крушения трёх самолётов:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;МиГ-17Ф, разбился в 1957, отказ двигателя, к счастью лётчик катапультировался и остался жив.&lt;/li&gt;
&lt;li&gt;Ил-28Т, разбился 15 февраля 1955, принадлежал 1535 минно-торпедному авиационному полку, 3 минно-торпедной авиадивизии. Основная версия: плохие погодные условия. Погиб весь экипаж - 3 человека&lt;/li&gt;
&lt;li&gt;и Ту-14Т, разбился 3 декабря 1954, был по ошибке сбит своими же МиГ-15, принятый за &amp;ldquo;американца&amp;rdquo;. Торпедоносец ВВС ТОФ. Экипаж 3 человека, весь погиб.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Но до последнего идти далеко и, 
&lt;a href=&#34;https://pikabu.ru/story/v_poiskakh_upavshikh_samoletov_5398667&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;по слухам&lt;/a&gt;, от него мало что осталось.&lt;/p&gt;
&lt;p&gt;Вершина встретила нас встретила низкой облачностью&amp;hellip; или высоким туманом. Термуху можно было выжимать, да ровно, как и всю остальную одежду. Воистину, банно-прачечный комплекс &amp;ldquo;Лысый дед&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Как обычно, дежурные фото и покимарить минут 40: камни тёплые, лежать приятно.&lt;/p&gt;
&lt;p&gt;По пути на вершину есть места, где можно удобно расположиться с палаткой. Собственно возникло желание повторить:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;с палаткой&lt;/li&gt;
&lt;li&gt;и подниматься полностью по хребту&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Вниз начали спускаться в начале шестого. Где-то за час проскочили до того места, где натоптанная тропа начинает валиться в распадок. Как и планировали, направляемся туда. И что я вам скажу: подниматься на хребет без тропы было приятнее, чем шурувать по тропе через распадок. Мотивация её проложить тут мне решительно непонятна.&lt;/p&gt;
&lt;p&gt;В лагерь добрались меньше, чем за два часа: часы на руке показывали без двух минут семь вечера. Путь наверх занял чуть менее четырёх часов (с радиалкой на МиГ-17Ф, которая сама по себе заняла около часа).&lt;/p&gt;
&lt;p&gt;На стоянке делаем костерок (для души), ужин (на горелке) потрындели и на боковую. Подъём не регламентируем, но Дима подорвался уже часов в 6, сказывается рабочая привычка, я же вылез не раньше 7:30 или 8 утра.&lt;/p&gt;
&lt;p&gt;Завтракаем, собираем лагерь и топаем до машины. На сегодня грозили дождь, но его мы дождались только к подъезду к Владивостоку. Путь до машины не особо примечателен, но избыток времени располагает к вальяжному темпу движения и беседам обо всём и ни о чём сразу.&lt;/p&gt;
&lt;p&gt;У машины переодеваемся, грузим рюкзаки и в путь. Делаем санитарную остановку на Бензо-кафе на рюмку кофе.&lt;/p&gt;
&lt;p&gt;Домой добрался уже к 17 часам,  забросив Диму до его гаража и успев помыть машину.&lt;/p&gt;
&lt;p&gt;По итогу, душевный выше выход. В планах, как писал выше, повторить с палаткой и по хребту. Всё же ночёвки на горе обладают какой-то своей магией и привлекательностью. Пусть и приходится тащить воду  и домик со спальным местом на своём хребте. Но вообще, на личном транспорте, если выехать часов в 7 утра, то вполне можно сходить эту гору и в один день.&lt;/p&gt;
&lt;h2 id=&#34;фото-и-gps&#34;&gt;Фото и GPS&lt;/h2&gt;
&lt;p&gt;Немного фото и гео-данных.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://disk.yandex.ru/a/SQkcrkTXIwlAsA&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Фото&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://htrd.su/files/2024/10/12/lisiy_ded/%d0%9b%d1%8b%d1%81%d1%8b%d0%b9%20%d0%b4%d0%b5%d0%b4,%20%d0%b0%d0%b2%d0%b3%d1%83%d1%81%d1%82%202024.gpx.gz&#34;&gt;Лысый дед, август 2024.gpx.gz&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;полутехническая-информация&#34;&gt;Полутехническая информация&lt;/h2&gt;
&lt;h3 id=&#34;профиль-высот-и-километраж&#34;&gt;Профиль высот и километраж&lt;/h3&gt;
&lt;p&gt;Сводка:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;День&lt;/th&gt;
          &lt;th&gt;Протопали,  &lt;br&gt;км&lt;/th&gt;
          &lt;th&gt;Набор высоты,  &lt;br&gt;м&lt;/th&gt;
          &lt;th&gt;Сброс высоты,  &lt;br&gt;м&lt;/th&gt;
          &lt;th&gt;Время/в движении,  &lt;br&gt;ч&lt;/th&gt;
          &lt;th&gt;Скорость/в движении,&lt;/th&gt;
          &lt;th&gt;Начало движения,  &lt;br&gt;ч&lt;/th&gt;
          &lt;th&gt;Конец движения,  &lt;br&gt;ч&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;17 авг&lt;/td&gt;
          &lt;td&gt;18&lt;/td&gt;
          &lt;td&gt;1055&lt;/td&gt;
          &lt;td&gt;895&lt;/td&gt;
          &lt;td&gt;08:18/06:10&lt;/td&gt;
          &lt;td&gt;2.2/2.9&lt;/td&gt;
          &lt;td&gt;10:40&lt;/td&gt;
          &lt;td&gt;18:58&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;18 авг&lt;/td&gt;
          &lt;td&gt;5.6&lt;/td&gt;
          &lt;td&gt;0&lt;/td&gt;
          &lt;td&gt;190&lt;/td&gt;
          &lt;td&gt;01:16/01:13&lt;/td&gt;
          &lt;td&gt;4.4/4.6&lt;/td&gt;
          &lt;td&gt;09:17&lt;/td&gt;
          &lt;td&gt;10:34&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;strong&gt;23.6&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;1055&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;1085&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;—&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;—&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;—&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;—&lt;/strong&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Профиль:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/files/2024/10/12/lisiy_ded/profile.webp&#34; alt=&#34;profile.webp&#34;&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>256</title>
      <link>https://htrd.su/blog/2024/09/12/256/</link>
      <pubDate>Thu, 12 Sep 2024 18:18:18 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2024/09/12/256/</guid>
      <description>&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ date +%j                    
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;m&#34;&gt;256&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;С праздником всех причастных!&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Команда timeout</title>
      <link>https://htrd.su/blog/2024/09/12/timeout/</link>
      <pubDate>Thu, 12 Sep 2024 12:17:03 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2024/09/12/timeout/</guid>
      <description>&lt;p&gt;Век живи, век учись, а дураком помрёшь.&lt;/p&gt;
&lt;p&gt;Открыл для себя чудную утилиту &lt;code&gt;timeout&lt;/code&gt; из состава &lt;code&gt;coreutils&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Делает ровно то, что описывает её название: запускает команду, переданную как аргумент, на заданное время в секундах (s), минутах (m), часах (h) или днях (d):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;timeout 10s ping ya.ru
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo timeout 10s tcpdump -i wlan0 -Q in -A udp 
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Обратите внимание: если команда должна быть выполнена под &lt;code&gt;sudo&lt;/code&gt;, то &lt;code&gt;sudo&lt;/code&gt; должно стоять перед &lt;code&gt;timeout&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;По истечении таймаута передаётся сигнал &lt;code&gt;TERM&lt;/code&gt; в дочерний процесс. Если нужен другой, то укажите его через аргумент &lt;code&gt;-s SIGNAL&lt;/code&gt;. Утилита дополнительно может послать сигнал &lt;code&gt;KILL&lt;/code&gt;, если команда не отреагировала на сигнал &lt;code&gt;TERM&lt;/code&gt; по истечении таймаута, указанного через параметр &lt;code&gt;-k TIMEOUT&lt;/code&gt;. Прочие вкусности смотреть через &lt;code&gt;--help&lt;/code&gt;, хотя их там, по большей части, и нет.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Высокое потребление в powertop у pipewire</title>
      <link>https://htrd.su/blog/2024/09/03/powertop-pipewire-firefox-and-speech-dispatcher/</link>
      <pubDate>Tue, 03 Sep 2024 12:31:17 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2024/09/03/powertop-pipewire-firefox-and-speech-dispatcher/</guid>
      <description>&lt;p&gt;Или: казалось бы, при чём тут Firefox&amp;hellip;&lt;/p&gt;
&lt;p&gt;Заметил, что в powertop стабильно висит процесс pipewire с потребление 1.4W. Вроде не много, но неприятно: чего он там греет на эти самые ватты?&lt;/p&gt;
&lt;p&gt;Начал разбираться, очень быстро привело, что у людей данная проблема ассоциируется с запущенным клиентом &lt;code&gt;speech-dispatcher-dummy&lt;/code&gt;. Припоминаю, что в плазмоиде управления звуком в KDE видел эту ерунду, но не придал её значения. Посмотрел процессы speech-dispatcher: запущенны от моего пользователя. Но откуда растут ноги запуска не видно: через dbus нет, через systemctl нет. А вот &lt;code&gt;pstree&lt;/code&gt; подсказал, что родитель - firefox.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[!INFO]
К слову, есть чудная тулза: &lt;code&gt;pw-top&lt;/code&gt;, которую сразу и нужно было запустить, дабы посмотреть, кто у pipewire самый требовательный клиент.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Дальше поиск привёл к настройкам Firefox. Открываем &lt;code&gt;about:config&lt;/code&gt;, далее находим опцию &lt;code&gt;media.webspeech.synth.enabled&lt;/code&gt; и выключаем её. Рестартуем Firefox и больше не наблюдаем клиента &lt;code&gt;speech-dispatcher-dummy&lt;/code&gt; и pipewire в powertop.&lt;/p&gt;
&lt;p&gt;Но Firefox не всегда запускает эту болталку. Пока не понял при каких условиях это выполняется.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Docker prune</title>
      <link>https://htrd.su/blog/2024/07/20/docker-prune/</link>
      <pubDate>Sat, 20 Jul 2024 13:42:28 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2024/07/20/docker-prune/</guid>
      <description>&lt;p&gt;Заметка в мемориз, на случай когда &lt;code&gt;/var/lib/docker/overlay2&lt;/code&gt; весит неприлично много.&lt;/p&gt;
&lt;p&gt;Первое:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker system df
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;вывод такой:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ docker system df                                         
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Images          &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;         &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;         4.467GB   4.467GB &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;100%&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Containers      &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;         &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;         0B        0B  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Local Volumes   &lt;span class=&#34;m&#34;&gt;6&lt;/span&gt;         &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;         0B        0B  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Build Cache     &lt;span class=&#34;m&#34;&gt;193&lt;/span&gt;       &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;         21.39GB   21.39GB
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Images&lt;/strong&gt; - тут скорее то, что нужно. Чистим стандартными средствами:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Смотрим образы: &lt;code&gt;docker images&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Удаляем ненужные: &lt;code&gt;docker rmi &amp;lt;IMAGE_ID&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Containers&lt;/strong&gt; - аналогично:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Смотрим через: &lt;code&gt;docker ps -a&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Удаляем: &lt;code&gt;docker rm &amp;lt;IMAGE_ID&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Local Volumes&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Чистим: &lt;code&gt;docker volume prune&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Build Cache&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Чистим: &lt;code&gt;docker buildx prune&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;У меня большую часть занимал именно &lt;strong&gt;Build Cache&lt;/strong&gt;. При последущей перестройке образов будет дольше. Но у меня этот процесс не частый, так что не критично.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Ошибка &#34;is_real_array undefined&#34; в пакете Quaternion для GNU Octave</title>
      <link>https://htrd.su/blog/2024/06/19/octave-quaternion-manjaro/</link>
      <pubDate>Wed, 19 Jun 2024 10:48:58 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2024/06/19/octave-quaternion-manjaro/</guid>
      <description>&lt;p&gt;Короткая заметка касательно пакета Quaternion для Octave. И, скорее всего, специфичная для ArchLinux/Manjaro.&lt;/p&gt;
&lt;p&gt;Итак, пакет ставится из AUR:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yay -S octave-quaternion
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Для использования в Octave нужно выполнить:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-octave&#34; data-lang=&#34;octave&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;pkg&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;load&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;quaternion&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ну а дальше всё согласно 
&lt;a href=&#34;https://octave.sourceforge.io/quaternion/overview.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;документации&lt;/a&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-octave&#34; data-lang=&#34;octave&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;octave&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;q&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;quaternion&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;  &lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;q&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;j&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;k&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Но где-то на этом шаге можно получить ошибку:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-octave&#34; data-lang=&#34;octave&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;is_real_array&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;undefined&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Происходит это, обычно, после обновления Octave, когда меняется версия API: пакет собирает библиотеку для текущей версии API Octave и помещает её в то место, где Octave может её найти согласно версии API:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/usr/lib/octave/packages/quaternion-2.4.0/x86_64-pc-linux-gnu-api-v59/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Решение&lt;/strong&gt;: просто пересобрать пакет после обновления Octave:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yay -S --rebuild octave-quaternion
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;схожая-тематика-вращения&#34;&gt;Схожая тематика вращения&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://github.com/AIS-Bonn/matlab_octave_rotations_lib&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Matlab/Octave Rotations Library&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://octave.sourceforge.io/matgeom/function/rotation3dToEulerAngles.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://octave.sourceforge.io/matgeom/function/rotation3dToEulerAngles.html&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;пакет 
&lt;a href=&#34;https://gnu-octave.github.io/packages/matgeom/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;code&gt;matgeom&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://octave.sourceforge.io/matgeom/overview.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;документация&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;yay -S octave-matgeom&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;не забывать после смены API перестраивать.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://github.com/mindThomas/MATLAB-tools/blob/master/Quaternion/quat2eul.m&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/mindThomas/MATLAB-tools/blob/master/Quaternion/quat2eul.m&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Смольный-Фалаза-Капитанский мостик</title>
      <link>https://htrd.su/blog/2024/06/08/smolniy-falaza-cap-mostik-smolniy/</link>
      <pubDate>Sat, 08 Jun 2024 22:29:03 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2024/06/08/smolniy-falaza-cap-mostik-smolniy/</guid>
      <description>&lt;p&gt;Душевно прогулялись по маршруту руч.Смольный-Фалаза-Капитанский мостик-руч.Смольный.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/files/2024/06/08/smolniy-falaza-cap-mostik/map.webp&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;лирико-хронологическая-часть&#34;&gt;Лирико-хронологическая часть&lt;/h2&gt;
&lt;p&gt;Предлагал нескольким людям, собралась пойти только Настя. Давно никуда не выгребались вместо, так что было приятно прогуляться по интересному варианту маршрута. Теперь это мой топ для Фалазы.&lt;/p&gt;
&lt;p&gt;Договариваемся встретиться в 8 утра на Бензо на повороте на Партизанск, откуда поехать на одной машине уже до Анисимовки. Предварительно прогноз погоды нас пытался отпугнуть, грозя дождь &amp;ldquo;к вечеру&amp;rdquo;, а с утра - уже &amp;ldquo;днём&amp;rdquo;. На что Настя резонно заметила: смотри старый, он лучше :)&lt;/p&gt;
&lt;p&gt;Утром во Владивостоке туман, и обложной дождь. Неужели прогноз не соврал? Но уже  ближе к Стелле туман поднимается, дворники в машине выключаю. Погода стабилизируется. Даже на новом объездном участке, который идёт вдоль Уссурийского залива - сухо и высокая облачность. Около 8:10 подъезжаю до места рандеву. Настя уже ждёт. Быстро забрасываем вещи и в путь. На Роснефти после Смолянинов решаем заправиться, но там что-то перегорожено, куча машин и заправочная колонка с моей стороны с табличками: &amp;ldquo;бензина нет и не будет&amp;rdquo;. Хорошо, по показометру уровня топлива нам должно хватить. Но на то он и показометр, что верить ему без запасной канистры литров на 10 как-то не очень хочется. Вообще, по ощущениям, после заправки первая половина расхода идёт значительно быстрее, чем вторая: было замечено на прошлом походе на 
&lt;a href=&#34;https://htrd.su/blog/2023/11/07/snezhnaya-from-the-nord/&#34;&gt;Снежную с севера&lt;/a&gt;, когда от заправки до места стоянки ушло пол бака, если верить индикатору, а на обратном пути до той же заправки -  чуть больше трети от оставшейся половины. Короче, поэтому я предпочитаю залить бак и спокойно ехать дальше. Но тут решаю, что должно хватить с большим запасом и попытаемся заправиться на обратном пути. Дальше до начала маршрута доехали без приключений.&lt;/p&gt;
&lt;p&gt;Стартовали в 9 от нефтебазы. Через 1:45 добрались до &amp;ldquo;ушуистов&amp;rdquo;. С моего посещения Смольный сильно поменялся, многие сливы и &amp;ldquo;водопады&amp;rdquo; приняли немного другой вид. Тайфуны последних лет сильно изменили рельеф. Вот так не ходишь, не ходишь и, внезапно, старый маршрут превращается в новый.&lt;/p&gt;
&lt;p&gt;У &amp;ldquo;ушуистов&amp;rdquo; перекусили, набрали воды и потопали вверх (пока &amp;ldquo;вверх&amp;rdquo; не кончится (с)).  Маршрут по курумнику промаркировали, похоже, даже в тумане будет проблематично сбиться с пути. Где-то на 2/3 подъёма встретили двух туристов, идущих интересную интерпертацию данного маршрута: Грибановка-Фалаза-Смольный(&amp;ldquo;ушуисты&amp;rdquo;)-Капитанский Мостик-Грибановка. Перекинулись парой фраз, пожелали удачи и двинули дальше. К слову, в начале подъёма было жаркова-то, ноги не очень-то горели желанием куда-то идти, но к середине подъёма начал обдувать приятный ветерок, стало ощутимо комфортнее. Настя умудрилась практически пройтись по змее, причём сразу за мной. Я же её даже не заметил.&lt;/p&gt;
&lt;p&gt;Примерно через 1:45 на добрались до вершины. Контрольные фото, перекусили, повалялись и на спуск.&lt;/p&gt;
&lt;p&gt;По дороге спугнули ещё одного щитомордника и Дикого бурундука. Минут через 45 добрались до спуска к Грибановке, решили не задерживаться и двинули в сторону Капитанского мостика. Лес сильно отличается от весеннего. Получается прямо несколько различных маршрутов: зима, весна, лето и, возможно, осень. Хотя ранняя осень не сильно отличается от лета, а поздняя - от зимы).&lt;/p&gt;
&lt;p&gt;Ещё примерно через 40 минут - мы на Мостике. Ближе к нему лес прямо вот очень приятный: мелкая травка, нет завалов, кедры вперемешку с дубами. Грибной одним словом.&lt;/p&gt;
&lt;p&gt;На мостике небольшая пауза на поедание еды, выпивание воды и созерцание окружающих ландшафтов. У Насти разболелась голова, скорее всего сказывается изменение погоды (дело к вечеру, обещают дождь, наверное давление полетело вниз), пригодился цитромон из аптечки. Дальше по тропе валимся влево - к Смольному. Направо - тропа на дорогу до  Грибановки.&lt;/p&gt;
&lt;p&gt;Через 30 минут - мы уже у ручья. Там есть неплохая заводь, где можно окунуться. С учётом того, что до машины остаётся совсем ничего. Очень удобно: спустился, остудился, до машины - уже и вспотеть не успеешь. У машины планируется быстрый но горячий перекус лапшой, поэтому запасаемся водой и в путь.  И примерно в 17:00 мы уже дошли до машины. Прикидываем, можно ли пройти маршрут без спешки &amp;ldquo;от электрички до электрички&amp;rdquo;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;На круг получилось 8 часов.&lt;/li&gt;
&lt;li&gt;До топливной базы ~2.2км от станции. Если топить бодро с типичными 5км/ч, то это ≈26-30 минут, то есть суммарно ещё час сверху, итого - 9 часов.&lt;/li&gt;
&lt;li&gt;Электричка утром приходит в 10, а вечером - 18:49. Не укладываемся. Либо нужно сильно сокращать время на привалы, перекусы, созерцания окружающих ландшафтов, водные процедуры.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;К слову, ребят, которые планировали подниматься потом от Смольного на Капитанский мостик мы так и не встретили. Они или проскочили раньше или ещё не дошли.&lt;/p&gt;
&lt;p&gt;У машины неторопливо делаем обед, собираемся и в обратный путь. Опять заезжаем на заправку. С моей стороны  только 92, но оказывается, на другой колонке, подъезд к которой перекрыт есть 95! Делаю пару хитрых манёвров и жопом доезжаю к ней на заправку. Успех. До Бензо так же доезжаем без приключений. Опять перекидываем вещи, заправляемся уже сами кофием с Бензо-кафе. Наблюдаем четвёрку низколетящих цаплей или даурских журавлей, орнитолог из меня никакой. По коням и домой.&lt;/p&gt;
&lt;p&gt;Как итог, выход получился очень душевным. Не сложный, но интересный вариант маршрута на Фалазу, с возможностью искупаться на обратном пути. Был рад увидеться с Настей, очень давно никуда не ходили, хотя,  как в походе пошутил: &amp;ldquo;вместе росли как туристы&amp;rdquo; :) Обновил боты, но впечатления&amp;hellip; напишу в технической части.&lt;/p&gt;
&lt;h2 id=&#34;фото-и-gps&#34;&gt;Фото и GPS&lt;/h2&gt;
&lt;p&gt;Немного фото и геоданных:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://disk.yandex.ru/a/0C9-oaWjQy-mFA&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Фото&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://htrd.su/files/2024/06/08/smolniy-falaza-cap-mostik/%d0%a1%d0%bc%d0%be%d0%bb%d1%8c%d0%bd%d1%8b%d0%b9-%d0%a4%d0%b0%d0%bb%d0%b0%d0%b7%d0%b0-%d0%9a%d0%b0%d0%bf%d0%9c%d0%be%d1%81%d1%82%d0%b8%d0%ba.gpx.gz&#34;&gt;Смольный-Фалаза-КапМостик.gpx.gz&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;полутехническая-информация&#34;&gt;Полутехническая информация&lt;/h2&gt;
&lt;h3 id=&#34;кухня&#34;&gt;Кухня&lt;/h3&gt;
&lt;p&gt;А что тут говорить: однодневный ПВД, что в карманы закинули, то и едим :)&lt;/p&gt;
&lt;h3 id=&#34;профиль-высот-и-километраж&#34;&gt;Профиль высот и километраж&lt;/h3&gt;
&lt;p&gt;Сводка:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;День&lt;/th&gt;
          &lt;th&gt;Протопали,  &lt;br&gt;км&lt;/th&gt;
          &lt;th&gt;Набор высоты,  &lt;br&gt;м&lt;/th&gt;
          &lt;th&gt;Сброс высоты,  &lt;br&gt;м&lt;/th&gt;
          &lt;th&gt;Время/в движении,  &lt;br&gt;ч&lt;/th&gt;
          &lt;th&gt;Скорость/в движении,&lt;/th&gt;
          &lt;th&gt;Начало движения,  &lt;br&gt;ч&lt;/th&gt;
          &lt;th&gt;Конец движения,  &lt;br&gt;ч&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;8 июнь&lt;/td&gt;
          &lt;td&gt;19.1&lt;/td&gt;
          &lt;td&gt;1125&lt;/td&gt;
          &lt;td&gt;1170&lt;/td&gt;
          &lt;td&gt;08:00/05:15&lt;/td&gt;
          &lt;td&gt;2.4/3.6&lt;/td&gt;
          &lt;td&gt;08:58&lt;/td&gt;
          &lt;td&gt;16:58&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;strong&gt;19.1&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;1125&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;1170&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;—&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;—&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;—&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;—&lt;/strong&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Профиль:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/files/2024/06/08/smolniy-falaza-cap-mostik/profile.webp&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;ботинки-trek-turist26&#34;&gt;Ботинки TREK Turist26&lt;/h3&gt;
&lt;p&gt;Итак, в этом ПВД обновил боты 
&lt;a href=&#34;https://trekshoes.ru/catalog/zhenskaya-obuv-vesna-leto/botinki-trek-turist26-chernyy-kaprovelyur/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;TREK Turist26&lt;/a&gt;. С учётом ожиданий и пользования длительного времени трекинговых ботинок Zamberlan, Asolo, Scarpa:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Zamberlan Civetta GTX RR&lt;/li&gt;
&lt;li&gt;Asolo Power Matic 100 GV&lt;/li&gt;
&lt;li&gt;Scarpa Mont Blanc&lt;/li&gt;
&lt;li&gt;Asolo Greenwood GV MM&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;больших надежд не возлагал. И по ходу движения примерно такой набор наблюдений сформировался:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Подошва очень цепкая, это явно плюс: по ручью и по мокрым брёвнышкам и по камням прыгать пришлось и по курумнику - держалось очень хорошо.&lt;/li&gt;
&lt;li&gt;Но тонкая, для движения по курумникам или камням дискомфорта не вызывает, но привычка использовать жёсткие подошвы, когда можно смело ставить ногу в V-образную выемку меж острых камней, требует коррекции.&lt;/li&gt;
&lt;li&gt;Неоднозначно решение взять на размер больше: нужно утягивать сильнее, но на спуске действительно пальцы не ощутили никакого давления. Буду ещё прислушиваться к ощущениям.&lt;/li&gt;
&lt;li&gt;Шнуровка. Нет, решение поставить D-кольца вместо второго или даже третьего ряда крючков это явная ошибка. Я видел в интернетах  отзывы, которые указывали, что такое решение сказывается положительно на живучести шнурков&amp;hellip; Простите, что? У меня ботинки быстрее выходят из строя, чем перетираются шнурки, уже коллекция &lt;strong&gt;целых&lt;/strong&gt; шнурков собралась. Ощущение, что такие отзывы пишут пользователи разных вариантов бертцев, которые не пользовались качественной обувью. Скорее всего причина в более качественной фурнитуре и материалах тех же шнурков? Использование же крючков положительно сказывается как на скорости, так и на удобстве шнуровки. На длительных спусках бывает возникает необходимость больше одного раза скорректировать шнуровку, сейчас это банально неудобно.&lt;/li&gt;
&lt;li&gt;Как продолжение про шнуровке: при плотной шнуровке верхние кольца ощутимо давят на ногу. Я от такого отвык.&lt;/li&gt;
&lt;li&gt;Тонкая защита носка. По сути, это только механическая защита самого носка, кожи, но не ноги пользователя внутри - очень легко проминается. Опять таки - ходить в условиях курумников, каменных осыпей нужно осторожнее.&lt;/li&gt;
&lt;li&gt;Кожаная подкладка на пятке. Это изобретение злобного гения. Я отвык заклеивать ноги пластырем или тейпом. Но в этот раз пришлось вспомнить это забытое знание. Нигде больше не тёрло, но вот пятка бы на пройденной дистанции (≈19 км с набором с сбросом порядка 1100 м, подробности - выше)&lt;/li&gt;
&lt;li&gt;Температурный режим. Явно перепутаны &amp;ldquo;+&amp;rdquo; и &amp;ldquo;-&amp;rdquo;  в диапазоне от -15 до +5. В том треккинговом носке, котором я хожу зимой в снегоступах в трекинговых ботах выше (в них же хожу и летом, но с более тонким носком) в этих банально задубею. Сейчас было около +20 ноге было комфортною носок треккинговый средней толщины. Но, температурный режим определяется косвенно: если выставить фильтр &amp;ldquo;-15&amp;hellip;+5&amp;rdquo;, то боты появятся, а вот в самой карточке товара этой информации нет.&lt;/li&gt;
&lt;li&gt;Вес. Тут явно выигрывает у &amp;ldquo;серьёзных&amp;rdquo; бот.&lt;/li&gt;
&lt;li&gt;Вождение в машине. Удобно, дискомфорта нет.&lt;/li&gt;
&lt;li&gt;При движении по воде, пусть и не длительном, судя по поведению капель на поверхности кожи: пропитка DWR имеет место быть. Здесь ещё буду наблюдать, как долго она будет работать.&lt;/li&gt;
&lt;li&gt;Отсутствие мембраны - тут скорее всего даже плюс для летнего варианта (если забыть про &amp;ldquo;-15&amp;rdquo; в анонсе).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;В целом, с учётом соотношения цены/качества, то по ходу похода в голове вырисовывалась чёткая 4 или 4 &amp;ldquo;с минусом&amp;rdquo; по пятибальной шкале. Пока не приехал домой и не обнаружил это на правом ботинке:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/files/2024/06/08/smolniy-falaza-cap-mostik/20240609_103626.webp&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Это уже ни в какие ворота. Один выход, 19 км по далеко не сложному маршруту и сразу начинает отклеиваться подошва у ботинок, у которых в названии &amp;ldquo;Turist&amp;rdquo;. Похоже, что Дальневосточный туризм сильно отличается своей суровостью от оного на западе нашей необъятной :)&lt;/p&gt;
&lt;p&gt;Вердикт: &lt;strong&gt;субъективная оценка - 3, не больше&lt;/strong&gt;.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Белый город. Вдп. Зуевский. Еломовские водопады</title>
      <link>https://htrd.su/blog/2024/05/19/white-city-wf-zuevsky-wf-elomovsky/</link>
      <pubDate>Sun, 19 May 2024 15:46:42 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2024/05/19/white-city-wf-zuevsky-wf-elomovsky/</guid>
      <description>&lt;p&gt;28 апреля - 1 мая 2024.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/files/white-city-wf-zuevsky-wf-elomovsky/map.gif&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;19 марта началось составление планов на первые майские по части похода с простого, но ёмкого вопроса-предложения Ксюши в нашем походном чатике:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Давайте замутим поход на майские?&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Сразу же поступила пара предложений от Жени. Точнее одно, но с вариациями. Вариация первая - совсем по лайту. Но места интересные, для меня ещё нехоженные. Вариация вторая - при прочих вводных разведать дорогу и подняться на г.Синяя&amp;hellip; не по Икрянкам.&lt;/p&gt;
&lt;p&gt;Других предложений не было (у меня вообще с идеями в последние годы как-то не очень), поэтому по отсутствию возражений остановились на первом варианте: водопад Зуевский, скальный массив &amp;ldquo;Белый город&amp;rdquo;, Еломовские водопады и радиальный выход на гору Лысая.&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;/li&gt;
&lt;li&gt;Ксюша&lt;/li&gt;
&lt;li&gt;Алина&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;часть-лирико-хронологическая&#34;&gt;Часть лирико-хронологическая&lt;/h2&gt;
&lt;p&gt;По обстоятельствам не смог поехать  на своей машине, поэтому согласуемся ехать все впятером на Машином Outlander&amp;rsquo;е. А там, куда сможем доехать, туда доедем, а остальное - пешком. Туристы всё же.&lt;/p&gt;
&lt;h3 id=&#34;день-первый-лайтовый&#34;&gt;День первый. Лайтовый.&lt;/h3&gt;
&lt;p&gt;Встречаемся у Жени с Машей в 7:45. С БАМа меня подхватывает Ксюша. Здороваемся, перегружаем рюкзаки, оставляем машины и в путь.&lt;/p&gt;
&lt;p&gt;На новой объездной дороге машина радостно рапортует, мол, transmission overheat, slow down. Явно пять взрослых человек, пусть трое из которых - лёгкие девушки, и полный багажник рюкзаков не идут на пользу вариаторной трансмиссии вкупе с привычкой водителя управлять турбованным фориком на маханике. Его динамики явно не хватает и не будет. Но ничего, тише едешь - дальше будешь. До перевала  Серебряный бортовой компьютер время от времени повторял сию фразу о перегреве, поэтому предлагаю сделать на перевале санитарную остановку и дать больше отдыха вариатору. Помогло. До самого Лазо  (и дальше) никто больше не жаловался. В Лазо заправка машины и остановка в магазине на мороженку.&lt;/p&gt;
&lt;p&gt;На грунтовках видны следы последних тайфунов, но само полотно (хммм&amp;hellip; точнее грунт) в достаточно хорошем состоянии, что до Лазо, что в сторону Чистоводного и Преображения.&lt;/p&gt;
&lt;p&gt;В общем, особо не торопясь, немного не доезжая до Чистоводного, сворачиваем на грунтовку по пади Синегорная. Сразу же на свороте встречаем след крупного кошачьего. Возникла дискуссия: тигр или рысь. Вроде как для тигра маловат след. Но когтей нет, так что точно киса.&lt;/p&gt;
&lt;p&gt;От дороги углубились где-то на километр. И то, большую часть пути машина везла только рюкзаки, а мы шли пешком. Но и это неплохо. Идти налегке особых хлопот не доставляет.&lt;/p&gt;
&lt;p&gt;Находим удобное место, где можно оставить машину и тут же устраиваем обед. Ребята делают обработку одежды от клещей. Я же решил сделать её заранее дома, а вещи до самого выезда положить в большой пакет и плотно завязать. Так же раскидываем  продукты и участникам. Предлагаю делить на четверых, сам же буду нести кухню и палатку - как раз то, что брал из своей экипировки на группу.&lt;/p&gt;
&lt;p&gt;Накидываем рюкзаки и в путь&amp;hellip; А метров через 300-400 и первая &amp;ldquo;переправа&amp;rdquo;. Я перескакиваю на другую сторону и тут же предлагаю не повторять моего манёвра, так как через 50 метров обратный перепрыг. Ребята обошли по лесу. Сразу же ещё одна переправа, а метров через 50 ещё одна, через основное русло реки. Тут уж пришлось разуваться&amp;hellip; Очень не хотелось в лайтовом походе идти с мокрыми ногами. По дороге до стоянки недалеко от вдп.Зуевский мы насчитали 11 обязательных переправ через реку, из которых разуваться пришлось (мне и Жене) только на 3 или 4 (девушкам - чаще). Подсчёт вели уже на обратном пути.&lt;/p&gt;
&lt;p&gt;После первой &amp;ldquo;серьёзной&amp;rdquo; переправы следует длинный участок без бродов. Там же проходим мимо посадок леса. Не берусь судить на глаз&amp;hellip; но не моложе 30-40 лет. Как поняли, что посадки? А есть отличительная черта - посадка ровными рядами, которые сильно бросаются в глаза.&lt;/p&gt;
&lt;p&gt;Где-то через 3 км какой-то кордон или зимовье и сразу за ним вторая переправа, где не вышло перескочить ко камушкам. К слову, если бы воды было чуть больше, то и там, где получилось пройти без разувания, пришлось бы или мочить ноги, или тратить время на снятие-одевание ботинок.&lt;/p&gt;
&lt;p&gt;Потом уже особо не обращали внимание на переправы, приняв их как должное. Главное, что запоминали как переходили, дабы не тратить время на это на обратном пути (там время уже было достаточно ограниченным ресурсом).&lt;/p&gt;
&lt;p&gt;На место стоянки подошли где-то к 18:10. Световое время позволяет, поэтому сразу решаем сгонять на водопад Зуевский. Тем более, что до него рукой подать - только хребтик перешагнуть&amp;hellip; Что Женя и предлагает сделать в буквальном смысле слова. Я как бы не против перешагивания хребтиков, даже очень за, но только по делу. Прикидывая, что место популярное, предлагаю осмотреться и, действительно, сразу же находим тропу, куда двигаться. Акт клушегубства не удался. Хватаем фонарики (ибо нефиг) и в путь. Время оценить не беру, но дошли очень быстро.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Сам водопад наблюдается со стороны с открытой скальной площадки, расположенной аккурат напротив него. Представляет из себя практически монолитную плиту, по которой струями стекает ручей. Красиво.&lt;/p&gt;
&lt;p&gt;Делаем общие фото, потом девушек оставляем наверху, а с Женей решаем спуститься и по каньону подойти под основание водопада. Судя по отсутствию тропы, пользуется этим направлением подхода чуть более, чем никто (допускаю существование таких же отмороженных, как и мы). Вид же снизу интересный, но не впечатляющий. Наблюдать с видовой и проще и более живописно. Главное в поисках хорошего ракурса сильно к краю не подойти.&lt;/p&gt;
&lt;p&gt;Возвращаемся и решаем прогуляться выше, до останца над водопадом. Тем более, что есть намёки на тропу, которой даже пользуются (и точно чаще, чем направлением, по которому мы прошли чуть ранее снизу).&lt;/p&gt;
&lt;p&gt;Самого водопада с останца не видно, но открывается живописный вид на окружающие склоны. Золотой осенью тут должно быть красиво.&lt;/p&gt;
&lt;p&gt;Далее дорога обратно до лагеря, установка палаток, сбор дров на костёр и вкусное Харчо, спасибо Маше за сий кулинарный шедевр. По палаткам и спать. Вставать решаем в 6:30: день предстоит долгий, по плану, и Белый город, и дорога до машины, и переезд до лесопитомника рядом с ключом Еломовский, и переход под Еломовские водопады. А пока - спать.&lt;/p&gt;
&lt;p&gt;Прошли около 13 км.&lt;/p&gt;
&lt;h3 id=&#34;день-второй-долгий&#34;&gt;День второй. Долгий.&lt;/h3&gt;
&lt;p&gt;Ночь была тёплой. Спал в расстёгнутом на половину спальнике и только в тонком термобелье без носков.&lt;/p&gt;
&lt;p&gt;Завтракаем, закидываем в рюкзаки воду и перекус и отправляемся на Белый город. Время 8:48.&lt;/p&gt;
&lt;p&gt;Тут Женя второй раз предлагает скоротать путь и ломануться на тропу по хребту напрямую от лагеря, через распадочек. Вспоминаю свой давешний нонстоп и таки высказываю мнение, что распадочки это хорошо и даже прекрасно, но стоит сделать небольшой крюк, а милые приморские рощи оставить на потом. Снова акт клушегубства не удался. Спускаемся вниз до переправы и сразу от неё уходим на хребет. Начало подъёма, тропа, не сразу бросается в глаза, но по самому хребту она идёт уже изрядно натоптанной и заметной. Более того, сам хребет чистый, без запалов, обоняние радует запах хвои, а глаз - цветущий рододендрон. Ещё подъём очень пологий и совсем не доставляет каких-то неудобств. Тропа  через некоторое время соединяется с дорогой, по которой особо отважные/безбашенные/проходимые (нужное подчеркнуть) добираются до самого скального массива. Там же по дороге можно пройтись и пешком (от стоянки перед началом подъёма по хребту), но нам идти там нудно, долго и не интересно. Плюс несколько дополнительных форсирований водных преград. Ну его.&lt;/p&gt;
&lt;p&gt;К &amp;ldquo;городу&amp;rdquo; поднимаемся примерно к 10 часам утра. Скидываем рюкзаки, накидываем курточки и идём осматривать проявление красот Приморской природы. Останцы и скальные массивы каждый по своему красив. А в причудливых формах образований каждый видит что-то своё, на что хватает фантазии, воображения или личного опыта (Алина :)) Этот массив не исключение. Так что стоит к посещению он однозначно!&lt;/p&gt;
&lt;p&gt;После осмотров, фотосессий возвращаемся в лагерь. Тут главное по дороге не проскочить сворот на тропинку.&lt;/p&gt;
&lt;p&gt;К моменту возвращения в лагерь (на часах 12:12) небо начинает затягивать, а в планах же было опробовать бассейн, обнаруженный прошлым днём. Хоть время и обеденной и по плану было готовить еду, и собирать лагерь, но предлагаю собирать лагерь сразу, а на обед останавливаться чуть позже на ручье, где сразу и искупаться. Обоснования два:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;есть шансы, что не так затянет небо;&lt;/li&gt;
&lt;li&gt;по дороге согреемся.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;На том и порешили. Собираем палатки, пакуем рюкзаки, забрасываем их на спины и отправляемся считать броды (как я писал выше, сделали мы это на обратном пути). Выши в 12:43.&lt;/p&gt;
&lt;p&gt;Чуть менее, чем за час (13:25) добрались до бассейна, где и остановились на обед и на покупаться. Водичка бодрящая! Обедаем, складываемся и вперёд. Женская часть коллектива максимально облегчается для ускорения форсирования бродов, я с Женей прыгаем по тем же камушкам, что бы опробованы днём ранее.&lt;/p&gt;
&lt;p&gt;После брода возле кордона, речь как-то плавно зашла про МПР и ЕЁ. Слово за слово и стланник (как кедровый, так и весь другой) выделяется в отдельный подвид&amp;hellip; ЕС. И это не Европейский союз.&lt;/p&gt;
&lt;p&gt;К 17:05 мы у машины. Закидываем рюкзаки, а сами пешим порядком отправляемся в сторону дороги. Женя прогревается и выезжает следом. Ближе к выходу Маша делает вид, что голосует и ловит машину, чем смущает мужиков на буханке, которые, судя по всему,  видя сию картину, были не против предложить свои услуги по перевозке.&lt;/p&gt;
&lt;p&gt;Примерно к 18:30 мы добираемся до лесопитомника. Ну как на машине. Часть пути, как и по пади Синегорная, проходим пешим порядком.&lt;/p&gt;
&lt;p&gt;На поляне начинает витать вопрос в воздухе, что, мол, нужно где-то становиться раньше, а то до водопадов добираться будем уже по темну. Выходим в 19:02. После перевала, на поляне в конце дороги (19:40) устраиваем обстоятельный совет по результатам тестового перехода. Решаем таки двигаться до ближайшей поляны и становится там лагерем. Поляна километра через 1.5, доходим до неё за 20 минут. Место полностью свободное, что есть прекрасно и хорошо.&lt;/p&gt;
&lt;p&gt;Ставимся, разжигаем костёр, готовим ужин, общаемся, затем в люлю и спать.&lt;/p&gt;
&lt;p&gt;Прошли, суммарно, ~21.5 км&lt;/p&gt;
&lt;h3 id=&#34;день-третий-дождливый&#34;&gt;День третий. Дождливый.&lt;/h3&gt;
&lt;p&gt;Эта ночь холоднее первой. Пришлось застёгивать спальник. Ещё и дождь. К запланированному подъёму в 7 утра дождь ещё напоминал о себе. Откладываем подъём до 9 утра. Но уже в 8:30 или около того Женя заглядывает к нам в палатку в поисках котелка и горелки. На вопрос: &amp;ldquo;а что там по дождю?&amp;rdquo;, отвечает, что, мол, дождь пришёл в динамическое равновесие: высыхает на одежде с той же скоростью, что и выпадает. Эта информация стала стимулом к появлению из коконов бабочек-туристов.&lt;/p&gt;
&lt;p&gt;Начинаем выползать. Я занимаюсь кухней. Женя - костром. Маша второе утро подряд в роли баристы. А котелка системы&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt; в аккурат хватает на порцию кофе на 5 человек.&lt;/p&gt;
&lt;p&gt;Планы на сегодня не такие наполеоновские, как в прошлый день: водопады и Лысая. Но на небе низкая облачность. Проходящий мимо собрат-турист сказал, что на курумнике наледь и скользко, а ещё, что все хорошие места возле водопадов заняты. Сам стоял на каком-то пяточке у самой воды. В общем, хорошо, что вчера остановились именно тут. Ну и Лысая теперь под вопросом.&lt;/p&gt;
&lt;p&gt;Лагерь оставляем, берём обед-перекус и только к 11 часам&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt; выходим на маршрут. Погода изо всех сил пытается настроиться, но облачность всё так же низкая.&lt;/p&gt;
&lt;p&gt;По пути встречаем группы, идущие в обратный путь. Действительно, народу много, вряд ли бы мы нашли такое же удобное место для лагеря, особенно по ночи. К водопадам подходим к 11:55 и оказываемся тут совершенно одни. Что и говорить - отлично! Ведь меж своими договориться не лезть в кадр значительно проще.&lt;/p&gt;
&lt;p&gt;Небольшая фотосессия у первого водопада и начинаем подъём на Лысую. Никакой наледи пока не наблюдаем. Наблюдаем на ёлках выше снег. А ещё ветер. И низкую облачность. При этом над нами - синее небо, а за вершину будто туча зацепилась.&lt;/p&gt;
&lt;p&gt;Добрались до колодца. Женя, проявил чудеса гибкости и пластики, но смог залезть в него и добыть половину кружки воды. Под Машины возмущения. Хотя её понять можно.&lt;/p&gt;
&lt;p&gt;Ещё раз осматриваем путь вверх, облачность, порывы ветра и решаем, что ну его нафиг. Все там уже были и были в хорошую погоду, поэтому лезть сейчас туда&amp;hellip; не, мы сможем, но получим ли мы от этого удовольствие?&lt;/p&gt;
&lt;p&gt;Сворачиваем сие мероприятие и валимся вниз. Возле &amp;ldquo;оазиса&amp;rdquo; с родником решаем устроить обед с видами на окружающие распадки и хребтики. Наслаждаемся, и тут порывом ветра до нас донесло снег! А ведь правильно решили, бросить это гиблое дело.&lt;/p&gt;
&lt;p&gt;Разделавшись с обедом, собираем мусор и сваливаемся на поляну около второго водопада. Оставляем рюкзаки и Машу, изъявившую желание погреться на солнышке, и идём на второй и третий водопады. Четвёртый решаем оставить без внимания на этот раз.&lt;/p&gt;
&lt;p&gt;Запечатлев и визуально и технически (наделали фото) чудес природы, возвращаемся до Маши, забрасываем рюкзаки и отправляемся в обратную дорогу до лагеря. По дороге встречаем первую (и единственную за этот день) группу, замечаем несколько тисов, благополучно пропущенных по дороге сюда. А за спиной мгла от вершины горы в один момент спустилась прямо на водопады. Ещё раз убеждаемся, что всё сделали и решили правильно (повторяюсь, будто оправдываюсь).&lt;/p&gt;
&lt;p&gt;В лагере устраиваем купания в заводи рядом. Потом костёр, общение, приготовление ужина, сам ужин и спать.&lt;/p&gt;
&lt;p&gt;День сегодня и правда оказался не таким насыщенным, как предыдущий. Однако, день принёс несколько подарков от Вселенной: комплект наконечников на палочки и складную пластиковую ложку-вилку, про подобную только на днях говорили с сыном. Так что, пользуясь случаем: Вселенной - спасибо :)&lt;/p&gt;
&lt;p&gt;Прошли 11.5 км.&lt;/p&gt;
&lt;h3 id=&#34;день-четвёртый-выездной&#34;&gt;День четвёртый. Выездной.&lt;/h3&gt;
&lt;p&gt;Ночью пришлось застегнуть не только спальник, но и одеть флисовую соточку. А утром (ясным и безоблачным, к слову) на пологах палатки можно было заметить сверкающий иней.&lt;/p&gt;
&lt;p&gt;Но были и менее приятные открытия. На правой ноге под носком обнаруживаю дохлого, но впившегося мелкого клеща. Как он там оказался - тайна за семью печатями. Есть мнение, что собрал после купания, ведь верхнюю одежду вообще не хранили в палатке: складывали в пакет и выставляли в тамбур. К слову, хорошая практика. Главное - продукты и перекусы из карманов вынуть, а то проходили: на 
&lt;a href=&#34;https://htrd.su/blog/2023/11/07/snezhnaya-from-the-nord/&#34;&gt;Снежной&lt;/a&gt; мышь проела и палатку и штаны, что бы добраться до сыра.&lt;/p&gt;
&lt;p&gt;Но да ладно. Неторопливо превращаемся из гусениц в бабочек (выползаем из спальников). Маша снова наш бариста.&lt;/p&gt;
&lt;p&gt;Завтракаем, убираем за собой лагерь, забираем банки из костра, проливаем кострище и в обратный путь.&lt;/p&gt;
&lt;p&gt;До машины проскакиваем быстро и не заметно. Переодеваемся, закидываем рюкзаки и пешком отправляемся до дороги, ждём Женю, загружаем уже себя в транспорт и в путь. Проезжая Лазовский перевал, обнаруживаем заметное количество снега по лесу. Значит действительно по верхам было достаточно холодно и шёл снег. Отсюда и наледь на камнях на подъёме на Лысую, которая, судя по всему, к 12 часам уже сошла.&lt;/p&gt;
&lt;p&gt;Далее дорога проходит без особых приключений, даже без женского голоса из приборной панели: &amp;ldquo;Transmission overheat, slow down.&amp;rdquo; И примерно к 15:30  мы уже все по домам. По крайней мере если верить потоку фотографий в группе.&lt;/p&gt;
&lt;p&gt;Протопали 3.13 км&lt;/p&gt;
&lt;h3 id=&#34;тезисы&#34;&gt;Тезисы&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;Ок. Ок, но тревожно.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;ЕС. И это не Европейский союз.&lt;/li&gt;
&lt;li&gt;Пофиг куда, главное - с кем.&lt;/li&gt;
&lt;li&gt;Давай осмотримся.&lt;/li&gt;
&lt;li&gt;Идти вверх, пока вверх не кончится.&lt;/li&gt;
&lt;li&gt;Душня компании.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;фото-gps-и-прочее&#34;&gt;Фото, GPS и прочее&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Фото на канале: 
&lt;a href=&#34;https://t.me/&amp;#43;wTHPbA5ZjU1lYzYy&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://t.me/+wTHPbA5ZjU1lYzYy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Техническая сводка: 
&lt;a href=&#34;https://htrd.su/files/white-city-wf-zuevsky-wf-elomovsky/brief.pdf&#34;&gt;brief.pdf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GPS: 
&lt;a href=&#34;https://htrd.su/files/white-city-wf-zuevsky-wf-elomovsky/%d0%91%d0%b5%d0%bb%d1%8b%d0%b9%20%d0%b3%d0%be%d1%80%d0%be%d0%b4.%20%d0%92%d0%b4%d0%bf.%d0%97%d1%83%d0%b5%d0%b2%d1%81%d0%ba%d0%b8%d0%b9.%20%d0%92%d0%b4%d0%bf.%d0%95%d0%bb%d0%be%d0%bc%d0%be%d0%b2%d1%81%d0%ba%d0%b8%d0%b9.gpx.gz&#34;&gt;Белый город. Вдп.Зуевский. Вдп.Еломовский.gpx.gz&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;На карте: 
&lt;a href=&#34;https://nakarte.me/#m=11/43.13657/133.71529&amp;amp;l=O/N/J/F/K&amp;amp;nktl=lC2n51SfVgqZnOug0kk-lA&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://nakarte.me/#m=11/43.13657/133.71529&amp;l=O/N/J/F/K&amp;nktl=lC2n51SfVgqZnOug0kk-lA&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;полутехническая-часть&#34;&gt;Полутехническая часть.&lt;/h2&gt;
&lt;h3 id=&#34;кухня&#34;&gt;Кухня&lt;/h3&gt;
&lt;p&gt;Не я ведал. Было вкусно, много и хорошо. В большой поход так низя) За подробностями - к Жене.&lt;/p&gt;
&lt;h3 id=&#34;профиль-высот-и-километраж&#34;&gt;Профиль высот и километраж&lt;/h3&gt;
&lt;p&gt;Сводка:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;День&lt;/th&gt;
          &lt;th&gt;Протопали,  &lt;br&gt;км&lt;/th&gt;
          &lt;th&gt;Набор высоты,  &lt;br&gt;м&lt;/th&gt;
          &lt;th&gt;Сброс высоты,  &lt;br&gt;м&lt;/th&gt;
          &lt;th&gt;Время/в движении,  &lt;br&gt;ч&lt;/th&gt;
          &lt;th&gt;Скорость/в движении,&lt;/th&gt;
          &lt;th&gt;Начало движения,  &lt;br&gt;ч&lt;/th&gt;
          &lt;th&gt;Конец движения,  &lt;br&gt;ч&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;28 апр&lt;/td&gt;
          &lt;td&gt;12.9&lt;/td&gt;
          &lt;td&gt;365&lt;/td&gt;
          &lt;td&gt;150&lt;/td&gt;
          &lt;td&gt;04:31/03:36&lt;/td&gt;
          &lt;td&gt;2.9/3.6&lt;/td&gt;
          &lt;td&gt;14:44&lt;/td&gt;
          &lt;td&gt;19:16&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;29 апр, ч.1&lt;/td&gt;
          &lt;td&gt;18.3&lt;/td&gt;
          &lt;td&gt;630&lt;/td&gt;
          &lt;td&gt;855&lt;/td&gt;
          &lt;td&gt;08:24/04:56&lt;/td&gt;
          &lt;td&gt;2.2/3.7&lt;/td&gt;
          &lt;td&gt;08:48&lt;/td&gt;
          &lt;td&gt;17:13&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;29 апр, ч.2&lt;/td&gt;
          &lt;td&gt;3.24&lt;/td&gt;
          &lt;td&gt;125&lt;/td&gt;
          &lt;td&gt;30&lt;/td&gt;
          &lt;td&gt;00:59/00:54&lt;/td&gt;
          &lt;td&gt;3.3/3.6&lt;/td&gt;
          &lt;td&gt;19:03&lt;/td&gt;
          &lt;td&gt;20:03&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;30 апр&lt;/td&gt;
          &lt;td&gt;11.5&lt;/td&gt;
          &lt;td&gt;715&lt;/td&gt;
          &lt;td&gt;730&lt;/td&gt;
          &lt;td&gt;06:44/04:34&lt;/td&gt;
          &lt;td&gt;1.7/2.5&lt;/td&gt;
          &lt;td&gt;10:40&lt;/td&gt;
          &lt;td&gt;17:25&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;1 мая&lt;/td&gt;
          &lt;td&gt;3.13&lt;/td&gt;
          &lt;td&gt;30&lt;/td&gt;
          &lt;td&gt;130&lt;/td&gt;
          &lt;td&gt;00:47/00:42&lt;/td&gt;
          &lt;td&gt;4.0/4.5&lt;/td&gt;
          &lt;td&gt;09:49&lt;/td&gt;
          &lt;td&gt;10:36&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;strong&gt;49.62&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;1865&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;1895&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;—&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;—&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;—&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;—&lt;/strong&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Профили по дням. Общий смысла делать нет из-за переезда во второй день:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;28 апр&lt;/strong&gt;
&lt;img src=&#34;https://htrd.su/files/white-city-wf-zuevsky-wf-elomovsky/profile01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;29 апр, ч.1&lt;/strong&gt;
&lt;img src=&#34;https://htrd.su/files/white-city-wf-zuevsky-wf-elomovsky/profile02.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;29 апр, ч.2&lt;/strong&gt;
&lt;img src=&#34;https://htrd.su/files/white-city-wf-zuevsky-wf-elomovsky/profile03.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;30 апр&lt;/strong&gt;
&lt;img src=&#34;https://htrd.su/files/white-city-wf-zuevsky-wf-elomovsky/profile04.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1 мая&lt;/strong&gt;
&lt;img src=&#34;https://htrd.su/files/white-city-wf-zuevsky-wf-elomovsky/profile05.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr /&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;Поправка на момент публикации: вышли в  18:18, дошли до смотровой перед водопадом к 18:27. Т.е. ориентировочно 10 минут.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;FireMaple Polaris X5&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;Если точнее, то в 10:41&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Thinkpad P15Gen2: Linux Vendor Firmware Service (LVFS)</title>
      <link>https://htrd.su/blog/2024/05/19/thinkpad-p15gen2-linux-vendor-firmware-service/</link>
      <pubDate>Sun, 19 May 2024 15:00:49 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2024/05/19/thinkpad-p15gen2-linux-vendor-firmware-service/</guid>
      <description>&lt;p&gt;Как-то забывал сделать заметку, что данный ноутбук поддерживает обновления встроенных прошивок (как минимум BIOS и далее по накату: UEFI, System firmware, EC и так далее) через через 
&lt;a href=&#34;https://fwupd.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Linux Vendor Firmware Service (LVFS)&lt;/a&gt;, для его используется пакет 
&lt;a href=&#34;https://github.com/fwupd/fwupd&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;fwupd&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Несколько месяцев назад у меня на ровном месте перестала работать Ethernet карточка, обновление FW решило вопрос в положительном русле.&lt;/p&gt;
&lt;p&gt;У меня последовательность обновлений выглядит так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo fwupdmgr get-devices
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo fwupdmgr refresh --force
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo fwupdmgr get-updates
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo fwupdmgr update
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Перед началом лучше закрыть всё лишнее и быть готовым к запросу на перезагрузку. Ну и питание от сети лучше не отключать.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Восстановление через U-Boot</title>
      <link>https://htrd.su/blog/2024/05/15/repair-with-u-boot/</link>
      <pubDate>Wed, 15 May 2024 14:03:01 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2024/05/15/repair-with-u-boot/</guid>
      <description>&lt;p&gt;Хотел на Khadas VIM3 выключить DWC3 (USB Host controller), сделал оверлей, поместил в &lt;strong&gt;/boot/dtb/overlays/kvim3&lt;/strong&gt;, добавил запись в &lt;strong&gt;/boot/env.txt&lt;/strong&gt; и&amp;hellip; получил кирпич.&lt;/p&gt;
&lt;p&gt;Оверлей простой и, вроде, правильный (в конце приведу), но система отказалась загружаться. Возможно на его клоки или ещё что что-то завязано, что не даёт ядру загружаться дальше. Но возникает резонный вопрос: &amp;ldquo;Шо делать!?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Дальше посмотрим один из вариантов, как это можно решить. Возможно пригодится и на других платформах.&lt;/p&gt;
&lt;p&gt;Вариант номер раз и самый просто: перейти в загрузчик и заново прошить систему. Сработает 100%, но всё, что установлено и настроено будет потеряно. Не подходит. Думаем дальше.&lt;/p&gt;
&lt;p&gt;При загрузке система выводит логи на UART. Подключаем (пины 17(GND), 18 (RX), 19 (TX), TTL - 3v3, адаптер лучше на такое напряжение, а то вместо восстановления может выйти горевшая плата). Видим логи от U-Boot. Потом загрузку ядра и ступор. А меж тем, выше начала загрузки ядра можно заметить строчку, говорящую, что можно прервать нормальную загрузку ядра  нажатием Enter. Зажимаем Enter и перегружаем плату и мы попадаем в U-Boot.&lt;/p&gt;
&lt;p&gt;Далее логика простая: нужно отредактировать файл &lt;strong&gt;/boot/env.txt&lt;/strong&gt; и убрать от туда упоминание нашего overlay.&lt;/p&gt;
&lt;p&gt;Понятно, что текстового редактора сюда не завезли. Поэтому наши 
&lt;a href=&#34;https://hub.digi.com/dp/path=/support/asset/u-boot-reference-manual/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;друзья&lt;/a&gt;, это команды работы с памятью и загрузки/записи на файловую систему:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://docs.u-boot.org/en/latest/usage/cmd/load.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;code&gt;ext4load&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://docs.u-boot.org/en/latest/usage/cmd/read.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;code&gt;ext4write&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://docs.u-boot.org/en/latest/usage/cmd/md.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;code&gt;md.b&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mw.b&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://docs.u-boot.org/en/latest/usage/cmd/cp.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;code&gt;cp.b&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Далее последовательность действий.&lt;/p&gt;
&lt;p&gt;Загружаем наш файл в память:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ext4load mmc 1:5 0x80000000 /boot/env.txt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Адрес &lt;code&gt;0x80000000&lt;/code&gt; выбран произвольно, главное, что бы он присутствовал и был достаточно большим, что бы не переписать структуры U-Boot.&lt;/p&gt;
&lt;p&gt;Результат:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;kvim3&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#ext4load mmc 1:5 0x80000000 /boot/env.txt    &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;4575&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;bytes&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;read&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ms&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;744.1&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;KiB&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Запоминаем размер в байтах и сразу переводим его в HEX: &lt;code&gt;0x11DF&lt;/code&gt;. Все команды воспринимают именно в HEX значения.&lt;/p&gt;
&lt;p&gt;Сохраняем резервную копию:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ext4write mmc 1:5 0x80000000 /boot/env.txt.old 0x11DF &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Смотрим:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;md.b 0x80000000 0x11DF
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Весь вывод приводить не буду, покажу начало и конец:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kvim3#md.b 0x80000000 0x11DF  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;80000000: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23    ################  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;80000010: 23 23 23 23 23 23 23 23 23 23 23 23 23 44 4f 20    #############DO    
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;80000020: 4e 4f 54 20 54 4f 55 43 48 20 54 48 49 53 20 4f    NOT TOUCH THIS O  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;80000030: 50 54 49 4f 4e 23 23 23 23 23 23 23 23 23 23 23    PTION###########
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;80001190: 65 65 64 20 74 6f 20 62 65 20 72 65 6d 6f 76 65    eed to be remove  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;800011a0: 64 0a 6f 76 65 72 6c 61 79 73 3d 75 61 72 74 33    d.overlays=uart3  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;800011b0: 20 70 77 6d 5f 66 20 69 32 63 33 20 69 32 73 20     pwm_f i2c3 i2s    
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;800011c0: 70 68 69 6c 6c 69 6e 20 77 61 74 63 68 64 6f 67    phillin watchdog  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;800011d0: 20 64 69 73 61 62 6c 65 2d 64 77 63 33 0a 0a        disable-dwc3..
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Пишем пробелы вместо &lt;code&gt;disable-dwc3&lt;/code&gt; (12 символов), все значения - HEX. Судя по дампу, начало записи - &lt;code&gt;0x800011d0 + 1 = 0x800011d1&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mw.b 0x800011d1 0x20 &lt;span class=&#34;m&#34;&gt;12&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Снова смотрим. И как только результат устраивает - пишем:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ext4write mmc 1:5 0x80000000 /boot/env.txt 0x11DF &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;После чего проверяем процедуру чтения в память и отображения и:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cfgload
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;что загружает систему в случае Khadas.&lt;/p&gt;
&lt;p&gt;Как варианты:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Так как изменения строго в конце - можно просто записать на N байт меньше.&lt;/li&gt;
&lt;li&gt;Если изменения в середине и переписать пробелами (0x20) не получится - наш друг &lt;code&gt;cp.b src dst count&lt;/code&gt;. В общем, почувствуй себя текстовым редактором!&lt;/li&gt;
&lt;li&gt;Если файл огромный (не лезет в память), можно прочитать его частично: у команд &lt;code&gt;ext4load/ext4write&lt;/code&gt; можно указать размер и смещение. У &lt;code&gt;ext4write&lt;/code&gt; мы пользовались размером, указывая смещение 0.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Полезные команды.&lt;/p&gt;
&lt;p&gt;Список MMC:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mmc list
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;А вообще, я перебором нашёл, тут команда &lt;code&gt;ls&lt;/code&gt; в помощь:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ls mmc 1:5 /boot
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Команда &lt;code&gt;usb&lt;/code&gt; может использоваться для работы с USB накопителем. Для sd карт тоже есть функционал. Главное, что бы он был доступен в U-Boot.&lt;/p&gt;
&lt;h2 id=&#34;dts-overlay&#34;&gt;DTS overlay&lt;/h2&gt;
&lt;p&gt;А вот и виновник:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/dts-v1/;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/plugin/;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/ {  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       fragment@0 {  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;               target = &amp;lt;&amp;amp;dwc3&amp;gt;;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;               __overlay__ {  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                       status = &amp;#34;disabled&amp;#34;;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;               };  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       };  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;};
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Компилировать:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dtc -I dts -O dtb disable-dwc3.dts -o disable-dwc3.dtbo
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>KDE 6 и HiDPI</title>
      <link>https://htrd.su/blog/2024/05/14/manjaro-kde6-hidpi/</link>
      <pubDate>Tue, 14 May 2024 11:23:44 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2024/05/14/manjaro-kde6-hidpi/</guid>
      <description>&lt;p&gt;Дошёл до Manjaro и переезд на KDE6. В лучших традициях жанра, альтернативы в виде KDE5 не оставили.&lt;/p&gt;
&lt;p&gt;Но не так страшен чёрт оказался. Правда, при моих 141 DPI (1080p при мониторе 15.6&amp;quot;, скрипт для Octave для расчёта 
&lt;a href=&#34;https://htrd.su/blog/2013/09/27/mysli_o_dpi/&#34;&gt;тут&lt;/a&gt;) пришлось повозиться.&lt;/p&gt;
&lt;p&gt;Если ничего не менять, то всё мелко. Если следовать рекомендациям и ставил глобальное масштабирование в 150%, которое и даёт DPI 144, то всё становится адово огромным. При этом установка DPI меняет не только шрифты, но и размеры элементов интерфейса (б$@). В результате вспомнил, что как только у меня QtC стал собираться с Qt6 в какой-то апдейт он тоже стал на моих 141, полез в мой родной &lt;code&gt;.qtc-override&lt;/code&gt; (это моя самодеятельность, не обращайте внимание) и выставил теперь для всей системы то, что стояло для Qt Creator:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;QT_SCALE_FACTOR_ROUNDING_POLICY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;RoundPreferFloor
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;что дало то, что мне прямо вот нужно!&lt;/p&gt;
&lt;p&gt;Прописал этот параметр в &lt;strong&gt;~/.config/plasma-workspace/env/dpi.sh&lt;/strong&gt;. Для других окружений можно, например, в &lt;strong&gt;~/.profile&lt;/strong&gt; или в &lt;strong&gt;~/.config/environment.d/dpi-plasma.conf&lt;/strong&gt;, но в виде без &lt;code&gt;export&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;QT_SCALE_FACTOR_ROUNDING_POLICY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;RoundPreferFloor
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Детали:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://doc.qt.io/qt-6/highdpi.html#configuring-x11&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://doc.qt.io/qt-6/highdpi.html#configuring-x11&lt;/a&gt; - про вообще скалинг и&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://doc.qt.io/qt-6/qt.html#HighDpiScaleFactorRoundingPolicy-enum&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://doc.qt.io/qt-6/qt.html#HighDpiScaleFactorRoundingPolicy-enum&lt;/a&gt; - про то, какие полиси на округление есть и что они значат&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;При этом ложка дёгтя остаётся. Глобальное масштабирование рьяно требует шага в 6.25% (на X11). Как я выше писал: для 15.6&amp;quot; монитора при FullHD матрице - это 141 DPI. Два ближайшие значения глобального скалирования, кратные 6.25% это:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;150%, что даёт DPI 144&lt;/li&gt;
&lt;li&gt;143.75%, что даёт DPI 138&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;И мои 141 аккурат по середине: 3 пункта вверх и 3 пункта вниз. Ни туда, ни сюда. 138 DPI подходит, наиболее близко для новых матриц в 16&amp;quot;. Но для X11 остаётся возможность вручную скорректировать DPI на вкладке Fonts, хотя они и не рекомендуют делать этого. На Wayland сессии этой возможности нет, но, вроде, нет и ограничения на кратность 6.25% (а ещё можно кратность меньше 100% задать). Wayland сильно не тыкал палочкой, так как там нужный мне VirtualBox тупо не работает (точнее гостевые OS с GUI, типа Windows 10).&lt;/p&gt;
&lt;p&gt;Короче, что-то у них хреново с промежуточными DPI отличными от 100..200..300% но хоть такие ручки есть.&lt;/p&gt;
&lt;p&gt;Ну и резюмируя:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Указываем  переменную &lt;code&gt;QT_SCALE_FACTOR_ROUNDING_POLICY&lt;/code&gt; (у меня в &lt;code&gt;RoundPreferFloor&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;На X11:
&lt;ol&gt;
&lt;li&gt;Ставим глобальный масштаб (&amp;ldquo;Input &amp;amp; Output&amp;rdquo; → &amp;ldquo;Display &amp;amp; Monitor&amp;rdquo; → &amp;ldquo;Display Configuration&amp;rdquo;) в ближайшее значение, что даёт 141 DPI, для простоты пусть будет 150%&lt;/li&gt;
&lt;li&gt;Корректируем DPI в 141 в настройках шрифтов (&amp;ldquo;Appearance &amp;amp; Style&amp;rdquo; → &amp;ldquo;Fonts&amp;rdquo; → &amp;ldquo;Fonts&amp;rdquo; и &amp;ldquo;Force Font DPI&amp;rdquo; в нужное значение). Или не трогаем, если вас всё устраивает. Плюсом не трогать: per-monitor работа.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;На Wayland:
&lt;ol&gt;
&lt;li&gt;Судя по всему, только ручками глобального масштаба.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;ЗЫ да, напоминаю, что 100% - это 96 DPI, поэтому все множители отсюда и пляшут. Исторически сложилось. Хотя на странице со 
&lt;a href=&#34;https://htrd.su/blog/2013/09/27/mysli_o_dpi/&#34;&gt;скриптом-калькулятором&lt;/a&gt; физически у мониторов может быть любая дичь.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Кривая Литовка нонстоп</title>
      <link>https://htrd.su/blog/2024/05/10/krivaya-litovka-nonstop/</link>
      <pubDate>Fri, 10 May 2024 17:27:04 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2024/05/10/krivaya-litovka-nonstop/</guid>
      <description>&lt;p&gt;В субботу 13 апреля Женя Воеводский анонсировал лёгкую прогулку от электрички до электрички на хр.Большой Воробей. В результате мы и сходили от электрички до электрички, но есть нюанс.&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://htrd.su/files/krivaya-litovka-nonstop/map.gif&#34;&gt;&lt;img src=&#34;https://htrd.su/files/krivaya-litovka-nonstop/map.gif&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;лирико-хронологическая-часть&#34;&gt;Лирико-хронологическая часть&lt;/h2&gt;
&lt;p&gt;Нюанс заключался в том, что концепция поменялась буквально во время проговаривания фразы: &amp;ldquo;я с вами&amp;hellip;&amp;rdquo;. В результате сходили нонстопом маршрут с Анисимовки до Тигрового через Капитанский мостик, г.Фалаза и далее по р.Кривая Литовка, р.Литовке и пер.Тигровый.&lt;/p&gt;
&lt;p&gt;Компания собиралась из 5 человек, но двое откололись из-за работы и даже были попытки свернуть или переиначить сиё мероприятие. Но все эти жалкие попытки нас поколебать были рассеяны и, как сказал Женя: &amp;ldquo;Концентрация суровости в группе не пострадала&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Результирующий состав вышел таким:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Женя В. - кто там ходил и знает;&lt;/li&gt;
&lt;li&gt;Антон - отличный попутчик, просто тот, кто хочет сходить нонстоп;&lt;/li&gt;
&lt;li&gt;и Я. Меня назначили РукПохом. Но так как мы не приемлем фомализм, то это ничего не означает.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Утро началось с того, что я попытался уехать не на той электричке, но Женя на Второй речке выхватил из этого заблуждения. Буквально в последний момент.&lt;/p&gt;
&lt;p&gt;В Анисимовке попытались в местных магазинчиках найти репелленты. Это оказалось невыполнимой задачей. Ну да ладно. Главное погода шепчет (сверни не туда&amp;hellip;). Температура, по ощущениям была сильно за 20 тепла.&lt;/p&gt;
&lt;p&gt;Не сильно торопясь, доходим до нефтебазы, за которой усиленно хотели пойти не тем путём, но вовремя осознали свою неправоту. Дошли од начала подъёма на Капитанский мостик. Тут первый, пробный, брод. Жарко. Переобуваемся и переходим, радуемся ощущениям в ногах.&lt;/p&gt;
&lt;p&gt;Подъём до Мостика дался тяжко. Организм упорно намекал, что нужно лечь, поспать, и вообще, зачем вам всё это?.. Но вот видовая. Делаем небольшой привал. Перекусываем, снимаем первых клещей. Пока только с одежды.&lt;/p&gt;
&lt;p&gt;От Мостика по хребту до развилки на Грибановку уже легче. По мере набора высоты температура становится всё более комфортной и идти становится проще. На развилке привал, а после вообще открывается второе дыхание, но, лично у меня, его хватает ровно до последнего взлёта на Фалазу, потом оно куда-то уходит. Хотя кругом уже и снег имеет место быть и холодок от земли приятно разгоняет зной от солнца.&lt;/p&gt;
&lt;p&gt;На Фалазе-Западной (она же: Фалаза-Жрачечная, Крест Фалазы) приваливаемся опять. Топлю себе воды в джет-бойле (на самом деле Firemaple Polaris X5, но кому какое до этого дело), а то запасённый литр воды явно не под этот температурный режим. Иными словами - вода почти кончилась. Благо был снег. И благо, что был чистый снег!&lt;/p&gt;
&lt;p&gt;До основной вершины уже идём по снежной тропе. И хоть натроплено давно и обстоятельно, но время от времени всё равно проваливаемся. Начинают закрадываться нехорошие предчувствия. Ведь до нормального спуска на Кривую Литовку вообще нужно топать по хребту под снегом и без тропы.&lt;/p&gt;
&lt;p&gt;Опасения ещё больше усиливаются при подходе к скамейке недалеко от начала спуска с хребта на Бункер (&amp;ldquo;Простоквашино&amp;rdquo;). А раньше на этой плите возлежал на обратном пути&amp;hellip; Цивилизация. Но ладно, отвлёкся. Держим совет. Настаиваю, что сваливаться внизу нужно по ближайшему гребню.  С умным видом показываю рельеф на карте, некий трек, который там присутствует в виде тропы. На вопрос, а кто РукПох, скромно замечаю, что меня им и назначили. Подленько, но на этом прения и заканчиваются.&lt;/p&gt;
&lt;p&gt;Да! Чуть не забыл! Ещё появляются крамольные мысли, что нужно сворачиваться, спускаться в Анисимовку, снимать домик и вообще. Излишне говорить, что раз я пишу эти строки, то мысли были задавлены в зародыше!&lt;/p&gt;
&lt;p&gt;В общем, собираем волю в кулак и начинаем продолжать свой путь.&lt;/p&gt;
&lt;p&gt;Доходим до того момента, как тропа начинает сваливаться к Бункеры. Тут нам нужно преодолеть порядка 100 метров по нетропленному снегу, что бы начать выходить на хребтик, по которому нам предстоит спуск к реке. Это 100 метров были шикарными! Они окончательно поставили точку в вопросе, где спускаться на Кривую Литовку.&lt;/p&gt;
&lt;p&gt;Но хребет тоже оказался хорош.&lt;/p&gt;
&lt;p&gt;Для начала, думаю, что не стоит говорить, что тропа, идущая там присутствует только на карте. Хотя уже сказал. Потом, сам хребет еле читается на карте и абсолютно не читается на рельефе. Ну и практически очевидный факт: милые Приморские рощи. Без ЕЁ, но с зарослями актинидии, которая стремится подловить незадачливого туриста и сделать ему подножку или обстоятельно зацепиться за рюкзак или прочие выступающие части. Естественно, не обошлось и без многочисленных прививок элеутероккоком и оралией. Прелесть, одним словом.&lt;/p&gt;
&lt;p&gt;Тем не менее, здесь ходят люди: встретили две разряженные ловушки на живность. Сами выглядят довольно старыми, но сторожки явно свежие.&lt;/p&gt;
&lt;p&gt;Но самое главное - до Кривой Литовки мы смогли спуститься засветло. Дальше те же МПР, но есть река как ориентир.&lt;/p&gt;
&lt;p&gt;На карте вдоль реки тоже нарисован трек по следам нонстоперов на мероприятии Нонстоп-реванш. Но всякие Мансаки и прочие тайфуны добавили эпичности в прокладывании пути. Отдать должное организму: утреннее жаление поспать как рукой сняло и открылось какое-то энное дыхание.&lt;/p&gt;
&lt;p&gt;Позитива добавлял ещё тот факт, что согласно карте, то нужно потерпеть чуть более километра и там начинается дорога. Но терпеть пришлось 3 км. Дороги, даже намёка, что она когда-то была, не оказалось. Точку, где мы впервые вышли на неё я приложу, ровно как и точку с поляной и кунгом. Что бы ориентироваться в будущем.&lt;/p&gt;
&lt;p&gt;Ну а без тропы движение по речке оно одинаково почти везде в Приморье: густые заросли, завалы, намывы после прошлых тайфунов и элементы акробатики при перескакивании с берега на берег для обхода прижимов и совсем уж густых зарослей. Хорошо, что смекнул заранее и взял дополнительный фонарик с узким лучом, что бы осматривать потенциальные пути переправ. А так же нам крупно повезло, что всю Кривую Литовку вышло форсировать не замочив ноги.&lt;/p&gt;
&lt;p&gt;Порадовали и шикарные плиты на речке, ближе уже к выходу на дорогу. Но поставить точку я не догадался. При дневном свете и в солнечную погоду зрелище, скорее всего, вообще волшебное. Надо будет проверить по лайту.&lt;/p&gt;
&lt;p&gt;Как короткий промежуточный итог: спуск и движение по реке до выхода на дорогу занимает около 5-6 км и требует примерно столько же времени в часах.По моим прикидкам, наша средняя скорость на этом участке не превышала 900 м/ч. Да, именно так: девятьсот метров в час.&lt;/p&gt;
&lt;p&gt;Выход на дорогу даёт +100 к морали и позитивному настроению. Но начинает маячить перспектива не успеть на первую электричку&amp;hellip; Эту мысль просто принимаем как данность, ибо если так, то ничего сделать мы не сможем, а значит, нечего и беспокоиться. А тем временем, по заранее определённому плану мы останавливаемся на&amp;hellip; ужин. Время, примерно, 23:30. Запаренная лапша с карпаччо из курицы еле лезет, но конфетки с чаем залетают на ура. Ещё плюс несколько пунктов к морали.&lt;/p&gt;
&lt;p&gt;Чуть за полночь выдвигаемся в дальнейший путь. По дороге уже идти выходит бодрее, но не так эпично. Хотя отпечатки следов тигра и медведя добавляют остроты ощущений.&lt;/p&gt;
&lt;p&gt;К моменту выхода на дорогу по газопроводу (на Литовку), ведущую на пер.Тигровый, мы изрядно разогнались. Эпичные расчёты с элементами матана, линейной алгебры и всего такого (нет), подсказали, что если к 4 утра мы будем на пер.Тигровый, то на первую электричку у нас будут гарантированные шансы успеть.&lt;/p&gt;
&lt;p&gt;У нас просто просто какой-то поток бонусов к морали и мотивации!&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;/ul&gt;
&lt;p&gt;На перевал зашли в 03:53. Беглое изучение карты, рельефа и расстояния до перрона ставят все точки над i: мы успеваем! Поэтому немного расслабляемся и даём себе хорошо отдохнуть.&lt;/p&gt;
&lt;p&gt;Последний рывок на, примерно, 7 км и в начале седьмого мы уже под навесом, возле магазина, недалеко от перрона. Переоблачаемся в сухое и тёплое, осматриваемся на предмет клещей (у Антона по пути вытащили из шеи одного, который не подавал признаков жизни&amp;hellip; будто замёрз), завтракаем. По клещам, как говорил одного вытащили, одного снял у себя с банданы, тоже неподвижного. Реально, ощущение, что с ночным похолоданием они впали в кому.&lt;/p&gt;
&lt;p&gt;В 8:30 прыгаем в электричку и с чувством выполненного долга едем домой.&lt;/p&gt;
&lt;p&gt;И, на последок, короткие ремарки по результам:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Нонстопы имеют право на существование, но для них нужен особый склад характера&amp;hellip; или состояние души;&lt;/li&gt;
&lt;li&gt;всю дорогу, думал, что взял лишних вещей, но когда одевался в них перед электричкой, отбросил эти мысли;&lt;/li&gt;
&lt;li&gt;нужен рюкзак поменьше в хозяйстве, литров на 60-70;&lt;/li&gt;
&lt;li&gt;джет-бойл - весчь, даже если это аналог, а не оригинал;&lt;/li&gt;
&lt;li&gt;карты могут дарить неверные надежды;&lt;/li&gt;
&lt;li&gt;по Кривой Литовке стоит погулять при свете солнца;&lt;/li&gt;
&lt;li&gt;основные впечатления при движении по МПР, ЕЁ и т.п., но как же потом радуешься дороге! Хотя там и скучно;&lt;/li&gt;
&lt;li&gt;организм странная штука: в начале пути хочет спать, а по среди ночи - ни в одном глазу;&lt;/li&gt;
&lt;li&gt;не путайте высоту и расстояние до точки в навигаторе, иначе можно получить нехилую просадку в мотивации и морали из-за ложного чувства топтания на месте;&lt;/li&gt;
&lt;li&gt;если что-то вспомню, то дополню.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;фото-и-gps&#34;&gt;Фото и GPS&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;GPS:
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://htrd.su/files/krivaya-litovka-nonstop/krivaya-litovka-nonstop-export.gpx&#34;&gt;krivaya-litovka-nonstop-export.gpx&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Фото:
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://disk.yandex.ru/d/kFftJsq2j74uhg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://disk.yandex.ru/d/kFftJsq2j74uhg&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;полутехническая-информация&#34;&gt;Полутехническая информация&lt;/h2&gt;
&lt;h3 id=&#34;кухня&#34;&gt;Кухня&lt;/h3&gt;
&lt;p&gt;Взял Firemaple Polaris X5, початый баллон газа, лапшу (&amp;ldquo;доширак&amp;rdquo;), пюре под запаривание и карпаччо. Несколько пакетиков чая, конфеты и 6 бутеров. Часть этого добра вернулось домой.&lt;/p&gt;
&lt;h3 id=&#34;профиль-высот-и-километраж&#34;&gt;Профиль высот и километраж&lt;/h3&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;День&lt;/th&gt;
          &lt;th&gt;Протопали,  &lt;br&gt;км&lt;/th&gt;
          &lt;th&gt;Набор высоты,  &lt;br&gt;м&lt;/th&gt;
          &lt;th&gt;Сброс высоты,  &lt;br&gt;м&lt;/th&gt;
          &lt;th&gt;Время/в движении,  &lt;br&gt;ч&lt;/th&gt;
          &lt;th&gt;Скорость/в движении,&lt;/th&gt;
          &lt;th&gt;Начало движения,  &lt;br&gt;ч&lt;/th&gt;
          &lt;th&gt;Конец движения,  &lt;br&gt;ч&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;13-14 апр&lt;br&gt;&lt;strong&gt;Всего&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;41&lt;/td&gt;
          &lt;td&gt;1735&lt;/td&gt;
          &lt;td&gt;1665&lt;/td&gt;
          &lt;td&gt;20:13/14:21&lt;/td&gt;
          &lt;td&gt;2.0/2.8&lt;/td&gt;
          &lt;td&gt;13 апр 10:18&lt;/td&gt;
          &lt;td&gt;14 апр 6:31&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/files/krivaya-litovka-nonstop/profile.png&#34; alt=&#34;profile.png&#34;&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Conan vs vcpkg, действие второе</title>
      <link>https://htrd.su/blog/2024/04/23/conan-vs-vcpkg-2/</link>
      <pubDate>Tue, 23 Apr 2024 10:43:28 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2024/04/23/conan-vs-vcpkg-2/</guid>
      <description>&lt;p&gt;И так, в продолжение темы 
&lt;a href=&#34;https://htrd.su/blog/2024/04/12/conan-vs-vcpkg/&#34;&gt;Conan vs vcpkg&lt;/a&gt;. Как я там уже писал с vcpkg подружиться получилось.&lt;/p&gt;
&lt;p&gt;Для начала тулчейн. У меня получилось запустить как с MXE, который был собран командой &lt;code&gt;make cc&lt;/code&gt; . Сам конфиг для статической сборки получился такой (файл &lt;strong&gt;settings.mk&lt;/strong&gt;, положить в корень копии MXE):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://htrd.su/files/conan-vs-vcpkg/settings.mk&#34;&gt;settings.mk&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Для него нужен вот такой CMake toolchain файл:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://htrd.su/files/conan-vs-vcpkg/toolchain-cross-mingw32-linux-w64-mxe.cmake&#34;&gt;toolchain-cross-mingw32-linux-w64-mxe.cmake&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Но с тем же успехом отработал и тулчейн из Manjaro/ArchLinux. Для него тулчён файл чуууточку поправленный:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://htrd.su/files/conan-vs-vcpkg/toolchain-cross-mingw32-linux-w64-sys.cmake&#34;&gt;toolchain-cross-mingw32-linux-w64-sys.cmake&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Всё отличие:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-diff&#34; data-lang=&#34;diff&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;--- toolchain-cross-mingw32-linux-w64-mxe.cmake 2024-04-15 11:42:29.423500871 +1000  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gi&#34;&gt;+++ toolchain-cross-mingw32-linux-w64-sys.cmake 2024-04-15 11:42:29.426834270 +1000  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gu&#34;&gt;@@ -1,9 +1,18 @@  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gi&#34;&gt;+# Tested with system MinGW compiler in the Manjaro Linux  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+#  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+# Just install it:  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+#  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+# sudo pacman -S mingw-w64-gcc mingw-w64-binutils mingw-w64-crt mingw-w64-headers mingw-w64-winpthreads  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+#  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+# Or just adjust PATH (prepend or append) with location of the installed MinGW  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+#  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+#  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt;# the name of the target operating system  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;set(CMAKE_SYSTEM_NAME Windows)  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;set(CMAKE_CROSSCOMPILING TRUE)  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-set(MXE_PREFIX ${CMAKE_CURRENT_LIST_DIR}/mxe/usr)  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-set(COMPILER_PREFIX &amp;#34;x86_64-w64-mingw32.static&amp;#34;)  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gi&#34;&gt;+set(COMPILER_PREFIX &amp;#34;x86_64-w64-mingw32&amp;#34;)  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt;   
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# for find_library()  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;set(CMAKE_LIBRARY_ARCHITECTURE ${COMPILER_PREFIX})  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;@@ -19,12 +28,12 @@  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;&lt;/span&gt;endif()  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# which compilers to use for C and C++  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-find_program(CMAKE_RC_COMPILER NAMES ${MXE_PREFIX}/bin/${COMPILER_PREFIX}-windres)  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-find_program(CMAKE_C_COMPILER NAMES ${MXE_PREFIX}/bin/${COMPILER_PREFIX}-gcc)  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-find_program(CMAKE_CXX_COMPILER NAMES ${MXE_PREFIX}/bin/${COMPILER_PREFIX}-g++)  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gi&#34;&gt;+find_program(CMAKE_RC_COMPILER NAMES  ${COMPILER_PREFIX}-windres)  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+find_program(CMAKE_C_COMPILER NAMES   ${COMPILER_PREFIX}-gcc)  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+find_program(CMAKE_CXX_COMPILER NAMES ${COMPILER_PREFIX}-g++)  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt;   
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;if (NOT IS_VCPKG)  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-    find_program(PKG_CONFIG_EXECUTABLE NAMES ${MXE_PREFIX}/bin/${COMPILER_PREFIX}-pkg-config)  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gi&#34;&gt;+    find_program(PKG_CONFIG_EXECUTABLE NAMES ${COMPILER_PREFIX}-pkg-config)  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt;endif()  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;set(CMAKE_C_COMPILER_WORKS On)  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;@@ -45,7 +54,7 @@  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;&lt;/span&gt;set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# We want to install alongside the compiler by default  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-set(CMAKE_INSTALL_PREFIX ${MXE_PREFIX})  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gi&#34;&gt;+set(CMAKE_INSTALL_PREFIX /usr/${COMPILER_PREFIX})  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt;   
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;if (VCPKG_INSTALLED_DIR)  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    # TBD: make more clean  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;@@ -54,12 +63,6 @@  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;&lt;/span&gt;    set(CMAKE_SHARED_LINKER_FLAGS &amp;#34;-L${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib&amp;#34;)  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;endif()  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-# WA for MXE  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-if (NOT IS_VCPKG)  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-    set(CMAKE_EXE_LINKER_FLAGS &amp;#34;-liconv&amp;#34;)  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-    set(CMAKE_SHARED_LINKER_FLAGS &amp;#34;-liconv&amp;#34;)  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-endif()  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt;# DEBUG  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#get_cmake_property(_variableNames VARIABLES)  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#list (SORT _variableNames)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;По сути, только префиксы и &amp;ldquo;костыль&amp;rdquo; с &lt;code&gt;iconv&lt;/code&gt; убраны.&lt;/p&gt;
&lt;p&gt;Далее, мы имели дело с этим:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/bin/sh: строка 1: powershell.exe: команда не найдена  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ninja: build stopped: subcommand failed.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Да, Microsoft решила свои проблемы радикальным способом: у нас есть свой шелл, ну давай его так пропихнём. Нужно отметить, что для сборки это не критично и ошибка вылазит на этапе &lt;code&gt;cmake --install -B build&lt;/code&gt;. Вылечить можно двумя способами:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;В тулчейнах выше указано:
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cmake&#34; data-lang=&#34;cmake&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# WA for vcpkg + mingw cross building  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# - you can install powershell: `yay -S powershell`  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# - or just skip unneeded in most cases step  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# - note, Z_xxx vairalble are internal one  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Z_VCPKG_POWERSHELL_PATH&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;оно заглушает вывод и не мешает сборке.&lt;/li&gt;
&lt;li&gt;Либо поставить пакет: &lt;code&gt;yay -S powershell&lt;/code&gt;, в системе появится шелл &lt;code&gt;pwsh&lt;/code&gt;, который ищется в первую очередь, а потом делается откат на &lt;code&gt;powershell.exe&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Собственно, в прошлой статье на этом и была загвоздка. И после этого всё строится нормально, ровно как и не сильно изменился сам тулчйн-файл. Добавилось только ещё:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cmake&#34; data-lang=&#34;cmake&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;CMAKE_SHARED_LINKER_FLAGS&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;-L${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;как часть WA для vcpkg.&lt;/p&gt;
&lt;p&gt;Немного усложнился файл манифеста &lt;strong&gt;vcpkg.json&lt;/strong&gt; - добилось платформенное условие для Linux:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;nt&#34;&gt;&amp;#34;$schema&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;https://raw.githubusercontent.com/microsoft/vcpkg-tool/main/docs/vcpkg.schema.json&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;nt&#34;&gt;&amp;#34;dependencies&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;s2&#34;&gt;&amp;#34;ffmpeg&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;s2&#34;&gt;&amp;#34;zlib&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;nt&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;libusb&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;nt&#34;&gt;&amp;#34;features&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;               &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   &lt;span class=&#34;nt&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;udev&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   &lt;span class=&#34;nt&#34;&gt;&amp;#34;platform&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;linux&amp;#34;&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;               &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;nt&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;usbctl&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;nt&#34;&gt;&amp;#34;version-string&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;1.11&amp;#34;&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;А сборка и конфигурирование проходит так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cmake -S . -B build-win64-sys -G Ninja &lt;span class=&#34;se&#34;&gt;\ &lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   -DCMAKE_TOOLCHAIN_FILE&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;pwd&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;/vcpkg/scripts/buildsystems/vcpkg.cmake &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;   -DCMAKE_CROSSCOMPILING&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;On &lt;span class=&#34;se&#34;&gt;\ &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# возможно, можно не указывать, но не перепроверял&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   -DENABLE_STATIC&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;On &lt;span class=&#34;se&#34;&gt;\ &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# это проектная опция&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   -DVCPKG_TARGET_TRIPLET&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;x64-mingw-static &lt;span class=&#34;se&#34;&gt;\ &lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   -DVCPKG_CHAINLOAD_TOOLCHAIN_FILE&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;pwd&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;/toolchain-cross-mingw32-linux-w64-sys.cmake  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cmake --build   &lt;span class=&#34;nv&#34;&gt;$BUILD&lt;/span&gt; --target all  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cmake --install &lt;span class=&#34;nv&#34;&gt;$BUILD&lt;/span&gt; --prefix build-cross-install/usr &lt;span class=&#34;c1&#34;&gt;# будет работать только если поставлен powershell и убрана строка с установкой Z_VCPKG_POWERSHELL_PATH в тулчейне&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Conan vs vcpkg</title>
      <link>https://htrd.su/blog/2024/04/12/conan-vs-vcpkg/</link>
      <pubDate>Fri, 12 Apr 2024 12:12:57 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2024/04/12/conan-vs-vcpkg/</guid>
      <description>&lt;p&gt;&lt;strong&gt;UPD 2024-04-15&lt;/strong&gt; vcpkg поборол, причём статику сгенерил как при помощи системного MinGW из Manjaro, так и с тулчёном из MXE. Подробности чуть позже. Conan в пролёте.
&lt;strong&gt;UPD 2024-04-23&lt;/strong&gt; а вот и подробности: 
&lt;a href=&#34;https://htrd.su/blog/2024/04/23/conan-vs-vcpkg-2/&#34;&gt;Conan vs vcpkg, действие второе&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;дискас.&lt;/p&gt;
&lt;p&gt;А вообще, мне нужно было кросс-компильнуть максимально статический бинарник из-под Linux в Windows. Оба не справились, но vcpkg продвинулся дальше.&lt;/p&gt;
&lt;p&gt;Не без мук, но дальше. Настолько дальше, что бинарь он отстроил&amp;hellip; но в конце он зачем-то пытается сделать:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/bin/sh: строка 1: powershell.exe: команда не найдена  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ninja: build stopped: subcommand failed.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;o_O&lt;/p&gt;
&lt;p&gt;А быстрее всего и с минимальными телодвижениями справился 
&lt;a href=&#34;https://mxe.cc/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;MXE&lt;/a&gt;, но он чисто под MinGW кросс-компиляцию и создаёт свой sysroot. Понятно, что как универсально средство - не очень подходит.&lt;/p&gt;
&lt;p&gt;MXE можно использовать и только собрать тулчейн (&lt;code&gt;make cc&lt;/code&gt;), а остальное отдать на откуп пакетникам. vcpkg частично справляется (см выше). Conan на рецепте iconv свалился из-за косяка в рецепте (жёстко ищет RC компилятор с именем &lt;code&gt;windres&lt;/code&gt;, причём не понятно по каким путям), а что-то сходу как его заоверлеить я не нашёл (MXE и vcpkg позволяют это и достаточно лехко).&lt;/p&gt;
&lt;p&gt;ЗЫ у меня в системном MinGW тулчейне сломали статическую сборку.&lt;/p&gt;
&lt;p&gt;Для тех, кто ходит под кат. Но напомню - успех не достигнут.&lt;/p&gt;
&lt;p&gt;Текущий файл профиля для Conan (информации мало) - &lt;strong&gt;mingw64&lt;/strong&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-ini&#34; data-lang=&#34;ini&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;[settings]  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;na&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Windows  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;na&#34;&gt;arch&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;x86_64  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;na&#34;&gt;build_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Release  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;na&#34;&gt;compiler&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;gcc  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;na&#34;&gt;compiler.version&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;13.2  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;na&#34;&gt;compiler.libcxx&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;libstdc++11  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;na&#34;&gt;compiler.exception&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;seh  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;na&#34;&gt;compiler.threads&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;posix  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;c1&#34;&gt;#compiler.cppstd=17  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;[options]  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;[buildenv]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# А вот как прочитать окружение пользователя? Или найти расположение относительно файла?&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;+(path)/mnt/zyncdev/user/repos/MXE/mxe/usr/bin  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# WA (это проба пера - обмануть libiconv, не прокатило)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;PROCESSOR_ARCHITECTURE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;i386  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;CHOST&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;x86_64-w64-mingw32.static  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;AR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;x86_64-w64-mingw32.static-ar  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;AS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;x86_64-w64-mingw32.static-as  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;RANLIB&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;x86_64-w64-mingw32.static-ranlib  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;CC&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;x86_64-w64-mingw32.static-gcc  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;CXX&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;x86_64-w64-mingw32.static-g++  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;STRIP&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;x86_64-w64-mingw32.static-strip  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;RC&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;x86_64-w64-mingw32.static-windres  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;WINDRES&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;x86_64-w64-mingw32.static-windres  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;[runenv]  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#PATH=+(path)/mnt/zyncdev/user/repos/MXE/mxe/usr/bin  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;[conf]  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;tools.build:jobs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;8  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;tools.build:compiler_executables&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;{&amp;#39;c&amp;#39;: &amp;#39;x86_64-w64-mingw32.static-gcc&amp;#39;, &amp;#39;cpp&amp;#39;: &amp;#39;x86_64-w64-mingw32.static-g++&amp;#39;, &amp;#39;rc&amp;#39;: &amp;#39;x86_64-w64-mingw32.static-windres&amp;#39;}  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# tools.build:compiler_executables={&amp;#39;c&amp;#39;: &amp;#39;/usr/bin/clang&amp;#39;, &amp;#39;cpp&amp;#39;: &amp;#39;/usr/bin/clang++&amp;#39;}  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# tools.cmake.cmaketoolchain:toolchain_file  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Appending values into the existing list  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#user.myconf.build:ldflags+=[&amp;#34;--flag2 value2&amp;#34;]  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Unsetting the existing value (it&amp;#39;d be like we define it as an empty value)  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#user.myconf.build:cflags=!  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Prepending values into the existing list  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#user.myconf.build:ldflags=+[&amp;#34;--prefix prefix-value&amp;#34;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;И текущий тулчейн-файл для CMake, который передаю VCPKG как &lt;code&gt;-DVCPKG_CHAINLOAD_TOOLCHAIN_FILE=$(pwd)/toolchain-cross-mingw32-linux-w64-mxe.cmake&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cmake&#34; data-lang=&#34;cmake&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# the name of the target operating system  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;CMAKE_SYSTEM_NAME&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;Windows&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;  &lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;CMAKE_CROSSCOMPILING&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;TRUE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;  &lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;MXE_PREFIX&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;CMAKE_CURRENT_LIST_DIR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;/mxe/usr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;  &lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;COMPILER_PREFIX&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;x86_64-w64-mingw32.static&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;  &lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# for find_library()  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;CMAKE_LIBRARY_ARCHITECTURE&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;COMPILER_PREFIX&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;  &lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# WA for vcpkg, первый... но не последний
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;VCPKG_INSTALLED_DIR&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;OR&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;VCPKG_CHAINLOAD_TOOLCHAIN_FILE&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;OR&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;VCPKG_MANIFEST_DIR&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;  &lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;IS_VCPKG&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;  &lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;endif&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;  &lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# which compilers to use for C and C++  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;find_program&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;CMAKE_RC_COMPILER&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;NAMES&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;MXE_PREFIX&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;/bin/&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;COMPILER_PREFIX&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;-windres&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;  &lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;find_program&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;CMAKE_C_COMPILER&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;NAMES&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;MXE_PREFIX&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;/bin/&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;COMPILER_PREFIX&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;-gcc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;  &lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;find_program&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;CMAKE_CXX_COMPILER&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;NAMES&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;MXE_PREFIX&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;/bin/&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;COMPILER_PREFIX&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;-g++&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;  &lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;NOT&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;IS_VCPKG&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;  &lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;find_program&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;PKG_CONFIG_EXECUTABLE&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;NAMES&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;MXE_PREFIX&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;/bin/&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;COMPILER_PREFIX&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;-pkg-config&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;  &lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;endif&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;  &lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;CMAKE_C_COMPILER_WORKS&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;On&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;  &lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;CMAKE_CXX_COMPILER_WORKS&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;On&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;  &lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# here is the target environment located  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;USER_ROOT_PATH&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;$ENV{&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;HOME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;  &lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;#set(CMAKE_FIND_ROOT_PATH  ${MXE_PREFIX}/${COMPILER_PREFIX} ${USER_ROOT_PATH})  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;list&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;APPEND&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;CMAKE_FIND_ROOT_PATH&lt;/span&gt; &lt;span class=&#34;s&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;MXE_PREFIX&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;COMPILER_PREFIX&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;USER_ROOT_PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;  &lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;SET&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;CMAKE_SYSROOT&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;MXE_PREFIX&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;  &lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# adjust the default behaviour of the FIND_XXX() commands:  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# search headers and libraries in the target environment, search  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# programs in the host environment  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;CMAKE_FIND_ROOT_PATH_MODE_PROGRAM&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;NEVER&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;  &lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;CMAKE_FIND_ROOT_PATH_MODE_LIBRARY&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;ONLY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;  &lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;CMAKE_FIND_ROOT_PATH_MODE_INCLUDE&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;ONLY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;  &lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# We want to install alongside the compiler by default  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;CMAKE_INSTALL_PREFIX&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;MXE_PREFIX&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;  &lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# WA for vcpkg, да ещё один
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;VCPKG_INSTALLED_DIR&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;  &lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# TBD: make more clean  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;CMAKE_EXE_LINKER_FLAGS&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;-L${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;  &lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;endif&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;  &lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# DEBUG  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;#get_cmake_property(_variableNames VARIABLES)  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;#list (SORT _variableNames)  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;#foreach (_variableName ${_variableNames})  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;#    message(STATUS &amp;#34;${_variableName}=${${_variableName}}&amp;#34;)  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;#endforeach()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Этот же тулчейн при работе с MXE (если строить зависимости его силами) отрабатывает на УРА.&lt;/p&gt;
&lt;p&gt;Манифест (&lt;strong&gt;conanfile.txt&lt;/strong&gt;) Conan:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-ini&#34; data-lang=&#34;ini&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;[requires]  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;zlib/1.3.1  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;libusb/1.0.26  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;ffmpeg/6.1  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;[generators]  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;CMakeDeps  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;CMakeToolchain&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Манифест (&lt;strong&gt;vcpkg.json&lt;/strong&gt;) vcpkg:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;nt&#34;&gt;&amp;#34;$schema&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;https://raw.githubusercontent.com/microsoft/vcpkg-tool/main/docs/vcpkg.schema.json&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;nt&#34;&gt;&amp;#34;dependencies&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;s2&#34;&gt;&amp;#34;ffmpeg&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;s2&#34;&gt;&amp;#34;libusb&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;s2&#34;&gt;&amp;#34;avcpp&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;s2&#34;&gt;&amp;#34;zlib&amp;#34;&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;nt&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;usbctl&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;nt&#34;&gt;&amp;#34;version-string&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;1.11&amp;#34;&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Гибридная графика: проблема с wine и не только</title>
      <link>https://htrd.su/blog/2024/04/08/hybrid-graphics-intel-and-nvidia-wine-and-others-issue/</link>
      <pubDate>Mon, 08 Apr 2024 09:42:31 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2024/04/08/hybrid-graphics-intel-and-nvidia-wine-and-others-issue/</guid>
      <description>&lt;p&gt;Итак, список проблем:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;При запуске Wine, даже обычного &lt;code&gt;winecfg&lt;/code&gt; система блочится, что-то далает, потом отдупляется, но приложение не запускается. Если при этом запустить быстро повторно, то запуск происходит&lt;/li&gt;
&lt;li&gt;Долго запускается geeqie, прям вот сильно долго для простого приложения&lt;/li&gt;
&lt;li&gt;В хоте разбирательств выяснилось, что долго отрабатывает с блоком системы и банальный вывод &lt;code&gt;xrandr --listproviders&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Методом проб выяснилось: проблема в драйвере modesettings для Xorg. Переключение на Intel в настройках решает проблему.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPD 2024-05-19:&lt;/strong&gt; установка драйвера &lt;code&gt;nvidia-open-beta-dkms&lt;/code&gt; из AUR так же решает проблему и позволяет работу с modesetting.&lt;/p&gt;
&lt;p&gt;Но. Блин, всегда эти но. Я не сильно часто делаю скриншоты, но тут оказалось, что это дело поломано. А раз поломано, то использовать так и тянет. Поломка заключается в том, что при смене настроек на использование драйвера на Intel приводит к тому, что время от времени скриншотилки делают снимок какого-то кадра из прошлого o_O. Переключение эффектов выкл/вкл временно решает проблему.&lt;/p&gt;
&lt;p&gt;Аналогичные артефакты при трансляции экрана: Google Meeting, Telegram, Яндекс.Телемост, да, думаю, во всех. Переключение эффектов так же временно решает проблему.&lt;/p&gt;
&lt;p&gt;В ходе дальнейших исследований и экспериментов, показало, что принудительное выключение DRI3 решает проблему, ну или очень сильно её скрывает.&lt;/p&gt;
&lt;p&gt;Свои изыскания выложил изначально на форуме Manjaro, где чувак столкнулся с той же проблемой, а ему начали накидывать какой-то бред:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://forum.manjaro.org/t/running-first-wine-application-causes-system-to-slow-down/152199/13?u=monah_tuk&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://forum.manjaro.org/t/running-first-wine-application-causes-system-to-slow-down/152199/13?u=monah_tuk&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Итоговый конфиг для Xorg &lt;strong&gt;/etc/X11/xorg.conf.d/20-intel.conf&lt;/strong&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-xorg&#34; data-lang=&#34;xorg&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;Section&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;&amp;#34;Device&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Identifier&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Intel Graphics&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;#Driver &amp;#34;modesetting&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Driver&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;intel&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Option&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Backlight&amp;#34; &amp;#34;intel_backlight&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# integrated intel&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;BusId&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;PCI:0:2:0&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Option&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;DRI&amp;#34; &amp;#34;2&amp;#34; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Turn Off DRI3 here&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Option&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;TearFree&amp;#34; &amp;#34;true&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;EndSection&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;BusId&lt;/code&gt; нужно будет скорректировать под вашу систему. Значение полностью соответствует выводу &lt;code&gt;lspci&lt;/code&gt;, без лидирующих нулей.&lt;/p&gt;
&lt;p&gt;Ну и связанные ссылки:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://forum.manjaro.org/t/running-first-wine-application-causes-system-to-slow-down/152199/13?u=monah_tuk&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://forum.manjaro.org/t/running-first-wine-application-causes-system-to-slow-down/152199/13?u=monah_tuk&lt;/a&gt; - ссылка на мой ответ на форуме Manjaro&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://www.reddit.com/r/linuxquestions/comments/17iuzr9/lag_when_starting_any_wine_version_and_fork_with/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://www.reddit.com/r/linuxquestions/comments/17iuzr9/lag_when_starting_any_wine_version_and_fork_with/&lt;/a&gt; - аналогичная проблема, уже на Reddit, там же отписался по решению.&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Wayland and...</title>
      <link>https://htrd.su/blog/2024/04/08/wayland-and-virtualbox/</link>
      <pubDate>Mon, 08 Apr 2024 09:30:56 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2024/04/08/wayland-and-virtualbox/</guid>
      <description>&lt;p&gt;Я тут решил попытаться запуститься с Wayland.&lt;/p&gt;
&lt;p&gt;Потыкал перекодирование с CUDA (nvenc), вроде работает. А потом запустил VirtualBox (у меня там несколько билд-окружений на MSVS)&amp;hellip; Короче, в гостевой системе напрочь неработает мышь. Не знаю кто виноват, но в одном случае оно работает, а в другом - нет. 
&lt;a href=&#34;https://www.virtualbox.org/ticket/19043?cversion=0&amp;amp;cnum_hist=2&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Проблема&lt;/a&gt; обозначена уже 4 года как.&lt;/p&gt;
&lt;p&gt;Мелочи, типа увеличенного мышиного курсора в Firefox, по сравнению с другими окружениями не рассматриваю.&lt;/p&gt;
&lt;p&gt;А, ну и из прошлых попыток - падение kwin вызывало падение сессии, что для меня, расслабленного X11 выглядит дико. Базару ноль, софт писать нужно так, что бы не падал. Но&amp;hellip; но быстро поднятое упавшим не считается и если такое случилось, то пусть труды останутся живыми.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Git: выключение вывода через pager для отдельных команд</title>
      <link>https://htrd.su/blog/2024/04/03/git-disable-pager-for-some-commands/</link>
      <pubDate>Wed, 03 Apr 2024 17:28:22 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2024/04/03/git-disable-pager-for-some-commands/</guid>
      <description>&lt;p&gt;В последнее время обратил внимание, что Git пытается использовать вывод через Pager, типа less, к месту и не к месту. К примеру, вывод diff мне даром через него не нужен, как и вывод &lt;code&gt;git branch&lt;/code&gt;. 
&lt;a href=&#34;https://superuser.com/questions/288040/how-to-disable-the-git-pager-but-just-for-certain-commands&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Судя по всему&lt;/a&gt;, не мне одному такое не нравится.&lt;/p&gt;
&lt;p&gt;Ответ там же по ссылке. Если коротко: для каждой подкоманды можно настроить использование pager индивидуально:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git config --global pager.branch &lt;span class=&#34;nb&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git config --global pager.diff &lt;span class=&#34;nb&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Acer Laptop: выключаем Secure Boot</title>
      <link>https://htrd.su/blog/2024/03/19/acer-laptop-secure-boot-disable/</link>
      <pubDate>Tue, 19 Mar 2024 21:26:24 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2024/03/19/acer-laptop-secure-boot-disable/</guid>
      <description>&lt;p&gt;Заметка касается Acer Aspire ES 11, но судя по всему, касается многих других ноутбуков.&lt;/p&gt;
&lt;p&gt;Итак, нужно поставить Manjaro, захожу, что бы выключить Secure Boot, который включен по умолчанию, но настройка затенена. WTF!?&lt;/p&gt;
&lt;p&gt;Так же практически ничего не доступно на вкладке &lt;strong&gt;Security&lt;/strong&gt;, кроме &lt;strong&gt;Set Supervisor Password&lt;/strong&gt; и &lt;strong&gt;Set HDD Password&lt;/strong&gt;. Так вот, что бы поменять все остальные настройки, нужно обязательно установить &lt;strong&gt;Set Supervisor Password&lt;/strong&gt;! Более того, как настроите, что нужно, его можно сбросить: просто вместо нового пароля ввести оба раза пустой. Помимо настроек на этой вкладке становится доступна для изменения опция &lt;strong&gt;Secure Boot&lt;/strong&gt; на вкладке &lt;strong&gt;Boot&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;В общем:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Ставим Supervisor Password&lt;/li&gt;
&lt;li&gt;Ставим Secure Boot в Disabled&lt;/li&gt;
&lt;li&gt;Сбрасываем Supervisor Password&lt;/li&gt;
&lt;li&gt;Сохраняемся, перезагружаемся&lt;/li&gt;
&lt;li&gt;Enjoy!&lt;/li&gt;
&lt;/ol&gt;</description>
    </item>
    
    <item>
      <title>...</title>
      <link>https://htrd.su/blog/2024/03/16/bertolet_rip/</link>
      <pubDate>Sat, 16 Mar 2024 22:05:08 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2024/03/16/bertolet_rip/</guid>
      <description>&lt;p&gt;
&lt;a href=&#34;https://htrd.su/blog/2023/03/18/bertolet_rip/&#34;&gt;&lt;strong&gt;16.03.2016&lt;/strong&gt;&lt;/a&gt;, помним.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Добавил ссылку на канал в Telegram</title>
      <link>https://htrd.su/blog/2023/12/13/telegram-social-link/</link>
      <pubDate>Wed, 13 Dec 2023 11:45:56 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2023/12/13/telegram-social-link/</guid>
      <description>&lt;p&gt;Справа в ссылках на ресурсы добавил ссылку на 
&lt;a href=&#34;https://t.me/HtrdBlog&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;канал в Telegram&lt;/a&gt; куда автоматом перекладываются статьи из бложика. Помимо этого, завёл шаблон Instant View, и ссылка фильтруется через него, так что читать статью на мобильных устройствах можно прямо из телеги. Дискуссии тоже открыты.&lt;/p&gt;
&lt;p&gt;PS всего-то 4 года прошло, как канал появился :-D&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Проброс последовательного порта по сети</title>
      <link>https://htrd.su/blog/2023/12/05/serial-over-network/</link>
      <pubDate>Tue, 05 Dec 2023 11:37:22 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2023/12/05/serial-over-network/</guid>
      <description>&lt;p&gt;Сетап:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Удалённое устройство, подключенное к серверу на Linux&lt;/li&gt;
&lt;li&gt;Управление через COM порт&lt;/li&gt;
&lt;li&gt;Управление тулом под Windows&lt;/li&gt;
&lt;li&gt;Есть SSH доступ&lt;/li&gt;
&lt;li&gt;Само устройство успешно удалённо программируется и отлаживается по JTAG&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Нужно:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Запустить тул локально под Virtual Box (локальная машина тоже Linux)&lt;/li&gt;
&lt;li&gt;Пробросить удалённый последовательный порт локально&lt;/li&gt;
&lt;li&gt;Пробросить его в Virtual Box&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Поиск в интернете даёт сходу два результата:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.dest-unreach.org/socat/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;socat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://sourceforge.net/projects/ser2net&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;ser2net&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Оба пакета имеются в наличии в Manjaro/ArchLinux и поставить просто:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pacman -S socat ser2net
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;socat&lt;/code&gt;, к слову, уже был поставлен как зависимость &lt;code&gt;kwallet-pam&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ser2net&lt;/code&gt; реализует RFC2217.&lt;/p&gt;
&lt;h2 id=&#34;предподготовка&#34;&gt;Предподготовка&lt;/h2&gt;
&lt;p&gt;Будем пытаться максимально делать всё от обычного пользователя (кроме, пожалуй, установки пакетов).&lt;/p&gt;
&lt;p&gt;Создадим каталог &lt;code&gt;$HOME/dev&lt;/code&gt; для наших устройств:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir -p &lt;span class=&#34;nv&#34;&gt;$HOME&lt;/span&gt;/dev
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;попытка-номер-раз-только-socat&#34;&gt;Попытка номер раз: только socat&lt;/h2&gt;
&lt;p&gt;В его man&amp;rsquo;е есть заманчивая строчка:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       socat PTY,link&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$HOME&lt;/span&gt;/dev/vmodem0,rawer,wait-slave &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;       EXEC:&lt;span class=&#34;s2&#34;&gt;&amp;#34;ssh modemserver.us.org socat - /dev/ttyS0,nonblock,rawer&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Пробуем (эксперимент показываю на localhost, сейчас удалёнка вне доступа, но смысл тот же, просто где-то придётся пробросить порты через тот же SSH):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;socat PTY,link&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$HOME&lt;/span&gt;/dev/serial-local,rawer,wait-slave EXEC:&lt;span class=&#34;s2&#34;&gt;&amp;#34;ssh localhost socat - /dev/ttyUSB0,nonblock,rawer&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;А далее &lt;code&gt;picocom&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ picocom -b &lt;span class=&#34;m&#34;&gt;115200&lt;/span&gt;  ~/dev/serial-local  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;picocom v3.1  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;port is        : /home/hatred/dev/serial-local  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;flowcontrol    : none  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;baudrate is    : &lt;span class=&#34;m&#34;&gt;115200&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;parity is      : none  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;databits are   : &lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;stopbits are   : &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;escape is      : C-a  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; is  : no  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;noinit is      : no  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;noreset is     : no  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hangup is      : no  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nolock is      : no  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;send_cmd is    : sz -vv  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;receive_cmd is : rz -vv -E  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;imap is        :    
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;omap is        :    
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;emap is        : crcrlf,delbs,  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;logfile is     : none  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;initstring     : none  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;exit_after is  : not &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt; is        : no  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Type &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;C-a&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;C-h&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; to see available commands  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Terminal ready  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;FATAL: &lt;span class=&#34;nb&#34;&gt;read&lt;/span&gt; zero bytes from port  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;term_exitfunc: reset failed &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; dev UNKNOWN: Input/output error
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;При этом со стороны &lt;code&gt;socat&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;2023/12/05 11:00:37 socat&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;1555557&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; E tcgetattr&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;7, 0x56489e9255a0&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;: Inappropriate ioctl &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; device
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Это фиаско. Но двигаемся дальше.&lt;/p&gt;
&lt;h2 id=&#34;попытка-номер-два-ser2net-и-socat&#34;&gt;Попытка номер два: ser2net и socat&lt;/h2&gt;
&lt;p&gt;Со стороны &amp;ldquo;сервера&amp;rdquo; пробуем запустить &lt;code&gt;ser2net&lt;/code&gt;, а уже локально создать &amp;ldquo;файл устройства&amp;rdquo; через &lt;code&gt;socat&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Сервер:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ser2net -C &lt;span class=&#34;s2&#34;&gt;&amp;#34;7000:telnet:0:/dev/ttyUSB1:remctl&amp;#34;&lt;/span&gt; -d -u
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Локально (если нужно, пробрасываем порт через ssh):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;socat PTY,link&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$HOME&lt;/span&gt;/dev/serial-local,rawer TCP:localhost:7000
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Локально, &lt;code&gt;picocom&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ picocom -b &lt;span class=&#34;m&#34;&gt;115200&lt;/span&gt;  ~/dev/serial-local  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;picocom v3.1  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;port is        : /home/hatred/dev/serial-local  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;flowcontrol    : none  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;baudrate is    : &lt;span class=&#34;m&#34;&gt;115200&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;parity is      : none  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;databits are   : &lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;stopbits are   : &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;escape is      : C-a  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; is  : no  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;noinit is      : no  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;noreset is     : no  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hangup is      : no  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nolock is      : no  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;send_cmd is    : sz -vv  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;receive_cmd is : rz -vv -E  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;imap is        :    
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;omap is        :    
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;emap is        : crcrlf,delbs,  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;logfile is     : none  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;initstring     : none  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;exit_after is  : not &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt; is        : no  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Type &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;C-a&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;C-h&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; to see available commands  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Terminal ready  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;weeeerrrrrttttyyyyqqqqaaassszzxxcvfdsfdsfdsrwrew
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;со стороны UART Rx и Tx соединены, поэтому наблюдаем Echo.&lt;/p&gt;
&lt;p&gt;Это успех!&lt;/p&gt;
&lt;p&gt;UPD: успех, но не полный. Петля на Rx-Tx скрыла тот факт, что не было настройки Boudrate. Если бодрейт сильно отличается, то может посыпать мусор и параметр &lt;code&gt;remctl&lt;/code&gt; тут не сильно помогает. Если по простому: то в самом конце цепочки, на уровне picocom может уже не сработать установка baudrate. Нужно править или на уровне socat или команды ser2net. Самое простое, изменить команду ser2net так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ser2net -C &lt;span class=&#34;s2&#34;&gt;&amp;#34;7000:telnet:0:/dev/ttyUSB1:921600 remctl&amp;#34;&lt;/span&gt; -d -u
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;И однострочник, который пробросит с хоста и порты сразу и запустит команду:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh -L &lt;span class=&#34;s1&#34;&gt;&amp;#39;*:7000:localhost:7000&amp;#39;&lt;/span&gt; zcu208 &lt;span class=&#34;s1&#34;&gt;&amp;#39;ser2net -C &amp;#34;7000:telnet:0:/dev/ttyUSB1:921600 remctl&amp;#34; -d -u&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;а-теперь-горбатый-virtualbox&#34;&gt;А теперь &lt;del&gt;горбатый&lt;/del&gt; VirtualBox&lt;/h2&gt;
&lt;p&gt;Идём в настройки виртуальной машины на вкладку &amp;ldquo;Serial Ports&amp;rdquo; и включаем, для примера, COM1.&lt;/p&gt;
&lt;p&gt;И, внезапно, обнаруживаем в параметре &amp;ldquo;Port Mode:&amp;rdquo; режим &amp;ldquo;TCP&amp;rdquo;&amp;hellip; А ну ка, указываем там &amp;ldquo;localhost:7000&amp;rdquo; (именно на этом порту у нас уже висит &lt;code&gt;ser2net&lt;/code&gt; из предыдущего пункта) и загружаемся.&lt;/p&gt;
&lt;p&gt;В Windows в диспетчере видим единственный COM1 и подключаемся к нему через Putty и наблюдаем echo.&lt;/p&gt;
&lt;p&gt;Снова успех! Даже запуска &lt;code&gt;socat&lt;/code&gt; не нужно. Но успех частичный, читаем дальше.&lt;/p&gt;
&lt;p&gt;Есть, правда, нюанс: до запуска виртуалки к &lt;code&gt;ser2net&lt;/code&gt; не должно быть никакого подключения. Иначе порт появится, а работать не будет.&lt;/p&gt;
&lt;p&gt;Второй нюанс: не работают &amp;ldquo;нестандартные&amp;rdquo; Baud Rate. К примеру, я не смог поставить 921600. Но они же работают в связке socat+picocom.&lt;/p&gt;
&lt;p&gt;Если настраивать через PIPE, то результат ровно такой же. Настройка через PIPE&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Сначала запускаем &lt;code&gt;socat&lt;/code&gt;: &lt;code&gt;socat UNIX-LISTEN:$HOME/dev/serial-pipe TCP:localhost:7000&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;В настройках порта указываем:
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;Port Mode:&amp;rdquo; → &amp;ldquo;Host Pipe&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Path/Address:&amp;rdquo; → &amp;ldquo;~/dev/serial-pipe&amp;rdquo;
&lt;ul&gt;
&lt;li&gt;лучше указать полный путь, который обслуживает socat.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Сдаётся мне, что это особенности стандартного драйвера для стандартных последовательных портов (COM1-4). Поэтому, идём дальше.&lt;/p&gt;
&lt;h3 id=&#34;убираем-промежуточное-звено&#34;&gt;Убираем промежуточное звено&lt;/h3&gt;
&lt;p&gt;На Windows вполне можно себе использовать RFC2217. Поэтому попытаемся создать подключение к &lt;code&gt;ser2net&lt;/code&gt; непосредственно, миную функционал Virtual Box.&lt;/p&gt;
&lt;p&gt;Для начала запускаем Telnet или Putty, выбираем протокол telnet, устанавливаем хост в адрес на котором крутится &lt;code&gt;ser2net&lt;/code&gt; и соответствующий порт. Смотрим, что работает. Если не работает - разбираемся с сетью.&lt;/p&gt;
&lt;p&gt;Дальше скачиваем необходимые пакеты проекта 
&lt;a href=&#34;https://sourceforge.net/projects/com0com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Null-modem emulator&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://sourceforge.net/projects/com0com/files/com0com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;com2com&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;лучше версию 2.2.2.0 дабы не иметь проблем с подписью на новых Windows&lt;/li&gt;
&lt;li&gt;или отключаем проверку подписи, либо курим 
&lt;a href=&#34;https://www.ngohq.com/driver-signature-enforcement-overrider.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;DSEO&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;я скачивал и пробовал (Windows 10 64bit) 
&lt;a href=&#34;https://sourceforge.net/projects/com0com/files/com0com/2.2.2.0/com0com-2.2.2.0-x64-fre-signed.zip/download&#34; title=&#34;Click to download com0com-2.2.2.0-x64-fre-signed.zip&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;com0com-2.2.2.0-x64-fre-signed.zip&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://sourceforge.net/projects/com0com/files/hub4com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;hub2com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Первый распаковываем и устанавливаем. После чего запускаем от имени Администратора конфигуратор &lt;code&gt;setupc.exe&lt;/code&gt; и вводим туда:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;install &lt;span class=&#34;nv&#34;&gt;PortName&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;COM19 &lt;span class=&#34;nv&#34;&gt;PortName&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;COM20
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;что создаст нам пару виртуальных портов и роутинг между ними. В приложении нужно будет использовать порт &lt;strong&gt;COM20&lt;/strong&gt;, а для сети - &lt;strong&gt;COM19&lt;/strong&gt;. Можно добавить параметр &lt;code&gt;EmuBR=yes&lt;/code&gt; к &lt;strong&gt;COM19&lt;/strong&gt; для эмуляции скорости, но у меня всё заработало без него.&lt;/p&gt;
&lt;p&gt;Далее распаковываем &lt;code&gt;hub4com&lt;/code&gt;, там никаких установщиков нет. И запускаем:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.&lt;span class=&#34;se&#34;&gt;\c&lt;/span&gt;om2tcp-rfc2217 &lt;span class=&#34;se&#34;&gt;\\&lt;/span&gt;.&lt;span class=&#34;se&#34;&gt;\C&lt;/span&gt;OM19 192.168.0.104 &lt;span class=&#34;m&#34;&gt;7000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;здесь:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;COM19&lt;/strong&gt; - первый из пары виртуальных адресов&lt;/li&gt;
&lt;li&gt;192.168.0.104 - адрес, где крутится &lt;code&gt;ser2net&lt;/code&gt; на Linux&lt;/li&gt;
&lt;li&gt;7000 - соответственно порт, который слушает &lt;code&gt;ser2net&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;В Putty пробуем открыть &lt;strong&gt;COM20&lt;/strong&gt; с нестандартным рейтом, например - 921600. И вот тут оно начинает работать.&lt;/p&gt;
&lt;p&gt;Терминал с запущенным &lt;code&gt;com2tcp-rfc2217.bat&lt;/code&gt; закрывать не нужно, иначе связь разорвётся.&lt;/p&gt;
&lt;p&gt;Теперь точно успех!&lt;/p&gt;
&lt;h2 id=&#34;дополнительная-информация&#34;&gt;Дополнительная информация&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://gaydov.blogspot.com/2013/06/linux-serial-over-ip.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://gaydov.blogspot.com/2013/06/linux-serial-over-ip.html&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;перечислены альтернативные решения
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://freecode.com/projects/sredird&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;sredird&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://sourceforge.net/projects/sercd/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;sercd&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://gist.github.com/DraTeots/e0c669608466470baa6c&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://gist.github.com/DraTeots/e0c669608466470baa6c&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;здесь есть про Windows&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://stackoverflow.com/a/37744302/1828241&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://stackoverflow.com/a/37744302/1828241&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Снежная с севера</title>
      <link>https://htrd.su/blog/2023/11/07/snezhnaya-from-the-nord/</link>
      <pubDate>Tue, 07 Nov 2023 12:04:33 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2023/11/07/snezhnaya-from-the-nord/</guid>
      <description>&lt;p&gt;На ноябрьские праздники группой единомышленников сгоняли Снежную по маршруту с севера. Хотя, если смотреть карту, то больше похоже на маршрут с Запада :)&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2023/11/07/snezhnaya-from-the-nord/files/map.jpg&#34; alt=&#34;map.jpg&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;лирика-и-хронология&#34;&gt;Лирика и хронология&lt;/h2&gt;
&lt;p&gt;А за неделю до этого МЧС и синоптики слёзно умаляли никуда не рыпаться, ибо 6 ноября будет ОНА. Но мы не поддались. Тем более, что по плану сам заход на гору планировался радиалкой на 5 число, тогда как основную непогоду рисовали на 6 число, что застало бы нас в дороге, а не на маршруте.&lt;/p&gt;
&lt;p&gt;По итогу собралось два экипажа:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Женин RVR
&lt;ol&gt;
&lt;li&gt;Женя&lt;/li&gt;
&lt;li&gt;Маша&lt;/li&gt;
&lt;li&gt;Андрей&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Мой Forester
&lt;ol&gt;
&lt;li&gt;Я&lt;/li&gt;
&lt;li&gt;Вика&lt;/li&gt;
&lt;li&gt;Аня&lt;/li&gt;
&lt;li&gt;Денис&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;По палаткам определились, что будет 2+2+3.&lt;/p&gt;
&lt;p&gt;Выезд запланировали в субботу 4 числа в 8:00 от Седанки. В 7:20 на Снеговой пади подхватываю Вику и едем до парковки у Монастырёва перед съездом на трассу Седанка-Патрокл. Тут тасуем рюкзаки и пассажиров и где-то в 8:10 выезжаем. Едем каждый своим темпом и синхронизируемся на заправке Роснефти в Варфаломеевке, тут же санитарная остановка и перекус перед дальнейшей дорогой. Дорога местами до Варфоломеевки сильно потрёпана жизнью, ехать стоит внимательно.&lt;/p&gt;
&lt;p&gt;Незадолго до деревни Извилинка кончается асфальт, а в скором времени и наш сворот на деревню Березовка, дорога ощутимо хуже, больше 60 разгоняться уже совсем нет желания. А 2GIS тем временем упорно пытался провести маршрут через деревню. Не ведитесь - дорога за деревней размыта. Мы не повелись, а на стыковке двух дорог за деревней уже воочию убедились, что мы бы тут не проехали. От этой точки в папочке GPS есть автомобильный трек.&lt;/p&gt;
&lt;p&gt;По трассе на Берёзовку видно много последствий прошедших тайфунов, но мосты все на месте вплоть до слияния Извилинки и Правой Извилинки. Здесь конструкция моста оформлена, но заезды/съезды ещё не отсыпана. Многие мосты оформлены по временной схеме и идут работы по возведению более обстоятельных конструкций. Почти везде присутствуют съезды для бродов. На слиянии же двух Извилинок - брод. Для кроссоверов, да и не только, по текущей воде (а уже два месяца как не было дождей практически). Здесь делаем себе заметку на память: по дождю вода может подняться, поэтому после горы, имеет смысл все броды оставить за спиной. На этом же месте мы на обратном пути сделали лагерь (точка ЛАГ на обратном пути).&lt;/p&gt;
&lt;p&gt;Через, примерно, километр поворот направо в верховья Извилинки. Дорога поначалу мало отличается от трассы на д.Извилинка-д.Берёзовка, но вскоре начинают сказываться последствия ливней и дождей. Но лесозаготовители  оформили дороги, хотя в некоторых местах стоит ехать аккуратно, дабы не стукнуть чего и не растерять резину.&lt;/p&gt;
&lt;p&gt;Где-то за 4.5-5 км до конца автомобильной части к камням на дороге добавляется грязь. 4 числа она была замёрзшая (показометр температуры в машине стабильно показывал -4, хотя термометр - около нуля) и проехалась вообще без каких-то проблем, а вот на обратном пути она растаяла и&amp;hellip; тоже проехалась без проблем.&lt;/p&gt;
&lt;p&gt;Итого, дорога от д.Извилинка до пешеходной части маршрута около 52км, время на дорогу ушло 2 часа 26 минут. На месте были в 15:00. Суммарно проехали за 7 часов.&lt;/p&gt;
&lt;p&gt;Лагерь решаем ставить не перед началом тропы, а на поляне до неё. Пешком это 600м, что для нас не принципиально. Зато, по ощущениям, площадка под палатки тут ровнее. Но да это вкусовщина. А на поляне непосредственном перед началом подъёма оказалась Делика Артёма и джимник (но это не точно). Вечером они притормозили у нашего лагеря, поздороваться.&lt;/p&gt;
&lt;p&gt;Но. Ничего не бывает без &amp;ldquo;но&amp;rdquo;. Хоть на картах и обозначены обильные ручьи, но воды тут нет. Абсолютно! Судя по всему сказывается отсутствие дождей и вырубка, которая уменьшает удерживающую способность грунта и вода быстрее и обильнее сходит, меньше задерживаясь на склонах. Пришлось брать все ёмкости и ехать за водой назад. Благо из соседнего распадка всего в километре от лагеря ручей уже был. Среди точек место обозначено как ВОДА.&lt;/p&gt;
&lt;p&gt;Возвращаемся, палатки уже поставлены. Дальше уже рутина: раскидать вещи и начинаем неспешную готовку обеда, который потом не менее неспешно потом перетёк и в ужин. Посидели у костра, пообщались и спать. Подъём запланировали на 6:00, что бы к 8:00 постараться выйти (угу, &amp;ldquo;спортмены&amp;rdquo;).&lt;/p&gt;
&lt;p&gt;Ночь выдалась прохладной, но не холодной, и спать на мёрзлой земле на коврике такое себе удовольствие. На снегу приятнее. И теплее как-то.&lt;/p&gt;
&lt;p&gt;6:00. Подъём. Неспешной разгоняемся, готовим завтрак и греем воду в термоса. У Андрея наблюдается первый акт снарягогубства: во время вчерашних посиделок у костра термоклей на ботинках решил самоустранится и подошва начала отходить. Пришлось всю дорогу спасаться скотчем и кабельными стяжками.&lt;/p&gt;
&lt;p&gt;Со всеми перекладываниями, сборами, в 8:19 стартуем. В 8:27 начинаем подъём по волоку на отрог хребта Облачная-Снежная, правда так увлеклись, что пропустили более логичное место, где с него соскочить и зашагнуть на пупырь 1102м. Поэтому ломимся вверх, благо лес позволяет. На нём мы в 9:09. Отсюда уже попадается маркировка тропы и временами сами тропа становится заметна на рельефе.&lt;/p&gt;
&lt;p&gt;В 9:24 мы уже на вершине с отметкой 1134м. Вершина плоская, ровная, открытая уложена курумником. Хорошая видовая. Минут через 20 начинается подъём на хребет с постепенным увеличением крутизны от 5-7° до 28° местами. Под самым верхом ждёт немного ЁЁ и кедрового стланика. Но протоптано, пройти можно без особых проблем. Зато на хребте сразу вываливаемся на луга Рамадана (отметка 1388м). Время 11:00. Делаем небольшой привал на перекусить, полюбоваться красотами и видом на нашу цель - гору Снежная. Погода, к слову, радует - очень тепло. Вчера с вечера верхушки деревьев все были в инее, а сейчас всё растаяло. Явный и ощутимый плюс на улице (термометр забыл у машины). При практически полном отсутствии ветра позволяет комфортно не только идти в тоненькой термухе, но и делать короткие остановки без необходимости облачаться во что-то более тёплое.&lt;/p&gt;
&lt;p&gt;По хребту уже идёт слоновья тропа. Во всех встречных зарослях стланика комфортные проходы, которые хоть и требуют снизить скорость, где-то перешагнуть или придержаться, но не причиняют особо дискомфорта. Помимо этого, эта часть хребта открыта и с каждым метром набора открываются всё новые и новые ракурсы и виды на окружающие пейзажи.&lt;/p&gt;
&lt;p&gt;Так мы проскакиваем в 11:10 отметку 1408м и на следующем пупыре с отметкой 1589м (время 11:39) уже начинает настоящая горная тундра: курумник, мхи, брусника, отдельные кусты кедрового стланика. К слову, брусника есть. Уже ударенная морозом и вкусная. Почти все участники с разной долей энтузиазма были остановлены этим категорийным препятствием.&lt;/p&gt;
&lt;p&gt;Между отметками 1589м и 1535м на север очень крутые склоны, что немного даже добавляет ощущения больших гор. А если коротко - красиво!&lt;/p&gt;
&lt;p&gt;На вершине мы в 12:30. Любуемся надвигающейся непогодой со стороны Владивостока. Не могу вспомнить, но к моменту подъёма Сестра и Горелая сопки уже были скрыты. А Облачная открыта. Светит солнце. Практически полный штиль. Фотографируемся, пьём чай, перекусываем, смотрим обновлённый прогноз погоды, чего-то решили сместить начало дождя на сегодня, что нем не сильно нравится. Где-то в 12:55 начинает поддувать ветер. Делаем общее фото и разворачиваемся на спуск. На облачную, тем временем, уже наползают отдельные облака. А вот Снежная держится.&lt;/p&gt;
&lt;p&gt;Где-то минут через 40 мы снова на отметке 1589м и тут под натиском погоду сдаётся и Снежная - заволакивает облаками. И да, задувает ветер. Будто вал идущий перед непогодой. Но пока от непогоды только он, причём не сильный и не пронизывающий и отсутствие солнца над головой.&lt;/p&gt;
&lt;p&gt;В 14:17 мы перед спуском на отрог. Быстрая санитарная остановка и ныряем в ЁЁ и дальше вниз. Видовую площадку на 1134м проскакиваем в 15:15, а на пупыре 1102м были пленены зарубками на деревьях (или охотники, или лесорубы оставили), поэтому на волок сваливаемся по азимуту и в другой точки относительно захода. В лагерь возвращаемся примерно в 16:15.&lt;/p&gt;
&lt;p&gt;Сборы. Сворачиваем палатки, собираем рюкзаки. Делаем кипяток для чая-кофе. Около 17:00 выезжаем. Напомню: наша цель оставить перед дождём все броды за спиной. На всякий случай.&lt;/p&gt;
&lt;p&gt;Тёплая погода несколько растопила подмёрзшую грязь. Но дополнительных проблем к движению это не добавило.&lt;/p&gt;
&lt;p&gt;Через час или полтора, уже по темноте добираемся до брода у слияния двух Извилинок. У моста есть поляна и там навес. Место средней загаженности, но наличие крыши над головой помимо палаток нас соблазняет, поэтому там и располагаемся. Палатки ставим за беседкой. Машины перед ней, недалеко от дороги.&lt;/p&gt;
&lt;p&gt;Готовим еду, ужинаем, общаемся. Чуть после 19:00 начинают капать первые капли. А прогноз грозился не раньше 22:00 часов. Но да ладно. Лагерь поставлен, крыша над головой есть - проблем ноль. На утро решаем вставать часам к 8 утра, что бы уже было светло и выбираться в путь.&lt;/p&gt;
&lt;p&gt;Ночью дождь усилился но был всё равно редким. К 6 утра даже сделал попытку прекратиться совсем, что к моменту наших сборов очень оказалось удобно: лагерь собрали без (практически) дождя.&lt;/p&gt;
&lt;p&gt;Ну и ночь не прошла без событий. Мышь. Нет, не так. ТВАРЬ! Прогрызла палатку и штаны которые там лежали. А всё до банального просто: за завтрак 5 числа не съел сыр и захватил его собой, да так и забыл про него и не выложил из кармана, а штаны положил вдоль коврика у стенки. Эта тварь учуяла, прогрызла палатку, прогрызла штаны и подзапяточила некоторое количество сыра, заменив его своим чёрным рисом. Если по-простому, то нагадила. Но и это не всё, эта ниндзя или её собрат каким-то образом проник в машину, слопал сыр на бутербродах и уничтожил пакет семечек. Машину перетряхнул и вредитель не был замечен. Как и когда он проник остаётся загадкой. Ровно как и когда она ретировалась из машины. Надеюсь не сдохнет где-то под обшивкой. Гипотез по проникновению две: забралась в рюкзак, который стоял в беседке с ним попала в машину, или смогла залезть в подвешенный пакет с приправами, где и лежал свёрток с бутербродами (скрытность 80 level).&lt;/p&gt;
&lt;p&gt;Запиваю стресс от негодования кофе. Завтракаем, собираемся и выдвигаемся домой где-то в начале десятого. Начался дождь, но не сильный. Ехать достаточно комфортно. По пути заправляемся снова в Варфоломеевке и решаем сделать остановку на обед в Анучино в Скарлет. Откуда уже двигаемся каждый своим темпом до дома. Точнее промежуточная точка у Жени: снова перекинуть рюкзаки и пассажиров. Домой добрался к 16:50.&lt;/p&gt;
&lt;p&gt;Как итог: отличные выходные в хорошей компании на хорошем маршруте. При этом повезло с погодой: зайди на вершину на час позже, видов бы уже не было. Ну и на обратном пути: со Владивостока картинки с плавающим городом, а у нас хоть и дождь но обычный, не сильный.&lt;/p&gt;
&lt;h3 id=&#34;фото-и-gps&#34;&gt;Фото и GPS&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Мои фото:
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://disk.yandex.ru/a/kFc4W3R4yyxTsw&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://disk.yandex.ru/a/kFc4W3R4yyxTsw&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;GPS:
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://disk.yandex.ru/d/VCH67WXsOKmg_A/GPS&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://disk.yandex.ru/d/VCH67WXsOKmg_A/GPS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Фото и GPS от Жени (и других участников):
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://disk.yandex.ru/d/m6Ka1TZ22d45zg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://disk.yandex.ru/d/m6Ka1TZ22d45zg&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Остальное фото (&lt;strong&gt;TBD&lt;/strong&gt;):
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://disk.yandex.ru/d/VCH67WXsOKmg_A/FOTO&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://disk.yandex.ru/d/VCH67WXsOKmg_A/FOTO&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;полутехническая-информация&#34;&gt;Полутехническая информация&lt;/h2&gt;
&lt;h3 id=&#34;кухня-раскладка-газ&#34;&gt;Кухня, раскладка, газ&lt;/h3&gt;
&lt;p&gt;Готовили на газу, но учитывать не берусь, так как было две кухни на 3 и 4 человека и была миграция по котлам и горелкам. Температуры готовки от +5 до -5 градусов. У себя дожёг ковеевский баллон 450г: 243г. Чего хватило, условно, на 4 готовки для 3-4 человек (243г/(4/3дней)/(3.5чел)~52г/дн/чел). Плюс истратил 145г на две готовки для трёх человек из второго картриджа, на нём же было сделано 4л воды для термосов и для кофе на весь коллектив. Ну и спалил 34г на 2л кофе утром в понедельник из третьего картриджа на Polaris X5.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;День 1&lt;/strong&gt;: заезд
&lt;ul&gt;
&lt;li&gt;Обед
&lt;ul&gt;
&lt;li&gt;Лапша для варки&lt;/li&gt;
&lt;li&gt;Хлеб&lt;/li&gt;
&lt;li&gt;Бичпаста&lt;/li&gt;
&lt;li&gt;Чай&lt;/li&gt;
&lt;li&gt;Вкусняхи&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Ужин (ушёл частично)
&lt;ul&gt;
&lt;li&gt;Суп сайровый/сардиновый/скумбриевый&lt;/li&gt;
&lt;li&gt;Хлеб&lt;/li&gt;
&lt;li&gt;Шпик молотый&lt;/li&gt;
&lt;li&gt;Чай&lt;/li&gt;
&lt;li&gt;Вкусняхи&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;День 2&lt;/strong&gt;: ходовой
&lt;ul&gt;
&lt;li&gt;Завтрак
&lt;ul&gt;
&lt;li&gt;Гречка с тушняком&lt;/li&gt;
&lt;li&gt;Соус кисло-сладкий&lt;/li&gt;
&lt;li&gt;Хлеб&lt;/li&gt;
&lt;li&gt;Сыр&lt;/li&gt;
&lt;li&gt;Чай&lt;/li&gt;
&lt;li&gt;Вкусняхи&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Обед: карманное питание&lt;/li&gt;
&lt;li&gt;Ужин:
&lt;ul&gt;
&lt;li&gt;Готовые блюда Кронидов (Харчо и Индейка со стручковой фасолью)&lt;/li&gt;
&lt;li&gt;Хлеб&lt;/li&gt;
&lt;li&gt;Шпик&lt;/li&gt;
&lt;li&gt;Чай&lt;/li&gt;
&lt;li&gt;Вкусняхи&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;День 3&lt;/strong&gt;: выездной
&lt;ul&gt;
&lt;li&gt;Завтрак
&lt;ul&gt;
&lt;li&gt;Каша 6 злаков 3минуты
&lt;ul&gt;
&lt;li&gt;Сгущёнка&lt;/li&gt;
&lt;li&gt;Джем&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Хлеб&lt;/li&gt;
&lt;li&gt;Чай&lt;/li&gt;
&lt;li&gt;Вкусняхи&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;профиль-высот-и-километраж&#34;&gt;Профиль высот и километраж&lt;/h3&gt;
&lt;p&gt;Сводка:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;День&lt;/th&gt;
          &lt;th&gt;Протопали,&lt;br/&gt;км&lt;/th&gt;
          &lt;th&gt;Набор высоты,&lt;br/&gt;м&lt;/th&gt;
          &lt;th&gt;Сброс высоты,&lt;br/&gt;м&lt;/th&gt;
          &lt;th&gt;Время/в движении,&lt;br/&gt;ч&lt;/th&gt;
          &lt;th&gt;Скорость/в движении,&lt;br/&gt;&lt;/th&gt;
          &lt;th&gt;Начало движения,&lt;br/&gt;ч&lt;/th&gt;
          &lt;th&gt;Конец движения,&lt;br/&gt;ч&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;5 ноя&lt;/td&gt;
          &lt;td&gt;15.1&lt;/td&gt;
          &lt;td&gt;1215&lt;/td&gt;
          &lt;td&gt;1230&lt;/td&gt;
          &lt;td&gt;07:54/05:23&lt;/td&gt;
          &lt;td&gt;1.9/2.8&lt;/td&gt;
          &lt;td&gt;08:19&lt;/td&gt;
          &lt;td&gt;16:14&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;strong&gt;15.1&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;1215&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;1230&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;&amp;mdash;&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;&amp;mdash;&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;&amp;mdash;&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;&amp;mdash;&lt;/strong&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Профиль:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2023/11/07/snezhnaya-from-the-nord/files/profile.png&#34; alt=&#34;profile.png&#34;&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Траверс Макарова-Макариха</title>
      <link>https://htrd.su/blog/2023/10/30/makarova-makariha-traverse/</link>
      <pubDate>Mon, 30 Oct 2023 21:22:40 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2023/10/30/makarova-makariha-traverse/</guid>
      <description>&lt;p&gt;Идея сделать, а если быть точнее, то закрыть этот траверс родилась в моей голове как шутка, переросшая в навязчивую идею.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2023/10/30/makarova-makariha-traverse/files/map.jpg&#34; alt=&#34;map&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;лирика-и-хронология&#34;&gt;Лирика и хронология&lt;/h2&gt;
&lt;p&gt;Был брошен клич в группе планирования походов с кратким описанием. Как результат собралось трое человек:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Я&lt;/li&gt;
&lt;li&gt;Саня (сходили с ним 
&lt;a href=&#34;https://htrd.su/blog/2023/10/15/sestra-mountain/&#34;&gt;Сестру&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Лена
Помимо идеи навёл справки о проезжабельности дороги для всяких Фориков и Икстрейлов. В 2014 году дорога там оказалась хайвеем. Артём (Артём-гид) заявил: &amp;ldquo;в лёгкую!&amp;rdquo;. Ну что же, это обнадёживает.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Выезжаем в субботу в 6 утра. Предварительно заскакиваю на заправку и заливаюсь под горлышко. Ребят забираю на парковке Счастливого детства на Постышева. Быстро укладываемся и в путь.&lt;/p&gt;
&lt;p&gt;Дорога лёгкая и пустая. На подъезде к кафе &amp;ldquo;У ущелья Дарданеллы&amp;rdquo; наблюдаем шикарный рассвет.&lt;/p&gt;
&lt;p&gt;В самом кафе (около 7:30) делаем санитарную остановку, заправляемся кофе и дальше в путь. Следующая промежуточная цель, она же условная точка &amp;ldquo;конце асфальта&amp;rdquo;, - въезд в деревню Николаевка. Там почти сразу за знаком начала населённого пункта поворот на грунтовку налево. В этой точке мы в 8:21.&lt;/p&gt;
&lt;p&gt;Дорога действительно достойная, но последствия сильных тайфунов, прошедших с нашего первого тут появления, всё же заметны. Едем не быстро, дабы не оставить резину тут же. В одном месте появился объезд участка дороги, особенно пострадавшего от одного из разливов реки Водопадной. Что-то мне подсказывает, что для SUV этот участок проезжабельным будет 2-3 года, но если ошибусь, будет хорошо.&lt;/p&gt;
&lt;p&gt;Без проблем доезжаем до слияния ключа второго и реки Водопадная. Там же находим шикарное место для парковки. Время 9:00.&lt;/p&gt;
&lt;p&gt;Хотел написать: быстро. Но нет. Вяло раскидываем по рюкзакам продукты и палатку, снаряжемся. Посмеиваемся на Саниным рюкзаком &amp;ldquo;смерть туриста&amp;rdquo;. В 9:36 выходим на маршрут.&lt;/p&gt;
&lt;p&gt;Первый брод (там же &amp;ldquo;парковка&amp;rdquo;). И, вроде, ничего не предвещало беды, но на Санином рюкзаке с мясом отрывается лямка. И тут пригодился ремкомплект, который большую часть времени ездит невостребованным грузом. Воистину, лучше пусть будет и не потребуется, чем потребуется, а его не окажется.&lt;/p&gt;
&lt;p&gt;В общем, у Сани примерно на 50 минут организовался кружок кройки и шиться. Попутно шутим и выясняем кто виноват. Оказывается&amp;hellip; Лена! Ведь каждый раз на этом траверсе у неё случалась какая-то жесть. Ну или где-то рядом. Общественно порицаем!&lt;/p&gt;
&lt;p&gt;Через, примерно, 50 минут все швы прошиты, даже те, что пока (пока!) не порваны. И наше путешествие начинает продолжаться. А рюкзак - мучить Саню. Движение продолжили в 10:27.&lt;/p&gt;
&lt;p&gt;Броды на ручье все перепрыгиваются по камушкам или брёвнышкам. Не некоторых, правда, можно эпично навернуться. Особенно под рюкзаком.&lt;/p&gt;
&lt;p&gt;В 11:25 проходим мимо водопада (водоската) Макаровский. Зайти на него решаем на обратному пути. Если заходим. Если&amp;hellip; В общем, если получится.&lt;/p&gt;
&lt;p&gt;В 11:37 мы на развилке дорог: налево уходит на Макариху, а нам направо. Буквально сразу же выскакиваем на поляну с не то зимушкой, не то баней: по конструктиву - баня, а по размеру палатьев - зимушка. Очевидно только одно: ушатана она сильно. И печки нет.&lt;/p&gt;
&lt;p&gt;После поляны дорога переходит в заросший волок, который уходит в распадок направо, а нам нужно двигаться в левый распадок. Маркировка есть, главное быть внимательным. По тропе вдоль ручья доходим до начала подъёма. Время 11:58.&lt;/p&gt;
&lt;p&gt;Здесь останавливаемся на обед и заливаем по 3л общаковой воды каждый. И впрягаемся в подъём. Время 13:04.&lt;/p&gt;
&lt;p&gt;Артём (а может и не только он) изрядно натоптал тропу. Маркировка тоже имеет место быть. Завалы если и есть, то уже обтоптаны и обхожены. В общем, если не брать крутизну, то подъём мало отличается от подъёма на ту же Читинзу со стороны Красноармейского через Ручьи: есть маркировка, тропа видна на рельефе.&lt;/p&gt;
&lt;p&gt;Но сам подъём бодрый. Пару несущественных выполаживаний и всё. А Саню, тем временем, пытается убить его рюкзак. Название обязывает.&lt;/p&gt;
&lt;p&gt;Ближе ко второй половине подъёма тропа проходит по двум осыпям - стоит остановиться и оглядеться.&lt;/p&gt;
&lt;p&gt;Незадолго до вершины встречаем группу туристов, что гоняли на гору и уже возвращаются обратно. Молча завидуем движению налегке.&lt;/p&gt;
&lt;p&gt;Наверх вываливаемся в 15:36. Вершина скучная, поэтому стоит сгонять дальше по тропе - минут через 5-10 можно выскочить на &amp;ldquo;луга Рамадана&amp;rdquo; и вот уже там есть обзорность и виды.&lt;/p&gt;
&lt;p&gt;А вот самолёт не нашли. Но и не сильно прорабатывали эту тему. Может как нибудь, когда нибудь&amp;hellip;&lt;/p&gt;
&lt;p&gt;В 16:17 накидываем рюкзаки и выдвигаемся на траверс.&lt;/p&gt;
&lt;p&gt;Вот тут нас начинают приветствовать ЁЁ (по соображениям цензуры аббревиатура не раскрывается, кто в теме, тот в теме) и милые приморские рощи (МПР). Много завалов, но вполне обходибельных. Не меньше и следов жизнедеятельности коз и прочей живности. А вот следов прохождения группы Лены Медведевой - не очень. Прям ниндзя какие-то. Но вообще жаль, что где-то разминулись и не встретились (они ходили в один день).&lt;/p&gt;
&lt;p&gt;В 17:30 минуем пупырь с отметкой 1200м. Это даже выше Макарихи. С него сваливаемся в седловину, которая по проходимости ещё более эпична, нежели было ранее. И так как время уже к закату, то сбрасываем рюкзаки и начинаем искать место, куда притулить палатку. На что даже не ушло иного времени. В 17:58 ставим лагерь.&lt;/p&gt;
&lt;p&gt;И вот палатка поставлена, заваливаемся в неё, готовим ужин в тамбуре, заливаем термоса. Саня занимается дополнительной прошивкой рюкзака и усилением всего, что только можно, дабы хватило этого бедняги на второй день. А то каждое резкое движение приводило к неприятному треску очередной нитки.&lt;/p&gt;
&lt;p&gt;После ужина расползаемся по спальникам, включаем ночное освещение и начинаем диалоги обо всём, до чего добираются извилины мозга. И в какой-то прекрасный момент разговор, внезапно, начинает разбавляться сдержанным, но уверенным храпом Санька. Ушатал, беднягу, его рюкзак.&lt;/p&gt;
&lt;p&gt;Ночь выдалась тёплая и безветренная. Термометр в палатке показывал +5°C. Подъём в 7 утра. За бортом всего -2°C.&lt;/p&gt;
&lt;p&gt;Неспешно завтракаем. Доливаем воду в термоса, собираемся. Где-то в 9:00 выходим на маршрут.&lt;/p&gt;
&lt;p&gt;Ах да, забыл упомянуть. Преждевременно и по глупости разрядил один комплект батарей для навигатора - забыл вечером пятницы выключить после заливки вариантов маршрута. Зато записал весь путь от Владивостока до слияния ручьёв. Второй комплект к вечеру первого дня показывал одно деление, поэтому грел его в спальнике. Утром уровень заряда показал два деления и продержался так до самой машины. Нужно запатентовать способ зарядки. Шутка. На живучесть батареи в воскресенье сказалось и то, что было ощутимо теплее. Холод - главный враг батареек.&lt;/p&gt;
&lt;p&gt;Ну да ладно, возвращаемся к маршруту. К 9:35 залезли на очередной пупырь отмеченный на некоторых картах  как высота 1139м. После которого идёт незначительный сброс высоты на широкую седловину перед Макарихой и дальнейший плавный подъём на неё. Куда мы добрались к 10:35, лавируя между завалами.&lt;/p&gt;
&lt;p&gt;На вершине много следов посещения человеком и на спуск уходит, казалось, шикарная тропа. Как обычно, фотографируемся и в 11:02 начинаем спуск по этой самой тропе. Которая сразу же теряется. Ну или я такой следопыт. Хотя идём логично, регулярно встречаем старую маркировку, но физически на рельефе тропа незаметна.&lt;/p&gt;
&lt;p&gt;Склон своими завалами и МПР доставил даже больше, чем весь траверс вместе взятый.&lt;/p&gt;
&lt;p&gt;К 11:40 вываливаемся на старый заросший волок. Там же маркировка. Может по нему и ходят&amp;hellip; нормальные люди. Но мы решаем валиться дальше по гребню. Завалов меньше, а вот следов вырубки леса - больше.&lt;/p&gt;
&lt;p&gt;Где-то к 12 часам мы на гребне. Тут лес становится значительно приятнее, пахнет кедром, красивые останцы. По нему доходим до пупыря с отметкой 865м и начинаем валиться вниз, сильно забирая влево. В 12:43 выскакиваем опять на волок, тоже уже изрядно заросший и по нему вываливаемся в 12:50 вываливаемся на поляну в конце дороги со следами кострища и чьего-то пиршества. Переводим дух, перешнуровываемся и топаем дальше уже по дороге.&lt;/p&gt;
&lt;p&gt;На водопаде мы около 13:26, Лена остаётся на дороге, а я с Саней прошвыриваемся до него.&lt;/p&gt;
&lt;p&gt;Дальше на по пути встречаем две группки туристов (пара и с детьми), ищущих водопад. На вопрос: &amp;ldquo;далеко?&amp;rdquo;, отвечаем: &amp;ldquo;смотря куда&amp;rdquo;. Почему-то мы очень походили на людей которые решили сходить только на водопад. Хотя&amp;hellip; психов разных много, чем мы лучше?&lt;/p&gt;
&lt;p&gt;До машины добрались в 14:24. Перекладываемся, перекусываем и в обратный путь. На асфальте были в 15:29, а в город добрались примерно к 18 часам вечера. Сделав небольшую санитарную остановку на кофе в Дарданеллах.&lt;/p&gt;
&lt;p&gt;В общем, неплохо сходили. Отчего-то рассчитывал на нечто более суровое: хребет на Ольховую со стороны пади Поворотной после Майсака нас встречал куда более суровыми завалами.&lt;/p&gt;
&lt;h3 id=&#34;фото-и-gps&#34;&gt;Фото и GPS&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Мои фото:
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://disk.yandex.ru/a/n288dOpE8cCXjA&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://disk.yandex.ru/a/n288dOpE8cCXjA&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;GPS:
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://disk.yandex.ru/d/54ViwqzawI_vbQ/GPS&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://disk.yandex.ru/d/54ViwqzawI_vbQ/GPS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Остальное фото:
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://disk.yandex.ru/d/54ViwqzawI_vbQ&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://disk.yandex.ru/d/54ViwqzawI_vbQ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;полутехнические-сведения&#34;&gt;Полутехнические сведения&lt;/h2&gt;
&lt;h3 id=&#34;кухня-раскладка-газ&#34;&gt;Кухня, раскладка, газ&lt;/h3&gt;
&lt;p&gt;Готовили на газу. Взял два баллона: с перелитым газом из цангового и оригинальный, чуть початый резьбовой баллон. Всего было 3 готовки: обед, ужин, завтрак. Обед на второй день не закладывался, предлагалось обеспечить себя перекусами самостоятельно. Перелитый газ - 5% пропана. Температура готовки: около 10-15 градусов, около нуля и около -2. Газ для форсировки нужно было греть руками. Для готовки использовали как оригинальную кастрюльку системы Fire Maple Polaris X5, так и котело Bulin S2500. Расход составил примерно 39г/чел/сутки.&lt;/p&gt;
&lt;p&gt;Раскладка опять была &amp;ldquo;кипяточная&amp;rdquo;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;День 1&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Обед: перед началом подъёма
&lt;ul&gt;
&lt;li&gt;Яичная лапша (гнёзда) с сырным соусом, сардельками и сыром&lt;/li&gt;
&lt;li&gt;по ломтику сыра&lt;/li&gt;
&lt;li&gt;Хлеб (но благополучно был забыт)&lt;/li&gt;
&lt;li&gt;Чай, конфеты&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Ужин: в палатке на хребте
&lt;ul&gt;
&lt;li&gt;Гречневые хлопья с тушёнкой&lt;/li&gt;
&lt;li&gt;Сало/Шпик молотый (тоже забыт)&lt;/li&gt;
&lt;li&gt;Хлеб&lt;/li&gt;
&lt;li&gt;Чай, конфеты&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;День 2&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Завтрак: в палатке на хребте
&lt;ul&gt;
&lt;li&gt;Готовые блюда Кронидов &amp;ldquo;Плов&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Хдеб&lt;/li&gt;
&lt;li&gt;Чай, конфеты&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Общее&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Туба кисло-сладкого соуса&lt;/li&gt;
&lt;li&gt;Смесь трав сушёных&lt;/li&gt;
&lt;li&gt;Соль&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;профиль-высот-и-километраж&#34;&gt;Профиль высот и километраж&lt;/h3&gt;
&lt;p&gt;Сводка:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;День&lt;/th&gt;
          &lt;th&gt;Протопали,&lt;br/&gt;км&lt;/th&gt;
          &lt;th&gt;Набор высоты,&lt;br/&gt;м&lt;/th&gt;
          &lt;th&gt;Сброс высоты,&lt;br/&gt;м&lt;/th&gt;
          &lt;th&gt;Время/в движении,&lt;br/&gt;ч&lt;/th&gt;
          &lt;th&gt;Скорость/в движении,&lt;br/&gt;&lt;/th&gt;
          &lt;th&gt;Начало движения,&lt;br/&gt;ч&lt;/th&gt;
          &lt;th&gt;Конец движения,&lt;br/&gt;ч&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;28 окт&lt;/td&gt;
          &lt;td&gt;13.0&lt;/td&gt;
          &lt;td&gt;1345&lt;/td&gt;
          &lt;td&gt;600&lt;/td&gt;
          &lt;td&gt;08:22/04:55&lt;/td&gt;
          &lt;td&gt;1.5/2.6&lt;/td&gt;
          &lt;td&gt;09:36&lt;/td&gt;
          &lt;td&gt;17:59&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;29 окт&lt;/td&gt;
          &lt;td&gt;11.5&lt;/td&gt;
          &lt;td&gt;360&lt;/td&gt;
          &lt;td&gt;1125&lt;/td&gt;
          &lt;td&gt;05:28/04:06&lt;/td&gt;
          &lt;td&gt;2.1/2.8&lt;/td&gt;
          &lt;td&gt;08:57&lt;/td&gt;
          &lt;td&gt;14:26&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;strong&gt;24.5&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;1705&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;1725&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;&amp;mdash;&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;&amp;mdash;&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;&amp;mdash;&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;&amp;mdash;&lt;/strong&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Профиль:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2023/10/30/makarova-makariha-traverse/files/profile.png&#34; alt=&#34;profile&#34;&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Семейная Фалаза или путешествие в зимнюю сказку</title>
      <link>https://htrd.su/blog/2023/10/22/falaza-family/</link>
      <pubDate>Sun, 22 Oct 2023 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2023/10/22/falaza-family/</guid>
      <description>&lt;p&gt;Выбрались в очередной раз на Фалазу с сыном. На этот раз собралась целая компания отцов:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Я с Андреем&lt;/li&gt;
&lt;li&gt;Валентин со Львом&lt;/li&gt;
&lt;li&gt;Стас с Марком&lt;/li&gt;
&lt;li&gt;и Паша с Арсением&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Сходили душевно. Пацаны залетели на вершину на одном дыхании, уже за ними нужно поспевать. Попали в зимнюю сказку, при этом на вершине вышло, как по заказу солнце и было очень тепло. Немного поиграли даже в снежки :)&lt;/p&gt;
&lt;p&gt;Фото: 
&lt;a href=&#34;https://disk.yandex.ru/a/3bEPHunfJyViAg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://disk.yandex.ru/a/3bEPHunfJyViAg&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Гора Сестра</title>
      <link>https://htrd.su/blog/2023/10/15/sestra-mountain/</link>
      <pubDate>Sun, 15 Oct 2023 18:28:32 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2023/10/15/sestra-mountain/</guid>
      <description>&lt;p&gt;Полторы недели назад в группе пролетел анонос, что компания ищет попутчиков на г.Сестру. Маршрут классический, пешка в один день с ночёвкой в приюте в Лазо. В понедельник вписался в эту затею, так как до этого времени ещё не дошёл до этой горы.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2023/10/15/sestra-mountain//files/map.jpg&#34; alt=&#34;map&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;немного-лирики-и-хронологии&#34;&gt;Немного лирики и хронологии&lt;/h2&gt;
&lt;p&gt;Выезд был запланирован в пятницу часов на 16-17. Ночёвка в Лазо в 
&lt;a href=&#34;https://2gis.ru/firm/70000001077426624/133.908843%2C43.385377?m=133.910639%2C43.385164%2F17.98&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Ночлеге туристу&lt;/a&gt; и ранним выездов в 6 утра на ГАЗ-66 до стартовой точке на поляне кордона. Возвращение вечером субботы туда же в Ночлег туристу, ночёвка, подъём сборы в свободном темпе и выезд в город в воскресенье.&lt;/p&gt;
&lt;p&gt;В понедельник уже было собрано 10 участников, но к моменту сбора на заброску негритят стало внезапно 7, так что я оперативно вписываюсь в участие в мероприятии. А по итогу откололся ещё один человек и итоговый коллектив:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Я,&lt;/li&gt;
&lt;li&gt;Дима - рукпох&lt;/li&gt;
&lt;li&gt;Костя&lt;/li&gt;
&lt;li&gt;Коля&lt;/li&gt;
&lt;li&gt;Паша&lt;/li&gt;
&lt;li&gt;Саня&lt;/li&gt;
&lt;li&gt;Люба&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Нитка: Кордон&amp;ndash;Зубы Дракона&amp;ndash;Камень-Брат&amp;ndash;Бастион (Малая Сестра)&amp;ndash;Сестра&amp;ndash;Бастион (Малая Сестра)-Гребень-Кордон.&lt;/p&gt;
&lt;p&gt;По факту скорректировались на: Кордон&amp;ndash;Зубы Дракона&amp;ndash;Камень-Брат&amp;ndash;Бастион (Малая Сестра)&amp;ndash;Сестра&amp;ndash;Бастион (Малая Сестра)&amp;ndash;гребень на Камень-Брат&amp;ndash;высота 1100&amp;ndash;слияние Лукьянов Лог и левого притока (&amp;ldquo;каньон&amp;rdquo;)&amp;ndash;Кордон. Т.е. спускались по среднему маршруту.&lt;/p&gt;
&lt;p&gt;Ребята назвали вершину Бастион, которая фигурирует на OSM картах и на Wikimapia, Малой Сестрой. На нормальных картах она вообще никак не обозначена, поэтому написал оба названия в скобках, так как ХЗ какое верное. На картах ГГЦ и генштабе обозначена как высота 1560 (вроде только на 500-метровках).&lt;/p&gt;
&lt;p&gt;Наш экипаж, в составе Кости, Коли и меня отчалил от Счастливого детства на Постышева примерно в 16:30, где-то часа через 4 были уже у места ночлега. На гравийке нас обогнал экипаж Сани и Любы.&lt;/p&gt;
&lt;p&gt;Заселились: нам выделили 4х местную комнату (900 руб/ночь) и раскладушки с матрасами в общем помещении (600 руб/ночь). Дождались Диму и Пашу, поужинали, разложились, перебрали вещи на следующий день и ко сну. Не пожалел, что в последний момент решил захватить с собой беруши. Хотя ночь всё равно вышла какая-то беспокойная.&lt;/p&gt;
&lt;p&gt;Утром подъём, завтрак. И где-то к 5:30 за нами приезжает машина и в скором времени выезжаем на кордон.&lt;/p&gt;
&lt;p&gt;От ночлега до поляны вышло 15 км при средней скорости 12 c копейками км/ч.&lt;/p&gt;
&lt;p&gt;На маршрут вышли практически ровно в 7 утра. Долину ключа Лукьянов Лог сильно потрепало селем, который сошёл со склона под г.Камень-Брат по левому притоку ключа Лукьянов Лог. Но каньон получился шикарным местами.&lt;/p&gt;
&lt;p&gt;Вихляя по остаткам дороги к 8 с копейками часов подошли к началу подъёма на Зубы Дракона. К 9:30 были на видовой близ скалы Чаша (на саму скалу не ходили). Перекус, фотография и к 10:25 вываливаемся на хребет. Тут в лучших традициях клушегубства и дешманских фильмов разделяемся. Хотя это обсуждалось несколько ранее в узком кругу. В общем, Костя и Дима с рацейкой бегут на Горелую Сопку, вторая рацейка у нас. Точка рандеву - Малая Сестра и от туда уже вместе идём на обратный путь.&lt;/p&gt;
&lt;p&gt;Хребет плотно утыкан разными камушками, будто сложенными искусственно чей-то могучей рукой. А по факту - результат затейливой эрозии. Но эпичности и красоты от этого не убавляется. Отчего на чуть ли не на каждом булыжнике выделяем время осмотреться и сделать пару-тройку кадров. И тихим сапом до Зубов Дракона добираемся к 10:50, а к Камень-Брату к примерно к 11 часам.&lt;/p&gt;
&lt;p&gt;Второе достоинство хребта - он открытый. И с него отличные виды на окружающие долины, распадки и вершины. Тут описывать нечего, нужно самому ходить и смотреть.&lt;/p&gt;
&lt;p&gt;К 11:34 были на красивом видовом месте с шикарным останцем. От туда же начинается спуск по среднему маршруту на хребет. И ровно в 12:00 зашли на Бастион (Малую Сестру). Небольшой отдых и выдвигаемся на Сестру. Паша начинает жаловаться на колено, которое болит при спуске, но молчит на подъём. Видим одинокого человека, поднимающегося на гору. Других людей пока не видно.&lt;/p&gt;
&lt;p&gt;В седловине перед подъёмом на гору делаем небольшой привал. Если бы не тропы, проложенные в стланнике, пробираться было бы значительно труднее. Начинаю малость тухнуть, движение медленней, короткие передышки - чаще. Но на вершине мы уже в 12:50 (плюс/минус). Как обычно в таких случаях фотографии, перекусы и так далее. Уже на подъёме замечаем множество людей на гребне идущем от кордона на Бастион, а одинокий человек - просто самый быстрый одной из групп. Знакомились, но имя забыл.&lt;/p&gt;
&lt;p&gt;На вершине практически стих ветер. Погода, вопреки прогнозам, не облачная, а вполне себе переменная. Точнее небо как бы затянуто небольшой дымкой. Но это немного скрадывает виды на дальние горы. Но всё же прекрасно видно Облачную и Снежную. Минут 25-30 там тусим, делаю горячей воды. Паша заматывает себе ногу эластичным бинтом, делает эдакий ортез. И идём на спуск.  По пути встречается множество людей, идущих по маршруту по хребту от Кордона.&lt;/p&gt;
&lt;p&gt;Обратно на Бастион добираемся в 14:08. Пытаемся связать, как договаривались, с ребятами с Горелой Сопки (до этого регулярно были сеансы связи, плюс получилось связаться и поговорить с Синей Деликой), но что-то не получаем ответа. Повторяем попытки связаться, и тут&amp;hellip; они сами доходят. Оказывается, что рация потеряна. Дима собирается пробежать в обратном направлении и поискать её, тем более, что судя по времени последнего удачного сеанса связи, они уже были на пути к нам, миновав место подъёма на хребет. Кушаем. Связываемся с Синей, абонент - Максим Старовойтов. Пока кушаем, предлагаю сменить концепцию и возвращаться не по хребту на Кордон, а пройтись обратно до камней и спускаться по среднему маршруту. А Дима и Саня тем временем побегут вперёд, пытаясь обнаружить рацейку. А на отходе на гребень мы подождём и будем спускаться вниз.&lt;/p&gt;
&lt;p&gt;В общем, так и поступаем. В 15:40 мы на скалах. Ребята лазят, отдыхаем, фотографируемся. Батонимся. Судя по треку - отходящая тропа на спуск должна начинаться чуток дальше по грубню, немного траверся спусковой гребень. Предлагаю сдвинуться туда и там позагорать. Так и делаем. По итогу в 16:07 там, а в 16:22 случайно Коля включает WA и получаем голосовое, мол, нас не ждите - спускайтесь. Немного поматерясь, не без этого, траверсим склон и выходим на гребень. Начало тропы, где она отмечена - нет, а на самом гребне есть, лосячая и она выходит в аккурат на камень. Там её не заметили.&lt;/p&gt;
&lt;p&gt;Спускаемся не быстро: с больной ногой на спуске не разгонишься. И в какой-то момент хорошо натоптанную тропу теряем. Моя гипотеза - её проложили к селю&amp;hellip; Ну не посмотрели. Спустились по гребню, по старой тропе с маркировкой. Гребень тоже хорош интересными нагромождениями камней. Внизу были где-то в 17:40.&lt;/p&gt;
&lt;p&gt;Образовавшийся каньон поражает эпичностью. Размерами валунов и стволов деревьев, которые нёс сель. И хоть весь его не сходили, впечатление получили.&lt;/p&gt;
&lt;p&gt;Решаем долго не сидеть и максимально до кордона проскочить по светлу. Заход по данным навигатора - 18:25. Но небольшой перерыв делаем. После него, пройдя метров сто или около того со спуска выходит и поисковая партия в лице Димы и Сани - нагнали нас. Повторяем предложение по движению по светлу, соглашаемся и двигаемся в обратный путь. Тут, к слову, более цепко получилось держаться уже натоптанных следов других групп.&lt;/p&gt;
&lt;p&gt;Практически ровно в 19:00 мы уже на поляне кордона, грузимся в шишигу и отправляемся в обратный путь до приюта. Дима проскочил по лагерям на поляне понаводил справки по рацейке - вдруг кто подобрал. К сожалению, без положительного результата.&lt;/p&gt;
&lt;p&gt;Обратный путь особенно ничем не примечателен, в приюте были где-то в начале девятого. Ужин, немного пивка, и в люлю спать. Проспал как убитый, но снова не пожалел, что взял беруши.&lt;/p&gt;
&lt;p&gt;Утром завтрак, ленивые сборы и примерно в 10:30 выехали нашим экипажем домой. До города добрались около 14:00.&lt;/p&gt;
&lt;h3 id=&#34;фотографии&#34;&gt;Фотографии&lt;/h3&gt;
&lt;p&gt;А так же GPS&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://disk.yandex.ru/d/bMJcYRMEMKIP0Q&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://disk.yandex.ru/d/bMJcYRMEMKIP0Q&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;полутехнические-сведения&#34;&gt;Полутехнические сведения&lt;/h2&gt;
&lt;h3 id=&#34;раскладка&#34;&gt;Раскладка&lt;/h3&gt;
&lt;p&gt;Основное питание - в приюте. Тут даже рассматривать особенно ничего не приходится. Но брал быстро-готовящееся:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;День 1&lt;/strong&gt;: заезд
&lt;ul&gt;
&lt;li&gt;Ужин
&lt;ul&gt;
&lt;li&gt;Яичная лапша в томатном (уточнить) соусе с сарделькой&lt;/li&gt;
&lt;li&gt;Чай, конфеты&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;День 2&lt;/strong&gt;: основной ходовой
&lt;ul&gt;
&lt;li&gt;Завтрак
&lt;ul&gt;
&lt;li&gt;Реторт-пакет Кронидов Греча с котлетой, нормально, долгоиграюще&lt;/li&gt;
&lt;li&gt;Чай, конфеты&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Обед/карманное питание
&lt;ul&gt;
&lt;li&gt;Бутерброды с сыром&lt;/li&gt;
&lt;li&gt;Карпаччо из курицы сырокопчёное от Ратимира&lt;/li&gt;
&lt;li&gt;Барбариски
&lt;ul&gt;
&lt;li&gt;По итогу часть карпаччо осталось, примерно половина бутербродов - тоже. Аналогично и для барбарисок&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Ужин
&lt;ul&gt;
&lt;li&gt;Лапша пятиминутка&lt;/li&gt;
&lt;li&gt;Чай, конфеты&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;День 3&lt;/strong&gt;: выездной
&lt;ul&gt;
&lt;li&gt;Завтрак
&lt;ul&gt;
&lt;li&gt;Рисовые хлопья с сайрой
&lt;ul&gt;
&lt;li&gt;достаточно годно получилось. Как обычно добавлял универсальную приправу из смеси нескольких трав (без соли и усилителей вкуса).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Чай, конфеты&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;За газом не следил. Использовал баллон 230г с перелитым газом из цанговых, т.е. менее продуктивных (пропана 5% против 25%). Ушло 77 грамм. Готовил еду, чай, на сопке подогревал воду для питья.&lt;/p&gt;
&lt;h3 id=&#34;профиль-высот-и-километраж&#34;&gt;Профиль высот и километраж&lt;/h3&gt;
&lt;p&gt;Сводка:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;День&lt;/th&gt;
          &lt;th&gt;Протопали,&lt;br/&gt;км&lt;/th&gt;
          &lt;th&gt;Набор высоты,&lt;br/&gt;м&lt;/th&gt;
          &lt;th&gt;Сброс высоты,&lt;br/&gt;м&lt;/th&gt;
          &lt;th&gt;Время/в движении,&lt;br/&gt;ч&lt;/th&gt;
          &lt;th&gt;Скорость/в движении,&lt;br/&gt;&lt;/th&gt;
          &lt;th&gt;Начало движения,&lt;br/&gt;ч&lt;/th&gt;
          &lt;th&gt;Конец движения,&lt;br/&gt;ч&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;14 окт&lt;/td&gt;
          &lt;td&gt;19.6&lt;/td&gt;
          &lt;td&gt;1485&lt;/td&gt;
          &lt;td&gt;1550&lt;/td&gt;
          &lt;td&gt;11:59/07:03&lt;/td&gt;
          &lt;td&gt;1.6/2.8&lt;/td&gt;
          &lt;td&gt;07:01&lt;/td&gt;
          &lt;td&gt;19:01&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;strong&gt;19.6&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;1485&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;1550&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;&amp;mdash;&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;&amp;mdash;&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;&amp;mdash;&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;&amp;mdash;&lt;/strong&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Профиль:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2023/10/15/sestra-mountain/files/profile.png&#34; alt=&#34;profile.png&#34;&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Традиционная Читинза</title>
      <link>https://htrd.su/blog/2023/10/09/regular_chitinza_2023/</link>
      <pubDate>Mon, 09 Oct 2023 22:12:05 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2023/10/09/regular_chitinza_2023/</guid>
      <description>&lt;p&gt;Как обычно, на первые выходные октября собрал группу на мой традиционный выход. Правда традиция оказалась больше традицией для меня, но всё же: назвался груздем - полезай в кузов, или: назвал традицией - чти :)&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2023/10/09/regular_chitinza_2023/files/map.jpg&#34; alt=&#34;map.jpg&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;часть-первая-лирико-хронологическая&#34;&gt;Часть первая: лирико-хронологическая&lt;/h2&gt;
&lt;p&gt;Практически до последнего момента было не совсем ясно кто пойдёт, но по итогу коллектив собрался такой:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Александр, то есть я&lt;/li&gt;
&lt;li&gt;Андрюха&lt;/li&gt;
&lt;li&gt;Женя&lt;/li&gt;
&lt;li&gt;Ксюша&lt;/li&gt;
&lt;li&gt;Вика&lt;/li&gt;
&lt;li&gt;и Денис&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Жили в двух палатках: Вика и Денис в своей двойке и все остальные - в Жениной четвёрке. Харчевались так же, по палаткам.&lt;/p&gt;
&lt;p&gt;Добирались на электричке и делали, по классике, кольцо с выходом и возвращением в Красноармейский. Ну и подъём по классике - через Ручьи.&lt;/p&gt;
&lt;p&gt;Пока топали до начала подъёма и места нашего обеда, как обычно балагурили и шутили. А как иначе? На подъёме бывает только сопеть силы остаются. Тут же были упомянуты два определения туризма:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;гастрономическое: взять побольше, уйти подальше и всё это съесть;&lt;/li&gt;
&lt;li&gt;и философское: умение использовать кучу взятых ненужных вещей взамен забытых нужных.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Кто бы знал, что второе определение станет первым лейтмотивом нашего выхода :)&lt;/p&gt;
&lt;p&gt;А началось все так. Ксюша с нами шла впервые, но до этого была на практических выходах, летней приктике на географическом факультете в ДВГУ с Сазыкиным и ходила с моей супругой, походы нормальные, длительные, обстоятельные, я бы сказал - экспедиции. И это наложило небольшой отпечаток на призму восприятия информации. Когда собирались и обменивались вводными в группе, я написал по кухне, что беру её на себя и всё с этим связанное, подразумевая составление раскладки и закуп продуктов&amp;hellip; Вроде всё невинно и обыденно. Но в походах в составе студенческой группы был нюанс: практика нужна всем, но не у всех есть снаряжение и опыт его использования. Поэтому всё это предоставлялось организующей стороной. В том числе обычный набор вида КЛМН. И Ксюша его не взяла, что мы и выяснили на обеде. Но где наша не пропадала! У Андрея нашлась вилка и ложка от доширака, у Жеки контейнер от плюшек в дорогу, а у меня - кружка на 750мл (окрещённая Ксюшей, за возможность вместить бутылку вина - винной). Не пришлось даже приспосабливать консервную банку :)&lt;/p&gt;
&lt;p&gt;Ну да ладно. Посмеялись, пообедали и пошли.&lt;/p&gt;
&lt;p&gt;До первой видовой проскочили как-то быстро, чуть дольше 20 минут. И там зависли: тепло, красиво, солнечно. И мухи не кусают.&lt;/p&gt;
&lt;p&gt;Дальше основной подъём. Идём без напряга, но вырисовывается группа лидеров: Я, Женя и Ксюша. Денис не убегает далеко от Вики, с их же темпом двигается Андрей. Время от времени ждём. Но на видовой уже у самой вершины хоть и зависаем на приличное время, но оценивая обстановку, решаем выдвигаться, что бы сгонять за водой на родник и чуточку оптимизировать процессы. И это было верным решением, о чём - ниже.&lt;/p&gt;
&lt;p&gt;И тут же у нас зарождается второй лейтмотив нашего мероприятия: мы пытались что-то потерять, но безуспешно.&lt;/p&gt;
&lt;p&gt;Начали с Жениного телефона. Вставать идти - а телефон пропал. Искали искали, перебрали по веточкам заросли микробиоты, на которой стоял его рюкзак. А оказалось, что вместо своего рюкзака, он положил его в мой. Ну одинаковые они. Причём: положил, потом стал искать воду, понял, что рюкзак не его и переключился на свой. Но факт укладки телефона прошёл на автопилоте и не отложился в голове :)&lt;/p&gt;
&lt;p&gt;На вершине были где-то через 2:20-2:30 от начала подъёма (время включая зависания на видовых). Там фотографируемся и перемещаемся на центральную поляну. Женя остаётся ставить палатку, Ксюша ему помогает, а я беру пятёрки и отправляюсь на родник за водой.&lt;/p&gt;
&lt;p&gt;Вот тут ждал неприятный сюрприз. Правда ожидаемый из-за сухого сентября. Воды в роднике почти нет, литр набираю за 15 минут, вода с осадком (по другому налить нереально), поэтому только на кипячение. В планах было набрать бутылки 3, по факту еле набрали 7.5л и то, за мной отправили &amp;ldquo;спасательную&amp;rdquo; экспедицию. Хорошо, что всегда, уходя из лагеря &amp;ldquo;на 5 минуточек&amp;rdquo; беру фонарик. Пригодился и в этот раз. Зато пока ждал восстановления родника у меня случился курс увлекательной орнитологии: чёрт его что там были за птицы, что прилетали на водопой, но их было много и разные: крупные птахи, типа кедровок - эти чуть на голову мне не садились; средние с красной грудкой похожие на снегирей и совсем мелочь, летающая стайками: то ли синички, то ли поползни. И это продолжалось непрерывно, пока пытался набрать воду. В общем, в 17:20 я спустился к роднику, где-то в 19:30 с поисковой группой вернулся в лагерь. Благо, что на ужин экспериментальная раскладка требовала воду только для чая. Э - экономия.&lt;/p&gt;
&lt;p&gt;Ужин, посиделки у костра, настойка, вискарик, бренди, коньяк, разговоры о вечном и не очень, астрофизике и разной изотерике. Сгоняли на плато, поглядели на звёзды, поискали знакомые созвездия, в монокль нашли галактику М31 и шаровое скопление рядом с Геркулесом - наводиться было тем ещё квестом, но справились. Дальше опять разговоры о вечном и не очень и уже за полночь отчалили на боковую.&lt;/p&gt;
&lt;p&gt;Хотя нет, не сразу. Помним про наш первый леймотив и оказывается, что Андрюха забыл дома коврик. Ну чтож, из куска подложки под ламинат, которую я таскаю в роли стола, дополнительного утеплителя, изолятора между собой и стенкой палатки, а так же расходного материала для лаптей (см 
&lt;a href=&#34;https://htrd.su/blog/2016/05/14/dve_ikrjanki_i_nemnogo_partizanskogo_xrebta/&#34;&gt;Две Икрянки и немного Партизанского хребта&lt;/a&gt;), а так же хоб и двух рюкзаков успешно колхозим этот самый коврик. Вот теперь точно на боковую :)&lt;/p&gt;
&lt;p&gt;Утром проснулся от того, что&amp;hellip; жарко! Пришлось разоблачаться и досматривать сны до 8 утра, после чего решили таки сыграть подъём. Андрюха тем временем выяснял, что за ортопедический предмет впивался ему в копчик ночью. Думали на фастексы на рюкзаках, а оказался неубранный колпачок от газового баллона. От такой у нас принц на крышечке. Но в общем и целом, спалось всем нормально, ночью было очень тепло, вопреки ожиданиям (пару лет ловили крепкий заморозок в эти сроки).&lt;/p&gt;
&lt;p&gt;В условиях сложившегося водного кризиса готовим завтрак, считаем каждую каплю и на спуск идём без запасов оной.&lt;/p&gt;
&lt;p&gt;При сборе лагеря продолжили попытки что-то потерять. Правда и на этот раз безуспешно. И опять телефон. Но на этот раз - мой. И нет, я не положил его в Женин рюкзак, хотя&amp;hellip; по факту он в нём и оказался. Прочесали весь лагерь и все места куда отлучался. Мысли, что могли оставить в палатке отметаем, ну типа: &amp;ldquo;как жеж не смогли нащупать, когда складывали?&amp;rdquo; А вот как оказалось, что не смогли. Правда распаковать и прощупать палатку ещё раз догадались только уже после серии дедуктивных размышлений, когда все остальные варианты себя исчерпали. Но таки да - там и оказался. В общем: есть бредовая мысль - проверь :)&lt;/p&gt;
&lt;p&gt;На спуск пошли в 10:30. Маршрут по северо-восточному гребню, через сгоревшее зимовьё и красивой лесной дороге с пылающими клёнами. Хотя зелёных красок в это время ещё больше, чем обычно: картина, как и в прошлом году.&lt;/p&gt;
&lt;p&gt;На гребне, где обычно много калины&amp;hellip; пусто. Где в иной год мы ненапряжно набирали пару мешков шишки - тоже нишиша. Да и от лимонника только лоза и не видно следов сбора. Год неурожайный? В общем, запасы настойки в этом году пополнить не получится из дикого лимонника. А вот элеутерококка, кому нужно, набрали.&lt;/p&gt;
&lt;p&gt;Вниз, в распадок к ручью пришли в 13:17. Естественно все сразу ринулись на водопой :) А в метрах семиста далее, на поляне, встали на обед. Приготовили и поели быстро. А до перрона 4 км ровной дороги. Солнышко греет&amp;hellip; В общем лежим и греем животики, завязываем жирок.&lt;/p&gt;
&lt;p&gt;Женя тем временем снова пытается что-то потерять. И нет,  на этот раз не телефон, а хобу. И в этот раз - безуспешно. Прямо вот напасть какая-то!&lt;/p&gt;
&lt;p&gt;Выдвигаемся в начале пятого и на перрон добираемся к пяти. На интеграшке делаем кипятка для кофе и ждём электричку. А после обратный путь домой, неумолкающая беседа, радость от выхода и новых знакомст и малая толика грусти, что всё это закончилось.&lt;/p&gt;
&lt;p&gt;Фото от разных производителей:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://disk.yandex.ru/d/WAqrIIVgv0psnQ&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Мои&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://disk.yandex.ru/d/aG93GALmTtM2cQ&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Женины&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://disk.yandex.ru/d/dimbaBKU6NgADw&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Ксюшены&lt;/a&gt; (дополнятся ещё)&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://disk.yandex.ru/d/O6X3v6qnhu7usg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Андреевы&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;PS а вот на вершину теперь нужно брать запас воды, на всякий пожарный случай. Или следить за осадками в Сентябре.
PPS на вершине в этот раз был аншлаг, включая наш, было 5 лагерей.&lt;/p&gt;
&lt;h2 id=&#34;часть-вторая-полутехническая&#34;&gt;Часть вторая: полутехническая&lt;/h2&gt;
&lt;h3 id=&#34;кухня-раскладка-газ&#34;&gt;Кухня, раскладка, газ&lt;/h3&gt;
&lt;p&gt;Готовили на газу. Горелка из интеграшки Fire Maple Polaris X5 с комплектным таганком и котлом Primus Eta Pot 3L с теплообменником. Система показала себя почти так же эффективно, как со стоковым стаканом. Его использовали только один раз - кофе приготовили на перроне. Расход газа едва перевалил за 35 грамм/чел/сутки. Но смесь годная 25%/75% пропан/изобутан от 
&lt;a href=&#34;https://primalp.com/catalog/ballony_gazovye/tibet_ballon_gazovyy_230gr_/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Тибета&lt;/a&gt;. В цанговых обычно пропана не больше 5%, а у резьбовых Kovea - 15%.&lt;/p&gt;
&lt;p&gt;Раскладка была &amp;ldquo;эспериментальная&amp;rdquo;. Из разряда - &amp;ldquo;на кипятке&amp;rdquo;, что подразумевает почти полное отсутствие готовки. Но не совсем: можно обойтись запариванием, но в условиях холодной погоды это такое себе решение.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;День 1&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Завтрак: дома&lt;/li&gt;
&lt;li&gt;Обед: перед началом подъёма
&lt;ul&gt;
&lt;li&gt;Яичная лапша (&amp;ldquo;гнёзда&amp;rdquo;) в сырном соусе (Maggi) с сардельками
&lt;ul&gt;
&lt;li&gt;лапша забрасывается вместе с соусом в кипящую воду и варится 3 минуты. Сардельки можно бросить туда же. Плюс добавлял смесь трав сушёных (без соли и прочих добавок) сразу в холодную воду. Воду можно сливать, а можно оставить.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Баклажановая икра&lt;/li&gt;
&lt;li&gt;Хлеб&lt;/li&gt;
&lt;li&gt;Чай, конфеты&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Ужин: на вершине
&lt;ul&gt;
&lt;li&gt;Готовые блюда Кронидов: гороховая каша с говядиной
&lt;ul&gt;
&lt;li&gt;достаточно бросить в холодную воду, довести до кипения и подержать/покитпятить минуту-другую&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Сало-паста с васаби&lt;/li&gt;
&lt;li&gt;Хлеб&lt;/li&gt;
&lt;li&gt;Чай, конфеты&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;День 2&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Завтрак: на вершине
&lt;ul&gt;
&lt;li&gt;Хлопья 4 или 5 злаков
&lt;ul&gt;
&lt;li&gt;эксперимент показал, что можно просто залить кипятком на 8 минут. Либо бросать в кипящую воду, варить 3 минуты потом настаивать ещё 3 минуты на выключенном газе.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Сгущёнка и джем в пакетах для каши&lt;/li&gt;
&lt;li&gt;Сыр на усиление&lt;/li&gt;
&lt;li&gt;Хлеб&lt;/li&gt;
&lt;li&gt;Чай, конфеты&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Обед: внизу
&lt;ul&gt;
&lt;li&gt;Тут были варианты:
&lt;ul&gt;
&lt;li&gt;Рисовые хлопья с сайрой или&lt;/li&gt;
&lt;li&gt;Гречневые хлопья с тушёнкой, остановились на этом варианте&lt;/li&gt;
&lt;li&gt;Для обоих случаев - забрасывать в подсоленную кипящую воду и варить 3 минуты. Туда же добавлял смесь трав (но в холодную воду).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Хлеб, остатки сала&lt;/li&gt;
&lt;li&gt;Чай, конфеты.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Общее&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Туба кисло-сладкого соуса&lt;/li&gt;
&lt;li&gt;Смесь трав сушёных&lt;/li&gt;
&lt;li&gt;Соль&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;профиль-высот-и-километраж&#34;&gt;Профиль высот и километраж&lt;/h3&gt;
&lt;p&gt;Сводка:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;День&lt;/th&gt;
          &lt;th&gt;Протопали,&lt;br/&gt;км&lt;/th&gt;
          &lt;th&gt;Набор высоты,&lt;br/&gt;м&lt;/th&gt;
          &lt;th&gt;Сброс высоты,&lt;br/&gt;м&lt;/th&gt;
          &lt;th&gt;Время/в движении,&lt;br/&gt;ч&lt;/th&gt;
          &lt;th&gt;Скорость/в движении,&lt;br/&gt;&lt;/th&gt;
          &lt;th&gt;Начало движения,&lt;br/&gt;ч&lt;/th&gt;
          &lt;th&gt;Конец движения,&lt;br/&gt;ч&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;07 окт&lt;/td&gt;
          &lt;td&gt;10.7&lt;/td&gt;
          &lt;td&gt;1030&lt;/td&gt;
          &lt;td&gt;85&lt;/td&gt;
          &lt;td&gt;05:46/03:22&lt;/td&gt;
          &lt;td&gt;1.9/3.2&lt;/td&gt;
          &lt;td&gt;11:00&lt;/td&gt;
          &lt;td&gt;16:46&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;08 окт&lt;/td&gt;
          &lt;td&gt;12.0&lt;/td&gt;
          &lt;td&gt;160&lt;/td&gt;
          &lt;td&gt;1080&lt;/td&gt;
          &lt;td&gt;06:34/03:22&lt;/td&gt;
          &lt;td&gt;1.8/3.6&lt;/td&gt;
          &lt;td&gt;10:30&lt;/td&gt;
          &lt;td&gt;17:04&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;strong&gt;22.7&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;1190&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;1165&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;&amp;mdash;&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;&amp;mdash;&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;&amp;mdash;&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;&amp;mdash;&lt;/strong&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Профиль:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2023/10/09/regular_chitinza_2023/files/profile.png&#34; alt=&#34;profile&#34;&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>mdns vs libmicrodns</title>
      <link>https://htrd.su/blog/2023/10/02/mdns-vs-libmicrodns/</link>
      <pubDate>Mon, 02 Oct 2023 21:23:01 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2023/10/02/mdns-vs-libmicrodns/</guid>
      <description>&lt;p&gt;Потребовалось сделать в приложении анонсирование и поиск себе подобных. Причём без завязки на системный Avahi.&lt;/p&gt;
&lt;p&gt;Выбор пал на три реализации mDNS/DNS-SD:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://github.com/apple-oss-distributions/mDNSResponder&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;mDNSResponder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://github.com/videolabs/libmicrodns/tree/master&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;libmicrodns&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;и 
&lt;a href=&#34;https://github.com/mjansson/mdns/tree/main&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;mdns&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Первый отбросил из рассмотрения, так как показался слишком переусложнённым. Потом пошёл смотреть на libmicrodns - получилось собрать прототип очень быстро - мало кода. Но&amp;hellip; жирный крест поставило то, что они до сих пор не исправили косяк, что нужно JOIN TO GROUP делать. Без этого анонсирование работает нормально, а вот запросы/поиск будет только на неком дефолтном, первом интерфейсе.&lt;/p&gt;
&lt;p&gt;Пошёл на mdns. Для интеграции нужно больше кода, но почти весь можно как есть взять из примера mdns.c, библиотека без внутренних аллокаций. И очень неплохо дружится с внешними event-loop&amp;rsquo;ами, будь то libev или asio.&lt;/p&gt;
&lt;p&gt;В общем, мой выбор - mdns.&lt;/p&gt;
&lt;p&gt;А под катом - небольшая табличка сравнительная. Жирным - критерий преобладающий над соперником. Если ничто не выделено - нет приоритета.&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Критерий&lt;/th&gt;
          &lt;th&gt;libmicrodns&lt;/th&gt;
          &lt;th&gt;mdns&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;Лицензия&lt;/td&gt;
          &lt;td&gt;LGPL v2.1&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;Public Domain&lt;/strong&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Уровень входа&lt;/td&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;/td&gt;
          &lt;td&gt;нет&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;да&lt;/strong&gt; (**)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Поиск на всех интерфейсах&lt;/td&gt;
          &lt;td&gt;нет (***)&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;да&lt;/strong&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Внутренние аллокации&lt;/td&gt;
          &lt;td&gt;да&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;нет&lt;/strong&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Header-only&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;ul&gt;
&lt;li&gt;(*) код берётся из примера и в целом, вполне себе пишется один раз и используется на остальных проектах. Плюс колбеки с очень развесистым набором аргументов.&lt;/li&gt;
&lt;li&gt;(**) возвращается &lt;code&gt;int&lt;/code&gt; непосредственно полученный от вызова &lt;code&gt;socket()&lt;/code&gt;, что на том же Windows выглядит как &lt;code&gt;SOCKET&lt;/code&gt;, и он же - &lt;code&gt;HANDLE&lt;/code&gt;, плюс включенный флаг &lt;code&gt;**WSA_FLAG_OVERLAPPED**&lt;/code&gt;, и как следствие на том же Boost.Asio / Asio его вполне можно завернуть в UDP сокет для асинхронной обработки:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;asio&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ip&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;udp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;socket&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sock&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ioctx&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;asio&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ip&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;udp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;v4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mdns_socket_open_ipv4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sock_addr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;asio&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ip&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;udp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;socket&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sock&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ioctx&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;asio&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ip&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;udp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;v6&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mdns_socket_open_ipv6&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sock_addr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://learn.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-socket&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://learn.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-socket&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://learn.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-wsasocketa&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://learn.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-wsasocketa&lt;/a&gt;
libmicrodns только в треде запускать и слушать запросы.&lt;/li&gt;
&lt;li&gt;(***) они почему-то не делают &lt;code&gt;IP_MULTICAST_IF&lt;/code&gt;, хотя баги с прослушиванием все интерфейсов у них были, и вроде как закрыты.&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Временные метки на файловых системах</title>
      <link>https://htrd.su/blog/2023/09/06/filesystem-time-marks/</link>
      <pubDate>Wed, 06 Sep 2023 15:13:58 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2023/09/06/filesystem-time-marks/</guid>
      <description>&lt;p&gt;Короткая заметка и ссылки. Возможно потом дополню информацией о разрешении (resolution) временных меток.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;FAT/FAT32
&lt;ul&gt;
&lt;li&gt;Хранит локальное время, без указания Timezone. Поменяешь в системе зону - время создания файлов останется без изменений. Т.е. нужно помнить в какой ТЗ они создавались.&lt;/li&gt;
&lt;li&gt;Windows сохраняет вот прям вот локальное время&lt;/li&gt;
&lt;li&gt;Linux добавляет час, при переводе часов&lt;/li&gt;
&lt;li&gt;timestamp:
&lt;ul&gt;
&lt;li&gt;дата 16 битное число: 7 бит - год, 4 бита - месяца, 5 бит - день. Год в диапазоне 1980-2107.&lt;/li&gt;
&lt;li&gt;время 16 битное число для часов, минут, секунд&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;exFAT:
&lt;ul&gt;
&lt;li&gt;Время хранится локальное. Но есть нюанс.&lt;/li&gt;
&lt;li&gt;Временная зона хранится в 1 байте. Vista SP1 не использует его. Что бы нормально жилось, старший бит сигнализирует - применять или нет смещение зоны. 0 - не применять. 1 - применять. Остальные 7 бит - 15минутные интервалы для смещения. Положительное направление - на восток.&lt;/li&gt;
&lt;li&gt;Т.е. если бит 7 в TZ поднят, то система будет пересчитывать время файла в UTC, что бы корректно отобразить в системе при смене часового пояса. Эдакая обратная совместимость.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;NTFS
&lt;ul&gt;
&lt;li&gt;Время хранится в UTC&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;EXTx (EXT2/3/4)
&lt;ul&gt;
&lt;li&gt;Время хранится в UTC&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;полезные-ссылки&#34;&gt;Полезные ссылки&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.pascal-hacker.de/info/it/sw/dst.htm&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Windows and Unix/Linux handle the effect of DST (daylight saving time) on time stamps differently&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;NTFS&lt;/li&gt;
&lt;li&gt;FAT/FAT32&lt;/li&gt;
&lt;li&gt;EXT2&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://superuser.com/questions/1460328/does-the-filesystem-windows-is-installed-on-have-an-effect-on-the-time-zone-sett&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Does the filesystem windows is installed on have an effect on the time zone settings of timestamps within windows registry hives?&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;FAT64/exFAT&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://www.sans.org/blog/exfat-file-system-time-zone-concerns/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;exFAT File System Time Zone Concerns&lt;/a&gt; - смотреть через Tor
&lt;ul&gt;
&lt;li&gt;exFAT&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://elm-chan.org/docs/exfat_e.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;exFAT Filesystem&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Похоже, что таки время локальное. Но TZ offset хранит зону, и можно посчитать UTC&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CreateTZOffset&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Исходники Linux 5.7+ - есть нативная реализация exFAT.&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>QtC: снова про отображение всех файлов в стоковом плагине CMake</title>
      <link>https://htrd.su/blog/2023/08/18/qtc-other-files-helper/</link>
      <pubDate>Fri, 18 Aug 2023 13:05:29 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2023/08/18/qtc-other-files-helper/</guid>
      <description>&lt;p&gt;Это логическое продолжение 
&lt;a href=&#34;https://htrd.su/blog/2017/01/18/qt_creator_cmake_otobrazhenie_vsex_fajlov_v_stokovom_plagine/&#34;&gt;этого&lt;/a&gt; с учётом 
&lt;a href=&#34;https://htrd.su/blog/2023/05/04/qtcreator-cmake-parser/&#34;&gt;нововвидений по добавлению файлов&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Весь &amp;ldquo;код&amp;rdquo; разместил на GitHub: &lt;strong&gt;
&lt;a href=&#34;https://github.com/h4tr3d/qtc-other-files-helper&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;qtc-other-files-helper&lt;/a&gt;&lt;/strong&gt;. Там же есть и детальное описание.&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;/li&gt;
&lt;li&gt;Не используется &lt;code&gt;CMAKE_TOOLCHAIN_FILE&lt;/code&gt;, вместо него - &lt;code&gt;CMAKE_PROJECT_INCLUDE&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Доработано решение для использования как на уровне per-project, так и глобально, на уровне Kit. Но бросить файлик второй в директорию с проектом всё равно нужно будет.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Из косяков:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;При добавлении файлов, QtC стремиться создать новую запись &lt;code&gt;target_sources()&lt;/code&gt; в CMakeLists.txt верхнего уровня. Приходится вручную вырезать и вставлять в qtc-other-files.cmake&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ну и в старом способе была проблема, что эти файлы попадали в кодовую модель и мешали парсеру. Детально не разбирался в новых реалиях.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Водопады Березняк и Маруськины слёзы</title>
      <link>https://htrd.su/blog/2023/07/23/waterflows-bereznyak-maruskiny-szlezy/</link>
      <pubDate>Sun, 23 Jul 2023 22:22:40 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2023/07/23/waterflows-bereznyak-maruskiny-szlezy/</guid>
      <description>&lt;p&gt;На выходных, 22-23 июня 2023, отлично прогулялись с сыном по двум водопадам у подножия хр.Большой Воробей: Березняк и Маруськины слёзы.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2023/07/23/waterflows-bereznyak-maruskiny-szlezy/files/map.jpg&#34; alt=&#34;map.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;Сводка:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;День&lt;/th&gt;
          &lt;th&gt;Протопали,&lt;br/&gt;км&lt;/th&gt;
          &lt;th&gt;Набор высоты,&lt;br/&gt;м&lt;/th&gt;
          &lt;th&gt;Сброс высоты,&lt;br/&gt;м&lt;/th&gt;
          &lt;th&gt;Время/в движении,&lt;br/&gt;ч&lt;/th&gt;
          &lt;th&gt;Скорость/в движении,&lt;br/&gt;&lt;/th&gt;
          &lt;th&gt;Начало движения,&lt;br/&gt;ч&lt;/th&gt;
          &lt;th&gt;Конец движения,&lt;br/&gt;ч&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;22 июня&lt;/td&gt;
          &lt;td&gt;10.4&lt;/td&gt;
          &lt;td&gt;505&lt;/td&gt;
          &lt;td&gt;295&lt;/td&gt;
          &lt;td&gt;08:58/04:19&lt;/td&gt;
          &lt;td&gt;1.2/2.4&lt;/td&gt;
          &lt;td&gt;10:13&lt;/td&gt;
          &lt;td&gt;19:11&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;23 июня&lt;/td&gt;
          &lt;td&gt;7.72&lt;/td&gt;
          &lt;td&gt;20&lt;/td&gt;
          &lt;td&gt;320&lt;/td&gt;
          &lt;td&gt;03:35/02:19&lt;/td&gt;
          &lt;td&gt;2.2/3.3&lt;/td&gt;
          &lt;td&gt;10:53&lt;/td&gt;
          &lt;td&gt;14:27&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;strong&gt;18.12&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;525&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;615&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;&amp;mdash;&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;&amp;mdash;&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;&amp;mdash;&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;&amp;mdash;&lt;/strong&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Профиль:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2023/07/23/waterflows-bereznyak-maruskiny-szlezy/files/profile.png&#34; alt=&#34;profile&#34;&gt;&lt;/p&gt;
&lt;p&gt;Основная идея была, это выгулять новый рюкзак Deuter Alpamayo 110+15, посмотреть водопады, на которые в обычных условиях и не собрался сходить, а с сыном - вполне.&lt;/p&gt;
&lt;p&gt;Так же подумал, что нужно попробовать сходить на кипятке: не готовить еду, а запаривать, разогревать либо варить малое время. Ну и опробовать FireMaple Polaris X5 в более-менее реальных условиях. И мне понравилось! На обед 3 минуты варки яичной лапши (&amp;ldquo;гнёзда&amp;rdquo;) совместно с &amp;ldquo;сырным&amp;rdquo; соусом магги плюс тушняк от Кронидов, на ужин - просто разогрели два борща от того же Кронидов и на завтрак - запарили кашу 5 злаков (там варить нужно 3 минуты, но по факту она распаривается за 7-8 минут). Быстро, вкусно, газа на двоих (чай включая) - 61 грамм. Будем дальше совершенствоваться в этом направлении :) Был запланирован и обед из рисовых хлопьев с рыбной консервой, но подъели остатки перекуса и на этом остановились - электричка в 14:45, не успели проголодаться обстоятельно.&lt;/p&gt;
&lt;h2 id=&#34;по-впечатлениям&#34;&gt;По впечатлениям&lt;/h2&gt;
&lt;p&gt;Сынище молодец, оттопал своё на 5 с плюсом, но попросил без троп пока не водить. Да, ему не нравились некоторые моменты, но объективно, они и мне были не по нраву, если сравнивать с движением по хорошей тропе :) Но выдержал стойко. И это при том, что рюкзак у него крайне неудобный для длительной переноски чего-то тяжелее зубной щётки с пастой. Теперь нужно придумать ему рюкзак, что бы по росту подошёл и в негодность через год не пришёл.&lt;/p&gt;
&lt;p&gt;Далее, вредителям из всяких OpenStreetMap - нефиг наносить непроверенные треки: от хребта на Туманную, по имеющимся отмеченным тропам, этих троп нет. Нужно было подняться повыше чуток и там по гребню спускаться начать. Не подумал сразу. К слову, на карте выше видны коричневые &amp;ldquo;треки&amp;rdquo; - это тепловая карта (heat map) Strava (
&lt;a href=&#34;https://www.strava.com/heatmap%29&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://www.strava.com/heatmap)&lt;/a&gt;, от тех, кто туда загружает свои переходы, удобно ориентироваться при планировании движения, там где троп не обозначено, но места ходибельные. Если места не ходибельные и тропы не обозначены, то упс. По старинке: по описаниям или в лоб. В общем, в этот раз я как-то не воспользовался этой информацией, а зря.&lt;/p&gt;
&lt;p&gt;Тропа на Березняк такое себе. Иногда не очевидно, куда идти. Точнее, в начале это даже не тропа, а вполне себе дорога, до тех пор, пока не доходишь до места, где её перемыло рекой, образовав эдакий прижим - продираться неприятно. Потом дорога переходит в тропу, которая уже слабо читается. Много ванн, где можно искупаться, но идти туда только для этого - глупо, а по пути вместе с вершиной - большой крюк. Зимой ходили - туда сильно натоптано было.&lt;/p&gt;
&lt;p&gt;От Березняка решили не возвращаться обратно, а траверснуть склон до хребта и выйти к месту, где вроде как обещали прямую тропу на Маруськины слёзы. Всего что-то около 1-1.5 км. Первая треть пути вполне себе ходительная, потом треть много кущей и бурелома, который обходить нужно. Ребёнку было тяжело, но просто останавливались почаще, отдыхали.&lt;/p&gt;
&lt;p&gt;От хребта как-то тоже тропы не оказалось, хотя была отметка в её начале. Но да фиг с ней - под уклон, будет легче. Прошли достаточно быстро. Вышли на отходящий хребет и там уже появилась тропа (и судя по тепловой карте - по ней часто ходят) и тропа вниз на водопад ясная и чёткая. Большую часть пути прошли за 20 минут.&lt;/p&gt;
&lt;p&gt;Маруськины слёзы оказался достаточно симпатичным водопадом. По крайней мере сыну он понравился больше. Возможно тем, что тропа там отличная и по кущам пробираться не нужно. Сразу изъявил желание повторить и сходить ещё. Как минимум, утром, перед выходом, попросился сходить туда же. Благо место для лагеря оказалось всего в, примерно, 500 метрах от него. Чуть ниже водопада - хорошая чаша для купания. Если строить маршрут с горы по хребту, образующему водораздел между ручьями Хвощевый (на котором водопад Маруськины слёзы) и Партизанский (на нём водопад Березняк), не в сторону 82км, а в Анисимовку, то можно искупаться почти по пути. Если спускаться в Анисомовку по хребту от метостанции, то зайти можно, сделав небольшой крюк. Но нужно заложить время на дополнительные 1.5км. Но оба варианта более длинные, в плане подходов, относительно выхода на 82км.&lt;/p&gt;
&lt;p&gt;На обратном пути нашли след тигра.&lt;/p&gt;
&lt;p&gt;Рюкзак показался огромным. У меня до него был рюкзак от NovaTour на 110л, по идее, такой же как и этот, и Акме-Normal Улисс 100, так вот, он явно больше NovaTour, несмотря на то, что объём базовый заявлен один и явно больше чем на 10л превышает объём Улисс 100. У меня туда залетело (основной объём) и даже не потребовало развёртывания тубуса:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Два коврика Therm-a-rest Z-Lite SOL&lt;/li&gt;
&lt;li&gt;Два спальника: один летний Loap (
&lt;a href=&#34;https://www.loap-sport.cz&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;www.loap-sport.cz&lt;/a&gt;, 
&lt;a href=&#34;https://www.loap.cz&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;www.loap.cz&lt;/a&gt;) Classic на +5 и потрёпанный Гарип -9 от Сиверы&lt;/li&gt;
&lt;li&gt;Еда на двоих и перекусы&lt;/li&gt;
&lt;li&gt;Запасная одежда на вечер/ночь, мембранка&lt;/li&gt;
&lt;li&gt;Палатку (Luxe Spider 2) тоже можно было спрятать во внутрь&lt;/li&gt;
&lt;li&gt;Сапоги для ребёнка&lt;/li&gt;
&lt;li&gt;FireMaple X5&lt;/li&gt;
&lt;li&gt;и ещё всякой мелочи, типа костровых перчаток, ремкомплекта, комплекта посуды на двоих, фляжка на 1л (и вторая в клапане)
Подвес же показался удобным. Попробуем ещё попользоваться и посмотрим, что да как.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;фото-трек&#34;&gt;Фото, трек&lt;/h2&gt;
&lt;p&gt;На Yandex Disk (показометрам путевого компьютера веры нет):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://disk.yandex.ru/a/H2_llWBHb0uYOA&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://disk.yandex.ru/a/H2_llWBHb0uYOA&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Трек и точки:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;files/wtrfl-bereznyak-and-maruskiny-slezy.gpx&#34;&gt;wtrfl-bereznyak-and-maruskiny-slezy.gpx&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>ArchLinux: получение исходников системного пакета</title>
      <link>https://htrd.su/blog/2023/06/23/archlinux-get-package-sources/</link>
      <pubDate>Fri, 23 Jun 2023 11:47:18 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2023/06/23/archlinux-get-package-sources/</guid>
      <description>&lt;p&gt;Как обычно в мемориз.&lt;/p&gt;
&lt;p&gt;Раньше был тул &lt;code&gt;abs&lt;/code&gt;, потом вся структура мигрировала на Git. Теперь что бы получить пакет нужен тул 
&lt;a href=&#34;https://github.com/falconindy/asp&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Arch Build Source Management Tool&lt;/a&gt;или коротко - &lt;code&gt;asp&lt;/code&gt;.  Не путать с 
&lt;a href=&#34;https://ru.wikipedia.org/wiki/ASPLinux&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;ASPLinux&lt;/a&gt;&amp;hellip; Да был когда-то такой.&lt;/p&gt;
&lt;p&gt;Ставится:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo pacman -S asp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Получить PKGBUILD:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;asp checkout PKGNAME
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;или:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;asp &lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; PKGNAME
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Например:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;asp checkout kdiff3
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Далее работам как обычно с PKGBUILD: &lt;code&gt;makepkg&lt;/code&gt; с полезными опциями. Сам спек правим по необходимости.&lt;/p&gt;
&lt;p&gt;На чистом Arch Linux ещё есть пакет 
&lt;a href=&#34;https://archlinux.org/packages/extra/any/devtools/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;devtools&lt;/a&gt;, который содержит тул &lt;code&gt;pkgctl&lt;/code&gt;, который позволяет достичь той же цели: получить PKGBUILD для сборки:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pkgctl repo clone PKGNAME
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;На производных, типа Manjaro (мой случай) этого тула может не быть. А вот 
&lt;a href=&#34;https://archlinux.org/packages/extra/any/asp/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;code&gt;asp&lt;/code&gt;&lt;/a&gt; - 
&lt;a href=&#34;https://software.manjaro.org/package/asp&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;есть&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Полезные ссылки:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;a href=&#34;https://wiki.archlinux.org/title/Arch_build_system&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Arch Build System&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description>
    </item>
    
    <item>
      <title>Qt Creator &amp; CMake: завезли добавление/удаление/переименование файлов</title>
      <link>https://htrd.su/blog/2023/05/04/qtcreator-cmake-parser/</link>
      <pubDate>Thu, 04 May 2023 12:05:33 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2023/05/04/qtcreator-cmake-parser/</guid>
      <description>&lt;p&gt;Итак, обновляю свой 
&lt;a href=&#34;https://github.com/h4tr3d/cmakeprojectmanager2&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;CMakeProjectManager2&lt;/a&gt; и что я вижу:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;71eb0ab9f8e98df9bd021c1c49d7ec00a66492cb&lt;/code&gt; - завезли парсер CMake в стоковый плагин.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;d41365610ff80478d8c6c2812299d95d139561ec&lt;/code&gt; - его интегрировали в билд.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;d8be2491a5f5cfdc512f63c766a550dd43694063&lt;/code&gt; / 13 апреля 2023 - реализовали добавление новых и существующих файлов к таргету, причём файл пытается добавляться прямо в CMakeLists.txt: файл будет добавлен последним элементов к соответствующей &amp;ldquo;well-known&amp;rdquo; функции (они захардкожены) типа &lt;code&gt;add_executable()&lt;/code&gt;, &lt;code&gt;add_library()&lt;/code&gt;, &lt;code&gt;qt_add_executable()&lt;/code&gt;, &lt;code&gt;qt_add_library()&lt;/code&gt;, &lt;code&gt;qt6_add_executable()&lt;/code&gt;, &lt;code&gt;qt6_add_library()&lt;/code&gt;. Для кастомных функций будет добавлен вызов &lt;code&gt;target_sources()&lt;/code&gt;, что тоже неплохо. Уже можно начинать пользоваться.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;039baab6e70160bc8130ef95e499141f7c875225&lt;/code&gt; / 20 апреля 2023 - реализовали вышеперечисленное для QtQuick проектов, в список &amp;ldquo;well-known&amp;rdquo; функций добавились: &lt;code&gt;qt_add_qml_module()&lt;/code&gt;, &lt;code&gt;qt6_add_qml_module()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;54af6bd5b3f5ba5e3396f5cb9eb539f198abafff&lt;/code&gt; / 21 апреля 2023 - разрешили переименовывать файлы. Работает как для явно указанных файлов, так и для добавленных через &lt;code&gt;file(GLOB|GLOB_RECOURSE)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;411b2e05b8ac4442d1ef179381dc7c37492ab37b&lt;/code&gt; / 24 апреля 2023 - разрешили удалять файлы.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;5c2b2966e78129dcbd220e35e15f6278a1b3d05d&lt;/code&gt; / 27 апреля 2023 - разрешили добавлять существующую директорию. Пока, как я понял, добавляются все файлы, а не &lt;code&gt;add_subdirectory()&lt;/code&gt;. Что, по мне, более логично: все операции target-ориентированные.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;874b1133d9cfaef179851aa925b7d6b96e85019b&lt;/code&gt; / 26 апреля 2023 - пофиксили удаление и переименование, что бы  оно срабатывало и с файлами, которые указываются через переменные для таргета.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ну и пачка мелких фиксов.&lt;/p&gt;
&lt;p&gt;На текущий момент, меня огорчает отсутствие вывода всех файлов их проектной директории (например, README.md или скрипты вспомогательные, которые вполне можно редактировать в QtC), но уже можно начинать пытаться нормально работать.&lt;/p&gt;
&lt;p&gt;Собственно в рамках CMakeProjectManager2 я теперь попытаюсь реализовать возможность отобразить всех файлов, по аналогии с текущей реализацией и подключить добавление файлов из апстрима.&lt;/p&gt;
&lt;p&gt;А вообще, тенденция к тому, что CMakeProjectManager2 можно будет выкинуть меня радует!&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>[C&#43;&#43;] std::tie() и range for</title>
      <link>https://htrd.su/blog/2023/04/14/cxx_std_tie_and_range_for/</link>
      <pubDate>Fri, 14 Apr 2023 10:52:03 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2023/04/14/cxx_std_tie_and_range_for/</guid>
      <description>&lt;p&gt;Сегодня мне не хватило такого (C++20):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tie&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;m_imageWidth&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;m_imageHeigth&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sizes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Пришлось так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;nl&#34;&gt;size&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sizes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tie&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;m_imageWidth&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;m_imageHeigth&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Display Technology Information Repository and Utilities</title>
      <link>https://htrd.su/blog/2023/03/31/display-technology-information-repository-and-utilities/</link>
      <pubDate>Fri, 31 Mar 2023 11:55:53 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2023/03/31/display-technology-information-repository-and-utilities/</guid>
      <description>&lt;p&gt;В мемориз:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://glenwing.github.io/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://glenwing.github.io/&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://github.com/Glenwing/glenwing.github.io&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/Glenwing/glenwing.github.io&lt;/a&gt; - репозиторий сайта: можно запустить локально хоть через встроенный в Python WEB сервер: &lt;code&gt;python -m http.server 9000&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Подборка полезный утилит и стандартов связанных с дисплеями: HDMI, DP:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://glenwing.github.io/docs/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://glenwing.github.io/docs/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;К сожалению, свежие стандарты HDMI 2.0, 2.1 чувака заставили удалить из публичного доступа (почитайте письмо, которое ему написали).&lt;/p&gt;
&lt;p&gt;Помимо этого есть спеки ITU/BT - там можно поискать коэффициенты RGB-YUV конвертаций для различных режимов (Rev.601 vs Rec.709 vs BT.2020, а вот про BT.2100 я уже не слышал) - бывает полезно (наипался, когда программировали матричный pCSC).&lt;/p&gt;
&lt;p&gt;Офигенный раздел по кабелям и переходникам:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://glenwing.github.io/adapters/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://glenwing.github.io/adapters/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;и его &amp;ldquo;продакшн&amp;rdquo; версия:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://linustechtips.com/topic/729232-guide-to-display-cables-adapters-v2/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://linustechtips.com/topic/729232-guide-to-display-cables-adapters-v2/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Так же раздел, для расчёта параметров монитора (например, DPI) по разрешению и диагонали:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://glenwing.github.io/diu/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://glenwing.github.io/diu/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Online Tone Generator</title>
      <link>https://htrd.su/blog/2023/03/31/online-tone-generator/</link>
      <pubDate>Fri, 31 Mar 2023 11:28:10 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2023/03/31/online-tone-generator/</guid>
      <description>&lt;p&gt;В мемориз.&lt;/p&gt;
&lt;p&gt;Предыстория: досталась Б/У &amp;ldquo;железная&amp;rdquo; дорога Tomica (японческий оригинал), а там оказался один локомотив, у которого два варианта управления:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Пультом&lt;/li&gt;
&lt;li&gt;Свистком&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Пульта, понятное дело, не нашлось. Изучая логотип свистка и помедитировав на картинки с этим локомотивом, где изображён этот самый свисток, сначала своим свистом попытался запустить, что через минут 15 удалось&amp;hellip; Представьте себе картину маслом: сидит взрослый человек, и свистит на игрушечный тепловоз. Понравилось? :)&lt;/p&gt;
&lt;p&gt;А потом решил поискать какой-то генератор тона, что бы  более точно подобрать частоту.&lt;/p&gt;
&lt;p&gt;Собственно в мемориз:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://www.szynalski.com/tone-generator/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Online Tone Generator&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Thinkpad P15 Gen2: ноутбук не уходит в сон и фризится lspci при питании от батареи</title>
      <link>https://htrd.su/blog/2023/03/25/thinkpad_p15_gen2_suspend_fail_and_lspci_freeze_on_battery_power/</link>
      <pubDate>Sat, 25 Mar 2023 16:35:46 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2023/03/25/thinkpad_p15_gen2_suspend_fail_and_lspci_freeze_on_battery_power/</guid>
      <description>&lt;p&gt;&lt;strong&gt;Проблема:&lt;/strong&gt; при питании от батареи, время от времени не можем уйти в сон. После чего наблюдаем:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;фриз при вызове lspci&lt;/li&gt;
&lt;li&gt;фриз при попытке сделать sudo&lt;/li&gt;
&lt;li&gt;фриз при попытке перегрузиться или выключиться&lt;/li&gt;
&lt;li&gt;фриз при запуске sddm, если включаться на батарее&lt;/li&gt;
&lt;li&gt;100% и стабильное воспроизведение при запуске &lt;code&gt;sudo powertop&lt;/code&gt;, и тоже фриз&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Мне удачно попалось это обсуждение на askubuntu.com: 
&lt;a href=&#34;https://askubuntu.com/a/1012993/483004&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;What to do when lspci and hwinfo freeze the system?&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Если коротко: причина оказалась в PCIe: при питании на батарее или с выключенным &lt;code&gt;acpi=off&lt;/code&gt; сохраняем список устройств:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;lspci &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; awk &lt;span class=&#34;s1&#34;&gt;&amp;#39;{print $1}&amp;#39;&lt;/span&gt; &amp;gt; pci_ids.txt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;А потом на проблемной конфигурации (например, после вызова &lt;code&gt;sudo powertop&lt;/code&gt; на соседнем терминале), сделать последовательный опрос устройств:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; i in &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;cat pci_ids.txt&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;do&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34; * CHECKING &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;lspci -s &lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;У меня свалилось на:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;0b:00.0&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Коим является:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;0b:00.0 Ethernet controller: Intel Corporation Ethernet Controller I225-V (rev 03)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Т.е. прблема с:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;модулем &lt;code&gt;igc&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;сетевой картой Intel.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Уже более обстоятельный поиск привёл к:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://lore.kernel.org/netdev/20230316105526.GH1005120@linux.vnet.ibm.com/T/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;igc driver causes suspend to fail if powersave is enabled&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Там как раз более детальное описание проблемы (без конкретного решения):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ноут тоже Thinkpad P15 Gen2&lt;/li&gt;
&lt;li&gt;Карта та же&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ключевое:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I finally found that the problem was because enabling auto or powersave on ethernet card was causing this issue. i.e&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;auto&amp;#39;&lt;/span&gt; &amp;gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;/sys/bus/pci/devices/0000:0b:00.0/power/control&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;p&gt;Отсюда и возможный WA: не включать автоматическое управление питанием для этого устройства. А вот автоматическое управление включает у меня - 
&lt;a href=&#34;https://wiki.archlinux.org/title/TLP&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;tlp&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;И им же можно запретить это делать. Создаём файл &lt;code&gt;/etc/tlp.d/00-pcie-pm.conf&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# Disalbe Ethernet card:  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;RUNTIME_PM_DISABLE+=&amp;#34;0b:00.0&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;И рестартуем tlp.&lt;/p&gt;
&lt;p&gt;Понятно, что на энергопотребление скажется негативно, но жить без сна - это не жизнь. К сожалению переписка выше ни к чему толковому не ведёт. А проблема наблюдается в т.ч. на ядре 6.2.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>ArchLinux: сохранение модулей текущего ядра при обновлении</title>
      <link>https://htrd.su/blog/2023/03/19/backup_current_kernel_modules_on_update/</link>
      <pubDate>Sun, 19 Mar 2023 17:42:40 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2023/03/19/backup_current_kernel_modules_on_update/</guid>
      <description>&lt;p&gt;&lt;strong&gt;Проблема:&lt;/strong&gt; когда мы в ArchLinux и производных дистрибутивах обновляем ядро и если поменялась минорная цифра сменилась, то меняется и директория для модулей, а старая удаляется. В результате чего после обновления вы или сразу должны перезагрузиться с новым ядром или получать эпичные глюки: флешка там не примонтируется или ещё чего.&lt;/p&gt;
&lt;p&gt;Очевидное решение: временно сохранить текущую диреторию для ядра. Почистить потом можно, на загрузке, к примеру.&lt;/p&gt;
&lt;p&gt;Решение ниже - хуки для pacman, которое это делают.&lt;/p&gt;
&lt;p&gt;Сами хуки, их два.&lt;/p&gt;
&lt;p&gt;Первый, &lt;code&gt;/etc/pacman/hooks/backup-current-kernel-modules-post.hook&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[Trigger]  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Type = Package  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Operation = Upgrade  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Target = linux[0-9]*  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[Action]  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Description = Kernel update detected. Restore current Kernel modules from backup  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Depends = rsync  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;When = PostTransaction  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Exec = /home/hatred/bin/pacman-backup-current-kernel-modules post
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Второй, &lt;code&gt;/etc/pacman/hooks/backup-current-kernel-modules-pre.hook&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[Trigger]  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Type = Package  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Operation = Upgrade  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Target = linux[0-9]*  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[Action]  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Description = Kernel update detected. Backup current Kernel modules  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Depends = rsync  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;When = PreTransaction  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Exec = /home/hatred/bin/pacman-backup-current-kernel-modules pre
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ну и сам скрипт, &lt;code&gt;/home/hatred/bin/pacman-backup-current-kernel-modules&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#!/usr/bin/env bash  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# man pacman-hooks  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# TBD: detect suffix automatically  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;suffix&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;-MANJARO&amp;#34;&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;mods&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/lib/modules&amp;#34;&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;ver&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;uname -r&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;orig&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$mods&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$ver&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;backup&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$mods&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/backup-&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$ver&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Useful for clean-up on startup  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;flag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;.htrd-backup-current-kernel-modules&amp;#34;&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# YES/NO, case is a matter  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#actual_clean=&amp;#34;NO&amp;#34;  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;backup&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   rsync -a &lt;span class=&#34;nv&#34;&gt;$orig&lt;/span&gt;/ &lt;span class=&#34;nv&#34;&gt;$backup&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   touch &lt;span class=&#34;nv&#34;&gt;$backup&lt;/span&gt;/&lt;span class=&#34;nv&#34;&gt;$flag&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;restore&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   rsync -a &lt;span class=&#34;nv&#34;&gt;$backup&lt;/span&gt;/ &lt;span class=&#34;nv&#34;&gt;$orig&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   depmod -aA  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;clean&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;installed&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;pacman -Q &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep &lt;span class=&#34;s1&#34;&gt;&amp;#39;^linux[0-9]\+ &amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; awk &lt;span class=&#34;s1&#34;&gt;&amp;#39;{print $2}&amp;#39;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;old&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;ls /lib/modules/*/&lt;span class=&#34;nv&#34;&gt;$flag&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs -I&lt;span class=&#34;o&#34;&gt;{}&lt;/span&gt; dirname &lt;span class=&#34;o&#34;&gt;{}&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs -I&lt;span class=&#34;o&#34;&gt;{}&lt;/span&gt; basename &lt;span class=&#34;o&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; dir in &lt;span class=&#34;nv&#34;&gt;$old&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;ver_only&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;basename &lt;span class=&#34;nv&#34;&gt;$dir&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$suffix&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt; ! &lt;span class=&#34;s2&#34;&gt;&amp;#34; &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;installed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[*]&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; &amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;~ &lt;span class=&#34;s2&#34;&gt;&amp;#34; &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;ver_only&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; &amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Directory flagged as backup and not found in installed, remove: &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$dir&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$actual_clean&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;YES&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;               &lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;               &lt;span class=&#34;c1&#34;&gt;#rm -rf &amp;#34;$mods/$dir&amp;#34;  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; in  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   pre&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       backup  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   post&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       restore  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   clean&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       clean  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;esac&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;С параметром &lt;code&gt;clean&lt;/code&gt; его вызвать можно на старте, например, из &lt;code&gt;/etc/rc.local&lt;/code&gt; (
&lt;a href=&#34;https://aur.archlinux.org/packages/rc-local&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;rc-local&lt;/a&gt;).&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>dmesg wheel group access</title>
      <link>https://htrd.su/blog/2023/03/19/dmesg_wheel_group_access/</link>
      <pubDate>Sun, 19 Mar 2023 17:35:38 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2023/03/19/dmesg_wheel_group_access/</guid>
      <description>&lt;p&gt;На системах с ядром 5.10.4+ dmesg доступен только для root. Делаем его доступным и для группы wheel и, по необходимости, добавляем туда пользователей. К слову, если не уверены, лучше не делайте. Мне в dmesg нужно очень часто во время разработки лезть. Можно в терминале запускать сессию от другого пользователя без привилегий, но в группе wheel:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir -p /etc/pacman/hooks
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat &amp;gt; /etc/pacman/hooks/10-dmesg-wheel-access.hook &lt;span class=&#34;s&#34;&gt;&amp;lt;&amp;lt; EOF
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;[Trigger]  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;Operation = Upgrade  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;Type = Package  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;Target = util-linux  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;[Action]  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;Description = Allow dmesg wheel access...  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;When = PostTransaction  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;Exec = /bin/sh -c &amp;#39;/usr/bin/chown root:wheel /usr/bin/dmesg ; /usr/bin/chmod 750 /usr/bin/dmesg ; /usr/bin/setcap cap_syslog=ep /usr/bin/dmesg&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;EOF&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Thinkpad P15 Gen2: LEDs</title>
      <link>https://htrd.su/blog/2023/03/19/thinkpad_p15_gen2_leds/</link>
      <pubDate>Sun, 19 Mar 2023 14:08:34 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2023/03/19/thinkpad_p15_gen2_leds/</guid>
      <description>&lt;p&gt;А оказывается, что почти всеми (скорее вообще всеми) LED, которые присутствуют на этом лаптопе можно управлять через sysfs:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ ls /sys/devices/platform/thinkpad_acpi/leds/ -1  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;platform::micmute  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;platform::mute  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tpacpi::kbd_backlight  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tpacpi::lid_logo_dot  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tpacpi::power  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tpacpi::standby  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tpacpi::thinklight  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tpacpi::thinkvantage
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Основные контрольные файлы:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;brightness&lt;/code&gt; - собственно для включения или выключения: 0 - выключить. Максимальное значение зависит от следующего параметра.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;max_brightness&lt;/code&gt; - максимальное значение для предыдущего параметра. Если 1, то LED работает как On/Off. Если отличное, то поддерживается установка яркости: максимальное значение - максимальная яркость.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;trigger&lt;/code&gt; - можно задать системный триггер, который будет управлять этим LED. Типичный пример - активность жёсткого диска. Чтение из файла: список доступных триггеров и выбранный триггер, запись - назначение триггера.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Но вот я ни один LED не смог настроить на системный триггер &lt;code&gt;disk-activity&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;К слову, LED на крешке в букве &lt;code&gt;i&lt;/code&gt; в Thinkpad:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/sys/devices/platform/thinkpad_acpi/leds/tpacpi::lid_logo_dot/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Thinkpad P15 Gen2: отключаем ненужные WakeUp sources</title>
      <link>https://htrd.su/blog/2023/03/19/thinkpad_p15_gen2_disable_wakeup_sources/</link>
      <pubDate>Sun, 19 Mar 2023 13:50:44 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2023/03/19/thinkpad_p15_gen2_disable_wakeup_sources/</guid>
      <description>&lt;p&gt;&lt;strong&gt;Проблема:&lt;/strong&gt; просыпается при шевелинии мышкой Logitech MX Master, Unify receiver подключен в правый USB TypeA порт.&lt;/p&gt;
&lt;p&gt;Старый метод через &lt;code&gt;/proc/acpi/wakeup&lt;/code&gt; работает не для всех устройств:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat /proc/acpi/wakeup &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep enabled &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; awk &lt;span class=&#34;s1&#34;&gt;&amp;#39;{print($1)}&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep -v &lt;span class=&#34;s1&#34;&gt;&amp;#39;SLPB\|LID&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;while&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;read&lt;/span&gt; line&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;do&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$line&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sudo tee&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Читаем:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://wiki.archlinux.org/title/Power_management/Wakeup_triggers&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://wiki.archlinux.org/title/Power_management/Wakeup_triggers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Просканировать прочие устройства:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;find /sys/devices -name &lt;span class=&#34;s1&#34;&gt;&amp;#39;wakeup&amp;#39;&lt;/span&gt; -a -type f &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;while&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;read&lt;/span&gt; line&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;do&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;sts&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;cat &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$line&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$line&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;: &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$sts&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;done&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep enabled
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Сверяемся с выводом &lt;code&gt;cat /proc/acpi/wakeup&lt;/code&gt; на предмет нужных устройств. К примеру, у меня:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0D:00/power/wakeup - LID
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0E:00/power/wakeup - SLPB
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;И выключаем:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;find /sys/devices -name &lt;span class=&#34;s1&#34;&gt;&amp;#39;wakeup&amp;#39;&lt;/span&gt; -a -type f &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep -v &lt;span class=&#34;s1&#34;&gt;&amp;#39;PNP0C0D:00\|PNP0C0E:00&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;while&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;read&lt;/span&gt; line&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;do&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;disabled&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sudo tee &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$line&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Отражение состояния в &lt;code&gt;/proc/acpi/wakeup&lt;/code&gt; тоже будет.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Но есть нюанс:&lt;/strong&gt; устройствам может прилететь change и они могут опять включить этот источник пробуждения. Или &lt;code&gt;/etc/rc.local&lt;/code&gt; вызваться в момент, когда ещё не все устройства проинициализированы.&lt;/p&gt;
&lt;p&gt;Окончательное &amp;ldquo;лечение&amp;rdquo; проблемы: через udev, как по ссылке выше. Для себя я составил такой &lt;code&gt;/etc/udev/rules.d/99-wakeup.rules&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ACTION!=&amp;#34;add|change|bind&amp;#34;, GOTO=&amp;#34;wakeup_disable_end&amp;#34;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# Disable all by default  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;SUBSYSTEM==&amp;#34;*&amp;#34;, ATTR{power/wakeup}==&amp;#34;*&amp;#34;, ATTR{power/wakeup}=&amp;#34;disabled&amp;#34;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# Enable for selected:  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# LID  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#   /sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0D:00  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#DEVPATH==&amp;#34;/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0D:00&amp;#34;, ATTR{power/wakeup}=&amp;#34;enabled&amp;#34;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;KERNEL==&amp;#34;PNP0C0D:00&amp;#34;, ATTR{power/wakeup}=&amp;#34;enabled&amp;#34;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# SLPB  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#   cat /sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0E:00/uevent  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#DEVPATH==&amp;#34;/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0E:00&amp;#34;, ATTR{power/wakeup}=&amp;#34;enabled&amp;#34;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;KERNEL==&amp;#34;PNP0C0E:00&amp;#34;, ATTR{power/wakeup}=&amp;#34;enabled&amp;#34;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;LABEL=&amp;#34;wakeup_disable_end&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Краткое пояснение:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Реагируем только на действия &lt;code&gt;add&lt;/code&gt;, &lt;code&gt;change&lt;/code&gt;, &lt;code&gt;bind&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;По умолчанию, для все подсистем, у которых есть атрибут &lt;code&gt;power/wakeup&lt;/code&gt; выставляем его в &lt;code&gt;disable&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;После чего, включаем только нужные источники пробуждения, у меня это LID и SLPB/WakeUp button.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Далее варианты:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Перегрузиться - самый простой&lt;/li&gt;
&lt;li&gt;Вручную перегрузить правила (&lt;code&gt;sudo udevadm control -R&lt;/code&gt;) и стригерить каждое устройство:
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo udevadm trigger /sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0D:00
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;Так же перечитать правила и вызвать однострочник выше, а если уж прилетит change action, то уже отработается правилами udev.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;В общем, какой удобнее - тот и использовать.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>RIP</title>
      <link>https://htrd.su/blog/2023/03/18/bertolet_rip/</link>
      <pubDate>Sat, 18 Mar 2023 02:31:33 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2023/03/18/bertolet_rip/</guid>
      <description>&lt;p&gt;&lt;strong&gt;16.03.2016&lt;/strong&gt;, Жека, помним.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2023/03/18/bertolet_rip/files/bertolet.jpg&#34; alt=&#34;bertolet.jpg&#34;&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Thinkpad P15 Gen2: падение VLC и проблемы с VDPAU/VA-API</title>
      <link>https://htrd.su/blog/2023/03/15/thinkpad_p15_gen2_vlc_crash_or_vdpau_vaapi_issues/</link>
      <pubDate>Wed, 15 Mar 2023 11:22:47 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2023/03/15/thinkpad_p15_gen2_vlc_crash_or_vdpau_vaapi_issues/</guid>
      <description>&lt;p&gt;&lt;strong&gt;Проблема:&lt;/strong&gt; VLC при попытке проиграть видео падает:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;libva error: /usr/lib/dri/i965_drv_video.so init failed  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;00007f437c007840&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; glconv_vaapi_x11 gl error: vaInitialize: unknown libva error  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;libva error: /usr/lib/dri/i965_drv_video.so init failed  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;00007f437c007840&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; glconv_vaapi_drm gl error: vaInitialize: unknown libva error  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;libva error: /usr/lib/dri/i965_drv_video.so init failed  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;00007f437c007840&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; glconv_vaapi_drm gl error: vaInitialize: unknown libva error
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;А &lt;code&gt;vdpauinfo&lt;/code&gt; говорит:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;libva error: /usr/lib/dri/i965_drv_video.so init failed
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;И рапортует, что не поддерживает ничего.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Решение:&lt;/strong&gt; поставить новый драйвер от Intel и не забыть бридж VA-API → VDPAU:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo pacman -S intel-media-driver libvdpau-va-gl
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Старый &lt;code&gt;libva-intel-driver&lt;/code&gt; работал для графики на T530, но тут уже нет. В целом, наверное, его можно удалить.&lt;/p&gt;
&lt;p&gt;После установки успешно отрабатывает и VLC, &lt;code&gt;vdpauinfo&lt;/code&gt; и &lt;code&gt;vainfo&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Для надёжности, наверное, стоит ещё задать:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# VA API (Firefox)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;LIBVA_DRIVER_NAME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;iHD
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# VDPAU&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;VDPAU_DRIVER&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;va_gl
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;К слову, &lt;code&gt;vainfo&lt;/code&gt; рапортует много больше возможностей по декодированию, по сравнению с &lt;code&gt;vdpauinfo&lt;/code&gt;. Вики Debian 
&lt;a href=&#34;https://wiki.debian.org/HardwareVideoAcceleration#VDPAU&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;говорит&lt;/a&gt; что он действительно более ограничен, но иногда (не наш случай), это единственный вариант. В общем, с учётом того, что тот же Firefox для аппаратного декодирования использует VAAPI и что последний более богат - это не может не радовать.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Для дополнительного чтения&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://github.com/intel/media-driver/blob/master/README.md&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/intel/media-driver/blob/master/README.md&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://wiki.archlinux.org/title/Hardware_video_acceleration&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://wiki.archlinux.org/title/Hardware_video_acceleration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://wiki.debian.org/HardwareVideoAcceleration&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://wiki.debian.org/HardwareVideoAcceleration&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Траверс Пидан-Фалаза, или все типы осадков, кроме града</title>
      <link>https://htrd.su/blog/2023/03/14/pidan-falaza-traverse/</link>
      <pubDate>Tue, 14 Mar 2023 22:32:37 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2023/03/14/pidan-falaza-traverse/</guid>
      <description>&lt;p&gt;&amp;hellip;ну и росы %)&lt;/p&gt;
&lt;p&gt;Наконец-то получилось пройти этот маршрут. До этого в разное время года по разным причинам мне этого сделать не удавалось.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2023/03/14/pidan-falaza-traverse/files/map.jpg&#34; alt=&#34;map.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;Сводка:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;День&lt;/th&gt;
          &lt;th&gt;Протопали,&lt;br/&gt;км&lt;/th&gt;
          &lt;th&gt;Набор высоты,&lt;br/&gt;м&lt;/th&gt;
          &lt;th&gt;Сброс высоты,&lt;br/&gt;м&lt;/th&gt;
          &lt;th&gt;Время/в движении,&lt;br/&gt;ч&lt;/th&gt;
          &lt;th&gt;Скорость/в движении,&lt;br/&gt;&lt;/th&gt;
          &lt;th&gt;Начало движения,&lt;br/&gt;ч&lt;/th&gt;
          &lt;th&gt;Конец движения,&lt;br/&gt;ч&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;12 мар&lt;/td&gt;
          &lt;td&gt;21&lt;/td&gt;
          &lt;td&gt;1790&lt;/td&gt;
          &lt;td&gt;1745&lt;/td&gt;
          &lt;td&gt;12:45/08:40&lt;/td&gt;
          &lt;td&gt;1.7/2.5&lt;/td&gt;
          &lt;td&gt;10:38&lt;/td&gt;
          &lt;td&gt;23:22&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Профиль:
&lt;img src=&#34;https://htrd.su/blog/2023/03/14/pidan-falaza-traverse/files/profile.png&#34; alt=&#34;profile.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;Далее со слов и согласия Жени Воеводского. Мои редкие коменты по тексту.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;12 марта в воскресенье осуществили траверс Пидан-Фалаза в &amp;ldquo;неблагоприятных&amp;rdquo; погодных условиях. Всё прошло отлично,  траверс схожен как и планировалось.&lt;/p&gt;
&lt;p&gt;Участники траверса:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Корнет Николаевич.&lt;/li&gt;
&lt;li&gt;Алексей Фищенко.&lt;/li&gt;
&lt;li&gt;Александр ( Хатред).&lt;/li&gt;
&lt;li&gt;Евгений Филимонов.&lt;/li&gt;
&lt;li&gt;Люсине.&lt;/li&gt;
&lt;li&gt;Евгений В. (я).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;По плану едем на двух машинах: на актионе Корнета Николаевича и на бигхорне Алексея Фищенко. Бигхорн оставляем в Грибановке, пересаживаемся в актион все, едем на нем до поляны зилов к концу дороги перед Пиданом, идём траверс, спускаемся в Грибановку, едем все на бигхорне до актиона к подножию Пидана, рассаживаемся по машинам и домой.&lt;/p&gt;
&lt;p&gt;Было всё так:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Выезд из города с ост. Магнитогорская 6:30.&lt;/li&gt;
&lt;li&gt;Начало маршрута от поляны зилов - 10:42.&lt;/li&gt;
&lt;li&gt;Камень Маори 13:15.&lt;/li&gt;
&lt;li&gt;Выход на хребет-траверса 14:00&lt;/li&gt;
&lt;li&gt;Лесосклад 15:45.&lt;/li&gt;
&lt;li&gt;Медвежка 18:10&lt;/li&gt;
&lt;li&gt;Фалаза 21:48&lt;/li&gt;
&lt;li&gt;Машина Грибановка 23:30 +- .&lt;/li&gt;
&lt;li&gt;Выезд актиона с поляны зилов от подножья 02:23.&lt;/li&gt;
&lt;li&gt;40 минут до асфальта в Лукьяновке. В городе на Заре были в 04:30.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Теперь немного лирики.&lt;/p&gt;
&lt;p&gt;Когда Корнет Николаич написал в группу что можно сходить Пидан-Фалазу в воскресенье и спрашивал кого записать, я записался, хотя были свежи у меня в памяти впечатления от прошлой Медвежки-Фалазы за 14 часов. Надо идти- подумал. Ещё подумал, ничего себе какая группа собралась бодрячком, все адепты ЗОЖ и физкультурники. Придется отжаться как положено. Была надежда что Люсине будет идти не очень быстро. Ничего, думал я, прорвусь, нормально всё будет. Новотнет, не тут то было. Надежда эта оказалась беспочвенной и не оправдалась. У Люсине был моторчик как и у всех остальных. Пришлось напрягаться со всей отдачей, стараться идти в общем темпе группы. В итоге &amp;ldquo;ушатался&amp;rdquo; за день конкретно, в лучших традициях.&lt;/p&gt;
&lt;p&gt;До выхода с Пидана на хребет-траверс дошли все мокрые, а до Медвежки вообще задолбались. Относительно.&lt;/p&gt;
&lt;p&gt;Ветви елей висели на проходах утяжеленные облепившим их снегом. Снег был с неба, с деревьев, отовсюду, он забивался во все карманы, за шиворот, в рюкзак, на рюкзак, в карманы рюкзака, между рюкзаком и спиной, облеплял нашу мокрую одежду. Наши ветровки стояли колом в ледяной корке. Это был треш конечно и драйв.&lt;/p&gt;
&lt;p&gt;При выходе на хребет траверса перед вершиной Пидана, когда одевали снегоступы, КН собрал собрание и  сказал что если кому-то хреново, или если он чувствует что не уверен, то вообще без проблем, разворачиваемся и идём обратно. Главное уверенность в себе, в своем самочувствии, в снаряге и, если есть сомнения, то ничего такого нет если повернём обратно. Очень важно что нельзя скрыть что-то от него, сказал.&lt;/p&gt;
&lt;p&gt;Для порядка.&lt;/p&gt;
&lt;p&gt;Все мокрые и замёрзшие сказали что идём. Мы сделаем это, уверены, всё нормально.&lt;/p&gt;
&lt;p&gt;С Медвежки будет наверное проще до Фалазы, думал я. На автопилоте по тропе, чо, прошлую субботу 15 человек в ступах прошли туда обратно, тропа была хорошая. Но тропы не было видно, её надо было угадывать, всё замело и снег продолжался. Ещё в темноте шли. Дошли, а куда бы мы делись. А Лёхе Ф. вообще было не понятно как можно ходить это за 13 часов и устраивать треш, он прошёл бы быстрее намного.&lt;/p&gt;
&lt;p&gt;Там ещё было приключение потом, пока ехали до актиона, засели в снежной каше по дороге, полчаса потеряли. В городе были утром.&lt;/p&gt;
&lt;p&gt;Хорошо сходили.&lt;/p&gt;
&lt;p&gt;Ещё этот поход прибавил в голову полезное осознание что надо заняться посерьёзнее здоровым образом жизни. Стал уставать больше, заметил. А впереди столько походов и всё самое интересное впереди. Позитив после такого как обычно переполняет.&lt;/p&gt;
&lt;p&gt;Спасибо всем участникам за этот день!!!&lt;/p&gt;
&lt;h2 id=&#34;пара-копеек-от-меня&#34;&gt;Пара копеек от меня&lt;/h2&gt;
&lt;p&gt;В целом и общем - Женя всё сказал как есть. Ну может не все задолбались и не все промокли к указанным моментам времени. Лично я потух к моменту подъёма на Фалазу с седловины. А подмерзать руки начали к началу спуске с этой самой Фалазы.&lt;/p&gt;
&lt;p&gt;Мне что запомнилось, так это процесс перехода дождя из состояния &amp;ldquo;я - жидкая вода&amp;rdquo;, до снега, через стадию ледяного дождя. При этом местами у нас было и облако-туман так, что создавалось ощущение поехавшей резкости в глазах, а потом оппа, сдувало и резкость сию секунду возвращалась на своё законное место.&lt;/p&gt;
&lt;p&gt;Ну и потери: одна палка погнула, на второй как-то умудрился сломать крепление темляка. Но дома обе поломки заколхозил. АКБ Eneloop как-то совсем хреново себя показали в этот раз, приходилось прибор держат ближе к телу, что бы те хоть как-то шуршали. Нужно менять нафиг.&lt;/p&gt;
&lt;p&gt;Очень удачно получилось, что взял с собой пару запасных фонариков. Лёхе Ф. очень пригодилось.&lt;/p&gt;
&lt;h2 id=&#34;фото-и-треки&#34;&gt;Фото и треки&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;От Корнета:
&lt;ul&gt;
&lt;li&gt;Фото: 
&lt;a href=&#34;https://cloud.mail.ru/public/6iYF/rm1XbBnY5&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://cloud.mail.ru/public/6iYF/rm1XbBnY5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Трек: 
&lt;a href=&#34;https://strava.app.link/yk8gT88Q6xb&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://strava.app.link/yk8gT88Q6xb&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;От Жени В.:
&lt;ul&gt;
&lt;li&gt;Пост в Instagramm: 
&lt;a href=&#34;https://www.instagram.com/p/CpuAmZHIyZ6anC8lDl_WaKPRUilyr2Pi9_5CAM0/?igshid=MDJmNzVkMjY=&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://www.instagram.com/p/CpuAmZHIyZ6anC8lDl_WaKPRUilyr2Pi9_5CAM0/?igshid=MDJmNzVkMjY=&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Фото: 
&lt;a href=&#34;https://disk.yandex.ru/a/zN09bXQPlaGgOQ&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://disk.yandex.ru/a/zN09bXQPlaGgOQ&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Зеркало: 
&lt;a href=&#34;https://drive.google.com/drive/folders/17KtSsuMWEJobUOdRXWhAQ6pNt9rj7yZT&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://drive.google.com/drive/folders/17KtSsuMWEJobUOdRXWhAQ6pNt9rj7yZT&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Мой трек с GPSMAP 64s: 
&lt;a href=&#34;files/pidan-falaza-mar2023.gpx.gz&#34;&gt;pidan-falaza-mar2023.gpx.gz&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Зеркало фото: 
&lt;a href=&#34;https://disk.yandex.ru/d/w9Prk5GqgQjZsA&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://disk.yandex.ru/d/w9Prk5GqgQjZsA&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Thinkpad P15 Gen2: гибридная графика</title>
      <link>https://htrd.su/blog/2023/03/14/thinkpad_p15_gen2_hybrid_graphics/</link>
      <pubDate>Tue, 14 Mar 2023 22:14:49 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2023/03/14/thinkpad_p15_gen2_hybrid_graphics/</guid>
      <description>&lt;p&gt;Карта у меня стоит далеко не топовая:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nVidia T1200
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ lspci -nn &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep VGA
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;00:02.0 VGA compatible controller &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;0300&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;: Intel Corporation TigerLake-H GT1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;UHD Graphics&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;8086:9a60&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;rev 01&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;01:00.0 VGA compatible controller &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;0300&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;: NVIDIA Corporation TU117GLM &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;T1200 Laptop GPU&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;10de:1fbc&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;rev a1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Карта поколения 
&lt;a href=&#34;https://nouveau.freedesktop.org/CodeNames.html#nv160familyturing&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;NV160 family (Turing)&lt;/a&gt;. Это будет важно в дальнейшем.&lt;/p&gt;
&lt;p&gt;Первое, у нас, аналогично T530 (там правда mDP, а VGA - на встроенную карту, но тут VGA нет /дополнительный порт - через TypeC/), HDMI разведён на дискретную карту. Соответственно нельзя использовать её без настройки оной.&lt;/p&gt;
&lt;p&gt;Второе, эта карта поддерживается открытым ядерными драйверами от самой nvidia: nvidia-open / nvidia-open-dkms. К сожалению, самих драйверов не завезли в репозитории Manjaro (тогда как в ArchLinux они есть). Ставим beta или git из AUR.&lt;/p&gt;
&lt;h2 id=&#34;внешний-монитор-на-hdmi&#34;&gt;Внешний монитор на HDMI&lt;/h2&gt;
&lt;p&gt;Главное - удалить пакет bumblebee: он блеклистит как драйвера нуво (nouveau), так и официальный драйвера nVidia.&lt;/p&gt;
&lt;p&gt;При этом, при загруженной системе выход на HDMI работает как с открытыми драйверами nouveau из коробки, так и с закрытыми драйверами.&lt;/p&gt;
&lt;p&gt;Для нуво ничего, собственно, делать не нужно, единственно, стоит удалить &lt;code&gt;xf86-video-nouveau&lt;/code&gt;, так для карт поколения NVC50+ рекомендую использовать встроенный modeset.&lt;/p&gt;
&lt;p&gt;Для проприетарных - ниже.&lt;/p&gt;
&lt;p&gt;Для того, что бы средствами обычного xrandr/DRM внешний порт нормально цеплялся:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Удалить bumblebee&lt;/li&gt;
&lt;li&gt;Добавить в загрузку &lt;code&gt;nvidia_drm&lt;/code&gt; (не обязательно, при удалённом bumblebee он и сам загрузится)&lt;/li&gt;
&lt;li&gt;Добавить параметр &lt;code&gt;nvidia_drm.modeset=1&lt;/code&gt; (я сделал через параметры модулей)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Для загрузки модуля, пишем в &lt;code&gt;/etc/modules-load.d/modules.conf&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# List of modules to load at boot  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;nvidia_drm&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;TBD:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;nvidia&lt;/li&gt;
&lt;li&gt;nvidia_drm&lt;/li&gt;
&lt;li&gt;nvidia_uvm&lt;/li&gt;
&lt;li&gt;nvidia_modeset&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Для параметров, создаём файл &lt;code&gt;/etc/modprobe.d/nvidia.conf&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;options nvidia_drm modeset=1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Это автоматически подгрузит и &lt;code&gt;nvidia_modeset&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Всё, после чего у нас всё магическим образом заработает:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ xrandr --listproviders
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Providers: number : &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Provider 0: id: 0x49 cap: 0xf, Source Output, Sink Output, Source Offload, Sink Offload crtcs: &lt;span class=&#34;m&#34;&gt;4&lt;/span&gt; outputs: &lt;span class=&#34;m&#34;&gt;7&lt;/span&gt; associated providers: &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; name:modesetting  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Provider 1: id: 0x2a2 cap: 0x2, Sink Output crtcs: &lt;span class=&#34;m&#34;&gt;4&lt;/span&gt; outputs: &lt;span class=&#34;m&#34;&gt;5&lt;/span&gt; associated providers: &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; name:NVIDIA-G0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;А в KDE Plasma по &lt;strong&gt;Fn+F7&lt;/strong&gt; будет работать выбор режима расширения экрана при подключенном внешнем мониторе.&lt;/p&gt;
&lt;h2 id=&#34;prime&#34;&gt;PRIME&lt;/h2&gt;
&lt;p&gt;В отличии от HDMI выхода, драйвера nouveau не работают от слова совсем. Ошибка. &lt;strong&gt;TBD&lt;/strong&gt;: добавить вывод ошибки.&lt;/p&gt;
&lt;p&gt;Поэтому рассматриваем только официальные драйвера.&lt;/p&gt;
&lt;p&gt;Ставим:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ sudo pacman -S nvidia-prime
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Проверяем:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ prime-run glxinfo | grep &amp;#34;OpenGL renderer&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;OpenGL renderer string: NVIDIA T1200 Laptop GPU/PCIe/SSE2
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;По сути, он просто задаёт нужные переменные окружения:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://download.nvidia.com/XFree86/Linux-x86_64/495.44/README/primerenderoffload.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://download.nvidia.com/XFree86/Linux-x86_64/495.44/README/primerenderoffload.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Настройки для внешнего монитора должны быть сделаны.&lt;/p&gt;
&lt;h3 id=&#34;power-management&#34;&gt;Power Management&lt;/h3&gt;
&lt;p&gt;Как говорится 
&lt;a href=&#34;https://wiki.archlinux.org/title/PRIME#NVIDIA&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;тут&lt;/a&gt; для новейших карт Ampere ничего делать не нужно, а наша Turing мы можем 
&lt;a href=&#34;https://us.download.nvidia.com/XFree86/Linux-x86_64/525.89.02/README/dynamicpowermanagement.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;полностью отключить карту, когда она не используется&lt;/a&gt;.
Нужно создать udev правила &lt;code&gt;/etc/udev/rules.d/80-nvidia-pm.rules&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# Enable runtime PM for NVIDIA VGA/3D controller devices on driver bind
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ACTION==&amp;#34;bind&amp;#34;, SUBSYSTEM==&amp;#34;pci&amp;#34;, ATTR{vendor}==&amp;#34;0x10de&amp;#34;, ATTR{class}==&amp;#34;0x030000&amp;#34;, TEST==&amp;#34;power/control&amp;#34;, ATTR{power/control}=&amp;#34;auto&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ACTION==&amp;#34;bind&amp;#34;, SUBSYSTEM==&amp;#34;pci&amp;#34;, ATTR{vendor}==&amp;#34;0x10de&amp;#34;, ATTR{class}==&amp;#34;0x030200&amp;#34;, TEST==&amp;#34;power/control&amp;#34;, ATTR{power/control}=&amp;#34;auto&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# Disable runtime PM for NVIDIA VGA/3D controller devices on driver unbind
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ACTION==&amp;#34;unbind&amp;#34;, SUBSYSTEM==&amp;#34;pci&amp;#34;, ATTR{vendor}==&amp;#34;0x10de&amp;#34;, ATTR{class}==&amp;#34;0x030000&amp;#34;, TEST==&amp;#34;power/control&amp;#34;, ATTR{power/control}=&amp;#34;on&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ACTION==&amp;#34;unbind&amp;#34;, SUBSYSTEM==&amp;#34;pci&amp;#34;, ATTR{vendor}==&amp;#34;0x10de&amp;#34;, ATTR{class}==&amp;#34;0x030200&amp;#34;, TEST==&amp;#34;power/control&amp;#34;, ATTR{power/control}=&amp;#34;on&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;И добавить параметры для главного модуля nvidia:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;options nvidia &amp;#34;NVreg_DynamicPowerManagement=0x02&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Затем 
&lt;a href=&#34;https://us.download.nvidia.com/XFree86/Linux-x86_64/465.27/README/nvidia-persistenced.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;включить&lt;/a&gt; сервис &lt;code&gt;nvidia-persistenced.service&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl enable nvidia-persistenced.service
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;проблемы&#34;&gt;Проблемы&lt;/h2&gt;
&lt;h3 id=&#34;зависает-ядро&#34;&gt;Зависает ядро&lt;/h3&gt;
&lt;p&gt;Точнее так, это не беда nVidia, это беда только на процессорах 11gen от Intel, который, собственно у меня и стоит:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://forum.manjaro.org/t/nvidia-prime-missing-endbr-kernel-trap/131839,&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://forum.manjaro.org/t/nvidia-prime-missing-endbr-kernel-trap/131839,&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Сама проблема описана 
&lt;a href=&#34;https://wiki.archlinux.org/title/NVIDIA&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;тут&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
&lt;a href=&#34;https://archlinux.org/packages/?name=nvidia&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;nvidia&lt;/a&gt; may not boot on Linux 5.18 (or later) on systems with Intel CPUs 
&lt;a href=&#34;https://newsroom.intel.com/editorials/intel-cet-answers-call-protect-common-malware-threats/#gs.mg8nm2&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;(likely only of 11th Gen and onward)&lt;/a&gt; due to 
&lt;a href=&#34;https://bugs.archlinux.org/task/74886&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;FS#74886&lt;/a&gt;/
&lt;a href=&#34;https://bugs.archlinux.org/task/74891&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;FS#74891&lt;/a&gt;. Until this is fixed, a workaround is disabling the 
&lt;a href=&#34;https://edc.intel.com/content/www/us/en/design/ipla/software-development-platforms/client/platforms/alder-lake-desktop/12th-generation-intel-core-processors-datasheet-volume-1-of-2/007/indirect-branch-tracking/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Indirect Branch Tracking&lt;/a&gt; CPU security feature by setting the &lt;code&gt;ibt=off&lt;/code&gt; 
&lt;a href=&#34;https://wiki.archlinux.org/title/Kernel_parameter&#34; title=&#34;Kernel parameter&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;kernel parameter&lt;/a&gt; from the 
&lt;a href=&#34;https://wiki.archlinux.org/title/Boot_loader&#34; title=&#34;Boot loader&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;boot loader&lt;/a&gt;. This security feature is responsible for 
&lt;a href=&#34;https://lwn.net/Articles/889475/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;mitigating a class of exploit techniques&lt;/a&gt;, but 
&lt;a href=&#34;https://www.reddit.com/r/archlinux/comments/v0x3c4/psa_if_you_run_kernel_518_with_nvidia_pass_ibtoff/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;is deemed safe as a temporary stopgap solution&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;У меня аффектит в том числе и работу Virtual Box:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  456.563262&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; SUPR0GipMap: &lt;span class=&#34;nv&#34;&gt;fGetGipCpu&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;0x1b  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249272&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; traps: Missing ENDBR: 0xffffacace3a50c20  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249303&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; ------------&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; cut here &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;------------  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249304&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; kernel BUG at arch/x86/kernel/traps.c:255!  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249308&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; invalid opcode: &lt;span class=&#34;m&#34;&gt;0000&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#1] PREEMPT SMP NOPTI  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249312&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; CPU: &lt;span class=&#34;m&#34;&gt;14&lt;/span&gt; PID: &lt;span class=&#34;m&#34;&gt;6732&lt;/span&gt; Comm: EMT-0 Tainted: G           OE      6.1.12-1-MANJARO &lt;span class=&#34;c1&#34;&gt;#1 d419fb51ba9431ae2a4575820ea6b5b95f50a34f  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249314&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; Hardware name: LENOVO 20YQ0058RT/20YQ0058RT, BIOS N37ET39W &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.20 &lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; 04/15/2022  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249315&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; RIP: 0010:exc_control_protection+0xc2/0xd0  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249320&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; Code: fa ff &lt;span class=&#34;m&#34;&gt;45&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;31&lt;/span&gt; c9 &lt;span class=&#34;m&#34;&gt;49&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;89&lt;/span&gt; d8 b9 &lt;span class=&#34;m&#34;&gt;09&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;00&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;00&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;00&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;48&lt;/span&gt; 8b &lt;span class=&#34;m&#34;&gt;93&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;80&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;00&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;00&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;00&lt;/span&gt; be &lt;span class=&#34;nb&#34;&gt;fc&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;00&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;00&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;00&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;48&lt;/span&gt; c7 c7 &lt;span class=&#34;m&#34;&gt;09&lt;/span&gt; 4e &lt;span class=&#34;m&#34;&gt;44&lt;/span&gt; b9 e8 c3 &lt;span class=&#34;m&#34;&gt;84&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;46&lt;/span&gt; ff e9 &lt;span class=&#34;m&#34;&gt;64&lt;/span&gt; ff ff ff &amp;lt;0f&amp;gt; 0b &lt;span class=&#34;m&#34;&gt;66&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;66&lt;/span&gt; 2e 0f 1f &lt;span class=&#34;m&#34;&gt;84&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;00&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;00&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;00&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;00&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;00&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;9&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;66&lt;/span&gt; 0f 1f &lt;span class=&#34;m&#34;&gt;00&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;55&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;53&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;48&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;89&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249321&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; RSP: 0018:ffffacace1cf7c38 EFLAGS: &lt;span class=&#34;m&#34;&gt;00010002&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249323&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; RAX: &lt;span class=&#34;m&#34;&gt;0000000000000028&lt;/span&gt; RBX: ffffacace1cf7c58 RCX: &lt;span class=&#34;m&#34;&gt;0000000000000000&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249324&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; RDX: &lt;span class=&#34;m&#34;&gt;0000000000000000&lt;/span&gt; RSI: ffff8afd1f7a1660 RDI: ffff8afd1f7a1660  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249325&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; RBP: &lt;span class=&#34;m&#34;&gt;0000000000000003&lt;/span&gt; R08: &lt;span class=&#34;m&#34;&gt;0000000000000000&lt;/span&gt; R09: ffffacace1cf7ad0  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249325&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; R10: &lt;span class=&#34;m&#34;&gt;0000000000000003&lt;/span&gt; R11: ffffffffb9ccc7e8 R12: &lt;span class=&#34;m&#34;&gt;0000000000000000&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249326&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; R13: &lt;span class=&#34;m&#34;&gt;0000000000000000&lt;/span&gt; R14: &lt;span class=&#34;m&#34;&gt;0000000000000000&lt;/span&gt; R15: &lt;span class=&#34;m&#34;&gt;0000000000000000&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249327&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; FS:  00007fe0241fd6c0&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; GS:ffff8afd1f780000&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; knlGS:0000000000000000  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249328&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; CS:  &lt;span class=&#34;m&#34;&gt;0010&lt;/span&gt; DS: &lt;span class=&#34;m&#34;&gt;0000&lt;/span&gt; ES: &lt;span class=&#34;m&#34;&gt;0000&lt;/span&gt; CR0: &lt;span class=&#34;m&#34;&gt;0000000080050033&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249329&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; CR2: ffffacace38c5b10 CR3: 00000002ac0d0006 CR4: 0000000000f70ee0  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249330&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; PKRU: &lt;span class=&#34;m&#34;&gt;55555554&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249331&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; Call Trace:  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249333&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  &amp;lt;TASK&amp;gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249335&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  asm_exc_control_protection+0x26/0x30  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249337&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; RIP: 0010:0xffffacace3a50c20  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249339&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; Code: &lt;span class=&#34;m&#34;&gt;16&lt;/span&gt; 9d e6 ff 4c &lt;span class=&#34;m&#34;&gt;89&lt;/span&gt; e7 &lt;span class=&#34;m&#34;&gt;89&lt;/span&gt; c3 e8 7c &lt;span class=&#34;m&#34;&gt;94&lt;/span&gt; e6 ff &lt;span class=&#34;m&#34;&gt;85&lt;/span&gt; db 0f &lt;span class=&#34;m&#34;&gt;48&lt;/span&gt; c3 5b &lt;span class=&#34;m&#34;&gt;41&lt;/span&gt; 5c 5d c3 &lt;span class=&#34;m&#34;&gt;66&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;90&lt;/span&gt; b8 fe ff ff ff c3 &lt;span class=&#34;m&#34;&gt;66&lt;/span&gt; 2e 0f 1f &lt;span class=&#34;m&#34;&gt;84&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;00&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;00&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;00&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;00&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;00&lt;/span&gt; &amp;lt;83&amp;gt; fe 0f &lt;span class=&#34;m&#34;&gt;77&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;53&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;55&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;83&lt;/span&gt; ce &lt;span class=&#34;m&#34;&gt;10&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;48&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;89&lt;/span&gt; e5 &lt;span class=&#34;m&#34;&gt;53&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;89&lt;/span&gt; fb &lt;span class=&#34;m&#34;&gt;48&lt;/span&gt; 8d 7f &lt;span class=&#34;m&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;48&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;83&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249340&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; RSP: 0018:ffffacace1cf7d08 EFLAGS: &lt;span class=&#34;m&#34;&gt;00010246&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249341&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; RAX: &lt;span class=&#34;m&#34;&gt;0000000000000000&lt;/span&gt; RBX: ffffacace2219010 RCX: &lt;span class=&#34;m&#34;&gt;0000000000000001&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249342&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; RDX: &lt;span class=&#34;m&#34;&gt;0000000000000000&lt;/span&gt; RSI: &lt;span class=&#34;m&#34;&gt;0000000000000000&lt;/span&gt; RDI: ffffacace2219030  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249343&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; RBP: ffffacace1cf7de0 R08: ffffacace3a5b95d R09: ffffacace2219010  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249343&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; R10: ffffacace226a000 R11: &lt;span class=&#34;m&#34;&gt;0000000000000000&lt;/span&gt; R12: ffff8af9c6c79a10  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249344&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; R13: ffffffffc0bffce0 R14: &lt;span class=&#34;m&#34;&gt;0000000000000004&lt;/span&gt; R15: ffff8af9c6c79a10  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249346&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  ? asm_exc_page_fault+0x26/0x30  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249348&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  ? supdrvIOCtl+0x2d77/0x31b0 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;vboxdrv 2ebee49653aba23a54dbd683c8be87cd93f03860&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249364&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  ? _copy_from_user+0x47/0x60  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249368&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  ? VBoxDrvLinuxIOCtl_7_0_6+0x162/0x260 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;vboxdrv 2ebee49653aba23a54dbd683c8be87cd93f03860&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249376&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  ? do_syscall_64+0x6b/0x90  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249378&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  ? __x64_sys_ioctl+0x91/0xd0  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249381&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  ? do_syscall_64+0x5c/0x90  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249382&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  ? exc_page_fault+0x74/0x170  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249384&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  ? entry_SYSCALL_64_after_hwframe+0x63/0xcd  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249385&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  &amp;lt;/TASK&amp;gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249386&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; Modules linked in: snd_seq_dummy snd_seq snd_seq_device ccm rfcomm qrtr cmac algif_hash algif_skcipher af_alg bnep btusb uvcvideo btrtl videobuf2_vmalloc btbcm videobuf2_memo  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ps btintel videobuf2_v4l2 btmtk videobuf2_common videodev bluetooth mc ecdh_generic joydev mousedev snd_ctl_led snd_soc_skl_hda_dsp snd_soc_intel_hda_dsp_common snd_soc_hdac_hdmi snd_sof_pr  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;obes snd_hda_codec_realtek snd_hda_codec_generic snd_soc_dmic snd_sof_pci_intel_tgl snd_sof_intel_hda_common soundwire_intel soundwire_generic_allocation soundwire_cadence snd_sof_intel_hda  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;snd_sof_pci snd_sof_xtensa_dsp intel_tcc_cooling snd_sof snd_sof_utils x86_pkg_temp_thermal snd_soc_hdac_hda intel_powerclamp snd_hda_ext_core coretemp snd_soc_acpi_intel_match kvm_intel s  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nd_soc_acpi vfat fat soundwire_bus kvm snd_soc_core iwlmvm irqbypass crct10dif_pclmul snd_compress crc32_pclmul ac97_bus polyval_clmulni snd_hda_codec_hdmi snd_pcm_dmaengine polyval_generic  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gf128mul ghash_clmulni_intel mac80211 sha512_ssse3  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249418&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  snd_hda_intel aesni_intel processor_thermal_device_pci_legacy snd_intel_dspcfg crypto_simd snd_intel_sdw_acpi processor_thermal_device cryptd libarc4 mei_hdcp mei_pxp snd_hd  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;a_codec processor_thermal_rfim iTCO_wdt rapl nouveau iwlwifi snd_hda_core spi_nor intel_pmc_bxt processor_thermal_mbox snd_hwdep mei_me intel_cstate iTCO_vendor_support ee1004 intel_rapl_ms  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;r ucsi_acpi processor_thermal_rapl think_lmi snd_pcm intel_uncore cfg80211 psmouse pcspkr firmware_attributes_class mtd wmi_bmof typec_ucsi i2c_i801 mxm_wmi igc mei intel_rapl_common thunde  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rbolt snd_timer drm_ttm_helper i2c_smbus typec intel_soc_dts_iosf roles int3400_thermal int3403_thermal acpi_thermal_rel int340x_thermal_zone intel_hid acpi_pad sparse_keymap acpi_tad mac_h  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;id dm_multipath dm_mod vboxnetflt&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;OE&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; vboxnetadp&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;OE&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; vboxdrv&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;OE&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; sg crypto_user fuse acpi_call&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;OE&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; bpf_preload ip_tables x_tables ext4 crc32c_generic crc16 mbcache jbd2 rtsx_pci_sdmmc mmc_c  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ore nvme thinkpad_acpi nvme_core crc32c_intel spi_intel_pci  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249452&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  xhci_pci serio_raw rtsx_pci ledtrig_audio spi_intel nvme_common xhci_pci_renesas atkbd platform_profile libps2 snd vivaldi_fmap soundcore i8042 rfkill serio i915 drm_buddy i  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ntel_gtt video wmi drm_display_helper cec ttm  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249462&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; ---&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; end trace &lt;span class=&#34;m&#34;&gt;0000000000000000&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;---  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249463&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; RIP: 0010:exc_control_protection+0xc2/0xd0  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249465&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; Code: fa ff &lt;span class=&#34;m&#34;&gt;45&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;31&lt;/span&gt; c9 &lt;span class=&#34;m&#34;&gt;49&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;89&lt;/span&gt; d8 b9 &lt;span class=&#34;m&#34;&gt;09&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;00&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;00&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;00&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;48&lt;/span&gt; 8b &lt;span class=&#34;m&#34;&gt;93&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;80&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;00&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;00&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;00&lt;/span&gt; be &lt;span class=&#34;nb&#34;&gt;fc&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;00&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;00&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;00&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;48&lt;/span&gt; c7 c7 &lt;span class=&#34;m&#34;&gt;09&lt;/span&gt; 4e &lt;span class=&#34;m&#34;&gt;44&lt;/span&gt; b9 e8 c3 &lt;span class=&#34;m&#34;&gt;84&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;46&lt;/span&gt; ff e9 &lt;span class=&#34;m&#34;&gt;64&lt;/span&gt; ff ff ff &amp;lt;0f&amp;gt; 0b &lt;span class=&#34;m&#34;&gt;66&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;66&lt;/span&gt; 2e 0f 1f &lt;span class=&#34;m&#34;&gt;84&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;00&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;00&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;00&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;00&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;00&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;9&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;66&lt;/span&gt; 0f 1f &lt;span class=&#34;m&#34;&gt;00&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;55&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;53&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;48&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;89&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249466&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; RSP: 0018:ffffacace1cf7c38 EFLAGS: &lt;span class=&#34;m&#34;&gt;00010002&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249467&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; RAX: &lt;span class=&#34;m&#34;&gt;0000000000000028&lt;/span&gt; RBX: ffffacace1cf7c58 RCX: &lt;span class=&#34;m&#34;&gt;0000000000000000&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249468&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; RDX: &lt;span class=&#34;m&#34;&gt;0000000000000000&lt;/span&gt; RSI: ffff8afd1f7a1660 RDI: ffff8afd1f7a1660  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249468&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; RBP: &lt;span class=&#34;m&#34;&gt;0000000000000003&lt;/span&gt; R08: &lt;span class=&#34;m&#34;&gt;0000000000000000&lt;/span&gt; R09: ffffacace1cf7ad0  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249469&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; R10: &lt;span class=&#34;m&#34;&gt;0000000000000003&lt;/span&gt; R11: ffffffffb9ccc7e8 R12: &lt;span class=&#34;m&#34;&gt;0000000000000000&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249469&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; R13: &lt;span class=&#34;m&#34;&gt;0000000000000000&lt;/span&gt; R14: &lt;span class=&#34;m&#34;&gt;0000000000000000&lt;/span&gt; R15: &lt;span class=&#34;m&#34;&gt;0000000000000000&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249470&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; FS:  00007fe0241fd6c0&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; GS:ffff8afd1f780000&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; knlGS:0000000000000000  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249471&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; CS:  &lt;span class=&#34;m&#34;&gt;0010&lt;/span&gt; DS: &lt;span class=&#34;m&#34;&gt;0000&lt;/span&gt; ES: &lt;span class=&#34;m&#34;&gt;0000&lt;/span&gt; CR0: &lt;span class=&#34;m&#34;&gt;0000000080050033&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249472&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; CR2: ffffacace38c5b10 CR3: 00000002ac0d0006 CR4: 0000000000f70ee0  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;  457.249473&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; PKRU: &lt;span class=&#34;m&#34;&gt;55555554&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;В выхлопе nVidia тоже будет присутстввать:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;traps: Missing ENDBR: 0xffffacace3a50c20  
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Решение:&lt;/strong&gt; добавить параметр &lt;code&gt;ibt=off&lt;/code&gt; для ядра.&lt;/p&gt;
&lt;p&gt;Открываем &lt;code&gt;/etc/default/grub&lt;/code&gt; и добавляем:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GRUB_CMDLINE_LINUX_DEFAULT=&amp;#34;... ibt=off ...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;После чего:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo update-grub
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;и перезагрузка.&lt;/p&gt;
&lt;h3 id=&#34;не-запускается-sddm&#34;&gt;Не запускается SDDM&lt;/h3&gt;
&lt;p&gt;У меня такое на дровах из репозитория. Поставил nvidia-open-beta - проблема ушла.&lt;/p&gt;
&lt;h2 id=&#34;особенности&#34;&gt;Особенности&lt;/h2&gt;
&lt;p&gt;Кто кого блеклистит и когда.&lt;/p&gt;
&lt;p&gt;Первое, пакет nvidia-utils содержит в себе конфиги для modprobe (&lt;code&gt;/usr/lib/modprobe.d/nvidia-utils-beta.conf&lt;/code&gt;), который блеклистит nouveau. Имейте ввиду.&lt;/p&gt;
&lt;p&gt;Второе, как было сказано выше, bumblebee блеклистит походим образом как nouveau, так и официальные драйвера. Внесение в  чёрный список защищает от автоматической загрузки, а принудительно загрузить всё так же можно. Чем bumblebee и пользуется для организации offloading.&lt;/p&gt;
&lt;p&gt;Далее, данные о блеклистинге попадают в том числе в initramfs, поэтому, вцелом, на гибридной графике можно не отказываться от kms - нуво всё равно не загрузится при наличии проприетарных драйверов, только если вы сами этого явно не скажите.&lt;/p&gt;
&lt;h2 id=&#34;ссылки&#34;&gt;Ссылки&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://wiki.archlinux.org/title/PRIME#PRIME_render_offload&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://wiki.archlinux.org/title/PRIME#PRIME_render_offload&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://wiki.archlinux.org/title/NVIDIA&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://wiki.archlinux.org/title/NVIDIA&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://wiki.archlinux.org/title/NVIDIA#DRM_kernel_mode_setting&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://wiki.archlinux.org/title/NVIDIA#DRM_kernel_mode_setting&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://forums.developer.nvidia.com/t/nvidia-hybrid-laptop-settings/209466&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://forums.developer.nvidia.com/t/nvidia-hybrid-laptop-settings/209466&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://stackoverflow.com/questions/17196117/disable-vertical-sync-for-glxgears&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://stackoverflow.com/questions/17196117/disable-vertical-sync-for-glxgears&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://forums.developer.nvidia.com/t/nvidia-hybrid-laptop-settings/209466&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://forums.developer.nvidia.com/t/nvidia-hybrid-laptop-settings/209466&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Thinkpad P15gen2: клавиатура, Menu, SysReq, Launch2</title>
      <link>https://htrd.su/blog/2023/03/10/thinkpad-p15gen2-keyboard/</link>
      <pubDate>Fri, 10 Mar 2023 11:11:22 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2023/03/10/thinkpad-p15gen2-keyboard/</guid>
      <description>&lt;p&gt;Для начала, методики (но не конечные решения!) описанные в прошлых связанных статьях для 
&lt;a href=&#34;https://htrd.su/tags/thinkpad/&#34;&gt;Thinkpad&lt;/a&gt; 
&lt;a href=&#34;https://htrd.su/tags/t530/&#34;&gt;T530&lt;/a&gt; вполне себе работают, поэтому стоит начать с ознакомления с ними:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://htrd.su/blog/2017/01/12/thinkpad_t530_dostup_k_break_pause_scroll_lock_i_sysreq/&#34;&gt;ThinkPad T530: доступ к Break, Pause, Scroll Lock и SysReq&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://htrd.su/blog/2017/02/19/thinkpad_t530_klaviatura/&#34;&gt;ThinkPad T530: клавиатура&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://htrd.su/blog/2018/05/22/thinkpad_t530_delaem_iz_knopki_launch1_-_sysrq/&#34;&gt;ThinkPad T530: делаем из кнопки Launch1 - SysRq&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;официальные-fn-комбинации&#34;&gt;Официальные Fn+ комбинации&lt;/h2&gt;
&lt;p&gt;Комбинации для 
&lt;a href=&#34;https://htrd.su/blog/2017/01/12/thinkpad_t530_dostup_k_break_pause_scroll_lock_i_sysreq/&#34;&gt;T530&lt;/a&gt; работают и ровно в такой же механике. Вообще вот руководство, так сказать первоисточники, где это всё описано:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://shop.lenovo.ru/upload/iblock/54b/54b6fbfa5de347e8b2d20af6266b48bd.pdf&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://shop.lenovo.ru/upload/iblock/54b/54b6fbfa5de347e8b2d20af6266b48bd.pdf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://download.lenovo.com/pccbbs/mobiles_pdf/p15_gen2_t15g_gen2_p17_gen2_ug_linux.pdf&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://download.lenovo.com/pccbbs/mobiles_pdf/p15_gen2_t15g_gen2_p17_gen2_ug_linux.pdf&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&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;th&gt;Код&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;Fn+F9&lt;/td&gt;
          &lt;td&gt;Открытие/свёртывание центра уведомлений&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;XF86Messager&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Fn+F10&lt;/td&gt;
          &lt;td&gt;Принятие входящих вызовов в Microsoft Teams&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;XF86Go&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Fn+F11&lt;/td&gt;
          &lt;td&gt;Отклонение входящих вызовов в Microsoft Teams&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;Cancel&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Fn+F12&lt;/td&gt;
          &lt;td&gt;Настраиваемая&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;XF86Favorites&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Все кнопки отлично распознаются и можно куда-то назначить.&lt;/p&gt;
&lt;p&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;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;Fn+PrtSc&lt;/td&gt;
          &lt;td&gt;Открытие инструмента «Ножницы»&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;Launch2&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Т.е. на самом деле - обычная кнопка общего назначения&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Fn+4&lt;/td&gt;
          &lt;td&gt;Спящий режим&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;XF86Sleep&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;В дополнение к основной&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Fn+Left&lt;/td&gt;
          &lt;td&gt;Переход к началу&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;Home&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Это просто подарок для навигации какой-то&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Fn+Right&lt;/td&gt;
          &lt;td&gt;Переход в конец&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;End&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;См выше&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Для работы с SysReq - смотрите 
&lt;a href=&#34;https://htrd.su/blog/2017/01/12/thinkpad_t530_dostup_k_break_pause_scroll_lock_i_sysreq/&#34;&gt;прошлую заметку для T530&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Управление громкостью, отключением микрофона, динамиков, управление яркостью дисплея, отключения WiFi, уход в сон и пробуждение (однократное нажатие  Fn) - как минимум в KDE Plasma заработало из коробки в том числе с сопутствующими OSD.&lt;/p&gt;
&lt;h2 id=&#34;делаем-menu-из-fnprtsc-aka-launch2&#34;&gt;Делаем Menu из Fn+PrtSc aka Launch2&lt;/h2&gt;
&lt;p&gt;По аналогии как тут:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://htrd.su/blog/2017/02/19/thinkpad_t530_klaviatura/&#34;&gt;ThinkPad T530: клавиатура&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://htrd.su/blog/2018/05/22/thinkpad_t530_delaem_iz_knopki_launch1_-_sysrq/&#34;&gt;ThinkPad T530: делаем из кнопки Launch1 - SysRq&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Что хорошо, за весь срок существования заметок и 10 лет существования ноутбука, даже номера event не поменялись: для встроенной клавиатуры остался 3, для Fn+ - 5.&lt;/p&gt;
&lt;p&gt;На P15gen2 я решил не переносить PrtSc, так как отдельной кнопки Launch1 больше нет, но так как на этой же кливише появилась альтернативная функция, то решил из неё как раз сделать Menu. Все действия уже описаны, результирующий &lt;code&gt;/etc/udev/hwdb.d/70-keyboard.hwdb&lt;/code&gt; получился такой:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# thinkpad_acpi driver  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;evdev:name:ThinkPad Extra Buttons:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  KEYBOARD_KEY_46=compose                                  # Override Launch2 (prog2) to Menu (Compose): on the TP P15gen2 - Fn+PrtScr
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Прочие Fn клавиши тоже можно переназначить по желанию. Главное его заиметь  или придумать, куда приспособить. Я пока не придумал.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Траверс Суходол-Туманная 2023</title>
      <link>https://htrd.su/blog/2023/01/09/sukhodol-tumannaya-traverse/</link>
      <pubDate>Mon, 09 Jan 2023 15:40:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2023/01/09/sukhodol-tumannaya-traverse/</guid>
      <description>&lt;p&gt;Снега в декабре в городе навалило так, что до сих пор аукается на дорогах Владивостока, поэтому возникло жгучее желание сходить потропить наши хребты в снегоступах. Кинул клич, в ответку от Коли Живова получил контр-приглашение на снегоступинг 7-8 января, но 8 были уже запланированы мероприятия, которые ну никак не получалось перенести. В результате согласились идти 4-5 января Саня, Юра и Макс. Но 3 числа Саня отвалился - внезапно заболел. Остался я, Макс и Юрка. Так и пошли.&lt;/p&gt;
&lt;p&gt;Перечитывая 
&lt;a href=&#34;https://htrd.su/blog/2016/03/05/s_juga_na_sever_po_livadijskomu_xrebtu/&#34;&gt;С юга на север по Ливадийскому хребту&lt;/a&gt; при планировании маршрута разогнался на 40 км за два дня, маршрут:&lt;/p&gt;
&lt;p&gt;74км-г.Суходол-хр.Большой Воробей-г.Туманная-р.Тигровая-(выход рядом)Бровничи-Фридман&lt;/p&gt;
&lt;p&gt;Резервными вариантами рассматривал выход:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;в Тигровой&lt;/li&gt;
&lt;li&gt;по классике на 82км&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Результат вышел куда более скромным, но не менее греющим душу:&lt;/p&gt;
&lt;p&gt;74км-г.Суходол-хр.Большой Воробей-г.Туманная-серпантин-82км&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2023/01/09/sukhodol-tumannaya-traverse/files/map.png&#34; alt=&#34;map&#34;&gt;&lt;/p&gt;
&lt;p&gt;Сводка:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;День&lt;/th&gt;
          &lt;th&gt;Протопали,&lt;br&gt;км&lt;/th&gt;
          &lt;th&gt;Набор высоты,&lt;br&gt;м&lt;/th&gt;
          &lt;th&gt;Сброс высоты,&lt;br&gt;м&lt;/th&gt;
          &lt;th&gt;Время/в движени,&lt;br&gt;ч&lt;/th&gt;
          &lt;th&gt;Скорость/в движении,&lt;br&gt;км/ч&lt;/th&gt;
          &lt;th&gt;Начало движения,&lt;br&gt;ч&lt;/th&gt;
          &lt;th&gt;Конце движения,&lt;br&gt;ч&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;4 янв&lt;/td&gt;
          &lt;td&gt;9.93&lt;/td&gt;
          &lt;td&gt;1285&lt;/td&gt;
          &lt;td&gt;360&lt;/td&gt;
          &lt;td&gt;07:54/04:46&lt;/td&gt;
          &lt;td&gt;1.3/2.1&lt;/td&gt;
          &lt;td&gt;09:56&lt;/td&gt;
          &lt;td&gt;17:51&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;5 янв&lt;/td&gt;
          &lt;td&gt;16.6&lt;/td&gt;
          &lt;td&gt;385&lt;/td&gt;
          &lt;td&gt;1195&lt;/td&gt;
          &lt;td&gt;08:25/05:22&lt;/td&gt;
          &lt;td&gt;2.0/3.1&lt;/td&gt;
          &lt;td&gt;09:26&lt;/td&gt;
          &lt;td&gt;17:52&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;strong&gt;26&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;1670&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;1600&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;16:19/10:08&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;1.59/2.85&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;&amp;mdash;&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;&amp;mdash;&lt;/strong&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2023/01/09/sukhodol-tumannaya-traverse/files/profile.png&#34; alt=&#34;profile&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2023/01/09/sukhodol-tumannaya-traverse/files/speed.png&#34; alt=&#34;speed&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2023/01/09/sukhodol-tumannaya-traverse/files/progress.png&#34; alt=&#34;progress&#34;&gt;&lt;/p&gt;
&lt;p&gt;Небольшую текстовку потом (возможно, но вряд ли) разбавлю вставками фото, а для страждущих, альбом:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://disk.yandex.ru/a/UaCNUKTnxuZZFQ&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Траверс Суходол-Туманная 2023&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Для более пытливых:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;files/traverse-sukhodol-tumannaya-2023.gpx.gz&#34;&gt;Точки и Треки&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Сборы быстрые. Питание, как обычно: утром - завтрак, вечером - ужин. В промежутках: перекус и термоса. Перекус организовываем самостоятельно, я взял несколько бутербродов и орехово-фруктовой смеси. Большую часть принёс домой и там схомячили с супругой.&lt;/p&gt;
&lt;p&gt;Дальше первая электричка, которую сместили лютые манагеры от РЖД почти на час, сократив и так небольшое световое время для маршрута. Зато выспаться можно. Около 9:50 вылазим на перроне 74км aka Лукьяновка и без лишних раздумий шуруем к Суходолу.&lt;/p&gt;
&lt;p&gt;А теперь вопрос залу: как на него, блин, заходить правильно? С того места, куда мы подошли, метров 15 лез на 4WD :-D&lt;/p&gt;
&lt;p&gt;В общем, с задорным матом, но без потерь вылезли на хребет и поползли. Примечательного не много, но радует быстрый набор высоты и открытость пространства - повернёшься и прогресс восхождения сразу виден.&lt;/p&gt;
&lt;p&gt;Весь хребет испещрён следами копытных и зайцев. К слову, последние дают самый удобный маршрут: сомневаешься куда идти - иди по заячему следую. Они даже по высоте проход выбирают, будто учитывают рост человека. Комплексы?&lt;/p&gt;
&lt;p&gt;К слову - снега мало. Идём без ступов, даже тропить толком не приходится - просто разбрасываем снег ногами. И так до первой знаковой точки - Суходол. Туда мы добираемся примерно к 11:40. На вершине много следов и есть тропа, которая падает в распадок между Суходолом и Большим Воробьём. Следы человека на хребте тоже появляются ближе к вершине - выныривают откуда-то слева по направлению подъёма. Надо будет попробовать как-то так зайти.&lt;/p&gt;
&lt;p&gt;На вершине Макс обзаводится треккинговыми палками производства Русский Лес филиал Приморский. После чего направляемся в седловину между Суходолом и одним из боковых гребней Большого Воробья. Залазим на пупырь отмеченный&amp;hellip; никак, но высотой - чуть меньше Суходола и опять падаем в седловину примерно на сотню метров и снова ползём на хребет, пересекаем дорогу, проложенную строителями ЛЭП и достигнув ЛЭП 110 кВ делаем перекур, перерыв, перекус. Макс на радостях приложился коленом об камень. Но вроде без последствий.&lt;/p&gt;
&lt;p&gt;После ЛЭП, пухляк начинает уступать место тонкому фирну. Снега всё так же мало, но идти, разгребая ногами снег уже не выходит. Прихотся поднимать ногу и ломать его&amp;hellip; или не ломать и подскальзываться. В общем - как масть ляжет. Тут мои силу начали утекать в какую-то прореху, основным прокладывателем маршрута назначается Юра, с чём он доблестно справляется!&lt;/p&gt;
&lt;p&gt;В 14:40 официально объявляю, что мы залезли на хребет. Это ни на что не влияет, &amp;ldquo;продолжаем движение&amp;rdquo; (с). Радуют кущи и заросли. Особенно Макса. У него ещё и коленки делают попытки выключиться. Снега становится чуть больше и темп снижается. А ещё находим тигриный след.&lt;/p&gt;
&lt;p&gt;Преодолении высоты в 1000м становится знаковым и мы решаем обуться в снегоступы. И чудо! Сразу появляются наддувы и места с глубоким снегом! Ну или мы теперь на радостях туда лезем :)&lt;/p&gt;
&lt;p&gt;Но где-то через полтора километра дело начинает идти к закату, а локальное выполаживание - к очередному подъёму. Поэтому решаем не ждать падения солнца за горизонт, а подбирать лучшие лежачие места и ставить лагерь. Лагерь оказался примерно в километре от безымянной вершины с тригономом наверху и отметкой 1218м. После похода от Коли узнал народное название - Маяк.&lt;/p&gt;
&lt;p&gt;Ставимся лениво. Палатка моя, на одной дуге - трещины на двух звеньях. Дома был уверен, что есть звенья, но найти не удалось. Нужно заказывать. Взял на всякий случай дополнительные комплект ремонтных трубок, одну из них сразу и одел. Правда эта гадина всё пыталась слететь и скрыться в снегу, но её это не удалось (хотя&amp;hellip; ревизию я ещё не проводил, возможно - заберу свои слова обратно). Но да ладно. В пару пакетов с Юркой накидываем более-менее чистого снега и ставим в задний тамбур палатки - что бы иметь снег для топления под рукой.&lt;/p&gt;
&lt;p&gt;Рюкзаки потрошим, всё нужное закидываем в палатку, ступы и сами рюкзаки оставляем греться на морозе, а сами, следуем вслед за всем нужным.&lt;/p&gt;
&lt;p&gt;Топим снег, готовим в палатке. Играем в ёжиков в тумане, делаем постановочные фото адовых созданий с горящими глазами (см фотоальбом). После приёма пищи и настройки делаем домашние заготовки на следующий день, а именно, готовим термос чая на завтрак, а в остальные сразу заливаем натопленной воды, что бы сэкономить время на утренней готовке (не сильно помогло, но об этом далее). Снова почувствовал острую необходимость приобрести нечто Jet Boil подобное: Kovea Alpine Pot или даже FireMaple X2. Понравилось однажды, как быстро там можно топить снег, при этом готовя во втором котле еду. Задел на будущее.&lt;/p&gt;
&lt;p&gt;В этот раз захватил с собой обрезок строительной ветро-влагозащитной мембраны Изоспан (типа Tyvek для нищебродов) для использования в роли конденсатника. Хватило накрыть все три спальника. Уж не знаю насколько он помог: или спальник новый (хоть и на -5, но длиннее, чем мой старый Гарип на -9) или тупо достаточно тепло было, но спать было очень комфортно. В целом, планирую развивать успех и погонять эрзац &amp;ldquo;конденсатник&amp;rdquo; в будущем ещё.&lt;/p&gt;
&lt;p&gt;Утром решаем подняться в 6 утра, что бы успеть приготовиться и выйти в 8&amp;hellip; наивные чукотские юноши :)&lt;/p&gt;
&lt;p&gt;Проснуться в 6 утра удалось, но возня до начала приготовления пищи растянулось на 30 минут, по быстрому готовим гречку и сардельки, закидываем в себя и освобождаем заготовленный термос с чаем. После чего, готовим 3 литра воды на чай для термосов. А там временем - уже 8 утра. Лааадно. Продолжаем, заливаем термоса&amp;hellip; А дальше как в тумане. В результате на маршрут выгребаемся только около 9:30.&lt;/p&gt;
&lt;p&gt;У Макса, тем временем, не восстановились колени и к правому, подключилось и левое. В результате идём перебежками, хотя общий темп, по ощущениям, все равно немного возрос. Частые остановки вызывают только  небольшой дискомфорт в плане подмерзания на холоде.&lt;/p&gt;
&lt;p&gt;Да, к слову, уже стало очевидно, что моим наполеоновским планам с выходом во Фридман или Тиговой не суждено сбыться. Решаем выбрасываться на 82км. Причём по первоначальной задумке, нам нужно туда успеть к 16:30, так как Юрке нужно успеть на электричку в сторону Партизанска, дабы потом не куковать 3 часа. Мы же с Максом планировали дотопать до Анисимовки и там перекантоваться до электрички. Плюс к этому, что бы поберечь колени Максу, решаем не вылазить на хребты от креста или от Туманной, а сваливаться по хребту на дорогу и дальше по серпантину до деревни.&lt;/p&gt;
&lt;p&gt;Тем временем снега становится больше, следов звериного тусняка тоже. И тут встречаем главного лесного тропильщика - зайца! До этого встречал только мелких, а этот - достаточно крупный. При этом, ещё не переоделся полностью в белую шкурку. Такой - серо-белый. Ломанулся знатно, подняв облако снежной пыли.&lt;/p&gt;
&lt;p&gt;Разгружаем немного Макса - забираю палатку.&lt;/p&gt;
&lt;p&gt;Примерно к 11:00 вываливаемся на &amp;ldquo;Маяк&amp;rdquo;, фотографируемся, перекусываем, отдыхаем. От него начинается частично заметённая, но хорошо натоптанная тропа. Причём, пока дорога идёт по открытой местности - тропа хорошо читается, но как только заходит под деревья - практически сразу теряется.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211312001-e083bd53-7852-4198-a9c9-b9c170c27e94.jpg&#34; alt=&#34;20230105_105237_small&#34;&gt;&lt;/p&gt;
&lt;p&gt;Где-то около 11:30 (11:24 если верить времени фотографии) на спуске в седловину между Маяком и Метеостанцией попадаем в реально зимнюю сказку: вокруг много снега, деревья все в снежных шапках. Красота. Участок небольшой, ни до, ни после такой красоты не встречалось.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211311998-5101bf40-4f57-41dd-90c8-2c7ccd910b26.jpg&#34; alt=&#34;20230105_111308_small&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211311991-c4319fd6-9cd6-47dc-b25b-f9379f118d30.jpg&#34; alt=&#34;20230105_111313_small&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211311982-3cc22ae4-fa54-406e-aa3b-29b4df0be40a.jpg&#34; alt=&#34;20230105_111317_small&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211311965-c90781e7-96d1-4bf7-a4c6-b838e80819c6.jpg&#34; alt=&#34;20230105_111326_small&#34;&gt;&lt;/p&gt;
&lt;p&gt;Примерно к 12:00 вываливаемся из леса на открытые поля и к подъёму на Метеостанцию. Вновь появляется тропа, а в скором времени и свежие следы, идущий на серпантин через Чёртов мост. Пока поднимаемся наверх, с Юрой обсуждаем вариант, что как только выходим на дорогу - его отпускаем, что бы он сам успел на электричку, а я буду дожидаться Макса и вместе потихоньку топать на свою - благо у нас в таком раскладе больше запаса по времени.&lt;/p&gt;
&lt;p&gt;На метеостанции дожидаемся Макса, доносим до него наши соображения и выдвигаемся дальше, собственно в сторону вершины Туманной. До неё идёт слонячья тропа. В какой-то момент она разбегается - тропа уходи на хребет, по которому, судя по следам, ходят сильно активно, а вот на саму вершину кто-то очень сильный и упорный, вроде Руслана Тя-Шен-Тина (ака Русланчик), прямо по шикарным наддувам набил тропу. Причём местами, похоже, что не для человеков :) Но, в общем, это не помешало с перерывами добраться к 13:10-13:15 добраться до вершины, на которую кто-то сердобольный, установил некое подобие тригонома (см фото), дабы понять, что это вообще вершина и более того - это цель вашего восхождения, а не попсовая метеостанция :)&lt;/p&gt;
&lt;p&gt;Здесь оцениваемся по времени и начинаем сваливаться по гребню на дорогу. Решаем, что вплоть до дороги Макса не ждём, оставляем ему тропу. А там я его дожидаюсь, а Юрка отпускаю бежать на электричку.&lt;/p&gt;
&lt;p&gt;До дороги доскакиваем примерно за час (к 14:15), отпускаю Юру, сам разоблачаюсь из снегоступов (хорошо натроплено), пью чай, перекусываю, дожидаюсь Макса. Вместе с ожиданием, перепаковкой снегоступов и отдыхом Макса, выйти получается только около 15:00. Идти по утоптанной, натропленной дороге хорошо, но рассчитывал, что будет накатано снегоходами. Трек же снегохода появляется только на середине серпантина, что сразу же добавляет темпа. А от поворота к водопаду Березнюк (надо, кстати, сходить, ни разу там не был) появляется и наезженная дорога, и темпа добавляется ещё! В результате к станции выскакиваем аж к 17:52, почти минута в минуту в плане завершения маршрута днём ранее. &amp;ldquo;Совпадение? Не думаю&amp;rdquo; (с) :)&lt;/p&gt;
&lt;p&gt;А куковать, тем временем, нужно ещё около часа до электрички. Сразу утеплился,  лениво сложил палочки и прочие непотребства похода, вроде гамаш. С чувством, с толком, с расстановкой запиточил пару мороженных бутербродов&amp;hellip; И вот электричка уже только через 10 минут, а я даже не &lt;del&gt;устал&lt;/del&gt; замёрз :)&lt;/p&gt;
&lt;p&gt;Резюмируя: хорошо прогулялись! Ступы уже года 4 не могли никуда выйти по разным причинам. Плюс уже этот траверс тоже всё обламывался по разным причинам и вот, наконец-то! :) Теперь нужно закрыть его в Тигровом&amp;hellip; Но это совсем другая история.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Сезон снежных крепостей 2022-2023</title>
      <link>https://htrd.su/blog/2022/12/31/snow-fortification-2022/</link>
      <pubDate>Sat, 31 Dec 2022 21:41:30 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2022/12/31/snow-fortification-2022/</guid>
      <description>&lt;p&gt;Опять и снова :)&lt;/p&gt;
&lt;p&gt;Альбом: 
&lt;a href=&#34;https://disk.yandex.ru/a/3Gpki_UxTvZXjQ&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://disk.yandex.ru/a/3Gpki_UxTvZXjQ&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Фото под катом&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211190682-8c01c695-3c19-4ee8-8bfa-25f9ce5cba02.jpg&#34; alt=&#34;20221231_175838-small&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211190680-10930afa-98a2-467a-aee7-470ddfc7c689.jpg&#34; alt=&#34;20221231_175855-small&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211190678-03bfbb5b-90cf-4144-b86c-bfa3270f2410.jpg&#34; alt=&#34;20221231_175906-small&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211190676-db831f95-c66c-4d19-8adc-ff78d0e3b516.jpg&#34; alt=&#34;20221231_175917-small&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211190674-d0a243dd-83be-40e2-85e1-37b876032776.jpg&#34; alt=&#34;20221231_175923-small&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211190673-0b47bf28-bbdf-41c2-878b-fc66f153becd.jpg&#34; alt=&#34;20221231_175939-small&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211190670-ee60c689-a4b3-4ef4-af4a-f295cc991929.jpg&#34; alt=&#34;20221231_175952-small&#34;&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>C&#43;&#43; прекрасен, как всегда</title>
      <link>https://htrd.su/blog/2022/12/10/cxx-is-great-as-always/</link>
      <pubDate>Sat, 10 Dec 2022 22:11:14 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2022/12/10/cxx-is-great-as-always/</guid>
      <description>&lt;p&gt;Жжот дурилко. Все помним про вызов функции vs конструирование объекта:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;foo&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;foo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{}&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;foo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// временный объект
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;vs&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;foo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;foo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// вызов функции
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Теперь такое:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;foo&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;foo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;foo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;static&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;foo&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// где храним
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;foo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Да, код в &lt;code&gt;main&lt;/code&gt; эквивалентен:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;foo&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;дефолтное конструирование объекта &lt;code&gt;s&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Обновляем компилятор в мозгах :)&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>LGT8Fx / LGT8F328P</title>
      <link>https://htrd.su/blog/2022/12/04/lgt8fx-lgt8328p/</link>
      <pubDate>Sun, 04 Dec 2022 14:49:38 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2022/12/04/lgt8fx-lgt8328p/</guid>
      <description>&lt;p&gt;На правах заметки.&lt;/p&gt;
&lt;h2 id=&#34;intro&#34;&gt;Intro&lt;/h2&gt;
&lt;p&gt;В народе этот чип называют &amp;ldquo;клоном&amp;rdquo; Atmega328P или &amp;ldquo;антикризисным Arduino&amp;rdquo; (ну не сам чип, а те платки, которые доступны на AliExpress).&lt;/p&gt;
&lt;p&gt;Даташит смотреть в разделе 
&lt;a href=&#34;#%d0%9f%d0%be%d0%bb%d0%b5%d0%b7%d0%bd%d1%8b%d0%b5%20%d1%81%d1%81%d1%8b%d0%bb%d0%ba%d0%b8,%20%d0%be%d0%b1%d1%81%d1%83%d0%b6%d0%b4%d0%b5%d0%bd%d0%b8%d1%8f%20%d0%b8%20%d0%b4%d0%be%d0%ba%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d0%b0%d1%86%d0%b8%d1%8f&#34;&gt;&amp;ldquo;Полезные ссылки и документация&amp;rdquo;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Клоном оно не является. Это самобытная разработка, которая в некотором отношение по пинам (в некоторых режимах) совместима ATmega328P. При этом, если, к примеру, плату с Али зашить обычным примером я миганием светодиода, собранным для BSP Arduino Nano, то диод будет мигать неадекватно. Т.е. для этого контроллера нужно свой пакет BSP, как, к примеру, для совсем &amp;ldquo;левых&amp;rdquo; контроллеров, типа ESP32.&lt;/p&gt;
&lt;p&gt;Т.е. из схожего:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;система комманд и ассемблер, тулчейн&lt;/li&gt;
&lt;li&gt;корпус и совместимость пинов, при этом, LGT8F328 может заменить 328 мегу, то обратная замена не всегда возможна (далее).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Основные особенности LGT8F328P:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Питание от 1.8-5.5В для всех частот&lt;/li&gt;
&lt;li&gt;Максимальная частота на внутренней RC цепочке и внешнем кварце до 32Mhz&lt;/li&gt;
&lt;li&gt;Нет фьюзов, как следствие, все настройки периферии нужно делать в стартовом коде, аналогично &amp;ldquo;взрослым&amp;rdquo; контроллерам. Отсюда и необходимость в отдельном &amp;ldquo;ядре&amp;rdquo; (BSP - Board Support Package из &amp;ldquo;взрослой&amp;rdquo; терминологии) для Arduino IDE.&lt;/li&gt;
&lt;li&gt;Особенности BSP для Arduino IDE, что прошивается только на 57кбод.&lt;/li&gt;
&lt;li&gt;Дополнительный третий 16 битный таймер. И все таймеры существенно проапргейжены в плане максимальных частот PWM и числа ног с PWM.&lt;/li&gt;
&lt;li&gt;Появился ЦАП&lt;/li&gt;
&lt;li&gt;АЦП тут уже 12 битный, а не 10 битный. Хотя, по отзывам, реальная точность осталась в районе 10 бит&lt;/li&gt;
&lt;li&gt;Нет EEPROM. Но он может программно эмулироваться на внутреннем флеше. Т.е. - больше EEPROM - меньше на код.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Хорошее ревью с примерами кода: 
&lt;a href=&#34;https://arduino.ru/forum/apparatnye-voprosy/obzor-klona-megi328-lgt8f328p&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Обзор клона меги328 -LGT8F328P&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;В общем, контроллер новый, самобытный. Для домашнего использования очень интересен, но для промышленного использования я бы поостерёгся использовать.&lt;/p&gt;
&lt;p&gt;Для домашнего использования хорош и тем, что можно купить на Али версю платы Нано за ~115 рублей с бесплатной доставкой против 250 рублей за аналогичный Nano v3. Плюс платы с односторонним расположением элементов, что позволяет монтировать на плату в виде модуля.&lt;/p&gt;
&lt;h2 id=&#34;официальный-тулинг&#34;&gt;Официальный тулинг&lt;/h2&gt;
&lt;p&gt;Статья: 
&lt;a href=&#34;https://cxem.net/mc/mc508.php&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;LGT8F328P Arduino совместимая плата. Программирование на чистом Си&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ну а инструмент называется: LGTSDK Builder&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.prodesign.com.cn/lgtsdk_builder/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Сайт (китайский язык)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Скачать: 
&lt;a href=&#34;http://www.lgtic.com/upload/tools/lgtsdk_builder/LGTSDK_Builder_latest.rar&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.lgtic.com/upload/tools/lgtsdk_builder/LGTSDK_Builder_latest.rar&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Скачивания смотреть на странице: 
&lt;a href=&#34;http://www.prodesign.com.cn/download/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.prodesign.com.cn/download/&lt;/a&gt; или 
&lt;a href=&#34;http://www.prodesign.com.cn/lgt8f328p/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.prodesign.com.cn/lgt8f328p/&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.prodesign.com.cn/wp-content/uploads/2023/03/LGTSDK_Builder_latest.zip&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;LGTSDK_Builder_1.5beta29&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.lgtic.com/wp-content/uploads/2023/03/LGTSDK_Builder_latest.zip&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;LGTSDK Builder&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;поддержка-в-arduino-ide&#34;&gt;Поддержка в Arduino IDE&lt;/h2&gt;
&lt;p&gt;Теперь про интеграцию в Arduino IDE. Как я писал выше - нужен свой BSP. Как минимум настройки для PLL и EEPROM при старте.&lt;/p&gt;
&lt;p&gt;Я нашёл более-менее работающих два:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;a href=&#34;https://github.com/dbuezas/LGT8fx&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/dbuezas/LGT8fx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://github.com/nulllaborg/arduino_nulllab&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/nulllaborg/arduino_nulllab&lt;/a&gt; (альтернативный репозиторий: 
&lt;a href=&#34;https://gitee.com/nulllab/nulllab_arduino&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://gitee.com/nulllab/nulllab_arduino&lt;/a&gt;)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Рекомендую ознакомиться так же со ссылками на страницах обоих BSP. Можно найти полезного.&lt;/p&gt;
&lt;h3 id=&#34;lgt8fx&#34;&gt;LGT8fx&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Рекомендую именно его на момент 2024.11.26 (актуальная версия: 2.0.7), до этого рекомендовал Nulllab&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Ставим через Board Manager в Arduino IDE. В &lt;em&gt;File → Preference&lt;/em&gt;, &lt;em&gt;Settings&lt;/em&gt; tab добавляем:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;https://raw.githubusercontent.com/dbuezas/lgt8fx/master/package_lgt8fx_index.json
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;На момент первоначального составления заметки была актуальна версия 1.0.5 (оригинальный BSP LGT8fx 
&lt;a href=&#34;https://github.com/dbuezas/lgt8fx/discussions/207&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;выглядел&lt;/a&gt; заброшенным.) и была доступна 
&lt;a href=&#34;https://github.com/LaZsolt/lgt8fx/releases/tag/v1.0.7-alpha.1&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;неофициальная 1.0.6 (ака v1.0.7 pre release)&lt;/a&gt;, которая:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Работает с платами с внешним 
&lt;a href=&#34;https://github.com/dbuezas/lgt8fx/issues/204&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;16Mhz кварцем&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Реализуют классический Arduino интерфейс для работы с EEPROM.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Естественно ставить её нужно было вручную. Сейчас же (2023.06.23) актуальная версия - 2.0.6, уже содержит вышеупомянутые доработки.&lt;/p&gt;
&lt;p&gt;Для установки в Board Manager вводим:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gt8fx
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;И ставим &amp;ldquo;LGT8fx Boards&amp;rdquo;&lt;/p&gt;
&lt;p&gt;В Tools → Board → LGT8fx Board выбираем единственную (2023.06.25) борду: LGT8F328. Собственно на ней и собраны популярные &amp;ldquo;клоны&amp;rdquo; Ardunio Nano и Arduino Pro Mini.&lt;/p&gt;
&lt;p&gt;После этого выбираем в Tools → Variants выбираем:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;328P-LQFP32 - для большинства клонов  в форм-факторе 
&lt;a href=&#34;https://wolles-elektronikkiste.de/en/lgt8f328p-lqfp32-boards&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Arduino Pro Mini и Arduino Nano&lt;/a&gt;
Ну или посчитайте ножки :)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Из настроек полезные, по сути, только частота работы и что используется: внутренний клок или внешний кварц.&lt;/p&gt;
&lt;p&gt;Внешний кварц понятен, есть три варианта (Tools → Clock Source):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;External 12Mhz&lt;/li&gt;
&lt;li&gt;External 16Mhz&lt;/li&gt;
&lt;li&gt;External 32Mhz&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Внутренний клок всегда один (там же, Tools → Clock Source):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Internal 32Mhz&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;А вот нужную частоту работы уже догоняем делителями (Tools → Clock Divider): 1, 2, 4, 8, 16, 32&lt;/p&gt;
&lt;p&gt;Я не разбирался, работают ли делители, при выборе внешнего кварца, но для внутреннего клока они точно работают.&lt;/p&gt;
&lt;p&gt;Следующие настройки, скорее всего, никогда не придётся менять:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Upload Speed: 57600, при другой у меня ничего не прошивалось, но зависит от прошитого FSBL (aka просто загрузчик, позволяющий обновляться по UART).&lt;/li&gt;
&lt;li&gt;SERIAL_RX_BUFFER_SIZE: 64, скорее всего сделано как какой-то WA. Не вникал.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Настроек для размера EEPROM нет, он есть всегда и его размер - 1 кБ. Если нужна гибкость в настройке - используйте Nulllab BSP,&lt;/p&gt;
&lt;p&gt;Ну и стоит отдельно упомянуть, что этот BSP - это развитие &amp;ldquo;официального&amp;rdquo; оного: 
&lt;a href=&#34;https://github.com/LGTMCU/Larduino_HSP&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/LGTMCU/Larduino_HSP&lt;/a&gt;. Можете и его попробовать. В некоторых источниках есть и на него ссылка.&lt;/p&gt;
&lt;h3 id=&#34;nulllab&#34;&gt;Nulllab&lt;/h3&gt;
&lt;p&gt;В целом можно и его рекомендовать: широкий набор источников клока, делителей (косвенно, через указание конкретной частоты) и возможность настройки EEPROM. Но LGT8fx Boards очень оживился, а этот как был версией 1.0.3 на момент составления заметки (2022.12.04), так и остался на момент правки (2023.06.25).&lt;/p&gt;
&lt;p&gt;Ставим через Board Manager в Arduino IDE. В &lt;em&gt;File → Preference&lt;/em&gt;, &lt;em&gt;Settings&lt;/em&gt; tab добавляем:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;https://raw.githubusercontent.com/nulllaborg/arduino_nulllab/master/package_nulllab_boards_index.json
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Nullab в Board Manager ищется по словам&amp;hellip; nulllab :-) При выборе борды нужно выбрать:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tools → Board → Nulllab AVR Compatible Board → DIY Board&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;При этом станет доступен полный &amp;ldquo;тюниг&amp;rdquo; для всех борд:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tools → CPU Frequency: 16 Mhz&lt;/li&gt;
&lt;li&gt;Tools → Clock Source: External (16 Mhz)&lt;/li&gt;
&lt;li&gt;Tools → EEPROM size: от 0 до 8кБ с шагом x2&lt;/li&gt;
&lt;li&gt;Tools → Upload Speed: 57600 - &lt;strong&gt;это важно, иначе не будет шиться (см выше)&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Как и LGT8fx Boards - это развитие &amp;ldquo;официального&amp;rdquo; BSP: 
&lt;a href=&#34;https://github.com/LGTMCU/Larduino_HSP&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/LGTMCU/Larduino_HSP&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;покупка&#34;&gt;Покупка&lt;/h2&gt;
&lt;p&gt;Естественно - Aliexpress. Я брал:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Nano + TypeC: 
&lt;a href=&#34;https://aliexpress.ru/item/1005004234919226.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://aliexpress.ru/item/1005004234919226.html&lt;/a&gt;, на момент составлении заметки - ~118руб
&lt;ul&gt;
&lt;li&gt;в этой версии платы на RX/TX нет LED и они не мешают работе PWM на Timer3 / OC3A (используется D1, он же RX). Но ни в коем случае нельзя включать аппратный Serial при включенном PWM.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Pro Mini: 
&lt;a href=&#34;https://aliexpress.ru/item/33003833124.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://aliexpress.ru/item/33003833124.html&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;тут две версии под 3.3В и 5В, плюс отдельно сам контроллер&lt;/li&gt;
&lt;li&gt;цена на момент заметки: ~63 руб за 5В версию. 3.3В версия чуть дороже&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;UNO: &lt;strong&gt;TBD&lt;/strong&gt; пока сам ищу. Ниже варианты, не проверенные:
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://aliexpress.ru/item/1005004833260461.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://aliexpress.ru/item/1005004833260461.html&lt;/a&gt; UNO R3 ~300руб плюс доставка примерно столько же.&lt;/li&gt;
&lt;li&gt;имхо, проще &amp;ldquo;оригинал&amp;rdquo; купить:
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://aliexpress.ru/item/32556087234.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://aliexpress.ru/item/32556087234.html&lt;/a&gt; - 233+50 руб&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://aliexpress.ru/item/32932088536.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://aliexpress.ru/item/32932088536.html&lt;/a&gt; - 207+55 руб&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;полезные-ссылки-обсуждения-и-документация&#34;&gt;Полезные ссылки, обсуждения и документация&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Упомянутый выше: 
&lt;a href=&#34;https://arduino.ru/forum/apparatnye-voprosy/obzor-klona-megi328-lgt8f328p&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Обзор клона меги328 -LGT8F328P&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://alexgyver.ru/lessons/lgt8f328/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;LGT8F328p. Начало работы, особенности&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Даташиты (лежат на Я.Д могут протухнуть в любой момент, поэтому пишу и имена файлов, что бы потом поискать на машине времени)
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://yadi.sk/i/F-669sUXm0UfMQ&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Даташит, серия P (RU)&lt;/a&gt; - LGT8FxxxP.pdf&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://yadi.sk/i/hWjA0Ns3i83Fnw&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Даташит, серия D (RU)&lt;/a&gt; - LGT8FxxxD.pdf&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://github.com/dbuezas/lgt8fx/blob/master/docs/LGT8FX8P_databook_v1.0.4.en.pdf&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Даташит 1.0.4 (EN)&lt;/a&gt; - Databook&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://github.com/watterott/LGT8F328P-Testing/raw/master/LGT8FX8P_databook_v1.0.5-English.pdf&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Даташит 1.0.5 (EN)&lt;/a&gt; - Databook&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Характеристики и отличия&lt;/li&gt;
&lt;li&gt;Видео обзор: 
&lt;a href=&#34;https://www.youtube.com/watch?v=Mk8YXS1tkhI&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://www.youtube.com/watch?v=Mk8YXS1tkhI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;На Amperka.ru: 
&lt;a href=&#34;https://amperka.ru/product/chip-lgt8f328p&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://amperka.ru/product/chip-lgt8f328p&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Даташит: 
&lt;a href=&#34;https://storage.googleapis.com/media.amperka.com/products/chip-lgt8f328p/media/lgt8f328p-datasheet.pdf&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://storage.googleapis.com/media.amperka.com/products/chip-lgt8f328p/media/lgt8f328p-datasheet.pdf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Рекомендует ставить оригинальный BSP, чего делать не нужно. Или использовать его для проектов вне среды Arduino.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;На странице BSP от 
&lt;a href=&#34;https://github.com/dbuezas/lgt8fx&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;dbuezas&lt;/a&gt; хорошая подборка документации:
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://github.com/dbuezas/lgt8fx/tree/master/docs&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/dbuezas/lgt8fx/tree/master/docs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://hallroad.org/lgt8f328p-lqfp32-minievb-alternative-arduino-nano-v3.0-atmega328p.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://hallroad.org/lgt8f328p-lqfp32-minievb-alternative-arduino-nano-v3.0-atmega328p.html&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;тоже рекомендуют оригинальный BSP.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Табличка, где сравнивается скорость выполнения  в тактах некоторых ассемблерных команд в обычном AVR и в LGT8 (по данным по ссылке 1):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Instruction Function                    Cycle of AVR    Cycle of LGT8XM
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ADIW        Add immediate to word       2               1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;SBIW        Subtract immediate to word  2               1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;MUL/S/SU    8bit multiply               2               1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;FMUL/S/SU   Fractional multiply         2               1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;RJMP/RCALL  Relative jump/call          2/3             1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;IJMP/ICALL  Indirect jump/call          2/3             2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;RET/IRET    Return                      4               2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;CPSE        Compare, skip if equal      1/2/3           1/2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;SBIS/SBRS   Skip if set                 1/2/3           1/2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;SBIC/SBRC   Skip if cleared             1/2/3           1/2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;LD/LDD      Load indirect               2               1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ST/STD      Store indirect              2               1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;LPM         Load program memory         3               2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;PUSH/POP    Stack access                2               1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Другие MCU от LGT в платах Arduino и их сравнения:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://github.com/dbuezas/lgt8fx/blob/master/docs/LGT_MCUs.md&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/dbuezas/lgt8fx/blob/master/docs/LGT_MCUs.md&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;pinout&#34;&gt;Pinout&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2022/12/04/lgt8fx-lgt8328p/files/lgt8f328p-nano-pinout.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;schematic&#34;&gt;Schematic&lt;/h2&gt;
&lt;h3 id=&#34;lgt8f328p-minievb&#34;&gt;LGT8F328P MiniEVB&lt;/h3&gt;
&lt;p&gt;Качество шакальное, но нашёл только 
&lt;a href=&#34;https://ru.scribd.com/document/668757543/LGT8F328P-MiniEVB-Schematic&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;тут&lt;/a&gt; скачивал через 
&lt;a href=&#34;https://docdownloader.com&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;тут&lt;/a&gt;. Оба два ресурса - через VPN или Tor.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2022/12/04/lgt8fx-lgt8328p/files/LGT8F328P-MiniEVB.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;code-snippets&#34;&gt;Code snippets&lt;/h2&gt;
&lt;h3 id=&#34;определение-в-коде-что-строимся-для-lgt8fx&#34;&gt;&lt;strong&gt;Определение в коде, что строимся для LGT8fx&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;LGT8fx Boards BSP и Nulllab BSP, определены макросы:
&lt;ul&gt;
&lt;li&gt;Все &amp;ldquo;P&amp;rdquo; (например - 328P) платы:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;__LGT8FX8P__&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;__LGT8F__&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;LQFP48:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;__LGT8FX8P48__&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;SSOP20:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;__LGT8F_SSOP20__&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Прочее: смотреть в &lt;code&gt;ARDUINO_DIR/packages/BSP/hardware/avr/VERSION/variants/XXX/pins_arduino.h&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;guid&#34;&gt;&lt;strong&gt;GUID&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;В каждом чипе прошит уникальный GUID (aka Serial Number). Может использоваться для расшифровки/кодирования чего-то&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;uint32_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;guid&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;uint32_t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;GUID0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;вывод-тактовой-на-ногу-pb0&#34;&gt;&lt;strong&gt;Вывод тактовой на ногу PB0&lt;/strong&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;CLKPR&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PMCE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//разрешить изменение
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;CLKPR&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//делитель =2 и вывод clk
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;переключение-тактирования-на-кварц&#34;&gt;&lt;strong&gt;Переключение тактирования на кварц&lt;/strong&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;sysClock&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EXT_OSC&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;CLKPR&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PMCE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//разрешить изменение 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;CLKPR&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// вывод clk
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;тактирование-от-внешнего-генератора-32mhz&#34;&gt;&lt;strong&gt;Тактирование от внешнего генератора 32MHz&lt;/strong&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;#34;lgtx8p.h&amp;#34;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;PMCR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PMCE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//разрешить выбор источника тактирования
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PMCR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//External high frequency crystal 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PMX2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;WCE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//разрешить изменения
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PMX2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;XIEN&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//разрешить вход тактовой частоты от кварц. генератора
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;CLKPR&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PMCE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//разрешить изменение
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;CLKPR&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//делитель =1 и вывод clk
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;цап-вывод-пилы&#34;&gt;&lt;strong&gt;ЦАП. Вывод пилы&lt;/strong&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;#34;lgtx8p.h&amp;#34;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;setup&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;DACON&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DACEN&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DAOE&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// dac-on, включить пин
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;static&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;uint8_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;cli&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;while&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;DAL0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;loop&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;пример-задействования-ног-swcswdadc6adc7aref---их-можно-сделать-выходами-порта-e&#34;&gt;&lt;strong&gt;Пример задействования ног  SWC,SWD,ADC6,ADC7,AREF - их можно сделать выходами порта E&lt;/strong&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;#34;lgtx8p.h&amp;#34;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;setup&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;PMX2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;WCE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;PMX2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E6EN&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//сделеть AREF ногой PE6
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MCUSR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;~&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;7&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;MCUSR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;|=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;7&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// Освободить PE0,PE2 от SWD
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//ноги SWC=PE0,ADC6=PE1,SWD=PE2, ADC7=PE3,AREF=PE6
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DDRE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;пример-ногодрыга-с-переключением-клоков-на-тактовую-32мгц&#34;&gt;&lt;strong&gt;Пример ногодрыга с переключением клоков на  тактовую 32МГц&lt;/strong&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;CLKPR&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PMCE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//разрешить изменение
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;CLKPR&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//делитель =1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DDRB&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// 12 пин OUTPUT
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;while&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;PINB&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mh&#34;&gt;0x10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;тест-на-наличие-таймера3--при-16мгц-тактовой-светодиод-тх-замигает-с-частотой-примерно-5герц&#34;&gt;&lt;strong&gt;Тест на наличие таймера3 -при 16МГц тактовой светодиод Тх замигает с частотой примерно 5Герц&lt;/strong&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;uint8_t&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;mh&#34;&gt;0x33&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mh&#34;&gt;0x2&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//  DDRF=1&amp;lt;&amp;lt;DDF1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;uint8_t&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;mh&#34;&gt;0x90&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mh&#34;&gt;0x40&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// TCCR3A=1&amp;lt;&amp;lt;COM3A0;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;uint8_t&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;mh&#34;&gt;0x91&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mh&#34;&gt;0xD&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;// TCCR3B=1&amp;lt;&amp;lt;WGM32 | 1&amp;lt;&amp;lt;CS30 |1&amp;lt;&amp;lt;CS32;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;uint8_t&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;mh&#34;&gt;0x99&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mh&#34;&gt;0x5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// OCR3AH=0x5; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;uint8_t&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;mh&#34;&gt;0x98&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mh&#34;&gt;0xDC&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// OCR3AL=0xDC;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;можно-перенести-rx-и-tx-оба-одновременно-или-только-какой-то-один-на-другие-пины&#34;&gt;Можно перенести Rx и Tx &lt;em&gt;(оба одновременно или только какой то один)&lt;/em&gt; на другие пины&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;PMX0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;7&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//разрешить ремаппинг
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PMX0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;RXD5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;TXD6&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Нужно, так как на этой плате неправильно разведён USART. Обмен данными возможен только между мк и usb-мостом. Какой-либо внешний сериальный сигнал подать нет возможности, он просто не прожмёт линию, которую каждый чип и светодиоды тянут вверх. Но выход есть, на помощь приходят регистры port multiplexing (PMX). Так что подключить bluetooth/GPS не проблема. &lt;/p&gt;
&lt;p&gt;Так же отремаппить можно и выход таймера OC3A, который сидит на пине Txd, и так же страдает от резистора (
&lt;a href=&#34;https://arduino.ru/forum/apparatnye-voprosy/obzor-klona-megi328-lgt8f328p?page=5#comment-556642&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;#286&lt;/a&gt;):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;PMX0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;7&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//разрешить ремаппинг
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PMX1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;C3AC&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Цитата от сниппета:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Ловить на PD6, причём в данном режиме переводить PD6 в OUTPUT &lt;strong&gt;категорически&lt;/strong&gt; запрещено, иначе будет к.з   т.к. сигнал OC3A будет выводится не на сам PD6, а на запараллеленый ему физически вход компаратора. В общем там всё запутанно :)&lt;/p&gt;&lt;/blockquote&gt;
&lt;h3 id=&#34;шим--pwm&#34;&gt;&lt;strong&gt;ШИМ / PWM&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;del&gt;У меня на таймере Timer3 не получилось получить ШИМ на ноге D1 (TX). После экспериментов там появился сигнал, но уровня 1.5В. Смотреть, также, предыдущий пункт про ремаппинг.&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;Предыдущий пункт про ремаппинг всё так же смотреть: вдруг пригодиться. На платах MiniEVB (см схему выше) цепь TX (D1) не притягивается никуда ничем, а с конвертером разделена резистором, так что ей ничего не мешает работать полноценно как таймер. В моём коде оказалась ошибка: не записывалось значение в регистр &lt;code&gt;OC3A&lt;/code&gt;.  При этом, нужно деактивировать порт PD и активировать выход на PF:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// Для OC3A (D1)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DDRD&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;~&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1u&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;DDD1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;DDRF&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1u&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;DDF1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// Для OC3B (D2)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DDRD&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;~&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1u&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;DDD2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;DDRF&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1u&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;DDF2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Правда при этом мы лишаемся TX USART. Его можно перенести на другую ногу (см пинаут и предыдущий пункт), но там тоже нужный ШИМ.&lt;/p&gt;
&lt;p&gt;А вот тут есть идея как запустить на A0/PC0, но не проверена:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://github.com/dbuezas/lgt8fx/discussions/293#discussion-5430058&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/dbuezas/lgt8fx/discussions/293#discussion-5430058&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Для настройки PWM онлайн:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://dbuezas.github.io/arduino-web-timers/#mcu=LGT8F328P&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Arduino Web Timers (LGT8F328P)&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://github.com/dbuezas/arduino-web-timers&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Проект на GitHub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Или отличная статья с деталями: 
&lt;a href=&#34;http://rcl-radio.ru/?p=129978&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;LGT8F328P таймеры (Arduino)&lt;/a&gt;. Тут всё по полочкам, по режимам.&lt;/p&gt;
&lt;p&gt;Стоит отметить про Timer0: он используется для Millis по переполнению. Делитель там 64 (но завязываться на это не стоит). Соответственно мне нужен был делитель 1, а значит время от millis стало в 64 раза быстрее. Костыльно для задержек решил проблему так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;constexpr&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;long&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;ms&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;long&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;val&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;val&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;64&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;constexpr&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;unsigned&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;long&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;long&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;operator&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_ms&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;unsigned&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;long&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;long&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;val&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;val&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;64&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// we use divider 1 vs default divider 64 for timer0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;loop&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;static&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;long&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tm&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;millis&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;millis&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tm&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;15&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_ms&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;millis&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tm&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ms&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;some_val&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;В идеале же нужно прочитать делитель при старте и заменить 64 на прочитанное значение.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>T530: восстанавливаем батарейку на контроллере R2J240_51F51</title>
      <link>https://htrd.su/blog/2022/11/27/t530-repair-9cell-battery-with-r2j240-51f51-controller/</link>
      <pubDate>Sun, 27 Nov 2022 21:44:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2022/11/27/t530-repair-9cell-battery-with-r2j240-51f51-controller/</guid>
      <description>&lt;p&gt;Вместо вводного слова: начала писать аж 16 сентября, а собрался закончить только 27 ноября (я появилось только 28)&amp;hellip;&lt;/p&gt;
&lt;p&gt;Короткое интро: на данный ноут больше не выпускают оригинальных батареек и купить, соответственно, их не возможно. А можно купить что-то на Aliexpress или (дороже и, скорее всего, хуже) на локальных площадках.&lt;/p&gt;
&lt;p&gt;Но покупка на Ali тоже лотереей: первая батарея нормально себя вела, но кончилась очень быстро. Вторая, пришедшая, буквально недели три назад, прекрасно разряжалась, но отказалась заряжаться в моём нотбуке. Спор не заводил, китаец предложил выслать ещё одну батарейку, правда на 6 ячеек. К слову, прошивка, которая убеждает EC  принимать любую батарейку, а не те, что в белом списке, тоже не помогла.&lt;/p&gt;
&lt;p&gt;Текущая батарейка, заказанная под видом оригинальной (вот яж лох), ещё дышала (но отрубалась резко на заряде от 10% до 30%), поэтому решил попытаться что-то с ней сделать: у меня были контроллеры от старых, но рабочих батарей.&lt;/p&gt;
&lt;p&gt;Кому интересно - под кат.&lt;/p&gt;
&lt;h2 id=&#34;вскрытие-покажет&#34;&gt;Вскрытие покажет&amp;hellip;&lt;/h2&gt;
&lt;p&gt;Для начала вскрытие. Тут гуглите и смотрите ролики на Ютубе. У меня такая статистика:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Оригинальные корпуса Lenovo: немного клея и много защёлок. Вскрыть без потерь очень трудно.&lt;/li&gt;
&lt;li&gt;Два неоригинала KingSenner с AliExpress. Защёлки, аккуратно вскрывается тонкой стальной лопаткой практически без потери потребительских свойств. Имеет смысл заказать хотя бы одну такую батарею, хотя бы ради корпуса на будущее.&lt;/li&gt;
&lt;li&gt;Неоригинал, купленный локально. Полный. Тотальный. Калл. Ой простите - клей. Хотя не, не простите. Но это дальше.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;контроллеры&#34;&gt;Контроллеры&lt;/h2&gt;
&lt;p&gt;На обоих оригинальных  батарейках у меня был контроллер &lt;strong&gt;R2J240_51F51&lt;/strong&gt;. Первый контроллер куда-то утерян.&lt;/p&gt;
&lt;p&gt;На первой батарейке от KingSenner стоял &lt;strong&gt;BG8030A&lt;/strong&gt;. С этим контроллером умеют работать нежадные версии Be2Works.&lt;/p&gt;
&lt;p&gt;На второй батарейке от KingSenner, которая отказалась заряжаться, контроллер был, как на оригинальных, R2J240_51F51, но как показало вскрытие:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;там был сгоревшим предохранитель, вместо него сделан жучок&lt;/li&gt;
&lt;li&gt;замечено отсутствие одной микросхемы под номером IC3. Идентифицировать по маркировке не удалось.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Вот две платы для сравнения:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2022/11/27/t530-repair-9cell-battery-with-r2j240-51f51-controller/files/20220901_171750_scale.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;А вот IC3, с маркировкой &lt;strong&gt;Q5H D6 133&lt;/strong&gt;, который идетифицировать не получилось:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2022/11/27/t530-repair-9cell-battery-with-r2j240-51f51-controller/files/Pasted_image_20220916162417_scale.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;В общем у меня создалось впечатление, что KingSenner занимается перепаковкой оригинальных батарей разной степени успешности, при этом, если на первом контроллере предохранитель был целым, то но этом не удосужились его заменить.&lt;/p&gt;
&lt;p&gt;Маркировка предохранителя: &lt;strong&gt;12AH3&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2022/11/27/t530-repair-9cell-battery-with-r2j240-51f51-controller/files/Pasted_image_20220916162641_scale.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Временно можно его восстановить при помощи сплава Розе (проверено - переплавляется встроенным нагревателем). Для этого аккуратно снимаем пластиковую крышку пассатижами (справа на картинке, с уже переплавленной перемычкой из сплава Розе):&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2022/11/27/t530-repair-9cell-battery-with-r2j240-51f51-controller/files/Pasted_image_20220916162914_scale.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;И вот картинка руководство с просторов интернетов (тема на Радиокоте):&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2022/11/27/t530-repair-9cell-battery-with-r2j240-51f51-controller/files/12AH3.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;И последний неоригинал&amp;hellip; Собран на самобытном китайском контроллере. Как его хачить и восстанавливать - хз. Хотя документация полностью доступна. Ещё он не лочится.&lt;/p&gt;
&lt;p&gt;Сам контроллер: &lt;strong&gt;SH36600AX&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2022/11/27/t530-repair-9cell-battery-with-r2j240-51f51-controller/files/Pasted_image_20220916163309_scale.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Это в той батарее, которая у меня стояла последней и которая отрубалась в неожиданные моменты времени.&lt;/p&gt;
&lt;h2 id=&#34;идея&#34;&gt;Идея&lt;/h2&gt;
&lt;p&gt;Идея была в том, что взять пакет батарей из пришедшей KingSenner и подключить к другому контроллеру.&lt;/p&gt;
&lt;p&gt;Первой попыткой стал &lt;strong&gt;BQ8030&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&#34;софт&#34;&gt;Софт&lt;/h2&gt;
&lt;p&gt;Как я понимаю, тут вариантов не очень много. Есть Bw2Works, который стоит 20к рублей за лицензию. Есть Украинский софт, тоже не бесплатный, а оплатить его, по понятным причинам, уже не получится. Есть ребята из Тайваня (???) которые разблокируют батарею удалённо через RDP, ставят временный софт и тоже хотят денежек (такие переводы тоже могут быть проблемными, не проверял).&lt;/p&gt;
&lt;p&gt;Есть нежадная версия Be2Works, которая работает только в WinXP и прекрасно чувствует себя в QEmu под KVM. Тогда как под VirtualBox ругается, что запущена под виртуалкой.&lt;/p&gt;
&lt;p&gt;Из самого дешёвого и доступного, работает через контроллеры USB-SMBus CP2112, доступные тоннами на AliExpress.&lt;/p&gt;
&lt;p&gt;И есть разработки Karosium (Viktor):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.karosium.com/p/smbusb.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.karosium.com/p/smbusb.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://github.com/karosium/smbusb&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/karosium/smbusb&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;В качестве программатора использует отладочную плату на FX2LP. Стоит, к слову, ощутимо дешевле CP2112.&lt;/p&gt;
&lt;p&gt;Волей судеб, у меня потерялся куда-то мой FX2LP, а из доступного был приобретён локально (чисто из соображений экономии времени) CP2112 с надеждой управиться через Be2Works. Забегая вперёд: Be2Works не помог, поэтому я модифицировал SMBusb для работы как с FX2LP, так и с CP2112. Точнее со вторым только под Linux, при использовании модуля &lt;code&gt;i2c-dev&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo modprobe i2c-dev
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ссылки на наработки (я добавил CMake ещё):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://github.com/h4tr3d/smbusb&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/h4tr3d/smbusb&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir build
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; build
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cmake -DDISABLE_FIRMWARE&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;On &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;      -DDISABLE_TOOLS&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;Off &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;      -DENABLE_FX2LP_PROGRAMMER&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;On &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;      -DENABLE_I2CDEV_PROGRAMMER&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;On
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make install
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Но работать с ним нужно в ручном режиме. Т.е. сканируем, делаем дамп EEPROM, правим в HEX редакторе, зашиваем обратно. Не забываем оригинальный дамп сохранить.&lt;/p&gt;
&lt;h3 id=&#34;cp2112&#34;&gt;CP2112&lt;/h3&gt;
&lt;p&gt;Перед тем, как запускать его на Windows (с Be2Works) скачайте официальный софт и заблокируйте все изменяемые параметры. Иначе можете окирпичить его для работы с Be2Works. С тулами от Karosium это не страшно. Но всё же. Имейте ввиду.&lt;/p&gt;
&lt;h2 id=&#34;батареи&#34;&gt;Батареи&lt;/h2&gt;
&lt;p&gt;Итак, главное правило:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Отпаиваем от ПЛЮСОВОГО (+) до МИНУСОВОГО (-) вывода в сторону понижения потенциала&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Припаиваем от МИНУСОВОГО (-) до ПЛЮСОВОГО (+) вывода в сторону повышения потенциала&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/blockquote&gt;
&lt;p&gt;При этих условиях скорее всего не пережжёте предохранитель и не заблокируете контроллер.&lt;/p&gt;
&lt;p&gt;Ещё вариант, это проводить все манипуляции с контроллером без подключенной батареи, подключив лабораторник по такой схеме, выставив ограничение по току в 10-30mA (такого тока не хватить принудительно пережечь предохранитель)&lt;/p&gt;
&lt;h2 id=&#34;bq8030&#34;&gt;BQ8030&lt;/h2&gt;
&lt;p&gt;Чип завёлся. Прочитался в Be2Works и SMBusb. Но не смог получить на выходе питание. Будто закрыт какой-то ключ. Или сгорел. Я не помню историю этой платы, осталось ли питание перед вскрытием батареи и чип отключился после отпайки батарей, или нет. Не важно, сходу запустить не смог.&lt;/p&gt;
&lt;p&gt;Предохранитель, к слову, целый, имеет такой вид:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2022/11/27/t530-repair-9cell-battery-with-r2j240-51f51-controller/files/Pasted_image_20221127184754.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Схема такая:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2022/11/27/t530-repair-9cell-battery-with-r2j240-51f51-controller/files/Pasted_image_20221127184824.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Маркировка: &lt;strong&gt;SEFUSE D6X / D6T&lt;/strong&gt; (
&lt;a href=&#34;http://www.atcsemitec.co.uk/pdfdocs/d6x-thermal-fuses.pdf&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;datasheet&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Вообще, у Каросима (aka Viktor) есть целая статья, посвященная предохранителям: 
&lt;a href=&#34;https://www.karosium.com/2016/09/the-weird-fuses-in-laptop-batteries.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;The weird fuses in laptop batteries&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;r2j240-51f51&#34;&gt;R2J240 51F51&lt;/h2&gt;
&lt;p&gt;Прошивка LGC. На чипе просто маркировка 51F51, выяснить, что это именно R2J240 составило определённых трудов. Предохранитель там 12AH3 (смотреть выше). Оказался сгоревшим. И правда, у меня эта батарея отказала не постепенно, а именно ВНЕЗАПНО. Как оказалось, сдохла средняя секция. Именно что сдохла. Напряжение там около нуля вольт.&lt;/p&gt;
&lt;p&gt;Что ещё можно сказать про модификацию 51F51?&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Это другой корпус: 
&lt;a href=&#34;https://www.infineon.com/cms/en/product/packages/PG-TSSOP/PG-TSSOP-38-9/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;TSSOP38&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Как следствие - другое расположение пинов BOOT и RESET.&lt;/li&gt;
&lt;li&gt;Это другое расположение данных в EEPROM (но общий подход сохраняется).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Be2Works ничего с этим чипом сделать не смог, а вот с SMBusb решил поиграться. Как писал выше, я потерял свой FX2LP, так что первое, что сделал, это адаптировал его для работы в том числе и с CP2112 (точнее любимый подобным адаптером, но другие не пробовал).&lt;/p&gt;
&lt;p&gt;Корпус имеет вид:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2022/11/27/t530-repair-9cell-battery-with-r2j240-51f51-controller/files/Pasted_image_20220916162914_scale.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Первый вывод - справа снизу.&lt;/p&gt;
&lt;p&gt;Все изыскания по этой микросхеме я выложил в комментариях к соответствующей статье Viktor&amp;rsquo;а (
&lt;a href=&#34;https://www.karosium.com/2016/08/hacking-r2j240-lgc.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Hacking the R2J240 with LGC firmware&lt;/a&gt;). Здесь продублирую на русском языке. Да и что бы бложик немного разбавить.&lt;/p&gt;
&lt;p&gt;Методом логических изысканий, измерений мультиметром (что бы не закоротить землю с VCC), были найдены следующими пины:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Pin 3 - VCC, 3.3В&lt;/li&gt;
&lt;li&gt;Pin 10 - &lt;strong&gt;BOOT&lt;/strong&gt;, 4.7k pull-up резистор к VCC. Active LOW. Т.е. притягивать нужно к земле.&lt;/li&gt;
&lt;li&gt;Pin 13 - &lt;strong&gt;RESET&lt;/strong&gt;, 5.6k pull-up резистор к VCC. Active LOW.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Что более важно, именно для этой сборки, это на какие доступный тестовые точки (TP, Test Point) выведены эти ножки: в них куда удобнее целиться по сравнению с тонкими выводами самой микросхемы:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;BOOT&lt;/strong&gt; - &lt;em&gt;TP1&lt;/em&gt;, её видно на фото выше: левее и ниже микросхемы, с той же стороны.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RESET&lt;/strong&gt; - &lt;em&gt;TP14&lt;/em&gt;, она расположена на обратной стороны платы, примерно под микросхемой. Добраться можно даже когда плата установлена в посадочные места.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Для подстраховки, подтягивайте BOOT и RESET не напрямую к земле, а через резистор 1kOm.&lt;/p&gt;
&lt;p&gt;Следующими особенностями данной микросхемы является то, что она не отвечает на запрос в регистр &lt;code&gt;CMD_READ_CLEAR_STATUS_REG&lt;/code&gt;, через который софт может мониторить процесс очистки (Erase) EEPROM перед записью. Но сама очистка работает, главное подождать. Поэтому софт был немного подправлен, что бы учитывать этот нюанс.&lt;/p&gt;
&lt;p&gt;Итак, первое, что нам нужно - снять дамп EEPROM.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ smbusb_r2j240flasher --device i2c:///dev/i2c-7 -d eep2.bin -p df2
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Сразу посмотрим отчёт для нерабочей батарейки:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ ./smbusb_sbsreport --device i2c:///dev/i2c-7
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;SMBusb Firmware Version: 0.0.0  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-------------------------------------------------  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Manufacturer Name:          LGC  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Device Name:                LNV-45N101  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Device Chemistry:           LIO  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Serial Number:              &lt;span class=&#34;m&#34;&gt;31366&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Manufacture Date:           2016.12.06  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Manufacturer Access:        &lt;span class=&#34;m&#34;&gt;1002&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Remaining Capacity Alarm:   &lt;span class=&#34;m&#34;&gt;840&lt;/span&gt; mAh&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;/10mWh&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Remaining Time Alarm:       &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt; min  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Battery Mode:               &lt;span class=&#34;m&#34;&gt;0000&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;At Rate:                    &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; mAh&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;/10mWh&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;At Rate Time To Full:       &lt;span class=&#34;m&#34;&gt;65535&lt;/span&gt; min  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;At Rate Time To Empty:      &lt;span class=&#34;m&#34;&gt;65535&lt;/span&gt; min  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;At Rate OK:                 &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Temperature:                23.65 degC  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Voltage:                    &lt;span class=&#34;m&#34;&gt;11183&lt;/span&gt; mV  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Current:                    &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; mA  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Average Current:            &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; mA  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Max Error:                  &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; %  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Relative State Of Charge    &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; %  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Absolute State Of Charge    &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; %  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Remaining Capacity:         &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; mAh&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;/10mWh&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Full Charge Capacity:       &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; mAh&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;/10mWh&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Run Time To Empty:          &lt;span class=&#34;m&#34;&gt;65535&lt;/span&gt; min  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Average Time To Empty:      &lt;span class=&#34;m&#34;&gt;65535&lt;/span&gt; min  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Average Time To Full:       &lt;span class=&#34;m&#34;&gt;65535&lt;/span&gt; min  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Charging Current:           &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; mA  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Charging Voltage:           &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; mV  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Cycle Count:                &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Cell &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; voltage:             &lt;span class=&#34;m&#34;&gt;3724&lt;/span&gt; mV  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Cell &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; voltage:             &lt;span class=&#34;m&#34;&gt;3723&lt;/span&gt; mV  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Cell &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt; voltage:             &lt;span class=&#34;m&#34;&gt;3736&lt;/span&gt; mV  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Cell &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt; voltage:             &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; mV
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Меня тут сразу смутило &amp;ldquo;Charging Current&amp;rdquo; и &amp;ldquo;Charging Voltage&amp;rdquo; установленные в ноль. Как далее оказывается и значение &amp;ldquo;Manufacturer Access&amp;rdquo; 1002 ничего хорошего не говорит.&lt;/p&gt;
&lt;p&gt;Внешний вид дампа EEPROM:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ hexdump -Cv eep2.bin    
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;00000000  00 00 00 00 00 00 00 00  ff ff ff ff ff ff ff ff  |................|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;00000010  4c 4e 56 2d 34 35 4e 31  30 31 31 00 00 00 00 00  |LNV-45N1011.....|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;00000030  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;00000040  48 03 a8 03 03 00 00 00  00 00 00 00 03 00 03 00  |H...............|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;00000050  00 00 00 00 00 00 00 00  00 00 00 23 00 00 00 00  |...........#....|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;00000060  00 00 00 68 18 d8 00 00  00 00 00 17 10 2a 00 71  |...h.........*.q|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;00000070  01 00 00 00 00 00 ff ff  d5 4c 00 00 00 00 00 00  |.........L......|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;00000080  00 00 8b 11 2b 28 ae 0c  7f 01 00 00 00 00 00 00  |....+(..........|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;00000090  48 03 a8 03 03 00 00 00  00 00 00 00 03 00 03 00  |H...............|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;000000a0  00 00 00 00 00 00 00 00  00 00 00 23 00 00 00 00  |...........#....|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;000000b0  00 00 00 68 18 d8 00 00  00 00 00 17 10 2a 00 71  |...h.........*.q|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;000000c0  01 00 00 00 00 00 ff ff  d5 4c 00 00 00 00 00 00  |.........L......|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;000000d0  00 00 8b 11 2b 28 ae 0c  7f 01 00 00 00 00 00 00  |....+(..........|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;000000e0  48 03 a8 03 03 00 00 00  00 00 00 00 03 00 03 00  |H...............|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;000000f0  00 00 00 00 00 00 00 00  00 00 00 23 00 00 00 00  |...........#....|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;00000100  00 00 00 68 18 d8 00 00  00 00 00 17 10 2a 00 71  |...h.........*.q|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;00000110  01 00 00 00 00 00 ff ff  d5 4c 00 00 00 00 00 00  |.........L......|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;00000120  00 00 8b 11 2b 28 ae 0c  7f 01 00 00 00 00 00 00  |....+(..........|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;00000130  48 03 a8 03 03 00 00 00  00 00 00 00 03 00 03 00  |H...............|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;00000140  00 00 00 00 00 00 00 00  00 00 00 23 00 00 00 00  |...........#....|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;00000150  00 00 00 68 18 d8 00 00  00 00 00 17 10 2a 00 71  |...h.........*.q|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;00000160  01 00 00 00 00 00 ff ff  d5 4c 00 00 00 00 00 00  |.........L......|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;00000170  00 00 8b 11 2b 28 ae 0c  7f 01 00 00 00 00 00 00  |....+(..........|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;00000180  48 03 a8 03 03 00 00 00  00 00 00 00 03 00 03 00  |H...............|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;00000190  00 00 00 00 00 00 00 00  00 00 00 23 00 00 00 00  |...........#....|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;000001a0  00 00 00 68 18 d8 00 00  00 00 00 17 10 2a 00 71  |...h.........*.q|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;000001b0  01 00 00 00 00 00 ff ff  d5 4c 00 00 00 00 00 00  |.........L......|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;000001c0  00 00 8b 11 2b 28 ae 0c  7f 01 00 00 00 00 00 00  |....+(..........|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;000001d0  48 03 a8 03 03 00 00 00  00 00 00 00 03 00 03 00  |H...............|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;000001e0  00 00 00 00 00 00 00 00  00 00 00 23 00 00 00 00  |...........#....|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;000001f0  00 00 00 68 18 d8 00 00  00 00 00 17 10 2a 00 71  |...h.........*.q|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;00000200  01 00 00 00 00 00 ff ff  d5 4c 00 00 00 00 00 00  |.........L......|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;00000210  00 00 8b 11 2b 28 ae 0c  7f 01 00 00 00 00 00 00  |....+(..........|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;00000220  48 03 a8 03 03 00 00 00  00 00 00 00 03 00 03 00  |H...............|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;00000230  00 00 00 00 00 00 00 00  00 00 00 23 00 00 00 00  |...........#....|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;00000240  00 00 00 68 18 d8 00 00  00 00 00 17 10 2a 00 71  |...h.........*.q|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;00000250  01 00 00 00 00 00 ff ff  d5 4c 00 00 00 00 00 00  |.........L......|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;00000260  00 00 8b 11 2b 28 ae 0c  7f 01 00 00 00 00 00 00  |....+(..........|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;00000270  48 03 a8 03 03 00 00 00  00 00 00 00 03 00 03 00  |H...............|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;00000280  00 00 00 00 00 00 00 00  00 00 00 23 00 00 00 00  |...........#....|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;00000290  00 00 00 68 18 d8 00 00  00 00 00 17 10 2a 00 71  |...h.........*.q|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;000002a0  01 00 00 00 00 00 ff ff  d5 4c 00 00 00 00 00 00  |.........L......|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;000002b0  00 00 8b 11 2b 28 ae 0c  7f 01 00 00 00 00 00 00  |....+(..........|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;000002c0  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;000002d0  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;000002e0  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;000002f0  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;00000300  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;00000310  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;00000320  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;00000330  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;00000340  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;00000350  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;00000360  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;00000370  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;00000380  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;00000390  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;000003a0  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;000003b0  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;000003c0  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;000003d0  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;000003e0  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;000003f0  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Наглядно видно несколько идентичных секций, неиспользуемые данные, очевидно - 0xFF.&lt;/p&gt;
&lt;p&gt;Первые 16 байт, кроме того, отвечают за включение секции: каждый байт содержит или FF или 00, реже - другое значение. Если FF, то секция с соответствующим номером не используется и там можно записать FF в качестве значений. Это нам поможет сэкономить на составление карты регистров: кто за что отвечает.&lt;/p&gt;
&lt;p&gt;Для начала, сохраняем оригинальный дамп, на случай восстановления.&lt;/p&gt;
&lt;p&gt;Вооружаемся HEX редактором. Пригодится любой. Я пользовался встроенным в Midnight Commander. Неплох 
&lt;a href=&#34;https://imhex.werwolv.net/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;ImHEX&lt;/a&gt;. А может кому-то окажется достаточным и Okteta из KDE.&lt;/p&gt;
&lt;p&gt;Далее, первые 16 байт, кроме самого первого выставляем в FF, а первый - 00.&lt;/p&gt;
&lt;p&gt;Затем все данные со смещения &lt;code&gt;00000090&lt;/code&gt; делаем FF.&lt;/p&gt;
&lt;p&gt;После чего приступаем к экспериментам: изменяем значения, записываем, запрашиваем репорт, смотрим, что и как поменялось.&lt;/p&gt;
&lt;p&gt;Пара советов по подбору:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Часто (но не всегда) данные в Little Endian, стоит учитывать, если значение не помещаются в один байт (0..255).&lt;/li&gt;
&lt;li&gt;Используйте программерский калькулятор для перевода значений из Dec в Hex. Мне люто нравится калькулятор из Gnome. Это единственное, что там просто огонь пламенный.&lt;/li&gt;
&lt;li&gt;Для начала пытаемся найти значения из Report, по току, остаточной ёмкости, число циклов разряда/заряда, и т.п.&lt;/li&gt;
&lt;li&gt;Потом начинаем менять другие значения, лучше байт за раз. Если поменялось значение больше 255, возможно, что рядом вторая часть этого числа.&lt;/li&gt;
&lt;li&gt;Ну и надеемся на удачу.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;У меня, в результате изысканий получилась такая карта:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Смещение / Offset&lt;/th&gt;
          &lt;th&gt;Размер/Size в байтах&lt;/th&gt;
          &lt;th&gt;Описание/Description&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;0x40&lt;/td&gt;
          &lt;td&gt;2&lt;/td&gt;
          &lt;td&gt;Remain Capacity Alarm, mAh&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;0x44&lt;/td&gt;
          &lt;td&gt;2&lt;/td&gt;
          &lt;td&gt;Remain Time Alarm, min&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;0x48&lt;/td&gt;
          &lt;td&gt;2&lt;/td&gt;
          &lt;td&gt;FCC (см ниже), mWh&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;0x46&lt;/td&gt;
          &lt;td&gt;2&lt;/td&gt;
          &lt;td&gt;Battery Mode&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;0x4C&lt;/td&gt;
          &lt;td&gt;2&lt;/td&gt;
          &lt;td&gt;Cycle Count, as is&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;0x60-0x63&lt;/td&gt;
          &lt;td&gt;1&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;TBD&lt;/strong&gt;: влияют на &amp;ldquo;Relative state of charge&amp;rdquo;, &amp;ldquo;Absolute state of charge&amp;rdquo; и &amp;ldquo;Remain Capacity&amp;rdquo;, алгоритм неясен. Не трогаем&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;0x6B&lt;/td&gt;
          &lt;td&gt;1&lt;/td&gt;
          &lt;td&gt;Похоже флаговый регистр, отвечающий в том числа за блокировку батареи (бит 4)&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;По хорошему нам нужно отредактировать FCC - Full Charge Capacity. Она не кодируется.  Для перевода mAh в mWh, нужно умножить ёмкость в mAh на Design Voltage и поделить на 10. Для батареи по схеме 3S3P (как 9-cell батарея на Thinkpad T530), Design Voltage - 11.1В.&lt;/p&gt;
&lt;p&gt;Пример расчёта для ёмкости 6000 mAh:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;6000 * 11.1 / 10 = 6660, округляем до целого и в HEX: 0x1A04
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Записываем значение в &lt;code&gt;0x48&lt;/code&gt; в виде &lt;code&gt;04 1A&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Второй полезный регистр, это флаговый &lt;strong&gt;0x6B&lt;/strong&gt;. Судя по всему он и содержит в себе флаг ошибки и он же влияет на цифру в SBS Report в поле &amp;ldquo;Manufacturer Access&amp;rdquo;. Исходное значение здесь было 0x17. Я поменял на 0x03 и значение в &amp;ldquo;Manufacturer Access&amp;rdquo; изменилось с 1002 на 0018, кроме того значения &amp;ldquo;Charging Current&amp;rdquo; из нуля стало 3500mA, а &amp;ldquo;Charging Voltage&amp;rdquo; из нуля стало 13050mV и батарея начала заряжаться. Методом исключения, выяснил, что за блокировку отвечает бит 4.&lt;/p&gt;
&lt;p&gt;Да, смещения (aka регистры, как я их иногда называю) даны относительно начала файла внутри первой секции. Если по какой-то причине вы решили редактировать ВСЕ секции, то правильные смещения высчитайте сами.&lt;/p&gt;
&lt;h2 id=&#34;калибровка&#34;&gt;Калибровка&lt;/h2&gt;
&lt;p&gt;Про Windows не скажу, для  Thinkpad T530 в Linux можно воспользоваться встроенной возможность в TLP:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tlp recalibrate
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Подробнее: 
&lt;a href=&#34;https://www.buggycoder.com/thinkpad-battery-calibration/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://www.buggycoder.com/thinkpad-battery-calibration/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Рекомендую эту процедуру провести 2-3 раза.&lt;/p&gt;
&lt;h2 id=&#34;материалы&#34;&gt;Материалы&lt;/h2&gt;
&lt;p&gt;Без информации в интернете я бы не смог побороть недуг моей батарейки, поэтому оставлю материалы тут, вдруг кому потребуется для своих исследований:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;На первом месте софт и изыскания Karosium&amp;rsquo;а: 
&lt;a href=&#34;http://www.karosium.com/p/smbusb.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.karosium.com/p/smbusb.html&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Конкретно для моей батарейки на R2J240: 
&lt;a href=&#34;https://www.karosium.com/2016/08/hacking-r2j240-lgc.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://www.karosium.com/2016/08/hacking-r2j240-lgc.html&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Там же в комментах скинули ссылку на живой дам для 51F51, который несколько помог: 
&lt;a href=&#34;https://yadi.sk/d/nJM6Hbfk3S9qnL&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://yadi.sk/d/nJM6Hbfk3S9qnL&lt;/a&gt; (но этот файл может протухнуть в любой момент времени)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Софт: 
&lt;a href=&#34;https://github.com/karosium/smbusb&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/karosium/smbusb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Моя версия с поддержкой I²C dev (проверено только с CP2112): 
&lt;a href=&#34;https://github.com/h4tr3d/smbusb&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/h4tr3d/smbusb&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Официальный софт для CP2112: 
&lt;a href=&#34;https://www.silabs.com/interface/usb-bridges/classic/device.cp2112?tab=softwareandtools&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://www.silabs.com/interface/usb-bridges/classic/device.cp2112?tab=softwareandtools&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;искать:
&lt;ul&gt;
&lt;li&gt;SimplicityStudio-5.tgz&lt;/li&gt;
&lt;li&gt;USBXpressHostSDK-Linux.tar - тут можно утилитой командной строки залочить параметры.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Описание флагов батареи: 
&lt;a href=&#34;https://forum.be2works.com/viewtopic.php?f=3&amp;amp;t=467&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;BATTERY FLAGS DESCRIPTION&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Локально: 
&lt;a href=&#34;./files/BATTERY_FLAGS_DESCRIPTION.pdf&#34;&gt;BATTERY FLAGS DESCRIPTION&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Один из тредов про батарейки: 
&lt;a href=&#34;http://monitor.espec.ws/section34/printview177710.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://monitor.espec.ws/section34/printview177710.html&lt;/a&gt;, тут я нашёл Test Point, куда BOOT и RESET выведены.&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>PCB: Castellated Holes</title>
      <link>https://htrd.su/blog/2022/11/08/pcb-castellated-holes/</link>
      <pubDate>Tue, 08 Nov 2022 01:26:56 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2022/11/08/pcb-castellated-holes/</guid>
      <description>&lt;p&gt;Они же:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Half-Cut Holes (согласно 
&lt;a href=&#34;https://zao-novator.ru/all-about-pcb/terminologiya-pechatnyh-plat/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Терминология печатных плат&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Castellated Edges&lt;/li&gt;
&lt;li&gt;Semi-plated holes&lt;/li&gt;
&lt;li&gt;Plated half-holes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;В общем речь о переходных отверстиях по краю платы, которые &amp;ldquo;разрезаны&amp;rdquo; пополам и используются для краевого монтажа собранного модуля на другую плату&amp;hellip;&lt;/p&gt;
&lt;p&gt;Вот такие:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2022/11/08/pcb-castellated-holes/files/pasted-image-20221108013251.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Пара ссылок, которые могут оказаться полезными в создании таких переходных отверстий:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://electronics.stackexchange.com/questions/469372/what-is-name-of-semi-cut-headers-in-kicad&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;What is name of semi-cut headers in KiCAD?&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Точнее ответ: 
&lt;a href=&#34;https://electronics.stackexchange.com/a/469373/142193&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://electronics.stackexchange.com/a/469373/142193&lt;/a&gt; и ссылки от туда:
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://github.com/coddingtonbear/kicad-castellated-breakouts&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/coddingtonbear/kicad-castellated-breakouts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://docs.oshpark.com/tips&amp;#43;tricks/castellation/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://docs.oshpark.com/tips+tricks/castellation/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;И на русском: 
&lt;a href=&#34;https://blog.radiotech.kz/proektirovanie/kak-sozdat-castellated-holes-v-kicad/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Как создать Castellated Holes в Kicad?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://www.voltlog.com/designing-pcbs-with-castellated-holes-voltlog-335/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Designing PCBs With Castellated Holes | Voltlog #335&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Если будут какие-то мысли или идеи по упрощению - дополню. Пока, чиста как мемориз, дабы не забыть.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Qt Creator: фикс креша при создании Generic Project</title>
      <link>https://htrd.su/blog/2022/08/11/qt-creator-fix-generic-project-manager-crash/</link>
      <pubDate>Thu, 11 Aug 2022 10:39:21 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2022/08/11/qt-creator-fix-generic-project-manager-crash/</guid>
      <description>&lt;p&gt;Yet another contribution. В общем :)&lt;/p&gt;
&lt;p&gt;Зашёл очередной фикс. Поломашка в master, и скорее всего никого пока не задела. Кроме отмороженных, кто сидит на ночных сборках или собирает сам:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://codereview.qt-project.org/c/qt-creator/qt-creator/&amp;#43;/425881&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://codereview.qt-project.org/c/qt-creator/qt-creator/+/425881&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Больше фиксов хороших и разных!&lt;/p&gt;
&lt;p&gt;UPD: и практически следом:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://codereview.qt-project.org/c/qt-creator/qt-creator/&amp;#43;/427111&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://codereview.qt-project.org/c/qt-creator/qt-creator/+/427111&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Konsole: исправлен баг с выделением окна в трее при возникновении bell</title>
      <link>https://htrd.su/blog/2022/05/26/konsole-mark-taskbar-entry-does-not-work-fixed/</link>
      <pubDate>Thu, 26 May 2022 12:39:32 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2022/05/26/konsole-mark-taskbar-entry-does-not-work-fixed/</guid>
      <description>&lt;p&gt;Наконец-то починили. Джва года ждал:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://www.mail-archive.com/kde-bugs-dist@kde.org/msg638344.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://www.mail-archive.com/kde-bugs-dist@kde.org/msg638344.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://bugs.kde.org/show_bug.cgi?id=443117&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://bugs.kde.org/show_bug.cgi?id=443117&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://invent.kde.org/utilities/konsole/-/merge_requests/573&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://invent.kde.org/utilities/konsole/-/merge_requests/573&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;В Konsole есть такая возможность: при возникновении сигнала в терминале, который генерируется, например, так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; -e &lt;span class=&#34;s1&#34;&gt;&amp;#39;\a&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;или так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tput bel
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;сделать какие-то действия.&lt;/p&gt;
&lt;p&gt;Настраивается: Меню (если выключено: Ctrl+Shift+M) → Настройка → Настроить уведомления&amp;hellip;&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;/ul&gt;
&lt;p&gt;Что бы выделить терминал в панели задач, нужно включить пункт &amp;ldquo;&lt;strong&gt;Выделить программу в панели задач&lt;/strong&gt;&amp;rdquo; и нажать Применить или Ок.&lt;/p&gt;
&lt;p&gt;Собственно, что это даёт: когда сигнал возникнет, то Konsole выделит, подсветит кнопку приложения в панели задач, примерно так:
&lt;img src=&#34;https://htrd.su/blog/2022/05/26/konsole-mark-taskbar-entry-does-not-work-fixed/files/20220526125052-konsole-selected-in-tray.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;При этом сделает это на текущем экране, вне зависимости от того, на каком рабочем столе находится приложение. А если кликнуть по ней, то автоматически активируется окно с переключением на соответствующий рабочий стол.&lt;/p&gt;
&lt;p&gt;Плюсом, что сигнал может быть и на удалённом сервере, при подключении через  SSH: терминал обрабатывает событие локально.&lt;/p&gt;
&lt;p&gt;А удобство в том, что можно запустить длительный процесс сборки и переключиться на чтение документации или кода. Или котиков в интернете смотреть. Не важно, главное, что окно покажет, что процесс завершился и стоит глянуть результат.&lt;/p&gt;
&lt;p&gt;Запуск примерно так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make -j8 &lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; tput bel
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Не стоит ставить &lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt;, или &lt;code&gt;||&lt;/code&gt;: мы же хотим среагировать при любом коде возврата &lt;code&gt;make&lt;/code&gt;? Но если нужно именно для успешного или наоборот неуспешного завершения сигнализировать, то карты вам в руки.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Переустановка системы на ноутбуке или переезд - хуже пожара</title>
      <link>https://htrd.su/blog/2022/05/23/laptop-system-reinstall/</link>
      <pubDate>Mon, 23 May 2022 10:13:09 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2022/05/23/laptop-system-reinstall/</guid>
      <description>&lt;p&gt;На днях поборол жабу, и позволил себе купить на замену стокового системного HDD HGST Travelstart Z7K500 / 500Гб, новый SSD Samsung SSD 870 EVO.&lt;/p&gt;
&lt;p&gt;Первое впечатление - систему стероидами накачали. А дальше - увлекательная процедура миграции нужного и не очень в новое окружение.&lt;/p&gt;
&lt;h2 id=&#34;бекап&#34;&gt;Бекап&lt;/h2&gt;
&lt;p&gt;Сохраняем, как миниум:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/etc&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/home&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/lib/firmware&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Остальное по желанию и возможностям. У меня полностью менялся диск, поэтому старые данные не будут удаляться ещё давно (ага, а новым, по хорошему, бекап нужен :)).&lt;/p&gt;
&lt;h2 id=&#34;uefi&#34;&gt;UEFI&lt;/h2&gt;
&lt;p&gt;Перевёл систему на использование UEFI. BIOS позволяет, но исторически загрузка была Legacy BIOS. Secure Boot выключен. Диск размечен в GPT.
Далее ничего сложного, руководство Manjaro достаточно лаконично:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://wiki.manjaro.org/index.php?title=UEFI_-_Install_Guide&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;UEFI - Install Guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;suspend--resume-на-t530&#34;&gt;Suspend / Resume на T530&lt;/h2&gt;
&lt;p&gt;Следующее, это волшебное исцеление зависания при выходе из suspend. Эти хаки больше не нужны:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;../../../../2018/04/16/padenie_xorg_posle_vyxoda_iz_suspend/&#34;&gt;Падение Xorg после выхода из suspend&lt;/a&gt; - 2018 год&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;../../../../2021/04/14/t530_freeze_on_resume_after_suspend_with_kernel_5_10/&#34;&gt;ThinkPad T530: зависание при выходе из сна на ядрах 5.10+&lt;/a&gt; - 2021 год&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;../../../../2022/02/12/t530_freeze_on_resume_after_suspend_with_kernel_5_10_again/&#34;&gt;ThinkPad T530: зависание при выходе из сна на ядрах 5.10+ (опять)&lt;/a&gt; - 2022 год, позволял работать на ядре 5.15.x&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Причём ни один из этих костылей не лечил выход из Suspend на ядрах новее 5.15. Сейчас работают все ядра.&lt;/p&gt;
&lt;p&gt;Но меня такие &amp;ldquo;волшебные&amp;rdquo; излечения всегда огорчают: судя по всему, из-за разного времени отклика в системах присутствует гонка, которая может вылезти боком в каких-то других сценариях. И ударить не менее &amp;ldquo;магически&amp;rdquo;.&lt;/p&gt;
&lt;h2 id=&#34;миграция-kde-wallet&#34;&gt;Миграция KDE Wallet&lt;/h2&gt;
&lt;p&gt;KDE хранит там всякую полезную информацию в зашифрованном виде. Тот же Akonadi хранит там креденшиналы для доступа к . Дефолтный &amp;ldquo;бумажник&amp;rdquo; разблокируется при входе.&lt;/p&gt;
&lt;p&gt;Просто переносим настройки:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;~/.local/share/kwalletd&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Желательно сделать это вне запущенной сессии KDE.&lt;/p&gt;
&lt;h2 id=&#34;миграция-korganizer-akonadi&#34;&gt;Миграция KOrganizer, Akonadi&lt;/h2&gt;
&lt;p&gt;Возможно, что настроить заново будет быстрее :)&lt;/p&gt;
&lt;p&gt;Для начала я перенёс все настройки, которые были связаны с Akonadi:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;~/.local/share/akonadi&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;~/.config/akonadi&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;у меня в &lt;code&gt;akonadiserverrc&lt;/code&gt;  прописано использовать PostgreSQL вместо MySQL.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Перетаскивать &lt;code&gt;~/.local/share/korganizer&lt;/code&gt; смысла нет, там только технические детали.&lt;/p&gt;
&lt;p&gt;Но, оказалось, что версия Postgre обновилась с 13 на 14, поэтому пришлось сделать апгрейд по руководству:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://userbase.kde.org/Akonadi/Postgres_update&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://userbase.kde.org/Akonadi/Postgres_update&lt;/a&gt;
А старая версия Postgre для миграции доступна в виде пакета &lt;code&gt;postgresql-old-upgrade&lt;/code&gt;:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo pacman -S postgresql-old-upgrade
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;На шаге &lt;code&gt;--check&lt;/code&gt; у меня выдалось пару ошибок, в результате нужно устранять, удаляя новую базу и повторяя шаг &lt;code&gt;initdb&lt;/code&gt;. В результате база была создана такой командой:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;initdb --pgdata&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$HOME&lt;/span&gt;/.local/share/akonadi/db_data --locale&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;C -E UTF8
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;После чего check прошёл без ошибок:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pg_upgrade -b /opt/pgsql-13/bin/ -B /usr/bin -d &lt;span class=&#34;nv&#34;&gt;$HOME&lt;/span&gt;/.local/share/akonadi/db_data_old -D &lt;span class=&#34;nv&#34;&gt;$HOME&lt;/span&gt;/.local/share/akonadi/db_data --check
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;И следующим шагом запускаем эту же команду, без &lt;code&gt;--check&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pg_upgrade -b /opt/pgsql-13/bin/ -B /usr/bin -d &lt;span class=&#34;nv&#34;&gt;$HOME&lt;/span&gt;/.local/share/akonadi/db_data_old -D &lt;span class=&#34;nv&#34;&gt;$HOME&lt;/span&gt;/.local/share/akonadi/db_data
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;И запускаем Akonadi:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;akonadictl start
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;На этом шаге нужно иметь KDE Wallet смигрированным.&lt;/p&gt;
&lt;h2 id=&#34;baloo&#34;&gt;Baloo&lt;/h2&gt;
&lt;p&gt;
&lt;a href=&#34;https://community.kde.org/Baloo&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;На любителя&lt;/a&gt;. Я сразу:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;balooctl disable &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; balooctl purge
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;softu2f-aka-rust-u2f&#34;&gt;softu2f aka rust-u2f&lt;/h2&gt;
&lt;p&gt;Софтовый ключ U2F. Креденшиналы хранит в gnome-keyring. Поэтому нужно его сразу поставить:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo pacman -S gnome-keyring
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Настройки:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;~/.local/share/keyrings&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Сам rust-u2f никакие настройки не предоставляет в системе достаточно:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl --system &lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt; softu2f.socket
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl --user   &lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt; softu2f.service
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl --system start softu2f.socket
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl --user   start softu2f.service
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;где нужно, он спросит пароль.&lt;/p&gt;
&lt;h2 id=&#34;wine&#34;&gt;Wine&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;TBD&lt;/strong&gt;. Точнее как, можно просто перенести &lt;code&gt;~/.wine&lt;/code&gt;, но потеряются все меню.&lt;/p&gt;
&lt;p&gt;Меня переносятся:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;~/.local/share/applications&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;~/.local/share/desktop-directories&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;~/.local/share/mime&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Дальше ещё что-то нужно сделать. Разбираюсь.&lt;/p&gt;
&lt;h2 id=&#34;xdg-пользовательские-директории&#34;&gt;XDG пользовательские директории&lt;/h2&gt;
&lt;p&gt;Речь про всяки &lt;code&gt;~/Мои Документа&lt;/code&gt; и т.п. Я не люблю их в русской локализации, поэтому привожу файл &lt;code&gt;~/.config/user-dirs.dirs&lt;/code&gt; к такому виду:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# This file is written by xdg-user-dirs-update  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# If you want to change or add directories, just edit the line you&amp;#39;re  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# interested in. All local changes will be retained on the next run  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Format is XDG_xxx_DIR=&amp;#34;$HOME/yyy&amp;#34;, where yyy is a shell-escaped  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# homedir-relative path, or XDG_xxx_DIR=&amp;#34;/yyy&amp;#34;, where /yyy is an  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# absolute path. No other format is supported.  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#    &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;XDG_DESKTOP_DIR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;$HOME/Desktop&amp;#34;&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;XDG_DOWNLOAD_DIR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;$HOME/Downloads&amp;#34;&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;XDG_TEMPLATES_DIR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;$HOME/Templates&amp;#34;&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;XDG_PUBLICSHARE_DIR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;$HOME/Shared&amp;#34;&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;XDG_DOCUMENTS_DIR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;$HOME/Documents&amp;#34;&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;XDG_MUSIC_DIR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;$HOME/Music&amp;#34;&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;XDG_PICTURES_DIR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;$HOME/Pictures&amp;#34;&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;XDG_VIDEOS_DIR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;$HOME/Video&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;А файл &lt;code&gt;~/.config/user-dirs.locale&lt;/code&gt; удаляю.&lt;/p&gt;
&lt;h2 id=&#34;t530-screen-dpi&#34;&gt;T530 Screen DPI&lt;/h2&gt;
&lt;p&gt;По всем канонам там 141 DPI. У меня настройка из двух шагов:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Задание экрану ноутбука нужного DPI. После чего приложения на Qt5/Qt6 и в среде KDE замечательно подхватят и всё сделают за вас. С Gtk всё намного гиморнее. Но это другая песнь.&lt;/li&gt;
&lt;li&gt;Указание &lt;code&gt;Xft.dpi&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Указываем через 
&lt;a href=&#34;https://wiki.archlinux.org/title/Xprofile&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;code&gt;~/.xprofile&lt;/code&gt;&lt;/a&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat &amp;gt; ~/.xprofile &lt;span class=&#34;s&#34;&gt;&amp;lt;&amp;lt; EOF
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# Setup main output DPI
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;xrandr --output LVDS-1 --dpi 141
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;EOF&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Либо просто восстанавливаем из старой домашней директории. Параметр &lt;code&gt;--output&lt;/code&gt; здесь не нужен, но затесался исторически: &lt;code&gt;--dpi&lt;/code&gt; - глобальная опция. Так сто ставим по желаемому монитору, остальные пусть подтягиваются:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://blog.summercat.com/configuring-mixed-dpi-monitors-with-xrandr.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Configuring mixed DPI monitors with xrandr&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://wiki.archlinux.org/title/HiDPI&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;ArchLinux: HiDPI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Следующим шагом указать &lt;code&gt;Xft.dpi&lt;/code&gt;. Правим &lt;code&gt;~/.Xresources&lt;/code&gt;, у меня содержимое до ужаса простое:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Xft.dpi: 141
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;После перезагрузки, можно удостоверится:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ xrdb -query    
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Xcursor.size:   &lt;span class=&#34;m&#34;&gt;24&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Xcursor.theme:  Bluecurve  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Xft.antialias:  &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Xft.dpi:        &lt;span class=&#34;m&#34;&gt;141&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Xft.hinting:    &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Xft.hintstyle:  hintslight  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Xft.rgba:       rgb
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ xdpyinfo &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep resolution:  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; resolution:    141x141 dots per inch
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;xorg-settings-legacy-way&#34;&gt;Xorg settings: legacy way&lt;/h3&gt;
&lt;p&gt;Сохраню этот блок в исторических целях. &lt;strong&gt;Сейчас этот подход у меня не работает&lt;/strong&gt;. Точнее параметры экрана замечательно считываются из EDID, драйвера это видят, как и разрешение экрана, но всё равно ставят DPI в 96.&lt;/p&gt;
&lt;p&gt;Итак. Указание физического размера экрана в миллиметрах.&lt;/p&gt;
&lt;p&gt;Для этого шага создаём &lt;code&gt;/etc/X11/xorg.conf.d/90-monitor.conf&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Section &amp;#34;Monitor&amp;#34;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       Identifier &amp;#34;LVDS-1&amp;#34;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       # DisplaySize taken from the EDID decode: 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       #   edid-decode /sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-LVDS-1/edid  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       DisplaySize 344 194
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;EndSection
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Можно линейкой померить, я взял данные из EDID:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;edid-decode /sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-LVDS-1/edid  
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;edid-decode (hex):  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;00 ff ff ff ff ff ff 00 0d ae b1 15 00 00 00 00  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;01 16 01 04 90 22 13 78 02 31 d5 9f 56 58 95 27  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;15 50 54 00 00 00 01 01 01 01 01 01 01 01 01 01  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;01 01 01 01 01 01 96 3b 80 32 71 38 3e 40 5a 3c  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;69 00 58 c2 10 00 00 1a 9b 25 80 ee 70 38 23 40  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;35 23 35 00 58 c2 10 00 00 1a 00 00 00 fe 00 56  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;43 4d 38 58 02 4e 31 35 36 48 47 0a 00 00 00 00  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;00 00 41 31 9e 00 00 00 00 02 01 0a 20 20 00 05  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;----------------  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Block 0, Base EDID:  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; EDID Structure Version &amp;amp; Revision: 1.4  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; Vendor &amp;amp; Product Identification:  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   Manufacturer: CMN  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   Model: 5553  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   Made in: week 1 of 2012  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; Basic Display Parameters &amp;amp; Features:  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   Digital display  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   Bits per primary color channel: 6  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   Digital interface is not defined  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   Maximum image size: 34 cm x 19 cm  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   Gamma: 2.20  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   Supported color formats: RGB 4:4:4  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   First detailed timing includes the native pixel format and preferred refresh rate  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; Color Characteristics:  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   Red  : 0.6210, 0.3388  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   Green: 0.3437, 0.5830  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   Blue : 0.1552, 0.0830  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   White: 0.3134, 0.3291  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; Established Timings I &amp;amp; II: none  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; Standard Timings: none  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; Detailed Timing Descriptors:  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   DTD 1:  1920x1080   60.005696 Hz  16:9     68.527 kHz    152.540000 MHz (344 mm x 194 mm)     &amp;lt;-- оно
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                Hfront   90 Hsync  60 Hback  156 Hpol P  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                Vfront    6 Vsync   9 Vback   47 Vpol N  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   DTD 2:  1920x1080   40.009642 Hz  16:9     44.611 kHz     96.270000 MHz (344 mm x 194 mm)  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                Hfront   53 Hsync  35 Hback  150 Hpol P  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                Vfront    3 Vsync   5 Vback   27 Vpol N  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   Alphanumeric Data String: &amp;#39;VCM8X&amp;#39;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   Manufacturer-Specified Display Descriptor (0x00): 00 00 00 00 41 31 9e 00 00 00 00 02 01 0a 20 20 &amp;#39;....A1........  &amp;#39;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Checksum: 0x05
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;systemd&#34;&gt;Systemd&lt;/h2&gt;
&lt;p&gt;Тут дело касается пользовательских юнитов. Переносим:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;~/.local/share/systemd/user&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;У меня там 
&lt;a href=&#34;../garmin-gpx-backup-on-mount&#34;&gt;автоматический бекап для навигатора Garmin&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;apparrmor&#34;&gt;Apparrmor&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;TBD&lt;/strong&gt;: Оказывается он включен по умолчанию на Manjaro. Нужно покурить.&lt;/p&gt;
&lt;h2 id=&#34;davmail&#34;&gt;DavMail&lt;/h2&gt;
&lt;p&gt;Основной конфиг у меня в &lt;code&gt;~/.davmail.properties&lt;/code&gt;, но дистрибуция предоставляет возможность запуска нескольких копий с разными конфигами через systemd индивидуально для пользователя.&lt;/p&gt;
&lt;p&gt;Например так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl --user &lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt; davmail@default.service
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl --user start davmail@default.service
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;default&lt;/code&gt; можно меня на что угодно в любых количествах. Конфиг при этом будет искаться в &lt;code&gt;~/.config/davmail/default.properties&lt;/code&gt;. Понятно, что вместо &lt;code&gt;default&lt;/code&gt; в имени будет то самое &amp;ldquo;что угодно&amp;rdquo;, которые вы указали в имени юнита.&lt;/p&gt;
&lt;p&gt;У меня &lt;code&gt;~/.config/davmail/default.properties&lt;/code&gt; симлинк на &lt;code&gt;~/.davmail.properties&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;qmapshack-qmaptool&#34;&gt;QMapShack, QMapTool&lt;/h2&gt;
&lt;p&gt;В &lt;code&gt;~/.QMapShack&lt;/code&gt; только кеши онлайн карт! Настройки в &lt;code&gt;~/.config/QLandkarte&lt;/code&gt;. По историческим причинам: всё это выросло из QLandKarteGT (есть на этом бложике).&lt;/p&gt;
&lt;h2 id=&#34;kicad&#34;&gt;KiCAD&lt;/h2&gt;
&lt;p&gt;Настройки в &lt;code&gt;~/.config/kicad&lt;/code&gt;, а вот всякое дополнение, типа символов и посадочных мест в &lt;code&gt;~/.local/share/kicad&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;virtualbox&#34;&gt;VirtualBox&lt;/h2&gt;
&lt;p&gt;Настройки: &lt;code&gt;~/.config/VirtualBox&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Виртуальные машины: &lt;code&gt;~/VirtualBox VMs&lt;/code&gt;&lt;/p&gt;
&lt;h2 id=&#34;t530-printscreen&#34;&gt;T530 PrintScreen&lt;/h2&gt;
&lt;p&gt;Следуем заметке: 
&lt;a href=&#34;../../../../2017/02/19/thinkpad_t530_klaviatura/&#34;&gt;ThinkPad T530: клавиатура&lt;/a&gt;, делаем из PrintScr → Menu, а Launch1 - PrintScr. Ибо нефиг.&lt;/p&gt;
&lt;h2 id=&#34;revert-to-traditional-interface-names---мы-за-традиционные-ценности-eth0-wlan0&#34;&gt;Revert to traditional interface names - мы за традиционные ценности (eth0, wlan0)&lt;/h2&gt;
&lt;p&gt;
&lt;a href=&#34;https://wiki.archlinux.org/title/Network_configuration#Revert_to_traditional_interface_names&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Знакомимся&lt;/a&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo ln -s /dev/null /etc/udev/rules.d/80-net-setup-link.rules
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;swapfile&#34;&gt;Swapfile&lt;/h2&gt;
&lt;p&gt;Да, у меня так. Если он лежал на другом диске и разделы на нём никак не трогались, то &lt;code&gt;resume_offset=&lt;/code&gt; не изменится. Нужно только не забыть добавить его в параметры Grub и сделать &lt;code&gt;update-grub&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Если поменялся, запустить:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo filefrag -v /swapfile &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep &lt;span class=&#34;s1&#34;&gt;&amp;#39;^[ \t]*0:&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Вывод:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  0:        0..       0:    3481600..   3481600:      1:
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Число с двумя точками: &lt;code&gt;3481600..&lt;/code&gt; и есть искомая величина. Естественно без точек.&lt;/p&gt;
&lt;h2 id=&#34;groups&#34;&gt;Groups&lt;/h2&gt;
&lt;p&gt;Тоже постоянно забываю.  Старый &lt;code&gt;/etc&lt;/code&gt; я сохранил в &lt;code&gt;/home/old-disk/etc&lt;/code&gt;, после чего:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat /home/old-disk/etc/group &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep -w hatred &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep -v &lt;span class=&#34;s1&#34;&gt;&amp;#39;^hatred&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; awk -F: &lt;span class=&#34;s1&#34;&gt;&amp;#39;{print $1}&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs -I&lt;span class=&#34;o&#34;&gt;{}&lt;/span&gt; sudo gpasswd -a hatred &lt;span class=&#34;o&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Некоторые группы создаются при установке некоторых пакетов, если появилось предупреждение, что какой-то группы нет, проверьте, установлен ли нужный вам пакет. Или забить.&lt;/p&gt;
&lt;h2 id=&#34;dmesg-wheel-group-access&#34;&gt;dmesg wheel group access&lt;/h2&gt;
&lt;p&gt;Читать в отдельной статье: 
&lt;a href=&#34;https://htrd.su/blog/2023/03/19/dmesg_wheel_group_access/&#34;&gt;dmesg wheel group access&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;t530-bluetooth-firmware&#34;&gt;T530 Bluetooth firmware&lt;/h2&gt;
&lt;p&gt;Лежит в:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/lib/firmware/brcm/BCM20702A1-0a5c-21e6.hcd
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp /home/old-disk/lib/firmware/brcm/BCM20702A1-0a5c-21e6.hcd /lib/firmware/brcm/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ранее доставал его из драйверов под Windows, и сопровождалось такой заметкой:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Begin reading from the link:&lt;br /&gt;

&lt;a href=&#34;http://www.slackwiki.com/Btfirmware-nonfree&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.slackwiki.com/Btfirmware-nonfree&lt;/a&gt;&lt;br /&gt;
Second useful info:&lt;br /&gt;

&lt;a href=&#34;http://askubuntu.com/questions/657392/broadcom-bluetooth-module-does-not-work-in-ubuntu-15-04-broadcom-216f-bt&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://askubuntu.com/questions/657392/broadcom-bluetooth-module-does-not-work-in-ubuntu-15-04-broadcom-216f-bt&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;И код:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget https://download.lenovo.com/ibmdl/pub/pc/pccbbs/mobiles/g4wb12ww.exe  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;innoextract g4wb12ww.exe  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp app/Win64/BCM20702A1_001.002.014.0449.0462.hex .  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hex2hcd BCM20702A1_001.002.014.0449.0462.hex -o BCM20702A1-0a5c-21e6.hcd  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo cp BCM20702A1-0a5c-21e6.hcd /lib/firmware/brcm/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;xorg-settings&#34;&gt;Xorg settings&lt;/h2&gt;
&lt;p&gt;Выше уже было про DPI экрана. Но стоит проанализировать и прочие конфиги в &lt;code&gt;/home/old-disk/etc/X11/xorg.conf.d&lt;/code&gt;&lt;/p&gt;
&lt;h2 id=&#34;logitech-mx-master&#34;&gt;Logitech MX Master&lt;/h2&gt;
&lt;p&gt;Ставим 
&lt;a href=&#34;https://github.com/PixlOne/logiops&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;logiops&lt;/a&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yay -S logiops
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Восстанавливаем конфиг &lt;code&gt;/etc/logid.cfg&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo cp /home/old-disk/etc/logid.cfg /etc/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;И включаем:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl &lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt; logid
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl start logid
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;прочее&#34;&gt;Прочее&lt;/h2&gt;
&lt;p&gt;Отдельные приложения, типа Qt Creator, Firefox, Thunderbird хранят свои настройки достаточно изолировано и можно просто скопировать нужную директорию. Поэтому особых трудностей тут возникнуть не должно.&lt;/p&gt;
&lt;p&gt;Стоит не забыть про &amp;ldquo;системные&amp;rdquo; директории типа:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;~/.fonts&lt;/code&gt; - с вашими локальными шрифтами&lt;/li&gt;
&lt;li&gt;&lt;code&gt;~/.icons&lt;/code&gt; - со схемами иконок&lt;/li&gt;
&lt;li&gt;&lt;code&gt;~/.cache&lt;/code&gt; - для там, в основном, шлак, но вдруг захочется перенести кеш &lt;code&gt;yay&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fontconfig давно переехал в &lt;code&gt;~/.config/fontconfig&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Думаю, что вспомнил далеко не всё, что ещё вылезет - буду дополнять.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Автоматическое резервное копирование при подключении навигатора Garmin GPSMAP 64s</title>
      <link>https://htrd.su/blog/2022/05/23/garmin-gpx-backup-on-mount/</link>
      <pubDate>Mon, 23 May 2022 09:30:30 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2022/05/23/garmin-gpx-backup-on-mount/</guid>
      <description>&lt;p&gt;После неудачного удаления всех точек и треков с навигатора, решил, что автоматический бекап это наше всё.&lt;/p&gt;
&lt;p&gt;Сделал средствами Systemd.&lt;/p&gt;
&lt;p&gt;Для начала определяемся с местом для бекапа, пусть это будет &lt;code&gt;~/Documents/GPX&lt;/code&gt; и создаём там скрипт &lt;code&gt;~/Documents/GPX/sync.sh&lt;/code&gt;. А внутре&amp;hellip; у ней неонка:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#!/bin/sh  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Ref:  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#  https://askubuntu.com/questions/25071/how-to-run-a-script-when-a-specific-flash-drive-is-mounted  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# `systemctl list-units -t mount`  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# &amp;#34;~/.local/share/systemd/user/garmin-backup.service&amp;#34;  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# ```  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# [Unit]  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Description=Backup GARMIN GPSMAP 64s GPX data  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# # Use output from the: `systemctl list-units -t mount`  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Requires=run-media-hatred-GARMIN.mount  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# After=run-media-hatred-GARMIN.mount  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#    &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# [Service]  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# ExecStart=/home/hatred/Documents/GPX/sync.sh  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#    &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# [Install]  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# WantedBy=run-media-hatred-GARMIN.mount  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# ```  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# `systemctl --user start garmin-backup`  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# `systemctl --user enable garmin-backup`  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Monitor:  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# ```sh  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# journalctl --user --unit garmin-backup -f  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# ```  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;prefix&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/run/media/hatred/GARMIN/Garmin/GPX&amp;#34;&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;dir&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;dirname &lt;span class=&#34;nv&#34;&gt;$0&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$dir&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Work dir: &amp;#34;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;pwd&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sleep &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;stat &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$prefix&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; 2&amp;gt; /dev/null &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\ &lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   rsync -rubv --suffix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;.old  &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$prefix&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; . &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\ &lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   touch sync_last.txt &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\ &lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   notify-send -u normal -a &lt;span class=&#34;s2&#34;&gt;&amp;#34;Garmin Sync&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Garmin GPSMAP 64s&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Backup done&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Да, я не разбирался с переменными для имени пользователя, поэтому указывал полные пути с учётом своего рабочего аккаунта: &lt;code&gt;hatred&lt;/code&gt;. Т.е. нужно будет скорректировать под себя.&lt;/p&gt;
&lt;p&gt;Следующий шаг: сам юнит. &lt;code&gt;~/.local/share/systemd/user/garmin-backup.service&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# Ref:  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#  https://askubuntu.com/questions/25071/how-to-run-a-script-when-a-specific-flash-drive-is-mounted  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# systemctl list-units -t mount  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# systemctl --user start garmin-backup.service  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# systemctl --user enable garmin-backup.service  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# journalctl --user --unit garmin-backup -f  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[Unit]  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Description=Backup GARMIN GPSMAP 64s GPX data  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Requires=run-media-hatred-GARMIN.mount  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;After=run-media-hatred-GARMIN.mount  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[Service]  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ExecStart=/home/hatred/Documents/GPX/sync.sh  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[Install]  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;WantedBy=run-media-hatred-GARMIN.mount
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Тут главное, это запуститься, когда увидим, что нужно устройство примонтировалось. У меня, когда монтируется GARMIN, он использует метку GARMIN для своего внутреннего хранилища (куда и пишутся GPX файлы). Путь для монтирования выходит &lt;code&gt;/run/media/$USER/GARMIN&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Systemd создаёт временный сервис, на который можно сослаться. Если просто, то возьмите путь монтирования, у меня это  &lt;code&gt;/run/media/hatred/GARMIN&lt;/code&gt;, замените все &lt;code&gt;/&lt;/code&gt; на &lt;code&gt;-&lt;/code&gt; (кроме первого) и добавьте в конце &lt;code&gt;.mount&lt;/code&gt;: &lt;code&gt;run-media-hatred-GARMIN.mount&lt;/code&gt;. Ну или смотрим вывод:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl list-units -t mount
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;после монтирования раздела GARMIN.&lt;/p&gt;
&lt;p&gt;А за подробностями по ссылке:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://askubuntu.com/questions/25071/how-to-run-a-script-when-a-specific-flash-drive-is-mounted&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://askubuntu.com/questions/25071/how-to-run-a-script-when-a-specific-flash-drive-is-mounted&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;После этого включаем сервис:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl --user &lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt; garmin-backup.service
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl --user start garmin-backup.service
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Последить за работой:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;journalctl --user --unit garmin-backup -f
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>ThinkPad T530: зависание при выходе из сна на ядрах 5.10&#43; (опять)</title>
      <link>https://htrd.su/blog/2022/02/12/t530_freeze_on_resume_after_suspend_with_kernel_5_10_again/</link>
      <pubDate>Sat, 12 Feb 2022 17:07:41 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2022/02/12/t530_freeze_on_resume_after_suspend_with_kernel_5_10_again/</guid>
      <description>&lt;p&gt;
&lt;a href=&#34;../../../../2021/04/14/t530_freeze_on_resume_after_suspend_with_kernel_5_10/&#34;&gt;&amp;ldquo;Никогда такого не было и вот опять&amp;rdquo; (с)&lt;/a&gt;. В этот раз зависание имеет место быть, если воткнуто какое-то USB устройство.&lt;/p&gt;
&lt;p&gt;Я уже толком не вспомню ход разбирательства, но меня смущал тот факт, что на 5.10 этой проблемы изначально не было и нет на более ранних LTS ядрах, которые имеют место быть в Manjaro (вот тот самый случай, когда несколько ядер это лютый вин).&lt;/p&gt;
&lt;p&gt;Первая мысль: помирает железо. Тем более, что в какой-то момент стало невозможно работать с мышкой Logitech MX Master, подключенный по BT. BT на ThinkPad T530 подключен по USB. Невозможность заключалась в том, что она постоянно отваливалась и подключалась опять. Лаги очень раздражали.&lt;/p&gt;
&lt;p&gt;Потом что-то меня навело на мысль, посмотреть на параметры модулей-драйверов USB:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;xhci_hcd&lt;/code&gt; - USB 3.0 (или по модному: USB 3.2 Gen1)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ehci-pci&lt;/code&gt; - USB 2.0&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Больше интересовало второе, так как все проблемные подключенцы были на USB 2.0. Выхлоп примерно такой:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ modinfo ehci-pci  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;name:           ehci_pci  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;filename:       &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;builtin&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;license:        GPL  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;file:           drivers/usb/host/ehci-pci  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;author:         Alan Stern  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;author:         David Brownell  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;description:    EHCI PCI platform driver
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;И тут меня заинтересовала эта строчка:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;filename:       (builtin)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Это означает, что модуль встроен в ядро. К слову, даже если он встроен, его параметры и интерфейс доступны через &lt;code&gt;/sys/module/&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Решил глянуть, как обстоят дела на 5.4, а там модуль собран отдельно:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ find /lib/modules/5.4.176-1-MANJARO/ -name &lt;span class=&#34;s1&#34;&gt;&amp;#39;*ehci*.ko*&amp;#39;&lt;/span&gt;   
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/lib/modules/5.4.176-1-MANJARO/kernel/drivers/usb/host/ehci-pci.ko.xz  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/lib/modules/5.4.176-1-MANJARO/kernel/drivers/usb/host/ehci-hcd.ko.xz  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/lib/modules/5.4.176-1-MANJARO/kernel/drivers/usb/host/ehci-fsl.ko.xz  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/lib/modules/5.4.176-1-MANJARO/kernel/drivers/usb/host/ehci-platform.ko.xz
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Что это означает? Всё, что встроено в ядро может инициализировать на самых ранних стадиях старта системы, ещё на этапе работы с RAM-диском (initrd) и даже вообще до подключения корневой файловой системы. А модули уже подгружаются или с initrd образа или уже с основной файловой системы, тут как настроено.&lt;/p&gt;
&lt;p&gt;Я уже сталкивался с ситуацией по работе, когда подобное различие влияло на работу системы. Получалось, что модуль, ответственный за работу одной железки стартовал достаточно рано, когда блок, генерирующий тактовый сигнал (&amp;ldquo;клок&amp;rdquo;) не неё ещё не был проинициализирован и завершал свою инициализацию с ошибкой. Типичное состояние гонки. Да, на этот случай предусмотрен специальный код возврата &lt;code&gt;EPROBE_DEFER&lt;/code&gt; и он не был использован в этот раз чисто по ошибке. Но дело в том, что когда драйвер был собран модулем, то он успешно грузился на более поздних стадиях загрузки системы и клок был проинициализирован и устройство запускалось нормально.&lt;/p&gt;
&lt;p&gt;Собственно, на этом месте, у меня, похоже, и зародилась мысль: слишком ранняя инициализация, возможно что-то не стабилизировалось и нужно попытаться как-то переинициализировать железку после старта.&lt;/p&gt;
&lt;p&gt;Самый просто способ: вынести драйвера в виде модулей. Но пересобирать ядро не хотелось. Поэтому включил логику: почти все драйвера предлагают функционал bind/unbind. Устройства на PCI шине (по крайней мере на PCIe) могут быть пересканированы (т.е. чисто теоретически PCIe - Hot Plug, но лучше не проверяйте :)). А что станет, если после загрузки, отключить железку от драйвера и потом подключить опять? Почти всё железо содержит функционал Reset настроек в исходное состояяние, что будет если сбросить и сконфигурировать всё, когда система уже готова?&lt;/p&gt;
&lt;p&gt;Сказано - сделано. И вы не поверите: после загрузки отключил USB контроллеры, подключил обратно и попытался сделать suspend. И сработало! Ядро 5.15 - resume заработал.&lt;/p&gt;
&lt;p&gt;К слову, на 5.16 сломано более сильно. И WA ниже не помогает. Сижу на 5.15.&lt;/p&gt;
&lt;p&gt;Более того, вылечился BT и мышка перестала отваливаться при работе (при работе через Logitech Unify Receiver она и так работала хорошо, но теперь и по BT стала - плюс один порт свободен).&lt;/p&gt;
&lt;p&gt;Код под катом.&lt;/p&gt;
&lt;p&gt;Его я поместил в &lt;code&gt;/etc/rc.local&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# WA: resume from suspend freezes on kernels 5.10+, when echi-pci compiled into kernel.  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Current Manjaro 5.4 LTS kernel compiled this module as module and suspend work well.  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;c1&#34;&gt;# Unbing USB 3.0 controller  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; -n &lt;span class=&#34;s2&#34;&gt;&amp;#34;0000:00:14.0&amp;#34;&lt;/span&gt; &amp;gt; /sys/bus/pci/drivers/xhci_hcd/unbind  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;c1&#34;&gt;# Unbind USB 2.0 controller  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; -n &lt;span class=&#34;s2&#34;&gt;&amp;#34;0000:00:1d.0&amp;#34;&lt;/span&gt; &amp;gt; /sys/bus/pci/drivers/ehci-pci/unbind  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; -n &lt;span class=&#34;s2&#34;&gt;&amp;#34;0000:00:1a.0&amp;#34;&lt;/span&gt; &amp;gt; /sys/bus/pci/drivers/ehci-pci/unbind  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;c1&#34;&gt;# Unbing USB 3.0 controller  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; -n &lt;span class=&#34;s2&#34;&gt;&amp;#34;0000:00:14.0&amp;#34;&lt;/span&gt; &amp;gt; /sys/bus/pci/drivers/xhci_hcd/bind  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;c1&#34;&gt;# Bind USB 2.0 again  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; -n &lt;span class=&#34;s2&#34;&gt;&amp;#34;0000:00:1d.0&amp;#34;&lt;/span&gt; &amp;gt; /sys/bus/pci/drivers/ehci-pci/bind  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; -n &lt;span class=&#34;s2&#34;&gt;&amp;#34;0000:00:1a.0&amp;#34;&lt;/span&gt; &amp;gt; /sys/bus/pci/drivers/ehci-pci/bind  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;У меня он обрабатывается через юнит systemd - &lt;code&gt;rc-local.service&lt;/code&gt;, расположенный &lt;code&gt;/etc/systemd/system/rc-local.service&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-systemd&#34; data-lang=&#34;systemd&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;[Unit]&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;Description&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;/etc/rc.local Compatibility  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;ConditionPathExists&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;/etc/rc.local  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;[Service]&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;Type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;forking  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;ExecStart&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;/etc/rc.local start  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;TimeoutSec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;0  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;StandardOutput&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;tty  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;RemainAfterExit&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;yes  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;SysVStartPriority&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;99  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;[Install]&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;WantedBy&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;multi-user.target&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;У вас в системе возможно уже есть что-то, что обрабатывает это без лишней писанины, ну или делайте свой юнит.&lt;/p&gt;
&lt;p&gt;Адреса нужных PCI устройство смотрим в выводе &lt;code&gt;lspci&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ lspci -Dnn &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep USB  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;0000:00:14.0 USB controller &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;0c03&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;: Intel Corporation &lt;span class=&#34;m&#34;&gt;7&lt;/span&gt; Series/C210 Series Chipset Family USB xHCI Host Controller &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;8086:1e31&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;rev 04&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;0000:00:1a.0 USB controller &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;0c03&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;: Intel Corporation &lt;span class=&#34;m&#34;&gt;7&lt;/span&gt; Series/C216 Chipset Family USB Enhanced Host Controller &lt;span class=&#34;c1&#34;&gt;#2 [8086:1e2d] (rev 04)  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;0000:00:1d.0 USB controller &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;0c03&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;: Intel Corporation &lt;span class=&#34;m&#34;&gt;7&lt;/span&gt; Series/C216 Chipset Family USB Enhanced Host Controller &lt;span class=&#34;c1&#34;&gt;#1 [8086:1e26] (rev 04)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Параметр &lt;code&gt;-D&lt;/code&gt; добавляет вывод домена PCI. Ядро оперирует с полным адресом:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;domain:bus:device.function
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;lspci&lt;/code&gt;, по у молчанию, выводит в форме:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bus:device.function
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Это, так называемая, 
&lt;a href=&#34;https://wiki.xenproject.org/wiki/Bus:Device.Function_%28BDF%29_Notation&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;BDF нотация&lt;/a&gt;, а версия с доменом - Extended BDF Notation. Переход от BDF к Extended BDF происходит путём добавления &lt;code&gt;0000:&lt;/code&gt; в начало записи.&lt;/p&gt;
&lt;p&gt;Подробную топологию можно посмотреть через &lt;code&gt;lspci -tv&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ lspci -tv  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;0000:00&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;-+-00.0  Intel Corporation 3rd Gen Core processor DRAM Controller  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          +-01.0-&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;01&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;--+-00.0  NVIDIA Corporation GF108M &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;NVS 5400M&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;            &lt;span class=&#34;se&#34;&gt;\-&lt;/span&gt;00.1  NVIDIA Corporation GF108 High Definition Audio Controller  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          +-02.0  Intel Corporation 3rd Gen Core processor Graphics Controller  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          +-14.0  Intel Corporation &lt;span class=&#34;m&#34;&gt;7&lt;/span&gt; Series/C210 Series Chipset Family USB xHCI Host Controller  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          +-16.0  Intel Corporation &lt;span class=&#34;m&#34;&gt;7&lt;/span&gt; Series/C216 Chipset Family MEI Controller &lt;span class=&#34;c1&#34;&gt;#1  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          +-16.3  Intel Corporation &lt;span class=&#34;m&#34;&gt;7&lt;/span&gt; Series/C210 Series Chipset Family KT Controller  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          +-19.0  Intel Corporation 82579LM Gigabit Network Connection &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;Lewisville&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          +-1a.0  Intel Corporation &lt;span class=&#34;m&#34;&gt;7&lt;/span&gt; Series/C216 Chipset Family USB Enhanced Host Controller &lt;span class=&#34;c1&#34;&gt;#2  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          +-1b.0  Intel Corporation &lt;span class=&#34;m&#34;&gt;7&lt;/span&gt; Series/C216 Chipset Family High Definition Audio Controller  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          +-1c.0-&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;02&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;--+-00.0  Ricoh Co Ltd PCIe SDXC/MMC Host Controller  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;            &lt;span class=&#34;se&#34;&gt;\-&lt;/span&gt;00.3  Ricoh Co Ltd R5C832 PCIe IEEE &lt;span class=&#34;m&#34;&gt;1394&lt;/span&gt; Controller  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          +-1c.1-&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;03&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;----00.0  Intel Corporation Centrino Advanced-N &lt;span class=&#34;m&#34;&gt;6205&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;Taylor Peak&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          +-1c.2-&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;04-0b&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;--  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          +-1d.0  Intel Corporation &lt;span class=&#34;m&#34;&gt;7&lt;/span&gt; Series/C216 Chipset Family USB Enhanced Host Controller &lt;span class=&#34;c1&#34;&gt;#1  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          +-1f.0  Intel Corporation QM77 Express Chipset LPC Controller  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          +-1f.2  Intel Corporation &lt;span class=&#34;m&#34;&gt;7&lt;/span&gt; Series Chipset Family 6-port SATA Controller &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;AHCI mode&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;se&#34;&gt;\-&lt;/span&gt;1f.3  Intel Corporation &lt;span class=&#34;m&#34;&gt;7&lt;/span&gt; Series/C216 Chipset Family SMBus Controller
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Рекомендую почитать:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://habr.com/ru/post/348042/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Разработка драйвера PCI устройства под Linux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://wiki.xenproject.org/wiki/Bus:Device.Function_%28BDF%29_Notation&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Bus:Device.Function (BDF) Notation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Qt Creator: подтасовка триплета архитектуры для кодовой модели</title>
      <link>https://htrd.su/blog/2022/02/12/qt-creator-gcc-triplet-override/</link>
      <pubDate>Sat, 12 Feb 2022 16:27:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2022/02/12/qt-creator-gcc-triplet-override/</guid>
      <description>&lt;p&gt;Что текущий основной парсер, что грядущий (или нагрянувший, как посмотреть) парсер на clangd работают поверх libclang и сотоварищи и умеют разбирать то, что умеет собирать clang.&lt;/p&gt;
&lt;p&gt;Внезапно, он умеет не всё. И это не всё, к примеру, отлично умеет GCC. Вот то, с чем я столкнулся сам:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://www.espressif.com/en/products/socs/esp32&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;ESP32&lt;/a&gt; - архитектура (настраиваемая) Xtensa. Кратко (и возможно неточно), можно почитать на 
&lt;a href=&#34;https://ru.wikipedia.org/wiki/ESP32&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Википедии&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://www.xilinx.com/products/design-tools/microblaze.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;MicroBlaze&lt;/a&gt; - 32/64 bit RISC софтовый микропроцессор от Xilinx. Кратко тоже смотрим на 
&lt;a href=&#34;https://ru.wikipedia.org/wiki/MicroBlaze&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Википедии&lt;/a&gt;. Для работы с ним, к слову, писал 
&lt;a href=&#34;https://github.com/h4tr3d/gdbproxy&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;asio-gdbproxy&lt;/a&gt; (
&lt;a href=&#34;../../../../2019/04/11/mitm-like-gdb-rtos-support&#34;&gt;MitM-like поддержка RTOS в GDB&lt;/a&gt;).
&lt;ul&gt;
&lt;li&gt;Его ещё раньше рассматривал в этой заметке: 
&lt;a href=&#34;../../../../2019/04/30/qtc-with-microblaze&#34;&gt;Qt Creator и MicroBlaze&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;del&gt;Под катом будет хак, который я использовал, что бы запуститься и работать с этим добром.&lt;/del&gt; UPD: хак больше не работает, так как этот код вообще удалён из репозитория QtC ветки master на момент 23.05.2022.&lt;/p&gt;
&lt;p&gt;Но сейчас не об этом. Просматривая изменения в апстриме, наткнулся на этот коммит:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://github.com/qt-creator/qt-creator/commit/6cec0e203315bd2357893c92eef93375a890eb3c&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;ProjectExplorer: Allow users to override the gcc target triple&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;И визуально это выглядит так:
&lt;img src=&#34;https://htrd.su/blog/2022/02/12/qt-creator-gcc-triplet-override/files/pasted_image_20220212164219.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Похоже, жизнь станет проще. К сожалению, мне сейчас не на чем проверить. Как только дойдут руки, то обязательно это сделаю. Как минимум, есть ещё нюанс с неподдерживаемыми параметрами командной строки, но оно сейчас 
&lt;a href=&#34;https://bugreports.qt.io/browse/QTCREATORBUG-22329&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;обходится&lt;/a&gt; так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Hack QtC Clang:  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# https://bugreports.qt.io/browse/QTCREATORBUG-22329  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;QTC_CLANG_CMD_OPTIONS_BLACKLIST&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;-mxl-soft-mul;-mlongcalls;-fstrict-volatile-bitfields&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Данная функциональность, судя по 
&lt;a href=&#34;https://github.com/qt-creator/qt-creator/blob/master/dist/changes-7.0.0.md&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;этому&lt;/a&gt; списку изменений будет доступна в Qt Creator 7.0, т.е. совсем скоро:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://wiki.qt.io/Qt_Creator_Releases&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://wiki.qt.io/Qt_Creator_Releases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://www.qt.io/blog/qt-creator-7-beta-released&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://www.qt.io/blog/qt-creator-7-beta-released&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ну а ниже, как обещал - костыль. Требует пересборки Qt Creator из исходников.&lt;/p&gt;
&lt;p&gt;UPD: 23.05.2022: этого кода больше нет в master ветке, сохраняю только для истории.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-diff&#34; data-lang=&#34;diff&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;diff --git a/src/tools/clangbackend/source/clangtranslationunitupdater.cpp b/src/tools/clangbackend/source/clangtranslationunitupdater.cpp  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;index 0383a1028f..6aedc231c4 100644  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gd&#34;&gt;--- a/src/tools/clangbackend/source/clangtranslationunitupdater.cpp  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gi&#34;&gt;+++ b/src/tools/clangbackend/source/clangtranslationunitupdater.cpp  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gu&#34;&gt;@@ -106,22 +106,48 @@ void TranslationUnitUpdater::createTranslationUnitIfNeeded()  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;&lt;/span&gt; if (!m_cxTranslationUnit) {  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; m_cxTranslationUnit = CXTranslationUnit();  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-        const auto args = commandLineArguments();  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-        if (isVerboseModeEnabled())  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-            args.print();  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-        UnsavedFilesShallowArguments unsaved = m_in.unsavedFiles.shallowArguments();  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-        m_parseErrorCode = clang_parseTranslationUnit2(m_cxIndex,  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-                                                     nullptr,  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-                                                     args.data(),  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-                                                     args.count(),  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-                                                     unsaved.data(),  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-                                                     unsaved.count(),  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-                                                     defaultParseOptions(),  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-                                                     &amp;amp;m_cxTranslationUnit);  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gi&#34;&gt;+        auto compilationArguments = m_in.compilationArguments;  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+        for (int i = 0; i &amp;lt; 2; ++i) {  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+            const auto args = CommandLineArguments(m_in.filePath.constData(),  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+                                                   compilationArguments,  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+                                                   isVerboseModeEnabled());  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+            if (isVerboseModeEnabled())  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+                args.print();  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+            UnsavedFilesShallowArguments unsaved = m_in.unsavedFiles.shallowArguments();  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+            m_parseErrorCode = clang_parseTranslationUnit2(m_cxIndex,  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+                                                           nullptr,  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+                                                           args.data(),  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+                                                           args.count(),  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+                                                           unsaved.data(),  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+                                                           unsaved.count(),  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+                                                           defaultParseOptions(),  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+                                                           &amp;amp;m_cxTranslationUnit);  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+            if (parseWasSuccessful()) {  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+                break;  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+            }  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+            // Give a second chance without `--target=xxx` option:  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+            // LLVM does not support all GCC targets, like: Microblaze, Xtensa and so on  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+            // in such cases, parsing fails. By default, LLVM fallback to i386 or x86_64 targets  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+            // according -m32/-m64 options.  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+            int j;  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+            for (j = 0; j &amp;lt; compilationArguments.count(); ++j) {  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+                if (compilationArguments.at(j).startsWith(&amp;#34;--target=&amp;#34;))  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+                    break;  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+            }  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+            if (j &amp;lt; compilationArguments.count()) {  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+                compilationArguments.remove(j);  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+            } else {  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+                // `--target=` not found  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+                break;  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+            }  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+        }  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt;   
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; if (parseWasSuccessful()) {  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; updateIncludeFilePaths();  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;@@ -217,11 +243,4 @@ bool TranslationUnitUpdater::reparseWasSuccessful() const  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;&lt;/span&gt; return m_reparseErrorCode == 0;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;}  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-CommandLineArguments TranslationUnitUpdater::commandLineArguments() const  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-{  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-    return CommandLineArguments(m_in.filePath.constData(),  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-                                m_in.compilationArguments,  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-                                isVerboseModeEnabled());  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-}  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt;} // namespace ClangBackEnd  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;diff --git a/src/tools/clangbackend/source/clangtranslationunitupdater.h b/src/tools/clangbackend/source/clangtranslationunitupdater.h  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;index a0f0d0ba3b..fa535e2c69 100644  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gd&#34;&gt;--- a/src/tools/clangbackend/source/clangtranslationunitupdater.h  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gi&#34;&gt;+++ b/src/tools/clangbackend/source/clangtranslationunitupdater.h  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gu&#34;&gt;@@ -85,7 +85,6 @@ public:  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;&lt;/span&gt;   
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; TranslationUnitUpdateResult update(UpdateMode mode);  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-    CommandLineArguments commandLineArguments() const;  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt; static uint defaultParseOptions();  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;private:
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Собственно здесь и убирается &lt;code&gt;--target=&lt;/code&gt; которому передаётся триплет, в случае если разбор с ним не удался. И пытаемся сделать fall-back на основе &lt;code&gt;-m32&lt;/code&gt;/&lt;code&gt;-m64&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;А вылавливать косяки в кодовой модели, пока, можно так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Clang Code model debug  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;QT_LOGGING_RULES&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;qtc.clang*&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;QTC_CLANG_NO_DIAGNOSTIC_CHECK&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Почему пока? Потому, как эти флаги к встроенной реализации поверх libclang. Разработчики же сейчас 
&lt;a href=&#34;../qt-creator-7-clangd&#34;&gt;взяли курс&lt;/a&gt; на миграцию на clangd.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Qt Creator 7: clangd</title>
      <link>https://htrd.su/blog/2022/02/12/qt-creator-7-clangd/</link>
      <pubDate>Sat, 12 Feb 2022 13:13:38 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2022/02/12/qt-creator-7-clangd/</guid>
      <description>&lt;p&gt;Тут обновлял свой 
&lt;a href=&#34;https://github.com/h4tr3d/cmakeprojectmanager2&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;CMakeProjectManager2&lt;/a&gt; и краем глаза заметил добавление файла 
&lt;a href=&#34;https://github.com/qt-creator/qt-creator/blob/master/dist/changes-7.0.0.md&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;dist/changes-7.0.0.md&lt;/a&gt;. Решил перечитать (с некоторыми изменениями я сталкиваюсь регулярно, так как живу на master-ветке).&lt;/p&gt;
&lt;p&gt;Там фигурирует:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;### C++  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;*&lt;/span&gt; Switched to Clangd by default (QTCREATORBUG-22917)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;И таки да, они переключились на кодовую модель от Clangd. Оно появилось ещё раньше, где-то к версии 6.0, но была выключена. Можно ознакомиться с анонсом из первоисточника: 
&lt;a href=&#34;https://www.qt.io/blog/qt-creator-and-clangd-an-introduction&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Qt Creator and clangd: An Introduction&lt;/a&gt;. Или почитать 
&lt;a href=&#34;https://www.phoronix.com/forums/forum/software/programming-compilers/1293991-qt-creator-6-released-for-this-c-focused-ide-clangd-now-fully-supported&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;комментарии&lt;/a&gt; к соответствующей 
&lt;a href=&#34;https://www.phoronix.com/scan.php?page=news_item&amp;amp;px=Qt-Creator-6.0&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;новости&lt;/a&gt; на Phoronix.&lt;/p&gt;
&lt;p&gt;В частности, они там объясняют причины. Основная (как мне кажется): libclang больше активно не развивается и для полноценной навигации, рефакторинга и прочего приходится держать две модели.&lt;/p&gt;
&lt;p&gt;Там же они рекомендуют использовать самую последнюю версию clangd. Так что ссылки ниже ваши други:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://clangd.llvm.org/installation.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://clangd.llvm.org/installation.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://github.com/clangd/clangd/releases&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/clangd/clangd/releases&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ну а теперь мои личные впечатления&amp;hellip; Точнее табличка, которую я для себя составил. Плюсы и минусы.&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;Как мне показалось, лучше парсит, более точно видит использование символа&lt;/td&gt;
          &lt;td&gt;Парсит долго. Нет, не так. ОЧЕНЬ ДОЛГО!&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;База постоянная, т.е. сохраняется между запусками и инкрементно обновляется&lt;/td&gt;
          &lt;td&gt;Пока парсит, отъедает много памяти. Потом немного возвращает.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;Если отстреливается (например по нехватке памяти от earlyoom или nohang), &lt;br&gt;                                                                                то перезапускается только два раза, потом нужно перезапускать IDE или &lt;br&gt;                                                                                перегружать проект&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;В итоге жрёт памяти примерно в два раза больше, чем без него. Это следствие того,&lt;br&gt;                                                                                что по факту, оба парсера сейчас работают в параллель, дополняя друг друга.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;И самое гнусное: постоянные подвисания редактора кода при вводе. Это очень&lt;br&gt;сильно раздражает.&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;В сухом остатке, если бы не последний пункт недостатков, то с его работой можно было бы мириться.&lt;/p&gt;
&lt;p&gt;По памяти тоже минус. Но для больших проектов (у меня ядро Linux 4.19-Xilinx из комплекта PetaLinux 2019.2 через Generic Project подключено) его можно отключить (пока):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;В данный момент можно выключить Clangd глобально и включать только для отдельных проектов в их настройках.&lt;/li&gt;
&lt;li&gt;Или включить глобально и выключать для отдельных проектов.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;В любом случае, считаю, что переключаться на него, как на дефолтный парсер явно преждевременно. И особенно преждевременно заявлять о полном переходе на него. Хотя причины такого понятны: получить больше фидбека. Но лаги при вводе&amp;hellip; это же вообще ставит крест на юзабилити.&lt;/p&gt;
&lt;p&gt;PS это напомнило на возникающие лаги, при работе в Emacs при подключении Language Server или даже ещё раньше, всяких автокомплитеров и т.п.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Траверс г.Острая или закрываем гештальты</title>
      <link>https://htrd.su/blog/2022/01/07/ostraya-mt-traverse/</link>
      <pubDate>Fri, 07 Jan 2022 00:54:18 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2022/01/07/ostraya-mt-traverse/</guid>
      <description>&lt;p&gt;В 
&lt;a href=&#34;https://htrd.su/blog/2016/01/31/malyj_travers_botanicheskogo_xrebta_i_g.ostraja_po_s-z_grebnju/&#34;&gt;2016&lt;/a&gt; году (а в 
&lt;a href=&#34;https://htrd.su/blog/2020/02/16/mt_ostraya/&#34;&gt;2020&lt;/a&gt; дошли по Большой Пионерской) уже была  попытка добраться до Острой по хребту, пробираясь по &amp;ldquo;милым Приморским рощам&amp;rdquo; (они же: &amp;ldquo;Южный Лес&amp;rdquo;). В этом году решил закрыть этот гештальт, плюс размять ногу после микротравмы на пробежке.&lt;/p&gt;
&lt;p&gt;Итак, как обычно, планировалось одно, а получилось&amp;hellip; то что получилось. Планировали сходить траверс Суходол-Туманная с заходом на водопады и выходом в Тигровой. Но 31 декабря на пробежке круто свело левую ногу, возможно плохо размял мышцы перед стартом, но не суть. Решил дать отдых от больших нагрузок, поэтому траверс на Туманную отменился и&amp;hellip; заменился другим траверсом. В общем, решил расходить ногу и, как выше писал, закрыть гештальт с Острой по хребту&amp;hellip; По Милым Приморским рощам ломился как слон. Немного облажался и забыл взять гамаши, благо на штанах по низу резинка и снега немного, но всё равно, постоянно приходилось поправлять и одёргивать штанины. В лесу очень много ветровала после последних сильных тайфунов, кроме того много сломанных веток, как напоминание о ледяном дожде 2020 года.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211191459-dcdfd052-ab82-47ea-80be-57dff06b8669.png&#34; alt=&#34;map&#34;&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Длина: 21km, ↗1030 m, ↘1035m  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Время: 07:02:32h, скорость: 3.0km/h  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;В движении: 05:52:18h, скорость: 3.6km/h  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Начало: четверг, 6 января 2022 г. 13:00:44 +10  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Конец: четверг, 6 января 2022 г. 20:03:16 +10  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Точки: 3002 (3002)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211191468-fc9c8985-5f44-45d9-ad16-7dde1c22297e.png&#34; alt=&#34;profile&#34;&gt;&lt;/p&gt;
&lt;p&gt;Маршрут в этот раз решил начинать не через дырку в заборе, по пройтись через видовую площадку над Пионерским водохранилищем, есть какое-то народное название, но мне эти мифы древней Эллады не особо заходят. Но красивого вида это не отменяет :)&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://user-images.githubusercontent.com/102082/211191542-8a0672e8-74f1-4f63-a0d6-a605320f2d7f.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211191669-8e102e4e-71c1-4f43-b1f3-c7758ecc7f67.jpg&#34; alt=&#34;20220106_133948&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Где-то там Острая. А на водохранилище это не вода, а лёд! Вода застывала очень быстро, и остатки снега сделали &amp;ldquo;волны&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://user-images.githubusercontent.com/102082/211191540-2ee54f71-394f-4c24-b78f-ce5c6fe0c4a8.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211191664-4506e206-58be-42ee-b7bc-32b353564565.jpg&#34; alt=&#34;20220106_133958&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://user-images.githubusercontent.com/102082/211191539-865754bb-8d27-4a39-930d-cff3d177be12.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211191663-7e070d01-543f-4ed0-9c74-ddf105f469df.jpg&#34; alt=&#34;20220106_134006&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Уважаю отдыхающих культурно людей&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://user-images.githubusercontent.com/102082/211191537-db682e58-bb27-496b-a20e-ce58cf84c809.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211191661-e11fb349-1b66-478e-b673-0f33c68a4736.jpg&#34; alt=&#34;20220106_140748&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Зачем-то раньше выломился на ЛЭП, но всё равно симпотяво.&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://user-images.githubusercontent.com/102082/211191533-c9da4363-6abe-4377-be5f-2b48fd01ed2f.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211191658-2c3581a9-ab35-499f-9dc0-2edf245e5595.jpg&#34; alt=&#34;20220106_142832&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;От левой опоры влево, в объятия Морф&amp;hellip; тьфу, в объятия милых Приморских рощ!&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://user-images.githubusercontent.com/102082/211191531-131625a2-3125-47a3-a8f3-0be0046bf3b2.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211191657-7bf852e2-931e-4c1a-b6f0-817d6157ba99.jpg&#34; alt=&#34;20220106_142842&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;А вот и они! К слову, видишь тропу? Нет? И правильно! Её нет. Но когда это нас останавливало?&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://user-images.githubusercontent.com/102082/211191530-bb167b09-0d36-4cf6-91a2-2e276f1fd006.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211191656-8e9d1628-dec0-4f06-a7c6-735ff1ccbca9.jpg&#34; alt=&#34;20220106_144743&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;По хребту очень много (я повторяюсь) ветровала. Здоровенные деревья лежат с вывернутыми корнями. Это очень удобные места для организации привала и бивака (мы ещё к этому вернёмся). Но и пробираться по завалам тоже такое себе удовольствие. В общем, как обычно, везде есть свои плюсы и минусы.&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://user-images.githubusercontent.com/102082/211191529-2a96447d-1bca-45cc-b38e-9a196c0b8fb2.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211191654-26dcd08e-ecf7-4009-a1f7-7aec47fe5c55.jpg&#34; alt=&#34;20220106_145342&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://user-images.githubusercontent.com/102082/211191528-73e739fb-d00d-4345-ba4d-1e917c54b3f6.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211191652-b0796d28-76e2-485d-8d77-8612079e0c9e.jpg&#34; alt=&#34;20220106_145820&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://user-images.githubusercontent.com/102082/211191527-d8d13efd-624f-4021-ada5-442a183f1555.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211191649-b7371354-f695-433d-9331-25a6b975c96d.jpg&#34; alt=&#34;20220106_145823&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Это две небольшие панорамы, откройте в полном размере.&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://user-images.githubusercontent.com/102082/211191523-3c366660-7d9f-4f1c-b664-facebe27aead.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211191648-194eec06-53a5-486d-831f-809dcf012261.jpg&#34; alt=&#34;20220106_145831&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://user-images.githubusercontent.com/102082/211191520-feb462d9-21e1-4b3b-8937-29e6731c75f6.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211191646-f521f593-cfbd-4340-8ed6-78df0cf89c52.jpg&#34; alt=&#34;20220106_150150&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Война войной, а обед по расписанию! Вот и пример организации бивака под вывернутым корнем. Дым поднимается вдоль стенки, а тепло отражается от неё. Плюс защита от ветра. Так и переночевать можно, благо и веток рядом тьма: дрова для костра собирались в радиусе 3-4 метров от остановки.&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://user-images.githubusercontent.com/102082/211191512-31a1bd61-a895-41b6-adb4-ccd598acea0e.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211191645-cd360990-c093-4563-bec7-0156e49aa2f8.jpg&#34; alt=&#34;20220106_160826&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Более общий вид.&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://user-images.githubusercontent.com/102082/211191509-3e129907-b58c-4e5e-92e8-ca11dbb53aba.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211191644-7118b9b8-63bb-4bf2-a8b7-bb689280a29b.jpg&#34; alt=&#34;20220106_160836&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Помимо ветровала ещё много поломанных веток после ледяного дождя:&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://user-images.githubusercontent.com/102082/211191505-66465eec-ce9c-4421-8741-12f8cecf73fc.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211191643-90bfa192-dd24-48d3-9ad8-b767aca2c753.jpg&#34; alt=&#34;20220106_171424&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Солнце, тем временем, клонится к закату, приобретая характерные оттенки. А фонарик-то дома! Ладно, прикидываю, что смогу прорваться до заката и успеть до темноты спуститься на дорогу вдоль Малой Пионерской&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://user-images.githubusercontent.com/102082/211191498-d78b10cb-b739-49b4-85f4-eb305d8416aa.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211191641-2a09d372-f5bf-4adf-a993-86452cefc45d.jpg&#34; alt=&#34;20220106_171438&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;А вот и вершина! Спасибо местным кабанам и прочим кабаргам, что натропили по снегу и сделали намётки на тропу! Реально легче продираться было!&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://user-images.githubusercontent.com/102082/211191497-d4afa09e-51f7-45df-95f3-1c5560b1dbce.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211191640-471595e3-6a44-403b-8885-0bcf1b18ce5c.jpg&#34; alt=&#34;20220106_174637&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://user-images.githubusercontent.com/102082/211191494-c42ba8a4-4ffe-411f-acb7-a029943ffa1e.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211191636-a875a098-c28a-4568-9d34-e6f844988093.jpg&#34; alt=&#34;20220106_174655&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;После вершины фото особо не делал - нужно было быстрее скакать, обгоняя темноту :) И да, оказывается, зажигалки с фонариком это не хухры-мухры, а очень полезный элемент НЗ. Реально, буквально перед выходом купил, а на обратном пути очень пригодилась.&lt;/p&gt;
&lt;p&gt;Ну и по аналогии с предыдущим выходом по траверсу, прикладываю список использованного снаряжения:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Термуха
&lt;ol&gt;
&lt;li&gt;верх&amp;hellip; ох, я уже даже не помню, что за производитель&lt;/li&gt;
&lt;li&gt;них, что-то от Ozone&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Кофта Polar 100 (Red Fox Pinguin, уже 10 лет, аднака)&lt;/li&gt;
&lt;li&gt;Софтшелка: Сирин (Sivera), уже в стадии доживания своих дней: почти все молнии отказали. Может ещё сменю собачки. Для города уже прикупил обновлённую модель, нужно и для леса взять.&lt;/li&gt;
&lt;li&gt;Пуховка: Волин 2.0 (Sivera)&lt;/li&gt;
&lt;li&gt;Шапка: Хант (Sivera)&lt;/li&gt;
&lt;li&gt;Ботинки: Asolo Greenwood GV MM&lt;/li&gt;
&lt;li&gt;Гамаши: ЗАБЫЛ!!!&lt;/li&gt;
&lt;li&gt;Брюки: СПЛАВ Panzer Hard - стоят недорого и угробить не жалко (ага, сначала попытайся)&lt;/li&gt;
&lt;li&gt;Перчатки-варежки: какие-то флисовые, случайно найденные дома&lt;/li&gt;
&lt;li&gt;Нафигатор: Garmin GPSMAP 64s&lt;/li&gt;
&lt;li&gt;Фляга: Nalgene 1L, два штука. Хватило бы и одной.&lt;/li&gt;
&lt;li&gt;Горелка: Kovea Camp-1 (&amp;ldquo;консерва&amp;rdquo;)&lt;/li&gt;
&lt;li&gt;Кружка-котелок: титашка от Snow Peak&lt;/li&gt;
&lt;li&gt;Ложка: титашка от Урал ВСМПО&lt;/li&gt;
&lt;li&gt;Тарелка: титашка от Snow Peak&lt;/li&gt;
&lt;li&gt;Нож: кондовый китаец Enlan EL-01&lt;/li&gt;
&lt;li&gt;Котелок: китайский Bulin на 2L (или меньше) с теплообменником&lt;/li&gt;
&lt;li&gt;Ветрозащита для горелки, кто автор - хз&lt;/li&gt;
&lt;li&gt;Газ в цанговых баллонах, пришлось руками отогревать, что бы стартанул нормально&lt;/li&gt;
&lt;li&gt;Какая-то хоба из Спецназ-комплекта&lt;/li&gt;
&lt;li&gt;Всё это загружено в рюкзак Улисс 100 от Normal-Акме&lt;/li&gt;
&lt;li&gt;Кофеварка для фотографий: Samsung M21. Очень боится холода. Ну прям капетц как.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Трек для скачивания: 
&lt;a href=&#34;files/%d0%a2%d1%80%d0%b0%d0%b2%d0%b5%d1%80%d1%81%20%d0%b3.%d0%9e%d1%81%d1%82%d1%80%d0%b0%d1%8f.gpx&#34;&gt;Траверс г.Острая.gpx&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>GeoCrop 2.0</title>
      <link>https://htrd.su/blog/2021/10/08/geocrop_2.0/</link>
      <pubDate>Fri, 08 Oct 2021 22:27:01 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2021/10/08/geocrop_2.0/</guid>
      <description>&lt;p&gt;Встречайте: 
&lt;a href=&#34;https://github.com/h4tr3d/geocrop/releases/tag/v2.0&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;GeoCrop v2.0&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Нового функционала не завезли, но обновил для сборки с современными Proj. Сейчас актуальная версия 
&lt;a href=&#34;https://proj.org/development/migration.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;API - 6&lt;/a&gt;. Проверял с Proj 8.0.1.&lt;/p&gt;
&lt;p&gt;Итак:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;CMake: почищен файл, приведён чуточку к виду Modern CMake.&lt;/li&gt;
&lt;li&gt;Для сборки нужен Proj ≥ 6.0, так как используется его API теперь. Proj4 не поддерживается, если нужно, то берите код по метке 
&lt;a href=&#34;https://github.com/h4tr3d/geocrop/tree/v1.0&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;v1.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Исправлен досадный баг с полигоном обрезки: последним элементом нужно указать начальную точку, что бы полигон закрылся. Старые версии Gdal ругались (точно не помню), но игнорировали и обрезали, моя текущая версия (3.3.1 на момент публикации) уже вываливается с ошибкой.&lt;/li&gt;
&lt;/ol&gt;</description>
    </item>
    
    <item>
      <title>Ubuntu: persistent live stick</title>
      <link>https://htrd.su/blog/2021/10/07/ubuntu-persistent-live-stick/</link>
      <pubDate>Thu, 07 Oct 2021 09:54:18 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2021/10/07/ubuntu-persistent-live-stick/</guid>
      <description>&lt;p&gt;Задача: сделать USB стик с Ubuntu, но так, что бы состояние сохранялось. Между перезагрузкам.&lt;/p&gt;
&lt;p&gt;Забегая вперёд, это делается, но с одним ограничением: ядро не меняется. Но под мои задачи этого достаточно.&lt;/p&gt;
&lt;p&gt;Итак, для начала, информации в интернете достаточно, но чёткого пошагового плана я не находил. И вот ресурсы, которыми я пользовался:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Полезные ссылки:
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://wiki.ubuntu.com/LiveUsbPendrivePersistent&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://wiki.ubuntu.com/LiveUsbPendrivePersistent&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://help.ubuntu.com/community/LiveCD/Persistence#Getting_the_Live_CD&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://help.ubuntu.com/community/LiveCD/Persistence#Getting_the_Live_CD&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Говноссылки (я информацию от туда перерабатывал, но это пустая трата времени):
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://itectec.com/ubuntu/ubuntu-how-to-get-a-live-usb-to-use-a-partition-for-persistence/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://itectec.com/ubuntu/ubuntu-how-to-get-a-live-usb-to-use-a-partition-for-persistence/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://compizomania.blogspot.com/2019/10/live-usb-persistent-ubuntu.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://compizomania.blogspot.com/2019/10/live-usb-persistent-ubuntu.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://www.linuxuprising.com/2019/08/rufus-creating-persistent-storage-live.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://www.linuxuprising.com/2019/08/rufus-creating-persistent-storage-live.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://www.howtogeek.com/howto/14912/create-a-persistent-bootable-ubuntu-usb-flash-drive/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://www.howtogeek.com/howto/14912/create-a-persistent-bootable-ubuntu-usb-flash-drive/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Мне же ещё хотелось обойтись только стандартными утилитами. Но я позволю себе, как лентяю, пользоваться GParted, благо устанавливается он в Manjaro/ArchLinux в одну команду.&lt;/p&gt;
&lt;p&gt;Из всех вышеперечисленных ссылок, по сути, достаточно только вдумчивого чтения одной:

&lt;a href=&#34;https://wiki.ubuntu.com/LiveUsbPendrivePersistent&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;LiveUsbPendrivePersistent&lt;/a&gt;. Всё остальное - от лукавого. Но для общего развития почитать можно.&lt;/p&gt;
&lt;p&gt;Первым шагом качаем ISO образ Ubuntu, пусть у нас это будет 20.04:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget https://mirror.linux-ia64.org/ubuntu-releases/20.04.3/ubuntu-20.04.3-desktop-amd64.iso
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Вторым шагом, берём USB флешку, я брал на 16Gb с USB3 интерфейсом - особо одарённые флешки такие тормозные, что загрузка с них даже не начинается. Имейте это в виду.&lt;/p&gt;
&lt;p&gt;На флешке любым удобным методом создаём два раздела:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;FAT32, Primary, гигов на 4-5 и &lt;strong&gt;обязательно&lt;/strong&gt; задаём метку &lt;em&gt;UBUNTU&lt;/em&gt;
&lt;img src=&#34;https://htrd.su/blog/2021/10/07/ubuntu-persistent-live-stick/files/Pasted%20image%2020211007141958.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;li&gt;EXT4, Primary, на всю котлету и &lt;strong&gt;обязательно&lt;/strong&gt; задаём метку &lt;em&gt;casper-rw&lt;/em&gt;
&lt;img src=&#34;https://htrd.su/blog/2021/10/07/ubuntu-persistent-live-stick/files/Pasted%20image%2020211007142212.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Очередность разделов тоже имеет роль, по крайней мере в минимизации объёма гимора. Да, ради этой же цели, используйте MBR вместо GPT для нашей флехи.&lt;/p&gt;
&lt;p&gt;Для раздела UBUNTU не забываем задать флаг &lt;code&gt;boot&lt;/code&gt;:
&lt;img src=&#34;https://htrd.su/blog/2021/10/07/ubuntu-persistent-live-stick/files/Pasted%20image%2020211007150758.png&#34; alt=&#34;&#34;&gt;
&lt;img src=&#34;https://htrd.su/blog/2021/10/07/ubuntu-persistent-live-stick/files/Pasted%20image%2020211007150857.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Далее, монтируем раздел UBUNTU, у меня он примонтировался в &lt;code&gt;/run/media/hatred/UBUNTU/&lt;/code&gt; с этим и будем работать. В общем виде этот путь на многих современных системах можно записать в обобщённом виде:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/run/media/&lt;span class=&#34;nv&#34;&gt;$USER&lt;/span&gt;/UBUNTU
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Аналогично монтируем и сам образ ISO, который мы скачали, для этого в каталоге с ним выполним команды:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir mount
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mount -o loop ubuntu-20.04.3-desktop-amd64.iso mount 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; mount
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;А теперь, согласно документации, копируем необходимые файлы на флешку:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp -a .disk casper dists install pool preseed /run/media/hatred/UBUNTU/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp -a isolinux /run/media/hatred/UBUNTU/syslinux &lt;span class=&#34;c1&#34;&gt;# copy and rename&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv /run/media/hatred/UBUNTU/syslinux/isolinux.cfg /run/media/hatred/UBUNTU/syslinux/syslinux.cfg
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv /run/media/hatred/UBUNTU/syslinux/isolinux.bin /run/media/hatred/UBUNTU/syslinux/syslinux.bin
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;В ISO образе у нас есть символьные ссылки, FAT32 их не поддерживает, поэтому будут предупреждения, которые нужно просто проигнорировать.&lt;/p&gt;
&lt;p&gt;ISO образ теперь можно отключить.&lt;/p&gt;
&lt;p&gt;Для того, что бы флешка могла загрузиться, нужно установить Bootloader. В качестве оного используется syslinux и его части мы уже стянули с ISO образа, и для начала нужно их откорректировать:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Открываем &lt;code&gt;/run/media/hatred/UBUNTU/syslinux/txt.cfg&lt;/code&gt; для редактирования&lt;/li&gt;
&lt;li&gt;Заменяем все вхождения &amp;ldquo;/cdrom&amp;rdquo; пустой строкой (&amp;quot;&amp;quot;)&lt;/li&gt;
&lt;li&gt;Копируем первую &lt;code&gt;label&lt;/code&gt; секцию и вставляем её самой первой, после чего:
&lt;ol&gt;
&lt;li&gt;Аргумент &lt;code&gt;label&lt;/code&gt; заменяем имя на &lt;code&gt;persistent&lt;/code&gt;, можно любое другое, но сейчас работаем с этим&lt;/li&gt;
&lt;li&gt;Аргумент &lt;code&gt;menu label&lt;/code&gt; заменяем на что-то человеко-понятное и описательное, например: &amp;ldquo;^Use Ubuntu in persistent mode&amp;rdquo;&lt;/li&gt;
&lt;li&gt;К строке &lt;code&gt;append&lt;/code&gt; необходимо добавить аргумент &lt;code&gt;persistent&lt;/code&gt;, лучшее место для этого - перед &lt;code&gt;initrd=...&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Аргумент для &lt;code&gt;default&lt;/code&gt; стоит заменить на &lt;code&gt;persistent&lt;/code&gt;, что бы наша флешка грузилась с сохранением состояния автоматически.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Собственно шаг 3.3 и говорит загрузочным скриптам попытаться найти раздел с именем &lt;code&gt;casper-rw&lt;/code&gt;,   примонтировать его и использовать как оверлей для сохранения состояния файловой системы.&lt;/p&gt;
&lt;p&gt;В моём случае полная конфигурация получилась такой:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;default persistent
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;label persistent
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  menu label ^Use Ubuntu in persistent mode
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  kernel /casper/vmlinuz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  append  file=/preseed/ubuntu.seed persistent initrd=/casper/initrd quiet splash ---
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;label live
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  menu label ^Try Ubuntu without installing
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  kernel /casper/vmlinuz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  append  file=/preseed/ubuntu.seed initrd=/casper/initrd quiet splash ---
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;label live-nomodeset
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  menu label ^Try Ubuntu without installing (safe graphics)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  kernel /casper/vmlinuz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  append  file=/preseed/ubuntu.seed initrd=/casper/initrd quiet splash nomodeset ---
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;label live-install
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  menu label ^Install Ubuntu
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  kernel /casper/vmlinuz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  append  file=/preseed/ubuntu.seed only-ubiquity initrd=/casper/initrd quiet splash ---
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;label live-install-nomodeset
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  menu label ^Install Ubuntu (safe graphics)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  kernel /casper/vmlinuz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  append  file=/preseed/ubuntu.seed only-ubiquity initrd=/casper/initrd quiet splash nomodeset ---
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;label memtest
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  menu label Test ^memory
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  kernel /install/mt86plus
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;label hd
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  menu label ^Boot from first hard disk
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  localboot 0x80
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;На этом с конфигурацией загрузчика мы закончили, теперь нужно его и поставить. Для этого нам нужны пакеты syslinux и mtools:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo pacman -S syslinux mtools
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ну и отключаем наш раздел с Ubuntu, можно мышкой по меняюшкам или:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;umount /run/media/hatred/UBUNTU/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Да, нужно посмотреть, что за устройство соответствует этому разделу. Например, через dmesg или через mount до отключения раздела. У меня это &lt;code&gt;/dev/sdc1&lt;/code&gt;, но напишу в обобщённом виде, дабы не затереть чего:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# X меняем на нужную букву&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo syslinux /dev/sdX1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Делаем магию (да, олдфаговая привычка):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sync
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sync
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sync
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Извлекаем флешку и идём грузиться.&lt;/p&gt;
&lt;p&gt;Enjoy!&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Как я хакером стал (на самом деле нет)</title>
      <link>https://htrd.su/blog/2021/07/01/how-i-became-a-hacker/</link>
      <pubDate>Thu, 01 Jul 2021 16:09:04 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2021/07/01/how-i-became-a-hacker/</guid>
      <description>&lt;p&gt;И смешно и грустно :)&lt;/p&gt;
&lt;p&gt;Итак, начнём.&lt;/p&gt;
&lt;p&gt;Мне нужно было скачать одну статью с информацией по ковидной тест-системе (пытался понять значение КП, которое сам получил на тесте). И располагалась она на сайте: 
&lt;a href=&#34;https://e.zavkdl.ru&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Электронный журнал &amp;ldquo;Справочник заведующего КДЛ&amp;rdquo;&lt;/a&gt;, который является частью сервисов Action Media: 
&lt;a href=&#34;https://action-media.ru&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://action-media.ru&lt;/a&gt; и использует для входа единый аккаунт. На статью перешёл с сайта производителя тест системы Векто-Бест.&lt;/p&gt;
&lt;p&gt;Доступ к журналу платный, но предоставляется пробный бесплатный доступ на 3 или 4 дня.&lt;/p&gt;
&lt;p&gt;При регистрации требую телефон и почту. Но так как для меня этот сайт является мусорным, то оставлять свой основной мейл и телефон, ровно как и мои реальные ФИО мне нет никакого резона, то я воспользовался сервисом 
&lt;a href=&#34;https://smska.us/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://smska.us/&lt;/a&gt;. Взял второй в списке и ввёл.&lt;/p&gt;
&lt;p&gt;Скачал статью и успокоился. Но они начали закидывать меня тоннами спама. Решил снести аккаунт. Но, как это полагается у подобных сайтов, кнопки удаления нет. Полез в саппорт и вот такой вот диалог состоялся:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Я:&lt;/strong&gt; День добрый! Как удалить свой аккаунт?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Бот помощник:&lt;/strong&gt; Здравствуйте! Если удалить учетную запись, вы больше не сможете зарегистрироваться на сайтах «Актион» и получать приглашения на закрытые мероприятия.  Отписаться от рассылок можно в разделе 
&lt;a href=&#34;https://id2.action-media.ru/Personal/About/subscriptions?from=chatbot&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;«Рассылки»&lt;/a&gt;.
Не переживайте, если после отписки придет несколько писем. Нам нужно время, чтобы остановить рассылки.&lt;/p&gt;
&lt;p&gt;Вы получили ответ на свой вопрос?&lt;/p&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;Я:&lt;/strong&gt; День добрый! Нужно удалить аккаунт&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Кристина Вырлан:&lt;/strong&gt; Здравствуйте, Алекс , рады видеть Вас на нашем сайте&lt;/p&gt;
&lt;p&gt;Минуту, пожалуйста&lt;/p&gt;
&lt;p&gt;Алекс, к сожалению технически удалить аккаунт невозможно, так как ранее  проходили обучение и хранятся сертификаты на данном аккаунте&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Я:&lt;/strong&gt; Я не проходил у вас обучения и сертификатов нет. Я уже 5 минут кликаю на отписку от чёртовой горы  подписок и ещё не дошёл до конца. С таким отношением в печь такие  сервисы. Спасибо. Запросите технический персонал (разработчиков), что бы удалили записи в базе данных по e-mail 
&lt;a href=&#34;mailto:ZXXXXXY@inbox.ru&#34;&gt;ZXXXXXY@inbox.ru&lt;/a&gt;. Надеюсь на  понимание.&lt;/p&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;Кристина Вырлан:&lt;/strong&gt; Screenshot_5.png 0.03Mb&lt;/p&gt;
&lt;p&gt;Вы стерли чужой аккаунт , сменив все данные на себя&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;На скрине - логи системы с изменением настроек профиля :) скрины переписки под катом.&lt;/p&gt;
&lt;p&gt;Короче, Роман сфейлился, указав левый номер, потом работал с аккаунтом. Там пачка платёжных документов, пройденные курсы, сертификаты.&lt;/p&gt;
&lt;p&gt;Будьте внимательны и осторожны :)&lt;/p&gt;
&lt;h2 id=&#34;скрины&#34;&gt;Скрины&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2021/07/01/how-i-became-a-hacker/img/image-20210701164227621.png&#34; alt=&#34;image-20210701164227621&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2021/07/01/how-i-became-a-hacker/img/image-20210701164539948.png&#34; alt=&#34;image-20210701164539948&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2021/07/01/how-i-became-a-hacker/img/image-20210701165032984.png&#34; alt=&#34;image-20210701165032984&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2021/07/01/how-i-became-a-hacker/img/Screenshot_5.png&#34; alt=&#34;Screenshot_5.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;виртуальные-номер-для-sms&#34;&gt;Виртуальные номер для SMS&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://smska.us/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://smska.us/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://onlinesim.ru/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://onlinesim.ru/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Kernel: deadlock при использовании spin lock</title>
      <link>https://htrd.su/blog/2021/04/29/linux-kernel-spin-lock-and-deadlock/</link>
      <pubDate>Thu, 29 Apr 2021 13:59:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2021/04/29/linux-kernel-spin-lock-and-deadlock/</guid>
      <description>&lt;p&gt;
&lt;a href=&#34;https://www.kernel.org/doc/htmldocs/kernel-locking/sleeping-things.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Цитата&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Many functions in the kernel sleep (ie. call schedule()) directly or indirectly: you can never call them &lt;strong&gt;while holding a spinlock&lt;/strong&gt;, or &lt;strong&gt;with preemption disabled&lt;/strong&gt;. This also means you need to be in user context: calling them from an interrupt is illegal.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Неделю достаточно трудоёмкой (в плане воспроизведения) отладки пришлось потрать по причинам:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Незнания информации из цитаты выше (компетентность? не, не слышал).&lt;/li&gt;
&lt;li&gt;Наличия неявной блокировки в недрах ALSA при вызове колбека &lt;code&gt;snd_pcm_ops::trigger()&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Про второй пункт попадалась информация:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Run under stream lock&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Этот самый &amp;ldquo;stream lock&amp;rdquo; обеспечивается семейством функций:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;snd_pcm_stream_lock()&lt;/code&gt;/&lt;code&gt;snd_pcm_stream_unlock()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;snd_pcm_stream_lock_irq()&lt;/code&gt;/&lt;code&gt;snd_pcm_stream_unlock_irq()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;snd_pcm_stream_lock_irqsave()&lt;/code&gt;/&lt;code&gt;snd_pcm_stream_unlock_irqsave()&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;И вводит понятия: &amp;ldquo;atomic context&amp;rdquo; and &amp;ldquo;non-atomic context&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Контекст определяется значением флага &lt;code&gt;substream-&amp;gt;pcm-&amp;gt;nonatomic&lt;/code&gt; (&lt;code&gt;bool snd_pcm::nonatomic&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Если не сказано иного, то там значение 0, или &amp;ldquo;atomic context&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;И этот самый контекст вляет на то, какой тип блокировки будет использоваться: mutex или spin lock.&lt;/p&gt;
&lt;p&gt;По неудачному стечению обстоятельств в колбеке &lt;code&gt;snd_pcm_ops::trigger()&lt;/code&gt; появился вызов &lt;code&gt;cancel_delayed_work_sync()&lt;/code&gt;. А контекст был объявлен как &amp;ldquo;atomic&amp;rdquo;. И работать всё стало очень весело, в зависимости от того, куда какое нейтрино попадёт :)&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;/ul&gt;
&lt;p&gt;В терминал при этом вылетало такое:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Requesting system reboot
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[   56.034544] watchdog: BUG: soft lockup - CPU#3 stuck for 23s! [init:7475]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;А дальше вариции:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Стектрейсы, например:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;   52.084474&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; Modules linked in: sch_htb xlnx_sdi_audio regmap_mmio v_comp&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;O&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; v_scaler&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;O&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; v_process&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;O&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; snd_soc_xlnx_audio_formatter snd_soc_xlnx_i2s mali&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;O&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; xilinx_dp_card xilinx_dp_pcm xilinx_dp_codec snd_soc_tlv320aic3x pwm_cadence&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;O&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; max6966_keys&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;O&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; max6966_backlight&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;O&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; max6966_leds&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;O&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; max6966_mfd&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;O&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; fbili9341&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;O&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; it666x&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;O&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; xilinx_hdmi_rx&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;O&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; xilinx_vphy&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;O&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; xilinx_sdirxss u_dma_buf&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;O&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; uio_pdrv_genirq dmaproxy&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;O&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; al5d&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;O&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; xlnx_vcu_clk al5e&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;O&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; allegro&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;O&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; xlnx_vcu xlnx_vcu_core xlnx_pl_snd_card snd_soc_core snd_pcm_dmaengine snd_pcm snd_timer snd soundcore xilinx_vpss_scaler xilinx_video videobuf2_v4l2 v4l2_fwnode videobuf2_common videobuf2_dma_contig videobuf2_memops videodev media
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;   52.144543&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; CPU: &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; PID: &lt;span class=&#34;m&#34;&gt;6938&lt;/span&gt; Comm: init Tainted: G           O        4.19.0-xilinx-v2019.2 &lt;span class=&#34;c1&#34;&gt;#83&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;   52.153054&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; Hardware name: Epiphan X3 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;DT&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;   52.157136&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; pstate: &lt;span class=&#34;m&#34;&gt;20000005&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;nzCv daif -PAN -UAO&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;   52.161915&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; pc : smp_call_function_single+0x140/0x170
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;   52.166952&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; lr : smp_call_function_single+0x110/0x170
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;   52.171985&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; sp : ffffff802e0f3bb0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;   52.175283&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; x29: ffffff802e0f3bb0 x28: ffffffc03d3eac00 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;   52.180586&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; x27: &lt;span class=&#34;m&#34;&gt;0000000000000002&lt;/span&gt; x26: ffffff8008b887c8 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;   52.185881&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; x25: ffffff8008b9a9a0 x24: ffffff8008125800 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;   52.191185&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; x23: &lt;span class=&#34;m&#34;&gt;0000000000000002&lt;/span&gt; x22: ffffff8008b9a9c0 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;   52.196480&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; x21: ffffffbebffc7b58 x20: ffffff8008b88548 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;   52.201774&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; x19: ffffff802e0f3be0 x18: &lt;span class=&#34;m&#34;&gt;0000000000000000&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;   52.207069&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; x17: &lt;span class=&#34;m&#34;&gt;0000000000000000&lt;/span&gt; x16: &lt;span class=&#34;m&#34;&gt;0000000000000000&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;   52.212364&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; x15: &lt;span class=&#34;m&#34;&gt;0000000000000000&lt;/span&gt; x14: &lt;span class=&#34;m&#34;&gt;0000000000000000&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;   52.217659&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; x13: &lt;span class=&#34;m&#34;&gt;0000000000000000&lt;/span&gt; x12: &lt;span class=&#34;m&#34;&gt;0000000000000000&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;   52.222953&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; x11: &lt;span class=&#34;m&#34;&gt;0000000000000000&lt;/span&gt; x10: &lt;span class=&#34;m&#34;&gt;0000000000000000&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;   52.228248&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; x9 : &lt;span class=&#34;m&#34;&gt;0000000000000000&lt;/span&gt; x8 : &lt;span class=&#34;m&#34;&gt;0000000000000000&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;   52.233543&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; x7 : &lt;span class=&#34;m&#34;&gt;0000000000000000&lt;/span&gt; x6 : ffffff802e0f3be0 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;   52.238838&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; x5 : ffffff802e0f3be0 x4 : &lt;span class=&#34;m&#34;&gt;0000000000000004&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;   52.244133&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; x3 : ffffff802e0f3bf8 x2 : &lt;span class=&#34;m&#34;&gt;0000000000000000&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;   52.249428&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; x1 : &lt;span class=&#34;m&#34;&gt;0000000000000003&lt;/span&gt; x0 : &lt;span class=&#34;m&#34;&gt;0000000000000000&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;   52.254723&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; Call trace:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;   52.257155&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  smp_call_function_single+0x140/0x170
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;   52.261844&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  perf_event_exit_cpu_context+0x84/0xe0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;   52.266624&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  perf_reboot+0x2c/0x60
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;   52.270011&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  notifier_call_chain+0x54/0x90
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;   52.274099&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  blocking_notifier_call_chain+0x54/0x80
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;   52.278960&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  kernel_restart_prepare+0x1c/0x40
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;   52.283299&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  kernel_restart+0x14/0x60
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;   52.286945&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  __se_sys_reboot+0xd4/0x1f0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;   52.290764&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  __arm64_sys_reboot+0x18/0x20
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;   52.294758&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  el0_svc_handler+0xc8/0x120
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;   52.298584&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  el0_svc+0x8/0xc
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Периодические репорты:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;   62.477485&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; BUG: workqueue lockup - pool &lt;span class=&#34;nv&#34;&gt;cpus&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;flags&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;0x0 &lt;span class=&#34;nv&#34;&gt;nice&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; stuck &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; 36s!
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;В общем, рекомендую к внимательному чтению:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://www.kernel.org/doc/htmldocs/kernel-locking/index.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Unreliable Guide To Locking&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Только не смотрите на год :)&lt;/p&gt;
&lt;p&gt;И перед тем, как ставить &lt;code&gt;msleep()&lt;/code&gt;/&lt;code&gt;mutex_lock()&lt;/code&gt;/etc, изучите, кто вызывает этот код, есть ли там блокировка и какая. А если код ваш, посмотрите на 
&lt;a href=&#34;https://www.kernel.org/doc/htmldocs/kernel-locking/cheatsheet.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;шпаргалку по выбору типа блокировки&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;PS а если полезно под рукой иметь 
&lt;a href=&#34;https://www.kernel.org/doc/htmldocs/kernel-locking/glossary.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;глоссарий&lt;/a&gt;. В частности он объяснил мне, что это за функции с суффиксом &lt;code&gt;_bh&lt;/code&gt; и что такое tasklet.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>ThinkPad T530: зависание при выходе из сна на ядрах 5.10&#43;</title>
      <link>https://htrd.su/blog/2021/04/14/t530_freeze_on_resume_after_suspend_with_kernel_5_10/</link>
      <pubDate>Wed, 14 Apr 2021 13:42:33 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2021/04/14/t530_freeze_on_resume_after_suspend_with_kernel_5_10/</guid>
      <description>&lt;p&gt;Тот самый случай, когда WA ломается.&lt;/p&gt;
&lt;p&gt;Причина проста: наличие параметра ядра &lt;code&gt;scsi_mod.scan=sync&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;По умолчанию его нет, поэтому и проблема не слишком актуальна. А появился он&amp;hellip; как WA проблемы с тем же самым Resume after Speep. Но тогда рушился XOrg:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;../../../../2018/04/16/padenie_xorg_posle_vyxoda_iz_suspend&#34;&gt;Падение Xorg после выхода из suspend&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Таким образом, наличие этой опции на ядре 4.15+ решает проблему с выходом из сна и падением XOrg и никак не мешает работе вплоть до ядер 5.9.x, но начиная с ядра 5.10 эта опция должна быть удалена, иначе уже она является причиной зависания при выходе из сна.&lt;/p&gt;
&lt;p&gt;Скорее всего такое поведение тоже является ошибочным&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>GTest: запуск теста только вручную</title>
      <link>https://htrd.su/blog/2021/04/09/gtest-manual-only-test-run/</link>
      <pubDate>Fri, 09 Apr 2021 11:22:40 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2021/04/09/gtest-manual-only-test-run/</guid>
      <description>&lt;p&gt;Возникла задача: запускать тест, только если явно указано, что его нужно запускать. Иными словами пропускать его при обычным прогоне, без параметров.&lt;/p&gt;
&lt;p&gt;Тестовый фреймворк 
&lt;a href=&#34;https://github.com/google/googletest&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;GTest&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;GTest, как и многие другие имеет возможность фильтровать тесты, иными словами, выбирать только те, которые нужно запустить в данный момент времени:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./tests --gtest_filter&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;Categoty.some_test
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Если фильтр не указывается, то запускаются все тесты. При этом, у Google Test есть макрос, который в рантайме позволяет исключить тест из прогона:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;GTEST_SKIP&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Остаётся придумать, как передать условие, по которому этот макрос вызовется.&lt;/p&gt;
&lt;p&gt;Дополнительный параметр командной строки заводить не хотелось, тем более, что уже есть фильтр&amp;hellip; Оказалось, что достучаться к тому, что передано для &lt;code&gt;--gtest_filter=&lt;/code&gt; в качестве параметра проще простого:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;str&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;testing&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;GTEST_FLAG&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Сама строка фильтра: набор масок, разделённых двоеточием. Собственно, нам достаточно проверить, что фильтр не содержит имени нашего теста и в этом случае скипнуть его:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;TEST&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Category&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;some_test&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;str&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;testing&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;GTEST_FLAG&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;enable_pos&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;find&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Category.some_test&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;enable_pos&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;npos&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    	&lt;span class=&#34;n&#34;&gt;GTEST_SKIP&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Теперь, тест запустится, только если явно указать имя теста при запуске:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./tests --gtest_filter&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;Category.some_test
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;или все тесты, включая наш:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./tests --gtest_filter&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;Category.some_test:*
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Под катом небольшой бонус :)&lt;/p&gt;
&lt;h2 id=&#34;бонус&#34;&gt;Бонус&lt;/h2&gt;
&lt;p&gt;Пытливый взгляд, мог заметить, что наш запустится если в командную строку передать что-то вроде:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./tests --gtest_filter&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;Category.some_test_super_postfix:*
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ещё, можно заметить, что не обрабатывается &lt;code&gt;-&lt;/code&gt; перед тестом.&lt;/p&gt;
&lt;p&gt;По последнему: в этом нет необходимости, потому как это будет обработано самим фреймворком и нашему тесту даже не будет передано управление.&lt;/p&gt;
&lt;p&gt;По первому: да. Нужно добавить граничные условия и оформить в виде отдельной функции:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;static&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;bool&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;skip_test&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string_view&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;test_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;filter&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;testing&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;GTEST_FLAG&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pos&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;find&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;test_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pos&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;npos&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;end&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pos&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;test_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;length&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;end&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;length&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;end&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt; &lt;span class=&#34;sc&#34;&gt;&amp;#39;:&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pos&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pos&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt; &lt;span class=&#34;sc&#34;&gt;&amp;#39;:&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;TEST&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Category&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;some_test&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;skip_test&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Category.some_test&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    	&lt;span class=&#34;n&#34;&gt;GTEST_SKIP&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ну и что бы не писать имя теста, добавляем ещё сахара:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;static&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;bool&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;skip_this_test&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;full_name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;testing&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;UnitTest&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;GetInstance&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;current_test_info&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;test_suite_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;sc&#34;&gt;&amp;#39;.&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;testing&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;UnitTest&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;GetInstance&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;current_test_info&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;skip_test&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;full_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;TEST&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Category&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;some_test&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;skip_this_test&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    	&lt;span class=&#34;n&#34;&gt;GTEST_SKIP&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Сдобрить макросами (&lt;code&gt;SKIP_TEST_IF()&lt;/code&gt; или вроде того) по вкусу.&lt;/p&gt;
&lt;h2 id=&#34;для-чего&#34;&gt;Для чего?&lt;/h2&gt;
&lt;p&gt;У меня есть один тест, который замеряет производительность. По сути, все тейст кейсы, которые в нём есть, уже проверены, но нужно выполнить какую-то операцию заданное число раз и просто замерить время. Естественно такой тест замедляет выполнение всего набора, да и выполнять его нужно, по сути, один раз (ну или время от времени, что бы проверить отсутствие деградации по скорости).&lt;/p&gt;
&lt;p&gt;Как-то так.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>You can&#39;t just take and...</title>
      <link>https://htrd.su/blog/2021/04/02/you-cant-just-take-and.../</link>
      <pubDate>Fri, 02 Apr 2021 14:38:37 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2021/04/02/you-cant-just-take-and.../</guid>
      <description>&lt;p&gt;Сгенерировать нули.&lt;/p&gt;
&lt;p&gt;В этом месяце (точнее в прошлом) я не прошёл бы тест на продуктивность (недавно узнал про такие: productivity test): 5 тасок и не все в завершённом состоянии.&lt;/p&gt;
&lt;p&gt;С одной из них провозился 1.5 недели. Хотя сложного, на первый, взгляд ничего и нет.&lt;/p&gt;
&lt;p&gt;А суть её заключается вот в чём: генерировать нули в звуковом устройстве, то есть - тишину.&lt;/p&gt;
&lt;h2 id=&#34;поехали&#34;&gt;Поехали!&lt;/h2&gt;
&lt;p&gt;Точнее генерировать ничего и не нужно: буфера в ALSA кольцевые, нужно его заполнить нулями один раз и просто двигать указатель по нему.&lt;/p&gt;
&lt;p&gt;Двигать указатель.&lt;/p&gt;
&lt;p&gt;Казалось бы, а тут-то какие сложности?&lt;/p&gt;
&lt;p&gt;В 
&lt;a href=&#34;https://htrd.su/blog/2021/04/02/pcm-terminology-and-concepts/&#34;&gt;предыдущей заметке&lt;/a&gt; я конспективно указал основные термины и понятия связанные с PCM. Нам нужен период, его размер и sample rate, он же  - частота дискретизации.&lt;/p&gt;
&lt;p&gt;Берём таймер. Пусть будет 
&lt;a href=&#34;https://www.kernel.org/doc/html/latest/timers/highres.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;High Resolution Timer&lt;/a&gt;. Когда срабатывает ALSA колбек &lt;code&gt;struct snd_pcm_ops::prepare&lt;/code&gt; у нас уже есть все нужные параметры для стрима, типа количества каналов, битности семплов, частоты. Есть и информация о размере выделенного кольцевого буфера: &lt;code&gt;substream-&amp;gt;runtime-&amp;gt;period_size&lt;/code&gt;. Только нужно быть внимательным, смотрим на тип: &lt;code&gt;snd_pcm_uframes_t&lt;/code&gt; и понимаем, что это размер периода не в герцах, не в единицах времени, а во фреймах.&lt;/p&gt;
&lt;p&gt;Так вот, в этом колбеке, мы настраиваем таймер, что бы он тикал один раз в Period Size. Максимально точно в целых числах получается вот так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;period&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;runtime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;period_size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;// во фреймах, тут как договоритесь в hw_params, может быть нифига не кратен rate
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rate&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;runtime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;           &lt;span class=&#34;c1&#34;&gt;// в HZ, например 48000, это частата **фреймов**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sec&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;period&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;rate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;            &lt;span class=&#34;c1&#34;&gt;// вычленим секунды, в более-менее low-latency здесь всегда будет 0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// ну и посчитаем максимально точно ту часть, что в наносекундах
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;period&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;%=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;rate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;             
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;nsecs&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;div_u64&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;u64&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;period&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1000000000UL&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;rate&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;rate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// чисто хелпер, по сути sec * 10^9 + nsecs
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;period_time&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;ktime_set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;nsecs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;После чего, в обработчике &lt;code&gt;struct snd_pcm_ops::trigger&lt;/code&gt;, по START активируем таймер и он будет тикать раз в &lt;code&gt;period_time&lt;/code&gt; наносекунд. А дальше, в обработчике прерывания таймера, мы вызываем специально предназначенную для этого функцию:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;snd_pcm_period_elapsed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;snd_pcm_substream&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;substream&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Как сказано в документации, вольный перевод:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;обновляет статус PCM для следующего периода&lt;/p&gt;
&lt;p&gt;Вызывается из обработчика прерывания, когда источник семплов запроцессил (сиречь - положил в память) period_size фреймов. Заобновится указатель на данные, пробудятся те, кто данные ждёт и т.п.&lt;/p&gt;
&lt;p&gt;Если вдруг между вызовами случилось несколько period_size - нужно сделать один вызов.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;По сути, эта функция, вызывает другой наш колбек: &lt;code&gt;struct snd_pcm_ops::pointer&lt;/code&gt;, который и говорит текущую позицию в кольцевом буфере.&lt;/p&gt;
&lt;p&gt;То есть, на основании показаний таймера мы можем сказать виртуальную позицию в буфере. И тут никаких проблем: нам нужно спросить сколько таймер накрутил времени относительно какой-то точки отсчёта (логично сохранить некий аналог &lt;code&gt;now()&lt;/code&gt; при старте таймера). И пересчитать эту дельту на основании &lt;code&gt;rate&lt;/code&gt; и &lt;code&gt;buffer_size&lt;/code&gt; в позицию. В коде это выглядит так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;now&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;hrtimer_cb_get_time&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;timer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;        &lt;span class=&#34;c1&#34;&gt;// текущее время таймера, обновляется пока он работает
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;delta&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;ktime_us_delta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;now&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;base_time&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;// дельта между текущим временем и базовым
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;delta&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;div_u64&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;delta&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;runtime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rate&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;999999&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1000000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// время множим на частоту, получаем дельту во фреймах
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;                                                          &lt;span class=&#34;c1&#34;&gt;// относительно старта таймера
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;                                                          &lt;span class=&#34;c1&#34;&gt;// применяем трюки для минимизации ошибки округления
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;                                                          &lt;span class=&#34;c1&#34;&gt;// делим на 10^6, потому как выше дельту в мкс (us) получили
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;div_u64_rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;delta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;runtime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;buffer_size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pos&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// Ну и берём остаток от деления на размер буфера, получаем искомую
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;                                                &lt;span class=&#34;c1&#34;&gt;// позцию
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Действительно, текста много, а сложностей - ноль. Оно работает, данные шлются. Вот только процесс в пользовательском пространстве жрёт 100% CPU. А при работе с реальным железом - нет.&lt;/p&gt;
&lt;p&gt;Начинаем разбираться.&lt;/p&gt;
&lt;p&gt;Для начала открываем для себя (ещё кто-то будет спрашивать, зачем я ВСЁ ядро в IDE гружу? :), что &lt;code&gt;struct snd_pcm_ops::pointer&lt;/code&gt; вызывается далеко не из одного места:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/70f5ec6a083ccaf5a27d3854e8f5ada9/20210402_153358_rot_small.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Красными кружками обведены наиболее активные потребители, выявленные при помощи логов.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;__snd_pcm_lib_xfer()&lt;/code&gt; используется для любого трансфера, осуществляющегося через &lt;code&gt;read()&lt;/code&gt;/&lt;code&gt;write()&lt;/code&gt; на устройстве. И частота его следований, в целом, соответствовало таковому для железа. А вот &lt;code&gt;snd_pcm_delay()&lt;/code&gt;, который является обработчиком для IOCTL: &lt;code&gt;SNDRV_IOCTL_DELAY&lt;/code&gt; зовётся очень активно. При этом, было замечено, что при работе с реальным железом, задержка или 0, что означает - данных ещё нет, или 8 и больше, что означает - приложению есть что прочитать. А вот у меня с тишиной (помимо 0) и 1, и 2, и, редко, больше.&lt;/p&gt;
&lt;p&gt;А всё почему? А потому, что между вызовами таймер тикает и время движется. И в любой момент времени (ну практически) выходит так, что данные как бы есть и софт старательно их вычитывает.&lt;/p&gt;
&lt;p&gt;Вылечилось, как обычно, при помощи &lt;code&gt;sleep()&lt;/code&gt;&amp;hellip; Шутка. Почти.&lt;/p&gt;
&lt;p&gt;Для железного модуля позиция высчитывалась на основании переданных байт в регистре счётчика. Согласно документации, данные эти обновляются каждый &lt;code&gt;period_size&lt;/code&gt;, но на самом деле - каждые 8 фреймов. Точнее так: каждые 32 байта: модуль, скорее всего, завязан именно на байты, просто в моём режиме: PCM_S16LE/Stereo получается 8 фреймов.&lt;/p&gt;
&lt;p&gt;Выходит, что у железа есть задержка в 8 фреймов. На частоте 48000Hz это примерно 166мкс. И этого хватает, что бы не вводить процессор в busy loop.&lt;/p&gt;
&lt;p&gt;В общем, я добавил такую &amp;ldquo;виртуальную&amp;rdquo; задержку и в программный генератор: считается позиция, если она сдвинулась на 8 или более фреймов, то сохраняем и возвращаем новое значение. В противном случае возвращаем старое значение.&lt;/p&gt;
&lt;p&gt;Вот теперь - работает!&lt;/p&gt;
&lt;h2 id=&#34;для-чего-это-нужно-или-чуть-больше-конкретики&#34;&gt;Для чего это нужно или чуть больше конкретики&lt;/h2&gt;
&lt;p&gt;Есть IP Core от Xilinx: Audio PCM Formatter. Он нужен для того, что бы переложить данные из других PL (FPGA) модулей, подключенных в цепочку по AXI шине в память, к которой можно достучаться из CPU в прочитать устройством. Это режим Capture. Есть и обратный режим: переложить данные из памяти и передать по AXI шине.&lt;/p&gt;
&lt;p&gt;Как и всё на шине этот модуль тактируется, когда данные есть. Если источником данных является ADC, то данные есть всегда, пока работает ADC, а он работает, обычно, всегда когда устройство открыто и в работе. ADC без разницы что оцифровывать: реальный звук или наводки на проводах.&lt;/p&gt;
&lt;p&gt;Другое дело, когда источником сигнала является SDI или HDMI вход. У этих чудиков может быть и физически кабель воткнут, а аудио не быть. Или просто кабель не воткнут. С одной стороны это удобно: семплы не идут, значит сигнала нет. Пробуем потом (ага, тут или поллинг или платформоспецифичные проверки со стороны user-space).&lt;/p&gt;
&lt;p&gt;Но теряется унификация: для аналогового аудио у нас данные всегда идут: или реальные или условные нули (наводки).&lt;/p&gt;
&lt;p&gt;В общем возникла идея: а что если в драйвере PCM Formatter&amp;rsquo;а детектировать отсутствие данных и переключаться на программный генератор тишины. И переключаться обратно, когда данные появились. Если это сделать быстрее, чем period size, то мало кто и заметит. Точнее так, мы не озаботились о плавном переходе между позицией указателя между генератором и железом, поэтому в момент переключения могут быть некие переходные процессы, но, в целом, всё работает нормально.&lt;/p&gt;
&lt;p&gt;Поэтому 1.5 недели включали в изучение вопроса - как это вообще скрестить между собой.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>PCM Terminology and Concepts</title>
      <link>https://htrd.su/blog/2021/04/02/pcm-terminology-and-concepts/</link>
      <pubDate>Fri, 02 Apr 2021 11:33:52 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2021/04/02/pcm-terminology-and-concepts/</guid>
      <description>&lt;p&gt;Просто ссылка для мемориза:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://larsimmisch.github.io/pyalsaaudio/terminology.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;PCM Terminology and Concepts&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Под катом краткий конспект (читать не обязательно).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Sample&lt;/strong&gt;
Амплитуда одного канала. При частоте дискритизации 48000Hz, для одного канала 48000 семплов дадут 1 секунду аудио. Размер может быть 8, &lt;strong&gt;16&lt;/strong&gt;, 24, 32 бит (больше?). Little Endian, Big Endian - в зависимости от системы/устройства. Размер определяет динамический диапазон: разница между самым тихим и самым громким сигналом, который может воспроизвестись.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Frame&lt;/strong&gt;
Один семпл, но для всех каналов. Для Mono Frame == Sample, для стерео  Frame == 2xSample.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Frame size&lt;/strong&gt;
Размер фрейма в байтах. Для Stereo, PCM_S16LE:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Frame size = 16/8 * 2 = 4
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Rate&lt;/strong&gt;
Сколько &lt;strong&gt;фреймов&lt;/strong&gt; в секунду у нас прилетает. Иными словами: с какой частотой у нас происходит семплирование сигнала. Нужен так же для того, что бы посчитать полосу пропускания:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Bandwidth = Frame Size * Rate * 8, bits/s
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Period&lt;/strong&gt;
Реальное железо обрабатывает данные блоками и выдаёт сразу несколько фреймов. Обычно это сигнализируется прерыванием. Временной интервал между очередными порциями данных и есть период. Период так же отражает задержку в аудио сигнале: звук в реальности будет отставать как раз на величину периода.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Period Size&lt;/strong&gt;
Размер периода&amp;hellip; в герцах! Во внутренней кухне может встречаться и размерность в фреймах или даже байтах.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Коэффициент ложки, ч.2</title>
      <link>https://htrd.su/blog/2021/02/06/spoon-coefficient-2/</link>
      <pubDate>Sat, 06 Feb 2021 13:13:39 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2021/02/06/spoon-coefficient-2/</guid>
      <description>&lt;p&gt;Недавно приехали покупки с магазина, среди которых была титановая полноразмерная ложка от Урал ВСМПО, купленная взамен утерянной. Но по прибытии, оказалось, что она ощутимо тяжелее и прочнее старого образка. В результате, возникла идея перемерить коэффициент ложки, сделанный несколько лет назад камрадом Live: 
&lt;a href=&#34;http://turizm.primkray.ru/trek/vyosla-raznye-nuzhny-vyosla-raznye-vazhny&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Вёсла разные нужны, вёсла разные важны&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Участники:&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/ff701605819b73ff7cbf52a926547afb/20210206_104900_2.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/c7212b911b4219bcc3cccff3ad7a17f0/20210206_104900_2_small.jpg&#34; alt=&#34;20210206_104900_2&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Слева на право:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Ложка пластиковая, обыкновенная. Далее просто &lt;strong&gt;Пластик&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Ложка стальная, десертная, любезно предоставлена сыном :). Далее: &lt;strong&gt;Сталь (мал)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Ложка стальная столовая, просто взята из посудницы. Далее: &lt;strong&gt;Сталь (больш)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Ложка титановая Урал ВСМПО, старого образца. Далее: &lt;strong&gt;Ti (old)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Ложка титановая Урал ВСМПО, нового образца. Далее: &lt;strong&gt;Ti (new)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Ложка алюминиевая, далее &lt;strong&gt;Al&lt;/strong&gt;. Любезно предоставлена коллегой с работы.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Методика измерений точно повторяет Колину:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;взвешиваем ложку (в таблице строка ВЕС);&lt;/li&gt;
&lt;li&gt;набираем ложкой ПРОДУКТ, столько сколько влезет максимально, с горкой. Взвешиваем набранный продукт (строка ВЕСЛО).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Продукт набираем 3 раза, показания усредняем. Если весы прыгают между значениями, то брал максимальное.&lt;/p&gt;
&lt;p&gt;Коэффициент ложки (или просто Коэффициент) считается как &lt;code&gt;ВЕСЛО/ВЕС&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;ПРОДУКТ, обычная поваренная соль:&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/ca9cf667b814ce0ad33e7c191fd19904/20210206_104726.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/7d2e2a3bea17629e4fdf5dc507fff4a2/20210206_104726_small.jpg&#34; alt=&#34;20210206_104726&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Весы обычные китайские кухонные, точность 1г.&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/20541e9a275278355773548f9db2d5ad/20210206_104735.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/03d7d89eb1e2b6227fb261e23bb05d0c/20210206_104735_small.jpg&#34; alt=&#34;20210206_104735&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Обзорные фото с замеров:&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/76739f6e12c4b2124316bbfa50613d7e/20210206_105724.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/b0b75afef373b4b0a823f8265f3591a6/20210206_105724_small.jpg&#34; alt=&#34;20210206_105724&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/5062f3a5273e567ab8d4c12b51e0cc2a/20210206_105906.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/a95dbcebc77b5dfe8a04fb6f37ad9952/20210206_105906_small.jpg&#34; alt=&#34;20210206_105906&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Фото замеров:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://photos.app.goo.gl/MiBiZ7jBJgNBAvgSA&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://photos.app.goo.gl/MiBiZ7jBJgNBAvgSA&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;А вот сводная таблица:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;&lt;/th&gt;
          &lt;th&gt;Al&lt;/th&gt;
          &lt;th&gt;Пластик&lt;/th&gt;
          &lt;th&gt;Ti (new)&lt;/th&gt;
          &lt;th&gt;Ti (old)&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;ВЕС, г&lt;/td&gt;
          &lt;td&gt;23&lt;/td&gt;
          &lt;td&gt;9&lt;/td&gt;
          &lt;td&gt;32&lt;/td&gt;
          &lt;td&gt;24&lt;/td&gt;
          &lt;td&gt;48&lt;/td&gt;
          &lt;td&gt;44&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Замер #1&lt;/td&gt;
          &lt;td&gt;36&lt;/td&gt;
          &lt;td&gt;23&lt;/td&gt;
          &lt;td&gt;33&lt;/td&gt;
          &lt;td&gt;33&lt;/td&gt;
          &lt;td&gt;31&lt;/td&gt;
          &lt;td&gt;23&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Замер #2&lt;/td&gt;
          &lt;td&gt;37&lt;/td&gt;
          &lt;td&gt;24&lt;/td&gt;
          &lt;td&gt;34&lt;/td&gt;
          &lt;td&gt;35&lt;/td&gt;
          &lt;td&gt;32&lt;/td&gt;
          &lt;td&gt;24&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Замер #3&lt;/td&gt;
          &lt;td&gt;37&lt;/td&gt;
          &lt;td&gt;24&lt;/td&gt;
          &lt;td&gt;34&lt;/td&gt;
          &lt;td&gt;34&lt;/td&gt;
          &lt;td&gt;31&lt;/td&gt;
          &lt;td&gt;24&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;ВЕСЛО, г&lt;/td&gt;
          &lt;td&gt;36,67&lt;/td&gt;
          &lt;td&gt;23,67&lt;/td&gt;
          &lt;td&gt;33,67&lt;/td&gt;
          &lt;td&gt;34,00&lt;/td&gt;
          &lt;td&gt;31,33&lt;/td&gt;
          &lt;td&gt;23,67&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Коэффициент&lt;/td&gt;
          &lt;td&gt;1,59&lt;/td&gt;
          &lt;td&gt;2,63&lt;/td&gt;
          &lt;td&gt;1,05&lt;/td&gt;
          &lt;td&gt;1,42&lt;/td&gt;
          &lt;td&gt;0,65&lt;/td&gt;
          &lt;td&gt;0,54&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Место&lt;/td&gt;
          &lt;td&gt;2&lt;/td&gt;
          &lt;td&gt;1&lt;/td&gt;
          &lt;td&gt;4&lt;/td&gt;
          &lt;td&gt;3&lt;/td&gt;
          &lt;td&gt;5&lt;/td&gt;
          &lt;td&gt;6&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Напомню, чем выше коэффициент, тем а) легче изделие б) изделием нужно сделать меньше движений, что бы съесть продукт.&lt;/p&gt;
&lt;p&gt;Выводы Коля уже делал. От себя добавлю следующие:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Пластик рвёт и мечет, но его живучесть&amp;hellip; Ломались они :)&lt;/li&gt;
&lt;li&gt;Люминь тоже не очень прочен. Плюс теплопроводность, это извечная проблема столовок с очень горячими ложками, которые невозможно взять в луки. Ну и кто-то беспокоится по поводу поедания самого люминя и его оксидной плёнки, которая не сильно прочна.&lt;/li&gt;
&lt;li&gt;Новые титановые ложки от Урал ВСМПО сдали позиции, но стали ощутимо прочнее. Если ориентироваться на показания Коли, то раньше они помещались на 3 месте, теперь уступили титашке от MSR, но черпальник остался большим. Среди прочих плюсов титана: а) он моется легче (оксид титана используется в антипригарных покрытиях) б) у него слабая теплопроводность - руки не обожжёте. Цена может оказаться минусом, но это актуально для брендов, Урал ВСМПО стоит около 390 рублей.&lt;/li&gt;
&lt;/ol&gt;</description>
    </item>
    
    <item>
      <title>Сезон снежных крепостей 2021 открыт!</title>
      <link>https://htrd.su/blog/2021/01/31/snow-fortification-season-2021-opened/</link>
      <pubDate>Sun, 31 Jan 2021 15:21:02 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2021/01/31/snow-fortification-season-2021-opened/</guid>
      <description>&lt;p&gt;Открытый вопрос: кому больше драйва и радости от строительства? :)&lt;/p&gt;
&lt;p&gt;Под катом больше фото.&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/50e00feee88e066f8376c5beee44c8a7/20210130_194954.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/c61ac384acaa7e5bc25cec023e579112/20210130_194954_small.jpg&#34; alt=&#34;20210130_194954_small&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/2e93e867fb21e5c6a1c9cadd221ab49f/20210129_200420.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/3d9adb9e4d4aaf4bad9e86dba0e627c5/20210129_200420_small.jpg&#34; alt=&#34;20210129_200420_small&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/c3fa2b8e198dac0e67fe19d66b1c958d/20210129_200431.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/557ee93c59ec02e648c249794e1ea2f7/20210129_200431_small.jpg&#34; alt=&#34;20210129_200431_small&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/42fd0ad2d83bc35344521c040d8b8b3f/20210129_200445.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/5a05b8e38871360be82f5c0c340b2d3f/20210129_200445_small.jpg&#34; alt=&#34;20210129_200445_small&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/b708ecfb86e8c83cdedf80641be408a4/20210129_200523.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/1744ce07ba3c7222f2af58c32057d06c/20210129_200523_small.jpg&#34; alt=&#34;20210129_200523_small&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/904e8fa11b2544390280d5fee2732286/20210129_200602.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/708aae703a931d16cdf58e1f3e628788/20210129_200602_small.jpg&#34; alt=&#34;20210129_200602_small&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/68a7fc0e9c024cda2e525f2800ff009c/20210129_200611.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/601f64957c692f4cd7cbfaf467620439/20210129_200611_small.jpg&#34; alt=&#34;20210129_200611_small&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/3b7c512037a7f98e27b9c59e9bc2d05b/20210130_195001.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/d910d8b527308fad4375a50deebed379/20210130_195001_small.jpg&#34; alt=&#34;20210130_195001_small&#34;&gt;&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Alacritty: первое знакомство</title>
      <link>https://htrd.su/blog/2021/01/30/alacritty-intro/</link>
      <pubDate>Sat, 30 Jan 2021 14:45:12 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2021/01/30/alacritty-intro/</guid>
      <description>&lt;p&gt;Как сказано на 
&lt;a href=&#34;https://github.com/alacritty/alacritty/blob/master/README.md&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;GitHub разработчика&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Alacritty - A fast, cross-platform, OpenGL terminal emulator&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Со слов автора он создал его, так как неудобно было конфигурировать 
&lt;a href=&#34;https://st.suckless.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;st&lt;/a&gt;. (&lt;strong&gt;&amp;ndash;htrd&lt;/strong&gt;: add cite)&lt;/p&gt;
&lt;p&gt;Если коротко, то это эмулятор терминала с быстрым выводом текста на экран, используя GPU (OpenGL). Без поддержки табов, без конфигурировать через меню, но с достаточно гибкими возможностями конфигурации через файлы, включая подхват конфигурации на лету.&lt;/p&gt;
&lt;h2 id=&#34;баги&#34;&gt;Баги&lt;/h2&gt;
&lt;p&gt;Да! Сразу с них :)&lt;/p&gt;
&lt;h3 id=&#34;запуск-midnight-commander&#34;&gt;Запуск Midnight Commander&lt;/h3&gt;
&lt;p&gt;Судя по всему, терминал не совсем корректно обрабатывает завершение дочерних процессов. Так, если открыть терминал, запустить &lt;code&gt;mc&lt;/code&gt;, а потом закрыть по Alt+F4 (ну или какая у вас комбинация для закрытия окна) и так повторить несколько раз, то а определённый запуск mc всё в терминале зависнет. И&amp;hellip; развиснет когда вы рестартуете сервис &lt;code&gt;gpm&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl restart gpm
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Судя по всему мало кто в современном мире использует &lt;code&gt;gpm&lt;/code&gt;, но да ладно. Чуть позже или разберёмся или баг-реквест отправим. На Konsole такой проблемы не наблюдаю.&lt;/p&gt;
&lt;h3 id=&#34;размер-шрифтов-мониторах-одной-системы-с-разным-dpi&#34;&gt;Размер шрифтов мониторах одной системы с разным DPI&lt;/h3&gt;
&lt;p&gt;Об этом подробнее ниже.&lt;/p&gt;
&lt;h2 id=&#34;конфигурация&#34;&gt;Конфигурация&lt;/h2&gt;
&lt;p&gt;Конфиг на 
&lt;a href=&#34;https://ru.wikipedia.org/wiki/YAML&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;YAML&lt;/a&gt;. Простой и понятный до безобразия.&lt;/p&gt;
&lt;p&gt;Терминал сам не создаёт конфигурационных файлов. Хотя в исходниках лежит &lt;code&gt;alacritty.yml&lt;/code&gt;, в котором есть все опции, но закомментированные: копируешь, редактируешь что нужно. Как мне кажется, было бы неплохо генерировать этот файл при первом запуске, если его не существует ещё. Или делать генерацию через параметр коммандной строки.&lt;/p&gt;
&lt;p&gt;Рекоммендую сразу задать:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-toml&#34; data-lang=&#34;toml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;live_config_reload&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Тогда изменения настроек будут применяться сразу и к запущенным копиям программы.&lt;/p&gt;
&lt;p&gt;Большой плюс автору за наличие man-страницы: 
&lt;a href=&#34;https://manned.org/alacritty.1&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;code&gt;alacritty(1)&lt;/code&gt;&lt;/a&gt; в которой чётко и ясно написано, где и в какой последовательности ищется конфигурация. Я выбрал вариант размещения в &lt;code&gt;.config/alacritty/alacritty.toml&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Готового шаблона конфига больше нет, но появилась man страница 
&lt;a href=&#34;https://manned.org/alacritty.5&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;code&gt;alacritty(5)&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Как можно увидеть, схемы оформления задаются концигурационными параметрами. Править их не стоит в конфиге, а вынести отдельно, благо, что можно импортировать настройки из других файлов.&lt;/p&gt;
&lt;p&gt;Раньше я пользовался схемами проекта 
&lt;a href=&#34;https://github.com/eendroroy/alacritty-theme&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/eendroroy/alacritty-theme&lt;/a&gt;, но теперь они портировались на TOML и переехали в основной проект: 
&lt;a href=&#34;https://github.com/alacritty/alacritty-theme.git&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/alacritty/alacritty-theme.git&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;И вот такая полная конфигурация образовалась у меня:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://gist.github.com/h4tr3d/0495bf69a9601c78cad5bb65db797113&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://gist.github.com/h4tr3d/0495bf69a9601c78cad5bb65db797113&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Или:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-toml&#34; data-lang=&#34;toml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;~/.config/alacritty/alacritty-theme/themes/konsole_linux.toml&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;live_config_reload&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;cursor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;blink_interval&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;500&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;blink_timeout&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;thickness&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;0.40&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;cursor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;shape&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Underline&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;blinking&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;On&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;TERM&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;xterm-256color&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;WINIT_X11_SCALE_FACTOR&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;1.0&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;font&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;size&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;12&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;font&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;bold&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;family&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Meslo LG M DZ&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;style&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Bold&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;font&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;bold_italic&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;family&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Meslo LG M DZ&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;style&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Bold Italic&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;font&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;italic&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;family&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Meslo LG M DZ&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;style&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Italic&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;font&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;normal&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;family&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Meslo LG M DZ&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;style&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Regular&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;keyboard&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;bindings&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;#{ key = &amp;#34;K&amp;#34;, mods = &amp;#34;Shift|Control&amp;#34;, chars = &amp;#34;\u000c&amp;#34; },&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;#{ key = &amp;#34;K&amp;#34;, mods = &amp;#34;Shift|Control&amp;#34;, action = &amp;#34;ClearHistory&amp;#34; },&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;key&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;K&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;mods&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Control|Shift&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;chars&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;reset\n&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;action&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;CreateNewWindow&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;key&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;N&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;mods&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Shift|Control&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;scrolling&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;history&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;window&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;dynamic_title&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;startup_mode&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Maximized&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Рассмотрим чуточку подробнее.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-toml&#34; data-lang=&#34;toml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;~/.config/alacritty/alacritty-theme/themes/konsole_linux.toml&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Это мы подключаем наш файл с описанием цветовой схемы.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-toml&#34; data-lang=&#34;toml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;TERM&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;xterm-256color&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;WINIT_X11_SCALE_FACTOR&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;1.0&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;А вот это уже интересно. Это обход проблем.&lt;/p&gt;
&lt;p&gt;В первом случае, если задан терминал &lt;code&gt;alacritty&lt;/code&gt;, то не работает &lt;strong&gt;dynamic title&lt;/strong&gt;: когда ASNI последовательностью можно установить заголовок терминала. Есть репорт:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://github.com/alacritty/alacritty/issues/1636&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/alacritty/alacritty/issues/1636&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;если пофиксить стартовые скрипты, то частично оно начинает работать, но не работает в Midnight Commander. В значении &lt;code&gt;xterm-256color&lt;/code&gt; работает и в mc.&lt;/p&gt;
&lt;p&gt;По второй опции нужно смотреть репорты:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://github.com/alacritty/alacritty/issues/1501&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/alacritty/alacritty/issues/1501&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://github.com/alacritty/alacritty/issues/1852&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/alacritty/alacritty/issues/1852&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Там можно найти два варианта:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Который использую я: &lt;code&gt;WINIT_X11_SCALE_FACTOR: &#39;1.0&#39;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;и: &lt;code&gt;WINIT_HIDPI_FACTOR: &#39;1&#39;&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Второй вариант у меня не очень хорошо заработал: шрифты стали вести получше, но на экране ноутбука всё равно выходят сильно крупными, тогда, когда на внешнем мониторе - мелким.&lt;/p&gt;
&lt;p&gt;В вашем случае проблемы может и не быть, быть не актуальной или подойдёт другой набор установок.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-toml&#34; data-lang=&#34;toml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;window&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;dynamic_title&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;startup_mode&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Maximized&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Тут всё понятно: запускаться, по умолчанию, в развёрнутом состоянии. И поддерживать Dynamic Title (см. выше установку переменной окружения &lt;code&gt;TERM=xterm-256color&lt;/code&gt;).&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-toml&#34; data-lang=&#34;toml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;scrolling&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;history&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Тут тоже всё просто - число строк буффера обратной прокрутки.&lt;/p&gt;
&lt;p&gt;Настройку шрифтов я пропускаю, тут ничего из космо-науки нет.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-toml&#34; data-lang=&#34;toml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;cursor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;blink_interval&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;500&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;blink_timeout&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;thickness&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;0.40&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;cursor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;shape&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Underline&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;blinking&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;On&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Мне нравится &amp;ldquo;олдскульный&amp;rdquo;, &amp;ldquo;DOSовский&amp;rdquo; курсор: горизонтальная линия, достаточно толстая и заметная (привет Konsole). Alacritty позволяет настроить всё как мне нравится.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-toml&#34; data-lang=&#34;toml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;live_config_reload&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Очень удобная опция. Alacritty следит за своим конфигом, и если он изменился, то перечитывает его и применяет новые настройки. Понятно, что те же настройки переменных окружения подхватиться на лету не смогут, для этого нужен перезапуск дочернего процесса оболочки.&lt;/p&gt;
&lt;p&gt;Ещё нюанс, что эта опция следит только за самим файлом конфигурации, но не следит за импортируемыми. Поэтому, в моей конфигурации, при изменении темы, нужно проделать следующий трюк:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;touch alacritty.toml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;вкладки&#34;&gt;Вкладки&lt;/h2&gt;
&lt;p&gt;Ээээ&amp;hellip; Как же так, заявлено же, что без них. Да, без них. Но есть 
&lt;a href=&#34;https://tools.suckless.org/tabbed/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;code&gt;tabbed&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Читам ман:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;man tabbed&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;или: 
&lt;a href=&#34;https://manned.org/tabbed.1&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://manned.org/tabbed.1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;А запускаем так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tabbed -n Alacritty alacritty --embed
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Опция &lt;code&gt;-n Alacritty&lt;/code&gt; нужна что бы установить класс окна через атрибут &lt;code&gt;WM_CLASS&lt;/code&gt;. Как следствие, подтянется иконка приложения и в треях, которые понимают про группировку по классу окна, оно попадёт в группу.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Структура XDG menu</title>
      <link>https://htrd.su/blog/2021/01/30/structure-of-the-xdg-menu/</link>
      <pubDate>Sat, 30 Jan 2021 13:31:36 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2021/01/30/structure-of-the-xdg-menu/</guid>
      <description>&lt;p&gt;Нельзя вот так просто взять и создать &lt;code&gt;MyProgram.desktop&lt;/code&gt; файл в главном меню какого-нить KDE ручками из консоли. Особенно если путь вроде &lt;code&gt;Menu → Wine → Programs → Some Application&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Казалось бы, просто идём в &lt;code&gt;~/.local/share/applications/wine/Programs/Some Application&lt;/code&gt; и создаём &lt;code&gt;MyProgram.desktop&lt;/code&gt; с нужным содержимым. Ан нет. Во-первых, программа появится в меню только после рестарта или после выполнения команды:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kbuildsycoca5
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Во-вторых, она появится совсем в другом месте, а именно в &lt;code&gt;Menu → Прочее&lt;/code&gt;. Вот это поворот&amp;hellip;&lt;/p&gt;
&lt;h2 id=&#34;теория&#34;&gt;Теория&lt;/h2&gt;
&lt;p&gt;На самом деле, за структуру меню отвечает достаточно развесистое дерево с файлами различного содержания. Далее краткий пересказ информации, доступной по ссылкам:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
&lt;a href=&#34;http://www.rhd.ru/docs/manuals/enterprise/RHEL-4-Manual/desktop-guide/ch-ddg-menus.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Red Hat Desktop: Руководство по развертыванию: Глава 3. Редактирование и настройка меню&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
&lt;a href=&#34;https://amoffat.github.io/blog/xdg-menu-entries&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;XDG menu entries&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;А так же не повредит гуглинг на предмет freedesktop.org Desktop Menu Specification.&lt;/p&gt;
&lt;p&gt;И так, для создания иерархии меню, нам нужно:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Desktop файлы - сами файлы запуска приложений. Наш &lt;code&gt;MyProgram.desktop&lt;/code&gt; может выглядеть так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-ini&#34; data-lang=&#34;ini&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;[Desktop entry]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;Type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Application&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;Name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;My Program&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;Comment&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;My super program&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;Exec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;my-program&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;Categories&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Game;Internet&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Все поля описаны в спецификации, а поле &lt;code&gt;Categories&lt;/code&gt; нужно для размещения внутри меню в одной из 
&lt;a href=&#34;https://specifications.freedesktop.org/menu-spec/menu-spec-1.0.html#category-registry&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;стандартных категорий&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Находятся все эти файлы в &lt;code&gt;~/.local/share/applications&lt;/code&gt;. Ну или в системе, в &lt;code&gt;/usr/share/applications&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Файлы описаний директорий - &lt;code&gt;*.directory&lt;/code&gt;. Находятся в &lt;code&gt;~/.local/share/desktop-directories&lt;/code&gt;. Через них можно описать каждый уровень вложенных категорий, назначит подсказку, имя, иконку. Примерное содержимое:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;Desktop entry&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;Type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;Directory
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;Name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;Your App Folderdd
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ну и то, что это всё склеивает: Menu-файлы (&lt;code&gt;*.menu&lt;/code&gt;). Это уже XML описания. Обычно, создаются при помощи хелпера &lt;code&gt;xdg-desktop-menu&lt;/code&gt;. Собственно тут и описывается иерархия меню. Сам файл может выглядеть так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-xml&#34; data-lang=&#34;xml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&amp;lt;!DOCTYPE Menu PUBLIC &amp;#34;-//freedesktop//DTD Menu 1.0//EN&amp;#34; &amp;#34;http://www.freedesktop.org/standards/menu-spec/menu-1.0.dtd&amp;#34;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&amp;lt;!-- Do not edit manually - generated and managed by xdg-desktop-menu --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;Menu&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;Name&amp;gt;&lt;/span&gt;Applications&lt;span class=&#34;nt&#34;&gt;&amp;lt;/Name&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;Menu&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;Name&amp;gt;&lt;/span&gt;MyProgram&lt;span class=&#34;nt&#34;&gt;&amp;lt;/Name&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;Include&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;Filename&amp;gt;&lt;/span&gt;MyProgram.desktop&lt;span class=&#34;nt&#34;&gt;&amp;lt;/Filename&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Include&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Menu&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/Menu&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Здесь создаётся меню с одним вложенным пунктом. А вот следующий файл создаёт более развесистое меню:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-xml&#34; data-lang=&#34;xml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&amp;lt;!DOCTYPE Menu PUBLIC &amp;#34;-//freedesktop//DTD Menu 1.0//EN&amp;#34; &amp;#34;http://www.freedesktop.org/standards/menu-spec/menu-1.0.dtd&amp;#34;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&amp;lt;!-- Do not edit manually - generated and managed by xdg-desktop-menu --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;Menu&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;Name&amp;gt;&lt;/span&gt;Applications&lt;span class=&#34;nt&#34;&gt;&amp;lt;/Name&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;Menu&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;Directory&amp;gt;&lt;/span&gt;YourApp-top.directory&lt;span class=&#34;nt&#34;&gt;&amp;lt;/Directory&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;Name&amp;gt;&lt;/span&gt;YourApp-top&lt;span class=&#34;nt&#34;&gt;&amp;lt;/Name&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;Menu&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;Directory&amp;gt;&lt;/span&gt;YourApp-second.directory&lt;span class=&#34;nt&#34;&gt;&amp;lt;/Directory&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;Name&amp;gt;&lt;/span&gt;YourApp-second&lt;span class=&#34;nt&#34;&gt;&amp;lt;/Name&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;Include&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nt&#34;&gt;&amp;lt;Filename&amp;gt;&lt;/span&gt;MyProgram.desktop&lt;span class=&#34;nt&#34;&gt;&amp;lt;/Filename&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Include&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Menu&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Menu&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/Menu&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;И находится всё это безобразие в: &lt;code&gt;~/.config/menus/applications-merged&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Самый простой способ создать запись, это вызвать:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;xdg-desktop-menu install YourApp-dir.directory MyProgram.desktop
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;создаст что-то вроде первого меню. Для более сложных случаев - ручками. Ну или через редактор меню того же KDE ;-)&lt;/p&gt;
&lt;h2 id=&#34;практика&#34;&gt;Практика&lt;/h2&gt;
&lt;p&gt;А теперь поглядим как это может выглядеть на реальных примерах.&lt;/p&gt;
&lt;p&gt;Для начала Desktop файлы (их несколько, но посмотрим на один):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;.local/share/applications/wine/Programs/IDA Pro 7.5/IDA Pro\ (64-bit).desktop&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-ini&#34; data-lang=&#34;ini&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;[Desktop Entry]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;Name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;IDA Pro (64-bit)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;Exec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;env WINEPREFIX=&amp;#34;/home/user/.wine&amp;#34; /usr/bin/wine C:\\\\windows\\\\command\\\\start.exe /Unix /home/user/Downloads/soft/IDA\\ Pro\\ 7.5/ida64.exe&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;Type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Application&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;StartupNotify&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;Path&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;/home/user/Downloads/soft/IDA Pro 7.5&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;Icon&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;3567_ida64.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;StartupWMClass&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;ida64.exe&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Затем описание директорий. Часть уже создано самим Wine:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;~/.local/share/desktop-directories/wine-wine.directory&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-ini&#34; data-lang=&#34;ini&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;[Desktop Entry]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;Type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Directory&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;Name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Wine&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;Icon&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;wine&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;~/.local/share/desktop-directories/wine-Programs.directory&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-ini&#34; data-lang=&#34;ini&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;[Desktop Entry]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;Type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Directory&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;Name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Programs&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;Icon&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;folder&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;~/.local/share/desktop-directories/wine-Programs-IDA Pro 7.5.directory&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-ini&#34; data-lang=&#34;ini&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;[Desktop Entry]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;Type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Directory&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;Name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;IDA Pro 7.5&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;Icon&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;folder&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;И теперь меню:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;~/.config/menus/applications-merged/wine-Programs-IDA Pro 7.5-IDA Pro (64-bit).menu&lt;/code&gt; (и так для каждого desktop-файла (???)):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-xml&#34; data-lang=&#34;xml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&amp;lt;!DOCTYPE Menu PUBLIC &amp;#34;-//freedesktop//DTD Menu 1.0//EN&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&amp;#34;http://www.freedesktop.org/standards/menu-spec/menu-1.0.dtd&amp;#34;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;Menu&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;Name&amp;gt;&lt;/span&gt;Applications&lt;span class=&#34;nt&#34;&gt;&amp;lt;/Name&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;Menu&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;Name&amp;gt;&lt;/span&gt;wine-wine&lt;span class=&#34;nt&#34;&gt;&amp;lt;/Name&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;Directory&amp;gt;&lt;/span&gt;wine-wine.directory&lt;span class=&#34;nt&#34;&gt;&amp;lt;/Directory&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;Menu&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;Name&amp;gt;&lt;/span&gt;wine-Programs&lt;span class=&#34;nt&#34;&gt;&amp;lt;/Name&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;Directory&amp;gt;&lt;/span&gt;wine-Programs.directory&lt;span class=&#34;nt&#34;&gt;&amp;lt;/Directory&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;Menu&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;Name&amp;gt;&lt;/span&gt;wine-Programs-IDA Pro 7.5&lt;span class=&#34;nt&#34;&gt;&amp;lt;/Name&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;Directory&amp;gt;&lt;/span&gt;wine-Programs-IDA Pro 7.5.directory&lt;span class=&#34;nt&#34;&gt;&amp;lt;/Directory&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;Include&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;lt;Filename&amp;gt;&lt;/span&gt;wine-Programs-IDA Pro 7.5-IDA Pro (64-bit).desktop&lt;span class=&#34;nt&#34;&gt;&amp;lt;/Filename&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Include&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Menu&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Menu&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Menu&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/Menu&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ну и на KDE запускаем после всего созданного &lt;code&gt;kbuildsycoca5&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ kbuildsycoca5 --menutest &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep &lt;span class=&#34;s1&#34;&gt;&amp;#39;IDA Pro 7.5&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kbuildsycoca5 running...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Wine/Programs/IDA Pro 7.5/      wine-Programs-IDA Pro 7.5-IDA Pro &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;64-bit&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;.desktop
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Радуемся, что приложение ровно там, где мы и хотели :) Ну а для меню, просто убираем агрумент и оно перестроит бинарный кеш.&lt;/p&gt;
&lt;h2 id=&#34;вместо-заключения&#34;&gt;Вместо заключения&lt;/h2&gt;
&lt;p&gt;Каждый раз подтверждается истина, пусть и не прописная: чем проще вещь снаружи, тем сложнее она устроена внутри. Мы все зубоскалили по поводу реестра Windows. Но уже имеем практически полный аналог в виде 
&lt;a href=&#34;https://ru.wikipedia.org/wiki/GConf&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;code&gt;GConf&lt;/code&gt;&lt;/a&gt; бинарный внутри и недоступный для управления без внешних специализированных программ. При этом разбавленный отдельными конфигурационными файлами, специфичными для конкретных утилит. Благо решили собрать их в &lt;code&gt;~/.config&lt;/code&gt;. А потом и его перестало хватать, появились &lt;code&gt;~/.local&lt;/code&gt;, &lt;code&gt;~/.cache&lt;/code&gt; и т.п.&lt;/p&gt;
&lt;p&gt;Хорошо это или плохо сможет показать только время. Точно одно: чем больше сущностей, тем сложнее их все реализовать, тем более - реализовать хорошо.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>HOSTALIASES for IP</title>
      <link>https://htrd.su/blog/2020/12/24/hostaliases_for_ip/</link>
      <pubDate>Thu, 24 Dec 2020 09:59:47 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2020/12/24/hostaliases_for_ip/</guid>
      <description>&lt;p&gt;Время от времени возникает необходимость организовать аналог &lt;code&gt;/etc/hosts&lt;/code&gt;, но индивидуально для пользователя. Такая возможность есть, и называется &lt;code&gt;HOSTALIASES&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;hostaliases&#34;&gt;HOSTALIASES&lt;/h2&gt;
&lt;p&gt;Более подробно про него можно почитать в 
&lt;a href=&#34;https://manned.org/hostname.7&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;code&gt;hostname(7)&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Трюк будет работать только если удовлетворяются два условия для работы программы:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;используется 
&lt;a href=&#34;https://manned.org/getaddrinfo.3&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;code&gt;getaddrinfo(3)&lt;/code&gt;&lt;/a&gt; или 
&lt;a href=&#34;https://manned.org/gethostbyname.3&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;code&gt;gethostbyname(3)&lt;/code&gt;&lt;/a&gt; для резолвинга имён;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;не установлен SETUID бит для запуска с правами другого пользователя. Для таких программ glibc чистит некоторые переменные окружения в том числе и &lt;code&gt;HOSTALIASES&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Второе условия интересное, к примеру &lt;code&gt;ping&lt;/code&gt; имеет установленный setuid бит для пользователя root, поэтому хосты, описанные через &lt;code&gt;HOSTALIASES&lt;/code&gt; с ним работать не будут.&lt;/p&gt;
&lt;p&gt;Ещё один нюанс кроется в самом названии переменной окружения - HOST ALIASES, или &amp;ldquo;синонимы хостов&amp;rdquo;. Т.е. это не прямая замена &lt;code&gt;/etc/hosts&lt;/code&gt;, это синонимы для уже существующих хостов. И слово &amp;ldquo;хост&amp;rdquo; здесь имеет ключевое значение: IP адрес указываться не может.&lt;/p&gt;
&lt;p&gt;Приехали&amp;hellip;&lt;/p&gt;
&lt;p&gt;Но в наш век тотального интернета на любой чих уже придуман свой сервис. Логика простая:
если мы не можем указать IP, то мы должны указать доменное имя, да такое, что бы оно раскрылось в нужный нам IP.&lt;/p&gt;
&lt;p&gt;И тут мы приветствуем сервис &lt;del&gt;
&lt;a href=&#34;https://xip.io/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;xip.io&lt;/a&gt;&lt;/del&gt;. xip.io больше не встречаем, больше не доступен. На замену ему:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://nip.io&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;nip.io&lt;/a&gt; - drop-in-place замена. Заменяем &lt;code&gt;x&lt;/code&gt; на &lt;code&gt;n&lt;/code&gt; :-)&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://sslip.io&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;sslip.io&lt;/a&gt; - так же drop-in-place замена.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;С ним всё очень просто: скрываем IP адрес в виде под-домена и весь этот под-домен резолвится в нужный нам адрес. Трудно для восприятия? Поэтому вот простой пример:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ host 192.168.0.100.nip.io
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;192.168.0.100.nip.io has address 192.168.0.100
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;На сайте приведены и другие форматы имени, можете поиграться с любыми.&lt;/p&gt;
&lt;p&gt;Итак, теперь если мы хотим записать наш алиас для имени, допустим &lt;code&gt;dev_local&lt;/code&gt;, с реальным IP адресом 192.168.0.100, то нужно произвести примерно следующее:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;dev_local 192.168.0.100.nip.io&amp;#39;&lt;/span&gt; &amp;gt;&amp;gt; ~/.hosts
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;HOSTALIASES&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;~/.hosts
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Последнюю строчку можно добавить в стартовые скрипты, что бы не вводить каждый раз. После чего можно запустить, допустим, Firefox:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;firefox dev_local
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Вуаля!&lt;/p&gt;
&lt;h2 id=&#34;ssh-удалённая-отладка-и-все-все-все&#34;&gt;SSH, удалённая отладка и все все все&lt;/h2&gt;
&lt;p&gt;Теперь вопрос, а для чего это может пригодится?&lt;/p&gt;
&lt;p&gt;У меня, как обычно, возникла необходимость удалённой отладки (
&lt;a href=&#34;https://htrd.su/blog/2016/01/03/openocd_gdb_i_silno_udaljonnaja_otladka/&#34;&gt;в этот раз не сильно&lt;/a&gt;) через Qt Creator. Для доступа к устройству используется SSH, но с достаточно хитрой конфигурацией, все параметры которой нельзя передать через диалог настройки устройства в QtC. Да и доступ этот нужен через консоль, для того же ssh, scp. Я всегда такие хитрые настройки выношу в &lt;code&gt;~/.ssh/config&lt;/code&gt;, создавая короткий алиас, вроде упомянутого выше &lt;code&gt;dev_local&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;В диалоге настройки QtC для Generic Linux Device можно указывать короткое SSH имя и SSH часть это прекрасно поймёт, но как только дойдёт время до запуска отладчика, то ничего путнего вы не получите: тот же самый синоним используется как имя хоста для подключения к &lt;code&gt;gdb-server&lt;/code&gt; на удалённом хосте, про который система разрешения доменных имён понятия не имеет.&lt;/p&gt;
&lt;p&gt;Вот тут нам и поможет трюк с &lt;code&gt;HOSTALISES&lt;/code&gt;. То есть, у нас теперь есть SSH конфигурация с именем &lt;code&gt;dev_local&lt;/code&gt; в &lt;code&gt;~/.ssh/config&lt;/code&gt; и запись:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dev_local 192.168.0.100.nip.io
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;в &lt;code&gt;~/.hosts&lt;/code&gt;, после чего удалённая отладка волшебным образом начинает работать в QtC.&lt;/p&gt;
&lt;h3 id=&#34;более-сложный-вариант&#34;&gt;Более сложный вариант&lt;/h3&gt;
&lt;p&gt;Для более сложного варианта не нужен трюк с сервисами типа xip.io/nip.io, но всё же.&lt;/p&gt;
&lt;p&gt;Итак, теперь у меня машина не в локальной сети, а в удалённой. Да ещё доступ через &amp;ldquo;бастион&amp;rdquo; - это сервер, который торчит наружу и пробрасывает ssh подключения, при этом сам ssh подключения не устанавливает, но ключи проверяет. По сути, аналог таких действий:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;подключиться к внешнему хосту;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;с него подключиться к внутреннему хосту.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Конфигурация ssh для такого подключения может выглядеть так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Host bastion
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        Port &lt;span class=&#34;m&#34;&gt;2222&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        User tunnel
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        Hostname bastion.company.com
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        IdentityFile ~/.ssh/id_rsa-company
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        IdentitiesOnly yes
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Host dev_remote
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        User root
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        Hostname 192.168.1.200
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        IdentityFile ~/.ssh/id_rsa-company
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        ProxyCommand ssh bastion -W %h:%p
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Здесь хоть и наворочено, но при детальном разборе всё достаточно просто и логично. Для подключения достаточно набрать:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh dev_remote
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Вопрос: а что записать в &lt;code&gt;~/.hosts&lt;/code&gt;? Ответ простой:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dev_remote localhost
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Но понятным он от этого не становится :) Дело в том, что достучаться по IP, без VPN (можно поднять SSH VPN) к &lt;code&gt;dev_remote&lt;/code&gt; мы ни при каких условиях не сможем, поэтому, самый простой способ, это использовать тот же самый SSH и пробросить отладочный порт gdb-server на localhost и направлять gdb на него.&lt;/p&gt;
&lt;p&gt;И именно тут кроется небольшое ограничение: в настройках QtC для устройства нужно указать ОДИН отладочный порт (Free Ports в настройках Generic Linux Device в QtC) и именно его пробросить (номер порта локального и удалённого должны быть идентичны):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh -L 10000:localhost:100000 dev_remote
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Команду нужно запускать заново после перезагрузки удалённой машины.&lt;/p&gt;
&lt;h2 id=&#34;устройство-в-локальной-сети-но-нет-интернета&#34;&gt;Устройство в локальной сети, но нет интернета&lt;/h2&gt;
&lt;p&gt;Или нет доступа к сервисам xip.io/nip.io (с роскомпозором станется).&lt;/p&gt;
&lt;p&gt;Тут, как обычно, варианта два:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;самый правильный, по мне: настроить mdns и обращаться к удалённой машине по имени &lt;code&gt;somehostname.local&lt;/code&gt;, его же прописать в &lt;code&gt;~/.hosts&lt;/code&gt;;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;или использовать тот же подход, что и для удалённого сервера, с алиасом на &lt;code&gt;localhost&lt;/code&gt; и пробросом порта вручную.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;вместо-заключения&#34;&gt;Вместо заключения&lt;/h2&gt;
&lt;p&gt;В копилку возможностей удалённой отладки прибыло. Доступ через &amp;ldquo;бастион&amp;rdquo; можно расширить, когда совсем ничего нет, сеть, допустим, домашняя, нет белого IP, пусть даже динамического, но есть возможность запустить Any Desk. Да, пусть это закрытое коммерческое решение, но оно позволяет пробрасывать порты. А этого уже достаточно для организации SSH доступа на удалённую машину и запуска отладки.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Двойной траверс в окрестностях Владивостока</title>
      <link>https://htrd.su/blog/2020/04/19/tympur-2020-04/</link>
      <pubDate>Sun, 19 Apr 2020 02:26:24 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2020/04/19/tympur-2020-04/</guid>
      <description>&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;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Программа экспериментов открыта и допускается к расширению в полевых условиях.&lt;/p&gt;
&lt;p&gt;Число. Подпись.&lt;/p&gt;
&lt;p&gt;Итак, изначально планировали исследовать лесные тропы и дороги от Артёма в сторону вдх.Богатого. Маршрут не был изначально продуман, были только абстрактные умозаключения. К сожалению, обстоятельства скорректировали задуманное: артёмовская часть группы не смогла принять участие в субботнем выходе, а у нас не получалось присоединиться в воскресенье.&lt;/p&gt;
&lt;p&gt;В результате, я с Катей решаем добраться на машине максимально на Океанский хребет и дальше действовать по обстоятельствам. То есть да, маршрут не был продуман заранее и формировался даже не перед стартом, а корректировался по ходу движения :)&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;/ul&gt;
&lt;p&gt;
&lt;a href=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/5491b59530c756bf16a9f16211abf934/2020-04-18_%D0%A2%D0%B8%D0%BC%D0%BF%D1%83%D1%802020.png&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/16c2391598211b5829dcbd5e2d7aba3b/2020-04-18_%D0%A2%D0%B8%D0%BC%D0%BF%D1%83%D1%802020-small.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ага, траверснули сразу два хребта! Точно лоси :)&lt;/p&gt;
&lt;p&gt;Авто часть (от перевала):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Длина: 5.81km, ↗310 m, ↘135m
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Время: 00:54:23h, скорость: 6.4km/h
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;В движении: 00:42:44h, скорость: 8.2km/h
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Начало: суббота, 18 апреля 2020 г. 10:54:22 +10
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Конец: суббота, 18 апреля 2020 г. 11:48:45 +10
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;скорость низкая только за счёт небольших радиальных выходов.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/2bc47c1a691e5bfd7b8cafcd58fe0b51/2020-04-18_%D0%A2%D0%B8%D0%BC%D0%BF%D1%83%D1%802020-%D0%BF%D1%80%D0%BE%D1%84%D0%B8%D0%BB%D1%8C-%D0%B0%D0%B2%D1%82%D0%BE.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;И самое вкусное - пешая часть:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Длина: 22km, ↗975 m, ↘980m
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Время: 07:25:12h, скорость: 2.9km/h
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;В движении: 05:43:16h, скорость: 3.8km/h
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Начало: суббота, 18 апреля 2020 г. 11:48:45 +10
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Конец: суббота, 18 апреля 2020 г. 19:13:57 +10
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img src=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/0bb3e6582606c595c287377ebb773a03/2020-04-18_%D0%A2%D0%B8%D0%BC%D0%BF%D1%83%D1%802020-%D0%BF%D1%80%D0%BE%D1%84%D0%B8%D0%BB%D1%8C-%D0%BF%D0%B5%D1%88%D0%BA%D0%B0.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Ещё на этапе автомобильной части путешествия появляются изумительные виды и скалы, стоит останавливаться и любоваться. Видно, как просыпается природа, набухают почки, распускаются цветы. Постепенно окрываются виды на Уссурийский залив, бухту Шамора, горнолыжную базу Комета.&lt;/p&gt;
&lt;p&gt;Останцы на высоте 260м в самом начале пути:&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/63c8925d0085427e8bc1512adb90b955/P_20200418_110338_vHDR_On.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/8b7e3221df3aef1bd114628ff8f3d896/P_20200418_110338_vHDR_On-small.jpg&#34; alt=&#34;P_20200418_110338_vHDR_On&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Вид на Уссурийский залив и бухту Шамора:&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/312c3923cdbd3435c349f2d1d3d5a663/P_20200418_110454.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/672e7d0aa57971f8a1cc48a2b690e3ee/P_20200418_110454-small.jpg&#34; alt=&#34;P_20200418_110454&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/024b555289e9ba5bfc14a0d1fff7c61d/P_20200418_110543.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/9d6e3d814db9c25d1690a36e231aa1d0/P_20200418_110543-small.jpg&#34; alt=&#34;P_20200418_110543&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;А на горнолыжке ещё присутствуют остатки снега:&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/146f663ce58d037254229db625529d2a/P_20200418_111733.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/3f3aa2122c82729702a69ecfba9473dc/P_20200418_111733-small.jpg&#34; alt=&#34;P_20200418_111733&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Зелень хвойных контрастирует с бурой растительностью:&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/d3bfab694b0ce40a288b6c711f87d5d1/P_20200418_111751.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/d8367a155982a2a11d8086dc3ad6e2de/P_20200418_111751-small.jpg&#34; alt=&#34;P_20200418_111751&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/67bd16ae81548558c8721c72a4c039f7/P_20200418_111815.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/3f83fd56d552667dc0bc3b10c2f55e2d/P_20200418_111815-small.jpg&#34; alt=&#34;P_20200418_111815&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Небо хмурое, в начале нас даже пытался запугать дождь. В результате сам напугался!&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/e1afd7fdc6bdaddab98b9294c746f14d/P_20200418_111839_vHDR_On.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/4f5eaa62476ca64fc81a597e17f86222/P_20200418_111839_vHDR_On-small.jpg&#34; alt=&#34;P_20200418_111839_vHDR_On&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;И здесь стояли военные:&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/329100f3a60eb0ef4ee0790673f7a1a4/P_20200418_111913_vHDR_On.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/402388d85d427397c8d6922631a671dd/P_20200418_111913_vHDR_On-small.jpg&#34; alt=&#34;P_20200418_111913_vHDR_On&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/20afd2ebcdda79cbe494dbe4d1bacc4d/P_20200418_111952_vHDR_On.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/8b41be0f87da9982ec83c9bdd6bf5c2f/P_20200418_111952_vHDR_On-small.jpg&#34; alt=&#34;P_20200418_111952_vHDR_On&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/c5d8c047df6b3fcd7588d76c8878dfa3/P_20200418_112057_vHDR_On.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/abc32afe87a137c30b4d621362c4bf30/P_20200418_112057_vHDR_On-small.jpg&#34; alt=&#34;P_20200418_112057_vHDR_On&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;На другой стороне залива виднеется г.Большой Иосиф, а прямо под нами - газопровод:&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/ebf10d6561981481285be8e914e64d02/P_20200418_113142_vHDR_On.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/bb53e40363abf8a6717feb552e677d70/P_20200418_113142_vHDR_On-small.jpg&#34; alt=&#34;P_20200418_113142_vHDR_On&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Возле базовой станции дорога (достаточно приличная и без проблем проходимая для машин типа Honda CR-V или Forester) заканчивается и оставляем машину, благо места хватает. Дальше траверс Океанского хребта. Он слабо заросший, покатый и по ходу движения позволяет любоваться видами сразу двух заливов, созерцать корабли на рейде, осматривать панорамы бухты Шамора, территорию лагеря Океан. Огорчает только то, что изначально пешеходная тропа сильно раскатана мотоциклистами. На хребте, примерно за километр до скалы Коготь есть спуск в паспадок ручья Хайндот, спуск представляет собой зарастающую лесную дорогу, которой время от времени пользуются любители экстремальной езды.&lt;/p&gt;
&lt;p&gt;В самом начале пути, чуточку отойдя от машины, природа нас решила порадовать созерцанием косули (судя по мелькающей белой заднице). Запечатлеть, к сожалению, моя &amp;ldquo;балалайка&amp;rdquo; этого не смогла, но позитива прибавило!&lt;/p&gt;
&lt;p&gt;Хребет весь усыпан тригопунктами:&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/fe3b8d25339a6c17a9d26fd09e24cb4f/P_20200418_122354_vHDR_On.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/d0bb1e18d5864ff6d63042f402971d3b/P_20200418_122354_vHDR_On-small.jpg&#34; alt=&#34;P_20200418_122354_vHDR_On&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/43d86908539243fc8eb1ce1e4d4cd064/P_20200418_122434.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/2337b78b0efe57b43368267d9910cda1/P_20200418_122434-small.jpg&#34; alt=&#34;P_20200418_122434&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/5d1075561667b9d01fffaf3be6e33c98/P_20200418_122438.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/bd8bd1d726bb2cdc36f98278ba6de120/P_20200418_122438-small.jpg&#34; alt=&#34;P_20200418_122438&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Вид на долину ручья Хайндот, кусочек вдх.Богатое и Амурский залив:&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/4ffa8ea8624dc68bd745a01945ef5406/P_20200418_124134_vHDR_On.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/61d3965da655493ae4cc8b95068248e7/P_20200418_124134_vHDR_On-small.jpg&#34; alt=&#34;P_20200418_124134_vHDR_On&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Скала Коготь, от неё можно уйти в долину р.Богатая (прямо через портал за спиной):&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/08e3fc472abe660c653ffb9c0cc2129f/P_20200418_131012.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/d0de0d06db85be12f8a61f64115b56c9/P_20200418_131012-small.jpg&#34; alt=&#34;P_20200418_131012&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;После Когтя тропа доходит до последней локальной вершины на хребте и начинает сваливаться в сторону пос.Емар. Как вариант, маршрут можно так и закончить, спуститься до Емара, там сесть на автобус и добраться до города (только когда текущий недокарантин закончится).&lt;/p&gt;
&lt;p&gt;Для продолжения траверса и выхода на хр.Береговой имеет смысл взять азимут на хорошо заметную локальную вершину с неофициальным названием Тимпур и спуститься без тропы на перевал. Через перевал проходит линия электропередач и дорога от Емара в долину р.Богатой. По этой дороге можно добраться до исторической достопримечательности: землянки Лазо. С перевала так же уходит дорога в сторону Берегового хребта - движемся по  ней, но не забываемся на первой же развилке уйти влево, в противном случае начнёте сваливаться с хребта и  выйдете снова в окрестности посёлка.&lt;/p&gt;
&lt;p&gt;Дорога идёт практически на протяжении всего подъёма на хребет. Движение при этом происходит по лесу, так что особо ничего рассмотреть не получится. Но уже на первой же вершине хребта всё разительно меняется. И дальше хребет идёт такой же открытый, как и Океанский, тропа заметная (и тоже раскатанная мотоциклистами).&lt;/p&gt;
&lt;p&gt;Изюминкой этого участка маршрута является вершина Тимпур - туда постоянно гоняют отдыхающих в Океане и участников школы вожатых. После этой вершины ещё некоторое время движемся по плато и дальше резко сбрасываем высоту и выходим на трассу&amp;hellip;&lt;/p&gt;
&lt;p&gt;Народное творчество на подходе к первой вершине Берегового хребта:&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/7acbe5ac51aeac7901f18b57e181869c/P_20200418_143851_vHDR_On.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/56d3bbfcf7182225774bc594df3034d2/P_20200418_143851_vHDR_On-small.jpg&#34; alt=&#34;P_20200418_143851_vHDR_On&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Скалы и останцы всегда красивы и привлекательны:&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/015760ad66d969d82023937ebba66ee7/P_20200418_145508_vHDR_On.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/c66cd43cd738a7f13281ed7dfea7e50f/P_20200418_145508_vHDR_On-small.jpg&#34; alt=&#34;P_20200418_145508_vHDR_On&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Тимпур - плоская вершина за деревьями справа, можно разглядеть флагшток:&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/2bbe1ff1c2df747d43b34cc7954fc479/P_20200418_145556_vHDR_On.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/15d16201acc1526e29aedb3e4b23b3fe/P_20200418_145556_vHDR_On-small.jpg&#34; alt=&#34;P_20200418_145556_vHDR_On&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Не хребет, а плато!&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/8402a957b0056fa3a7cfc7dbc209fced/P_20200418_150205_vHDR_On.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/04b2410ba0b0e9f2aa9e0e0a1920bd35/P_20200418_150205_vHDR_On-small.jpg&#34; alt=&#34;P_20200418_150205_vHDR_On&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/653b79050644696a60dbe56fd35e2e7e/P_20200418_150323_vHDR_On.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/e0846eec63b6d92080f032aaba0e2bc1/P_20200418_150323_vHDR_On-small.jpg&#34; alt=&#34;P_20200418_150323_vHDR_On&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Камень для медитаций и созерцания на в.Тимпур:&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/e34c1aee843dca5125d5fbc62eae1e1a/P_20200418_150341.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/a2afabc47f3f40b2f8242e823724cd7d/P_20200418_150341-small.jpg&#34; alt=&#34;P_20200418_150341&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;За крайним холмиком начинается резкий сброс высоты и сваливаемся с хребта на трассу:&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/fdd2c6495379af910ac0c6b30942316d/P_20200418_151443_vHDR_On.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/fb0f2a0e46f22afd72d05e91fe995a17/P_20200418_151443_vHDR_On-small.jpg&#34; alt=&#34;P_20200418_151443_vHDR_On&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/1cef7a6c5f9610c0bbfd59714590f7d7/P_20200418_152940_vHDR_On.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/5356df06b865768e7d5d5b9c6049e21b/P_20200418_152940_vHDR_On-small.jpg&#34; alt=&#34;P_20200418_152940_vHDR_On&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/40c8cc313d4640e83df43469e58054d6/P_20200418_153022.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/3bc7ed5529452ae5637d57dec8724eaf/P_20200418_153022-small.jpg&#34; alt=&#34;P_20200418_153022&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;По трассе проходим не больше 500 метров и сворачиваем на грунтовую дорогу, идущую в сторону ЛЭП. Фотографий не делал, но как же она загажена уродами, что сбрасывают здесь мусор! Люди, очнитесь!&lt;/p&gt;
&lt;p&gt;Наличие дороги вдоль ЛЭП явление чисто номинальное. Лучше её считать колеёй по болоту. Сей факт подтверждает дружных хор лягушек, что сопровождал нас на всём протяжении пути. Доходило до того, что натурально шестом приходилось щупать кочки и прыгать по ним. В следующий раз есть задумка дойти всё же до самой реки Богатая и двигаться по дороге там (если не врут карты). Косвенно наличие оной так же подтверждает факт наличия новой ЛЭП (заметной с хребта). В этот же раз у нас было желание посетить землянку Лазо, что крайней нерационально делать, если двигаться по самой Богатой.&lt;/p&gt;
&lt;p&gt;Помимо болот и лягушачьего пения долина более явственно даёт почувствовать весну обилием первых цветов.&lt;/p&gt;
&lt;p&gt;Кстати, ручьёв с питьевой водой на этом участке маршрута нет, а очень на них рассчитывали. Это ещё один довод за движение вдоль реки, а не старых-новых ЛЭП.&lt;/p&gt;
&lt;p&gt;В конце маршрута, когда пересекли ручей Хайндот, следующий ориентир - просека газопровода. По ней набор &amp;lt;300 м на расстояние 1.2км и мы, практически, у самой машины, где и закончили пешую часть этого замечательного во всех отношениях маршрута.&lt;/p&gt;
&lt;p&gt;И тут природа нас снова, под занавес, решила порадовать. На этот раз созерцанием крупного кабана, треверсирующего склон и переходящего поперёк просеку газопровода. А ведь, по сути, это ещё далеко не глухая тайга!&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/2a76ab05d79a625d6f683e3d26582342/P_20200418_160323.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/26f1daee9ec669de7e926d59aab47699/P_20200418_160323-small.jpg&#34; alt=&#34;P_20200418_160323&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Постамент на месте землянки Лазо:&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/20ec200fd165fd70a009ede920ee5203/P_20200418_165106.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/8565b87cfb1aace35da756f68a17b7ca/P_20200418_165106-small.jpg&#34; alt=&#34;P_20200418_165106&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Не самая ужасная часть дороги, но даже Катя захотела себе посох:&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/29cec395e765580e56ad3ba08a33ae38/P_20200418_172125.jpg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/uploads/8335591b15ca4f089b82097b9052e9aa/P_20200418_172125-small.jpg&#34; alt=&#34;P_20200418_172125&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;На этом, наше пусть и не первое, но первое обстоятельное знакомство с этим районом завершилось. В голове сразу родилось несколько вариантов маршрутов, которые нужно обязательно воплотить в реальные треки. В том числе, остался незакрытым переход от Артёма до вдх.Богатое (Настя, привет!).&lt;/p&gt;
&lt;p&gt;Ссылки:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Альбом: 
&lt;a href=&#34;https://photos.app.goo.gl/akxvsUTiAjRen6DC7&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://photos.app.goo.gl/akxvsUTiAjRen6DC7&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Точки и треки: 
&lt;a href=&#34;https://htrd.su/img/post/2020/04/19/tympur-2020-04/tympur2020.gpx&#34;&gt;tympur2020.gpx&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>platform_device subdevice</title>
      <link>https://htrd.su/blog/2020/04/10/platform-device-subdevice/</link>
      <pubDate>Fri, 10 Apr 2020 15:23:12 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2020/04/10/platform-device-subdevice/</guid>
      <description>&lt;p&gt;Изучал 
&lt;a href=&#34;https://github.com/Xilinx/linux-xlnx/blob/xlnx_rebase_v4.19/sound/soc/xilinx/xlnx_pl_snd_card.c&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/Xilinx/linux-xlnx/blob/xlnx_rebase_v4.19/sound/soc/xilinx/xlnx_pl_snd_card.c&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Конкретно функцию &lt;code&gt;xlnx_snd_probe()&lt;/code&gt; и не мог понять&amp;hellip; Как в &lt;code&gt;pdev-&amp;gt;dev.platform_data&lt;/code&gt; оказываются нужные ноды, в нужной последовательности (сначала PLAYBACK, потом CAPTURE), причём, если PLAYBACK нет, то там будет &lt;code&gt;NULL&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Так как у драйвера нет &lt;code&gt;of_match_table&lt;/code&gt;, то он:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;сам не загрузится (это так на практике) и&lt;/li&gt;
&lt;li&gt;что бы &lt;code&gt;xlnx_snd_probe()&lt;/code&gt; что-то нашла, через него нужно пропустить ВСЕ &lt;code&gt;platform_device&lt;/code&gt;&amp;hellip; но не всех же платформенных устройств в &lt;code&gt;platform_data&lt;/code&gt; вообще именно этот тип данных будет!&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Второе оказывается не так. Это &amp;ldquo;виртуальный&amp;rdquo; драйвер, а другой, 
&lt;a href=&#34;https://github.com/Xilinx/linux-xlnx/blob/xlnx_rebase_v4.19/sound/soc/xilinx/xlnx_formatter_pcm.c#L787&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;реальный&lt;/a&gt; для этого устройства,  вызовом функции 
&lt;a href=&#34;https://elixir.bootlin.com/linux/v5.6.3/source/include/linux/platform_device.h#L111&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;code&gt;platform_device_register_resndata()&lt;/code&gt;&lt;/a&gt; собственно создаёт &lt;code&gt;platform_device&lt;/code&gt;, и в качестве второго аргумента оно принимает имя, по которому будет отфильтровываться, какому драйверу оно может быть передано. В данном случае &amp;ldquo;xlnx_snd_card&amp;rdquo;. И этот же вызов регистрирует &lt;code&gt;pdev-&amp;gt;dev.platform_data&lt;/code&gt;, в нужном для целевого драйвера виде.&lt;/p&gt;
&lt;p&gt;А уже матчинг подходящего платформенного драйвера для вновь созданного платформенного устройства будет происходить здесь: 
&lt;a href=&#34;https://elixir.bootlin.com/linux/v5.6.3/source/drivers/base/platform.c#L1098&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;code&gt;platform_match()&lt;/code&gt;&lt;/a&gt;. В данном случае - по имени устройства и по имени драйвера.&lt;/p&gt;
&lt;p&gt;Тяжело идёт.&lt;/p&gt;
&lt;p&gt;PS разные верии ядра роли не играют.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>KDE: WA для возврата окон на главный экран при подключении внешнего монитора</title>
      <link>https://htrd.su/blog/2020/03/08/kde-wa-for-moving-windows-back-to-the-primary-screen/</link>
      <pubDate>Sun, 08 Mar 2020 00:51:52 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2020/03/08/kde-wa-for-moving-windows-back-to-the-primary-screen/</guid>
      <description>&lt;p&gt;Суть проблемы, если коротко, в том, что подключая внешний монитор к ноутбуку в том случае, если он логически расширяет экран влево (находится левее основного экрана), то все открытые окна с экрана ноутбука перемещается на вновь подключенный экран.&lt;/p&gt;
&lt;p&gt;Вообще, проблема актуальна не только для ноутбука, но частое подключение и отключение мониторов более присуще именно ноутбукам.&lt;/p&gt;
&lt;p&gt;Решения проблемы не существует на данный момент. Ну&amp;hellip; или я его не нашёл. Но буквально сегодня разыскал занимательный хак, как вернуть окна, если они прыгнули на левый (в прямом и переносном смысле) монитор:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://www.reddit.com/r/kde/comments/cwi7z5/shell_script_to_force_all_your_windows_to_your/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Shell  script to force all your windows to your your primary display (useful  for people with a secondary monitor to the LEFT of their primary)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Под катом сохраню копию, на всякий случай. Вообще, как грубое решение в лоб работает. Повесил на горячую клавишу &lt;code&gt;Super+P&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#!/bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;RULEFILE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$HOME&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/.config/kwinrulesrc&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp &lt;span class=&#34;nv&#34;&gt;$RULEFILE&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$RULEFILE&lt;/span&gt;.bak
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;KGROUPNUM&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;kreadconfig5 --file &lt;span class=&#34;nv&#34;&gt;$RULEFILE&lt;/span&gt; --group &lt;span class=&#34;s2&#34;&gt;&amp;#34;General&amp;#34;&lt;/span&gt; --key count&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;let&lt;/span&gt; KGROUPNUM++
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kwriteconfig5 --file &lt;span class=&#34;nv&#34;&gt;$RULEFILE&lt;/span&gt; --group &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;KGROUPNUM&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; --key Description &lt;span class=&#34;s1&#34;&gt;&amp;#39;Moves Windows to Screen&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kwriteconfig5 --file &lt;span class=&#34;nv&#34;&gt;$RULEFILE&lt;/span&gt; --group &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;KGROUPNUM&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; --key screen &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kwriteconfig5 --file &lt;span class=&#34;nv&#34;&gt;$RULEFILE&lt;/span&gt; --group &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;KGROUPNUM&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; --key screenrule &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kwriteconfig5 --file &lt;span class=&#34;nv&#34;&gt;$RULEFILE&lt;/span&gt; --group &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;KGROUPNUM&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; --key types &lt;span class=&#34;m&#34;&gt;505&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kwriteconfig5 --file &lt;span class=&#34;nv&#34;&gt;$RULEFILE&lt;/span&gt; --group &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;KGROUPNUM&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; --key wmclass &lt;span class=&#34;s1&#34;&gt;&amp;#39;^((?!lattedock).)*$&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kwriteconfig5 --file &lt;span class=&#34;nv&#34;&gt;$RULEFILE&lt;/span&gt; --group &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;KGROUPNUM&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; --key wmclasscomplete &lt;span class=&#34;s1&#34;&gt;&amp;#39;false&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kwriteconfig5 --file &lt;span class=&#34;nv&#34;&gt;$RULEFILE&lt;/span&gt; --group &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;KGROUPNUM&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; --key wmclassmatch &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kwriteconfig5 --file &lt;span class=&#34;nv&#34;&gt;$RULEFILE&lt;/span&gt; --group &lt;span class=&#34;s2&#34;&gt;&amp;#34;General&amp;#34;&lt;/span&gt; --key count &lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;KGROUPNUM&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sleep &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;qdbus org.kde.KWin /KWin reconfigure
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sleep &lt;span class=&#34;m&#34;&gt;6&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv &lt;span class=&#34;nv&#34;&gt;$RULEFILE&lt;/span&gt;.bak &lt;span class=&#34;nv&#34;&gt;$RULEFILE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sleep &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;qdbus org.kde.KWin /KWin reconfigure
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Длинные выходные на Камчатке</title>
      <link>https://htrd.su/blog/2020/02/29/long-weekend-at-kamchatka/</link>
      <pubDate>Sat, 29 Feb 2020 18:18:14 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2020/02/29/long-weekend-at-kamchatka/</guid>
      <description>&lt;p&gt;Так получилось, что поймали акционные билеты до Петропавловска, на троих человек - около 22 тыр. Глядя на цену сразу мысль - надо брать!&lt;/p&gt;
&lt;p&gt;Ниже небольшой фото-видео-отчёт с выходных на Камчатке. Для тех кого волнует трафик: осторожно, много тяжёлых фото! (я пока не нашёл адекватного варианта хостинга фотографий).&lt;/p&gt;
&lt;p&gt;Все фото можно посмотреть в 
&lt;a href=&#34;https://photos.app.goo.gl/32na9h8tmQt4oH6XA&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;галерее на Google Photo&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;день-1-прилёт-музей-гонка-пролог-берингия-2020&#34;&gt;День 1. Прилёт, музей, гонка-пролог Берингия 2020&lt;/h2&gt;
&lt;p&gt;Вид на Авачинский залив и влк.Вилючинский:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211192955-516161a9-55a8-4ee1-ac67-72c53bade8b7.jpg&#34; alt=&#34;P_20200222_103254_small&#34;&gt;&lt;/p&gt;
&lt;p&gt;В 
&lt;a href=&#34;https://2gis.ru/p_kamchatskiy/firm/13370589674735660/158.651951%2C53.012153?m=158.655122%2C53.010723%2F16.32&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Камчатском краевом объединённом музее&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211192953-bfb8ca04-ac7d-44ab-9f76-0ed2b30f360f.jpg&#34; alt=&#34;P_20200222_105615_small&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211192951-b8636aaa-0c04-4d71-b6ac-7939d8f37aea.jpg&#34; alt=&#34;P_20200222_112228_small&#34;&gt;&lt;/p&gt;
&lt;p&gt;Домашние вулканы:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211192949-d11986b0-7b76-423f-8dc4-2fed41632dca.jpg&#34; alt=&#34;P_20200222_123330_small&#34;&gt;&lt;/p&gt;
&lt;p&gt;И Корякский вулкан в лучах заката:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211192912-dcbe6c1e-d384-4d1a-a446-16556c1cbada.jpg&#34; alt=&#34;P_20200222_184256_small&#34;&gt;&lt;/p&gt;
&lt;p&gt;Финиши гонки-пролог Берингия 2020:&lt;/p&gt;
&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
      &lt;iframe allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen&#34; loading=&#34;eager&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; src=&#34;https://www.youtube.com/embed/-yK6RXtQvaA?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; title=&#34;YouTube video&#34;&gt;&lt;/iframe&gt;
    &lt;/div&gt;

&lt;p&gt; &lt;/p&gt;
&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
      &lt;iframe allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen&#34; loading=&#34;eager&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; src=&#34;https://www.youtube.com/embed/_Iqc_jpUYxE?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; title=&#34;YouTube video&#34;&gt;&lt;/iframe&gt;
    &lt;/div&gt;

&lt;p&gt; &lt;/p&gt;
&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
      &lt;iframe allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen&#34; loading=&#34;eager&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; src=&#34;https://www.youtube.com/embed/YngyzZAFiWU?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; title=&#34;YouTube video&#34;&gt;&lt;/iframe&gt;
    &lt;/div&gt;

&lt;p&gt; &lt;/p&gt;
&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
      &lt;iframe allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen&#34; loading=&#34;eager&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; src=&#34;https://www.youtube.com/embed/k0bCMR2mtdc?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; title=&#34;YouTube video&#34;&gt;&lt;/iframe&gt;
    &lt;/div&gt;

&lt;p&gt; &lt;/p&gt;
&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
      &lt;iframe allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen&#34; loading=&#34;eager&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; src=&#34;https://www.youtube.com/embed/5-I8oCdPdbc?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; title=&#34;YouTube video&#34;&gt;&lt;/iframe&gt;
    &lt;/div&gt;

&lt;p&gt; &lt;/p&gt;
&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
      &lt;iframe allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen&#34; loading=&#34;eager&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; src=&#34;https://www.youtube.com/embed/1rGH7dXjLUg?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; title=&#34;YouTube video&#34;&gt;&lt;/iframe&gt;
    &lt;/div&gt;

&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Участники после финиша:&lt;/p&gt;
&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
      &lt;iframe allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen&#34; loading=&#34;eager&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; src=&#34;https://www.youtube.com/embed/Gf0-iRFg0Dg?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; title=&#34;YouTube video&#34;&gt;&lt;/iframe&gt;
    &lt;/div&gt;

&lt;p&gt; &lt;/p&gt;
&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
      &lt;iframe allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen&#34; loading=&#34;eager&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; src=&#34;https://www.youtube.com/embed/rSgHH0EU3uE?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; title=&#34;YouTube video&#34;&gt;&lt;/iframe&gt;
    &lt;/div&gt;

&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211192943-a8ae2d79-0617-43f5-8600-a23ddd9719b1.jpg&#34; alt=&#34;P_20200222_164759_small&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211192939-8a23cb44-1e1b-4189-be70-ee277ccc0218.jpg&#34; alt=&#34;P_20200222_164840_small&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211192935-8c5bf898-5467-4452-9c7b-e2b7a3a419a2.jpg&#34; alt=&#34;P_20200222_164910_small&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211192934-99b8cff1-91cd-422d-80ea-e037cab6137e.jpg&#34; alt=&#34;P_20200222_164929_small&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211192931-e2a435c5-d9fe-4200-8627-7187106e8b72.jpg&#34; alt=&#34;P_20200222_165535_small&#34;&gt;&lt;/p&gt;
&lt;p&gt;Собачки, когда рядом проходит другой, чужой пёс:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211192947-4730b533-0edf-4788-9a19-c73ccb3b69d6.jpg&#34; alt=&#34;P_20200222_164732_small&#34;&gt;&lt;/p&gt;
&lt;p&gt;И когда рядом люди:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211192930-f860898d-c8a6-42c9-9749-60fac56b5a35.jpg&#34; alt=&#34;P_20200222_170013_small&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211192928-2c93be72-02ea-4af5-a0cb-b03c32da8133.jpg&#34; alt=&#34;P_20200222_170236_small&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211192926-65e27155-1533-4a3d-a578-5ed531a0b4f5.jpg&#34; alt=&#34;P_20200222_170346_small&#34;&gt;&lt;/p&gt;
&lt;p&gt;А вот так мы можем скалится:&lt;/p&gt;
&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
      &lt;iframe allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen&#34; loading=&#34;eager&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; src=&#34;https://www.youtube.com/embed/nJRADLmu96o?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; title=&#34;YouTube video&#34;&gt;&lt;/iframe&gt;
    &lt;/div&gt;

&lt;p&gt;И вид на Корякский вулкан с места стартов (
&lt;a href=&#34;https://2gis.ru/p_kamchatskiy/geo/70030076126748181/158.626537%2C53.09316?m=158.630416%2C53.094204%2F16.23&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Биатлонный комплекс им. Виталия Фатьянова&lt;/a&gt;):&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211192923-916cded0-a3ef-463f-b1e2-f3bc7a6cce5e.jpg&#34; alt=&#34;P_20200222_171319_small&#34;&gt;&lt;/p&gt;
&lt;p&gt;Вертолётики&amp;hellip; Все мальчишки любят вертолётики :)&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211192920-47a3e138-52dc-4459-b332-1d789a83e240.jpg&#34; alt=&#34;P_20200222_173337_small&#34;&gt;&lt;/p&gt;
&lt;p&gt;Музей, посвящённый истории гонки:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211192919-b2a48e1c-fa0a-4ab8-815c-42e49a3c7c84.jpg&#34; alt=&#34;P_20200222_173736_small&#34;&gt;&lt;/p&gt;
&lt;p&gt;Рыба, кстати, настоящая!&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211192916-146c3219-0b0b-4795-8495-bf8cf6bf11e8.jpg&#34; alt=&#34;P_20200222_174023_small&#34;&gt;&lt;/p&gt;
&lt;p&gt;Чем можно заниматься на Камчатке в разные времена года:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211192914-c5c03c31-a31f-4dfe-aee0-880f3a9f3835.jpg&#34; alt=&#34;P_20200222_180632_small&#34;&gt;&lt;/p&gt;
&lt;p&gt;Камчатская особенность: вулканический пепел вместо реагента :)&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211192906-0ff03398-efc3-4246-8f91-12199982e035.jpg&#34; alt=&#34;P_20200222_184714_small&#34;&gt;&lt;/p&gt;
&lt;p&gt;Зацените, сколько снега!&lt;/p&gt;
&lt;h2 id=&#34;день-2-сопка-мишенная-лежбище-сивучей&#34;&gt;День 2. сопка Мишенная, лежбище сивучей&lt;/h2&gt;
&lt;p&gt;Пошли на 
&lt;a href=&#34;https://2gis.ru/p_kamchatskiy/geo/70030076164403978/158.638388%2C53.041983?m=158.644248%2C53.044047%2F15.31&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Мишенную&lt;/a&gt;. Снег&amp;hellip; море снега! И очень повезло с погодой.&lt;/p&gt;
&lt;p&gt;Корякский вулкан и Авачинская сопка, как на ладони:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211192903-71fd0cd3-5bf5-46e3-8b8b-33566285020a.jpg&#34; alt=&#34;P_20200223_120337_small&#34;&gt;&lt;/p&gt;
&lt;p&gt;Снег!&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211192901-053deb2d-1c92-439b-8e75-23a88bd64786.jpg&#34; alt=&#34;P_20200223_121801_small&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211192892-8d89f38f-a828-4004-8a73-6a1f5bc40e2b.jpg&#34; alt=&#34;P_20200223_123733_small&#34;&gt;&lt;/p&gt;
&lt;p&gt;Андрюха с Марсиком на перевале:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211192895-15324127-448b-4af6-a205-3c2ac3a0d705.jpg&#34; alt=&#34;P_20200223_122733_small&#34;&gt;&lt;/p&gt;
&lt;p&gt;Марсик на фоне седых вершин:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211192897-e8b2be05-a8d2-419b-ad7b-1d115cfa68ff.jpg&#34; alt=&#34;P_20200223_122449_small&#34;&gt;&lt;/p&gt;
&lt;p&gt;Немного заборов:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211192889-92a75187-5b86-4098-97c9-7bb4ee97c6dd.jpg&#34; alt=&#34;P_20200223_124130-PANO_small&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211192888-bdd5a3be-1060-4ea5-9d00-43e01903fe4c.jpg&#34; alt=&#34;P_20200223_124553_small&#34;&gt;&lt;/p&gt;
&lt;p&gt;И немного панорам:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211192902-82826ea0-a274-438c-a0f4-59d4950bb0b0.jpg&#34; alt=&#34;P_20200223_120415_small&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211192900-481cdc9d-49a4-403a-a104-ecda9a538daf.jpg&#34; alt=&#34;P_20200223_122414-PANO_small&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211192887-6f8d256b-21f8-481e-85fb-b255cd222c9f.jpg&#34; alt=&#34;P_20200223_124651-PANO_small&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211192885-7bbb1d84-9c00-482d-9dfa-45cb737a7d21.jpg&#34; alt=&#34;P_20200223_124731_PN_small&#34;&gt;&lt;/p&gt;
&lt;p&gt;После Мишенной сделали небольшой перекус и двинули в бухту 
&lt;a href=&#34;https://2gis.ru/p_kamchatskiy/geo/13370748588523652/158.56721%2C53.063082?m=158.574074%2C53.064019%2F16.26&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Моховую&lt;/a&gt;, на лежбище сивучией.&lt;/p&gt;
&lt;p&gt;Я их сразу прозвал медведями в ластах!&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211192882-7ce91447-b86c-423a-8461-01c4af450fc1.jpg&#34; alt=&#34;P_20200223_154450_small&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211192876-d892c88f-e061-4a38-873d-7daf4f0d74b6.jpg&#34; alt=&#34;P_20200223_154456_small&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211192879-4ae40c34-2378-4c1d-9c24-16b8d7f36c1a.jpg&#34; alt=&#34;P_20200223_154454_small&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211192882-7ce91447-b86c-423a-8461-01c4af450fc1.jpg&#34; alt=&#34;P_20200223_154450_small&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211192872-1738b1c0-78e9-472a-bd79-8f72068bbfbb.jpg&#34; alt=&#34;P_20200223_155816_small&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://user-images.githubusercontent.com/102082/211192870-f4dac202-d2df-49fc-81e6-74dc98a91531.jpg&#34; alt=&#34;P_20200223_155836_small&#34;&gt;&lt;/p&gt;
&lt;p&gt;И немного видео. Уж простите меня за экспрессию :)&lt;/p&gt;
&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
      &lt;iframe allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen&#34; loading=&#34;eager&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; src=&#34;https://www.youtube.com/embed/_61eG1cAm6A?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; title=&#34;YouTube video&#34;&gt;&lt;/iframe&gt;
    &lt;/div&gt;

&lt;p&gt; &lt;/p&gt;
&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
      &lt;iframe allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen&#34; loading=&#34;eager&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; src=&#34;https://www.youtube.com/embed/4481J8b6HOc?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; title=&#34;YouTube video&#34;&gt;&lt;/iframe&gt;
    &lt;/div&gt;

&lt;h2 id=&#34;день-3-паратунка-хор-лягушек-в-феврале&#34;&gt;День 3. Паратунка, хор лягушек в феврале&lt;/h2&gt;
&lt;p&gt;Третий день, заключительный. По прогнозу ухудшение погоды. Действительно, на небе тучи, ночью был небольшой снег. Облака низкие, закрывают вулканы и перевал. Но в остальном всё очень неплохо. Собираемся и едем в Паратунку на базу 
&lt;a href=&#34;https://2gis.ru/p_kamchatskiy/firm/70000001006616334/158.271167%2C53.002488?m=158.27257%2C53.001653%2F16.43&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Фламинго&lt;/a&gt;, погреться в термальных водах. Фото не делал, особо нечего такого специфичного, но вот февральский хор лягушек впечатлил:&lt;/p&gt;
&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
      &lt;iframe allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen&#34; loading=&#34;eager&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; src=&#34;https://www.youtube.com/embed/gj480aGozm4?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; title=&#34;YouTube video&#34;&gt;&lt;/iframe&gt;
    &lt;/div&gt;</description>
    </item>
    
    <item>
      <title>mDNS stopped working</title>
      <link>https://htrd.su/blog/2020/02/28/mdns-stopped-working/</link>
      <pubDate>Fri, 28 Feb 2020 16:08:55 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2020/02/28/mdns-stopped-working/</guid>
      <description>&lt;p&gt;В один прекрасный момент, на ровном месте перестал работать mDNS и перестали резолвится хосты в зоне &lt;code&gt;.local&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;При этом демон Avahi был запущен, сервис &lt;code&gt;systemd-resolved&lt;/code&gt; остановлен и в &lt;code&gt;/etc/nsswitch.conf&lt;/code&gt; всё в порядке (присутствуют &lt;code&gt;mdns4_minimal&lt;/code&gt; и &lt;code&gt;mdns4&lt;/code&gt;, в общем, всё как в 
&lt;a href=&#34;https://wiki.archlinux.org/index.php/Avahi&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;ArchWiki&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Более того, вызов:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;avahi-resolve -n 35002201.local
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;завершается успешно и возвращает адрес хоста.&lt;/p&gt;
&lt;p&gt;Исследование привело к команде &lt;code&gt;getent&lt;/code&gt;. Вызов:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;getent hosts 35002201.local
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;выдал пустой результат. Хмм&amp;hellip; как говорит документация, эта утилита точно работает через NSS.&lt;/p&gt;
&lt;p&gt;Что делает пытливый ум линуксоида в таком случае? Правильно! Запускает команду через &lt;code&gt;strace&lt;/code&gt; (я убрал лишний вывод, оставил только суть):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ &lt;span class=&#34;nv&#34;&gt;LANG&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;C strace -f getent hosts 35002201.local
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;execve&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/usr/bin/getent&amp;#34;&lt;/span&gt;, &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;getent&amp;#34;&lt;/span&gt;, &lt;span class=&#34;s2&#34;&gt;&amp;#34;hosts&amp;#34;&lt;/span&gt;, &lt;span class=&#34;s2&#34;&gt;&amp;#34;35002201.local&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;, 0x7ffef387b638 /* &lt;span class=&#34;m&#34;&gt;98&lt;/span&gt; vars */&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brk&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;NULL&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;                               &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; 0x5618ad268000
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openat&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;AT_FDCWD, &lt;span class=&#34;s2&#34;&gt;&amp;#34;/etc/nsswitch.conf&amp;#34;&lt;/span&gt;, O_RDONLY&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;O_CLOEXEC&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fstat&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;3, &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;st_mode&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;S_IFREG&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;0644, &lt;span class=&#34;nv&#34;&gt;st_size&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;372, ...&lt;span class=&#34;o&#34;&gt;})&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;read&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;3, &lt;span class=&#34;s2&#34;&gt;&amp;#34;# Name Service Switch configurat&amp;#34;&lt;/span&gt;..., 4096&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;372&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;read&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;3, &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;, 4096&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;                       &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;close&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;                                &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openat&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;AT_FDCWD, &lt;span class=&#34;s2&#34;&gt;&amp;#34;/usr/lib/libnss_mdns4_minimal.so.2&amp;#34;&lt;/span&gt;, O_RDONLY&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;O_CLOEXEC&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;read&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;3, &lt;span class=&#34;s2&#34;&gt;&amp;#34;\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0&amp;gt;\0\1\0\0\0 \20\0\0\0\0\0\0&amp;#34;&lt;/span&gt;..., 832&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;832&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fstat&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;3, &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;st_mode&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;S_IFREG&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;0755, &lt;span class=&#34;nv&#34;&gt;st_size&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;18104, ...&lt;span class=&#34;o&#34;&gt;})&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mmap&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;NULL, 20496, PROT_READ, MAP_PRIVATE&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;MAP_DENYWRITE, 3, 0&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; 0x7f2bef77a000
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mmap&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x7f2bef77b000, 8192, PROT_READ&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;PROT_EXEC, MAP_PRIVATE&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;MAP_FIXED&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;MAP_DENYWRITE, 3, 0x1000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; 0x7f2bef77b000
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mmap&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x7f2bef77d000, 4096, PROT_READ, MAP_PRIVATE&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;MAP_FIXED&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;MAP_DENYWRITE, 3, 0x3000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; 0x7f2bef77d000
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mmap&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x7f2bef77e000, 8192, PROT_READ&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;PROT_WRITE, MAP_PRIVATE&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;MAP_FIXED&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;MAP_DENYWRITE, 3, 0x3000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; 0x7f2bef77e000
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;close&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;                                &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openat&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;AT_FDCWD, &lt;span class=&#34;s2&#34;&gt;&amp;#34;/etc/mdns.allow&amp;#34;&lt;/span&gt;, O_RDONLY&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; -1 ENOENT &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;No such file or directory&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;exit_group&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;                           &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; ?
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;+++ exited with &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt; +++
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Хмм&amp;hellip; А что это за файл &lt;code&gt;/etc/mdns.allow&lt;/code&gt;, который во моей системе отсутствует? 
&lt;a href=&#34;https://github.com/lathiat/nss-mdns/blob/master/README.md&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Читаем&lt;/a&gt; и видим, что рекомендованная конфигурация - это отсутствие этого файла. Всё как у меня. Тогда, выполняется некоторая эвристика:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Если запрос не заканчивается на &lt;code&gt;.local.&lt;/code&gt; или &lt;code&gt;.local&lt;/code&gt;, он отклоняется&lt;/li&gt;
&lt;li&gt;Если в запросе есть точка (появяляется домент третьего уровня, например &lt;code&gt;foo.bar.local&lt;/code&gt;), то он тоже отклоняется&lt;/li&gt;
&lt;li&gt;Если системный unicast DNS (если проще: обычный DNS, работающий через 53 порт), указанный в &lt;code&gt;/etc/resolv.conf&lt;/code&gt; отдаёт &lt;strong&gt;SOA&lt;/strong&gt; запись для &lt;code&gt;local&lt;/code&gt;, запрос тоже отклоняется. Иными словами, запрос отклоняется, если запрос &lt;code&gt;host -t SOA local&lt;/code&gt; верунл что-то отличное от &lt;code&gt;Host local not found: 3(NXDOMAIN)&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Хм, а вот третий пункт уже интересней. Вводим команду и видим:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ host -t SOA &lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt; has SOA record ns1.inetvl.ru. support.inetvl.ru. &lt;span class=&#34;m&#34;&gt;2017062801&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;28800&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;3600&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;1209600&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;86400&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Оппа&amp;hellip; Создаём файл &lt;code&gt;/etc/mdns.allow&lt;/code&gt; со следующим содержимым:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.local.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.local
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;И пробуем:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ getent hosts 35002201.local
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;192.168.101.2   35002201.local
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ ping 35002201.local
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;PING 35002201.local &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;192.168.101.2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; 56&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;84&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; bytes of data.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;m&#34;&gt;64&lt;/span&gt; bytes from 35002201.local &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;192.168.101.2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;: &lt;span class=&#34;nv&#34;&gt;icmp_seq&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;ttl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;64&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;time&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;0.216 ms
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;m&#34;&gt;64&lt;/span&gt; bytes from 35002201.local &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;192.168.101.2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;: &lt;span class=&#34;nv&#34;&gt;icmp_seq&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;ttl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;64&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;time&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;0.271 ms
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;m&#34;&gt;64&lt;/span&gt; bytes from 35002201.local &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;192.168.101.2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;: &lt;span class=&#34;nv&#34;&gt;icmp_seq&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;ttl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;64&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;time&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;0.247 ms
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;^C
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--- 35002201.local ping statistics ---
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt; packets transmitted, &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt; received, 0% packet loss, &lt;span class=&#34;nb&#34;&gt;time&lt;/span&gt; 2029ms
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rtt min/avg/max/mdev &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; 0.216/0.244/0.271/0.022 ms
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ура!&lt;/p&gt;
&lt;h2 id=&#34;выводы&#34;&gt;Выводы&lt;/h2&gt;
&lt;p&gt;Только два:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;При обновлении системы убрали дефолтный &lt;code&gt;/etc/mdns.allow&lt;/code&gt;. Но пакеты, где бы он мог находиться в последнее время не обновлялись.&lt;/li&gt;
&lt;li&gt;Изменились настройки сети провайдера&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Собственно, скорее всего пункт 2.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Google Photo: как получить прямую ссылку на фото в открытом альбоме</title>
      <link>https://htrd.su/blog/2020/02/16/googlephoto-get-direct-link-to-photo-from-shared-album/</link>
      <pubDate>Sun, 16 Feb 2020 17:30:56 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2020/02/16/googlephoto-get-direct-link-to-photo-from-shared-album/</guid>
      <description>&lt;p&gt;Небольшой хинт:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://support.google.com/photos/thread/9590592?hl=en&amp;amp;msgid=9603023&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://support.google.com/photos/thread/9590592?hl=en&amp;msgid=9603023&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Если в двух словах:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;делаем альбом и генерируем ссылку на него&lt;/li&gt;
&lt;li&gt;открываем её из другого браузера, где вы не залогинены. Можно в режиме инкогнито - тоже пойдёт.&lt;/li&gt;
&lt;li&gt;копируем ссылку и пользуемся&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;В конце ссылки есть &amp;ldquo;=w1236-h825&amp;rdquo; - это размер. Можно скорректировать под свои нужды. Если заменить на &amp;ldquo;=d&amp;rdquo; - скачаем оригинальную картинку (оригинальный размер).&lt;/p&gt;
&lt;p&gt;Посмотрим, как работать будет :)&lt;/p&gt;
&lt;p&gt;UPD: проблема в том, что при вставке большого числа изображений на страницу, не все будут открываться. Гугл будет ругаться на слишком частые обращения.&lt;/p&gt;
&lt;p&gt;UPD: ну и небольшие дополнительные утилиты:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://www.publicalbum.org/blog/embedding-google-photos-albums&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://www.publicalbum.org/blog/embedding-google-photos-albums&lt;/a&gt; - встроить весь альбом в страницу&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://www.publicalbum.org/blog/embedding-google-photos-image&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://www.publicalbum.org/blog/embedding-google-photos-image&lt;/a&gt; - автоматически получить ссылку на фото. Отмечу, что даже одно фото гугл шарит как анонимный альбом с единственной картинкой.&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Город снежных фигур на Комете</title>
      <link>https://htrd.su/blog/2020/02/16/city_of_snow_figures/</link>
      <pubDate>Sun, 16 Feb 2020 17:08:21 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2020/02/16/city_of_snow_figures/</guid>
      <description>&lt;p&gt;Немного фотографий:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://photos.app.goo.gl/guFiJJQ2dVHdi9ni7&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://photos.app.goo.gl/guFiJJQ2dVHdi9ni7&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://lh3.googleusercontent.com/Iq1uiy0kcFqNgSOenfFx02bOF5brrVo3a1CQ1KrLs1RVwmDYq5qy35o1my1grFD9qgNhjS9x3QsUhBHJB5L617ZIyCrKraDzPIcfiWz_oYg-jXglDYEB9GKVZrrXtgALPyx6qP2ig4I=w1246-h934-no&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://lh3.googleusercontent.com/91uabvcfE902N8lxDOnYPwbZwVXMeYdUSVEuhcFj8S-RM6UVzM2wsUtHsuNXNmOo7v1AycvTp6TxD2CXa3f7JrZ18rI7479_mZgP1y4a0SWZSjCxvD4gfgJJO-0rWgwb2zGoDxkq-cM=w1246-h934-no&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://lh3.googleusercontent.com/Bxny3mE9PDkJBOZjMU_meUSinFu-1lW7M7-P7b2U-TU2GOrVhjFCoxO8JTEva6AUuPML4C7jz7tfas9uc64ha58fBJK_q7QnSCWwQF4ZFP32Y4_TDKsKX8YhR9RkqOP4iPd-roUPwhk=w1246-h934-no&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://lh3.googleusercontent.com/bFnwgjf6V9bCc3_7B4J-nrQFwSq4ahPEKJFwTQhOHOXjgI6_r1AI_cX7oPyYHzOpigU5BrtgoqYJ1PMC0hg7Lwa2mNQUfJvaPB5Ie59TvwneeYymmevc2Iuz8P2efFmdSFOwNn2DT6w=w1246-h934-no&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://lh3.googleusercontent.com/8_aWfGGgqLIpqVeC-Di8nWEgVb_eV5bhLnOOQE60rBf5x3UswWhu_RDp7yCK6jdP4Ese_mHSoDO62mxJtqmBfOjvQV7wB_WnobhmlyTEzpBINBvqgXCLmHuCnhgIGjWt9VpU0WzcX2w=w1246-h934-no&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://lh3.googleusercontent.com/BcYKJygENzCi2GFPAQIg-pEzgmNIrsUtaGuoFk-c_qYKXWE21K-ZGo3s_UTIWQCTK2UAix-BdmqTRlGuphGnmYYzhGXA0KXrke1Q57SbaWRte4iMv5m2j5kF0dmmSbQFV6u7n2hkl2k=w1246-h934-no&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://lh3.googleusercontent.com/-L-2QVfI9rC8izoe0IugDXxfTzPXhC5FFC-C7tV9d0zt4hxeV2ePVAt_myi9p8qkTAhisnb3wNDeiiIPWZ6BHvNC_f7Y-3WutSlsHMdcz5SFmwwlJiciRiIj26zgW-lcyYEtELeX7FI=w1246-h934-no&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://lh3.googleusercontent.com/5oIF5sGZc0fy4Fa8OIkVuDZZYJV5jlZ4dQCnuvply1h5YmYtKAb5eF9AO5bh1rHg3IT5TGCC-n-4EKRdN8EZO9y1sanbT4Vq94Hp2yKYLDC5SE7zsjYWax-5qF0pFs6_E9OEsQGIP_8=w700-h934-no&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://lh3.googleusercontent.com/fIVZArajVKopoYeNEKJ02OGhSQ-Vvr1Pv8T6JFxqOWkRhkm9IFEAc4vIAjU52c5cwmIMrf5KiyrSu9AtitBDdYN-AuDAzVCzSebfUwVwxKMK0Nvi09teB5bFdJa7BluUdhDybo4dQTQ=w1246-h934-no&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://lh3.googleusercontent.com/sl3gGF8HNR_hLd5PCR99aJ9KZfM8BQO6Hed0y5VqSlweKXHtR1-raDYTCEpsZcJenaHbvP_Fjru64CkmKJBmxbAANmwD6LLhiWysraNX5O03LsvVJeLvfmfO2D5RETthRxM2k54Xhm0=w700-h934-no&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://lh3.googleusercontent.com/vlncykpW-FcZTlA9TB85680wYq27IcsV385Hx_8J5Zaib4yqL0bRPz16tLrphv2Jhw8j2fzmBepYUoUBxk-ycwt9s8SMDEdu0fNgIxiJV7m2x7CgCa-Bh5sC7QFq7CgNACUa5_o6mYA=w1246-h934-no&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://lh3.googleusercontent.com/8GViR8HszmnRFKn58arS9X9QRqoDA9JiFLDKbAni2pW0HbMCbMXdMyLWFKG-SJmpNsXi4B2QFti2ih2BADUxraA1r7KxQrBw-Fx8YGFjhXdC0BCzhJ62HJVgWCgWPU6SPSRMGBfS8Vo=w1246-h934-no&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://lh3.googleusercontent.com/jaKgDO9f6FWsL0ml_q_2aW5Gw2mPR-6CiWa7n_cYeWzg3hcue-NQkdu9USM_MaCsWWV0IjhwdX01-VNQaaNTT7LF8Kl-hebr9TJxfXKZ08W4XE0ec6J1XszW1qkM8Ovi7flEgilh8NA=w1246-h934-no&#34; alt=&#34;&#34;&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>И снова малый траверс ботанического хребта и г.Острая</title>
      <link>https://htrd.su/blog/2020/02/16/mt_ostraya/</link>
      <pubDate>Sun, 16 Feb 2020 17:04:27 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2020/02/16/mt_ostraya/</guid>
      <description>&lt;p&gt;Просто немного фотографий:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://photos.app.goo.gl/PBWiq8HZrGhjWUa87&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://photos.app.goo.gl/PBWiq8HZrGhjWUa87&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://lh3.googleusercontent.com/X8H8JutCXQMOsHjrj8JTIW51WtCJbHqMAm1Ru2iIZNVi166uXpsgiJpd0t8H_S2Vo1-ng0S3NMG58ZdaIVWLxfPAopeOGSkxddFNqLtZrQvtlVdvkfZIpv4bdBSGbfH6CQgzoyHIDqM=w1247-h934-no&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://lh3.googleusercontent.com/vPdUEkYYDxfa-B6HMDVOq5q8IO4BZCIEyUFm8NeBbM8JFUBqNWn10E-QGby9yHsrsIc9ISQ3-XxfV3w7lr5hXSg7it8nTDGEnrZd67dLvC92IOqFycuQTGPzrumEsiYN-rC6JLeB0ZY=w526-h934-no&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://lh3.googleusercontent.com/-m5T44xm4lnkLMnc9Z0U9F5GqjdvMHxKPCvwri42ECzpk_SsPIeRRg37ahFQYA6sUtOe80_qwtR3eIVPcpCY3inTN5cCcxkGrvXBAiCZ40TTT0ehDpdE6rV7v6m7Ev-t11PXkbSbGtk=w700-h934-no&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://lh3.googleusercontent.com/ZLW-T1qvPdTWRZPYZFW_23LLtZFKbUJf5ifJ9KCQ5jGXdUTRE7YT16AIfSATMEQXpuvXhb307tvakGGp_ejgpiPkBk2QEImylpTuscx_kfvaVhIWXhjJojNWmFUjW-5A48I7bayGHQ8=w700-h934-no&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Куча следов животных и лёжки копытных (или косуля или кабарга):&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://lh3.googleusercontent.com/9WRiT0KXB6vrPDKPDq1TZWTEbEjFIviEC54gmbp9Hsocp07drgQ_JMbB6JYobw7kTwOuSGg5erFgQY9fKKQ0qj6KoRqo4zfoWevleME2N73jDWshw67jF9k-c5CsL3TyPnjp2WzdYnc=w700-h934-no&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://lh3.googleusercontent.com/n2Kc9LyJyW6sY0HUxnzFuuGYeb_JW33F5kneN3NJ0wo7-Jo6zN0Hpm2TzOc-ckfDsT_nRFDBPM_PmtfX9JPIzfiK7S4ztUQIjssfDfvT47zO_st9D9myinQ4YplZGrcOZKnW6eQbukU=w700-h934-no&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://lh3.googleusercontent.com/w9V9ADI_MYveMQvn2V0bQt5iF0TYupVxN4QTuThQwZchGhBWQDWVSmIyk1u9yxAJxCwqKrkYW-vM2l4UOv0Ao5STTdPYa6ppCWALmtJlXcg1ZOwIPY_l1Do2t9pT1v5CVMH349hS7do=w700-h934-no&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://lh3.googleusercontent.com/7jXo10lGkISsU68IxQj_AUO1VOHWGrpAHD_wwe15KIaeQjsjTvM3VnyoiGXSa8ar6CD4lfO-dcPk_Ha2KK_bUriZr4SHRqT1WV71e91a2jzJo3ojozkwyvxHkf0aLFV5ryoQahIbwzs=w700-h934-no&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Ну и селфи, куда без него :)&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://lh3.googleusercontent.com/ICgZ1dUIv-skUgbA7857f9FPYzexHoVWEN4HUHFZ3Ub1BXB-zK-PpzcdCqOAL0yUKwI5Wqhljmc-wCfkdyxIPXZT19dYn_PeGgE0t6ohApCnqPm9aPiJD8ptOAAuzC9_RAXTQOqxjcE=w526-h934-no&#34; alt=&#34;&#34;&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Thunderbird LDAP Auto-complete</title>
      <link>https://htrd.su/blog/2020/02/16/thunderbird-ldap-auto-complete/</link>
      <pubDate>Sun, 16 Feb 2020 16:46:49 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2020/02/16/thunderbird-ldap-auto-complete/</guid>
      <description>&lt;p&gt;Небольшой хинт по настройке автодополнения адресов из адресной книги LDAP в Thunderbird:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://www.aligrant.com/web/blog/2013-08-05_thunderbird_ldap_autocomplete&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://www.aligrant.com/web/blog/2013-08-05_thunderbird_ldap_autocomplete&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://www.tf.uni-kiel.de/itg/en/services/email/ldap-address-book-pdf-eng&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://www.tf.uni-kiel.de/itg/en/services/email/ldap-address-book-pdf-eng&lt;/a&gt;, страница 3 в самом конце&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Если коротко, в расширенных настройках создать строковое свойство:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ldap_2.servers.&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;ADDRESSBOOK&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;.autoComplete.filterTemplate
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Где &lt;code&gt;[ADDRESSBOOK]&lt;/code&gt; - индивидуально для каждой книги.&lt;/p&gt;
&lt;p&gt;со значением примерно такого вида:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bas&#34; data-lang=&#34;bas&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;mozillaNickname&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=%&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)(&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;cn&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=%&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)(&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;sn&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=%&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)(&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;mail&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=%&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)(&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;displayName&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=%&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Проблема:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Этот фильтр не работает в адресной книге&lt;/li&gt;
&lt;li&gt;Фильтр вообще не работает в диалоге приглашения в Календаре&lt;/li&gt;
&lt;li&gt;Если что-то начинается со &lt;code&gt;*&lt;/code&gt;, то нужно вводить как &lt;code&gt;\*&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;</description>
    </item>
    
    <item>
      <title>GStreamer: не получается слинковать videoconvert и appsink</title>
      <link>https://htrd.su/blog/2020/02/11/gstreamer-cant-link-videoconvert-with-appsink-using-caps/</link>
      <pubDate>Tue, 11 Feb 2020 12:05:47 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2020/02/11/gstreamer-cant-link-videoconvert-with-appsink-using-caps/</guid>
      <description>&lt;p&gt;Более подробно: не получается слинковать &lt;strong&gt;только&lt;/strong&gt; при указании свойства &lt;code&gt;caps&lt;/code&gt; у &lt;code&gt;appsink&lt;/code&gt; или вставки между 
&lt;a href=&#34;https://gstreamer.freedesktop.org/documentation/videoconvert/index.html?gi-language=c&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;code&gt;videoconvert&lt;/code&gt;&lt;/a&gt; и 
&lt;a href=&#34;https://gstreamer.freedesktop.org/documentation/app/appsink.html?gi-language=c&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;code&gt;appsink&lt;/code&gt;&lt;/a&gt; фильтра 
&lt;a href=&#34;https://gstreamer.freedesktop.org/documentation/coreelements/capsfilter.html?gi-language=c&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;code&gt;capsfilter&lt;/code&gt;&lt;/a&gt; с нужным форматом. Но об этом подробнее под катом.&lt;/p&gt;
&lt;p&gt;Итак, есть задача: используя GStreamer захватить несжатые фреймы с V4L2 устройства, преобразовать их в YUV420P и получить доступ к ним в приложении. С GStreamer раньше не работал, но в силу определённых обстоятельств, использовать нужно именно его.&lt;/p&gt;
&lt;p&gt;Используя 
&lt;a href=&#34;https://gstreamer.freedesktop.org/bindings/cplusplus.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;GStreamermm&lt;/a&gt;, реализация получилась такой:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;cassert&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;gstreamermm.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;glibmm/main.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;gstreamermm/appsink.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;using&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;argc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;char&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;**&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;argv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;Gst&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;init&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;argc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;argv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Gst&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Pipeline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// https://gstreamer.freedesktop.org/documentation/video4linux2/v4l2src.html?gi-language=c
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v4l2src&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Gst&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ElementFactory&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;create_element&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;v4l2src&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;v4l2src&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;set_property&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Glib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ustring&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;device&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;/dev/video0&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;v4l2src&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;set_property&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;io-mode&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// auto          - 0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;c1&#34;&gt;// rw            - 1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;c1&#34;&gt;// mmap          - 2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;c1&#34;&gt;// userptr       - 3
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;c1&#34;&gt;// dmabuf        - 4
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;c1&#34;&gt;// dmabuf-import - 5
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v4l2caps&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Gst&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;CapsFilter&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;caps&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Gst&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Caps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;create_simple&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;s&#34;&gt;&amp;#34;video/x-raw&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;s&#34;&gt;&amp;#34;width&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;640&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;s&#34;&gt;&amp;#34;height&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;480&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;c1&#34;&gt;//&amp;#34;framerate&amp;#34;, Gst::Fraction(60, 1)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;                    &lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;v4l2caps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;property_caps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;caps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;csc&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Gst&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;VideoConvert&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;appsink&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Gst&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;AppSink&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;appsink&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;property_emit_signals&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;appsink&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;property_sync&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;appsink&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;signal_new_sample&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;().&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;connect&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;appsink&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;samples&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;appsink&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pull_sample&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;buffer&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;samples&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get_buffer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;//auto app_buffer = buffer-&amp;gt;copy_deep();
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;caps&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;samples&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get_caps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// TBD
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;        &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;new buffer:&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                  &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34; caps: &amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;caps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to_string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                  &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;, size=&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;buffer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get_size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                  &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;, blocks=&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;buffer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;n_memory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;sc&#34;&gt;&amp;#39;\n&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Gst&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;FLOW_OK&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;appcaps&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Gst&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Caps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;create_simple&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                       &lt;span class=&#34;s&#34;&gt;&amp;#34;video/x-raw&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                       &lt;span class=&#34;s&#34;&gt;&amp;#34;format&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Gst&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;VIDEO_FORMAT_I420&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                       &lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;appsink&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;property_caps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;appcaps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;v4l2src&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;v4l2caps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;csc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;appsink&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;v4l2src&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;link&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;v4l2caps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;link&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;csc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;link&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;appsink&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;set_state&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Gst&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;STATE_PLAYING&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mainloop&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Glib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MainLoop&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;mainloop&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;set_state&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Gst&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;STATE_NULL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Собираем его:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;g++ &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;pkg-config gstreamermm-1.0 --cflags --libs&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt; -o &lt;span class=&#34;nb&#34;&gt;test&lt;/span&gt; main.cpp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Запускаем&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./test
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;и:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;terminate called after throwing an instance of &lt;span class=&#34;s1&#34;&gt;&amp;#39;std::runtime_error&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  what&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;:  failed to link: gtkmm__gstvideoconvert0-&amp;gt;gtkmm__gstappsink0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Аварийный останов &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;стек памяти сброшен на диск&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Анализируем. Судя по всему, какой-то косяк в согласовании выходов, хотя документация на фильтры явно говорит, что I420 они могут. Так, составим аналогичный pipeline с использованием &lt;code&gt;gst-launch-1.0&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gst-launch-1.0 v4l2src &lt;span class=&#34;nv&#34;&gt;device&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/dev/video0 ! video/x-raw,width&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;640,height&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;480&lt;/span&gt; ! videoconvert ! appsink &lt;span class=&#34;nv&#34;&gt;caps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;video/x-raw,format&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;I420
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Запускаем и видим, что pipeline работает. WTF!?&lt;/p&gt;
&lt;p&gt;Первое, что перебираю: 
&lt;a href=&#34;https://gstreamer.freedesktop.org/documentation/application-development/basics/pads.html?gi-language=c#dynamic-or-sometimes-pads&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;динамические пады&lt;/a&gt;. Но нет, документация говорит, что у всех используемых фильтров пады статические.&lt;/p&gt;
&lt;p&gt;Гуглинг, пробы, построение графов при помощи:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;GST_DEBUG&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;*CAPS*:7&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;GST_DEBUG_DUMP_DOT_DIR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/data
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ничего не помогает. И тут решаю, не линковать фильтры на границе &lt;code&gt;videoconvert&lt;/code&gt; и &lt;code&gt;appsink&lt;/code&gt;, запрашиваю напрямую выход &lt;code&gt;src&lt;/code&gt; у &lt;code&gt;videoconvert&lt;/code&gt; и &lt;code&gt;sink&lt;/code&gt; у &lt;code&gt;appsink&lt;/code&gt; и вывожу их &lt;code&gt;caps&lt;/code&gt;, примерно так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;src_pad&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;csc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get_static_pad&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;src&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sink_pad&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;appsink&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get_static_pad&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;sink&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;src caps: &amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;src_pad&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;query_caps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Glib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;RefPtr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Gst&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Caps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to_string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n\n&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;              &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;dst caps: &amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sink_pad&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;query_caps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Glib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;RefPtr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Gst&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Caps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to_string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n\n&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Собираем и смотрим вывод:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;src caps: video/x-raw, &lt;span class=&#34;nv&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=(&lt;/span&gt;int&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;640, &lt;span class=&#34;nv&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=(&lt;/span&gt;int&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;480, &lt;span class=&#34;nv&#34;&gt;format&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=(&lt;/span&gt;string&lt;span class=&#34;o&#34;&gt;){&lt;/span&gt; RGB16, BGR, RGB, GRAY8, GRAY16_LE, GRAY16_BE, YVU9, YV12, YUY2, YVYU, UYVY, Y42B, Y41B, YUV9, NV12_64Z32, NV24, NV61, NV16, NV21, NV12, I420, BGRA, BGRx, ARGB, xRGB, BGR15, RGB15 &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;, &lt;span class=&#34;nv&#34;&gt;framerate&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=(&lt;/span&gt;fraction&lt;span class=&#34;o&#34;&gt;)[&lt;/span&gt; 0/1, 2147483647/1 &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; video/x-raw, &lt;span class=&#34;nv&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=(&lt;/span&gt;int&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;640, &lt;span class=&#34;nv&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=(&lt;/span&gt;int&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;480, &lt;span class=&#34;nv&#34;&gt;framerate&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=(&lt;/span&gt;fraction&lt;span class=&#34;o&#34;&gt;)[&lt;/span&gt; 0/1, 2147483647/1 &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;, &lt;span class=&#34;nv&#34;&gt;format&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=(&lt;/span&gt;string&lt;span class=&#34;o&#34;&gt;){&lt;/span&gt; I420, YV12, YUY2, UYVY, AYUV, VUYA, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, Y210, Y410, NV12, NV21, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10BE, I420_10LE, I422_10BE, I422_10LE, Y444_10BE, Y444_10LE, GBR, GBR_10BE, GBR_10LE, NV16, NV24, NV12_64Z32, A420_10BE, A420_10LE, A422_10BE, A422_10LE, A444_10BE, A444_10LE, NV61, P010_10BE, P010_10LE, IYU2, VYUY, GBRA, GBRA_10BE, GBRA_10LE, BGR10A2_LE, GBR_12BE, GBR_12LE, GBRA_12BE, GBRA_12LE, I420_12BE, I420_12LE, I422_12BE, I422_12LE, Y444_12BE, Y444_12LE, GRAY10_LE32, NV12_10LE32, NV16_10LE32, NV12_10LE40 &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dst caps: video/x-raw, &lt;span class=&#34;nv&#34;&gt;format&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=(&lt;/span&gt;GstVideoFormat&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;GST_VIDEO_FORMAT_I420
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ба&amp;hellip; а почему у &lt;code&gt;src_pad&lt;/code&gt; свойство &lt;code&gt;format&lt;/code&gt; имеет тип &lt;code&gt;(string)&lt;/code&gt;, а у &lt;code&gt;sink_pad&lt;/code&gt; - &lt;code&gt;(GstVideoFormat)&lt;/code&gt;. Точнее, почему у &lt;code&gt;sink_pad&lt;/code&gt; - я знаю, ведь я сам так назначил (и никто меня не наказал), судя по логике наименьшего удивления и строгой типизации&amp;hellip; И тут у меня рождается мысль заменить блок:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;appcaps&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Gst&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Caps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;create_simple&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                       &lt;span class=&#34;s&#34;&gt;&amp;#34;video/x-raw&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                       &lt;span class=&#34;s&#34;&gt;&amp;#34;format&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Gst&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;VIDEO_FORMAT_I420&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                       &lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;на&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;appcaps&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Gst&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Caps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;create_simple&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                       &lt;span class=&#34;s&#34;&gt;&amp;#34;video/x-raw&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                       &lt;span class=&#34;s&#34;&gt;&amp;#34;format&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;I420&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                       &lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Пересобираем и&amp;hellip; ВСЁ РАБОТАЕТ!&lt;/p&gt;
&lt;p&gt;Законченный рабочий пример:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;cassert&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;gstreamermm.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;glibmm/main.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;gstreamermm/appsink.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;using&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;argc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;char&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;**&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;argv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;Gst&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;init&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;argc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;argv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Gst&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Pipeline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// https://gstreamer.freedesktop.org/documentation/video4linux2/v4l2src.html?gi-language=c
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v4l2src&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Gst&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ElementFactory&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;create_element&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;v4l2src&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;v4l2src&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;set_property&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Glib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ustring&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;device&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;/dev/video0&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;v4l2src&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;set_property&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;io-mode&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// auto          - 0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;c1&#34;&gt;// rw            - 1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;c1&#34;&gt;// mmap          - 2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;c1&#34;&gt;// userptr       - 3
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;c1&#34;&gt;// dmabuf        - 4
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;c1&#34;&gt;// dmabuf-import - 5
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;//auto v4l2caps = Gst::ElementFactory::create_element(&amp;#34;capsfilter&amp;#34;);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v4l2caps&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Gst&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;CapsFilter&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;caps&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Gst&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Caps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;create_simple&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;s&#34;&gt;&amp;#34;video/x-raw&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;c1&#34;&gt;//&amp;#34;format&amp;#34;, &amp;#34;YUY2&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;                    &lt;span class=&#34;s&#34;&gt;&amp;#34;width&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;640&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;s&#34;&gt;&amp;#34;height&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;480&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;c1&#34;&gt;//&amp;#34;framerate&amp;#34;, Gst::Fraction(60, 1)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;                    &lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;v4l2caps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;property_caps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;caps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;csc&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Gst&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;VideoConvert&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;appsink&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Gst&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;AppSink&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;appsink&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;property_emit_signals&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;appsink&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;property_sync&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;appsink&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;signal_new_sample&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;().&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;connect&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;appsink&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;samples&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;appsink&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pull_sample&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;buffer&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;samples&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get_buffer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;//auto app_buffer = buffer-&amp;gt;copy_deep();
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;caps&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;samples&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get_caps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// TBD
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;        &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;new buffer:&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                  &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34; caps: &amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;caps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to_string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                  &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;, size=&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;buffer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get_size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                  &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;, blocks=&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;buffer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;n_memory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;sc&#34;&gt;&amp;#39;\n&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Gst&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;FLOW_OK&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;appcaps&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Gst&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Caps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;create_simple&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                       &lt;span class=&#34;s&#34;&gt;&amp;#34;video/x-raw&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                       &lt;span class=&#34;s&#34;&gt;&amp;#34;format&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;I420&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                       &lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;appsink&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;property_caps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;appcaps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;v4l2src&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;v4l2caps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;csc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;appsink&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;v4l2src&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;link&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;v4l2caps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;link&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;csc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;link&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;appsink&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;set_state&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Gst&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;STATE_PLAYING&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mainloop&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Glib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MainLoop&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;mainloop&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;set_state&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Gst&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;STATE_NULL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ну а если быть точным, то нужно смотреть на mime-тип пада, в данном случае это &lt;code&gt;video/x-raw&lt;/code&gt; и на странице 
&lt;a href=&#34;https://gstreamer.freedesktop.org/documentation/additional/design/mediatype-video-raw.html?gi-language=c&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Raw Video Media Types&lt;/a&gt; смотреть описание, какие параметры и какого типа ему присущи, конкретно про &lt;code&gt;format&lt;/code&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;format&lt;/strong&gt;, &lt;code&gt;G_TYPE_STRING&lt;/code&gt;: Mandatory. The format of the video. See the 
&lt;a href=&#34;https://gstreamer.freedesktop.org/documentation/additional/design/mediatype-video-raw.html#formats&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Formats&lt;/a&gt; section for a list of valid format strings.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Вот так, стрингификация типов во все поля.&lt;/p&gt;
&lt;p&gt;Ссылки:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://gstreamer.freedesktop.org/documentation/videoconvert/index.html?gi-language=c&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;code&gt;videoconvert&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://gstreamer.freedesktop.org/documentation/app/appsink.html?gi-language=c&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;code&gt;appsink&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://gstreamer.freedesktop.org/documentation/coreelements/capsfilter.html?gi-language=c&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;code&gt;capsfilter&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://gstreamer.freedesktop.org/documentation/video4linux2/v4l2src.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;code&gt;v4l2src&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://gstreamer.freedesktop.org/documentation/additional/design/mediatype-video-raw.html?gi-language=c&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Raw Video Media Types&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Meson Cross Compiling</title>
      <link>https://htrd.su/blog/2020/01/18/meson-cross-compiling/</link>
      <pubDate>Sat, 18 Jan 2020 00:27:45 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2020/01/18/meson-cross-compiling/</guid>
      <description>&lt;p&gt;
&lt;a href=&#34;https://mesonbuild.com/Cross-compilation.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Кросс-компиляция в Meson&lt;/a&gt; достаточно проста. Выполняется, как и в CMake при помощи вспомогательного файла:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-ini&#34; data-lang=&#34;ini&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;[host_machine]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;system&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#39;linux&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;cpu_family&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#39;aarch64&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;cpu&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#39;aarch64&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;endian&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#39;little&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;[binaries]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;c&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#39;aarch64-linux-gnu-gcc&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;cpp&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#39;aarch64-linux-gnu-g++&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#ld = &amp;#39;gold&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;ar&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#39;aarch64-linux-gnu-ar&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;strip&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#39;aarch64-linux-gnu-strip&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;pkgconfig&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#39;pkg-config&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#exe_wrapper = &amp;#39;wine&amp;#39; # A command used to run generated executables.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;[properties]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;c_args&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;[&amp;#39;-DCROSS=1&amp;#39;, &amp;#39;-DSOMETHING=3&amp;#39;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;c_link_args&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;[&amp;#39;-some_link_arg&amp;#39;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;sys_root&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#39;/some/path&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Сохраняем его под именем &lt;strong&gt;cross-build.ini&lt;/strong&gt; и передаём meson:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir build
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; build
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;meson --cross-file ../cross-build.ini ..
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Стоит отметить, что meson ОЧЕНЬ чувствителен к значениям переменных типа &lt;code&gt;CC&lt;/code&gt; ,&lt;code&gt;CXX&lt;/code&gt; и &lt;code&gt;LD&lt;/code&gt;. Он рассчитывает, что если они установлены, то они отсылают к компилятору, который генерирует код для билд-машины, иными словами - нативный код. Это актуально для среды LTIB, которая настраивает окружение таким образом, что эти переменные окружения ссылаются на кросс-компилятор. Для случая autotools и большинства случаев использования CMake - это нормально. А вот Meson может сломаться.&lt;/p&gt;
&lt;p&gt;Ещё одной особенностью является задание линкёра - &lt;code&gt;ld = xxx&lt;/code&gt;.  Он не задаёт конкретный бинарник, а отсылает к типу: &lt;code&gt;gold&lt;/code&gt; (бинарник &lt;code&gt;ld.gold&lt;/code&gt; или аналогичный), &lt;code&gt;bsf&lt;/code&gt; (&lt;code&gt;ld.bsf&lt;/code&gt; или аналогичный). Я задал его некорректно изначально, и только запуск Meson под strace позволил выяснить причину его недовольства.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Firefox 72: убираем прокрутку большого количества вкладок</title>
      <link>https://htrd.su/blog/2020/01/16/firefox-72-disable-tab-scrolling/</link>
      <pubDate>Thu, 16 Jan 2020 11:59:16 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2020/01/16/firefox-72-disable-tab-scrolling/</guid>
      <description>&lt;h2 id=&#34;небольшое-введение&#34;&gt;Небольшое введение.&lt;/h2&gt;
&lt;p&gt;Есть два поведения для большого количества вкладок:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Путь Google Chrome и производных: максимально сжимаем вкладки (правда потом они не отображаются и приходится неочевидным способом прокручивать колесиком мыши или горячими клавишами):
&lt;img src=&#34;https://htrd.su/img/post/2020/01/16/firefox-72-disable-tab-scrolling/image-20200116121003432.png&#34; alt=&#34;image-20200116121003432&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Путь Firefox: заполнять вкладками всё пространство, как будет занято, начинать их сжимать, если размер достигнут какого-то минимального значения, включать полосу прокрутки плюс добавляется выпадающий список:
&lt;img src=&#34;https://htrd.su/img/post/2020/01/16/firefox-72-disable-tab-scrolling/image-20200116121911753.png&#34; alt=&#34;image-20200116121911753&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Моё мнение, что прокрутка стимулирует создавать ещё больше вкладок, а так как с моей личной организованностью в этом плане дела обстоят не очень хорошо, то мне нужен внешний стимул, что бы заняться чисткой открытых страниц. Отсутствие визуального различия во вкладках (сильно налеплены) - хороший стимул в этом.&lt;/p&gt;
&lt;p&gt;Стоит отметить,  что организация вкладок в том же Vivaldi (базируется на движке Chromium) для меня является эталонной. И реализовано оно значительно лучше, нежели в родительском браузере:
&lt;img src=&#34;https://htrd.su/img/post/2020/01/16/firefox-72-disable-tab-scrolling/image-20200116123424977.png&#34; alt=&#34;image-20200116123424977&#34;&gt;&lt;/p&gt;
&lt;p&gt;Итак, моя задача - добиться схожего поведения в Firefox.&lt;/p&gt;
&lt;h2 id=&#34;до-firefox-72&#34;&gt;До Firefox 72&lt;/h2&gt;
&lt;p&gt;До перехода на движок Quamtum можно было найти расширения для браузера, которые реализовали нечто подобное. А вот после перехода, для достижения нужного эффекта, стало необходимым править &lt;strong&gt;userChrome.css&lt;/strong&gt; (располагается в &lt;code&gt;$HOME/.mozilla/firefox/&amp;lt;PROFILE_NAME&amp;gt;/chrome/&lt;/code&gt;):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-css&#34; data-lang=&#34;css&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt; * Setup minimal Tab width
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt; * Ref: https://www.reddit.com/r/FirefoxCSS/comments/70cvby/fully_disable_tab_overflow/
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;tabbrowser-tab&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;not&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;pinned&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;])&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;not&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;selected&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;])&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;min-width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;initial&lt;/span&gt; &lt;span class=&#34;cp&#34;&gt;!important&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;tab-content&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;overflow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;hidden&lt;/span&gt; &lt;span class=&#34;cp&#34;&gt;!important&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;В комментарии виден источник решения:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://www.reddit.com/r/FirefoxCSS/comments/70cvby/fully_disable_tab_overflow&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://www.reddit.com/r/FirefoxCSS/comments/70cvby/fully_disable_tab_overflow&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;А вообще, крайне рекомендую для ознакомления канал 
&lt;a href=&#34;https://www.reddit.com/r/FirefoxCSS/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Firefox CSS&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;С версии &lt;strong&gt;Firefox 69&lt;/strong&gt;, что бы эти настройки подтянулись нужно включить опцию &lt;code&gt;toolkit.legacyUserProfileCustomizations.stylesheets&lt;/code&gt; (установить в &lt;code&gt;true&lt;/code&gt;) в 
&lt;a href=&#34;about:config&#34;&gt;about:config&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;встречаем-firefox-72&#34;&gt;Встречаем Firefox 72&lt;/h2&gt;
&lt;p&gt;Но вот пришло обновление. И решение выше не только перестало выполнять поставленную задачу, но и начало портить внешний вид прилепленных (pinned) вкладок. Причина, судя по всему, в изменении расположения элементов в иерархии.&lt;/p&gt;
&lt;p&gt;Не буду вдаваться в подробности, но методом проб и ошибок получил такой &lt;strong&gt;userChrome.css&lt;/strong&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-css&#34; data-lang=&#34;css&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;tabbrowser-tab&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;not&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;pinned&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;])&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;not&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;selected&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;])&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;min-width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;initial&lt;/span&gt; &lt;span class=&#34;cp&#34;&gt;!important&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;overflow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;hidden&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;tabbrowser-tab&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;not&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;pinned&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;])&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;min-width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;initial&lt;/span&gt; &lt;span class=&#34;cp&#34;&gt;!important&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;tabbrowser-tab&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;border-right&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;solid&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#aaa&lt;/span&gt; &lt;span class=&#34;cp&#34;&gt;!important&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;/* dividers between tabs */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;tabbrowser-tab&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;after&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;tabbrowser-tab&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;before&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;none&lt;/span&gt; &lt;span class=&#34;cp&#34;&gt;!important&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Основная проблема: простой перенос &lt;code&gt;overflow: hidden !important&lt;/code&gt; в &lt;code&gt;.tabbrowser-tab&lt;/code&gt; (селекторы опускаю) убивает напрочь разделители между вкладками, которые задаются через псевдоэлемент &lt;code&gt;.tabbbrowser-tab::after&lt;/code&gt;, а так как этот элемент является дочерним относительно самого &lt;code&gt;.tabbrowser-tab&lt;/code&gt;, то настройки перекрытия действуют и на него.&lt;/p&gt;
&lt;p&gt;Пришлось ручками рисовать бордюр справа и скрывать блок &lt;code&gt;::after&lt;/code&gt;. Минус данного решения: бордюр рисуется на всю высоту вкладки, но я готов с этим смириться.&lt;/p&gt;
&lt;p&gt;Выглядит это так:
&lt;img src=&#34;https://htrd.su/img/post/2020/01/16/firefox-72-disable-tab-scrolling/image-20200116125819455.png&#34; alt=&#34;image-20200116125819455&#34;&gt;&lt;/p&gt;
&lt;p&gt;Отмечу, что при просто огромном числе вкладок, прокрутка всё же появится. Но даже для меня это будет чересчур :)&lt;/p&gt;
&lt;h2 id=&#34;отладка-стилей&#34;&gt;Отладка стилей&lt;/h2&gt;
&lt;p&gt;Не могу пройти и мимо вопроса - а как вообще понять, что редактировать, откуда брать классы и иерархию?&lt;/p&gt;
&lt;p&gt;Ответов может быть несколько. Например, открыть встроенный стиль:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;chrome://browser/skin/browser.css&#34;&gt;chrome://browser/skin/browser.css&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Но лучшим способом, будет использовать DevTools. Да, их можно применить не только для проверки или отладки страницы :) Но для начала, нужно включить. Для этого активируем DevTools комбинацией &lt;code&gt;Ctrl&lt;/code&gt;+&lt;code&gt;Shift&lt;/code&gt;+&lt;code&gt;I&lt;/code&gt; (на macOS вместо &lt;code&gt;Ctrl&lt;/code&gt; будет &lt;code&gt;Cmd&lt;/code&gt;). Идём в настройки (нажимаем &lt;code&gt;F1&lt;/code&gt;) и в секции &lt;strong&gt;Advanced settings&lt;/strong&gt; активируем опции:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Enable browser chrome and add-on debugging toolboxes&lt;/li&gt;
&lt;li&gt;Enable remote debugging&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;После чего DevTools для всего браузера можно активировать комбинацией &lt;code&gt;Ctrl&lt;/code&gt;+&lt;code&gt;Shift&lt;/code&gt;+&lt;code&gt;Alt&lt;/code&gt;+&lt;code&gt;I&lt;/code&gt; и подтвердив входящее подключение:&lt;/p&gt;
&lt;img src=&#34;https://htrd.su/img/post/2020/01/16/firefox-72-disable-tab-scrolling/image-20200116131018761.png&#34; alt=&#34;image-20200116131018761&#34; style=&#34;zoom:80%;&#34; /&gt;
&lt;p&gt;Дальше всё аналогично обычному использованию, только выбираем элементы браузера, а не страницы.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Корабль такое место...</title>
      <link>https://htrd.su/blog/2020/01/13/spaceship/</link>
      <pubDate>Mon, 13 Jan 2020 13:40:11 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2020/01/13/spaceship/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Корабль [космический] такое место, где любая потерянная вещь
рано или поздно находится. Но это обычно не радует.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;ndash; 
&lt;a href=&#34;http://fan.lib.ru/s/shumil_p/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Шумил Павел&lt;/a&gt;, 
&lt;a href=&#34;http://fan.lib.ru/s/shumil_p/ok-01.shtml&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&amp;ldquo;Три, четыре, пять, я иду искать&amp;rdquo;&lt;/a&gt;, цикл 
&lt;a href=&#34;http://fan.lib.ru/s/shumil_p/index.shtml#gr3&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Окно контакта&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;PS а порекомендуйте годной космофантастики?&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Let&#39;s Encrypt for GitLab Pages</title>
      <link>https://htrd.su/blog/2020/01/10/lets-encrypt-for-gitlab-pages/</link>
      <pubDate>Fri, 10 Jan 2020 12:51:07 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2020/01/10/lets-encrypt-for-gitlab-pages/</guid>
      <description>&lt;p&gt;Буквально сегодня состоялся разговор по поводу того, что на 
&lt;a href=&#34;https://docs.gitlab.com/ee/user/project/pages/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;GitLab Pages&lt;/a&gt; нет возможности автоматически обновлять сертификаты 
&lt;a href=&#34;https://letsencrypt.org&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Let&amp;rsquo;s Encrypt&lt;/a&gt; (которые протухают каждые 90 дней) и что данная возможность есть на 
&lt;a href=&#34;https://pages.github.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;GitHub Pages&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Кроме того, сегодня как раз подошла череда обновления сертификата, заодно что-то меня потянуло поглядеть статью в документации GitLab по настройке интеграции с Let&amp;rsquo;s Encrypt: 
&lt;a href=&#34;https://docs.gitlab.com/ee/user/project/pages/lets_encrypt_for_gitlab_pages.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Let&amp;rsquo;s Encrypt for GitLab Pages&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;И что же я там вижу:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Let&amp;rsquo;s Encrypt for GitLab Pages (manual process, &lt;strong&gt;deprecated&lt;/strong&gt;)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Warning:&lt;/strong&gt; This method is still valid but was &lt;strong&gt;deprecated&lt;/strong&gt; in favor of the 
&lt;a href=&#34;https://docs.gitlab.com/ee/user/project/pages/custom_domains_ssl_tls_certification/lets_encrypt_integration.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Let’s Encrypt integration&lt;/a&gt; introduced in GitLab 12.1.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Воу! С радостным предчувствием иду по указанной ссылке и таки да, они завезли автообновление сертификатов!&lt;/p&gt;
&lt;p&gt;Но если интересно, как это было сделано вручную, добро пожаловать под кат.&lt;/p&gt;
&lt;p&gt;Итак, старая ссылка описывает метод ручного получения сертификата, используя certbot и метод подтверждения через HTTP (&lt;code&gt;.well-known/acme-challenge/ID&lt;/code&gt;). Но для этого, нужно каждый раз пересоздавать этот файл и публиковать сайт, ждать появления и только потом продолжать процедуру получения сертификата.&lt;/p&gt;
&lt;p&gt;Я пошёл другим путём.&lt;/p&gt;
&lt;p&gt;Подтверждать можно через DNS. Но есть загвоздка: certbot должен смочь модифицировать запись в DNS, а для этого должен быть API к сервисами DNS-провайдера (или написать свой, если используется собственный DNS). Подобный функционал может отличаться у различных провайдеров и логично его поместить в какое-то подобие плагинов. К счастью, задел на расширение уже реализован в certbot и даже есть пачка Authenticator плагинов для certbot. Часть из них даже есть в репозиториях Manjaro:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;community/certbot-dns-sakuracloud 1.0.0-1 (7.9 KiB 16.0 KiB) 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Sakura Cloud DNS Authenticator plugin for Certbot
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;community/certbot-dns-route53 1.0.0-1 (10.5 KiB 23.5 KiB) 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Route53 DNS Authenticator plugin for Certbot
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;community/certbot-dns-rfc2136 1.0.0-1 (10.7 KiB 28.6 KiB) (Installed)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    NS1 DNS Authenticator plugin for Certbot
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;community/certbot-dns-ovh 1.0.0-1 (8.4 KiB 17.4 KiB) 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    OVH DNS Authenticator plugin for Certbot
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;community/certbot-dns-nsone 1.0.0-1 (8.0 KiB 15.1 KiB) 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    NS1 DNS Authenticator plugin for Certbot
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;community/certbot-dns-luadns 1.0.0-1 (8.0 KiB 15.4 KiB) 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    LuaDNS DNS Authenticator plugin for Certbot
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;community/certbot-dns-linode 1.0.0-1 (8.4 KiB 17.6 KiB) 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Linode DNS Authenticator plugin for Certbot
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;community/certbot-dns-google 1.0.0-1 (11.9 KiB 32.7 KiB) 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Google Cloud DNS Authenticator plugin for Certbot
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;community/certbot-dns-gehirn 1.0.0-1 (7.9 KiB 16.1 KiB) 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Gehirn DNS Authenticator plugin for Certbot
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;community/certbot-dns-dnsmadeeasy 1.0.0-1 (8.1 KiB 16.4 KiB) 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    DNS Made Easy DNS Authenticator plugin for Certbot
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;community/certbot-dns-dnsimple 1.0.0-1 (7.9 KiB 15.2 KiB) 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    DNSimple DNS Authenticator plugin for Certbot
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;community/certbot-dns-digitalocean 1.0.0-1 (9.4 KiB 22.8 KiB) 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    DigitalOcean DNS Authenticator plugin for Certbot
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;community/certbot-dns-cloudxns 1.0.0-1 (8.0 KiB 15.8 KiB) 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    CloudXNS DNS Authenticator plugin for Certbot
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;community/certbot-dns-cloudflare 1.0.0-1 (9.9 KiB 25.1 KiB) 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Cloudflare DNS Authenticator plugin for Certbot
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Беда в том, что у меня используется DNS от 
&lt;a href=&#34;https://dns.he.net/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Hurricane Electric (или просто he.net)&lt;/a&gt;. Но беглый поиск дал наличие плагина в AUR:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;aur/certbot-dns-henet-git r16.931e2c7-1 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;+0 0.00%&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;Installed: r17.e2cd097-1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    he.net DNS Authenticator plugin &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; Certbot
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Установка самого плагина не сложная. Настройка, когда уже всё знаешь, тоже.&lt;/p&gt;
&lt;p&gt;Для начала создадим скрипты помощники, что бы не запоминать все команды.&lt;/p&gt;
&lt;p&gt;Итак, выбираем директорию, пусть это будет &lt;strong&gt;~/home/blog/certbot&lt;/strong&gt; и переходим в неё (предварительно создав!).&lt;/p&gt;
&lt;p&gt;Начнём со скрипта &lt;strong&gt;cert-get-dns-henet.sh&lt;/strong&gt; для первоначального запроса сертификата:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#!/usr/bin/env bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;mail&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;your_email@somedomain.com&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;site&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;domain.su&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;certbot certonly -d &lt;span class=&#34;nv&#34;&gt;$site&lt;/span&gt; --email &lt;span class=&#34;nv&#34;&gt;$mail&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    --authenticator certbot-dns-henet:dns-henet &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    --certbot-dns-henet:dns-henet-credentials dns-credentials/henet &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    --work-dir work-dir &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    --logs-dir logs-dir &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    --config-dir config-dir
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Скрипт обращается только к файлам в текущей директории, поэтому нет необходимости запускать с правами супер-пользователя.&lt;/p&gt;
&lt;p&gt;Существенными особенностями этого скрипта являются два параметра:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;--authenticator certbot-dns-henet:dns-henet&lt;/code&gt; который выбирает нужный нам плагин-authenticator&lt;/li&gt;
&lt;li&gt;и &lt;code&gt;--certbot-dns-henet:dns-henet-credentials dns-credentials/henet&lt;/code&gt; который задаёт файл с креденшиналами для доступа к админке he.net. Попросту: логин и пароль, так как сам плагин сделан, ЕМНИП, через парсинг сайта и запросов через форму.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Создаём файл для хранения креденшиналов:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir dns-credentials
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;touch dns-credentials/henet
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod &lt;span class=&#34;m&#34;&gt;600&lt;/span&gt; dns-credentials/henet
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Содержимое &lt;strong&gt;dns-credentials/henet&lt;/strong&gt; такое:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;certbot_dns_henet:dns_henet_username=HE_NET_LOGIN
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;certbot_dns_henet:dns_henet_password=HE_NET_PASSWORD
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Всё, после этого достаточно запустить скрипт, что бы получить сертификаты. Его запускать нужно только единожды.&lt;/p&gt;
&lt;p&gt;Второй скрипт носит имя &lt;strong&gt;cert-renew-all.sh&lt;/strong&gt; и служит для обновления сертификатов:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#!/usr/bin/env bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;certbot renew &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    --work-dir work-dir &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    --logs-dir logs-dir &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    --config-dir config-dir
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Его содержимое будет идентичным для всех форм подтверждения прав на домен.&lt;/p&gt;
&lt;p&gt;Ну и последний скрипт использует возможности 
&lt;a href=&#34;https://docs.gitlab.com/ee/api/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;GitLab API&lt;/a&gt; в части управления пользовательскими страницами, что бы в одно движение обновить сертификат на странице.&lt;/p&gt;
&lt;p&gt;Скрипт назвал &lt;strong&gt;gitlab-pages-update.sh&lt;/strong&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#!/usr/bin/env bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; -e
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;domain&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;domain.su
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# url-encoded, replace &amp;#39;/&amp;#39; with &amp;#39;%2F&amp;#39;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# GITLAB_USER/GITLAB_USER.gitlab.io -&amp;gt; GITLAB_USER%2FGITLAB_USER.gitlab.io&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;project&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;GITLAB_USER%2FGITLAB_USER.gitlab.io
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;cert&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;config-dir/live/&lt;span class=&#34;nv&#34;&gt;$domain&lt;/span&gt;/fullchain.pem
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;key&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;config-dir/live/&lt;span class=&#34;nv&#34;&gt;$domain&lt;/span&gt;/privkey.pem
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;token&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;cat gitlab-credentials/token&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl --request PUT --header &lt;span class=&#34;s2&#34;&gt;&amp;#34;PRIVATE-TOKEN: &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$token&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; --form &lt;span class=&#34;s2&#34;&gt;&amp;#34;certificate=@&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$cert&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; --form &lt;span class=&#34;s2&#34;&gt;&amp;#34;key=@&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$key&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    https://gitlab.com/api/v4/projects/&lt;span class=&#34;nv&#34;&gt;$project&lt;/span&gt;/pages/domains/&lt;span class=&#34;nv&#34;&gt;$domain&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sed &lt;span class=&#34;s1&#34;&gt;&amp;#39;s|\\n|\n|g&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Обращение к API через 
&lt;a href=&#34;https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;токен&lt;/a&gt;, который хранится в файле &lt;strong&gt;gitlab-credentials/token&lt;/strong&gt;. Получить его можно:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Идём на &amp;lt;gitlab.com&amp;gt; и логинимся&lt;/li&gt;
&lt;li&gt;Щёлкаем мышью по иконке с вашим аватаром в правом верхнем углу и в выпадающем списке выбираем &lt;strong&gt;Settings&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;В &lt;strong&gt;User settings&lt;/strong&gt; меню выбираем пункт &lt;strong&gt;Access Tokens&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Вводим параметры токена и обязательно указываем область (Scope) &lt;strong&gt;api&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Кликаем по кнопке &lt;strong&gt;Create personal access token&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;И сохраняем токен в файл выше.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Посмотреть токен повторно вы не можете. Только отозвать его.&lt;/p&gt;
&lt;p&gt;На этом вспомогательные скрипты закончены. Процедура обновления будет заключаться в последовательном вызове двух скриптов:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bas&#34; data-lang=&#34;bas&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;./&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;cert&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;renew&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;all&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;sh&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;./&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;gitlab&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;pages&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;update&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;sh&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;При желании можно поместить данные вызовы в задание Cron. Что не нравится, так это необходимость хранить пароль открытым текстом для he.net.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>ABI Laboratory</title>
      <link>https://htrd.su/blog/2020/01/04/abi-laboratory/</link>
      <pubDate>Sat, 04 Jan 2020 15:16:24 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2020/01/04/abi-laboratory/</guid>
      <description>&lt;p&gt;Очень полезный ресурс от Андрея Пономаренко (
&lt;a href=&#34;https://www.linkedin.com/in/andreyponomarenko&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;тыц&lt;/a&gt;, 
&lt;a href=&#34;https://github.com/lvc&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;тыц&lt;/a&gt;) как для разработчиков библиотек, так и для маинтейнеров разного рода софта. Позволяет мониторить изменения в 
&lt;a href=&#34;https://abi-laboratory.pro/index.php?view=binary-compatibility&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;API/ABI&lt;/a&gt; интерфейсах библиотек:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://abi-laboratory.pro/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://abi-laboratory.pro/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Вообще функционал ресурса достаточно богат и интересен:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;можно помониторить 
&lt;a href=&#34;https://abi-laboratory.pro/index.php?view=tracker&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;список C/C++ библитек&lt;/a&gt; на предмет изменений в API/ABI (инструмент 
&lt;a href=&#34;https://abi-laboratory.pro/index.php?view=abi-tracker&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;ABI Tracker&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;можно поискать неизвестный символ (в т.ч. в &amp;ldquo;mangled&amp;rdquo; виде) при помощи инструмента 
&lt;a href=&#34;https://abi-laboratory.pro/index.php?view=tracker&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;ABI Navigator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;для разработчиков модулей ядра Linux может показаться интересным инструмент 
&lt;a href=&#34;https://abi-laboratory.pro/index.php?view=linux&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Linux ABI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;ну и схожий инструмент для 
&lt;a href=&#34;https://abi-laboratory.pro/index.php?view=windows&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Windows API&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Все доступные инструменты можно глянуть на странице 
&lt;a href=&#34;https://abi-laboratory.pro/index.php?view=reports&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Reports&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Инструменты, используемые для анализа можно изучить на странице 
&lt;a href=&#34;https://abi-laboratory.pro/index.php?view=open-source&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Open Source&lt;/a&gt;. При помощи оных вполне можно организовать мониторинг изменений для вашего проекта или библиотеки.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Внезапный Homebrew</title>
      <link>https://htrd.su/blog/2020/01/04/linuxbrew/</link>
      <pubDate>Sat, 04 Jan 2020 13:35:30 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2020/01/04/linuxbrew/</guid>
      <description>&lt;p&gt;С удивлением для себя обнаружил, что 
&lt;a href=&#34;https://brew.sh&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Homebrew&lt;/a&gt;, который использовал несколько раз для установки пакетов и сборки/портирования софта на macOS, вполне себе может использоваться и на Linux и даже в среде WSL на Windows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://docs.brew.sh/Homebrew-on-Linux&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://docs.brew.sh/Homebrew-on-Linux&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;В целом неплохо, но:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;это ещё один шаг к dependency hell&lt;/li&gt;
&lt;li&gt;нет возможности (если есть - поправьте) зафиксировать версию/срез репозитория&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Второй пункт особенно полезен для создания воспроизводимых окружений для сборки софта с последующей дистрибуцией. В этом отношении 
&lt;a href=&#34;https://mxe.cc/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;MXE&lt;/a&gt; даёт фору: там попросту можно восстановить окружение используя номер коммита GIT.&lt;/p&gt;
&lt;p&gt;Ну и для Windows я бы предпочёл окружение 
&lt;a href=&#34;https://www.msys2.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;MSYS2&lt;/a&gt; с pacman  в качестве пакетного менеджера.&lt;/p&gt;
&lt;p&gt;Но, оно может оказаться полезным для установки более свежего софта без прав администратора с возможностью быстро откатиться (просто удалить директорию с установленным барахлом) на всяких LTS дистрибутивах.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Hugo: редактирование страницы из браузера</title>
      <link>https://htrd.su/blog/2020/01/03/hugo-edit-from-browser/</link>
      <pubDate>Fri, 03 Jan 2020 15:36:18 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2020/01/03/hugo-edit-from-browser/</guid>
      <description>&lt;p&gt;Ну точнее не совсем. Статичный сайт на то и статичный, что вся генерация производится где-то там. Но иметь возможность получить ссылку на файл для редактирования конкретной страницы - достаточно удобная вещь.&lt;/p&gt;
&lt;p&gt;Мой блог хостится на GitLab Pages, в отличии от GitHub Pages, он предоставляет больше возможностей (по крайней мере пока) по использованию различных генераторов сайтов. Так, в репозитории у меня хранится исходный код сайта, а генерация производится через CI и запуск Hugo, после чего артефакты деплоятся (ограничение - 1GB). В GitHub Pages автоматически генерировать сайт из исходников возможно только при использовании Jekyll.&lt;/p&gt;
&lt;p&gt;Сами системы, что GitLab, что GitHub позволяют редактировать документ из браузера. На этом у меня и основывалась первоначальная идея, как править документы онлайн, если есть доступ только к браузеру. Собственно уже давно на этом сайте можно увидеть значок карандаша рядом со статьями блога.&lt;/p&gt;
&lt;p&gt;Но мне хотелось большего.&lt;/p&gt;
&lt;p&gt;Как известно, у Hugo есть режим сервера, когда он рендерит документы (по умолчанию - в память) и запускает сервер, доступный по адресу 
&lt;a href=&#34;http://localhost:1313&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;localhost:1313&lt;/a&gt;. Естественно, если мы перейдём по ссылке и запустим редактирование онлайн, мы документ отредактируем, но только непосредственно на сайте. А если мы хотим правок только локально? А потом только закоммитить и опубликовать?&lt;/p&gt;
&lt;p&gt;Чуточку подумав, решил, что самый простой способ достичь желаемого - это использовать следующие возможности:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;переменную 
&lt;a href=&#34;https://discourse.gohugo.io/t/questions-about-hugo-environment-variables/17865/4&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;code&gt;hugo.Environment&lt;/code&gt;&lt;/a&gt;, которая, по умолчанию (для своих вариантов использовать параметр &lt;code&gt;-e&lt;/code&gt;/&lt;code&gt;--environment&lt;/code&gt;) задана в &amp;ldquo;development&amp;rdquo; при запуске из режима сервера и &amp;ldquo;production&amp;rdquo; при запуске в режиме генерации сайта.&lt;/li&gt;
&lt;li&gt;функцию 
&lt;a href=&#34;https://gohugo.io/functions/getenv/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;code&gt;getenv&lt;/code&gt;&lt;/a&gt;, что бы получить переменную окружения, через которую мы передадим ссылку на корень блога.&lt;/li&gt;
&lt;li&gt;использовать параметр сервера 
&lt;a href=&#34;https://gohugo.io/commands/hugo_server/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;code&gt;--navigateToChanged&lt;/code&gt;&lt;/a&gt; что бы браузер с отрктым сайтом Hugo автоматически редиректился на изменённую страницу - это оказалось очень удобно, когда редактируешь документы, обходя файловую систему.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Собираем всё вместе и получаем следующий сниппет, который стоит поместить в один кусочков шаблона сайта (у меня это &amp;ldquo;
&lt;a href=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/blob/master/themes/hugo-octopress-htrd/layouts/partials/post_header.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;layouts/partials/post_header.html&lt;/a&gt;&amp;rdquo;):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    {{ if eq hugo.Environment &amp;#34;development&amp;#34; }}
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      {{ if getenv &amp;#34;HUGO_SITE_ROOT&amp;#34; }} &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;markdown:{{ getenv &amp;#34;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;HUGO_SITE_ROOT&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;}}/&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/{{&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;File&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;Path&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;}}&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;fa fa-pencil-square-o&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;aria-hidden&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;true&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt; {{ end }}
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    {{ else }}
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      {{ if .Site.Params.editPrefix }} &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;{{ .Site.Params.editPrefix }}/content/{{ .File.Path }}&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;fa fa-pencil-square-o&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;aria-hidden&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;true&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt; {{ end }}
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    {{ end }}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Запуск сервера производится скриптом &lt;code&gt;hugo-server.sh&lt;/code&gt; следующего содержания:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#!/usr/bin/env bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#HUGO=hugo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;HUGO&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/bin/hugo
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;SITE_ROOT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;pwd&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;env &lt;span class=&#34;nv&#34;&gt;HUGO_RSSLIMIT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;-1&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;HUGO_SITE_ROOT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$SITE_ROOT&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$HUGO&lt;/span&gt; server -D -F -E --watch --verbose --disableFastRender --navigateToChanged
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Корень исходника сайта передаётся через переменную окружения &lt;code&gt;HUGO_SITE_ROOT&lt;/code&gt;. Дальше строится полный путь уже в самом шаблоне.&lt;/p&gt;
&lt;p&gt;Обратите внимание на используемую схему для файла: &lt;code&gt;markdown:&lt;/code&gt;, а не &lt;code&gt;file:&lt;/code&gt;. Дело в том, что как минимум, Firefox игнорирует схему &lt;code&gt;file:&lt;/code&gt; и нужны дополнительные приседания, что бы заставить её работать. Для все прочие схемы, он пытается запустить через определённый пользователем хендлер. Собственно при первом переходе по такой ссылке вас и спросят, а что с этим делать-то? И указать обработчик этой схемы.&lt;/p&gt;
&lt;p&gt;А что бы получить желаемый результат, нужно создать скрипт, например, &lt;code&gt;markdown-handler&lt;/code&gt; в любом удобном месте и сделать его исполняемым:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;touch ~/bin/markdown-handler
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod +x ~/bin/markdown-handler
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Содержимое этого файла может быть следующим:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#!/usr/bin/env bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;editor&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;typora
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#editor=xdg-open&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;schema&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;9&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# skip unknown schemas&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$schema&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; !&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;markdown:&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;urldecode&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt; : &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;*//+/ &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; -e &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;_&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;//%/&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\\&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$editor&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;urldecode &lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;9&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;xdg-open&lt;/code&gt; откроет системный хендлер, который закреплён за данным типом файла. Если он не устраивает, имеет смысл изменять системные настройки. В крайнем случае, переопределить обработчик (программу для открытия) прямо в скрипте.&lt;/p&gt;
&lt;p&gt;Дополнительно можно проделать действия по ссылке:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://unix.stackexchange.com/a/497147&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://unix.stackexchange.com/a/497147&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;что бы научить открывать схему &lt;code&gt;markdown:&lt;/code&gt; стандартный &lt;code&gt;xdg-open&lt;/code&gt;, тогда без подобные ссылки начнут понимать и браузеры, основанные на Chromium, правда проверял я только в Vivaldi. Ну и дефолтный хендлер &amp;ldquo;System handler&amp;rdquo; в Firefox тоже начнёт работать для этих ссылок.&lt;/p&gt;
&lt;p&gt;Если в паре слов, то создать файл &lt;strong&gt;.local/share/applications/markdown-protocol-handler.desktop&lt;/strong&gt; с содержимым:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-desktop&#34; data-lang=&#34;desktop&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;[Desktop Entry]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;Type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Application&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;Name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Markdown Scheme Handler&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;Exec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;markdown-handler %u&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;StartupNotify&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;MimeType&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;x-scheme-handler/markdown;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;И выполнить команду:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;xdg-mime default markdown-protocol-handler.desktop x-scheme-handler/markdown
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Сам &lt;code&gt;markdown-handler&lt;/code&gt; мы выше уже создали.&lt;/p&gt;
&lt;p&gt;Совсем забыл: в сниппете выше упоминается параметр &lt;code&gt;.Site.Params.editPrefix&lt;/code&gt;. Это пользовательский параметр, который задаётся в &lt;strong&gt;config.toml&lt;/strong&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-toml&#34; data-lang=&#34;toml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;params&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;editPrefix&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;https://gitlab.com/USER/USER.gitlab.io/edit/master/&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;что-в-итоге&#34;&gt;Что в итоге?&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;При открытии сайта в браузере у нас есть ссылка на редактирование страницы через интерфейс GitLab (или другой используемой системы):
&lt;ul&gt;
&lt;li&gt;переходим&lt;/li&gt;
&lt;li&gt;редактируем&lt;/li&gt;
&lt;li&gt;сохраняем&lt;/li&gt;
&lt;li&gt;ждём&lt;/li&gt;
&lt;li&gt;&amp;hellip;&lt;/li&gt;
&lt;li&gt;PROFIT&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;При открытии локального сайта по ссылке 
&lt;a href=&#34;http://localhost:1313&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;localhost:1313&lt;/a&gt; у нас есть ссылка со схемой &lt;code&gt;markdown:&lt;/code&gt; которая позволяет запустить системный редактор, отредактировать страницу и сразу увидеть результат. После чего мы можем отредактировать следующую страницу и отправить это на GitLab в один push-запрос.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;del&gt;На данный момент, ссылка у меня создаётся только для постов блога. Придёт время и дойдут руки, сделаю аналогичное и для прочих страниц.&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;Сниппет без изменений подошёл и для прочих страниц:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/commit/b926cbd9de77eddcb31e28b9607aeb4071889658&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://gitlab.com/h4tr3d/h4tr3d.gitlab.io/commit/b926cbd9de77eddcb31e28b9607aeb4071889658&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Markdown Converters</title>
      <link>https://htrd.su/blog/2020/01/03/markdown-converters/</link>
      <pubDate>Fri, 03 Jan 2020 13:58:01 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2020/01/03/markdown-converters/</guid>
      <description>&lt;p&gt;Пара Markdown конвертеров из простого текста и HTML (исходного текста):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://euangoddard.github.io/clipboard2markdown/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://euangoddard.github.io/clipboard2markdown/&lt;/a&gt; - по сути разбивает по параграфам и больше ничего не делает. Но, зачастую, этого достаточно.&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://domchristie.github.io/turndown/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://domchristie.github.io/turndown/&lt;/a&gt; - уже из исходного текста. Может показаться удобным, для статей изначально оформленных в HTML (некоторые блогодвижки). Или открыть исходный код страницы, и скопировать нужный текст.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Оба конвертера JS-онли, могут работать непосредственно из браузеров, исходники прилагаются:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://github.com/domchristie/turndown&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/domchristie/turndown&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Digi-Key KiCAD Library</title>
      <link>https://htrd.su/blog/2020/01/02/digi-key-kicad-library/</link>
      <pubDate>Thu, 02 Jan 2020 22:46:38 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2020/01/02/digi-key-kicad-library/</guid>
      <description>&lt;p&gt;Digi-Key предоставляет символы и корпуса для компонентов, которыми они торгуют в формате понятному для KiCAD. И выкладывают их на GitHub. Кроме того,  есть символы и от некоторых партнёров (репозитории разделены).&lt;/p&gt;
&lt;p&gt;Помимо этого они же опубликовали учебный курс по работе с KiCAD на YouTube.&lt;/p&gt;
&lt;p&gt;Все подробности по ссылке ниже:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://www.digikey.com/en/resources/design-tools/kicad&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://www.digikey.com/en/resources/design-tools/kicad&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Cross Posting Test</title>
      <link>https://htrd.su/blog/2019/12/06/cross-posting-test/</link>
      <pubDate>Fri, 06 Dec 2019 00:23:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2019/12/06/cross-posting-test/</guid>
      <description>&lt;p&gt;Проверка кросс-постинга.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Генератор таблиц для Markdown</title>
      <link>https://htrd.su/blog/2019/11/13/table-generator-for-markdown/</link>
      <pubDate>Wed, 13 Nov 2019 23:25:52 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2019/11/13/table-generator-for-markdown/</guid>
      <description>&lt;p&gt;Пост - мемориз.&lt;/p&gt;
&lt;p&gt;Не всегда рисовать таблицы в Markdown разметке удобно, особенно добавлять/удалять колонки (со строками всё намного проще). Да и просто следить за соответствием вводимых данных конкретной колонке. И вот совершенно случайно набрёл на ресурс: 
&lt;a href=&#34;https://www.tablesgenerator.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Tables Generator&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;А конкретно: 
&lt;a href=&#34;https://www.tablesgenerator.com/markdown_tables#&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Markdown Tables Generator&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;В визуальной форме вводятся данные таблицы, потом нажимаем Generate и копируем полученный код в текст. Просто.&lt;/p&gt;
&lt;p&gt;Для редактирования можно скопировать таблицу и импортировать её через &amp;ldquo;File → Paste table data&amp;hellip;&amp;rdquo;, естественно при условии корректности данных. Кроме того, можно данные для таблицы импортировать из CSV (&amp;ldquo;File → Import CSV File&amp;hellip;&amp;rdquo;), как работает эта функция я не проверял, скорее всего могут возникнуть проблемы с пробелами или разделителями.&lt;/p&gt;
&lt;p&gt;Что ещё? Вообще там можно создавать таблицы не только в разметке Markdown, а в:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;LaTeX&lt;/li&gt;
&lt;li&gt;HTML&lt;/li&gt;
&lt;li&gt;Text&lt;/li&gt;
&lt;li&gt;MediaWiki (вот где абсолютный треш!)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Схожие ресурсы:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://tableconvert.com&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;TableConvert Online&lt;/a&gt; - в каком-то смысле, возможностей больше, но есть мелочи, например: нельзя задать выравнивание колонки.&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://www.typora.io/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Typora&lt;/a&gt; - редактор Markdown, есть встренный редактор таблиц.&lt;/li&gt;
&lt;li&gt;Расширения для VSCode:
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://marketplace.visualstudio.com/items?itemName=RomanPeshkov.vscode-text-tables&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://marketplace.visualstudio.com/items?itemName=RomanPeshkov.vscode-text-tables&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://marketplace.visualstudio.com/items?itemName=TomasHubelbauer.vscode-markdown-table-format&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://marketplace.visualstudio.com/items?itemName=TomasHubelbauer.vscode-markdown-table-format&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Расширения для Atom:
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://atom.io/packages/markdown-table-editor&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://atom.io/packages/markdown-table-editor&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>ГГЦ карты для QMapShack в виде TMS (Tile Map Service)</title>
      <link>https://htrd.su/blog/2019/11/13/ggc-maps-providers-for-qmapshack/</link>
      <pubDate>Wed, 13 Nov 2019 20:51:35 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2019/11/13/ggc-maps-providers-for-qmapshack/</guid>
      <description>&lt;p&gt;QMapShack умеет работать с сетевыми картами, которые представлены в виде тайлов с определённым соглашением о вызове. Что бы работать с подобными сервисами нужно создать файл-описание с расширением &lt;code&gt;.tms&lt;/code&gt;. Описание формата можно 
&lt;a href=&#34;http://gis-lab.info/docs/tms-specification-ru.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;почитать здесь&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;До недавнего времени я обходился в основном картами OpenCycleMap, TMS файл для которых идёт вместе с QMS. А для нужных районов уже искал/скачивал листы карт ГГЦ (в народе: &amp;ldquo;новый&amp;rdquo; генштаб) и делал им обвязку в виде &lt;code&gt;.vrt&lt;/code&gt; файла (такие карты содержать описание нужных преобразований, не затрагивая самих исходников карты, тем самым можно делать &amp;ldquo;обрезку карт&amp;rdquo; и они понимаются всем, что использует GDAL).&lt;/p&gt;
&lt;p&gt;Но это дело малость меня достало и захотелось быстро под рукой иметь и ГГЦ карты. Естественно, при условии наличия доступа к сети и доступности сервисов.&lt;/p&gt;
&lt;h2 id=&#34;с-чего-начать&#34;&gt;С чего начать?&lt;/h2&gt;
&lt;p&gt;Первым делом нужно найти сервисы, которые предоставляют доступ к картам ГГЦ по спецификации TMS. Поиск в интернете дал несколько ресурсов:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://melda.ru/locus/maps/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://melda.ru/locus/maps/&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;это первый найденный ресурс. Адаптируется просто но доступ крайне медленный. Подробно рассматривать не буду.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://anygis.ru&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://anygis.ru&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;TMS агрегатор, предоставляет как доступ к локальным картам, так и может вернуть ссылку на другой TMS ресурс. Собственно его и взял за основу, он же навёл на:&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://nakarte.me&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://nakarte.me&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;помимо доступа через TMS позволяет ещё и просто удобно смотреть карту, плюс экспорт выбранной области в JNX, и загрузку GPX с отображением на карте, а помимо этого:
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://about.nakarte.me/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://about.nakarte.me/&lt;/a&gt; - новости и попадается полезная информация&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://tiles.nakarte.me/files/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://tiles.nakarte.me/files/&lt;/a&gt; - тайлы для скачивания в формате 
&lt;a href=&#34;http://gis-lab.info/qa/mbtiles-spec.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;MBTiles&lt;/a&gt;. С ними я повоюю после.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;anygisru&#34;&gt;AnyGIS.ru&lt;/h2&gt;
&lt;p&gt;Сначала смотрим на API:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://anygis.ru/Web/Html/Api_ru&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://anygis.ru/Web/Html/Api_ru&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Обращаем внимание на обозначения X, Y, Z, что это:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;X ,Y - это номера тайлов в стандартной проекции Web Mercator. Z - уровень приближения для нее же. Иными словами, это - те же самые значения, что используются для получения карт OpenStreetMaps.
Так же, вместо номеров тайлов можно указать координаты в десятичном формате:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Host / MapName / Longitude / Latitude / Z
https://anygis.ru/api/v1/Wikimapia/56.062293/37.708244/10
&lt;/code&gt;&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;Потом смотрим на список карт:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://anygis.ru/api/v1/list&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://anygis.ru/api/v1/list&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Таблица нам даёт такие полезные данные, как:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Пример ссылки на тайл, там легко достаточно понять, где &lt;code&gt;X&lt;/code&gt;, где &lt;code&gt;Y&lt;/code&gt;, а где &lt;code&gt;Z&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Имя самой карты (часть URL).&lt;/li&gt;
&lt;li&gt;Название, ну чисто так, что бы было.&lt;/li&gt;
&lt;li&gt;И, конечно, Max zoom level - максимальный уровень приближения на котором отдаётся карта.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Карты которые нам интересны:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://anygis.ru/api/v1/Combo_Best_GGC/56.103490/37.700556/10&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;code&gt;Combo_Best_GGC&lt;/code&gt;&lt;/a&gt; - автоматически выбирает масштаб карты для выбранного уровня приближения. Имхо - не всегда удобно.&lt;/li&gt;
&lt;li&gt;И все &lt;code&gt;Locals_Ggc_XXXXX&lt;/code&gt;, кроме суффикса &lt;code&gt;_jpg&lt;/code&gt;, а вариант с суффиксом &lt;code&gt;_fast&lt;/code&gt; или без— на собственный выбор. Нам более интересен этот вариант, так как можем поиграться с уровнями приближения, если нужно.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Сведём в табличку URL и максимальный уровень приближения (минимальный всегда 0):&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;Scale&lt;/th&gt;
          &lt;th&gt;URL&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;Max zoom level&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;1:25000&lt;/td&gt;
          &lt;td&gt;
&lt;a href=&#34;https://anygis.ru/api/v1/Locals_Ggc_00250/X/Y/Z&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://anygis.ru/api/v1/Locals_Ggc_00250/X/Y/Z&lt;/a&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;15&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;1:50000&lt;/td&gt;
          &lt;td&gt;
&lt;a href=&#34;https://anygis.ru/api/v1/Locals_Ggc_00500/X/Y/Z&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://anygis.ru/api/v1/Locals_Ggc_00500/X/Y/Z&lt;/a&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;14&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;1:100000&lt;/td&gt;
          &lt;td&gt;
&lt;a href=&#34;https://anygis.ru/api/v1/Locals_Ggc_01000/X/Y/Z&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://anygis.ru/api/v1/Locals_Ggc_01000/X/Y/Z&lt;/a&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;13&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;1:200000&lt;/td&gt;
          &lt;td&gt;
&lt;a href=&#34;https://anygis.ru/api/v1/Locals_Ggc_02000/Y/X/Z&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://anygis.ru/api/v1/Locals_Ggc_02000/Y/X/Z&lt;/a&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;12&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Сам TMS имеет вид:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-xml&#34; data-lang=&#34;xml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;TMS&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;nt&#34;&gt;&amp;lt;Title&amp;gt;&lt;/span&gt;OSM D-Land TK 50&lt;span class=&#34;nt&#34;&gt;&amp;lt;/Title&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;nt&#34;&gt;&amp;lt;MinZoomLevel&amp;gt;&lt;/span&gt;3&lt;span class=&#34;nt&#34;&gt;&amp;lt;/MinZoomLevel&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;nt&#34;&gt;&amp;lt;MaxZoomLevel&amp;gt;&lt;/span&gt;18&lt;span class=&#34;nt&#34;&gt;&amp;lt;/MaxZoomLevel&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;nt&#34;&gt;&amp;lt;Layer&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;idx=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;0&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;Title&amp;gt;&lt;/span&gt;Open Topo Map&lt;span class=&#34;nt&#34;&gt;&amp;lt;/Title&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;ServerUrl&amp;gt;&lt;/span&gt;http://a.tile.opentopomap.org/%1/%2/%3.png&lt;span class=&#34;nt&#34;&gt;&amp;lt;/ServerUrl&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;MinZoomLevel&amp;gt;&lt;/span&gt;3&lt;span class=&#34;nt&#34;&gt;&amp;lt;/MinZoomLevel&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;MaxZoomLevel&amp;gt;&lt;/span&gt;11&lt;span class=&#34;nt&#34;&gt;&amp;lt;/MaxZoomLevel&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Layer&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;nt&#34;&gt;&amp;lt;Layer&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;idx=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;1&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;Title&amp;gt;&lt;/span&gt;Trails&lt;span class=&#34;nt&#34;&gt;&amp;lt;/Title&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;ServerUrl&amp;gt;&lt;/span&gt;http://tile.waymarkedtrails.org/hiking/%1/%2/%3.png&lt;span class=&#34;nt&#34;&gt;&amp;lt;/ServerUrl&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;MinZoomLevel&amp;gt;&lt;/span&gt;3&lt;span class=&#34;nt&#34;&gt;&amp;lt;/MinZoomLevel&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;MaxZoomLevel&amp;gt;&lt;/span&gt;9&lt;span class=&#34;nt&#34;&gt;&amp;lt;/MaxZoomLevel&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Layer&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;nt&#34;&gt;&amp;lt;RawHeader&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;nt&#34;&gt;&amp;lt;Value&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;User-Agent&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;Whatever&lt;span class=&#34;nt&#34;&gt;&amp;lt;/Value&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;nt&#34;&gt;&amp;lt;/RawHeader&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;nt&#34;&gt;&amp;lt;Copyright&amp;gt;&lt;/span&gt;Map data: (c) OpenStreetMap contributors, ODbL | Rendering: (c) OpenTopoMap, CC-BY-SA | Trails by tile.waymarkedtrails.org &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Copyright&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/TMS&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Здесь:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;%1&lt;/code&gt; → &lt;code&gt;Z&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;%2&lt;/code&gt; → &lt;code&gt;X&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;%3&lt;/code&gt; → &lt;code&gt;Y&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Слои (Layers) позволяют задать разные источники данных и уровни масштабирования, на которых они отображаются. Порядок имеет значение, точнее не совсем порядок, а значение &lt;code&gt;idx=XXX&lt;/code&gt;: чем оно выше тем более приоритетна карта и если она присутствует на данном уровне масштабирования, именно она будет отображена. Почему более мелкие масштабы приоритетны? А что бы не мельчить на малых значениях Zoom Level. Более того, в интерфейсе QMS вы сможете включать/выключать отдельные слои. Здесь оказывается полезен и перехлёст слоёв:&lt;/p&gt;
&lt;figure&gt;&lt;img src=&#34;https://htrd.su/img/post/2019/11/13/qms-ggc-tms.png&#34;
    alt=&#34;GGC map in QMapShack via TMS&#34;&gt;&lt;figcaption&gt;
      &lt;p&gt;GGC map in QMapShack via TMS&lt;/p&gt;
    &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Собираем всё вместе и получаем файл &lt;code&gt;GGC_AnyGIS.ru.tms&lt;/code&gt; с содержимым:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-xml&#34; data-lang=&#34;xml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;TMS&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;nt&#34;&gt;&amp;lt;Title&amp;gt;&lt;/span&gt;ГосГисЦентр: AnyGIS.ru/NaKarte.me, все масштабы (частичное покрытие)&lt;span class=&#34;nt&#34;&gt;&amp;lt;/Title&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;nt&#34;&gt;&amp;lt;MinZoomLevel&amp;gt;&lt;/span&gt;0&lt;span class=&#34;nt&#34;&gt;&amp;lt;/MinZoomLevel&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;nt&#34;&gt;&amp;lt;MaxZoomLevel&amp;gt;&lt;/span&gt;15&lt;span class=&#34;nt&#34;&gt;&amp;lt;/MaxZoomLevel&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;nt&#34;&gt;&amp;lt;Layer&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;idx=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;0&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;Title&amp;gt;&lt;/span&gt;ГосГисЦентр 250 м&lt;span class=&#34;nt&#34;&gt;&amp;lt;/Title&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;ServerUrl&amp;gt;&lt;/span&gt;https://anygis.ru/api/v1/Locals_Ggc_00250/%2/%3/%1&lt;span class=&#34;nt&#34;&gt;&amp;lt;/ServerUrl&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;MinZoomLevel&amp;gt;&lt;/span&gt;0&lt;span class=&#34;nt&#34;&gt;&amp;lt;/MinZoomLevel&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;MaxZoomLevel&amp;gt;&lt;/span&gt;15&lt;span class=&#34;nt&#34;&gt;&amp;lt;/MaxZoomLevel&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Layer&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;nt&#34;&gt;&amp;lt;Layer&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;idx=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;1&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;Title&amp;gt;&lt;/span&gt;ГосГисЦентр 500 м&lt;span class=&#34;nt&#34;&gt;&amp;lt;/Title&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;ServerUrl&amp;gt;&lt;/span&gt;https://anygis.ru/api/v1/Locals_Ggc_00500/%2/%3/%1&lt;span class=&#34;nt&#34;&gt;&amp;lt;/ServerUrl&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;MinZoomLevel&amp;gt;&lt;/span&gt;0&lt;span class=&#34;nt&#34;&gt;&amp;lt;/MinZoomLevel&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;MaxZoomLevel&amp;gt;&lt;/span&gt;14&lt;span class=&#34;nt&#34;&gt;&amp;lt;/MaxZoomLevel&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Layer&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;nt&#34;&gt;&amp;lt;Layer&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;idx=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;2&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;Title&amp;gt;&lt;/span&gt;ГосГисЦентр 1000 м&lt;span class=&#34;nt&#34;&gt;&amp;lt;/Title&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;ServerUrl&amp;gt;&lt;/span&gt;https://anygis.ru/api/v1/Locals_Ggc_01000/%2/%3/%1&lt;span class=&#34;nt&#34;&gt;&amp;lt;/ServerUrl&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;MinZoomLevel&amp;gt;&lt;/span&gt;0&lt;span class=&#34;nt&#34;&gt;&amp;lt;/MinZoomLevel&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;MaxZoomLevel&amp;gt;&lt;/span&gt;13&lt;span class=&#34;nt&#34;&gt;&amp;lt;/MaxZoomLevel&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Layer&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;nt&#34;&gt;&amp;lt;Layer&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;idx=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;3&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;Title&amp;gt;&lt;/span&gt;ГосГисЦентр 2000 м&lt;span class=&#34;nt&#34;&gt;&amp;lt;/Title&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;ServerUrl&amp;gt;&lt;/span&gt;https://anygis.ru/api/v1/Locals_Ggc_02000/%2/%3/%1&lt;span class=&#34;nt&#34;&gt;&amp;lt;/ServerUrl&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;MinZoomLevel&amp;gt;&lt;/span&gt;0&lt;span class=&#34;nt&#34;&gt;&amp;lt;/MinZoomLevel&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;MaxZoomLevel&amp;gt;&lt;/span&gt;12&lt;span class=&#34;nt&#34;&gt;&amp;lt;/MaxZoomLevel&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Layer&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;nt&#34;&gt;&amp;lt;Copyright&amp;gt;&lt;/span&gt;(c) AnyGIS, (c) NaKarte.me, (C) ГГЦ&lt;span class=&#34;nt&#34;&gt;&amp;lt;/Copyright&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/TMS&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Помещаем этот файл в любой удобной директории и прописываем путь к ней в настройках QMS (Файл → Настройка пути к картам). После чего карту в списке включаем и&amp;hellip; Profit!&lt;/p&gt;
&lt;h2 id=&#34;что-ещё&#34;&gt;Что ещё?&lt;/h2&gt;
&lt;p&gt;Если вдруг что-то недогружается: правой кнопкой мыши по карте и выбрать пункт &amp;ldquo;Перезагрузить карты&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Кроме того, в настройках карты можно поиграться с размером кеша и временем его жизни. Кеш лучше вынести на быстрый диск.&lt;/p&gt;
&lt;p&gt;Ещё, из замеченных минусов: много где нет километровок, поэтому переход от 500м к 2км не такой гладкий.&lt;/p&gt;
&lt;p&gt;Ну и меня не оставляет идея воспользоваться файлами NaKarte.me для создания локального TMS сервера.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>IOCTL: ENOIOCTLCMD vs ENOTTY</title>
      <link>https://htrd.su/blog/2019/07/25/ioctl-enoioctlcmd-vs-enotty/</link>
      <pubDate>Thu, 25 Jul 2019 08:40:12 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2019/07/25/ioctl-enoioctlcmd-vs-enotty/</guid>
      <description>&lt;p&gt;Что возвращать из обработчика IOCTL в user-space если данный IOCTL не поддерживается? В нашем драйвере активно использовался &lt;code&gt;ENOIOCTLCMD&lt;/code&gt;. Проблема в том, что он объявлен в &lt;code&gt;linux/errno.h&lt;/code&gt; в заголовке которого написано (вольный перевод):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;не использовать в пользовательском коде&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;В данном случае, под пользовательским кодом стоит понимать всё, что не собирается в дереве ядра. Кто-то может не согласить со мной в этом аспекте, но по соображениям переносимости - лучше этому следовать.&lt;/p&gt;
&lt;p&gt;Кроме того:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;этого кода нет в пользовательских &lt;code&gt;errno.h&lt;/code&gt;/&lt;code&gt;cerrno&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;для этого когда &lt;code&gt;strerror()&lt;/code&gt; вернёт что-то вроде: &lt;code&gt;Unknown error 515&lt;/code&gt; (номер может и отличаться);&lt;/li&gt;
&lt;li&gt;константы для этого кода ошибки нет на других платформах (Windows, MacOSX, FreeBSD).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Что использовать-то? А использовать не совсем очевидный: &lt;code&gt;ENOTTY&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Изначально, да и согласно комментариям в &lt;code&gt;include/uapi/asm-generic/errno-base.h&lt;/code&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;Not a typewriter&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;При этом утилита пользовательского пространства &lt;code&gt;errno&lt;/code&gt; из комплекта 
&lt;a href=&#34;http://joeyh.name/code/moreutils/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;code&gt;moreutils&lt;/code&gt;&lt;/a&gt; говорит:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;ENOTTY 25 Inappropriate ioctl for device&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Дополнительными аргументами:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;интернеты тоже подсказывают такую трактовку;&lt;/li&gt;
&lt;li&gt;в ядре Linux оно используется по такому же назначению.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;В чём же отличие? Нашёл отличное объяснение в 
&lt;a href=&#34;https://elixir.bootlin.com/linux/v4.7/source/block/ioctl.c#L390&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;code&gt;block/ioctl.c&lt;/code&gt;&lt;/a&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; * Is it an unrecognized ioctl? The correct returns are either
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; * ENOTTY (final) or ENOIOCTLCMD (&amp;#34;I don&amp;#39;t know this one, try a
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; * fallback&amp;#34;). ENOIOCTLCMD gets turned into ENOTTY by the ioctl
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; * code before returning.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Не буду переводить, просто поясню: &lt;code&gt;ENOIOCTLCMD&lt;/code&gt; используется во внутренних реализациях, когда есть предположение, что обработку можно выполнить в каком-то стандартном русле, выполнить т.н. fallback. В пользовательское пространство &lt;strong&gt;должен&lt;/strong&gt; вернуться &lt;code&gt;ENOTTY&lt;/code&gt;. Точка.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>QtC: ошибка при попытке сделать коммит в Git репозиторий</title>
      <link>https://htrd.su/blog/2019/07/12/qtc-git-commit-fail/</link>
      <pubDate>Fri, 12 Jul 2019 11:27:32 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2019/07/12/qtc-git-commit-fail/</guid>
      <description>&lt;p&gt;Буквально вчера столкнулся с таким вот поведением QtC:&lt;/p&gt;
&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
      &lt;iframe allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen&#34; loading=&#34;eager&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; src=&#34;https://www.youtube.com/embed/GpC_A2XaJjQ?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; title=&#34;YouTube video&#34;&gt;&lt;/iframe&gt;
    &lt;/div&gt;

&lt;p&gt;С учётом того, что я собираю QtC из исходников master-ветки репозитория, первая мысль была: что-то поломали, нужно по быстрому разобраться и откатить. Но всё оказалось чуточку интереснее. Кому интересно - добро пожаловать под кат.&lt;/p&gt;
&lt;p&gt;На видео я обратил внимание на диалог ошибки, в котором видно, что пытается открыться временный файл, но не получается определить редактор для него (это уже мне поверьте на слово) и что тип файла&amp;hellip; пустой!&lt;/p&gt;
&lt;p&gt;Первая мысль была: поломали базу MIME.&lt;/p&gt;
&lt;p&gt;Да только код, который работает с ней, не менялся уже года два.&lt;/p&gt;
&lt;p&gt;И вот тут, если бы были скачаны исходники стабильных версий QtC и собраны на системе, то проблема бы тоже проявилась.&lt;/p&gt;
&lt;p&gt;Поэтому следующей мыслью было: Manjaro, недавно обновлялось Qt, а судя по коду - путь к файлу MIME базы уже менялся. Вдруг что и сейчас произошло.&lt;/p&gt;
&lt;p&gt;Посмотрел исходники 
&lt;a href=&#34;https://github.com/qt/qtbase/tree/5.13/src/corelib/mimetypes&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;qt5-base&lt;/a&gt; и практически ничего не поменялось, кроме двух файлов, относительно недавно - 4 месяца назад (на момент написания блогозаметки). Хм&amp;hellip; Оказывается, в 5.13 они ввели опцию, которая позволяет отключить встроенную базу данных MIME типов:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dist/changes-5.13.0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; - QMimeDatabase:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   * Added configure option -no-mimetype-database that tells Qt not to
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     bundle its own copy of the XDG MIME database. If this option is
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     passed, QMimeDatabase will only work if there&amp;#39;s a system copy in
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     $XDG_DATA_DIRS/mime. This option is useful for Linux distributions
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     that ensure the data is always present.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Судя по тому, что имя и расположение самой базы не поменялось, а найти её не получается, значит маинтейнеры ArchLinux/Manjaro задействовали эту опцию. Действительно, их понять можно - база и так предоставляется пакетом &lt;code&gt;shared-mime-info&lt;/code&gt; и раполагается по пути &lt;code&gt;/usr/share/mime/packages/freedesktop.org.xml&lt;/code&gt;. Как минимум это правильно - иметь возможность обновить базу, без необходимости переставлять Qt, это очень хорошо для всяких домашних систем, особенно тех, которые обновляются не регулярно, типа Debian.&lt;/p&gt;
&lt;p&gt;Погодите, а собственно&amp;hellip; Какого чёрта! Выходит, что хотя код работы с MIME базой в QtC не менялся, косякопоры - они. Обновление системы и действия маинтейнеров ArchLinux просто вскрыли проблему.&lt;/p&gt;
&lt;p&gt;И правда, изучая код 
&lt;a href=&#34;https://github.com/qt-creator/qt-creator/blob/v4.10.0-beta2/src/libs/utils/mimetypes/mimeprovider.cpp&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;code&gt;mimeprovider.cpp&lt;/code&gt;&lt;/a&gt; поражаешься количеству закомментированного кода и в функции &lt;code&gt;MimeXMLProvider::ensureLoaded()&lt;/code&gt; быстро находишь суть проблемы: вариант для поиска подобающей базы, просто выключен и оставлен на потом.&lt;/p&gt;
&lt;p&gt;Маинтейнеры ArchLinux сделали патч для релизной версии QtC, поставляемой в дистрибутиве, с небольшими адаптациями, он ложится на master-бранч:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-diff&#34; data-lang=&#34;diff&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;diff --git a/src/libs/utils/mimetypes/mimeprovider.cpp b/src/libs/utils/mimetypes/mimeprovider.cpp
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;index 46d3eb71bd..ce94215d9f 100644
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gd&#34;&gt;--- a/src/libs/utils/mimetypes/mimeprovider.cpp
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gi&#34;&gt;+++ b/src/libs/utils/mimetypes/mimeprovider.cpp
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gu&#34;&gt;@@ -784,28 +784,25 @@ void MimeXMLProvider::ensureLoaded()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     if (!m_loaded /*|| shouldCheck()*/) {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         m_loaded = true;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-//        bool fdoXmlFound = false;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-        QStringList allFiles;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-//        const QStringList packageDirs = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QLatin1String(&amp;#34;mime/packages&amp;#34;), QStandardPaths::LocateDirectory);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-//        //qDebug() &amp;lt;&amp;lt; &amp;#34;packageDirs=&amp;#34; &amp;lt;&amp;lt; packageDirs;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-//        for (const QString &amp;amp;packageDir : packageDirs) {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-//            QDir dir(packageDir);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-//            const QStringList files = dir.entryList(QDir::Files | QDir::NoDotAndDotDot);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-//            //qDebug() &amp;lt;&amp;lt; static_cast&amp;lt;const void *&amp;gt;(this) &amp;lt;&amp;lt; packageDir &amp;lt;&amp;lt; files;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-//            if (!fdoXmlFound)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-//                fdoXmlFound = files.contains(QLatin1String(&amp;#34;freedesktop.org.xml&amp;#34;));
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-//            QStringList::const_iterator endIt(files.constEnd());
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-//            for (QStringList::const_iterator it(files.constBegin()); it != endIt; ++it) {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-//                allFiles.append(packageDir + QLatin1Char(&amp;#39;/&amp;#39;) + *it);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-//            }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-//        }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-//        if (!fdoXmlFound) {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-//            // We could instead install the file as part of installing Qt?
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-              const char freedesktopOrgXml[] = &amp;#34;:/qt-project.org/qmime/packages/freedesktop.org.xml&amp;#34;;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-            allFiles.prepend(QLatin1String(freedesktopOrgXml));
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-//        }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gi&#34;&gt;+        QStringList allFiles = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+                                                         QStringLiteral(&amp;#34;mime/packages/freedesktop.org.xml&amp;#34;),
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+                                                         QStandardPaths::LocateFile);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+        if (allFiles.isEmpty()) {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+            // System freedsktop.org.xml file not found, try to use the one in QtCore.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+            // This is private API and has changed in the past:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+            // - Qt 5.11 added &amp;#34;package&amp;#34; subdir in 7a5644d6481a3c1a7416772998ca4e60c977bfbd
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+            // - Qt 5.13 added an option to not bundle it at all
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+            const QString fdoXml5_11 = QStringLiteral(&amp;#34;:/qt-project.org/qmime/packages/freedesktop.org.xml&amp;#34;);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+            const QString fdoXmlPre5_11 = QStringLiteral(&amp;#34;:/qt-project.org/qmime/freedesktop.org.xml&amp;#34;);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+            if (QFile::exists(fdoXml5_11))
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+                allFiles &amp;lt;&amp;lt; fdoXml5_11;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+            else if (QFile::exists(fdoXmlPre5_11))
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+                allFiles &amp;lt;&amp;lt; fdoXmlPre5_11;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+            else
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+                qFatal(&amp;#34;Utils::MimeXMLProvider: could not find the system freedesktop.org.xml file &amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+                       &amp;#34;and QtCore does not have an accessible copy.&amp;#34;);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+        }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         m_nameMimeTypeMap.clear();
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         m_aliases.clear();
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Кстати, закомменченый код (как и корни проблемы) тянутся с версии 3.4.0-beta1 к коммита &lt;code&gt;4f5f5d75b45ec9db97377485af08d113ec8197f4&lt;/code&gt; от 2015-02-18:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    MimeDatabase: Never use installed mime data.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    It gets in the way, e.g. &amp;#34;No plugin can open project type &amp;#34;application/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    x-kicad-project&amp;#34;&amp;#34; when trying to open .pro files.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Change-Id: I5d8dcb52b65b1e617fe0c6dfcdc94e2cf8fc5f5d
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Reviewed-by: Tim Sander &amp;lt;tim@krieglstein.org&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Reviewed-by: Eike Ziller &amp;lt;eike.ziller@theqtcompany.com&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Новое ревью: 
&lt;a href=&#34;https://codereview.qt-project.org/c/qt-creator/qt-creator/&amp;#43;/267723&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://codereview.qt-project.org/c/qt-creator/qt-creator/+/267723&lt;/a&gt;, посмотрим, что предложат.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Embedded Artistry Blog</title>
      <link>https://htrd.su/blog/2019/07/09/embedded-artistry-blog/</link>
      <pubDate>Tue, 09 Jul 2019 14:37:43 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2019/07/09/embedded-artistry-blog/</guid>
      <description>&lt;p&gt;И снова из разряда рекомендаций для чтения и изучения, можно сказать, в продолжение 
&lt;a href=&#34;https://htrd.su/blog/2014/11/18/practical_guide_to_bare_metal_c/&#34;&gt;Practical Guide to Bare Metal C++&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Очень много полезной информации в части применимости современного C++ для embedded разработки и не только.&lt;/p&gt;
&lt;p&gt;К примеру, там очень интересный цикл статей &amp;ldquo;Exploring Startup Implementations&amp;rdquo;, который позволяет разобраться в C++ Runtime:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;a href=&#34;https://embeddedartistry.com/blog/2019/4/8/a-general-overview-of-what-happens-before-main&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;A General Overview of What Happens Before main()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://embeddedartistry.com/blog/2019/4/16/exploring-startup-implementations-newlib-arm&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Exploring Startup Implementations: Newlib (ARM)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://embeddedartistry.com/blog/2019/5/13/exploring-startup-implementations-os-x&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Exploring Startup Implementations: OS X&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Или серии:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://embeddedartistry.com/blog/category/Embedded&amp;#43;Cpp&amp;#43;Series&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Embedded Cpp Series&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://embeddedartistry.com/blog/category/Migrating&amp;#43;from&amp;#43;C&amp;#43;to&amp;#43;Cpp&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Migrating from C to Cpp&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;PS там же наткнулся на рекламу книжки &amp;ldquo;Real Time C++&amp;rdquo;,  
&lt;a href=&#34;https://htrd.su/books/&#34;&gt;добавил в свой список&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Удалённое развёртывание драйвера/модуля ядра в Qt Creator</title>
      <link>https://htrd.su/blog/2019/06/25/qtc-remote-driver-deploy/</link>
      <pubDate>Tue, 25 Jun 2019 16:06:42 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2019/06/25/qtc-remote-driver-deploy/</guid>
      <description>&lt;p&gt;Для Windows драйвер писать в QtC никто в здравом уме и трезвой памяти не будет. Поэтому речь дальше по процессу разработки драйвера для Linux. Я не буду касаться вопросов использования отладчика (KGDB), в основном посмотрим на вопросы запуска модуля ядра на удалённой системе.&lt;/p&gt;
&lt;p&gt;Итак, не открою секрета, что ядро Linux является хоть и модульным, но монолитом. И если вы где-то напишите утечку или страшными темпами начнёте затирать чужую память, то систему можно легко и непринуждённо привести в состояние фарша. Логично, что при таких радужных перспективах, проверять драйвер на своей рабочей машине, где находится среда разработки - не совсем правильное решение.&lt;/p&gt;
&lt;p&gt;Правильным решением же будет использовать какого-нибудь qemu, virtualbox или иже с ними. Но не всегда можно отладить модуль в виртуальном окружении, особенно при работе с реальным железом (можно так его запрограммировать, что убить много чего рядом). Поэтому, в таких случаях стоит использовать отладочную машинку, желательно без сохранения состояния (stateless - это тема отдельного разговора). Да, и в общем, подход с удалённым запуском и/или отладкой будет применим и к виртуальным окружениям.&lt;/p&gt;
&lt;p&gt;Попробуем разобраться, что нам нужно для решения задачи:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Ядро может отличаться от того, что у вас локально. Можно подтягивать собранное ядро целевой машины, и его заголовочники и собирать под него. Это будет работать, если архитектура идентична. Кросс-сборкой модуля стоит озадачиться, если ресурсов на целевой машине совсем кот наплакал. Наш вариант - собирать модуль на целевой машине.&lt;/li&gt;
&lt;li&gt;Раз мы собираем модуль на целевой машине, то нам нужно для начала залить туда исходные файлы (процесс настроки и установки необходимых пакетов для разработки и сборки модуля я опущу). Хорошо бы не заливать полностью исходники, а только изменённые файлы. Наш выбор &lt;code&gt;rsync&lt;/code&gt;+&lt;code&gt;ssh&lt;/code&gt;. В современных дистрибутивах особо ничего делать не нужно.&lt;/li&gt;
&lt;li&gt;После сборки нужно загрузить модуль&lt;/li&gt;
&lt;li&gt;И всё это интегрировать в IDE, дабы не делать кучу мелких движений.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Qt Creator позволяет подключаться к удалённым системам для развёртывания кода. Воспользуемся данной возможностью. Удалённая машина будет иметь имя &lt;code&gt;ts.local&lt;/code&gt; (используется &lt;code&gt;zeroconf&lt;/code&gt;/&lt;code&gt;avahi&lt;/code&gt; что бы сообщать свои имена в сеть).&lt;/p&gt;
&lt;p&gt;Хочу отметить, что реализация подключения в QtC поддерживает алисы из &lt;code&gt;~/.ssh/config&lt;/code&gt;, поэтому для различных хостов можно будет прописать дополнительные настройки через него.&lt;/p&gt;
&lt;p&gt;Начнём.&lt;/p&gt;
&lt;p&gt;Для начала идём в &amp;ldquo;Tools&amp;rdquo; -&amp;gt; &amp;ldquo;Options&amp;hellip;&amp;rdquo; -&amp;gt; &amp;ldquo;Devices&amp;rdquo;. Жмём &amp;ldquo;Add&amp;hellip;&amp;rdquo; и выбираем &amp;ldquo;Generic Linux Device&amp;rdquo;. После чего жмём &amp;ldquo;Start Wizard&amp;rdquo; и заполняем очевидные поля в диалоге:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Имя для пользователя&lt;/li&gt;
&lt;li&gt;Имя хоста или IP адрес&lt;/li&gt;
&lt;li&gt;Имя пользователя на удалённом хосте&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2019/06/25/screenshot_20190625_173307.png&#34; alt=&#34;Start Wizard&#34;&gt;
&lt;img src=&#34;https://htrd.su/img/post/2019/06/25/screenshot_20190625_173516.png&#34; alt=&#34;Basic Device settings&#34;&gt;&lt;/p&gt;
&lt;p&gt;На следующем шаге предлагается настроить аутентификацию по ключу. Здесь вам лучше знать, что делать, и можно сразу нажать &amp;ldquo;Next&amp;gt;&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2019/06/25/screenshot_20190625_173613.png&#34; alt=&#34;Key authentification&#34;&gt;&lt;/p&gt;
&lt;p&gt;После нажатия кнопки &amp;ldquo;Finish&amp;rdquo; будет произведена попытка подключения к хосту. Поэтому лучше, если он будет запущен.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2019/06/25/screenshot_20190625_173725.png&#34; alt=&#34;Host check&#34;&gt;&lt;/p&gt;
&lt;p&gt;Теперь нужно набору оснастки дать знать, что можно использовать удалённых хост. Выбираем раздел &amp;ldquo;Kits&amp;rdquo;. Для простоты можно взять набор, используемый по умолчанию (локальный запуск) и нажать &amp;ldquo;Clone&amp;rdquo; и переименовать его во что-то вроде &amp;ldquo;Default (remote)&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Следующим шагом в новой оснастке задаём &amp;ldquo;Device type:&amp;rdquo; в &amp;ldquo;Genric Linux Device&amp;rdquo; и выбираем устройство (&amp;ldquo;Device:&amp;rdquo;), созданное ранее (на скрине выбрано &amp;ldquo;Pearl2 Ubuntu&amp;rdquo;, но сути не меняет):&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2019/06/25/screenshot_20190626_111633.png&#34; alt=&#34;Remote Run Kit&#34;&gt;&lt;/p&gt;
&lt;p&gt;Тут отмечу, что если нужно переключаться между несколькими устройствами, то создавать оснастку для каждого их них дело муторное. Поэтому кликаем правой кнопкой мыши по выпадающему списку &amp;ldquo;Device:&amp;rdquo; и ставим галочку &amp;ldquo;Mark as mutable&amp;rdquo;:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2019/06/25/screenshot_20190626_111937.png&#34; alt=&#34;Mark As Mutable&#34;&gt;&lt;/p&gt;
&lt;p&gt;Это позволит в выпадающем списке выбора типа оснастки, конфигурации билда и деплоя/запуска указывать и устройство для подключения:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2019/06/25/screenshot_20190625_172932.png&#34; alt=&#34;Build/Run configuration&#34;&gt;&lt;/p&gt;
&lt;p&gt;Всё, теперь открываем проект, выбираем созданную нами оснастку. После чего в настройках проекта (точнее в настройках запуска) станут доступны настройки Deployment:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2019/06/25/screenshot_20190626_112509.png&#34; alt=&#34;Run configuration&#34;&gt;&lt;/p&gt;
&lt;p&gt;Доступны различные предопределённые шаги, но мне проще было использовать один &amp;ldquo;Custom Process Step&amp;rdquo; и вызывать скрипт с параметрами, формируемыми при помощи подстановочных переменных:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Command: &lt;code&gt;%{sourceDir}/deploy-driver-remote.sh&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Arguments: &lt;code&gt;%{CurrentDevice:HostAddress} %{CurrentDevice:SshPort} %{CurrentDevice:UserName} %{CurrentDevice:PrivateKeyFile} %-CurrentRun:Name}&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Working directory: &lt;code&gt;%{sourceDir}&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Смысл переменных, думаю, понятен. Отмечу, что &lt;code&gt;%{CurrentRun:Name}&lt;/code&gt; это ровно то имя, которое показывается ниже в выпадающем списке &amp;ldquo;Run&amp;rdquo;/&amp;ldquo;Run configuration:&amp;rdquo;. Оно формируется при первом запуске проекта автоматически и может не соответствовать вашим критериям прекрасного. Тогда переименуйте.&lt;/p&gt;
&lt;p&gt;Для чего я вообще использую имя конфирурации? У меня в одном проекте два драйвера: для PCI и для USB устройств. Выбирая конфигурацию я влияю на шаги по загрузке нужного драйвера на удалённой стороне.&lt;/p&gt;
&lt;p&gt;Ещё одним нюансом является то, что я указал &amp;ldquo;Alternate executable on device:&amp;rdquo; в &amp;ldquo;/bin/true&amp;rdquo; и параметр &amp;ldquo;Use this command instead&amp;rdquo;. Я просто физически не могу &amp;ldquo;запустить&amp;rdquo; модуль ядра, как обычный бинарник, а вся процедура по его загрузке в область памяти ядра выполняется в скрипте, поэтому я выбрал для запуска программу гарантированно присутствующую на удалённой системе и всегда возвращающую статус успешного выполнения (в противовес &lt;code&gt;/bin/false&lt;/code&gt;). Вы можете вписать сюда что-то своё.&lt;/p&gt;
&lt;p&gt;Ну а теперь самое вкусное, скрипт деплоя. Можно вручную прописывать шаги загрузки в IDE, но это муторно. Плюс я использую GIT сборки QtC и шаги загрузки запросто могут слететь. Поэтому я объединил их в скрипт, который может лежать прямо в репозитории и иметь идентичные настройки в IDE на разных машинах (вся кастомизация может быть выполнена через настроки конкретных Remote Devices, как описано выше).&lt;/p&gt;
&lt;p&gt;Мой скрипт выглядит так (комментарии инлайном, что бы избежать дублирования):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#!/usr/bin/env bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# прервёт выполнение скрипта, как только очередная команда завершится недачно&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# позволяет избежать лишних проверок на успешность выполнения предыдущих операций&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; -e
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;REMOTE_HOST&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;REMOTE_PORT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;REMOTE_USER&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;REMOTE_KEY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# %{CurrentRun:Name}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;TARGET&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$5&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# assume, that work dir is top level source dir&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;LOCAL_SOURCE_DIR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;pwd&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# просто выведем то, как мы вызваны. Чисто для отладки, если что-то работает не так&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$@&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Detect driver: как я писал выше, у меня два драйвера, основываясь на имени&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Run Configuration я выбираю то, с каким драйвером имею дело. &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Разные вариации из-за смены того, что подставляется вместо %{CurrentRun:Name} в QtC.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;drv&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;jobs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$TARGET&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; in
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    *_usb&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;*_usb-build&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;drv&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;usb
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;jobs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    *_pci&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;*_pci-build&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;drv&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;pci
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;jobs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    *&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Unknown target: &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;TARGET&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;esac&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Небольшой хелпер для запуска удалённой команды через SSH. С пробросом X11 (Trusted)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh_cmd&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ssh -YC -i &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$REMOTE_KEY&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; -p &lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;REMOTE_PORT&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;REMOTE_USER&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;@&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;REMOTE_HOST&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$@&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;MAKE_OPTS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;DRIVER_DEBUG=1&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Ещё больше информативности&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; -x
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Ну а дальше логические шаги&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Step 1: подготовка директорий на удалённой стороны для загрузки кода&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh_cmd &lt;span class=&#34;s2&#34;&gt;&amp;#34;mkdir -p build/driver/remote-work/{vga2usb,helpers}&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Step 2: синхронизируем локальное дерево исходников и удалённое.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#         Именно синхронизируем: удаляем удалённое, создаём созданное&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#         и копируем только изменённое. Про файл rsync_excludes.txt я расскажу чуть ниже.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rsync -azv --delete --exclude-from&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LOCAL_SOURCE_DIR&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/rsync_excludes.txt&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LOCAL_SOURCE_DIR&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/&amp;#34;&lt;/span&gt; -e &lt;span class=&#34;s2&#34;&gt;&amp;#34;ssh -p &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;REMOTE_PORT&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; -i \&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;REMOTE_KEY&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;\&amp;#34;&amp;#34;&lt;/span&gt; &lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;REMOTE_USER&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;@&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;REMOTE_HOST&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;:build/driver/remote-work/vga2usb/ 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Step 3: дерево исходного кода состоит из двух частей, поэтому повторяем для второй части тоже&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rsync -azv --delete --exclude-from&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LOCAL_SOURCE_DIR&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/rsync_excludes.txt&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LOCAL_SOURCE_DIR&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/../helpers/&amp;#34;&lt;/span&gt; -e &lt;span class=&#34;s2&#34;&gt;&amp;#34;ssh -p &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;REMOTE_PORT&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; -i \&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;REMOTE_KEY&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;\&amp;#34;&amp;#34;&lt;/span&gt; &lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;REMOTE_USER&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;@&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;REMOTE_HOST&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;:build/driver/remote-work/helpers/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Step 4: очистим дерево. Ваша билд система может позволить вам&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#         не делать этого шага и немного сэкономить времени&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh_cmd &lt;span class=&#34;s2&#34;&gt;&amp;#34;make -C build/driver/remote-work/vga2usb/linux/driver/&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;drv&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; -j8 clean&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Step 5: стоим драйвер удалённо&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh_cmd &lt;span class=&#34;s2&#34;&gt;&amp;#34;make -C build/driver/remote-work/vga2usb/linux/driver/&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;drv&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; -j&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$jobs&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$MAKE_OPTS&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Step 6: так как у нас используется билд инфраструктура ядра Linux, этим шагом &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#         мы установим модуль в /lib/modules/KERNEL_VERSION/..., можно обойтись&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#         и использовать insmod/rmmod и ручное разруливание зависимостей модулей.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#         Обратите внимание: sudo настроен для пользователя для запуска без пароля!&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#         Так можно сделать только на конкретные программы и/или скрипты, но если&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#         система state-less, то это, IMHO, излишне.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh_cmd &lt;span class=&#34;s2&#34;&gt;&amp;#34;sudo make -C build/driver/remote-work/vga2usb/linux/driver/&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;drv&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$MAKE_OPTS&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; install&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Step 6.1: sign, точно работает и реализовано на Ubuntu и производных. Имеет смысл&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#           если включен Secure Boot, иначе модуль ядра не загрузится. По большому&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#           счёту на тестовых системах не нужно. У меня просто как часть проверки.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh_cmd &lt;span class=&#34;s2&#34;&gt;&amp;#34;which kmodsign &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 &amp;amp;&amp;amp; \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;         test -f /var/lib/shim-signed/mok/MOK.priv &amp;amp;&amp;amp; \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;         test -f /var/lib/shim-signed/mok/MOK.der &amp;amp;&amp;amp; \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;         sudo kmodsign sha512 \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;            /var/lib/shim-signed/mok/MOK.priv \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;            /var/lib/shim-signed/mok/MOK.der \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;            /lib/modules/\$(uname -r)/extra/vga2&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;drv&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;.ko || true&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Step 7: ну однострочник для выгрузки старого модуля и загрузки нового. У нас&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#         реализовано устройство ALSA и на современных дистрибутивах оно может&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#         быть захвачено pulseaudio, в таком случае выгрузить модуль не получится,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#         поэтому нужно прибить пульсу (sudo - она может быть запущена от другого пользователя)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh_cmd &lt;span class=&#34;s2&#34;&gt;&amp;#34;sudo depmod -aA; sudo killall -9 pulseaudio; sudo modprobe -r vga2&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;drv&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; &amp;amp;&amp;amp; sudo modprobe vga2&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;drv&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; &amp;amp;&amp;amp; echo OK || echo FAIL&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Если какой-то шаг завершится неудачей - скрипт прервёт работу. Вывод сообщений будет в панели &amp;ldquo;Compile Output&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Для &amp;ldquo;запуска&amp;rdquo; драйвера достаточно нажать &lt;code&gt;Ctrl+R&lt;/code&gt; в QtC, если есть изменения, то код сначала отстроится локально, далее, если нет ошибок, запустится процедура деплоя, в нашем случае - вызовется скрипт выше с нужным набором параметров, синхронизируются файлы на удалённой машине, отстроится и загрузится новый драйвер. Как проверять работоспособность - уже индивидуальный подход. Возможно, отстраивать какие-то утилиты в одном из шагов, а вместо &lt;code&gt;/bin/true&lt;/code&gt; вызывать какой-то скрипт, что вызовет серию тестов. Я же просто смотрю &lt;code&gt;dmesg -w&lt;/code&gt; (с &lt;code&gt;sudo&lt;/code&gt; на последних дистрибутивах/ядрах) и выполняю нужные шаги.&lt;/p&gt;
&lt;p&gt;На этом всё. Есть некая избыточность, но, в целом, задачу решает. Возможно, стоит рассмотреть возможность интеграции с KGDB и отладкой удалённого драйвера. Но это, когда возникнет острая необходимость.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Бесплатная раздача книг</title>
      <link>https://htrd.su/blog/2019/06/24/free-books-distribution/</link>
      <pubDate>Mon, 24 Jun 2019 10:07:28 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2019/06/24/free-books-distribution/</guid>
      <description>&lt;p&gt;Вот книжки, &lt;del&gt;&amp;ldquo;Современные операционные системы&amp;rdquo; уже ушла&lt;/del&gt; все книги ушли:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2019/06/24/free-books-distribution/free_books.jpg&#34; alt=&#34;Free Books&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/blog/2019/06/24/free-books-distribution/free_books.jpg&#34; alt=&#34;Free Books&#34;&gt;&lt;/p&gt;
&lt;p&gt;Самовывоз.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>В мемориз: рисуем пятиконечную звезду при помощи циркуля</title>
      <link>https://htrd.su/blog/2019/06/20/memorize-draw-five-angle-star-with-compass/</link>
      <pubDate>Thu, 20 Jun 2019 17:38:35 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2019/06/20/memorize-draw-five-angle-star-with-compass/</guid>
      <description>&lt;p&gt;По ссылке ниже вполне доходчивая инструкция:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://taipoint.org/guillotine/how-to-draw-perfect-five-point-star-on-paper.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Как нарисовать правильную пятиконечную звезду на бумаге&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>CMake: Object Library и target_link_libraries()</title>
      <link>https://htrd.su/blog/2019/06/11/cmake_object_library_and_target_link_libraries/</link>
      <pubDate>Tue, 11 Jun 2019 18:01:34 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2019/06/11/cmake_object_library_and_target_link_libraries/</guid>
      <description>&lt;p&gt;В современном мире рекомендуется не использовать &lt;code&gt;include_directories()&lt;/code&gt; и &lt;code&gt;target_include_directories()&lt;/code&gt;, а экспортировать таргет в стиле пространства имён: &lt;code&gt;Target::Target&lt;/code&gt;, например так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cmake&#34; data-lang=&#34;cmake&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;add_library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;avcpp&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;avcpp.cpp&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;add_library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;AvCpp::AvCpp&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;ALIAS&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;avcpp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;и задавать интерфейсные опции для таргета, например так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cmake&#34; data-lang=&#34;cmake&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;target_include_directories&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;avcpp&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s&#34;&gt;INTERFACE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;$&amp;lt;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;$&amp;lt;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;После чего задавать параметры как линковки, так и компиляции одной командой:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cmake&#34; data-lang=&#34;cmake&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;add_executable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;foo&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;main.cpp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;target_link_libraries&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;foo&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;PUBLIC&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;AvCpp::AvCpp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Так вот, если вы используете CMake версии до 3.12, то такой подход не сработает для 
&lt;a href=&#34;https://gitlab.kitware.com/cmake/community/wikis/doc/tutorials/Object-Library&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;OBJECT_LIBRARY&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Иными словами, если вы решите пробросить параметры компиляции (не линковки) таким образом:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cmake&#34; data-lang=&#34;cmake&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;add_library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;foo_common&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;OBJECT&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;foo.cpp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;target_link_libraries&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;foo_common&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;PUBLIC&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;AvCpp::AvCpp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;То получите сообщение об ошибке, примерно такого вида:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;CMake Error at tests/CMakeLists.txt:10 (target_link_libraries):
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  Object library target &amp;#34;foo_common&amp;#34; may not link to anything.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;В общем, читаем:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://gitlab.kitware.com/cmake/cmake/issues/18010&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://gitlab.kitware.com/cmake/cmake/issues/18010&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Решения:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Обновляем CMake, к сожалению, на travis.org для OSX пока это сделать трудно, там через brew ставится, на момент написания статьи, 3.11.4;&lt;/li&gt;
&lt;li&gt;Используем 
&lt;a href=&#34;https://cmake.org/cmake/help/latest/command/target_include_directories.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;code&gt;target_include_directories()&lt;/code&gt;&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;Используем как и раньше &lt;code&gt;include_directories()&lt;/code&gt;, но лучше не надо;&lt;/li&gt;
&lt;li&gt;Не используем Object Library, что не всегда удобно.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Вопрос, а как можно из командной строки, установить DMG или tar.gz пакет CMake с cmake.org? Второй это просто тарбол, с определённой структурой, можно ли просто распаковать и установить PATH, указывающий на &lt;code&gt;bin&lt;/code&gt; директорию внутри?&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>C&#43;&#43;-ниасилятор</title>
      <link>https://htrd.su/blog/2019/04/30/cxx-newbie/</link>
      <pubDate>Tue, 30 Apr 2019 09:28:10 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2019/04/30/cxx-newbie/</guid>
      <description>&lt;p&gt;Марк скинул ссылочку:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://blog.jetbrains.com/rscpp/cpp-quiz-cpp-russia-2019/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;C++ Quiz from C++ Russia 2019&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;В голове уложилось пункта 3 от силы. Особенно доставляют пункты, где разные компиляторы ведут себя по-разному. Судя по всему у разработчиков тоже не всё укладывается в голове.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Строим GDB для MicroBlaze</title>
      <link>https://htrd.su/blog/2019/04/15/build-microblaze-gdb/</link>
      <pubDate>Mon, 15 Apr 2019 08:38:12 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2019/04/15/build-microblaze-gdb/</guid>
      <description>&lt;p&gt;Заметка - часть полёта мысли по написанию кода для MicroBlaze в среде Qt Creator и, возможно, Clion.&lt;/p&gt;
&lt;p&gt;Сразу, чем не подошёл родной GDB - в нём нет поддержки Python. Для QtC это критично, поэтому нужно пересобрать, но с поддержкой оного.&lt;/p&gt;
&lt;p&gt;Рецепт сборки ниже. Без подробностей, но там всё и так ясно.&lt;/p&gt;
&lt;p&gt;Для начала необходимые зависимости. Их не нужно качать отдельно - всё находится в пакете исходников &lt;code&gt;binutils&lt;/code&gt;. Порядок отстройки  важен. Установку (&lt;code&gt;make install&lt;/code&gt;) делать &lt;strong&gt;не нужно&lt;/strong&gt;.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# bfd:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./configure --enable-targets&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;all &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; make -j8
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# opcodes:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./configure --enable-targets&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;all &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; make -j8
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# libiberty:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./configure &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; make -j8
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# note: gdb-11.2+, иначе sim не соберётся&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# gnulib&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod +x ./configure &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; ./configure &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; make -j8
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# sim:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./configure --target&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;microblaze-xilinx-elf &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; make -j8
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# libdecnumber:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./configure &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; make -j8
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Там где указан &lt;code&gt;--target&lt;/code&gt; - это важно. Там где указано &lt;code&gt;--enable-targets=all&lt;/code&gt;, вместо &lt;code&gt;all&lt;/code&gt; можно указать нужный для MicroBlaze. Но я не вдавался в подробности, тем более, что собирается достаточно быстро. Если не указывать ничего - потом будут проблемы на линковке. А если ещё намешать, сначала собрать opcodes, потом bfd с разным набором целей, то ещё и в рантайме будет эпичный креш ;-)&lt;/p&gt;
&lt;p&gt;Ну и собираем сам GDB:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./configure --host&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;x86_64-pc-linux-gnu --target&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;microblaze-xilinx-elf --prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;HOME&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;/bin/mb-gdb-python --disable-gdbserver --with-python&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/bin/python3 --with-system-readline --with-system-zlib
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make -j8
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make install
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Устанавливаю в домашний каталог пользователя. Если нужно в системный - лучше опакетить или ставить в &lt;code&gt;/opt/&lt;/code&gt;. &lt;del&gt;Python можно, теоретически, указать и третий. Потом проверю.&lt;/del&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;UPD&lt;/strong&gt;: На момент &amp;ldquo;Февраль 2022&amp;rdquo; нужно указывать Python 3.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;При сборке у себя, проверьте, что использовать в качестве аргумента &lt;code&gt;--host=&lt;/code&gt;. Для этого достаточно посмотреть, какой префикс у вашего системного компилятора:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ gcc -dumpmachine  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;x86_64-pc-linux-gnu
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;значит хост - &lt;code&gt;x86_64-pc-linux-gnu&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Кстати, 
&lt;a href=&#34;https://htrd.su/blog/2019/04/11/mitm-like-gdb-rtos-support/&#34;&gt;&lt;code&gt;gdbproxy&lt;/code&gt;&lt;/a&gt; оказывается не совсем дружит с новыми GDB. Судя по всему причина схожая с 
&lt;a href=&#34;https://htrd.su/blog/2017/12/08/qtc_snova_baremetal_i_novye_gdb/&#34;&gt;этим&lt;/a&gt;. Пока вылечил при помощи небольшого хака. Кроме того, эмпирически выяснил, что, похоже, для &lt;code&gt;thread-id&lt;/code&gt; используется &lt;code&gt;int32_t&lt;/code&gt;, т.е. знаковый 32-битный тип. Просто сейчас базовые адреса оказались за пределами первой половины 32 битного пространства и, внезапно, появились знаки минуса в ID потоков =-)&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>MitM-like поддержка RTOS в GDB</title>
      <link>https://htrd.su/blog/2019/04/11/mitm-like-gdb-rtos-support/</link>
      <pubDate>Thu, 11 Apr 2019 09:32:57 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2019/04/11/mitm-like-gdb-rtos-support/</guid>
      <description>&lt;p&gt;Какое-то время назад я писал код прошивки для грабберов 
&lt;a href=&#34;https://epiphan.com&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Epiphan&lt;/a&gt; линейки AV.io:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://www.epiphan.com/products/avio-hd/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;AV.io HD&lt;/a&gt; - наш пилот, на котором многое было отлажено и сформирована архитектура&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://www.epiphan.com/products/avio-sdi/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;AV.io SDI&lt;/a&gt; - закрепляем позиции&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://www.epiphan.com/products/avio-4k/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;AV.io 4K&lt;/a&gt; - уже новое железо и новые подходы, теперь запускаемся практически мгновенно&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://www.epiphan.com/products/kvm2usb-3-0/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;KVM2USB 3.0&lt;/a&gt; - глубокое переосмысление 
&lt;a href=&#34;https://www.epiphan.com/products/avio-hd&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;AV.io HD&lt;/a&gt;. По сути, благодаря заложенному потенциалу для модернизации в базовую модель, практически без модификации железа, чисто софтом смогли сделать новый продукт.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Там был задействован 
&lt;a href=&#34;https://www.cypress.com/products/ez-usb-fx3-superspeed-usb-30-peripheral-controller&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Cypress FX3&lt;/a&gt;, а 
&lt;a href=&#34;https://www.cypress.com/documentation/software-and-drivers/ez-usb-fx3-software-development-kit&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;SDK&lt;/a&gt; был построен поверх ThreadX. В качестве JTAG отладчика можно использовать Olimex ARM-USB-OCD-H в связке с 
&lt;a href=&#34;http://openocd.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;OpenOCD&lt;/a&gt;. К сожалению, OpenOCD ничего не знает про треды в RTOS и, хотя, базовая поддержка присутствует в коде, конкретно для нашего процессора использовалась схема стекинга регистров, которая отличалась от того, что было уже реализовано. Пришлось 
&lt;a href=&#34;https://htrd.su/blog/2016/12/21/openocd_threadx_i_vash_processor/&#34;&gt;разбираться и дорабатывать&lt;/a&gt;. Профиты от использования JTAG для разработки трудно переоценить, как минимум в случае 
&lt;a href=&#34;https://htrd.su/blog/2016/01/03/openocd_gdb_i_silno_udaljonnaja_otladka/&#34;&gt;распределённой работы&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Итак, время идёт. Теперь очередь за FPGA от Xilinx и его софтовым процессором MicroBlaze, где можно запустить портированый FreeRTOS версии 10.x. Но проблема ровно такая же: поддержки тредов в отладчике нет!&lt;/p&gt;
&lt;h2 id=&#34;лирика-по-части-устройства-xsdkvitis-и-средств-отладки&#34;&gt;Лирика по части устройства XSDK/Vitis и средств отладки&lt;/h2&gt;
&lt;p&gt;Xilinx предоставляет среду тесно интегрированных компонент для разработки софта на процессорах с ядром ARM Cortex-A53 (ARM64), ARM Cortex-R5 (ARM32) и MicroBlaze (MicroBlaze64). MicroBlaze стоит особняком - это софтовый процессор, который реализуется внутри FPGA. И количество ядер ограничено только числом свободного места в чипе.&lt;/p&gt;
&lt;p&gt;Основная среда для разработки (тут и далее под разработкой понимается написание кода для CPU, не для самого FPGA, для которого среда - Vivado) - Vitis, до версии 2019 известная как XSDK, построенная поверх Eclipse. В одно касание можно грузит автоматически код для FPGA и для процессора. Из огромных плюсов то, что загрузка кода по JTAG работает очень быстро (привет OpenOCD!) ровно, как и дальнейшая загрузка процессорного кода. Вторым огромным плюсом являются заложенные по умолчанию возможности удалённой отладки: запуск, подключение, загрузка.&lt;/p&gt;
&lt;p&gt;Есть и минусы тесной интеграции, типа навязывания использования Eclipse, хотя и есть возможности создавать, собирать и загружать проекты используя интерфейс командной строки - XSTC. Но пока не будем про это. Оставим на будущее.&lt;/p&gt;
&lt;p&gt;Продолжим немного лирики и рассмотрим схему взаимодействия отладчика с железом.&lt;/p&gt;
&lt;p&gt;Непосредственно с кабелем JTAG работает закрытая компонента &lt;code&gt;hw_server&lt;/code&gt;. Эта компонента слушает несколько TCP портов, основной - 3121, и серия портов, которая начинается, по умолчанию, с 3000 - GDB серверы для процессоров (
&lt;a href=&#34;https://docs.xilinx.com/r/en-US/ug908-vivado-programming-debugging/Standard-hw_server-Options&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;подробнее&lt;/a&gt;):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;N+0&lt;/code&gt; (3000) - ARM aka ARM Cortex-R5&lt;/li&gt;
&lt;li&gt;&lt;code&gt;N+1&lt;/code&gt; (3001) - ARM64 aka ARM Cortex-A53&lt;/li&gt;
&lt;li&gt;&lt;code&gt;N+2&lt;/code&gt; (3002) - MicroBlaze (наш случай)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;N+3&lt;/code&gt; (3003) - MicroBlaze64&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Возможно есть ещё какие-то, но нам пока достаточно этого набора.&lt;/p&gt;
&lt;p&gt;Итак, идём дальше. Сам отладчик, который подключается к серверу. Их два, рекомендованный (и закрытый!) - System Debugger и GDB. В случае MicroBlaze исполняемый бинарник для GDB - &lt;code&gt;mb-gdb&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;System Debugger мы по причинам понятным дальше рассматривать не будем. И, если Xilinx выкинет поддержку GDB сервера - всё станет вновь печально.&lt;/p&gt;
&lt;h2 id=&#34;начинаем-думать-как-мы-можем-себе-помочь&#34;&gt;Начинаем думать, как мы можем себе помочь&lt;/h2&gt;
&lt;p&gt;Итак, изучая реализацию поддержки RTOS в OpenOCD, я выделил основные моменты, которые нужны, что бы эту поддержку осуществить:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;RTOS хранит информацию о запущенных потоках в TCB (Thread Control Block), обычно это глобальный связанный список и пачка массивов, которыми оперирует планировщик задач. Структура этих блоков так или иначе ясна. Если нет (закрытый код) - добро пожаловать в прекрасный мир Reverse Engineering! Главное: нам нужно знать набор символов, точнее их адресов, что бы побегать по памяти и вычитать нужные данные.&lt;/li&gt;
&lt;li&gt;RTOS при переключении потоков должна сохранить значения регистров которые описывают состояние текущего выполнения - контекст потока. Обычно, сохраняется в вершину стека того потока, у которого забирается исполнение. Набор регистров зависит от архитектуры, их количество в контексте, размещение и общий размер контекста - всё это называется стекинг. Т.е. нужно понять как читать и восстанавливать контекст потока. Для чего - ниже.&lt;/li&gt;
&lt;li&gt;Из пункта 1 - парсить TCB и получать актуальную картину запущенных потоков (или задач - терминология может отличаться между RTOS).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Теоретически, GDB сервер должен делать все вышеописанный разбор и просто отвечать на стандартные запросы GDB клиента, что бы тот мог просто показать список потоков по команде &lt;code&gt;info threads&lt;/code&gt; и показать актуальное значение регистров при помощи команды &lt;code&gt;info registers&lt;/code&gt; после выполнения команды &lt;code&gt;thread N&lt;/code&gt; и показать правильный стек вызовов по команде &lt;code&gt;bt&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Практически, RTOS много, они меняются, стекинг для одной RTOS может отличаться между процессорами (а может и отличаться для одного процессора, если разработчик SDK решит, что так будет эффективнее для его платформы и его условий использования). Так что разработчики серверов мало обращают внимание на такие нюансы и вынуждают пользователей пользоваться тем, что есть.&lt;/p&gt;
&lt;p&gt;Но если подумать: вся информация у нас есть. Мы можем получить адреса нужных символов прямо в отладчике. При помощи команды &lt;code&gt;p&lt;/code&gt; можем прочитать участки памяти, добраться до стека каждого потока, вычитать значения регистров. Всё это можно даже оформить в качестве скриптов, как это было сделано мной изначально для ThreadX на Cypress FX3. К сожалению, код потерял этот. Если вдруг найду - статью дополню.&lt;/p&gt;
&lt;p&gt;И тут приходит мысль&amp;hellip; А если в разрыв между GDB-client и GDB-server вставить посредника, осуществить, так сказать, MitM атаку? То есть, по сути, перехватить запросы, которые относятся к получению состояния потока, получить недостающую информацию от сервера и сформировать ответ клиенту?&lt;/p&gt;
&lt;p&gt;Первое, что пришло в голову после этого: поискать готовые решения. Их подходящего находится gdbproxy бородатых годов, который умеет работать с сервером только через последовательный порт.&lt;/p&gt;
&lt;p&gt;Второе - начать писать самому. Заодно снова взять в руки свои любимые C++ (на котором, к великой моей печали и грусти, по работе писать практически не приходится), Asio, потыкать палочкой C++17 и, возможно, C++2a - эти задачи, к слову, были выполнены, если не на 100%, то на 90% точно!&lt;/p&gt;
&lt;h2 id=&#34;заканчиваем-думать-переходим-к-коду&#34;&gt;Заканчиваем думать, переходим к коду&lt;/h2&gt;
&lt;p&gt;Первой задачей стояла реализовать просто прокси, который будет всё принимать от клиента и пересылать на сервер и так же - в обратном направлении. Снова погрузиться в дебри асинхронщины. Хотел тут попробовать использовать Asio в реакторной схемы, но руки не дошли. А надо бы. Задача была более или менее реализована.&lt;/p&gt;
&lt;p&gt;И тут встал вопрос: получить список потоков. Для этого нужно распарсить TCB, прочитав данные из памяти. И&amp;hellip; оказалось что просто взять и спросить GDB-сервер об адресе символа и прочитать данные нельзя. Просто нет таких запросов. Про символы знает&amp;hellip; только клиент! А клиенту мы запрос сформировать не можем - только он спрашивать может. Но, оказалось, что клиент может слать (а если этого не делает - дело труба) запрос серверу вида: &lt;code&gt;qSymbol::&lt;/code&gt;, который означает: а ты не хочешь ли получить информацию о каких-то символах? Информация - это их адрес. Если ответ пустой - нет, не хочу. Если ответ вида &lt;code&gt;qSymbol:NAME&lt;/code&gt;, то в ответ придёт &lt;code&gt;qSymbol:ADDR:NAME&lt;/code&gt; если символ известен клиенту или &lt;code&gt;qSymbol::NAME&lt;/code&gt; если нет, пустое значение понимается как &lt;code&gt;nullptr&lt;/code&gt;. На каждый вопрос-ответ (в терминологии протокола это запрос от клиента к серверу, а по сути - ответ на запрос сервера) клиента сервер может спрашивать следующий символ, пока не обработает их все.&lt;/p&gt;
&lt;p&gt;Хм. А что если перехватить этот запрос, подвинуть сервер в сторонку,  символы, которые нужны нам, а когда закончим - переслать изначальный запрос уже на сервер и пусть он уже свои вопросы задаёт клиенту&amp;hellip; Я даже не поверил своим глазам, когда это сработало!&lt;/p&gt;
&lt;p&gt;Т.е. первую задачу, связанную с получением адресов символов мы успешно решили.&lt;/p&gt;
&lt;p&gt;Прочитать список потоков тоже задача достаточно тривиальная, усложняется только необходимостью писать асинхронный код: отправляем запрос серверу на чтение области памяти, реагируем на его ответ и только потом формируем следующий запрос. Но это тоже было решено путём формирования базовой инфраструктуры запросов и подтасовки колбеков для ответов.&lt;/p&gt;
&lt;p&gt;Аналогичным образом была получена информация о регистрах, хранящихся в стеке неактивных потоков. Здесь стоит сделать уточнение. Текущий активный поток (SMP системы мы не рассматриваем, пока) не будет хранить регистры в стеке - он использует загруженный контекст и непосредственно регистры процессора. В терминологии GDB всегда есть (даже когда нет) - один поток: текущее выполнение. Удалённый сервер понимает только его.&lt;/p&gt;
&lt;p&gt;Теперь немного о том, как GDB-client показывает стек вызовов для тредов. На самом деле, он использует соглашение о вызовах для данной платформы и знает как получить адрес возврата их текущей функции. Но в общем и целом это сводится к вычитке значений регистров и разбор значений в них: где-то есть непосредственно адрес возврата, где-то значение SP (Stack Pointer) или FP (Frame Pointer) из которого можно разобрать стек и найти адрес возврата там. Нам этого делать не нужно, нам главно вернуть правильные значения регистров для выбранного треда.&lt;/p&gt;
&lt;p&gt;Вычитка происходит так: посылается команда Set Current Thread (можно вернуть OK или EXX - где XX - код ошибки, если треда нет), после чего посылается команда на чтение регистров. В случае RTOS, если текущий тред неактивен, то мы перехватываем запрос на чтение регистров, читаем регистры из стека и отправляем ответ клиенту. Что делать, если запрос - к текущему активному треду. Он же - Current Execution? Казалось бы: всё просто - переслать запрос на сервер. Он же и так знает о текущем выполнении, вот и регистры для него прочитает. И это правильная идея! Но есть нюанс. Если мы перехватываем Set Current Thread и не пересылаем Set Current Thread с идентификатором единственного текущего исполнения на сервер, то получим набор &lt;code&gt;xxxxxxxx&lt;/code&gt; для каждого регистра, мол - недоступны они! Поэтому, если идентификатор текущего патока RTOS и того, который устанавливается при помощи Set Current Thread совпадают, следует переслать Set Current Thread с указанием идентификатора текущего исполнения на сервер. Я сделал просто: в своей модели храню текущее исполнение как отдельный поток. Обработка граничных условий значительно упростилась.&lt;/p&gt;
&lt;p&gt;Стоит отметить, что значение регистра SP никогда не сохраняется: указатель на стек и так хранится в TCB и значение регистра восстанавливается из значения указателя на стек за вычетом размера фрейма под контекст. Поэтому в реализации стекинга для регистра SP указывается специальное значение, которое обрабатывается особым образом при формировании ответа клиенту.&lt;/p&gt;
&lt;p&gt;Следующим нюансом является то, когда обновлять модель потоков. Здесь нужно читать документацию по протоколу. Там есть информация по Stop Reply Packets. Это запросы от клиента к серверу, на которые сервер не присылает ответ. Ответ приходит только после наступления определённого события, типа срабатывания breakpoint, watchpoint или прихода от клиента команды Break (в рамках протокола, дабы упростить обработку, это пакет из единственного байта с кодом 0x03 которой может прийти от клиента после Stop Reply Packet). Если включить логику, то получается, что пока отлаживаемый код остановлен новых тредов в нём возникнуть не может. Соответственно модель тредов имеет смысл обновлять по приходу ответа на любой Stop Reply Packet, что подразумевает остановку выполнения кода. Это наиболее простое решение. К основным Stop Reply Packets относятся команды: &lt;code&gt;vCont&lt;/code&gt; и &lt;code&gt;c&lt;/code&gt; - Continue и &lt;code&gt;s&lt;/code&gt; - Step (пошаговая отладка).&lt;/p&gt;
&lt;p&gt;Читать же регистры нужно всегда по приходу соответствующего запроса от клиента. Главное выбрать, как выше написано, правильный источник их значений.&lt;/p&gt;
&lt;p&gt;Отдельно, возможно, стоит упомянуть о формате ответа на запрос регистров. Если коротко: это просто массив значений. А вот какому регистру конкретное значение соответствует - определяется архитектурой. Точнее реализацией её поддержки в GDB. Вот для MicroBlaze в исходниках GDB можно найти файл &lt;code&gt;microblaze-tdep.h&lt;/code&gt; и там перечисление &lt;code&gt;enum microblaze_regnum&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;enum&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;microblaze_regnum&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_R0_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_R1_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MICROBLAZE_SP_REGNUM&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MICROBLAZE_R1_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_R2_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_R3_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MICROBLAZE_RETVAL_REGNUM&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MICROBLAZE_R3_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_R4_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_R5_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MICROBLAZE_FIRST_ARGREG&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MICROBLAZE_R5_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_R6_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_R7_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_R8_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_R9_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_R10_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MICROBLAZE_LAST_ARGREG&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MICROBLAZE_R10_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_R11_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_R12_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_R13_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_R14_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_R15_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_R16_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_R17_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_R18_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_R19_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_R20_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_R21_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_R22_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_R23_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_R24_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_R25_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_R26_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_R27_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_R28_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_R29_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_R30_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_R31_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_PC_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_MSR_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_EAR_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_ESR_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_FSR_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_BTR_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_PVR0_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_PVR1_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_PVR2_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_PVR3_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_PVR4_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_PVR5_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_PVR6_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_PVR7_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_PVR8_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_PVR9_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_PVR10_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_PVR11_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_REDR_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_RPID_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_RZPR_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_RTLBX_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_RTLBSX_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_RTLBLO_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_RTLBHI_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_SLR_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MICROBLAZE_NUM_CORE_REGS&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MICROBLAZE_SLR_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_SHR_REGNUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;MICROBLAZE_NUM_REGS&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Это перечисление определяет порядок регистров в ответе, точнее как клиент будет его воспринимать. Если какие-то регистры не поддерживаются на платформе или при стекинге, они всё равно должны присутствовать в ответе, но значение может быть или &lt;code&gt;00000000&lt;/code&gt; или &lt;code&gt;xxxxxxxx&lt;/code&gt;, первое - просто нули, второе - специальное значение имеющее смысл: unavail. Какой вариант выбирать - это решение для конкретной платформы. По хорошему, нужно обрабатывать запрос &lt;code&gt;qFeatures&lt;/code&gt; (TBD: уточнить!) от клиента и читать ответ сервера, если он пришёл - там может содержаться информация по регистрам и для неиспользуемых может задаваться специальное значение.&lt;/p&gt;
&lt;h2 id=&#34;заткнись-и-покажи-код&#34;&gt;Заткнись и покажи код!&lt;/h2&gt;
&lt;p&gt;Вот: 
&lt;a href=&#34;https://github.com/h4tr3d/gdbproxy/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/h4tr3d/gdbproxy/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;По лицензии не определился, хочу BSD или MIT. Но активно воровал идеи в OpenOCD (код, по понятным причинам своровать сложно: разный язык, асинхронные заросы, нюансы, накладываемые природой прокси). Так что даже не знаю.&lt;/p&gt;
&lt;p&gt;По коду: писалось очень быстро. Писалось с оглядкой, что можно и нужно параметризировать, иметь возможность добавлять другие RTOS, но в текущем виде всё это достаточно неприятно пахнет. Пока. Надеюсь.&lt;/p&gt;
&lt;h2 id=&#34;а-как-запускать&#34;&gt;А как запускать?&lt;/h2&gt;
&lt;p&gt;Пока только в примере для Vitis:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;По понятным причинам - используем GDB отладчик, не System Debugger&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;В настройках указываем использовать любой нестандартный порт для GDB, пусть будет 4002 (это значение зашито как значение по умолчанию в &lt;code&gt;gdbproxy&lt;/code&gt;, на котором он слушает подключения)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Запускаем &lt;code&gt;gdbproxy&lt;/code&gt;, иметь запущенную XSDK или &lt;code&gt;hw_server&lt;/code&gt; в этот момент нет необходимости:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./gdbproxy --port 4002 --remote-host localhost --remote-port 3002 -- mb_freertos
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Запускаем отладку&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;hellip;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;PROFIT!&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;В случае использования удалённого &lt;code&gt;hw_server&lt;/code&gt; в силу малой гибкости конфигурирования Vitis, &lt;code&gt;gdbproxy&lt;/code&gt; должен запускаться на той же машине, что и &lt;code&gt;hw_server&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;выводы&#34;&gt;Выводы&lt;/h2&gt;
&lt;p&gt;Никаких. Просто в сухом остатке: threading на FreeRTOS и MicroBlaze поддерживается.&lt;/p&gt;
&lt;h2 id=&#34;upd&#34;&gt;UPD&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;2023.02.20&lt;/strong&gt; - обновил информацию о портах hw_server, исправил референсы с XSDK на Vitis (новое название с версии 2019.1), добавил тегов&lt;/li&gt;
&lt;/ol&gt;</description>
    </item>
    
    <item>
      <title>Миграция</title>
      <link>https://htrd.su/blog/2019/03/03/migration/</link>
      <pubDate>Sun, 03 Mar 2019 00:07:32 -0500</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2019/03/03/migration/</guid>
      <description>&lt;p&gt;В силу определённых причин пришлось перемещаться с платформы, где базировался блог. Пораскинув мозгами, решил, что статического сайта будет достаточно.&lt;/p&gt;
&lt;p&gt;Выбирал между GitHub Pages и GitLab Pages. Вторые из коробки предлагают больше места и больше возможностей по использования и кастомизации генераторов сайта. Первые - более удобное использование Let&amp;rsquo;s Encrypt, сводящееся к &amp;ldquo;поставить налочку использовать TLS/SSL&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Но больший объём артифактов и возможность выбора генератора (хочу иметь, на крайний случай, возможность зайти в репозиторий и добавить/отредактировать статью со всеми смежными изменениями) склонил к GitLab Pages. В качестве генератора  был выбран Hugo, написанный на Golang.&lt;/p&gt;
&lt;p&gt;Для миграции с DokuWiki был использован, с доработками для себя, 
&lt;a href=&#34;https://github.com/wgroeneveld/dokuwiki-to-hugo&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;dokuwiki-to-hugo&lt;/a&gt;. После чего была череда причёсываний наколенными скриптами (в частности, были восстановлены теги из BlogTNG). Тема пока оставлена неизменённая hugo-octopress. Много косяков в вёрстке, не все картинки лежат в правильных местах и могут не отображаться. Комментарии смигрировал тоже, поэтому, если находите где-то косяк - сообщайте.&lt;/p&gt;
&lt;p&gt;Немного про лимиты. Размер репозитория на GitLab - 10G. Но сайт деплоится как артифакт CI, а для него лимит - 1G. Т.е. максимальный размер сайта - 1G.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Дожились... Теперь и батарейки могут зависать...</title>
      <link>https://htrd.su/blog/2019/02/05/dozhilis..._teper_i_batarejki_mogut_zavisat/</link>
      <pubDate>Tue, 05 Feb 2019 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2019/02/05/dozhilis..._teper_i_batarejki_mogut_zavisat/</guid>
      <description>&lt;p&gt;Лаптоп рапортует, что батарея есть, заряд 54%, но&amp;hellip; она не заряжается, ни разражается.&lt;/p&gt;
&lt;p&gt;Выхлоп &lt;code&gt;acpi -i&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Battery 0: Unknown, 53%
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Battery 0: design capacity &lt;span class=&#34;m&#34;&gt;8147&lt;/span&gt; mAh, last full capacity &lt;span class=&#34;m&#34;&gt;7264&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;mAh&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; 89%
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;Unknown&lt;/code&gt; - это статус заряда-разряда.&lt;/p&gt;
&lt;p&gt;Вынимаю батарейку при включенном питании и вставляю обратно:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Battery 0: Charging, 56%, 00:58:42 &lt;span class=&#34;k&#34;&gt;until&lt;/span&gt; charged
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Battery 0: design capacity &lt;span class=&#34;m&#34;&gt;7770&lt;/span&gt; mAh, last full capacity &lt;span class=&#34;m&#34;&gt;6928&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;mAh&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; 89%
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;рукалицо.&lt;/p&gt;
&lt;p&gt;PS если кто не знает, то батарейки в лаптопах содержат контроллер, с которым хост общается по SMBus (3v3 версия протокола I2C с официальной частотой до 100 kHz).&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Выключить глобально Heads-Up уведомления на Asus Zenfone Max 4 (ZC554KL) и Max M1 (ZB555KL)</title>
      <link>https://htrd.su/blog/2019/01/03/vykljuchit_globalno_heads-up_uvedomlenija_na_asus_zenfone_max_4_zc554kl_i_max_m1_zb555kl/</link>
      <pubDate>Thu, 03 Jan 2019 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2019/01/03/vykljuchit_globalno_heads-up_uvedomlenija_na_asus_zenfone_max_4_zc554kl_i_max_m1_zb555kl/</guid>
      <description>&lt;p&gt;Возможно и на всех Android 8.x, в случае, если вас как и меня они крайне раздражают:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;включить режим разработчика и отладку по USB&lt;/li&gt;
&lt;li&gt;на хосте поставить &lt;code&gt;android-tools&lt;/code&gt; (например &lt;code&gt;pacman -S android-tools&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;подключить USB кабелем и выполнить команду:```bash
adb shell settings put global heads_up_notifications_enabled 0&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Радоваться жизни.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;TBD: https://www.reddit.com/r/lgv20/comments/9ab5po/heads_up_notifications_enabled_after_android_80/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Gnome/Mate Terminal maximized by default</title>
      <link>https://htrd.su/blog/2018/10/22/gnome_mate_terminal_maximized_by_default/</link>
      <pubDate>Mon, 22 Oct 2018 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2018/10/22/gnome_mate_terminal_maximized_by_default/</guid>
      <description>&lt;p&gt;Пока только 
&lt;a href=&#34;https://htrd.su/en/blog/2018/11/09/gnome_mate_terminal_maximized_by_default/&#34;&gt;английский вариант&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Методы численного дифференцирования функций</title>
      <link>https://htrd.su/blog/2018/10/19/metody_chislennogo_differencirovanija_funkcij/</link>
      <pubDate>Fri, 19 Oct 2018 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2018/10/19/metody_chislennogo_differencirovanija_funkcij/</guid>
      <description>&lt;p&gt;Буквально на днях потребовалось:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://aco.ifmo.ru/el_books/numerical_methods/lectures/glava1.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Методы численного дифференцирования функций&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Интересная информация про импульсные блоки питания</title>
      <link>https://htrd.su/blog/2018/10/12/interesnaja_informacija_pro_impulsnye_bloki_pitanija/</link>
      <pubDate>Fri, 12 Oct 2018 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2018/10/12/interesnaja_informacija_pro_impulsnye_bloki_pitanija/</guid>
      <description>&lt;p&gt;Наткнулся на блог камрада @kirich. Очень интересно, коротко и по делу. В частности, искал, как правильно заземлить паяльную станцию, жало и корпус.&lt;/p&gt;
&lt;p&gt;Итак:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Общее
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://www.kirich.blog/stati/informaciya-dlya-nachinayuschih/66-mc34063-odin-iz-samyh-rasprostranennyh-shim-chim-kontrollerov-i-nebolshoy-ekskurs-v-principy-raboty-dc-dc-konverterov.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;MC34063 Один из самых распространенных ШИМ (ЧИМ) контроллеров и небольшой экскурс в принципы работы DC-DC конвертеров.&lt;/a&gt; - тут больше интересен экскурс в работу DC-DC конвертеров. Просто и понятно.&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://www.kirich.blog/moe-video/298-video-na-temu-odnogo-malenkogo-no-vazhnogo-kondensatora.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Видео на тему одного маленького, но важного конденсатора&lt;/a&gt; - тут не видео, а вполне себе текст и годная статья, рассказывающая про помехогасящие конденсаторы в импульсных блоках питания X и Y типов.&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://www.kirich.blog/stati/informaciya-dlya-nachinayuschih/304-vopros-otvet-popytka-pervaya.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Вопрос/ответ, попытка первая&lt;/a&gt; - собственно, тут большая часть про организацию заземления в БП, когда оно первоначально там не предусмотрено.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Цикл про устройство импульсных БП
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://www.kirich.blog/stati/informaciya-dlya-nachinayuschih/316-iz-chego-sostoyait-impulsnyy-blok-pitaniya-chast-1.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Из чего состоит импульсный блок питания часть 2&lt;/a&gt; - На самом деле, часть это первая. Про фильтры, X и Y конденсаторы и выпрямитель.&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://www.kirich.blog/stati/informaciya-dlya-nachinayuschih/333-iz-chego-sostoit-impulsnyy-blok-pitaniya-chast-3.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Из чего состоит импульсный блок питания часть 3&lt;/a&gt; - Про инвертор.&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://www.kirich.blog/stati/informaciya-dlya-nachinayuschih/340-kak-ustroen-blok-pitaniya-chast-4.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Как устроен блок питания, часть 4&lt;/a&gt; - Про силовой трансформатор и снаббер.&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://www.kirich.blog/stati/informaciya-dlya-nachinayuschih/348-kak-ustroen-blok-pitaniya-chast-5.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Как устроен блок питания, часть 5&lt;/a&gt; - Про вторичную цепь. Выпрямитель, сглаживающий фильтр, выходной фильтр помех. Схема стабилизации.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Станция для жал T12 на STM32</title>
      <link>https://htrd.su/blog/2018/10/12/stancija_dlja_zhal_t12_na_stm32/</link>
      <pubDate>Fri, 12 Oct 2018 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2018/10/12/stancija_dlja_zhal_t12_na_stm32/</guid>
      <description>&lt;p&gt;Обновил свою &amp;ldquo;рародную&amp;rdquo; станция для жал T12 на STC контроллере и LED индикаторах до контроллера на STM32 и OLED дисплеем. Версия железа 2.1S.&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;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Немного материалов в тему&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Мануалы
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://drive.google.com/drive/folders/1oNlykMnZjKlkF_2zin7KLDpv_93eQfzc&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Набор инструкций по работе, калибровке и т.п.&lt;/a&gt; или 
&lt;a href=&#34;https://htrd.su/img/post/2018/10/12/ksger_ru_user_manual_v1.pdf&#34;&gt;локально&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://htrd.su/blog/2017/04/07/nomenklatura_zhal_t12/&#34;&gt;Номенклатура жал T12&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Тут же обсуждения
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://mysku.ru/blog/aliexpress/61349.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://mysku.ru/blog/aliexpress/61349.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://mysku.ru/blog/aliexpress/64124.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://mysku.ru/blog/aliexpress/64124.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://mysku.ru/blog/taobao/45851.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://mysku.ru/blog/taobao/45851.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Осталось только сделать заземление, как описано тут:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://www.kirich.blog/stati/informaciya-dlya-nachinayuschih/304-vopros-otvet-popytka-pervaya.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://www.kirich.blog/stati/informaciya-dlya-nachinayuschih/304-vopros-otvet-popytka-pervaya.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>ЛУТ фотография с подсветкой</title>
      <link>https://htrd.su/blog/2018/10/02/lut_fotografija_s_podsvetkoj/</link>
      <pubDate>Tue, 02 Oct 2018 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2018/10/02/lut_fotografija_s_podsvetkoj/</guid>
      <description>&lt;p&gt;В продолжении темы 
&lt;a href=&#34;https://htrd.su/blog/2012/12/13/podgotovka_fotografii_dlja_perevoda_na_folgu/&#34;&gt;Подготовка фотографии для перевода на фольгу&lt;/a&gt;, вот как может выглядеть результат:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2018/10/02/img_20170528_145523.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Чуть более подробно: 
&lt;a href=&#34;https://photos.app.goo.gl/MgGtReMN9zmAvXsx9&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://photos.app.goo.gl/MgGtReMN9zmAvXsx9&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Анализатор сигналов на 8 каналов и 24MHz на базе демоплаты FX2LP</title>
      <link>https://htrd.su/blog/2018/08/30/analizator_signalov_na_8_kanalov_i_24mhz_na_baze_demoplaty_fx2lp/</link>
      <pubDate>Thu, 30 Aug 2018 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2018/08/30/analizator_signalov_na_8_kanalov_i_24mhz_na_baze_demoplaty_fx2lp/</guid>
      <description>&lt;p&gt;Потребовалось посмотреть консистентность общения c устройством по шине I2C. Вспомнил, что в закромах Родины валяется демоплата за 120 рубликов (сейчас в пределах 200-300 рублей) на FX2LP. Покупалась для реализации SMBus-USB адаптера, что бы перепрошить батарейку ноутбука. До перепрошивки не дошло, но всплыло где-то в голове, что эта плата фигурировала как анализатор сигналов.&lt;/p&gt;
&lt;p&gt;Собственно, саму плату искать на eBay или Aliexpress по словам &lt;code&gt;Cypress FX2LP&lt;/code&gt;, а софт для работы вот, от проекта 
&lt;a href=&#34;https://sigrok.org/wiki/Saleae_Logic&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Sigrok&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://sigrok.org/wiki/Downloads&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://sigrok.org/wiki/Downloads&lt;/a&gt; - качать PulseView (в Manjaro PulseView присутствует в репозитории)&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://sigrok.org/wiki/Fx2lafw&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://sigrok.org/wiki/Fx2lafw&lt;/a&gt; - это фирмварь для платы, что бы Sigrok понял как с ней работать, в Manjaro нужно из AUR ставить. Можно как исходники, можно так и предотстроенные бинарники.&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://sigrok.org/wiki/Saleae_Logic&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://sigrok.org/wiki/Saleae_Logic&lt;/a&gt; - а это то, как Sigrok видит нашу плату.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sigrok автоматически загружает прошивку в плату, если вы её выбрали. Если ничего не происходит: запустите pulseview из терминала и посмотрите, что выпадает на экран.&lt;/p&gt;
&lt;p&gt;А вот так выглядит сграбленный сигнал вместе с включенным парсером I2C:&lt;br/&gt;&lt;br/&gt;
&lt;img src=&#34;https://htrd.su/img//post/2018/08/30/pulseview.png&#34; alt=&#34;&#34;&gt;&lt;br/&gt;&lt;br/&gt;
В данном примере:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;D0 - клок&lt;/li&gt;
&lt;li&gt;D1 - данные&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Плюсом этой платы может стать ещё то, что лёгким движением она может быть превращена в I2C/SMBus-USB конвертер, используя наработки и прошивку из проекта: 
&lt;a href=&#34;https://github.com/karosium/smbusb&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/karosium/smbusb&lt;/a&gt;. Собственно этот проект и создан для реверса протокола прошивок АКБ ноутбуков.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Почему разработчики драйверов для Linux могут ненавидеть дистрибутивы подобные CentOS?</title>
      <link>https://htrd.su/blog/2018/06/12/why_may_linux_driver_developer_hate_distros_like_centos/</link>
      <pubDate>Tue, 12 Jun 2018 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2018/06/12/why_may_linux_driver_developer_hate_distros_like_centos/</guid>
      <description>&lt;p&gt;Короткое исследование недавней проблемы.&lt;/p&gt;
&lt;p&gt;Пока на моём 
&lt;a href=&#34;https://htrd.su/en/blog/2018/06/12/why_may_linux_driver_developer_hate_distros_like_centos/&#34;&gt;корявом английском&lt;/a&gt; (или кликаем кнопочку перевода)&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Делим длинную строку в консоли</title>
      <link>https://htrd.su/blog/2018/06/06/delim_dlinnuju_stroku_v_konsoli/</link>
      <pubDate>Wed, 06 Jun 2018 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2018/06/06/delim_dlinnuju_stroku_v_konsoli/</guid>
      <description>&lt;p&gt;Открыл для себя утилиту &lt;code&gt;fold&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Я помню чудное мгновенье, передо мной явилась ты, как мимолётное видение, как гений чистой красоты&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; fold -s -w80
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Я помню чудное мгновенье, передо мной 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;явилась ты, как мимолётное видение, как 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;гений чистой красоты
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;-s&lt;/code&gt; - делить по пробельным символам, &lt;code&gt;-wXXX&lt;/code&gt; - ширина вывода. За подробностями в &lt;code&gt;man 1 fold&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>QtC crashed in master</title>
      <link>https://htrd.su/blog/2018/06/04/qtc_crashed_in_master/</link>
      <pubDate>Mon, 04 Jun 2018 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2018/06/04/qtc_crashed_in_master/</guid>
      <description>&lt;p&gt;Давеча обновил QtC из транка и словил:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;terminate called after throwing an instance of &amp;#39;Sqlite::StatementHasError&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ConnectionServer error: &amp;#34;QLocalSocket: Remote closed&amp;#34; &amp;#34;/tmp/QtCreator-NVcPQb/ClangBackEnd-15319&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Аварийный останов (стек памяти сброшен на диск)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ключевое: &lt;code&gt;Sqlite::StatementHasError&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Не стал глубоко разбираться, чуточку &lt;code&gt;gdb&lt;/code&gt; и &lt;code&gt;strace&lt;/code&gt; и просто удалил старую базу индексации clang-плагина:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm -f $HOME/.config/QtProject/qtcreator/symbol-experimental-v1.db
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Или, в более новых версиях QtC:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm -f $HOME/.cache/QtProject/QtCreator/symbol-experimental-v1.db
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Судя по всему поменялась схема, а процедуры её изменения в автоматическом режиме ещё не реализовали.&lt;/p&gt;
&lt;p&gt;UPD 2019-08-13: актуально делать время от времени — повторилось снова.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Хотели как лучше...</title>
      <link>https://htrd.su/blog/2018/05/30/xoteli_kak_luchshe/</link>
      <pubDate>Wed, 30 May 2018 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2018/05/30/xoteli_kak_luchshe/</guid>
      <description>&lt;p&gt;Это прекрасно:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;png.c: In function ‘png_get_libpng_ver’:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;png.c:700:17: warning: the comparison will always evaluate as ‘true’ for the address of ‘png_ptr’ will never be NULL [-Waddress]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    if (&amp;amp;png_ptr != NULL)  /* silence compiler warning about unused png_ptr */
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                 ^
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&amp;ldquo;Хочешь забыть эту боль?..&amp;rdquo; (c) Майор Пейн&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>errno(1)</title>
      <link>https://htrd.su/blog/2018/05/24/errno_1/</link>
      <pubDate>Thu, 24 May 2018 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2018/05/24/errno_1/</guid>
      <description>&lt;p&gt;No comments&amp;hellip;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ sudo pacman -S moreutils
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ errno -l
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;errno -l
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;EPERM &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; Операция не позволена
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ENOENT &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt; Нет такого файла или каталога
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ESRCH &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt; Нет такого процесса
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;EINTR &lt;span class=&#34;m&#34;&gt;4&lt;/span&gt; Прерван системный вызов
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ errno EAGAIN
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;EAGAIN &lt;span class=&#34;m&#34;&gt;11&lt;/span&gt; Ресурс временно недоступен
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ errno &lt;span class=&#34;m&#34;&gt;39&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ENOTEMPTY &lt;span class=&#34;m&#34;&gt;39&lt;/span&gt; Каталог не пуст
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;По желанию добавляется &lt;code&gt;env LANG=C&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;На Ubuntu:
sudo apt install moreutils&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Manjaro: ядро 4.16 и bluetooth мышка</title>
      <link>https://htrd.su/blog/2018/05/22/manjaro_jadro_4.16_i_bluetooth_myshka/</link>
      <pubDate>Tue, 22 May 2018 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2018/05/22/manjaro_jadro_4.16_i_bluetooth_myshka/</guid>
      <description>&lt;p&gt;После обновления и установки ядра 4.16 обнаружилась неприятная и странная вещь, проявляющаяся в том, что мышка временами подвисает.&lt;/p&gt;
&lt;p&gt;Изучение логов показало такую картинку:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cat&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;log&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;grep&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;MX Master&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Apr&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;47&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;35&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0034&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input22&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Apr&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;47&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;35&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0034&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Apr&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;23&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;46&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;42&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0038&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input23&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Apr&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;23&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;46&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;42&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0038&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Apr&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;24&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;07&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0039&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input24&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Apr&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;24&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;07&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0039&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Apr&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;25&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;36&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;58&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;003&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input25&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Apr&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;25&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;36&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;58&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;003&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Apr&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;26&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;06&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;53&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;003&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input26&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Apr&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;26&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;06&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;53&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;003&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Apr&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;27&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;39&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;41&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;003&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;C&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input27&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Apr&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;27&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;39&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;41&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;003&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;C&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Apr&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;28&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;28&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;43&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;003&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input28&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Apr&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;28&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;28&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;43&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;003&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Apr&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;28&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;15&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;31&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0001&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input15&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Apr&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;28&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;15&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;31&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0001&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;08&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;55&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;38&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0002&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input16&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;08&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;55&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;38&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0002&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0001&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input15&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0001&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;06&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;49&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0002&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input16&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;06&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;49&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0002&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;7&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;16&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;51&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0003&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input17&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;7&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;16&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;51&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0003&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;46&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;47&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0004&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input18&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;46&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;47&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0004&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;24&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;16&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0006&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input19&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;24&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;16&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0006&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;15&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;08&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;58&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;25&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0008&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input20&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;15&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;08&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;58&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;25&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0008&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;00&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;44&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;44&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0009&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input21&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;00&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;44&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;44&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0009&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;13&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;34&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;45&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0001&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input15&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;13&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;34&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;45&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0001&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;24&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;49&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0001&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input15&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;24&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;49&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0001&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;02&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;46&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0002&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input16&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;02&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;46&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0002&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;06&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;38&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0003&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input17&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;06&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;38&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0003&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;15&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;29&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0004&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input18&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;15&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;29&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0004&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;12&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;08&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;23&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input19&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;12&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;08&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;23&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;12&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;23&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;43&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0006&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input20&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;12&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;23&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;43&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0006&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;13&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;16&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;51&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0007&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input21&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;13&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;16&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;51&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0007&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;13&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;32&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0008&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input22&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;13&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;32&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0008&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;13&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;52&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0009&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input23&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;13&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;52&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0009&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;13&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;35&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;000&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input24&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;13&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;35&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;000&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;13&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;43&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;34&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;000&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input25&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;13&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;43&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;34&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;000&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;13&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;44&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;000&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;C&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input26&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;13&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;44&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;000&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;C&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;36&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;58&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;000&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input27&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;36&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;58&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;000&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;39&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;32&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;000&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input28&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;39&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;32&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;000&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;46&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;38&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;000&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input29&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;46&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;38&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;000&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;52&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;26&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0010&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input30&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;52&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;26&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0010&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;15&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;29&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0011&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input31&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;15&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;29&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0011&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;15&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;46&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0012&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input32&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;15&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;59&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;46&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0012&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;16&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0013&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input33&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;16&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0013&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;16&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;44&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0014&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input34&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;16&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;44&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0014&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;16&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;26&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;21&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0015&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input35&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;16&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;26&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;21&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0015&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;15&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;51&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0016&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input36&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;15&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;51&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0016&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;19&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0017&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input37&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;19&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0017&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;32&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0018&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input38&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;32&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0018&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;32&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0019&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input39&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;32&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0019&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;45&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;48&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;001&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input40&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;45&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;48&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;001&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;46&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;27&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;001&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input41&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;46&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;27&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;001&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;48&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;15&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;001&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;C&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input42&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;48&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;15&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;001&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;C&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;49&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;50&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;001&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input43&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;49&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;50&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;001&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;55&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;42&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;001&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input44&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;55&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;42&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;001&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;57&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;12&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;001&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input45&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;57&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;12&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;001&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;03&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;01&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0020&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input46&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;03&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;01&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0020&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;21&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;08&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;50&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0021&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input47&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;21&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;08&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;50&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0021&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;21&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;01&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0022&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input48&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;21&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;01&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0022&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;21&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;37&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;02&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0023&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input49&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;21&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;37&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;02&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0023&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;25&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0024&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input50&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;25&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0024&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;32&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;27&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0025&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input51&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;32&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;27&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0025&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;35&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;55&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0026&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input52&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;35&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;55&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0026&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;39&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;01&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0027&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input53&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;39&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;01&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0027&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;40&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;28&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0028&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input54&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;40&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;28&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0028&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;41&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;55&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0029&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input55&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;41&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;55&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0029&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;42&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;41&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;002&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input56&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;42&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;41&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;002&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;44&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;002&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input57&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;44&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;002&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;01&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;40&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;002&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;C&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input58&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;01&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;40&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;002&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;C&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;15&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;002&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input59&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;15&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;002&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;49&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;31&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;002&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input60&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;49&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;31&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;002&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;04&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;002&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input61&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;04&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;002&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;16&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0030&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input62&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;16&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0030&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;39&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0031&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input63&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;39&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0031&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0032&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input64&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0032&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;56&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;57&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0033&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input65&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;56&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;57&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0033&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;57&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;27&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0034&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input66&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;57&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;27&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0034&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;12&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;02&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;21&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0035&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input67&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;12&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;02&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;21&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0035&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;12&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;06&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;35&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0036&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input68&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;12&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;06&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;35&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0036&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;13&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;34&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0037&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input69&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;13&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;34&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0037&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;04&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;23&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0038&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input70&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;04&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;23&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0038&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;16&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;44&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;25&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0039&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input71&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;16&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;44&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;26&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0039&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;12&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;38&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;003&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input72&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;12&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;38&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;003&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;13&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;50&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;003&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input73&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;13&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;50&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;003&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;47&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;003&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;C&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input74&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;47&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;003&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;C&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;41&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;003&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input75&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;41&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;003&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;51&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;08&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;003&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input76&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;51&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;08&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;003&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;15&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;003&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input77&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;15&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;003&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;23&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;08&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;47&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;45&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0040&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input78&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;23&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;08&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;47&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;45&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0040&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;23&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;08&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;57&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;00&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uhid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0041&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input79&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;May&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;23&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;08&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;57&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;00&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;laptop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kernel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0005&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;046&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B01E&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0041&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidraw0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLUETOOTH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HID&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Keyboard&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MX&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;F3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Обновление как раз случилось 18 мая (скачок во времени: смена часового пояса с разницей в 14 часов) и поплыло: вкл-выкл, выкл-вкл.&lt;/p&gt;
&lt;p&gt;Рядом с данными строчками была следующая полезная информация:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;May 22 12:06:31 gaz-laptop kernel: usb 1-1-port4: disabled by hub (EMI?), re-enabling...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;May 22 12:06:31 gaz-laptop kernel: usb 1-1.4: reset full-speed USB device number 57 using ehci-pci
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;May 22 12:06:31 gaz-laptop kernel: usb 1-1.4: USB disconnect, device number 57
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;May 22 12:06:32 gaz-laptop kernel: usb 1-1.4: new full-speed USB device number 58 using ehci-pci
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;May 22 12:06:32 gaz-laptop kernel: usb 1-1.4: New USB device found, idVendor=0a5c, idProduct=21e6
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;May 22 12:06:32 gaz-laptop kernel: usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;May 22 12:06:32 gaz-laptop kernel: usb 1-1.4: Product: BCM20702A0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;May 22 12:06:32 gaz-laptop kernel: usb 1-1.4: Manufacturer: Broadcom Corp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;May 22 12:06:32 gaz-laptop kernel: usb 1-1.4: SerialNumber: F82FA8EBF32E
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;May 22 12:06:32 gaz-laptop kernel: Bluetooth: hci0: BCM: chip id 63
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;May 22 12:06:32 gaz-laptop kernel: Bluetooth: hci0: BCM: features 0x07
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;May 22 12:06:32 gaz-laptop kernel: Bluetooth: hci0: gaz-laptop
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;May 22 12:06:32 gaz-laptop kernel: Bluetooth: hci0: BCM20702A1 (001.002.014) build 0462
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;May 22 12:06:33 gaz-laptop kernel: Bluetooth: hci0: BCM20702A1 (001.002.014) build 0462
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;May 22 12:06:33 gaz-laptop kernel: Bluetooth: hci0: Broadcom Bluetooth Device
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;May 22 12:06:35 gaz-laptop kernel: input: MX Master as /devices/virtual/misc/uhid/0005:046D:B01E.0036/input/input68
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;May 22 12:06:35 gaz-laptop kernel: hid-generic 0005:046D:B01E.0036: input,hidraw0: BLUETOOTH HID v0.05 Keyboard [MX Master] on F8:2F:A8:EB:F3:2E
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Примечательна первая строчка:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;May 22 12:06:31 gaz-laptop kernel: usb 1-1-port4: disabled by hub (EMI?), re-enabling...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;К сожалению, гугл даёт много булшита, кроме этой ветки форума: 
&lt;a href=&#34;https://bbs.archlinux.org/viewtopic.php?id=236479&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://bbs.archlinux.org/viewtopic.php?id=236479&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Изучение показало: виноват параметр модуля &lt;code&gt;btusb&lt;/code&gt; - &lt;code&gt;enable_autosuspend&lt;/code&gt;. Его установка по умолчанию зависит от параметра ядра &lt;code&gt;CONFIG_BT_HCIBTUSB_AUTOSUSPEND&lt;/code&gt;, вот как это выглядит в 
&lt;a href=&#34;https://github.com/torvalds/linux/blob/a048a07d7f4535baa4cbad6bc024f175317ab938/drivers/bluetooth/btusb.c#L45&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;коде&lt;/a&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;static&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;bool&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;enable_autosuspend&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;IS_ENABLED&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;CONFIG_BT_HCIBTUSB_AUTOSUSPEND&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;А в манжаро какого-то чёрта эту опцию включили:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ cat /lib/modules/4.15.18-2-MANJARO/build/.config &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep CONFIG_BT_HCIBTUSB_AUTOSUSPEND
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ cat /lib/modules/4.16.8-1-MANJARO/build/.config &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep CONFIG_BT_HCIBTUSB_AUTOSUSPEND
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;CONFIG_BT_HCIBTUSB_AUTOSUSPEND&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;y
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Видим: в 4.15 - нет, в 4.16 есть и включена.&lt;/p&gt;
&lt;p&gt;Выключаем опцию на лету:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; N &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sudo tee /sys/module/btusb/parameters/enable_autosuspend
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;И перманентно, создаём файл &lt;code&gt;/etc/modprobe.d/btusb.conf&lt;/code&gt; со следующим содержимым:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;options btusb enable_autosuspend=n
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Перед 23 мая были сделаны данные изменения и из лога видно, как изменилось поведение: один раз мышка нашлась когда пришёл и включил на работе, второй раз - переподавал питание на модуль Bluetooth.&lt;/p&gt;
&lt;p&gt;Материалы:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://ljn917.wordpress.com/2018/03/01/disable-bluetooth-autosuspend/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://ljn917.wordpress.com/2018/03/01/disable-bluetooth-autosuspend/&lt;/a&gt; - тут можно взять идею селективного управления автозасыпанием&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://bbs.archlinux.org/viewtopic.php?id=236479&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://bbs.archlinux.org/viewtopic.php?id=236479&lt;/a&gt; - собственно решение&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://bugzilla.kernel.org/show_bug.cgi?id=199351&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;intel 8265 bluetooth no longer functions as of 4.16&lt;/a&gt; - тут всё понятно&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>ThinkPad T530: делаем из кнопки Launch1 - SysRq</title>
      <link>https://htrd.su/blog/2018/05/22/thinkpad_t530_delaem_iz_knopki_launch1_-_sysrq/</link>
      <pubDate>Tue, 22 May 2018 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2018/05/22/thinkpad_t530_delaem_iz_knopki_launch1_-_sysrq/</guid>
      <description>&lt;p&gt;Он же Print Screen. От которого в неудобном месте мы 
&lt;a href=&#34;https://htrd.su/blog/2017/02/19/thinkpad_t530_klaviatura/&#34;&gt;уже избавились&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;До сих пор я не придумал, для чего бы её ещё использовать.&lt;/p&gt;
&lt;p&gt;В логах загрузки ядра ищем устройство &amp;ldquo;ThinkPad Extra Buttons&amp;rdquo;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;May 18 01:25:08 gaz-laptop kernel: input: ThinkPad Extra Buttons as /devices/platform/thinkpad_acpi/input/input5
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;И аналогично Print Screen находим скан-код:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo evtest /dev/input/event5
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Если при запуске &lt;code&gt;evtest&lt;/code&gt; у нас выводится неправильное имя, просто перебираем разные устройства.&lt;/p&gt;
&lt;p&gt;Выхлоп от нажатия:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Event: time 1527088323.696723, type 4 (EV_MSC), code 4 (MSC_SCAN), value 17
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Event: time 1527088323.696723, type 1 (EV_KEY), code 148 (KEY_PROG1), value 1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Event: time 1527088323.696723, -------------- SYN_REPORT ------------
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Value - &lt;strong&gt;17&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;К сожалению, сделать маппинг через &lt;code&gt;setkeycodes&lt;/code&gt; тут не получится, только через HWDB. Открываем на редактирование
&lt;code&gt;/lib/udev/hwdb.d/60-keyboard.hwdb&lt;/code&gt;, ищем там строку &amp;ldquo;ThinkPad Extra Buttons&amp;rdquo;, относящуюся к Lenovo (есть ещё для IBM), копируем строчку идентификации, после чего создаём файл &lt;code&gt;/etc/udev/hwdb.d/70-keyboard.hwdb&lt;/code&gt;,
который перекроет нужные нам настройки, содержимое с большой долей вероятности будет таким:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# thinkpad_acpi driver
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;evdev:name:ThinkPad Extra Buttons:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; KEYBOARD_KEY_17=sysrq                                  # Override Launch1 to SysRq
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Здесь 17 точно соответствует тому номеру, который мы получили от &lt;code&gt;evtest&lt;/code&gt;. А имя, это маленькими буквами имя клавиши
без префикса &lt;code&gt;KEY_&lt;/code&gt; из &lt;code&gt;/usr/include/linux/input-event-codes.h&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;После чего выполняем:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemd-hwdb update
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo udevadm trigger /dev/input/event5
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Проверяем применимость настроек:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo udevadm info /dev/input/event5
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Я наблюдаю:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;E: KEYBOARD_KEY_17=sysrq
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Значит всё пучком!&lt;/p&gt;
&lt;p&gt;Теперь ещё наклейку найти, которая закроет клавишу PrtSc надписью Menu :wink:&lt;/p&gt;
&lt;p&gt;Бонусом, мой итоговый файлик &lt;code&gt;/etc/udev/hwdb.d/70-keyboard.hwdb&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# thinkpad_acpi driver
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;evdev:name:ThinkPad Extra Buttons:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; KEYBOARD_KEY_17=sysrq                                  # Override Launch1 (prog1) to SysRq (sysrq)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# T530 default SysRq (PrnScr) button to Menu (Compose)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;evdev:atkbd:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*T530*:pvr*
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  KEYBOARD_KEY_b7=compose
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Totalphase Data Center на Manjaro</title>
      <link>https://htrd.su/blog/2018/04/20/totalphase_data_center_na_manjaro/</link>
      <pubDate>Fri, 20 Apr 2018 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2018/04/20/totalphase_data_center_na_manjaro/</guid>
      <description>&lt;p&gt;С недавнего времени 
&lt;a href=&#34;https://www.totalphase.com/products/data-center/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;сия софтина&lt;/a&gt; перестала запускаться с сетованием на следующуют проблему:
error: unable to execute application&lt;/p&gt;
&lt;p&gt;Что-то подсказывает, что дело в библиотеках: основные (как и само ядро в виде &lt;code&gt;libruntime.so&lt;/code&gt;) лежат в каталоге &lt;code&gt;/lib/&lt;/code&gt; дистрибутива. Но что-то, судя по всему, пытается браться из системы и там оно перестало существовать, что не удивительно для быстроменяющихся дистрибутивов типа Arch, Manjaro или Solus.&lt;/p&gt;
&lt;p&gt;Запускаем под &lt;code&gt;strace&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;strace -o OUT.txt ./Data&lt;span class=&#34;se&#34;&gt;\ &lt;/span&gt;Center
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;смотрим &lt;code&gt;OUT.txt&lt;/code&gt;, начинаем с самого конца, видим:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openat(AT_FDCWD, &amp;#34;/home/hatred/bin/data-center-linux-x86_64-v6.73/lib/libgstapp-0.10.so.0&amp;#34;, O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openat(AT_FDCWD, &amp;#34;/home/hatred/bin/data-center-linux-x86_64-v6.73/lib/libgstapp-0.10.so.0&amp;#34;, O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openat(AT_FDCWD, &amp;#34;/usr/lib/tls/x86_64/x86_64/libgstapp-0.10.so.0&amp;#34;, O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;stat(&amp;#34;/usr/lib/tls/x86_64/x86_64&amp;#34;, 0x7ffe2205b520) = -1 ENOENT (No such file or directory)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openat(AT_FDCWD, &amp;#34;/usr/lib/tls/x86_64/libgstapp-0.10.so.0&amp;#34;, O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;stat(&amp;#34;/usr/lib/tls/x86_64&amp;#34;, 0x7ffe2205b520) = -1 ENOENT (No such file or directory)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openat(AT_FDCWD, &amp;#34;/usr/lib/tls/x86_64/libgstapp-0.10.so.0&amp;#34;, O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;stat(&amp;#34;/usr/lib/tls/x86_64&amp;#34;, 0x7ffe2205b520) = -1 ENOENT (No such file or directory)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openat(AT_FDCWD, &amp;#34;/usr/lib/tls/libgstapp-0.10.so.0&amp;#34;, O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;stat(&amp;#34;/usr/lib/tls&amp;#34;, {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openat(AT_FDCWD, &amp;#34;/usr/lib/x86_64/x86_64/libgstapp-0.10.so.0&amp;#34;, O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;stat(&amp;#34;/usr/lib/x86_64/x86_64&amp;#34;, 0x7ffe2205b520) = -1 ENOENT (No such file or directory)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openat(AT_FDCWD, &amp;#34;/usr/lib/x86_64/libgstapp-0.10.so.0&amp;#34;, O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;stat(&amp;#34;/usr/lib/x86_64&amp;#34;, 0x7ffe2205b520) = -1 ENOENT (No such file or directory)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openat(AT_FDCWD, &amp;#34;/usr/lib/x86_64/libgstapp-0.10.so.0&amp;#34;, O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;stat(&amp;#34;/usr/lib/x86_64&amp;#34;, 0x7ffe2205b520) = -1 ENOENT (No such file or directory)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openat(AT_FDCWD, &amp;#34;/usr/lib/libgstapp-0.10.so.0&amp;#34;, O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;stat(&amp;#34;/usr/lib&amp;#34;, {st_mode=S_IFDIR|0755, st_size=249856, ...}) = 0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Не получается найти запчасть от gstreamer0.10. И правильно: его же в системе больше нет. Поэтому решение: ставить из AUR:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yay -S gstreamer0.10-base-plugins
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Или же найти где-то и подложить в каталог &lt;code&gt;lib&lt;/code&gt; самого приложения, но там ещё пачка зависимостей будет.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Падение Xorg после выхода из suspend</title>
      <link>https://htrd.su/blog/2018/04/16/padenie_xorg_posle_vyxoda_iz_suspend/</link>
      <pubDate>Mon, 16 Apr 2018 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2018/04/16/padenie_xorg_posle_vyxoda_iz_suspend/</guid>
      <description>&lt;p&gt;Замечено на ядрах 4.15. Проявляется не всегда.&lt;/p&gt;
&lt;p&gt;В логах замечено следующее, накануне сего события:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apr 13 21:56:33 localhost kernel: Restarting tasks ... done.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apr 13 21:56:33 localhost kernel: EXT4-fs error (device sda6): __ext4_get_inode_loc:4619: inode #271265: block 1049210: comm nmbd: unable to read itable block
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apr 13 21:56:33 localhost kernel: Buffer I/O error on dev sda6, logical block 0, lost sync page write
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apr 13 21:56:33 localhost kernel: EXT4-fs error (device sda6) in ext4_reserve_inode_write:5754: IO failure
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apr 13 21:56:33 localhost kernel: EXT4-fs (sda6): previous I/O error to superblock detected
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apr 13 21:56:33 localhost kernel: Buffer I/O error on dev sda6, logical block 0, lost sync page write
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apr 13 21:56:33 localhost kernel: EXT4-fs error (device sda6): __ext4_get_inode_loc:4619: inode #271265: block 1049210: comm nmbd: unable to read itable block
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apr 13 21:56:33 localhost kernel: EXT4-fs (sda6): previous I/O error to superblock detected
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apr 13 21:56:33 localhost kernel: Buffer I/O error on dev sda6, logical block 0, lost sync page write
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apr 13 21:56:33 localhost kernel: EXT4-fs error (device sda6) in ext4_reserve_inode_write:5754: IO failure
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apr 13 21:56:33 localhost kernel: EXT4-fs (sda6): previous I/O error to superblock detected
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apr 13 21:56:33 localhost kernel: Buffer I/O error on dev sda6, logical block 0, lost sync page write
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apr 13 21:56:33 localhost kernel: EXT4-fs error (device sda6) in ext4_orphan_add:2819: IO failure
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apr 13 21:56:33 localhost kernel: EXT4-fs (sda6): previous I/O error to superblock detected
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apr 13 21:56:33 localhost kernel: Buffer I/O error on dev sda6, logical block 0, lost sync page write
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apr 13 21:56:33 localhost kernel: EXT4-fs error (device sda6): __ext4_get_inode_loc:4619: inode #271265: block 1049210: comm nmbd: unable to read itable block
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apr 13 21:56:33 localhost kernel: EXT4-fs (sda6): previous I/O error to superblock detected
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apr 13 21:56:33 localhost kernel: Buffer I/O error on dev sda6, logical block 0, lost sync page write
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apr 13 21:56:33 localhost kernel: EXT4-fs error (device sda6) in ext4_reserve_inode_write:5754: IO failure
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apr 13 21:56:33 localhost kernel: EXT4-fs (sda6): previous I/O error to superblock detected
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apr 13 21:56:33 localhost kernel: Buffer I/O error on dev sda6, logical block 0, lost sync page write
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apr 13 21:56:33 localhost kernel: PM: suspend exit
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apr 13 21:56:35 localhost kernel: WARNING: CPU: 2 PID: 688 at fs/buffer.c:1108 mark_buffer_dirty+0xe9/0x100
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apr 13 21:56:35 localhost kernel: Modules linked in: veth hid_generic uhid hid algif_hash algif_skcipher af_alg cmac rfcomm ccm ipt_MASQUERADE nf_nat_masquerade_ipv4 nf_conntrack_netlink nfnetlink xfrm_user xfrm_algo iptable_nat nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_ipv4 xt_addrtype iptable_filter xt_conntrack nf_nat nf_conntrack libcrc32c crc32c_generic br_netfilter bridge stp llc overlay bnep btusb btrtl intel_rapl btbcm btintel x86_pkg_temp_thermal intel_powerclamp bluetooth ecdh_generic kvm_intel uvcvideo videobuf2_vmalloc videobuf2_memops videobuf2_v4l2 videobuf2_core videodev kvm media tun irqbypass snd_hda_codec_realtek crct10dif_pclmul crc32_pclmul ghash_clmulni_intel snd_hda_codec_generic coretemp pcbc aesni_intel aes_x86_64 crypto_simd joydev glue_helper mousedev cryptd msr iTCO_wdt mei_wdt intel_cstate intel_uncore
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apr 13 21:56:35 localhost kernel:  arc4 iwldvm tpm_tis tpm_tis_core mac80211 tpm intel_rapl_perf iwlwifi iTCO_vendor_support wmi_bmof snd_hda_intel snd_hda_codec snd_hda_core snd_hwdep snd_pcm e1000e cfg80211 mei_me psmouse i2c_i801 thinkpad_acpi shpchp snd_timer ptp mei lpc_ich pps_core nvram rfkill fuse battery input_leds snd ac rtc_cmos wmi soundcore evdev mac_hid vboxpci(O) vboxnetflt(O) vboxnetadp(O) vboxdrv(O) acpi_call(O) parport_pc ppdev lp parport sg crypto_user ip_tables x_tables ext4 crc16 mbcache jbd2 fscrypto sr_mod cdrom sd_mod serio_raw atkbd libps2 ahci sdhci_pci xhci_pci libahci ehci_pci sdhci xhci_hcd ehci_hcd libata crc32c_intel led_class scsi_mod mmc_core usbcore usb_common i8042 serio i915 i2c_algo_bit drm_kms_helper syscopyarea sysfillrect sysimgblt fb_sys_fops drm intel_agp intel_gtt agpgart
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apr 13 21:56:35 localhost kernel: CPU: 2 PID: 688 Comm: jbd2/sda6-8 Tainted: G           O     4.15.14-1-MANJARO #1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apr 13 21:56:35 localhost kernel: Hardware name: LENOVO 2392AQU/2392AQU, BIOS G4ETB0WW (2.70 ) 09/26/2017
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apr 13 21:56:35 localhost kernel: RIP: 0010:mark_buffer_dirty+0xe9/0x100
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apr 13 21:56:35 localhost kernel: RSP: 0018:ffffb4a18215bcd8 EFLAGS: 00010246
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apr 13 21:56:35 localhost kernel: RAX: 0000000000a20828 RBX: ffffa300bfd02750 RCX: ffffa2fea42ed8e8
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apr 13 21:56:35 localhost kernel: RDX: ffffa300bfd02750 RSI: ffffa2fea42edf00 RDI: ffffa300bfd02750
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apr 13 21:56:35 localhost kernel: RBP: ffffa300bfd02750 R08: 0000000000000000 R09: ffffa300ad083fc0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apr 13 21:56:35 localhost kernel: R10: 0000000000000000 R11: 0000000000000228 R12: ffffa300bcdfd388
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apr 13 21:56:35 localhost kernel: R13: ffffa2fea42ed780 R14: ffffa300a9361e00 R15: ffffa300bfd02752
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apr 13 21:56:35 localhost kernel: FS:  0000000000000000(0000) GS:ffffa300de280000(0000) knlGS:0000000000000000
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apr 13 21:56:35 localhost kernel: CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apr 13 21:56:35 localhost kernel: CR2: 00007f4688041160 CR3: 00000002de00a005 CR4: 00000000001606e0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apr 13 21:56:35 localhost kernel: Call Trace:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apr 13 21:56:35 localhost kernel:  __jbd2_journal_refile_buffer+0xa3/0xc0 [jbd2]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apr 13 21:56:35 localhost kernel:  jbd2_journal_commit_transaction+0x128e/0x18b0 [jbd2]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apr 13 21:56:35 localhost kernel:  ? sched_clock_cpu+0xe/0xd0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apr 13 21:56:35 localhost kernel:  ? kjournald2+0xc0/0x270 [jbd2]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apr 13 21:56:35 localhost kernel:  kjournald2+0xc0/0x270 [jbd2]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apr 13 21:56:35 localhost kernel:  ? wait_woken+0x80/0x80
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apr 13 21:56:35 localhost kernel:  ? commit_timeout+0x10/0x10 [jbd2]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apr 13 21:56:35 localhost kernel:  kthread+0x113/0x130
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apr 13 21:56:35 localhost kernel:  ? kthread_create_on_node+0x70/0x70
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apr 13 21:56:35 localhost kernel:  ret_from_fork+0x35/0x40
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apr 13 21:56:35 localhost kernel: Code: c0 48 89 c5 74 2c 48 89 c6 48 89 df 31 d2 e8 7f fd ff ff 48 89 df e8 07 77 fb ff 48 8b 7d 00 be 04 00 00 00 5b 5d e9 67 7d ff ff &amp;lt;0f&amp;gt; 0b e9 25 ff ff ff 48 89 df eb bb 90 66 2e 0f 1f 84 00 00 00 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apr 13 21:56:35 localhost kernel: ---[ end trace c1b2e1f90bb5b2b0 ]---
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Погуглив по строке &lt;code&gt;__jbd2_journal_refile_buffer+0xa3/0xc0 [jbd2]&lt;/code&gt; обнаружил:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://bugzilla.redhat.com/show_bug.cgi?id=1562982&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://bugzilla.redhat.com/show_bug.cgi?id=1562982&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;и ссылкой уже на Xwayland:
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://bugzilla.redhat.com/show_bug.cgi?id=1553979&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://bugzilla.redhat.com/show_bug.cgi?id=1553979&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Рекомендуемый WA&lt;/strong&gt;: установить параметр &lt;code&gt;scan&lt;/code&gt; для модуля &lt;code&gt;scsi_mod&lt;/code&gt; в значение &lt;code&gt;sync&lt;/code&gt;.&lt;/p&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;/p&gt;
&lt;ul&gt;
&lt;li&gt;в параметры ядра нужно передать из загрузчика: &lt;code&gt;scsi_mod.scan=sync&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;например, через grub (grub2):
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;редактируем &lt;code&gt;/etc/default/grub&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;исправляем строку:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GRUB_CMDLINE_LINUX_DEFAULT=&amp;#34;... scsi_mod.scan=sync ...&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;сохраняем и выполняем &lt;code&gt;update-grub&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;перезагружаемся&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Если модуль отдельно, то&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;создаём файл &lt;code&gt;/etc/modprobe.d/scsi_mod.conf&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;в него помещаем:
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# WA:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# - https://bugzilla.redhat.com/show_bug.cgi?id=1562982
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# - https://bugzilla.redhat.com/show_bug.cgi?id=1553979
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;options scsi_mod scan=sync
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;и сразу на рабочей системе исправляем параметры налету:
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; sync &amp;gt; /sys/module/scsi_mod/parameters/scan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# или&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; sync &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sudo tee /sys/module/scsi_mod/parameters/scan
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Перезагружаться не обязательно.&lt;/p&gt;
&lt;p&gt;И ждём исправления в апстриме.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Однострочник для изменения времени создания файла</title>
      <link>https://htrd.su/blog/2018/03/16/odnostrochnik_dlja_izmenenija_vremeni_sozdanija_fajla/</link>
      <pubDate>Fri, 16 Mar 2018 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2018/03/16/odnostrochnik_dlja_izmenenija_vremeni_sozdanija_fajla/</guid>
      <description>&lt;p&gt;Есть пачка файлов фотографий, сделанных телефоном вида:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;2018-03-11 09-49-26.JPG
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;2018-03-15 19-34-06.MP4
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;В один прекрасный момент слетело время доступа к файлам. В самом имени файла эта информация и так зашита, так что используем однострочник:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ls &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;while&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;read&lt;/span&gt; line&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;do&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; -n &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$line&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;: &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;dt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$line&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sed &lt;span class=&#34;s1&#34;&gt;&amp;#39;s|&amp;lt;br/&amp;gt;..*$||&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sed &lt;span class=&#34;s1&#34;&gt;&amp;#39;s|_.*$||&amp;#39;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$dt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;time&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$dt&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sed &lt;span class=&#34;s1&#34;&gt;&amp;#39;s|-| |g&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; awk &lt;span class=&#34;s1&#34;&gt;&amp;#39;{printf(&amp;#34;%s%s%s%s%s.%s&amp;#34;, $1, $2, $3, $4, $5, $6)}&amp;#39;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; touch -t &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$time&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$line&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Проверка целостности AUR пакетов после обновления</title>
      <link>https://htrd.su/blog/2018/03/12/proverka_celostnosti_aur_paketov_posle_obnovlenija/</link>
      <pubDate>Mon, 12 Mar 2018 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2018/03/12/proverka_celostnosti_aur_paketov_posle_obnovlenija/</guid>
      <description>&lt;p&gt;Время от времени, после обновления основной системы, обновляются библиотеки и некоторые пакеты, собранные вручную ломаются. Ниже представлена небольшая задумка автоматической проверки таких пакетов после обновления.&lt;/p&gt;
&lt;p&gt;Для начала сделаем скрипт, который будет пробегаться по пакетам, которых нет в репозиториях и применять к ним некоторый набор действий, который позволит понять, что пакет поломан.&lt;/p&gt;
&lt;p&gt;Сам критерий простой: ldd на ELF файле и удостовериться, что нет вхождений &amp;rsquo;not found&#39;.&lt;/p&gt;
&lt;p&gt;Кроме того, мы можем достаточно быстро проверить факт того, что пакет вообще был выброшен, если его нет ни в репозиториях, ни в AUR. К таким пакетам так же будут отнесены все пакеты, поставленные вручную локально.&lt;/p&gt;
&lt;p&gt;Итак, для начала скрипт проверки (
&lt;a href=&#34;https://gist.githubusercontent.com/h4tr3d/06f4c5fa701fb3083864eda92ba6e9fb/raw/aur-check&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;aur-check&lt;/a&gt;):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#!/usr/bin/env bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Ref to the /etc/makepkg.conf PACKAGER&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;PACKAGE_USER&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Alexander Drozdov&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; -e
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;LANG&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;C
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;packages&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;pacman -Qmq&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;orphaned&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;declare&lt;/span&gt; -A broken
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;declare&lt;/span&gt; -A distro
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;aur_info_cower&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	cower -iq --timeout&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;30&lt;/span&gt; -- &lt;span class=&#34;nv&#34;&gt;$packages&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep &lt;span class=&#34;s1&#34;&gt;&amp;#39;^Name&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; awk &lt;span class=&#34;s1&#34;&gt;&amp;#39;{print $3}&amp;#39;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;aur_info_auracle&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	auracle info -F &lt;span class=&#34;s1&#34;&gt;&amp;#39;{name}&amp;#39;&lt;/span&gt; -- &lt;span class=&#34;nv&#34;&gt;$packages&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;aur_info_yay_pacaur&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt; -Siq --aur -- &lt;span class=&#34;nv&#34;&gt;$packages&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep &lt;span class=&#34;s1&#34;&gt;&amp;#39;^Name&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; awk &lt;span class=&#34;s1&#34;&gt;&amp;#39;{print $3}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;aur_info_yay&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	aur_info_yay_pacaur yay
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;aur_info_pacaur&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	aur_info_yay_pacaur pacaur
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;aur_info_detect_backend&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; +e
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	which auracle &amp;gt; /dev/null 2&amp;gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;aur_info_backend&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;auracle&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	which cower &amp;gt; /dev/null 2&amp;gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;aur_info_backend&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;cower&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	which yay &amp;gt; /dev/null 2&amp;gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;aur_info_backend&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;yay&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	which pacaur &amp;gt; /dev/null 2&amp;gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;aur_info_backend&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;pacaur&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; -e
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;check_orphaned&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;list1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;mktemp -p /tmp -u XXXXXXXX&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;list2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;mktemp -p /tmp -u XXXXXXXX&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;trap&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;rm -f &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$list1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$list2&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; RETURN QUIT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    pacman -Qmq &amp;gt; &lt;span class=&#34;nv&#34;&gt;$list1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;nb&#34;&gt;eval&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;aur_info_&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;aur_info_backend&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &amp;gt; &lt;span class=&#34;nv&#34;&gt;$list2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;nv&#34;&gt;orphaned&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;diff -u &lt;span class=&#34;nv&#34;&gt;$list1&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$list2&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep &lt;span class=&#34;s1&#34;&gt;&amp;#39;^-&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep -v &lt;span class=&#34;s1&#34;&gt;&amp;#39;^---&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sed &lt;span class=&#34;s1&#34;&gt;&amp;#39;s|^-||&amp;#39;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# detect tool to ask AUR package info&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;aur_info_detect_backend
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Check for orphaned packages&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; -n &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$aur_info_backend&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; check_orphaned
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Check integrity&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; pkg in &lt;span class=&#34;nv&#34;&gt;$packages&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;    =&amp;gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$pkg&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# Check that package previously maintained by Distro&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;dist_check&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;pacman -Qi &lt;span class=&#34;nv&#34;&gt;$pkg&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep &lt;span class=&#34;s1&#34;&gt;&amp;#39;^Packager&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep -v &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PACKAGE_USER&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;\|Unknown Packager&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; -n &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$dist_check&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        distro&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$pkg&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# Basic check for package breaks, mostly call ldd for libs and binaries&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;files&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;pacman -Qlq &lt;span class=&#34;nv&#34;&gt;$pkg&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; file in &lt;span class=&#34;nv&#34;&gt;$files&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;# Check only executables and skip directories. &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;# Also, skip packages from /opt/ prefix, most of them is a &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;# binary distributed and need a LD_PRELOAD_PATH to be configured&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;# right&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; -x &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$file&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; -a &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; !&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/opt/&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;is_elf&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;file &lt;span class=&#34;nv&#34;&gt;$file&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep ELF &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; -n &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$is_elf&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;c1&#34;&gt;# Apply check&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nv&#34;&gt;tmp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;mktemp /tmp/XXXXXXXXXXXXXXXXXX&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                ldd &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$file&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &amp;gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$tmp&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; 2&amp;gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nv&#34;&gt;is_broken&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;cat &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$tmp&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep &lt;span class=&#34;s1&#34;&gt;&amp;#39;=&amp;gt; not found&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; -n &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$is_broken&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    broken&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$pkg&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;       &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$file&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;:&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    cat &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$tmp&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep &lt;span class=&#34;s1&#34;&gt;&amp;#39;=&amp;gt; not found&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; ts &lt;span class=&#34;s1&#34;&gt;&amp;#39;       &amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                rm -f &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$tmp&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; -n &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$orphaned&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Orphaned packages summary:&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; pkg in &lt;span class=&#34;nv&#34;&gt;$orphaned&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;    &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$pkg&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; &lt;span class=&#34;si&#34;&gt;${#&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;distro&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[@]&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt; -gt &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Previously maintained by the Distro summary:&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; pkg in &lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;!distro[*]&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;    &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$pkg&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; &lt;span class=&#34;si&#34;&gt;${#&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;broken&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[@]&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt; -gt &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Broken packages summary:&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; pkg in &lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;!broken[*]&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;    &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$pkg&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Поместите его в &lt;code&gt;/usr/local/bin/&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Будет определённое неудобство при недоступности сети, при проверке брошенных пакетов (запрос к AUR). Я думаю исправить это в будущем.&lt;/p&gt;
&lt;p&gt;А теперь HOOK для &lt;code&gt;libaplm&lt;/code&gt; (
&lt;a href=&#34;https://gist.githubusercontent.com/h4tr3d/06f4c5fa701fb3083864eda92ba6e9fb/raw/99-99-aur.hook&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;99-99-aur.hook&lt;/a&gt;):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-ini&#34; data-lang=&#34;ini&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# /usr/share/libalpm/hooks/99-99-aur.hook&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# /etc/pacman.d/hooks/99-99-aur.hook&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;[Trigger]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;Operation&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;Upgrade&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;Type&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;Package&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;Target&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;*&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;[Action]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;Description&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Check non-repo packages integrity&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;Depends&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;auracle&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;When&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;PostTransaction&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;Exec&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;/usr/local/bin/aur-check&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Обратите внимание, я настроил запуск проверки только на операции обновления пакетов, так как установка дополнительного пакета не должна ломать существующие, а удаление должно корректно отследиться через механизм зависимостей. А если этого не произошло, то стоит обратить внимание разработчика пакета на эти нюансы.&lt;/p&gt;
&lt;p&gt;Сам HOOK нужно положить в &lt;code&gt;/etc/pacman.d/hooks/&lt;/code&gt; (&lt;code&gt;/usr/share/libalpm/hooks/&lt;/code&gt; предназначен для установки хуков через пакетный менеджер).&lt;/p&gt;
&lt;p&gt;Сам скрипт и хук оформил в виде GitHub Gist: 
&lt;a href=&#34;https://gist.github.com/h4tr3d/06f4c5fa701fb3083864eda92ba6e9fb&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt; AUR basic integrity check &lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Внезапно про xf86-video-intel от Debian</title>
      <link>https://htrd.su/blog/2018/02/07/vnezapno_pro_xf86-video-intel_ot_debian/</link>
      <pubDate>Wed, 07 Feb 2018 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2018/02/07/vnezapno_pro_xf86-video-intel_ot_debian/</guid>
      <description>&lt;p&gt;Сылка:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://packages.debian.org/sid/x11/xserver-xorg-video-intel&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://packages.debian.org/sid/x11/xserver-xorg-video-intel&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Цитата:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Пакет: xserver-xorg-video-intel (2:2.99.917+git20171229-1 и другие)
&amp;hellip;
Не рекомендуется использование данного драйвера с видеокартами, выпущенными позднее 2007 года: вместо этого удалите его, и графический сервер будет использовать встроенный драйвер установки режимов.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Не рекомендуется.&lt;/p&gt;
&lt;p&gt;Замена: Xorg драйвер &lt;code&gt;modesetting&lt;/code&gt;, встроенный драйвер, работающий со всеми KMS совместимыми драйверами в ядре.&lt;/p&gt;
&lt;p&gt;По мотивам:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://www.reddit.com/r/archlinux/comments/4cojj9/it_is_probably_time_to_ditch_xf86videointel/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://www.reddit.com/r/archlinux/comments/4cojj9/it_is_probably_time_to_ditch_xf86videointel/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;При этом мнения по поводу адекватности замены расходятся (на правах заметок по разным источникам из сети):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;По данным тестов Phoronix, ускорение Glamor существенно проигрывает SNA от Intel в производительности и примерно сопоставимо с UXA в части 2D. При этом единогласно сходятся, что SNA до сих пор глючная и бажная, а путь современных графических библиотек в использование 3D:
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://www.phoronix.com/scan.php?page=article&amp;amp;item=intel_2dxorg30_ubuntu1404&amp;amp;num=1&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Intel 2D GLAMOR vs. UXA vs. SNA On Ubuntu 14.04&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://www.phoronix.com/scan.php?page=article&amp;amp;item=intel-modesetting-2017&amp;amp;num=1&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Intel vs. Modesetting X.Org DDX Performance Impact&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Нашёл ровно одно утверждения без подтверждения фактами, что Glamor может выедать больше батарейки (кстати, этот режим ускорения можно включить и в драйвере 
&lt;a href=&#34;https://www.freedesktop.org/wiki/Software/Glamor/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Intel&lt;/a&gt;). Реальных сравнений у меня нет.&lt;/li&gt;
&lt;li&gt;Стабильность и реальная скорость обоих драйверов (и трёх вариантов ускорения на драйвере Intel) разнится от железки к железке.&lt;/li&gt;
&lt;li&gt;Исправлений для старых карт в драйвере Intel почти нет, хотя и рекомендуется к использованию как раз для старых карт.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ссылки:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://wiki.gentoo.org/wiki/Intel&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://wiki.gentoo.org/wiki/Intel&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Тут хорошая табличка по поколениям графики и соответствующим архитектурам. Ivy Bridge, это HD4000 и Gen7. Debian рекомендует &lt;code&gt;modesetting&lt;/code&gt; новее 2007 года, Gentoo говорит более конкретно (по ссылке выше): Gen 4+.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Linux утилиты для стресс-тестирования системы</title>
      <link>https://htrd.su/blog/2018/02/06/linux_utility_dlja_stress-testirovanija_sistemy/</link>
      <pubDate>Tue, 06 Feb 2018 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2018/02/06/linux_utility_dlja_stress-testirovanija_sistemy/</guid>
      <description>&lt;p&gt;Будет пополняться. В контексте изучения проблемы:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://community.spiceworks.com/topic/152058-what-causes-a-laptop-to-turn-on-then-turn-off-again&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://community.spiceworks.com/topic/152058-what-causes-a-laptop-to-turn-on-then-turn-off-again&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;перегрева нет&lt;/li&gt;
&lt;li&gt;батарея не влияет&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://bugzilla.kernel.org/show_bug.cgi?id=109051&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://bugzilla.kernel.org/show_bug.cgi?id=109051&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;cpu&#34;&gt;CPU&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Кладезь: 
&lt;a href=&#34;https://wiki.archlinux.org/index.php/Stress_Test&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://wiki.archlinux.org/index.php/Stress_Test&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;stress&lt;/code&gt; - есть в репозиториях&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;gpu&#34;&gt;GPU&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://www.pcsuggest.com/gpu-benchmarking-and-stress-testing-in-linux/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://www.pcsuggest.com/gpu-benchmarking-and-stress-testing-in-linux/&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;glxgears&lt;/li&gt;
&lt;li&gt;glmark2&lt;/li&gt;
&lt;li&gt;furmark из комплекта GpuTest&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;наблюдения&#34;&gt;Наблюдения&lt;/h2&gt;
&lt;p&gt;К слову сказать, пока никаких реакций на стресс система не даёт. Судя по всему проблемы в интегрированном видео от Intel и не способностью правильно ходить между стейтами энергопотребления (pstates). Т.е. возможно нужно генерировать переменную нагрузку на видеоподсистему, что бы добиться воспроизведения проблемы.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>PlantUML редакторы</title>
      <link>https://htrd.su/blog/2018/02/06/plantuml_redaktory/</link>
      <pubDate>Tue, 06 Feb 2018 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2018/02/06/plantuml_redaktory/</guid>
      <description>&lt;p&gt;В первую очередь для рабочего стола, не для WEB.&lt;/p&gt;
&lt;p&gt;На текущий момент мне понравилось три решения, которые могут работать с отдельными файлами без создания проектов и так далее:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PlantUML QEditor&lt;/li&gt;
&lt;li&gt;Расширение для Visual Studio Code - 
&lt;a href=&#34;https://marketplace.visualstudio.com/items?itemName=jebbs.plantuml#user-content-markdown-integrating&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;PlantUML&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Плагин для NetBeans&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;В первом не хватает подсветки синтаксиса. Третий достаточно тяжеловат (всё же сам NetBeans сам по себе - IDE), так что второй вариант - пока мой выбор. Раньше Visual Studio Code не использовал, и сейчас он больше для редактирования PlatnUML с предпросмотром, но со своими задачами справляется достойно. Не хватает, правда, Assistant, как в PlantUML QEditor.&lt;/p&gt;
&lt;p&gt;PS в IDEA есть достаточно удобный плагин, особенно если в рамках проекта нужно диаграммы думать. Мне же больше по душе запуск без IDE проекта, дабы не отвлекаться.
PPS для WEB: 
&lt;a href=&#34;https://www.plantuml.com/plantuml/form&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;www.plantuml.com/plantuml/form&lt;/a&gt; быстро сгенерить или посмотреть.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>FFmpeg: генерация синусоиды на N каналов</title>
      <link>https://htrd.su/blog/2018/01/31/ffmpeg_generacija_sinusoidy_na_n_kanalov/</link>
      <pubDate>Wed, 31 Jan 2018 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2018/01/31/ffmpeg_generacija_sinusoidy_na_n_kanalov/</guid>
      <description>&lt;p&gt;На два канала:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ffmpeg -f lavfi -i &lt;span class=&#34;s2&#34;&gt;&amp;#34;sine=f=1000:sample_rate=48000&amp;#34;&lt;/span&gt; -filter_complex &lt;span class=&#34;s2&#34;&gt;&amp;#34;[0][0]amerge&amp;#34;&lt;/span&gt; -c:a pcm_s24le -f alsa &lt;span class=&#34;s2&#34;&gt;&amp;#34;hw:1,0&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;для увеличения: добавляем &lt;code&gt;[0]&lt;/code&gt; перед &lt;code&gt;amerge&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Можно генерировать и разные синусы по кадому каналу, просто увеличиваем число &lt;code&gt;lavfi&lt;/code&gt; входов:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ffmpeg -f lavfi -i &lt;span class=&#34;s2&#34;&gt;&amp;#34;sine=f=1000:sample_rate=48000&amp;#34;&lt;/span&gt; &amp;lt;br/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       -f lavfi -i &lt;span class=&#34;s2&#34;&gt;&amp;#34;sine=f=400:sample_rate=48000&amp;#34;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       --filter_complex &lt;span class=&#34;s2&#34;&gt;&amp;#34;[0][1]amerge&amp;#34;&lt;/span&gt; &amp;lt;br/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       --c:a pcm_s24le -f alsa &lt;span class=&#34;s2&#34;&gt;&amp;#34;hw:1,0&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;и не забываем в этом случае менять номера входов для &lt;code&gt;amerge&lt;/code&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>PlantUML: временные диаграммы</title>
      <link>https://htrd.su/blog/2018/01/28/plantuml_vremennye_diagrammy/</link>
      <pubDate>Sun, 28 Jan 2018 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2018/01/28/plantuml_vremennye_diagrammy/</guid>
      <description>&lt;p&gt;Как-то пропустил сей момент, но в PlantUML появились Временные диаграммы (Timing Diagram):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://plantuml.com/timing-diagram&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://plantuml.com/timing-diagram&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Жаль, что когда они были ооооочень нужны (сейчас не так), удобного инструмента я не нашёл.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>USB 3.0, USB 3.1 Gen1 и USB 3.1 Gen2</title>
      <link>https://htrd.su/blog/2018/01/21/usb_3.0_usb_3.1_gen1_i_usb_3.1_gen2/</link>
      <pubDate>Sun, 21 Jan 2018 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2018/01/21/usb_3.0_usb_3.1_gen1_i_usb_3.1_gen2/</guid>
      <description>&lt;p&gt;Возникает путаница иногда что где и когда. Коротко:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;USB 3.0 == USB 3.1 Gen1 (SuperSpeed), скорость до 5 ГБит/с. По сути - 
&lt;a href=&#34;http://www.usb.org/developers/ssusb&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;ребрендинг и переименование&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;USB 3.1 == USB 3.1 Gen2 (SuperSpeed+), скорость до 10 ГБит/с.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;По поводу коннектора Type-C: его появление связывают с появлением USB 3.1 Gen2. Но! Этим коннектором вполне может быть осуществлено подключение в устройствах, которые поддерживают только USB 3.1 Gen1, USB 2.x или даже USB 1.x (для 1.x и 2.x используются одинаковые дифпары независимые от режима 3.x). Иными словами, наличие Type-C коннектора не говорит о поддержки USB 3.1 Gen2, особенно, когда данный разъём используется на устройстве, а не на хосте, хотя в последнем случае тоже нужно проверять внимательно спеки на материнку или лаптоп.&lt;/p&gt;
&lt;p&gt;По поводу коннектора Type-A: провода для USB 3.1 Gen2 никак не изменились, поэтому применение коннектора Type-A вполне себе возможно на хостах. Правда в текущем виде обычно наблюдается такая картина:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;чёрные коннекторы - USB 2.x&lt;/li&gt;
&lt;li&gt;синие коннекторы - USB 3.1 Gen1&lt;/li&gt;
&lt;li&gt;Type-C коннекторы - USB 3.1 Gen2&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Но есть платы расширения, которые использую коннектор Type-A для USB 3.1. Gen2. Т.е. снова - нужно смотреть спецификации.&lt;/p&gt;
&lt;p&gt;Вообще, появление Type-C это очень хорошая работа над ошибками для устранения идиотских варианта Micro Type-B (Micro-B, Mini-B выполнен вполне сносно) в варианте USB 3.1 Gen1: они отличаются большими габаритами и низкой механической прочностью:
&lt;img src=&#34;https://htrd.su/img//post/2018/01/21/usb-connector-types.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Правда установка данного типа коннектора на хост&amp;hellip; Мне не по душе. Да, решаются две проблемы:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;симметричность кабеля с обеих сторон: можно подключать устройство как к хосту, так и к другому устройству, если поддерживается OTG и использовать для этого один кабель,&lt;/li&gt;
&lt;li&gt;симметричность самого коннектора как такового,
но вот его прочность (хоть маркетинговый булшит вещает иначе) значительно ниже Type-A.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Моё мнение (на которое всем, ессесно, пофиг):&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Type-A - оставить для хоста&lt;/li&gt;
&lt;li&gt;Type-B - оставить для устройств, где необходима повышенная механическая прочность&lt;/li&gt;
&lt;li&gt;Type-C - оставить для всех остальных устройств&lt;/li&gt;
&lt;/ol&gt;</description>
    </item>
    
    <item>
      <title>QMapShack: QMapTool</title>
      <link>https://htrd.su/blog/2018/01/14/qmapshack_qmaptool/</link>
      <pubDate>Sun, 14 Jan 2018 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2018/01/14/qmapshack_qmaptool/</guid>
      <description>&lt;p&gt;Сегодня пришло уведомление о комментарии к тикету 
&lt;a href=&#34;https://bitbucket.org/maproom/qmapshack/issues/111/map-referencing-tool-like-map-create-edit#comment-42594178&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;111&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;In the meanwhile QMapShack has a new brother called QMapTool. QMapTool is for referencing maps. It&amp;rsquo;s now part as a sub-repository of QMapShack.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;И вот ссылка:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://bitbucket.org/maproom/qmaptool&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://bitbucket.org/maproom/qmaptool&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Если коротко: отдельная программа для привязки карт, то что было в QLandKarteGT в виде встроенного функционала, теперь в виде внешней утилиты.&lt;/p&gt;
&lt;p&gt;Пока ещё не тестировал. В AUR mercurial версия QMapShack автоматом подтянет и QMapTool, когда будет релиз в Community - непонятно.&lt;/p&gt;
&lt;p&gt;А так, ура!&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Соглашение о вызовах в ядре Linux (AMD64)</title>
      <link>https://htrd.su/blog/2017/12/22/soglashenie_o_vyzovax_v_jadre_linux_amd64/</link>
      <pubDate>Fri, 22 Dec 2017 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2017/12/22/soglashenie_o_vyzovax_v_jadre_linux_amd64/</guid>
      <description>&lt;p&gt;Просто ссылка:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.ucw.cz/~hubicka/papers/abi/node33.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;AMD64 Linux Kernel Conventions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Более полная подборка для x86:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://en.wikipedia.org/wiki/X86_calling_conventions&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;x86 calling conventions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;И более обобщённая информация (в т.ч. ARM):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://wiki.osdev.org/Calling_Conventions&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://wiki.osdev.org/Calling_Conventions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>QtC: снова Baremetal и новые GDB</title>
      <link>https://htrd.su/blog/2017/12/08/qtc_snova_baremetal_i_novye_gdb/</link>
      <pubDate>Fri, 08 Dec 2017 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2017/12/08/qtc_snova_baremetal_i_novye_gdb/</guid>
      <description>&lt;p&gt;В продолжение 
&lt;a href=&#34;https://htrd.su/blog/2017/08/25/qt_creator_baremetal_i_svjazka_gdb_7.7.1_openocd/&#34;&gt;post/2017/08/25/qt_creator_baremetal_i_svjazka_gdb_7.7.1_openocd&lt;/a&gt;. Снова косяк и снова QtC не имеет прямого отношения к нему. Судя по всему, в самом GDB какие-то гонки.&lt;/p&gt;
&lt;p&gt;Проблема проявляется на этот раз в том, что подобные сообщения от отсутствующем контексте исполнения появляются после попытки останова исполнения кода (для отладки), при этом, какого-то чёрта, появляются сообщения об вновь образовавшемся и тут же умершем треде. GDB не может уже потом ничего сделать, а QtC следом тоже сходит с ума, не зная, в каком состоянии что находится.&lt;/p&gt;
&lt;p&gt;В общем, пока откатился на GDB 7.8 от Linaro: 
&lt;a href=&#34;https://aur.archlinux.org/packages/arm-none-eabi-gdb-linaro&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://aur.archlinux.org/packages/arm-none-eabi-gdb-linaro&lt;/a&gt;, оно, по крайней мере, работает.&lt;/p&gt;
&lt;p&gt;Связанные ссылки и обсуждения:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://github.com/gnu-mcu-eclipse/eclipse-plugins/issues/186&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/gnu-mcu-eclipse/eclipse-plugins/issues/186&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://github.com/gnu-mcu-eclipse/eclipse-plugins/issues/167&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/gnu-mcu-eclipse/eclipse-plugins/issues/167&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;PS текущая связка: GDB 7.8 + OpenOCD 0.10.0&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>KDE5: создание Samba-шар из Dolphin</title>
      <link>https://htrd.su/blog/2017/12/07/kde5_sozdanie_samba-shar_iz_dolphin/</link>
      <pubDate>Thu, 07 Dec 2017 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2017/12/07/kde5_sozdanie_samba-shar_iz_dolphin/</guid>
      <description>&lt;p&gt;И не только.&lt;/p&gt;
&lt;p&gt;Для начала выполняем шаги, описанные в руководстве:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://wiki.archlinux.org/index.php/samba_%28%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9%29#.D0.A1.D0.BE.D0.B7.D0.B4.D0.B0.D0.BD.D0.B8.D0.B5_.D1.80.D0.B5.D1.81.D1.83.D1.80.D1.81.D0.BE.D0.B2_.D0.BE.D0.B1.D1.89.D0.B5.D0.B3.D0.BE_.D0.B4.D0.BE.D1.81.D1.82.D1.83.D0.BF.D0.B0_.D0.BE.D1.82_.D0.B8.D0.BC.D0.B5.D0.BD.D0.B8_.D0.BE.D0.B1.D1.8B.D1.87.D0.BD.D0.BE.D0.B3.D0.BE_.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D1.82.D0.B5.D0.BB.D1.8F&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Создание ресурсов общего доступа от имени обычного пользователя&lt;/a&gt;, или&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://wiki.archlinux.org/index.php/samba#Creating_usershare_path&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Creating usershare path&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Если коротко и коспективно:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Создаём директорию &lt;code&gt;usershare&lt;/code&gt;: &lt;code&gt;mkdir -p /var/lib/samba/usershare&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Создаём группу &lt;code&gt;sambashare&lt;/code&gt;: &lt;code&gt;groupadd sambashare&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Правим права доступа к директории:```
chown root:sambashare /var/lib/samba/usershare
chmod 1770 /var/lib/samba/usershare&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;mf&#34;&gt;1.&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;Проверяем&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;конфигурацию&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;smb&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;conf&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;```&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;global&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;usershare&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;path&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;samba&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usershare&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;usershare&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;max&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;shares&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;usershare&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;allow&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;guests&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;yes&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;usershare&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;owner&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;only&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;yes&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol&gt;
&lt;li&gt;Разрешаем вашему пользователю создавать шары: &lt;code&gt;usermod -a -G sambashare $USER&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Рестартуем демоны &lt;code&gt;smbd&lt;/code&gt; и &lt;code&gt;nmbd&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Перелогиниваемся в систему&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Как минимум теперь вы сможете управлять пользовательскими шарами, используя командную строку:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;net usershare help
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Для использования этого функционала через Dolphin, потребуется поставить пакет &lt;code&gt;kdenetwork-filesharing&lt;/code&gt;:
pacman -S kdenetwork-filesharing&lt;/p&gt;
&lt;p&gt;После чего в свойствах директории появится вкладка, ответственная за общий доступ к содержимому директории.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>KDE5, pulseaudio, индикатор громкости и qmmp</title>
      <link>https://htrd.su/blog/2017/11/13/kde5_pulseaudio_indikator_gromkosti_i_qmmp/</link>
      <pubDate>Mon, 13 Nov 2017 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2017/11/13/kde5_pulseaudio_indikator_gromkosti_i_qmmp/</guid>
      <description>&lt;p&gt;В qmmp есть плагин глобальных клавиш, который может обрабатывать кнопки переключения треков, паузы, проигрывания и остановки. Помимо этого он может перехватывать клавиши управления громкостью, выключения динамиков. И делает он это по умолчанию.&lt;/p&gt;
&lt;p&gt;Так вот, это поведения очень нехорошо дружит с плазмоидом, который через трей выводит индикатор громкости. Точнее начинает глючить функционал, который собственно и обрабатывает мультимедийные кнопки управления громкостью и выводит OSD уведомление на экран.&lt;/p&gt;
&lt;p&gt;Судя по всему qmmp умудряется переопределить глобальный хук и полностью получает управление этими кнопками. До плазмоида попросту не доходят события. А так как подписка происходит при старте плазмоида, то и после выхода из qmmp обработка не возвращается на свои места.&lt;/p&gt;
&lt;p&gt;Лечение простое:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;в настройках qmmp для плагина глобальных клавиш убрать реакцию на кнопки управления громкостью.&lt;/li&gt;
&lt;li&gt;открыть настройки трея и выключить и снова включить индикатор громкости.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;PS подобное наблюдается и при использовании kmix. Более того, управления перехватывает последний запущенный механизм: или плазмоид или kmix. При закрытии одного из них, рекомендую перезагрузить оставшийся.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>KDE5: иконки в трее</title>
      <link>https://htrd.su/blog/2017/11/10/kde5_ikonki_v_tree/</link>
      <pubDate>Fri, 10 Nov 2017 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2017/11/10/kde5_ikonki_v_tree/</guid>
      <description>&lt;p&gt;На днях заметил, что часть приложений время от времени перестают рисовать свои иконки в трее. С одной стороны, xembed - deprecated, но, судя по всему, плазма как-то пытается его использовать и отображать иконки в трее для &amp;ldquo;устаревших&amp;rdquo; приложений. Но не всегда это получается (ниже чуть подробнее).&lt;/p&gt;
&lt;p&gt;По сути, нормально работать будут только приложения, которые поддерживают appindicator api.&lt;/p&gt;
&lt;h2 id=&#34;проблемные-приложения&#34;&gt;Проблемные приложения&lt;/h2&gt;
&lt;p&gt;Среди приложений, которые отказались отображать иконки:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Skype Preview&lt;/li&gt;
&lt;li&gt;Wire&lt;/li&gt;
&lt;li&gt;Telegram Desktop (официальная бинарная сборка)&lt;/li&gt;
&lt;li&gt;Slack&lt;/li&gt;
&lt;li&gt;Insync&lt;/li&gt;
&lt;li&gt;Zim&lt;/li&gt;
&lt;li&gt;DavMail&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;libappindicator-gtk2&#34;&gt;libappindicator-gtk2&lt;/h2&gt;
&lt;p&gt;Skype (в том числе Ghetto Skype), Wire, Telegram Desktop лечатся путём установки libappindicator-gtk2 (речь про Arch и Manjaro):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pacman -S libappindicator-gtk2
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;sni-qt&#34;&gt;sni-qt&lt;/h2&gt;
&lt;p&gt;Qt4-based приложения лечатся путём установки sni-qt:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pacman -S sni-qt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;davmail-java&#34;&gt;Davmail, Java&lt;/h2&gt;
&lt;p&gt;А вот для Davmail, который написан на Java находим такой ответ:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://sourceforge.net/p/davmail/support-requests/258/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://sourceforge.net/p/davmail/support-requests/258/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Позволю процитировать:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;There is still not standard support in java for appindicator API. However with DavMail 4.7.0 your can use the new -notray command line option:
davmail -notray&lt;/p&gt;
&lt;p&gt;See 
&lt;a href=&#34;http://davmail.sourceforge.net/linuxsetup.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://davmail.sourceforge.net/linuxsetup.html&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Т.е. стандартного пути решения проблемы не существует.&lt;/p&gt;
&lt;h2 id=&#34;xembed-sni-proxy&#34;&gt;XEmbed SNI proxy&lt;/h2&gt;
&lt;p&gt;Пакет plasma-workspace содержит в себе программку, которая позволяет xembed приложения сделать доступными в окружении плазмы: xembedsniproxy. Данное приложение должно запускаться автоматически при старте KDE через файл:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/etc/xdg/autostart/xembedsniproxy.desktop
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;но по какой-то причине это не всегда происходит. С причиной этой ещё предстоит разобраться, возможно стартует слишком рано, не находит чего-то и аварийно завершается. На это наводит наблюдение, что если KDE перестартовать, то иконки начинают рисоваться как нужно в большинстве случаев.&lt;/p&gt;
&lt;p&gt;Пока же, можно вручную запустить, что излечивает приложения из списка выше:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Slack&lt;/li&gt;
&lt;li&gt;Zim&lt;/li&gt;
&lt;li&gt;Insync&lt;/li&gt;
&lt;li&gt;Davmail&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;вместо-заключения&#34;&gt;Вместо заключения&lt;/h2&gt;
&lt;p&gt;Неплохая заметка &amp;ldquo;Всё о зоопарке треев&amp;rdquo;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://www.linux.org.ru/forum/talks/9556461&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://www.linux.org.ru/forum/talks/9556461&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Как проще проиграть звук с нескольких источников в ffplay?</title>
      <link>https://htrd.su/blog/2017/10/04/kak_prosche_proigrat_zvuk_s_neskolkix_istochnikov_v_ffplay/</link>
      <pubDate>Wed, 04 Oct 2017 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2017/10/04/kak_prosche_proigrat_zvuk_s_neskolkix_istochnikov_v_ffplay/</guid>
      <description>&lt;p&gt;Я делаю так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ffmpeg -f v4l2 -i /dev/video0 -f alsa -i hw:1 -c:v copy -c:a copy -f matroska - &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; ffplay -autoexit -f matroska -
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;matroska&lt;/code&gt; может запаковать RAW/YUV/RGB данные, поэтому она. MPEG-TS не может, поэтому не подходит.&lt;/p&gt;
&lt;p&gt;Или не менее наркоманский вариант, используя только FFMPEG:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ffmpeg -f v4l2 -i /dev/video0 -f alsa -i hw:1 -vcodec rawvideo -pix_fmt yuv420p -c:a copy -f sdl2 default -f alsa default
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Конвертация в &lt;strong&gt;yuv420p&lt;/strong&gt; нужна для SDL2.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>C&#43;&#43;: операторы сравнения для структур</title>
      <link>https://htrd.su/blog/2017/09/29/c_operatory_sravnenija_dlja_struktur/</link>
      <pubDate>Fri, 29 Sep 2017 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2017/09/29/c_operatory_sravnenija_dlja_struktur/</guid>
      <description>&lt;p&gt;Памятка:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://stackoverflow.com/questions/3882467/defining-operator-for-a-struct&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://stackoverflow.com/questions/3882467/defining-operator-for-a-struct&lt;/a&gt; (второй ответ)&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.cplusplus.com/reference/tuple/tuple/operators/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.cplusplus.com/reference/tuple/tuple/operators/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Т.е. используя &lt;code&gt;std::tie()&lt;/code&gt; вполне, без труда и пыли, можно сделать операторы сравнения для сложных структур. Сложности могут возникнуть, если нужно переопределить операторы сравнения для отдельных элементов (например: критерии сравнения строк).&lt;/p&gt;
&lt;p&gt;Почему &lt;code&gt;tie&lt;/code&gt;, а не напрямую &lt;code&gt;tuple&lt;/code&gt;? &lt;code&gt;tie&lt;/code&gt; захватывает аргументы по ссылке - экономия на копировании.&lt;/p&gt;
&lt;p&gt;Пример:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-C++&#34; data-lang=&#34;C++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;bool&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;operator&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Foo&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;l&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Foo&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tie&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;l&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;l&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;l&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tie&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Я делаю через макрос вспомогательный:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-C++&#34; data-lang=&#34;C++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;bool&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;operator&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Foo&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;l&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Foo&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#define WRAP(x) std::tie(x.a, x.b, x.c)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;WRAP&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;l&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;WRAP&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#undef WRAP
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Совместное использование ALSA и PulseAudio</title>
      <link>https://htrd.su/blog/2017/09/26/sovmestnoe_ispolzovanie_alsa_i_pulseaudio/</link>
      <pubDate>Tue, 26 Sep 2017 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2017/09/26/sovmestnoe_ispolzovanie_alsa_i_pulseaudio/</guid>
      <description>&lt;p&gt;Когда PulseAudio стартует, оно захватывает устройства и если пробуем запустить какое-то приложение, которое может только ALSA, то получим сообщение о невозможности открыть устройство, так как оно уже занято.&lt;/p&gt;
&lt;p&gt;Что бы решить проблему нужна пара простых (по факту, но не по пути, которым к ним пришёл) шагов. Но для начала нужно посмотреть соответствующий раздел в вики Арчика: 
&lt;a href=&#34;https://wiki.archlinux.org/index.php/PulseAudio#ALSA.2Fdmix_without_grabbing_hardware_device&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://wiki.archlinux.org/index.php/PulseAudio#ALSA.2Fdmix_without_grabbing_hardware_device&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Идея проста: сказать пульсе работать через dmix для воспроизведения и через dsnoop для записи.&lt;/p&gt;
&lt;p&gt;Что бы не гадить в системные файлы, будем настраивать для отдельного пользователя (при желании, можно в /etc/skel добавить).&lt;/p&gt;
&lt;p&gt;Для начала нужно научить саму ALSA ходить в dmix/dsnoop по умолчанию. Правим файл ~/.asoundrc:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pcm.!default {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    type plug
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    slave.pcm &amp;#34;duplex&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pcm.duplex {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    type asym
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    playback.pcm &amp;#34;dmix&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    capture.pcm &amp;#34;dsnoop&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Тут используется 
&lt;a href=&#34;http://alsa.opensrc.org/Asym&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;asym&lt;/a&gt;, дабы соединить dmix и dsnoop и перезаписывается правило для дефолтного аудио устройства.&lt;/p&gt;
&lt;p&gt;Следующим шагом правим файл ~/.config/pulse/default.pa:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#!/usr/bin/pulseaudio -nF&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;load&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;module&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;module&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;alsa&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sink&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;device&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dmix&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;load&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;module&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;module&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;alsa&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;source&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;device&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dsnoop&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# include upstream settings&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;include&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;etc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pulse&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pa&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Set defaults to our mix devices&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sink&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;alsa_output&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dmix&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;source&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;alsa_input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dsnoop&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Всего пара штрихов добавленная к тому, что было в арчевики. Если не укажем дефолты для воспроизведения и записи, то будет модулем udev загружена карта, и дефолт будет сдвинут на неё. В результате ничего хорошего не получим.&lt;/p&gt;
&lt;p&gt;Проверить воспроизведение просто, например при помощи VLC:
vlc some_file.wav &amp;ndash;aout=pulse
vlc some_file.wav &amp;ndash;aout=alsa&lt;/p&gt;
&lt;p&gt;Запись:
ffmpeg -f pulse -i default -y out_pulse.wav
ffmpeg -f alsa -i default -y out_alsa.wav&lt;/p&gt;
&lt;h2 id=&#34;полезные-ссылки-и-команды&#34;&gt;Полезные ссылки и команды&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;команды default.pa: 
&lt;a href=&#34;https://manned.org/pulse-cli-syntax.5&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://manned.org/pulse-cli-syntax.5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;список устройств записи (pulse): &lt;code&gt;pacmd list-sources&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;список устройств воспроизведение (pulse): &lt;code&gt;pacmd list-sinks&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>С днём программиста!</title>
      <link>https://htrd.su/blog/2017/09/13/s_dnjom_programmista/</link>
      <pubDate>Wed, 13 Sep 2017 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2017/09/13/s_dnjom_programmista/</guid>
      <description>&lt;p&gt;Собственно - сабж!&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Pacman: информация по пакетам, установленным как зависимости...</title>
      <link>https://htrd.su/blog/2017/09/07/pacman_informacija_po_paketam_ustanovlennym_kak_zavisimosti/</link>
      <pubDate>Thu, 07 Sep 2017 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2017/09/07/pacman_informacija_po_paketam_ustanovlennym_kak_zavisimosti/</guid>
      <description>&lt;p&gt;&amp;hellip;и не нужные никакому пакету.&lt;/p&gt;
&lt;p&gt;На случай, если что-то удалялось как &lt;code&gt;pacman -R пакет&lt;/code&gt; вместо &lt;code&gt;pacman -Rs пакет&lt;/code&gt;:&lt;/p&gt;
&lt;p&gt;DEL:&lt;/p&gt;
&lt;del&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pacman -Qd | awk &amp;#39;{print $1}&amp;#39; | xargs -I{} bash -c &amp;#39;cnt=$(LANG=C pacman -Qi {} | grep &amp;#34;Required By&amp;lt;br/&amp;gt;|Optional For&amp;#34; | grep None | wc -l); (test $cnt -eq 2 &amp;amp;&amp;amp; echo &amp;#34;{}&amp;#34;)&amp;#39; | xargs -I{} bash -c &amp;#39;(pacman -Qi {};pacaur -Sii {};echo ================:simple_smile:&amp;#39; 2&amp;gt;&amp;amp;1 | less -R
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/del&gt;
&lt;p&gt;Спасибо Романычу, просто список пакетов:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pacman -Qtdq
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;и с описанием, как в уродстве выше (без запроса к Sync базе или AUR можно просто: &lt;code&gt;pacman -Qtdqi&lt;/code&gt;):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pacman -Qtdq &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs -I&lt;span class=&#34;o&#34;&gt;{}&lt;/span&gt; bash -c &lt;span class=&#34;s1&#34;&gt;&amp;#39;(pacman -Qi {};pacaur -Sii {};echo ================:simple_smile:&amp;#39;&lt;/span&gt; 2&amp;gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; less -R
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;pacaur используется, что бы запросить информацию для AUR пакетов.&lt;/p&gt;
&lt;p&gt;Если какой-то пакет в этом списке уже нужен как самостоятельная единица, то можно снять пометку:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pacman -S --asexplicit пакет
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;del&gt;Теперь вопрос: а как проще?&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;ЗЫ пакеты, которые не требуются никаким другим пакетом можно получить просто выполнив &lt;code&gt;pacman -Qt&lt;/code&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Bioshock 1, 2 Localization reverse</title>
      <link>https://htrd.su/blog/2017/09/01/bioshok_1_2_localization_reverse/</link>
      <pubDate>Fri, 01 Sep 2017 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2017/09/01/bioshok_1_2_localization_reverse/</guid>
      <description>&lt;p&gt;Вроде не делал анонс&amp;hellip;&lt;/p&gt;
&lt;p&gt;Серия старых скринкастов, описывающая процесс разбора формата файлов локализации игр Boishock 1 и 2, создания библиотеки для распаковки/паковки и графического кросс-платформенного архиватора.&lt;/p&gt;
&lt;p&gt;Залито на ютуб, что бы не занимало место на диске. Плюс ценность сомнительная, что бы делать более правильный бекап :wink:&lt;/p&gt;
&lt;p&gt;Ссыль: 
&lt;a href=&#34;https://www.youtube.com/playlist?list=PLUrplWzJ_-EupzIVpgfRlarNjN0zcarpr&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://www.youtube.com/playlist?list=PLUrplWzJ_-EupzIVpgfRlarNjN0zcarpr&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Мемориз: зубчатый шпатель</title>
      <link>https://htrd.su/blog/2017/08/29/memoriz_zubchatyj_shpatel/</link>
      <pubDate>Tue, 29 Aug 2017 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2017/08/29/memoriz_zubchatyj_shpatel/</guid>
      <description>&lt;p&gt;Используется для распределения и контроля количества клея по поверхности плитки. Хотя можно и для распределения других смесей использовать.&lt;/p&gt;
&lt;p&gt;Хорошая статья которая описывает нюансы:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://proplitki.ru/instrumentyi/zubchatyiy-shpatel.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://proplitki.ru/instrumentyi/zubchatyiy-shpatel.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Мне была интересна информация по толщине клея для плиток определённого размера. В статье же имеется таблица, которая даёт рекомендательные значения размера зуба шпателя для плиток разной площади, что является просто другой формулировкой моего вопроса. Таблицу утащу себе:&lt;/p&gt;
&lt;p&gt;^  Площадь плитки, см2  ^  Размер зубьев, мм  ^  Слой клея после прижатия при&lt;br/&gt;&lt;br/&gt; нанесении под углом 45°, мм  ^  Слой клея после прижатия при&lt;br/&gt;&lt;br/&gt; нанесении под углом 60°, мм  ^
|  &amp;lt;49       |  3   |  1,1  |  1,3  |
|  49-100    |  4   |  1,4  |  1,7  |
|  100-400   |  6   |  2,1  |  2,6  |
|  400-900   |  8   |  2,8  |  3,5  |
|  900-2500  |  10  |  3,5  |  4,3  |
|  &amp;gt;2500     |  12  |  4,2  |  5,2  |&lt;/p&gt;
&lt;p&gt;И рекомендация от туда же:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Для пола или неровного основания размер зубьев подбирается больше.&lt;/p&gt;&lt;/blockquote&gt;</description>
    </item>
    
    <item>
      <title>Qt Creator, Baremetal и связка GDB&gt;=7.7.1&#43;OpenOCD</title>
      <link>https://htrd.su/blog/2017/08/25/qt_creator_baremetal_i_svjazka_gdb_7.7.1_openocd/</link>
      <pubDate>Fri, 25 Aug 2017 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2017/08/25/qt_creator_baremetal_i_svjazka_gdb_7.7.1_openocd/</guid>
      <description>&lt;p&gt;Если коротко, то эта связка криво работает. Поймано на ARM GDB 8.0, но воспроизводится и на 7.12.1. При наличии на борту устройства какой-либо RTOS. У меня это ThreadX. Хотя, возможно, для других всё отработает нормально. Но это мало что меняет: на старом GDB 7.7.1 тот же OpenOCD работает.&lt;/p&gt;
&lt;p&gt;Суть проблемы и способ её решения без вмешивания в код под катом.&lt;/p&gt;
&lt;p&gt;Проблема в том, что при посылке команды &lt;code&gt;-thread-info&lt;/code&gt; &lt;strong&gt;до&lt;/strong&gt; &lt;code&gt;-exec-continue&lt;/code&gt; (или просто &lt;code&gt;continue&lt;/code&gt;) можно получить такой результат:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;=thread-exited,id=&amp;#34;1&amp;#34;,group-id=&amp;#34;i1&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sThread 1 in group i1 exited
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;=thread-created,id=&amp;#34;2&amp;#34;,group-id=&amp;#34;i1&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sThread 2 created
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;~&amp;#34;[New Thread 1074059044]&amp;lt;br/&amp;gt;n&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;s[New Thread 1074059044]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;=thread-created,id=&amp;#34;3&amp;#34;,group-id=&amp;#34;i1&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sThread 3 created
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;~&amp;#34;[New Thread 1074055240]&amp;lt;br/&amp;gt;n&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;s[New Thread 1074055240]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;=thread-created,id=&amp;#34;4&amp;#34;,group-id=&amp;#34;i1&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sThread 4 created
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;~&amp;#34;[New Thread 1074056128]&amp;lt;br/&amp;gt;n&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;s[New Thread 1074056128]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;=thread-created,id=&amp;#34;5&amp;#34;,group-id=&amp;#34;i1&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sThread 5 created
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;~&amp;#34;[New Thread 1074057816]&amp;lt;br/&amp;gt;n&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;s[New Thread 1074057816]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;=thread-created,id=&amp;#34;6&amp;#34;,group-id=&amp;#34;i1&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sThread 6 created
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;~&amp;#34;[New Thread 1074058064]&amp;lt;br/&amp;gt;n&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;s[New Thread 1074058064]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;=thread-created,id=&amp;#34;7&amp;#34;,group-id=&amp;#34;i1&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sThread 7 created
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;~&amp;#34;[New Thread 1074055900]&amp;lt;br/&amp;gt;n&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;s[New Thread 1074055900]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;=thread-created,id=&amp;#34;8&amp;#34;,group-id=&amp;#34;i1&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sThread 8 created
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;~&amp;#34;[New Thread 1074055692]&amp;lt;br/&amp;gt;n&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;s[New Thread 1074055692]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;=thread-created,id=&amp;#34;9&amp;#34;,group-id=&amp;#34;i1&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sThread 9 created
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;~&amp;#34;[New Thread 1074057248]&amp;lt;br/&amp;gt;n&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;s[New Thread 1074057248]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;=thread-created,id=&amp;#34;10&amp;#34;,group-id=&amp;#34;i1&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sThread 10 created
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;~&amp;#34;[New Thread 1074116952]&amp;lt;br/&amp;gt;n&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;s[New Thread 1074116952]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;=thread-created,id=&amp;#34;11&amp;#34;,group-id=&amp;#34;i1&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sThread 11 created
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;~&amp;#34;[New Thread 1074119588]&amp;lt;br/&amp;gt;n&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;s[New Thread 1074119588]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;=thread-created,id=&amp;#34;12&amp;#34;,group-id=&amp;#34;i1&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sThread 12 created
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;~&amp;#34;[New Thread 1074122076]&amp;lt;br/&amp;gt;n&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;s[New Thread 1074122076]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;=thread-created,id=&amp;#34;13&amp;#34;,group-id=&amp;#34;i1&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sThread 13 created
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;~&amp;#34;[New Thread 1074123328]&amp;lt;br/&amp;gt;n&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;s[New Thread 1074123328]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;=thread-created,id=&amp;#34;14&amp;#34;,group-id=&amp;#34;i1&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sThread 14 created
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;~&amp;#34;[New Thread 1074125312]&amp;lt;br/&amp;gt;n&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;s[New Thread 1074125312]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;=thread-created,id=&amp;#34;15&amp;#34;,group-id=&amp;#34;i1&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sThread 15 created
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;~&amp;#34;[New Thread 1074132172]&amp;lt;br/&amp;gt;n&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;s[New Thread 1074132172]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;=thread-created,id=&amp;#34;16&amp;#34;,group-id=&amp;#34;i1&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sThread 16 created
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;~&amp;#34;[New Thread 1074133428]&amp;lt;br/&amp;gt;n&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;s[New Thread 1074133428]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;=thread-created,id=&amp;#34;17&amp;#34;,group-id=&amp;#34;i1&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sThread 17 created
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;~&amp;#34;[New Thread 1074137052]&amp;lt;br/&amp;gt;n&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;s[New Thread 1074137052]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;=thread-created,id=&amp;#34;18&amp;#34;,group-id=&amp;#34;i1&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sThread 18 created
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;~&amp;#34;[New Thread 1074138308]&amp;lt;br/&amp;gt;n&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;s[New Thread 1074138308]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;&amp;amp;&amp;#34;Info : thread: 0x4004d724, stack_ptr=0x4004db1c&amp;lt;br/&amp;gt;n&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;&amp;amp;&amp;#34;Info : thread: 0x4004c848, stack_ptr=0x40058bf4&amp;lt;br/&amp;gt;n&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;&amp;amp;&amp;#34;Info : thread: 0x4004cbc0, stack_ptr=0x40059044&amp;lt;br/&amp;gt;n&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;&amp;amp;&amp;#34;Info : thread: 0x4004d258, stack_ptr=0x40059834&amp;lt;br/&amp;gt;n&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;&amp;amp;&amp;#34;Info : thread: 0x4004d350, stack_ptr=0x40059a5c&amp;lt;br/&amp;gt;n&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;&amp;amp;&amp;#34;Info : thread: 0x4004cadc, stack_ptr=0x40059f0c&amp;lt;br/&amp;gt;n&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;&amp;amp;&amp;#34;Info : thread: 0x4004ca0c, stack_ptr=0x4005a394&amp;lt;br/&amp;gt;n&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;&amp;amp;&amp;#34;Info : thread: 0x4004d020, stack_ptr=0x4005a7ac&amp;lt;br/&amp;gt;n&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;&amp;amp;&amp;#34;Info : thread: 0x4005b958, stack_ptr=0x4005b814&amp;lt;br/&amp;gt;n&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;&amp;amp;&amp;#34;Info : thread: 0x4005c3a4, stack_ptr=0x4005c264&amp;lt;br/&amp;gt;n&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;&amp;amp;&amp;#34;Info : thread: 0x4005cd5c, stack_ptr=0x4005cc5c&amp;lt;br/&amp;gt;n&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;&amp;amp;&amp;#34;Info : thread: 0x4005d240, stack_ptr=0x4005d194&amp;lt;br/&amp;gt;n&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;&amp;amp;&amp;#34;Info : thread: 0x4005da00, stack_ptr=0x4005d944&amp;lt;br/&amp;gt;n&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;&amp;amp;&amp;#34;Info : thread: 0x4005f4cc, stack_ptr=0x4005f39c&amp;lt;br/&amp;gt;n&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;&amp;amp;&amp;#34;Info : thread: 0x4005f9b4, stack_ptr=0x4005f89c&amp;lt;br/&amp;gt;n&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;&amp;amp;&amp;#34;Info : thread: 0x400607dc, stack_ptr=0x400606a4&amp;lt;br/&amp;gt;n&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;&amp;amp;&amp;#34;Info : thread: 0x40060cc4, stack_ptr=0x40060ba4&amp;lt;br/&amp;gt;n&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;1712^done,threads=[{id=&amp;#34;2&amp;#34;,target-id=&amp;#34;Thread 1074059044&amp;#34;,details=&amp;#34;Name: System Timer Thread, State: Suspended&amp;#34;,frame={level=&amp;#34;0&amp;#34;,addr=&amp;#34;0x00000000&amp;#34;,func=&amp;#34;??&amp;#34;,args=[]},state=&amp;#34;stopped&amp;#34;},{id=&amp;#34;3&amp;#34;,target-id=&amp;#34;Thread 1074055240&amp;#34;,details=&amp;#34;Name: 01_DMA_THREAD, State: Waiting - Queue&amp;#34;,frame={level=&amp;#34;0&amp;#34;,addr=&amp;#34;0x00000000&amp;#34;,func=&amp;#34;??&amp;#34;,args=[]},state=&amp;#34;stopped&amp;#34;},{id=&amp;#34;4&amp;#34;,target-id=&amp;#34;Thread 1074056128&amp;#34;,details=&amp;#34;Name: 02_SYSTEM_THREAD, State: Sleeping&amp;#34;,frame={level=&amp;#34;0&amp;#34;,addr=&amp;#34;0x00000000&amp;#34;,func=&amp;#34;??&amp;#34;,args=[]},state=&amp;#34;stopped&amp;#34;},{id=&amp;#34;5&amp;#34;,target-id=&amp;#34;Thread 1074057816&amp;#34;,details=&amp;#34;Name: 06_SIB_THREAD, State: Waiting - Event flag&amp;#34;,frame={level=&amp;#34;0&amp;#34;,addr=&amp;#34;0x00000000&amp;#34;,func=&amp;#34;??&amp;#34;,args=[]},state=&amp;#34;stopped&amp;#34;},{id=&amp;#34;6&amp;#34;,target-id=&amp;#34;Thread 1074058064&amp;#34;,details=&amp;#34;Name: 07_DEBUG_THREAD, State: Waiting - Queue&amp;#34;,frame={level=&amp;#34;0&amp;#34;,addr=&amp;#34;0x00000000&amp;#34;,func=&amp;#34;??&amp;#34;,args=[]},state=&amp;#34;stopped&amp;#34;},{id=&amp;#34;7&amp;#34;,target-id=&amp;#34;Thread 1074055900&amp;#34;,details=&amp;#34;Name: 03_PIB_THREAD, State: Waiting - Event flag&amp;#34;,frame={level=&amp;#34;0&amp;#34;,addr=&amp;#34;0x00000000&amp;#34;,func=&amp;#34;??&amp;#34;,args=[]},state=&amp;#34;stopped&amp;#34;},{id=&amp;#34;8&amp;#34;,target-id=&amp;#34;Thread 1074055692&amp;#34;,details=&amp;#34;Name: 05_LPP_THREAD, State: Waiting - Event flag&amp;#34;,frame={level=&amp;#34;0&amp;#34;,addr=&amp;#34;0x00000000&amp;#34;,func=&amp;#34;??&amp;#34;,args=[]},state=&amp;#34;stopped&amp;#34;},{id=&amp;#34;9&amp;#34;,target-id=&amp;#34;Thread 1074057248&amp;#34;,details=&amp;#34;Name: 04_UIB_THREAD, State: Waiting - Event flag&amp;#34;,frame={level=&amp;#34;0&amp;#34;,addr=&amp;#34;0x00000000&amp;#34;,func=&amp;#34;??&amp;#34;,args=[]},state=&amp;#34;stopped&amp;#34;},{id=&amp;#34;10&amp;#34;,target-id=&amp;#34;Thread 1074116952&amp;#34;,details=&amp;#34;Name: App main thread, State: Waiting - Queue&amp;#34;,frame={level=&amp;#34;0&amp;#34;,addr=&amp;#34;0x00000000&amp;#34;,func=&amp;#34;??&amp;#34;,args=[]},state=&amp;#34;stopped&amp;#34;},{id=&amp;#34;11&amp;#34;,target-id=&amp;#34;Thread 1074119588&amp;#34;,details=&amp;#34;Name: KvmHidSlave, State: Waiting - Event flag&amp;#34;,frame={level=&amp;#34;0&amp;#34;,addr=&amp;#34;0x00000000&amp;#34;,func=&amp;#34;??&amp;#34;,args=[]},state=&amp;#34;stopped&amp;#34;},{id=&amp;#34;12&amp;#34;,target-id=&amp;#34;Thread 1074122076&amp;#34;,details=&amp;#34;Name: Board thread, State: Waiting - Event flag&amp;#34;,frame={level=&amp;#34;0&amp;#34;,addr=&amp;#34;0x00000000&amp;#34;,func=&amp;#34;??&amp;#34;,args=[]},state=&amp;#34;stopped&amp;#34;},{id=&amp;#34;13&amp;#34;,target-id=&amp;#34;Thread 1074123328&amp;#34;,details=&amp;#34;Name: LedThread, State: Sleeping&amp;#34;,frame={level=&amp;#34;0&amp;#34;,addr=&amp;#34;0x00000000&amp;#34;,func=&amp;#34;??&amp;#34;,args=[]},state=&amp;#34;stopped&amp;#34;},{id=&amp;#34;14&amp;#34;,target-id=&amp;#34;Thread 1074125312&amp;#34;,details=&amp;#34;Name: AutoDetectInputThread, State: Sleeping&amp;#34;,frame={level=&amp;#34;0&amp;#34;,addr=&amp;#34;0x00000000&amp;#34;,func=&amp;#34;??&amp;#34;,args=[]},state=&amp;#34;stopped&amp;#34;},{id=&amp;#34;15&amp;#34;,target-id=&amp;#34;Thread 1074132172&amp;#34;,details=&amp;#34;Name: StreamingStopThread, State: Waiting - Event flag&amp;#34;,frame={level=&amp;#34;0&amp;#34;,addr=&amp;#34;0x00000000&amp;#34;,func=&amp;#34;??&amp;#34;,args=[]},state=&amp;#34;stopped&amp;#34;},{id=&amp;#34;16&amp;#34;,target-id=&amp;#34;Thread 1074133428&amp;#34;,details=&amp;#34;Name: KvmHidMaster, State: Waiting - Event flag&amp;#34;,frame={level=&amp;#34;0&amp;#34;,addr=&amp;#34;0x00000000&amp;#34;,func=&amp;#34;??&amp;#34;,args=[]},state=&amp;#34;stopped&amp;#34;},{id=&amp;#34;17&amp;#34;,target-id=&amp;#34;Thread 1074137052&amp;#34;,details=&amp;#34;Name: FpgaUsbIsrThread, State: Waiting - Event flag&amp;#34;,frame={level=&amp;#34;0&amp;#34;,addr=&amp;#34;0x4002bce4&amp;#34;,func=&amp;#34;Mutex::lock&amp;#34;,args=[{name=&amp;#34;this&amp;#34;,value=&amp;#34;0x40060767&amp;#34;},{name=&amp;#34;this@entry&amp;#34;,value=&amp;#34;0x40060767&amp;#34;}],file=&amp;#34;/home/hatred/programming/work/Epiphan/fx3uvc-git/epilib/os/mutex.cpp&amp;#34;,fullname=&amp;#34;/home/hatred/programming/work/Epiphan/fx3uvc-git/epilib/os/mutex.cpp&amp;#34;,line=&amp;#34;24&amp;#34;},state=&amp;#34;stopped&amp;#34;},{id=&amp;#34;18&amp;#34;,target-id=&amp;#34;Thread 1074138308&amp;#34;,details=&amp;#34;Name: FpgaUsbThread, State: Waiting - Event flag&amp;#34;,frame={level=&amp;#34;0&amp;#34;,addr=&amp;#34;0x00000000&amp;#34;,func=&amp;#34;??&amp;#34;,args=[]},state=&amp;#34;stopped&amp;#34;}],current-thread-id=&amp;#34;1&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;После чего вызов &lt;code&gt;-exec-continue&lt;/code&gt; будет завершён примерно следующим образом:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;1716^error,msg=&amp;#34;Cannot execute this command without a live selected thread.&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Проблема воспроизводима и без QtC, запуском GDB и OpenOCD вручную.&lt;/p&gt;
&lt;p&gt;В чем суть? Если посмотрим внимательно на порятнку выше, то можно выделить главную часть:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;=thread-exited,id=&amp;#34;1&amp;#34;,group-id=&amp;#34;i1&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sThread 1 in group i1 exited
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...SKIPPED...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;1712^done,threads=[...SKIPPED...],current-thread-id=&amp;#34;1&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ага, именно! Поток с id равным 1 завершился, в выводе &lt;code&gt;-thread-info&lt;/code&gt; его тоже нет (здесь я этот вывод убрал), но всё же он помечен, как текущий исполняемый!&lt;/p&gt;
&lt;p&gt;Если же вызвать &lt;code&gt;-thread-info&lt;/code&gt; ещё раз, то всё становится на свои места и остальные команды магическим образом &amp;ldquo;чинятся&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Собственно это и есть WA&lt;/strong&gt;: в настройках OpenOCD последней командой в &amp;ldquo;Init commands:&amp;rdquo; добавьте вызов &lt;code&gt;info threads&lt;/code&gt;. Можно два раза. Что бы наверняка.&lt;/p&gt;
&lt;p&gt;Похоже, где-то присутствует гонка, но лезть дальше и разбираться ни сил, ни времени нет.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Проблема с зависанием при выходе из сна</title>
      <link>https://htrd.su/blog/2017/08/25/problema_s_zavisaniem_pri_vyxode_iz_sna/</link>
      <pubDate>Fri, 25 Aug 2017 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2017/08/25/problema_s_zavisaniem_pri_vyxode_iz_sna/</guid>
      <description>&lt;p&gt;Проблема на ядрах 4.12 и 4.13 в Manjaro. На ядре 4.11 проблема не наблюдается. Засыпание в память, не на диск.&lt;/p&gt;
&lt;p&gt;Пока окончательного решения не найдено. Ниже ссылки, которые будут определять направление движения:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;a href=&#34;https://forum.manjaro.org/t/linux-4-12/27111/74&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://forum.manjaro.org/t/linux-4-12/27111/74&lt;/a&gt;
* тут много чего: и отказ от blk-mq и игра с модулями ядра для virtualbox host и рекомендация остановить tlp (не мой случай).
* Отказ от blk-mq:
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://forum.manjaro.org/t/kernel-4-12-crashes-when-resuming-from-suspending/28435/17&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://forum.manjaro.org/t/kernel-4-12-crashes-when-resuming-from-suspending/28435/17&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://forum.manjaro.org/t/kernel-4-12-crashes-when-resuming-from-suspending/28435/52&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://forum.manjaro.org/t/kernel-4-12-crashes-when-resuming-from-suspending/28435/52&lt;/a&gt;
* название говорит само за себя:
&lt;ul&gt;
&lt;li&gt;отказ от blk-mq&lt;/li&gt;
&lt;li&gt;замена bfq-mq на bfq-sq&lt;/li&gt;
&lt;li&gt;отказ от bfq в пользу deadline или cfq&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://digi-merc.org/blog/2017-05-16-archlinux-freeze-resume/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://digi-merc.org/blog/2017-05-16-archlinux-freeze-resume/&lt;/a&gt; и 
&lt;a href=&#34;https://www.reddit.com/r/archlinux/comments/4ytogl/suspend_to_ram_would_randomly_freeze_the_computer/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://www.reddit.com/r/archlinux/comments/4ytogl/suspend_to_ram_would_randomly_freeze_the_computer/&lt;/a&gt;
* замена асинхронного засыпания, последовательным. Возможно может решить часть проблем связанhttps://01.org/blogs/rzhang/2015/best-practice-debug-linux-suspend/hibernate-issuesные с железом и гонками.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;После пары перезагрузок, включения bfq-mq на HDD вместо mq-deadline и установки не-DKMS версии virtualbox host, проблему не получается решить.&lt;/p&gt;
&lt;p&gt;Для отладки использую следующую методику:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;логин на первой консоли и: &lt;code&gt;while true; do dmesg | tail -n 30; sleep 1; done&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;логин на второй консоли и: &lt;code&gt;sudo tail -f /var/log/everything | grep -v &#39;Tor&amp;lt;br/&amp;gt;[&#39;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;логин на третьей консоли, ничего не вводим, используем как дисплей, но SysRq командой повышаем уровень логирования до максимального: &lt;code&gt;Alt+SysRq+9&lt;/code&gt; (для T530: &lt;code&gt;Alt+Fn[press]+S[press]+S[release]+Fn[release]+9&lt;/code&gt;)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;После чего работает в обычном режиме.&lt;/p&gt;
&lt;p&gt;Прочее полезное:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;анализ проблем с suspend: 
&lt;a href=&#34;https://01.org/blogs/rzhang/2015/best-practice-debug-linux-suspend/hibernate-issues&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://01.org/blogs/rzhang/2015/best-practice-debug-linux-suspend/hibernate-issues&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Онлайн парсер для USB дескрипторов и запросов</title>
      <link>https://htrd.su/blog/2017/08/10/onlajn_parser_dlja_usb_deskriptorov_i_zaprosov/</link>
      <pubDate>Thu, 10 Aug 2017 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2017/08/10/onlajn_parser_dlja_usb_deskriptorov_i_zaprosov/</guid>
      <description>&lt;p&gt;Собственно полезно при отладке и разборе:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://eleccelerator.com/usbdescreqparser/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://eleccelerator.com/usbdescreqparser/&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://www.reddit.com/r/electronics/comments/1ipf1f/my_usb_hid_report_descriptor_parser_hosted_on_my/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;анонс на Reddit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Запросов - подразумевается SETUP. Разбирает только стандартные запросы. Специфичные для интерфейсов, даже стандартных функций - нет.&lt;/p&gt;
&lt;p&gt;Умеет:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;разбор дескрипторов&lt;/li&gt;
&lt;li&gt;разбор SETUP запросов&lt;/li&gt;
&lt;li&gt;разбор HID дескрипторов (не проверял)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Чумовой особенностью этого парсера является:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The page uses Javascript, so it must be enabled. &lt;strong&gt;This page can be downloaded and used offline&lt;/strong&gt;, because it does not depend on any external or online resources.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Так что&amp;hellip;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>OpenRC и русский в консоли</title>
      <link>https://htrd.su/blog/2017/08/05/openrc_i_russkij_v_konsoli/</link>
      <pubDate>Sat, 05 Aug 2017 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2017/08/05/openrc_i_russkij_v_konsoli/</guid>
      <description>&lt;p&gt;Чисто декларативная заметка.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Добавляем в загрузку сервисы:```
sudo rc-update add consolefont boot
sudo rc-update add keymaps boot&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  1. Для настройки шрифта правим `/etc/conf.d/consolefont`, устанавливаем параметр `consolefont=`, остальное не трогаем:```
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;consolefont=&amp;#34;UniCyr_8x16&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;* Прочие варианты шрифтов можно посмотреть:```
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ls /usr/share/kbd/consolefonts&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    * Поиграться с установкой шрифта можно при помощи команды `sudo setfont &amp;lt;FontName&amp;gt;`.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  1. Для настройки раскладки и переключателя правим `/etc/conf.d/keymaps`, устанавливаем параметр `keymap=`, остальное - по желанию:```
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;keymap=&amp;#34;ruwin_cplk-UTF-8&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;* Прочие варианты раскладки можно посмотреть:```
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ls /usr/share/kbd/keymaps/i386/qwerty&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;Поиграться&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;с&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;установкой&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;раскладки&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;можно&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;при&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;помощи&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;команды&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sudo&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;loadkeys&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;KeymapName&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;Опционально&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;можно&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;перезагрузиться&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;или&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;запустить&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;сервисы&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;вручную&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;sudo service consolefont restart
sudo service keymaps restart&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Тюнинг перьевой ручки</title>
      <link>https://htrd.su/blog/2017/08/03/tjuning_perevoj_ruchki/</link>
      <pubDate>Thu, 03 Aug 2017 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2017/08/03/tjuning_perevoj_ruchki/</guid>
      <description>&lt;p&gt;Недавно случилась беда: грохнул о бетонный пол свою Platinum Balance F. Пером. Которое сломалось. Осталась такая же ручка с пером M, которая, вроде, всем хороша, но сильно большая подача у неё.&lt;/p&gt;
&lt;p&gt;На момент покупки превалировало желание попробовать F перо этого производителя, так как перья F того же Pilot показались слишком уж тонкими и цепкими к бумаге, поэтому вариантов ответа на вопрос: &amp;ldquo;как уменьшить подачу чернил?&amp;rdquo; особо не искал. Плюс в голове упорно витала мысль, что таких способов нет.&lt;/p&gt;
&lt;p&gt;Но когда не стало ручки, чьё письмо меня более чем устраивало, пришлось выводить из резерва M-ку. И вопрос уменьшения подачи чернил стал очень остро.&lt;/p&gt;
&lt;p&gt;Гугление навело на эту замечательную статью:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://www.jetpens.com/blog/guide-to-fountain-pen-nibs-troubleshooting-tips-and-tricks/pt/777&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://www.jetpens.com/blog/guide-to-fountain-pen-nibs-troubleshooting-tips-and-tricks/pt/777&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Рецепты от туда:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Проверить утечку воздуха. Особенно актуально при использовании перезаправленных картриджей. По сути: заменить новый картридж. Как ещё её проверить - я не представляю.&lt;/li&gt;
&lt;li&gt;Более плотно сжать половинки пера. Не усердствовать. Не использовать инструмент - только руки!&lt;/li&gt;
&lt;li&gt;Заменить чернила на менее текучие.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Первый вариант я решил оставить на другой раз, тем более, что проверялось на двух картриджах разной степени износа - результат один. Третий вариант тоже не хотел использовать, так как чёрные чернила Pilot порадовали своей практически полной несмываемостью (по крайней мере при письме пером F), а чернила достаточно жидкие.&lt;/p&gt;
&lt;p&gt;Остался вариант два. Разобрал ручку, вынул перо, чуть подогнул (что бы зазор между пером и фидером стал меньше - тоже источник поступления воздуха и большей подачи) и свёл половинки. Потом смазал резьбу грип-секции силиконовой смазкой, что бы уменьшить поступление воздуха в этом месте и собрал всё вместе.&lt;/p&gt;
&lt;p&gt;Результат порадовал.&lt;/p&gt;
&lt;p&gt;Было (текст не готовился специально - часть т.н. &amp;ldquo;free writing&amp;rdquo;, когда думал над решением проблемы):&lt;br/&gt;&lt;br/&gt;
&lt;img src=&#34;https://htrd.su/img//post/2017/08/03/2017-08-03_14-42-50.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Стало (это уже специально написанный текст):&lt;br/&gt;&lt;br/&gt;
&lt;img src=&#34;https://htrd.su/img//post/2017/08/03/2017-08-03_14-46-55.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Открывать лучше оригинал, фотографии, по возможности, сделаны с одинаковым масштабом.&lt;/p&gt;
&lt;p&gt;Ещё рецепты можно почитать 
&lt;a href=&#34;http://www.penmuseum.co.uk/master%202.htm&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;тут&lt;/a&gt;, 
&lt;a href=&#34;http://dirck.delint.ca/beta/?page_id=737&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;тут&lt;/a&gt; (очень хороша, рассматривать только два вопрос: слишком сухая и слишком обильная подача), 
&lt;a href=&#34;http://www.pentorium.com/2014/12/07/fountain-pen-guide-series-session-3-restoring-and-maintaining-your-pens/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;тут&lt;/a&gt; или выбрать 
&lt;a href=&#34;https://www.google.ru/search?num=20&amp;amp;newwindow=1&amp;amp;q=fountain&amp;#43;pen&amp;#43;reduce&amp;#43;ink&amp;#43;flow&amp;amp;oq=fountain&amp;#43;pen&amp;#43;reduce&amp;#43;ink&amp;#43;flow&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;тут&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>AUR helpers  и  отладочные данные</title>
      <link>https://htrd.su/blog/2017/06/29/aur_helpers_i_otladochnye_dannye/</link>
      <pubDate>Thu, 29 Jun 2017 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2017/06/29/aur_helpers_i_otladochnye_dannye/</guid>
      <description>&lt;p&gt;Спека PKGBUILD позволяет сделать финт ушами и автоматически сгенерировать пакет с отладочной информацией, которую можно ставить, а можно и не ставить (занимает приличное количество места в распакованном виде).&lt;/p&gt;
&lt;p&gt;Ещё эта спека позволяет в один проход создать несколько пакетов. Допустим разделить на основную часть и документацию или общие библиотеки, которые могут использоваться другими приложениями и бинарники.&lt;/p&gt;
&lt;p&gt;Всё это становится очень интересным в контексте использования с AUR. Когда я ушёл с Arch Linux, разделённые (split) пакеты в нём были роскошью. Сейчас они поддерживаются. А вот как обстоят дела с помощниками (helpers, далее по тексту: хелперы), которые собирают и устанавливают в систему?&lt;/p&gt;
&lt;p&gt;Берём страничку с официальной Wiki:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://wiki.archlinux.org/index.php/AUR_helpers#Comparison_table&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://wiki.archlinux.org/index.php/AUR_helpers#Comparison_table&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Там есть столбец: &amp;ldquo;Split packages&amp;rdquo;, который говорит о поддержки разделённых пакетов. Вот только, оказывается, есть нюанс: debug-пакеты далеко не всеми относятся к оным.&lt;/p&gt;
&lt;p&gt;Выбираем несколько хелперов, у которых все столбцы зелёные. Я взял:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;yaourt - он весь красный, но стоит из коробки в Manjaro&lt;/li&gt;
&lt;li&gt;pacaur - он есть в репозиториях Manjaro&lt;/li&gt;
&lt;li&gt;trizen - потому как заявлен чистый pacman-like синтаксис параметров&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Стоит проверить на будущее:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;bauerbill - но имя команды вообще непроизносимое :)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Кто сознательно не проверялся:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;aurutils - собственнический синтаксис, плюс это просто набор отдельных скриптов. Возможно для автоматизации они и будут удобны.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Собственно, полностью зелёных хелперов только 4.&lt;/p&gt;
&lt;p&gt;Итак,&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;yaourt: хотя и заявлено, что поддержки раздельных пакетов нет, но отладочный пакет он поставил&amp;hellip; Без вариантов. Т.е. если он вам не нужен - потом удаляйте сами, вручную. И так через каждое обновление. На реальных раздельных пакетах не проверял, скорее всего обломается. Или информация в Wiki устаревшая.&lt;/li&gt;
&lt;li&gt;pacaur: тут уже заявлено, что поддержка раздельных пакетов есть, но отладочный пакет он просто не увидел. Причём, он так хитро что-то мутит под своим капотом, что сумел обновить основной пакет, сломав тем самым зависимость для старого отладочного пакета.&lt;/li&gt;
&lt;li&gt;trizen: поддержка заявлена, отладочный пакет он тоже понял: предложил поставить после установки основного пакета, что есть неплохо. Из-за того, что установка идёт в два захода, обновить пакет не может: из-за поломанных зависимостей.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ещё проверялся 
&lt;a href=&#34;https://github.com/manjaro/pamac&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;pamac&lt;/a&gt;, отладочный пакет он тоже не смог обновить по причине того, что его не видит. Более того, основной пакет тоже не обновляется, так как его обновление сломает уже установленный отладочный пакет более старой версии. На них завёл 
&lt;a href=&#34;https://github.com/manjaro/pamac/issues/264&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;тикет&lt;/a&gt;. Раздельные пакеты, судя по 
&lt;a href=&#34;https://github.com/manjaro/pamac/issues/192&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;тикету #192&lt;/a&gt; он уже поддерживает. При установке же пакета (не обновление), отладочный пакет ставится автоматом, не задавая пользователю лишних вопросов, что так же не совсем удобно.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>[Memo] Manjaro OpenRC: персистентные сетевые настройки</title>
      <link>https://htrd.su/blog/2017/06/23/memo_manjaro_openrc_persistentnye_setevye_nastrojki/</link>
      <pubDate>Fri, 23 Jun 2017 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2017/06/23/memo_manjaro_openrc_persistentnye_setevye_nastrojki/</guid>
      <description>&lt;p&gt;Можно сделать при помощи Netifrc:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://wiki.gentoo.org/wiki/Netifrc&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://wiki.gentoo.org/wiki/Netifrc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://wiki.gentoo.org/wiki/Handbook:X86/Full/Networking/ru&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://wiki.gentoo.org/wiki/Handbook:X86/Full/Networking/ru&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://wiki.gentoo.org/wiki/OpenRC#Network_management&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://wiki.gentoo.org/wiki/OpenRC#Network_management&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Три шага:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;правим &lt;strong&gt;/etc/conf.d/net&lt;/strong&gt;, настраиваем свой интерфейс &lt;code&gt;IFACE&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;для нужного сетевого интерфейса (&lt;code&gt;IFACE&lt;/code&gt;) делаем симлинк:&lt;code&gt;ln -s /etc/init.d/net.lo /etc/init.d/net.IFACE&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;если нужно стартовать автоматом: &lt;code&gt;rc-update add net.IFACE default&lt;/code&gt;
* вручную: &lt;code&gt;service net.IFACE start/stop/restart&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;</description>
    </item>
    
    <item>
      <title>Manjaro OpenRC: обновление elogind ломает Network Manager после выхода из сна [FIXED]</title>
      <link>https://htrd.su/blog/2017/06/08/manjaro_openrc_obnovlenie_elogind_lomaet_network_manager_posle_vyxoda_iz_sna/</link>
      <pubDate>Thu, 08 Jun 2017 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2017/06/08/manjaro_openrc_obnovlenie_elogind_lomaet_network_manager_posle_vyxoda_iz_sna/</guid>
      <description>&lt;p&gt;Собственно вот такое обновление:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[2017-05-28 10:33] [ALPM] upgraded libelogind (228.3-1 -&amp;gt; 229.3-1)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[2017-05-28 10:34] [ALPM] upgraded elogind (227.2-1 -&amp;gt; 229.3-1)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Самый простой вариант: откатиться. Прочие смотрятся тут:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://forum.manjaro.org/t/unstable-elogind-update-228-1-1-breaking-suspend-hibernate/23953/8&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://forum.manjaro.org/t/unstable-elogind-update-228-1-1-breaking-suspend-hibernate/23953/8&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Прицепом:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://forum.manjaro.org/t/openrc-and-73-seat-late-rules-why-deleting-it-was-a-good-thing/24599/3&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://forum.manjaro.org/t/openrc-and-73-seat-late-rules-why-deleting-it-was-a-good-thing/24599/3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;UPD: Последнее 
&lt;a href=&#34;https://manjaro.org/2017/06/18/stable-update-2017-06-18-kernels-plasma-kde-apps-firefox-thunderbird-mesa/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;обновление (2017-06-20)&lt;/a&gt; починило проблему:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;elogind -&amp;gt; 229.6-1&lt;/li&gt;
&lt;li&gt;libelogind -&amp;gt; 229.6-1&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Идея для BadUSB</title>
      <link>https://htrd.su/blog/2017/04/24/ideja_dlja_badusb/</link>
      <pubDate>Mon, 24 Apr 2017 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2017/04/24/ideja_dlja_badusb/</guid>
      <description>&lt;p&gt;Если создать USB-устройство, которое реализует интерфейс пера или тачскрина с абсолютными координатами, задать для осей X и Y значения:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;min = 0&lt;/li&gt;
&lt;li&gt;max = 65535&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;и сделать (эмуляция) хотя бы одно перемещение, то, как минимум, Windows 8, 8.1 и 10 реагируют BSOD и перезагрузкой. Linux работает нормально.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Восточный Саян, Тункинские гольцы</title>
      <link>https://htrd.su/blog/2017/04/14/vostochnyj_sajan_tunkinskie_golcy/</link>
      <pubDate>Fri, 14 Apr 2017 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2017/04/14/vostochnyj_sajan_tunkinskie_golcy/</guid>
      <description>&lt;p&gt;Поход был в прошлом году, вот немного фото:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://yadi.sk/d/8z0ULWDHubJ7x&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://yadi.sk/d/8z0ULWDHubJ7x&lt;/a&gt; - от Виктора А&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://yadi.sk/d/LjxQTlpA3H2vgP&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://yadi.sk/d/LjxQTlpA3H2vgP&lt;/a&gt; - от Рыжей&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Номенклатура жал T12</title>
      <link>https://htrd.su/blog/2017/04/07/nomenklatura_zhal_t12/</link>
      <pubDate>Fri, 07 Apr 2017 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2017/04/07/nomenklatura_zhal_t12/</guid>
      <description>&lt;p&gt;Собственно, официальнее некуда:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://www.hakko.com/english/tip_selection/series_t12.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://www.hakko.com/english/tip_selection/series_t12.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Размеры, рекомендации по типовому использованию и так далее.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Корпуса SMD компонентов</title>
      <link>https://htrd.su/blog/2017/03/23/korpusa_smd_komponentov/</link>
      <pubDate>Thu, 23 Mar 2017 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2017/03/23/korpusa_smd_komponentov/</guid>
      <description>&lt;p&gt;Они же - компоненты для поверхностного монтажа. Мне они в последнее время всё больше нравятся для домашнего прототипирования и поделок: меньше занимают места  при хранении и если руки дошли до печатной платы, не нужно сверлить кучу дырок. Но маркировка и обилие корпусов - это адъ.&lt;/p&gt;
&lt;p&gt;Вот хорошая PDF которая может помочь разобраться:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.avislab.com/blog/files/markirovka.pdf&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.avislab.com/blog/files/markirovka.pdf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;она же, но сохранённая тут: 
&lt;a href=&#34;https://htrd.su/img/post/2017/03/23/markirovka.pdf&#34;&gt;markirovka.pdf&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Дополнительные ссылки:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://en.wikipedia.org/wiki/Surface-mount_technology&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://en.wikipedia.org/wiki/Surface-mount_technology&lt;/a&gt; - тут есть про размеры корпусов в метрических и имперских единицах (становится понятно откуда берутся обозначения типа 1206, 0805), расшифровки аббревиатур (SMD/SMA/SMT/etc)
&lt;ul&gt;
&lt;li&gt;в противовес - 
&lt;a href=&#34;https://en.wikipedia.org/wiki/Through-hole_technology&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&amp;ldquo;дырочный&amp;rdquo; монтаж&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.smd.ru/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.smd.ru/&lt;/a&gt; - можно использовать как каталог, что бы сориентироваться&lt;/li&gt;
&lt;li&gt;на Али можно поискать наборы для диодов, стабилитронов, транзисторов (китайских популярных)&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>C&#43;&#43;17 Features</title>
      <link>https://htrd.su/blog/2017/03/22/c_17_features/</link>
      <pubDate>Wed, 22 Mar 2017 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2017/03/22/c_17_features/</guid>
      <description>&lt;p&gt;Пока лучший, что я нашёл, обзор новых фич C++17 с примерами и информацией о поддержке в компиляторах:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.bfilipek.com/2017/01/cpp17features.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.bfilipek.com/2017/01/cpp17features.html&lt;/a&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.bfilipek.com/2017/05/cpp17-details-fixes-deprecation.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Fixes and deprecation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.bfilipek.com/2017/06/cpp17-details-clarifications.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Language clarification&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.bfilipek.com/2017/06/cpp17-details-templates.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Templates&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.bfilipek.com/2017/07/cpp17-in-details-attributes.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Attributes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.bfilipek.com/2017/07/cpp17-details-simplifications.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Simplification&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.bfilipek.com/2017/08/cpp17-details-filesystem.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Library changes - Filesystem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Library changes - Parallel STL&lt;/li&gt;
&lt;li&gt;Library changes - Utils&lt;/li&gt;
&lt;li&gt;Wrap up, Bonus&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;А вот обзор от команды Яндекса, которая теперь представляет 
&lt;a href=&#34;https://stdcpp.ru&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;РГ21 C++ Россия&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://habrahabr.ru/company/yandex/blog/323972/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://habrahabr.ru/company/yandex/blog/323972/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Вот и другие авторы начинают подтягиваться, в том числе - официальные источники:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://isocpp.org/files/papers/p0636r0.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://isocpp.org/files/papers/p0636r0.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.modernescpp.com/index.php/c-17-what-s-new-in-the-library&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.modernescpp.com/index.php/c-17-what-s-new-in-the-library&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>C&#43;&#43;: алгоритмы с бинарным предикатом и значением</title>
      <link>https://htrd.su/blog/2017/03/21/c_algoritmy_s_binarnym_predikatom_i_znacheniem/</link>
      <pubDate>Tue, 21 Mar 2017 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2017/03/21/c_algoritmy_s_binarnym_predikatom_i_znacheniem/</guid>
      <description>&lt;p&gt;Или век живи - век учись.&lt;/p&gt;
&lt;p&gt;Проблема описана здесь: 
&lt;a href=&#34;https://stdcpp.ru/proposals/1386b162-0cde-49b7-a41e-90f2d9ee477c&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://stdcpp.ru/proposals/1386b162-0cde-49b7-a41e-90f2d9ee477c&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Суть: зачем передавать бинарный предикат и значение, если нужное значение можно временами захватить в лямбду и не передавать вторым аргументом компаратору.&lt;/p&gt;
&lt;p&gt;В комментарии подсказали по поводу переопределения &lt;code&gt;operator()&lt;/code&gt;, который будет принимать тип, соответствующий полю, по которому происходит поиск и сортировка. Это же решение работает и для лямбд:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;vector&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;algorithm&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;using&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Foo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;some_field0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;some_field1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;c1&#34;&gt;// ..
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;	&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;some_fieldN&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;n&#34;&gt;vector&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Foo&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vec&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;/tmp/alexd&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;/tmp/vasya_pupkin&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;/tmp/john_doe&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;n&#34;&gt;cout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Original:&amp;lt;br/&amp;gt;n&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;nl&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;n&#34;&gt;cout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;  &amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sort&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;begin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;vec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;end&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;vec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[](&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;left&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;right&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;left&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;right&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;n&#34;&gt;cout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Sorted:&amp;lt;br/&amp;gt;n&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;nl&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;n&#34;&gt;cout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;  &amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;searchName&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;/tmp/john_doe&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;c1&#34;&gt;// Бинарный поиск по полю: передаём не весь объект, а только значение для поля
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;	&lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;it&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lower_bound&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;begin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;vec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;end&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;vec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;searchName&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[](&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;item&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;item&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;it&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;end&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;it&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;searchName&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;n&#34;&gt;cout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Item not found&amp;lt;br/&amp;gt;n&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;n&#34;&gt;cout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Item found: &amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;it&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Стоит отметить, что условия сортировки не стоит нарушать или вы получите непредсказуемый результат. Поэтому лучше сделать как рекомендовано в комментарии к предложению: определить функтор для таких типов и переиспользовать его:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;vector&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;algorithm&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;using&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Foo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;some_field0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;some_field1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;c1&#34;&gt;// ..
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;	&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;some_fieldN&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;FooComparator&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;kt&#34;&gt;bool&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;operator&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Foo&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;left&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Foo&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;right&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;operator&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;left&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;right&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;kt&#34;&gt;bool&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;operator&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Foo&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;left&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;field&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;left&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;field&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;n&#34;&gt;vector&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Foo&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vec&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;/tmp/alexd&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;/tmp/vasya_pupkin&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;/tmp/john_doe&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;n&#34;&gt;cout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Original:&amp;lt;br/&amp;gt;n&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;nl&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;n&#34;&gt;cout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;  &amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sort&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;begin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;vec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;end&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;vec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;FooComparator&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;n&#34;&gt;cout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Sorted:&amp;lt;br/&amp;gt;n&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;nl&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;n&#34;&gt;cout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;  &amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;searchName&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;/tmp/john_doe&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;c1&#34;&gt;// Бинарный поиск по полю
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;	&lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;it&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lower_bound&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;begin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;vec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;end&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;vec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;searchName&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;FooComparator&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;it&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;end&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;it&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;searchName&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;n&#34;&gt;cout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Item not found&amp;lt;br/&amp;gt;n&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;n&#34;&gt;cout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Item found: &amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;it&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;В сопровождении такая штука будет проще. Тем более, что алгоритмы бинарного поиска обязаны использовать тот же критерий сравнения, что и сортировка и напутать в таком виде будет сложнее, нежели использовать лямбду.&lt;/p&gt;
&lt;p&gt;Т.е.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Если вам нужно только отсортировать сложные объекты по какому-то полю - вполне может подойти лямбда.&lt;/li&gt;
&lt;li&gt;Если вам потребовалось (или как только потребовалось) ещё и искать, используя алгоритмы бинарного поиска, то стоит написать функтор с функцией сравнения по полю.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Стоит отметить, что при сортировке и поиску по полю нужно будет только две функции сравнения: если вы захотите искать по другому полю, то:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;или делаете линейный поиск &lt;code&gt;std::find_if&lt;/code&gt;, а ему не важна сортировка;&lt;/li&gt;
&lt;li&gt;или сортируем по новому критерию, а для этого уже желателен свой компаратор.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;В противном случае, повторюсь, результат непредсказуем.&lt;/p&gt;
&lt;p&gt;Ну и список алгоритмов к которым это относится:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;std::binary_search&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;std::lower_bound&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;std::upper_bound&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;std::equal_range&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Чуть особняком:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;std::search_n&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;для неё не нужно отсортированного входа, но подход с лямбдой с типом второго аргумента, соответствующего типу поля - применим.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Obexd в пользовательской сессии без systemd</title>
      <link>https://htrd.su/blog/2017/03/17/obexd_v_polzovatelskoj_sessii_bez_systemd/</link>
      <pubDate>Fri, 17 Mar 2017 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2017/03/17/obexd_v_polzovatelskoj_sessii_bez_systemd/</guid>
      <description>&lt;p&gt;Пробуем включать TransferServices плагин в Blueman и получаем что-то вроде:
&lt;img src=&#34;https://htrd.su/img//post/2017/03/17/snimok_ehkrana_2017-03-17_14-26-38.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Ключевое:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;org.freedesktop.DBus.Error.NameHasNoOwner: Could not get owner of name &amp;#39;org.bluez.obex&amp;#39;: no such name
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Исправления два:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;добавить в атозагрузку при логине &lt;code&gt;/usr/lib/bluetooth/obexd&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;подсказать dbus автоматически спавнить его при обращении&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Собственно Bluez предоставляет сервис-файл для второго варианта, только он рассчитан на работу с systemd, и поэтому &lt;code&gt;Exec&lt;/code&gt; указывает в &lt;code&gt;/bin/false&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Gentoo нам подсказывает:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://data.gpo.zugaina.org/gentoo/net-wireless/bluez/bluez-5.44.ebuild&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://data.gpo.zugaina.org/gentoo/net-wireless/bluez/bluez-5.44.ebuild&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.spinics.net/lists/linux-bluetooth/msg38490.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.spinics.net/lists/linux-bluetooth/msg38490.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;что нужно вместо &lt;code&gt;/bin/false&lt;/code&gt; указать полный путь до &lt;code&gt;obexd&lt;/code&gt;, т.е. &lt;code&gt;/usr/lib/bluetooth/obexd&lt;/code&gt;. После чего передача файлов волшебным образом заработает сама.&lt;/p&gt;
&lt;p&gt;Файл для редактирования: &lt;code&gt;/usr/share/dbus-1/services/org.bluez.obex.service&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;ЗЫ ссылка на заметку:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://forum.manjaro.org/t/bluetooth-samba/13539/4&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://forum.manjaro.org/t/bluetooth-samba/13539/4&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ЗЗЫ неприятно что такие сервис-файлы нельзя переопределить через &lt;code&gt;/etc/dbus/service/&lt;/code&gt;. Или я не смог?&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>CMake Imported Targets</title>
      <link>https://htrd.su/blog/2017/03/07/cmake_imported_targets/</link>
      <pubDate>Tue, 07 Mar 2017 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2017/03/07/cmake_imported_targets/</guid>
      <description>&lt;p&gt;Буквально сегодня открыл для себя Imported Targets. При использовании их для модулей поиска, очень упрощает и систематизирует код.&lt;/p&gt;
&lt;p&gt;Для примера, если вам нужно подключить ZLIB к проекту, при классическом подходе пишется что-то вроде:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cmake&#34; data-lang=&#34;cmake&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cmake_minimum_required&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;VERSION&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;3.1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;project&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Foo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;find_package&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;ZLIB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;add_definitions&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;ZLIB_DEFINITIONS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;include_directories&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;ZLIB_INCLUDE_DIRS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;add_executable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;foo_target&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;               &lt;span class=&#34;s&#34;&gt;main.cpp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;target_link_libraries&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;foo_target&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;ZLIB_LIBRARIES&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Какие проблемы в коде выше?&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Добавляется новая библиотека, нужно не забыть добавить переменные в три места:
1. &lt;code&gt;add_definitions()&lt;/code&gt;
2. &lt;code&gt;include_direcrories()&lt;/code&gt;
3. &lt;code&gt;target_link_libraries()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Мы забыли ключевое слово &lt;code&gt;REQUIRED&lt;/code&gt; в &lt;code&gt;find_package()&lt;/code&gt; и узнаем, что у нас нет ZLIB или на компиляции или на линковке (так как других условий и проверок нет, предполагаю: данная библиотека необходима).&lt;/li&gt;
&lt;li&gt;Область действия &lt;code&gt;add_definitions()&lt;/code&gt; и &lt;code&gt;include_directories()&lt;/code&gt; - глобальная (на самом деле нет: все таргеты в текущем CMakeLists.txt во всех далее включённых, но не суть) и распространяется на все таргеты. Что не есть хорошо.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Возможно что-то ещё, чего я не заметил.&lt;/p&gt;
&lt;p&gt;Последний пункт можно обойти уже написав более навороченный код:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cmake&#34; data-lang=&#34;cmake&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cmake_minimum_required&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;VERSION&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;3.1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;project&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Foo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;find_package&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;ZLIB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;add_executable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;foo_target&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;               &lt;span class=&#34;s&#34;&gt;main.cpp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;target_include_directories&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;foo_target&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;ZLIB_INCLUDE_DIRS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;target_compile_definitions&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;foo_target&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;ZLIB_DEFINITIONS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;target_link_libraries&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;foo_target&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;ZLIB_LIBRARIES&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;От проблемы глобальности ушли, но остальные две остались.&lt;/p&gt;
&lt;p&gt;А вот, начиная с CMake 3.1 код выше можно переписать так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cmake&#34; data-lang=&#34;cmake&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cmake_minimum_required&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;VERSION&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;3.1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;project&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Foo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;find_package&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;ZLIB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;add_executable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;foo_target&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;               &lt;span class=&#34;s&#34;&gt;main.cpp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;target_link_libraries&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;foo_target&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                      &lt;span class=&#34;s&#34;&gt;ZLIB::ZLIB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;И теперь правильно подтянутся и параметры для компиляции, причём только для указанного таргета, и параметры линковки. А кода стало меньше. Более того, если библиотека не найдена, то цели &lt;code&gt;ZLIB::ZLIB&lt;/code&gt; существовать не будет и вызов cmake завершится с ошибкой. А чем раньше ошибка вылазит - тем лучше.&lt;/p&gt;
&lt;p&gt;Как это делается? А достаточно просто, маинтейнеру модуля поиска нужно в конце добавить строчки вида:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cmake&#34; data-lang=&#34;cmake&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;ZLIB_FOUND&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;AND&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;NOT&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;TARGET&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;ZLIB::ZLIB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;nb&#34;&gt;add_library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;ZLIB::ZLIB&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;UNKNOWN&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;IMPORTED&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;nb&#34;&gt;set_target_properties&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;ZLIB::ZLIB&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;PROPERTIES&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s&#34;&gt;INTERFACE_INCLUDE_DIRECTORIES&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;${ZLIB_INCLUDE_DIRS}&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s&#34;&gt;INTERFACE_COMPILE_OPTIONS&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;${ZLIB_DEFINITIONS}&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s&#34;&gt;INTERFACE_LINK_LIBRARIES&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;${ZLIB_LIBRARIES}&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;endif&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Код для FindZLIB.cmake на самом деле несколько другой, но общую суть он отражает.&lt;/p&gt;
&lt;p&gt;Соглашение для таких тергетов простое:
PkgName::PkgComponent&lt;/p&gt;
&lt;p&gt;где &lt;code&gt;PkgName&lt;/code&gt; соответствует имения пакета, которое передаётся в &lt;code&gt;find_package()&lt;/code&gt; (или имя модуля без префикса &lt;code&gt;Find&lt;/code&gt; и суффикса &lt;code&gt;.cmake&lt;/code&gt;), а &lt;code&gt;PkgComponent&lt;/code&gt; - внутренний компонент внутри модуля. Если такой компонент один, он соответствует &lt;code&gt;PkgName&lt;/code&gt;. Примеры:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ZLIB::ZLIB&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Threads::Threads&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Qt::Widgets&lt;/code&gt; (см FindQt.cmake)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Кстати, вместо проверки:
if (ZLIB_FOUND)&lt;/p&gt;
&lt;p&gt;Можно использовать:
if (TARGET ZLIB::ZLIB)&lt;/p&gt;
&lt;p&gt;да, более многословно, но везде фигурирует только одно имя таргета.&lt;/p&gt;
&lt;p&gt;Кроме того, эти таргеты можно использовать и совместно с &lt;code&gt;target_include_directories()&lt;/code&gt; и &lt;code&gt;target_compile_definitions()&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;В общем, я крайне рекомендую в свои модули добавить несколько строчек, которые привнесут несколько большей унификации. От старых добрый переменных вас тоже никто отказываться не заставляет :)&lt;/p&gt;
&lt;p&gt;ЗЫ ЕМНИП то такой синтаксис можно было использовать и до 3.1, с 3.1 оно появилось в некоторых модулях, которые поставляются с самим CMake.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>linux-tools для mainline ядер в Ubuntu</title>
      <link>https://htrd.su/blog/2017/03/02/linux-tools_dlja_mainline_jader_v_ubuntu/</link>
      <pubDate>Thu, 02 Mar 2017 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2017/03/02/linux-tools_dlja_mainline_jader_v_ubuntu/</guid>
      <description>&lt;p&gt;Иногда приходится использовать mainline не из основных репозиториев, а отсюда:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://kernel.ubuntu.com/~kernel-ppa/mainline&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://kernel.ubuntu.com/~kernel-ppa/mainline&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Причин тому может быть несколько. Начиная от желания быть на острие атаки, и заканчивая тем, что на новых ядрах решена проблема характерная для вашего железа или другого окружения. У меня, к примеру, только с 4.10 перестал уходить в тотальный перегрев процессор при использовании Turbo Boost.&lt;/p&gt;
&lt;p&gt;Беда этих ядер, что нет полезных пакетов linux-tools, которые требуются таким приложениям как &lt;code&gt;perf&lt;/code&gt; и &lt;code&gt;turbostat&lt;/code&gt;. И их нужно собрать самому, причём так, что бы они соответствовали версии ядра. Рассмотрим как это сделать, на примере 4.10.&lt;/p&gt;
&lt;p&gt;У каждой версии есть свой каталог, который (с недавнего времени) в понятной форме содержит всю необходимую информацию для сборки.&lt;/p&gt;
&lt;p&gt;Открываем 
&lt;a href=&#34;http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.10/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.10/&lt;/a&gt; и видим:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;откуда брать исходники:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git://git.launchpad.net/~ubuntu-kernel-test/ubuntu/+source/linux/+git/mainline-crack
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;на каком комитте основан билд:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;v4.10 (c470abd4fde40ea6a0846a2beab642a578c0b8cd)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Эта же информация дублируется в файле 
&lt;a href=&#34;http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.10/COMMIT&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;COMMIT&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;набор патчей, которые накладываются поверх нужного комита.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Вся эта информация так же содержится в файле 
&lt;a href=&#34;http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.10/SOURCES&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;SOURCES&lt;/a&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git://git.launchpad.net/~ubuntu-kernel-test/ubuntu/+source/linux/+git/mainline-crack v4.10 c470abd4fde40ea6a0846a2beab642a578c0b8cd
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;0001-base-packaging.patch
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;0002-UBUNTU-SAUCE-add-vmlinux.strip-to-BOOT_TARGETS1-on-p.patch
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;0003-UBUNTU-SAUCE-tools-hv-lsvmbus-add-manual-page.patch
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;0004-UBUNTU-SAUCE-no-up-disable-pie-when-gcc-has-it-enabl.patch
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;0005-debian-changelog.patch
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;0006-configs-based-on-Ubuntu-4.10.0-6.8.patch
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Итак, сначала забираем исходники:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone git://git.launchpad.net/~ubuntu-kernel-test/ubuntu/+source/linux/+git/mainline-crack
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Переходим в полученный каталог:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; mainline-crack
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;После чего копируем сюда все патчи, перечисленные в &lt;code&gt;SOURCES&lt;/code&gt; (они лежат там же, рядом). Как вы их заберёте разницы никакой, я предполагаю, что они уже лежат в &lt;code&gt;mainline-crack&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Теперь берём нужный комит и накладываем патчи:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git checkout -b v4.10 c470abd4fde40ea6a0846a2beab642a578c0b8cd
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git am *.patch
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Дальше отстройка:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fakeroot debian/rules clean
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;DEB_BUILD_OPTIONS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;parallel&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt; fakeroot debian/rules binary-indep
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;DEB_BUILD_OPTIONS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;parallel&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt; fakeroot debian/rules binary-perarch
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Первая команда подготовит дерево. Вторая соберёт пакеты заголовочных файлов, документации и общие пакеты linux-tools-common и linux-cloud-tools-common. Третья команда соберёт непосредственно пакеты linux-tools и linux-cloud-tools.&lt;/p&gt;
&lt;p&gt;Теперь их можно поставить:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo dpkg -i linux-tools-*.deb
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;и при необходимости:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo dpkg -i linux-cloud-tools-*.deb
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Такой вариант требует минимальное время и не требует полной перестройки. К сожалению, его недостаточно для функционирования &lt;code&gt;perf&lt;/code&gt; и Ко, так как они пытаются найти бинарники в &lt;code&gt;/usr/lib/linux-tools/$(uname -r)&lt;/code&gt;, а пакет linux-tools-*.deb ставит их в &lt;code&gt;/usr/lib/linux-tools-VER&lt;/code&gt;, где в версии нет всяких &lt;code&gt;-generic&lt;/code&gt;. Но! В целевом каталоге лежат только ссылки на бинари из второго каталога. Пакет, который их создаст имеет суффикc &lt;code&gt;-generic&lt;/code&gt; и отстроится только при полной отстройке:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;DEB_BUILD_OPTIONS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;parallel&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt; fakeroot debian/rules binary-debs
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;или так, если что-то пошло не так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;DEB_BUILD_OPTIONS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;parallel&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;skipabi&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;skipmodule&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;do_tools&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;no_dumpfile&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;do_zfs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;false&lt;/span&gt; fakeroot debian/rules binary-debs
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Но у меня отстройка упорно падает на ZFS.&lt;/p&gt;
&lt;p&gt;Вариантов два:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;правильные бинари звать вручную, указывая полный путь, типа &lt;code&gt;/usr/lib/linux-tools-VER/perf&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;или сделать симлинк:&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo ln -s /usr/lib/linux-tools-4.10.0-041000 /usr/lib/linux-tools/4.10.0-041000-generic
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Мне второго варианта хватило. Если подскажете, как легче отстроить эти последние пакеты, буду сильно благодарен.&lt;/p&gt;
&lt;p&gt;Полезные ссылки по теме:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://wiki.ubuntu.com/Kernel/MainlineBuilds&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://wiki.ubuntu.com/Kernel/MainlineBuilds&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://help.ubuntu.com/community/Kernel/Compile&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://help.ubuntu.com/community/Kernel/Compile&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://askubuntu.com/questions/842709/linux-kernel-4-8-4-custom-compilation-linux-tools-packages-not-built&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://askubuntu.com/questions/842709/linux-kernel-4-8-4-custom-compilation-linux-tools-packages-not-built&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://blog.avirtualhome.com/compile-mainline-kernel-ubuntu/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://blog.avirtualhome.com/compile-mainline-kernel-ubuntu/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>iBus и Qt Creator</title>
      <link>https://htrd.su/blog/2017/02/28/ibus_i_qt_creator/</link>
      <pubDate>Tue, 28 Feb 2017 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2017/02/28/ibus_i_qt_creator/</guid>
      <description>&lt;p&gt;Когда в следующий раз в Qt Creator по &lt;key&gt;Ctrl+Shift+U&lt;/key&gt; вместо поиска использования символа появится диалог iBus для ввода Unicode кода символа, вспомнить про 
&lt;a href=&#34;http://manpages.ubuntu.com/manpages/yakkety/man8/im-config.8.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;im-config&lt;/a&gt; и запустить его без параметров, после чего снести использование ibus. Если только он вам не жизненно необходим. Мне - нет.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>ThinkPad T530: совмещённый порт наушников и микрофона</title>
      <link>https://htrd.su/blog/2017/02/20/thinkpad_t530_sovmeschjonnyj_port_naushnikov_i_mikrofona/</link>
      <pubDate>Mon, 20 Feb 2017 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2017/02/20/thinkpad_t530_sovmeschjonnyj_port_naushnikov_i_mikrofona/</guid>
      <description>&lt;p&gt;Модель имеет совмещённый порт для подключения наушников с микрофоном (TRRS). Ниже посмотрим, что делать когда нет такой гарнитуры.&lt;/p&gt;
&lt;h2 id=&#34;наушники-и-микрофон-с-отдельными-входами&#34;&gt;Наушники и микрофон с отдельными входами&lt;/h2&gt;
&lt;p&gt;Тут всё просто: покупается Y-переходник на TRS+TS или TRS+TRS (обычно именно такие, так как микрофоны для PC, в основном, с TRS разъёмом, подробнее ниже). Такие легко приобретаются на AliExpress или у местных барыг. А можно и самому спаять:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://pieterjongsma.com/2012/02/18/1-trrs.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://pieterjongsma.com/2012/02/18/1-trrs.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Обращаем внимание на дополнительные компоненты в цепи микрофона, если хотим использовать с iPhone, для PC и Android это не критично.&lt;/p&gt;
&lt;h2 id=&#34;только-наушники-trs&#34;&gt;Только наушники TRS&lt;/h2&gt;
&lt;p&gt;В Linux Mint 18 система смогла понять (используется Intel HDA звук на кодеке Realtek), что микрофона нет (судя по всему по закоротке GND+MIC и отсутствию в цепи GND -&amp;gt; MIC резистора в 1k) и 9продолжила использовать встроенный микрофон.&lt;/p&gt;
&lt;p&gt;&lt;del&gt;Но один канал работает значительно тише.&lt;/del&gt; Это наушники были косячными - работают везде так, другие работают нормально.&lt;/p&gt;
&lt;p&gt;В любом случае, похоже, что коммутация цифровая, а не физическая, как в старых советских разъёмах: подпружиненные контакты, при подключении штекера приподнимались и размыкали цепь. Т.е. без переходника не обойтись, но работать с отдельными устройствами вполне реально.&lt;/p&gt;
&lt;h2 id=&#34;только-микрофон-tstrs&#34;&gt;Только микрофон TS/TRS&lt;/h2&gt;
&lt;p&gt;Тут стоит немного разобраться. Когда убирают кольца на штеке (R - Ring), то увеличивается площадка S (S - Sleve). Получается, что при подключении штекера с меньшим числом колец, то он замывает соответствующие контакты в разъёме. При этом на многих микрофонах для PC используется не TR разъём, а TRS. Было бы логично, что S и R соеденены между собой, но нет: соединяются как раз T+R, что вносит некоторую несовместимость (к примеру, если такой микрофон воткнуть в TR разъём, то он всё закоротит).&lt;/p&gt;
&lt;p&gt;Собственно из замечаний выходит подтверждение на практике: подключение TRS микрофона определяется системой не как микрофон, а как подключение динамиков.&lt;/p&gt;
&lt;h2 id=&#34;подключение-y-разветвителя&#34;&gt;Подключение Y-разветвителя&lt;/h2&gt;
&lt;p&gt;У меня недорогой разветвитель с AliExpress. Свою работу выполняет.&lt;/p&gt;
&lt;p&gt;Простое втыкание разветвителя в порт на десктопе даёт такой результат:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;использование внешнего микрофона и наушников.&lt;/li&gt;
&lt;li&gt;при втыкании проводника в разъём Mic, система переключается на встроенный микрофон&lt;/li&gt;
&lt;li&gt;при втыкании проводника в разъём Head, система не показывани никакой реакции&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;При подключении к Android немного интереснее:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;просто подключение не определяется никак&lt;/li&gt;
&lt;li&gt;подключение микрофона не определяется никак&lt;/li&gt;
&lt;li&gt;подключение наушников определяется как гарнитура, вне зависимости от подключения микрофона&lt;/li&gt;
&lt;li&gt;и ещё парочка:
&lt;ul&gt;
&lt;li&gt;просто подключение микрофона не определяется никак&lt;/li&gt;
&lt;li&gt;просто подключение наушников определяется как наушники без микрофона и работают как надо&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Измерение сопротивления между GND и MIC показывает разрыв. Значит разветвитель примитивный, разводка - просто отводы к нужным контактам. А вот Alsa на Linux PC и Anroid просто определяют наличие микрофона на гарнитуре методом определения закоротки между MIC и GND контактами.&lt;/p&gt;
&lt;h2 id=&#34;заключение&#34;&gt;Заключение&lt;/h2&gt;
&lt;p&gt;Собственно мне было интересно попытаться разобраться, как будет вести себя система при наличии не TRRS гарнитуры. В итоге получаются такие комбинации:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;обычные наушники: работают отлично как наушники, микрофон продолжает использоваться встроенный.&lt;/li&gt;
&lt;li&gt;обычный микрофон: распознаётся как подключение наушников, поэтому &lt;strong&gt;не работает&lt;/strong&gt;, микрофон продолжает использоваться встроенный.&lt;/li&gt;
&lt;li&gt;через примитивный Y-разветвитель: работают отлично и микрофон и наушники.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Особенно интересно разобраться и запустить такую конфигурацию:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;внешний микрофон и встроенные динамики&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;К сожалению решения пока не нашёл. Ну и не понимаю, зачем на достаточно крупном ноутбуке делать совмещённый порт, когда места есть в достатке для отдельного джека под микрофон и под наушники.&lt;/p&gt;
&lt;h2 id=&#34;ссылки&#34;&gt;Ссылки&lt;/h2&gt;
&lt;p&gt;Статьи по теме с картинками:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.cablechick.com.au/blog/understanding-trrs-and-audio-jacks/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.cablechick.com.au/blog/understanding-trrs-and-audio-jacks/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.epanorama.net/newepa/2014/09/15/android-device-external-mic-wiring/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.epanorama.net/newepa/2014/09/15/android-device-external-mic-wiring/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://bbs.nextthing.co/t/modifying-the-onboard-trrs-jack-for-microphone-audio-input/2148&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://bbs.nextthing.co/t/modifying-the-onboard-trrs-jack-for-microphone-audio-input/2148&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Используемое ПО:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;alsamixer&lt;/li&gt;
&lt;li&gt;pavucontrol&lt;/li&gt;
&lt;li&gt;встроенные модуль настроки в KDE&lt;/li&gt;
&lt;li&gt;audacity, наблюдать за функционированием микрофона&lt;/li&gt;
&lt;/ol&gt;</description>
    </item>
    
    <item>
      <title>Линейка Thinkpad становится всё более унылой</title>
      <link>https://htrd.su/blog/2017/02/20/linejka_thinkpad_stanovitsja_vsjo_bolee_unyloj/</link>
      <pubDate>Mon, 20 Feb 2017 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2017/02/20/linejka_thinkpad_stanovitsja_vsjo_bolee_unyloj/</guid>
      <description>&lt;p&gt;Походу Lonovo только &amp;ldquo;кирпичиный&amp;rdquo; дизайн не трогает. А всё остальное делает всё более казуальным. Судя по:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.lenovo.com/psref/pdf/tabook.pdf&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.lenovo.com/psref/pdf/tabook.pdf&lt;/a&gt; (
&lt;a href=&#34;https://htrd.su/img/post/2017/02/20/tabook.pdf&#34;&gt;сохранённая копия&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Итак:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Расплодили серию. Хрен пойми чем отличаются W/T/L, а ещё, типа недобуки: X/Carbon X1/etc&lt;/li&gt;
&lt;li&gt;Уход легендарного T61 и переход к линеке Txyz (первые представители T400/T500), ознаменовалось ознаменовался завершением эры 4:3 экранов на ноутбуках. Теперь и здесь засилье wide-screen 16:9. Для видео удобно. Для работы - не очень. Даже интернеты: половина сайтов оставляет уйму места по бокам. Возможно широкий экран удобен для людей работающих с таблицами с огромным числом столбцов&amp;hellip; Не знаю. Точно, что не спрос порождает предложение, а маркетоидный бред навязывает моду. Главное накормить непотребством, но так, что бы это вызвало &amp;ldquo;ВАУ!&amp;rdquo;&lt;/li&gt;
&lt;li&gt;К серии x30 (T430, T530, etc) линейка лишилась своей классической узнаваемой клавиатуры в угоду модной-молодёжной чиклектной (она же островная). Да фиг с ним, но раскладка вызывает недоумение: привет &lt;key&gt;PrtScr&lt;/key&gt; (хоть и 
&lt;a href=&#34;https://htrd.su/blog/2017/02/19/thinkpad_t530_klaviatura/&#34;&gt;поборолся&lt;/a&gt;), при этом PgUp/PgDown стали в более удобных позициях /хотя теми же средствами что и &lt;key&gt;PrnScr&lt;/key&gt; их можно забиндить на нужное поведение/), ряд &lt;key&gt;Fx&lt;/key&gt; клавиш без разделения на группы.&lt;/li&gt;
&lt;li&gt;В серии x40 трекпоинт лишился своих кнопок. Волна негодования была, судя по всему, такой, что в x50 их вернули. Без дублирования кнопок снизу под тачпадом (но сенсорные остались).&lt;/li&gt;
&lt;li&gt;Серия x30 последняя где используется ThinkLight. Оставили только подсветку клавиатуры. Кому как, а для меня это было одной из причин выбора Thinkpad. Особенно удобно, когда рядом блокнот в котором нужно сделать пометки по ходу работы.&lt;/li&gt;
&lt;li&gt;Серия x40 так же ознаменовалась ликвидацией защелки. Мне она кажется удобной. Некоторым - рудиментом&amp;hellip; Пока маленький сын не попытается открыть :)&lt;/li&gt;
&lt;li&gt;Снова клавиатура. С линейки 540 (да, касается только 15.6&amp;quot; модели) они вкорячили полноразмерную клавиатуру. Тем самым нарушив центровку основного поля ввода относительно экрана, ровно как и расположение тачпада. Кому так жизненно необходим цифровой блок на ноутбучной клавиатуре??? У меня на обычной он покрывается пылью, а тут просто растрата места.&lt;/li&gt;
&lt;li&gt;А вот динамики при этом решили заменить на полное непотребство. Да и 530 они не ахти, но фоном послушать можно. Точно не скажу, но с какой-то модели динамик а) монофонический и б) направлен вниз, в стол! Они что, решили стол или другую рабочую поверхность использовать как резонатор? Сабвуфер?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;На фоне этого выглядит забавно это (
&lt;a href=&#34;https://forums.lenovo.com/t5/Lenovo-CES-2017/Status-of-the-Retro-ThinkPad-project/td-p/3529052&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;тут свежее обсуждение&lt;/a&gt;):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://blog.lenovo.com/tag/retro&amp;#43;thinkpad&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://blog.lenovo.com/tag/retro+thinkpad&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Смотрится как эдакая попытка срубить бабла с того, что уже было, но было успешно слито. Если вообще будет сделано. А если сделано, то качественно. Воистину:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Как сделать человеку хорошо?&lt;/li&gt;
&lt;li&gt;Нужно должно делать плохо, а потом просто перестать.&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;
&lt;p&gt;Походу, остаётся только Dell Latitude, со своими тараканами и нечеловеческими ценами. Радует только то, что на мою текущую модель T530 валом запчастей и в пределы производительности я ещё не упирался.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>ThinkPad T530: клавиатура</title>
      <link>https://htrd.su/blog/2017/02/19/thinkpad_t530_klaviatura/</link>
      <pubDate>Sun, 19 Feb 2017 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2017/02/19/thinkpad_t530_klaviatura/</guid>
      <description>&lt;p&gt;Уже были стоны и жалобы от меня по поводу несколько убогой клавиатуры, точнее раскладки, точнее расположению &lt;key&gt;PrtScr&lt;/key&gt; кнопки. Но&amp;hellip; или жри кактус или исправляй. Я, обычно, выбираю второй вариант.&lt;/p&gt;
&lt;p&gt;Если коротко, команда ниже забиндит &lt;key&gt;PrtScr&lt;/key&gt; и сделает из неё &lt;key&gt;Menu&lt;/key&gt; (aka &lt;key&gt;Compose&lt;/key&gt;) клавишу:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo setkeycodes b7 &lt;span class=&#34;m&#34;&gt;127&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Для других клавиатур и ноутбуков может сработать, но нужно уточнять сканкод (&lt;code&gt;b7&lt;/code&gt; в примере выше).&lt;/p&gt;
&lt;p&gt;Эту команду помещаем в &lt;code&gt;/etc/rc.local&lt;/code&gt; или в аналогичный.&lt;/p&gt;
&lt;p&gt;Кому нужно подробностей и альтернативных вариантов - смотрим под катом.&lt;/p&gt;
&lt;p&gt;В современных системах почти все устройства ввода обслуживаются evdev. В пару с ними трудится udev. Последний может помочь первому в части переопределения сканкодов клавиш.&lt;/p&gt;
&lt;p&gt;Собственно все инструкции описаны в:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;less /lib/udev/hwdb.d/60-keyboard.hwdb
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Вот выдержки, которых достаточно для настройки:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#  - AT keyboard DMI data matches:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#      evdev:atkbd:dmi:bvn*:bvr*:bd*:svn&amp;lt;vendor&amp;gt;:pn&amp;lt;product&amp;gt;:pvr*&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#    &amp;lt;vendor&amp;gt; and &amp;lt;product&amp;gt; are the firmware-provided strings&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#    exported by the kernel DMI modalias.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Эта часть описывает шаблон выбора для AT клавиатур. Да, встроенная клавиатура в T530 это AT клавиатура. Привет NKRO из коробки :) Но об этом дальше.&lt;/p&gt;
&lt;p&gt;Следующая часть описывает шаги, которые нужно выполнить после настроек.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# To update this file, create a new file&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#   /etc/udev/hwdb.d/70-keyboard.hwdb&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# and add your rules there. To load the new rules execute (as root):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#   udevadm hwdb --update&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#   udevadm trigger /dev/input/eventXX&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# where /dev/input/eventXX is the keyboard in question. If in&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# doubt, simply use /dev/input/event* to reload all input rules.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Итак, определяем что у нас за клавиатура, смотрим выхлоп &lt;code&gt;dmesg&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[    2.282100] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input3
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;С вероятностью 147% оно всегда будет так. Запоминаем (особенно последнюю цифру):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/devices/platform/i8042/serio0/input/input3
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Теперь определяем сканкод клавиши (подставляем цифру в конце, которую запомнили выше, т.е. &lt;code&gt;input3&lt;/code&gt; -&amp;gt; &lt;code&gt;event3&lt;/code&gt;):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo evtest /dev/input/event3
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Получаем такой выхлоп:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Event: time 1487483975.506795, type 4 (EV_MSC), code 4 (MSC_SCAN), value b7
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Event: time 1487483975.506795, type 1 (EV_KEY), code 99 (KEY_SYSRQ), value 0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Event: time 1487483975.506795, -------------- SYN_REPORT ------------
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Если выхлоп не получаем, или получаем не тот, который ожидаем: просто перебираем разные номера для event.&lt;/p&gt;
&lt;p&gt;Смотрим строку с &lt;code&gt;MSC_SCAN&lt;/code&gt;, значение сканкода поле &lt;code&gt;value&lt;/code&gt; - &lt;strong&gt;b7&lt;/strong&gt; искомый сканкод.&lt;/p&gt;
&lt;p&gt;Кстати, клавиша определяется как &lt;code&gt;KEY_SYSRQ&lt;/code&gt;, но работает только как &lt;key&gt;PrtScr&lt;/key&gt;. За &lt;key&gt;SysRq&lt;/key&gt; функциональностью 
&lt;a href=&#34;https://htrd.su/blog/2017/01/12/thinkpad_t530_dostup_k_break_pause_scroll_lock_i_sysreq/&#34;&gt;вам сюда&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Далее нам нужно имя клавиши (и код заодно), которые используются внутри ядра. Смотрим в&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/usr/include/linux/input-event-codes.h
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;нужную клавишу. Имя для udev - нижним регистром имя макроопределения, без префикса &lt;code&gt;KEY_&lt;/code&gt;. Для &lt;code&gt;setkeycodes&lt;/code&gt; - dec значение.&lt;/p&gt;
&lt;p&gt;Клавиша меню это:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#define KEY_COMPOSE             127
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Имеем:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Имя для udev: &lt;strong&gt;compose&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Код для &lt;code&gt;setkeycodes&lt;/code&gt;: &lt;strong&gt;127&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Пишем правило для udev (&lt;code&gt;/etc/udev/hwdb.d/70-thinkpath-t530-keyboard.hwdb&lt;/code&gt;):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;evdev:atkbd:dmi:bvn*:bvr*:bd*:svn*:pn*:pvr*
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  KEYBOARD_KEY_b7=compose                    # map PrtScr to Menu
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Так как у нас только одна AT клавиатура, и другую подключить нельзя, то правило выше вполне имеет право на жизнь, но при желании можно уточнить как-то так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;evdev:atkbd:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*T530*:pvr*
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  KEYBOARD_KEY_b7=compose
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Выполняем команды, которые рекомендуют в комментариях к исходному фалу базы:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemd-hwdb update
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo udevadm trigger /dev/input/event*
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;И радуемся жизни. Или используем &lt;code&gt;setkeycodes&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo setkeycodes b7 &lt;span class=&#34;m&#34;&gt;127&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;тут всё понятно: b7 - узнанный сканкод. 127 - числовое значение &lt;code&gt;KEY_COMPOSE&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;После этого, всё, что использует драйвер evdev, будет воспринимать кнопку &lt;key&gt;PrtScr&lt;/key&gt; как &lt;key&gt;Menu&lt;/key&gt;. Трюк с &lt;code&gt;setkeycodes&lt;/code&gt; будет работать везде, где используется evdev. Стоит отметить, что сканкод платформо-специфичен. Под платформой понимается: AT PS/2, USB HID и т.п. Об этом планирую в другой статье рассказать.&lt;/p&gt;
&lt;p&gt;Естественно после всех манипуляций выше вы лишаетесь кнопки Print Screen, но его функциональность в части снятия скриншотов это просто условность и можно настроить окружение так, что бы работала другая комбинация. А можно переназначить другую клавишу аналогичным способом. К примеру, &lt;key&gt;F12&lt;/key&gt;. Лично я её использую очень редко. В терминале она вообще эмулируется &lt;key&gt;Shift+F2&lt;/key&gt; (для &lt;key&gt;F11&lt;/key&gt; - &lt;key&gt;Shift+F1&lt;/key&gt;).&lt;/p&gt;
&lt;p&gt;Другим решением может стать использовать 
&lt;a href=&#34;https://htrd.su/blog/2018/05/22/thinkpad_t530_delaem_iz_knopki_launch1_-_sysrq/&#34;&gt;кнопки Launch1&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Полезные ссылки на тему:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;a href=&#34;https://wiki.archlinux.org/index.php/extra_keyboard_keys&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://wiki.archlinux.org/index.php/extra_keyboard_keys&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://wiki.archlinux.org/index.php/Map_scancodes_to_keycodes&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://wiki.archlinux.org/index.php/Map_scancodes_to_keycodes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;man 8 setkeycodes&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;man 1 loadkeys&lt;/code&gt; - если хочется магии в консоли.&lt;/li&gt;
&lt;/ol&gt;</description>
    </item>
    
    <item>
      <title>Пидан: взгляд с другого ракурса или кольцо Ойры</title>
      <link>https://htrd.su/blog/2017/01/29/pidan_vzgljad_s_drugogo_rakursa_ili_kolco_ojry/</link>
      <pubDate>Sun, 29 Jan 2017 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2017/01/29/pidan_vzgljad_s_drugogo_rakursa_ili_kolco_ojry/</guid>
      <description>&lt;p&gt;Уже, как обычно, сезон снегоступинга сходу не задаётся и в этом году. Практически весь декабрь проболел какой-то заразой (кашель без каких либо намёков на температуру или насморк), а на Новый Год, вместо празднования на вершине горы в палатке, обошёлся компанией градусника и некоторого количества мероприятий по возвращению здоровья.&lt;/p&gt;
&lt;p&gt;Но вот новогодние каникулы закончились. Незаметно пролетела первая рабочая неделя и первые выходные. Желание куда-то выгрестись обрело форму рассылки писем с предложением сходить хоть куда-то хоть на сколько. В результате собралась компания: я, Коля, Кирилл. На один день решается сходить Спайдер (он же Лёха) с женой. Сам после перелома и для него выход — чисто проверить возможности. Он же предлагает забрасываться на его пепелаце. Обратно планируем выбираться уже на электричке.&lt;/p&gt;
&lt;p&gt;Маршрут на 21-22 января, по итогу, получился таким:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2017/01/29/pidan_vzgljad_s_drugogo_rakursa_ili_kolco_ojry_image_0.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;В субботу, около 6.30 стартуем с Постышева. Около 8.20 (или чуть раньше) уже на горнолыжной базе. Температура за бортом -21 градус — чем холоднее, тем круче! Выходим на маршрут около 8.45.&lt;/p&gt;
&lt;p&gt;Благодаря морозу лица участников получают дополнительные украшения:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2017/01/29/pidan_vzgljad_s_drugogo_rakursa_ili_kolco_ojry_image_1.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Поднимались медленно, к 13.30 вышли на осыпи:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2017/01/29/pidan_vzgljad_s_drugogo_rakursa_ili_kolco_ojry_image_2.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2017/01/29//pidan_vzgljad_s_drugogo_rakursa_ili_kolco_ojry_image_3.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2017/01/29//pidan_vzgljad_s_drugogo_rakursa_ili_kolco_ojry_image_4.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2017/01/29//pidan_vzgljad_s_drugogo_rakursa_ili_kolco_ojry_image_5.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Тропа хорошо натоптана, на осыпях заметена, но наст держит очень хорошо. До самой вершины шли без снегоступов.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2017/01/29//pidan_vzgljad_s_drugogo_rakursa_ili_kolco_ojry_image_6.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2017/01/29//pidan_vzgljad_s_drugogo_rakursa_ili_kolco_ojry_image_7.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Лагерь разбивали, чуть перевалив через хребет на юг. Днём температура была около -15 градусов, что почти не ощущалось ввиду практически полного штиля.&lt;/p&gt;
&lt;p&gt;Коля и Кирилл после перекуса и постановки лагеря и до темна занимались копанием снежных пещер в наддуве рядом с лагерем, благо две снежные лопаты были в наличии. Фото потом приложу.&lt;/p&gt;
&lt;p&gt;У Коли вышел холодный карцер, а вот пещера Кирилла из-за практически естественного подъёма вышла очень тёплой. Был даже соблазн раскопать побольше и там же ночевать. Но решили перебороть на первый раз.&lt;/p&gt;
&lt;p&gt;После захода забиваемся в палатку, топим снег, готовим ужин. Примусовские котлы с теплообменниками порадовали. Перезаправленные Колины баллоны в этот раз дали небольшую осечку, как минимум первый пришлось греть на водяной бане. Плюс заправка была уже остатками газа из 5л баллона и было видно, что туда попали какие-то нифеля. Так что при зажигании в некоторые моменты времени наблюдали резь в глазах и неприятный запах.&lt;/p&gt;
&lt;p&gt;Это при том, что вентиляция сделана достаточно добротно: обеспечен подток воздуха через вход и открыта полностью вентиляция наверху. В случае использования радиаторных котлов, интегрированных систем, типа Jet Boil или MSR Reactor (для него это наиболее актуально!) данные действия архиобязательны. Хотя да, лучше вообще готовить на улице.&lt;/p&gt;
&lt;p&gt;&amp;lt;hidden Немного нудной технической информации&amp;gt;&lt;/p&gt;
&lt;p&gt;Кто не знает, но вместе с газом в баллон за заправке попадает всякая сопутствующая хрень, которая по итогу почти не горит и не испаряется из баллона, может забивать форсунки  и при сгорании давать крайне неприятный запах. Помимо всего прочего, эта субстанция занимает место в баллоне, и при заправке вы получаете меньше полезного газа. И с каждой заправкой полезного газа всё меньше. Речь идёт не про туристические баллоны, а про бытовой 
&lt;a href=&#34;http://wikimassa.org/skolko_vesit_gazovyj_ballon&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;пропан на 5л, 12л и так далее&lt;/a&gt; с которых потом и можно перезаряжать туристические (что делается на свой страх и риск, ибо производитель чётко и ясно говорит: не перезаправлять). По идее, на станциях, где происходит обмен пустого баллона на заправленный, пустой баллон должен проходить освидетельствование и чистку, но по факту, происходит ли это на самом деле, сказать трудно.&lt;/p&gt;
&lt;p&gt;Кроме того, часть сопел на горелке оказалось забито. Трудно назвать причину, но, возможно, продуктами сгорания этой ненужной хрени.&lt;/p&gt;
&lt;p&gt;По итогу, если перезаправляете баллоны, то имеет смысл время от времени менять сам баллон и заправлять первой половиной или двумя третями свежезаправленного баллона на 5л.&lt;/p&gt;
&lt;/hidden&gt;
&lt;p&gt;В общем, худо-бедно, наготовили ужин, натопили воды и залили в термосы на следующий день, что бы только разогреть и сделать чай (чисто экономии времени для) и около десяти отвалились на боковую. Градусник тем временем показывал +5 внутри палатки.&lt;/p&gt;
&lt;p&gt;Ночью было сносно, но подмерзали ноги. Хотя спальник рассчитан на -9, а градусник в палатке, лёжа в кармане показывал всего -3. Судя по всему уже отходился за почти 4 года (синтетика Thermolite Extreme). Плюс коротковат и в палатке ноги утыкались во внешнюю стенку.&lt;/p&gt;
&lt;p&gt;&amp;lt;hidden По поводу длинны спальника&amp;gt;&lt;/p&gt;
&lt;p&gt;Грубо подобрать спальник под свой рост можно зная его размеры. В случае для лета вполне достаточно длины спальника РОСТ + 20 см. Для зимы запас уже должен быть не менее 30 см: в самом спальнике больше утеплителя и, при той же внешней длине, меньше внутреннего пространства. У меня же спальник на зиму 200см при росте 181см. Реально ощущается нахватка этих самых 10см.&lt;/p&gt;
&lt;/hidden&gt;
&lt;p&gt;В любом случае, накинутая сверху пуховка проблему решила (сам был одет в термобельё + флис).&lt;/p&gt;
&lt;p&gt;Утром сильно не хотелось выползать в холодный внешний мир. Дрыхли/валялись почти до 8.30, после чего таки заставили себя собраться.&lt;/p&gt;
&lt;p&gt;Завтрак, чай, завариваем и разливаем чай по термосам, собираем лагерь и в 11.20 выходим.&lt;/p&gt;
&lt;p&gt;Проходим вершину Пидана, внизу видно дымку, а над нами ясное небо. Наблюдаем как туман и дымка перетекает через хребты:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2017/01/29/pidan_vzgljad_s_drugogo_rakursa_ili_kolco_ojry_image_8.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;На сегодня обещали сильный ветер, но прогноз не сильно оправдывается. Да не штиль, пришлось подзамотаться, но и не что-то неординарное.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2017/01/29/pidan_vzgljad_s_drugogo_rakursa_ili_kolco_ojry_image_9.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;У тригопункта ждём, пока Кирилл обует негоступы. Тем временем подбегает Вова Попов, здороваемся, перекидываемся парой слов и в путь.&lt;/p&gt;
&lt;p&gt;Ходить по ненахоженным маршрутам хоть и сложнее, но интересно. Такие виды много стоят:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2017/01/29/pidan_vzgljad_s_drugogo_rakursa_ili_kolco_ojry_image_10.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;И ваш покорный слуга на фоне их:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2017/01/29/pidan_vzgljad_s_drugogo_rakursa_ili_kolco_ojry_image_11.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Как зашли в лес, снег стал более пушистым и проваливаться больше, что и понятно. Но и теплее стало. Намёка на ветер почти не стало.&lt;/p&gt;
&lt;p&gt;По ходу движения обратил внимание, что компас на навигаторе немного врёт. Такое случается, нужно всего лишь сделать несложную калибровку… Вот только сделать её не удалось. 15 раз и последний шаг завершается ошибкой. Сделать её получилось только уже внизу, на горнолыжной базе. Варианты: близость телефона в нагрудном кармане или магнитная аномалия. В общем, на всякий случай, пользуясь компасом в навигаторе обратите внимание на близость телефона к нему и отложите его подальше.&lt;/p&gt;
&lt;p&gt;Тем временем вышли на шикарные осыпи:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2017/01/29/pidan_vzgljad_s_drugogo_rakursa_ili_kolco_ojry_image_12.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;А вершину уже накрыло:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2017/01/29/pidan_vzgljad_s_drugogo_rakursa_ili_kolco_ojry_image_13.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Вовремя мы от туда срулили. Слева виден хребет с классическим маршрутом на гору.&lt;/p&gt;
&lt;p&gt;А вот хребет всё продолжал удивлять своей многогранностью. После красивого заиндевелого леса и шикарных заметённых осыпей нам открывается… Тонкая перемычка без леса, но густо заросшая порослью. На этом участке почти не было сброса или набора высоты. Сам участок всего около километра. Но пробирались мы через него около часа или больше. Когда мы остановились в нём перевести дух и испить чаю, то это было единственное место, где даже пришлось подраздеться: сюда даже ветер не заходит!&lt;/p&gt;
&lt;p&gt;Вот этот участок, неприятной наружности:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2017/01/29/pidan_vzgljad_s_drugogo_rakursa_ili_kolco_ojry_image_14.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;За этим участком начинается уже адекватный и хорошо проходимый лес. Через некоторое время даже появляется намёк на старую дорогу.&lt;/p&gt;
&lt;p&gt;Уже в значительно более быстром темпе добирались до верха горнолыжной трассы и после спуска, медленным сапом, дошли до деревни, расположились в новоявленном кафе, в минутной удалённости от станции, где погрелись, искушали борща и испили чаю.&lt;/p&gt;
&lt;p&gt;По итогу, хорошо прогулялись. Прошёл хребет, по которому была мысль пройти ещё несколько лет назад.&lt;/p&gt;
&lt;p&gt;В первый день находили примерно 10 км с суммарным набором высоты 1163 метров (и сбросом 52). Во второй день находили около 14 км, с суммарным набором высоты 247 метров и сбросом 1443 метра.&lt;/p&gt;
&lt;p&gt;По расходу газа. На моей BRS-8 готовили быстрый сайровый суп, утром лапшу быстрой варки, кипятили воду в термосы (но не топили). Чай не делали. С топлением снега ушло 162 грамма, 2 готовки зимой, плюс термосы, это полноценный день, так что на человека где-то 54 грамма. Если считать, что две готовки это 2/3 дня, то получается 81 грамм. Так как чай не готовился на этом баллоне, то истина где-то посередине :)&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Qt Creator, CMake: отображение всех файлов в стоковом плагине</title>
      <link>https://htrd.su/blog/2017/01/18/qt_creator_cmake_otobrazhenie_vsex_fajlov_v_stokovom_plagine/</link>
      <pubDate>Wed, 18 Jan 2017 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2017/01/18/qt_creator_cmake_otobrazhenie_vsex_fajlov_v_stokovom_plagine/</guid>
      <description>&lt;p&gt;Немного в сторону от CMakeProjectManager2, в направлении стокового плагина.&lt;/p&gt;
&lt;p&gt;Дискуссия на 
&lt;a href=&#34;https://www.linux.org.ru/forum/talks/13152861?lastmod=1484687096576#comment-13153829&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;LOR&lt;/a&gt; навела на 
&lt;a href=&#34;https://www.linux.org.ru/forum/talks/13152861?cid=13154043&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;мысль&lt;/a&gt;. Ради спортивного интереса попробовал реализовать и&amp;hellip; получилось! :)&lt;/p&gt;
&lt;p&gt;За подробностями под кат.&lt;/p&gt;
&lt;p&gt;Итак, идея была, использовать скрипт для первоначальной инициализации кеша. Это тот, который cmake передаётся через параметр &lt;code&gt;-C&lt;/code&gt;. Не получилось. От туда процесятся только &lt;code&gt;set(...)&lt;/code&gt; команды.&lt;/p&gt;
&lt;p&gt;Следущий шаг, использовать параметр &lt;code&gt;CMAKE_TOOLCHAIN_FILE&lt;/code&gt; и задать свой псевдо тулчейн, в котором генерировать список и формировать фейковый таргет со списком файлов. Забегая вперёд - этот вариант сработал.&lt;/p&gt;
&lt;p&gt;У этого подхода есть плюс и минус:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;плюс&lt;/strong&gt;: для использования не нужно модифицировать исходный код. Совсем. В новых версиях QtC достаточно отредактировать настройки Kit.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;минус&lt;/strong&gt;: возникают сложности, если нужно использовать реальный тулчейн файл.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Про плюс всё понятно, а вот минус можно обрулить более менее красиво: завести параметр &lt;code&gt;CMAKE_TOOLCHAIN_FILE_FORWARD&lt;/code&gt; и обрабатывать его в нашем всевдо-тулчейне, если поставлен - значит просто включить его директивой &lt;code&gt;include(...)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Собственно результат (или 
&lt;a href=&#34;https://gist.github.com/h4tr3d/0b610a507ed42faeb3c32e2700fabb13&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;gist&lt;/a&gt;):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cmake&#34; data-lang=&#34;cmake&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;#
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# Open QtC :: Tools -&amp;gt; Options, Go to Build &amp;amp; Run page, Switch to the Kits page.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;#   Select needed Kit and press Change... for CMake Configuration item
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;#   Add Parameter:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;#     CMAKE_TOOLCHAIN_FILE=/path/to/qtc-scan-all.cmake
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;#
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;#   If you need real toolchain file, just pass it as:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;#     CMAKE_TOOLCHAIN_FILE_FORWARD=...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;#
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;#   Rescan tree: Build -&amp;gt; Clear CMake Configuration.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;#
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;#   There is next configuration parameters (can be pass via -DPARAM=value)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;#     SCAN_GLOB_EXPR - globbing expression for included files, default: *
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;#     SCAN_DUMMY_PROG - dummy executable for dummy target, default: true (aka /bin/true)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;#
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;NOT&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;TARGET&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;ALL_PROJECT_FILES&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;SCAN_GLOB_EXPR&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;CACHE&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;STRING&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Setup file system scanning pattern to display all needed files, default: *&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;SCAN_DUMMY_PROG&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;true&amp;#34;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;CACHE&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;STRING&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Dummy prog for dummy target, default: true&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;nb&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;GLOB_RECURSE&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;ALL_RPOJECT_FILES_LIST&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;LIST_DIRECTORIES&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;false&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;RELATIVE&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;CMAKE_SOURCE_DIR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;SCAN_GLOB_EXPR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;nb&#34;&gt;add_custom_target&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;ALL_PROJECT_FILES&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;SCAN_DUMMY_PROG&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;SOURCES&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;ALL_RPOJECT_FILES_LIST&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;endif&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Forward real toolchain file
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;CMAKE_TOOLCHAIN_FILE_FORWARD&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;nb&#34;&gt;include&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;CMAKE_TOOLCHAIN_FILE_FORWARD&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;endif&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Можно даже задать маску для сканирования, изменив параметр &lt;code&gt;SCAN_GLOB_EXPR&lt;/code&gt;. В новых версиях QtC это сделано удобно. При определённых доработках можно добавить и исключающие маски.&lt;/p&gt;
&lt;p&gt;Для того, что бы запустить этот хак, нужно в настройках QtC (Tools -&amp;gt; Options&amp;hellip;) выбрать пункт &amp;ldquo;Build &amp;amp; Run&amp;rdquo; и вкладку &amp;ldquo;Kits&amp;rdquo;, после чего выбрать нужный кит и отредактировать параметры CMake (CMake Configuration), добавив строчку:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cmake&#34; data-lang=&#34;cmake&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;CMAKE_TOOLCHAIN_FILE=/path/to/qtc-scan-all.cmake
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Проделать это для всех желаемых тулчейнов.&lt;/p&gt;
&lt;p&gt;Пересканировать дерево теперь можно будет, выбрав &amp;ldquo;Build -&amp;gt; Clear CMake Configuration&amp;rdquo;, так как параметры тулчейн-файла применяются только на чистых запусках cmake.&lt;/p&gt;
&lt;p&gt;А выглядеть это будет как-то так:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2017/01/18/qtc-all-files-wa.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Что ещё можно сделать:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Добавить исключающие маски&lt;/li&gt;
&lt;li&gt;Задать параметром имя псевдо-таргета&lt;/li&gt;
&lt;li&gt;Можно завести несколько таргетов и реализовывать различные варианты группировок&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Естественно, что такой подход не позволит добавлять и удалять файлы через дерево, но он же позволяет использовать всякие оптимизации типа пересканирования только при очистке кеша вместе с полной конфигурацией. Ещё данных подход не позволяет исключать нежелательные файлы из вывода в локаторе&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>CMakeProjectManager2: теперь и с Server Mode</title>
      <link>https://htrd.su/blog/2017/01/16/cmakeprojectmanager2_teper_i_s_server_mode/</link>
      <pubDate>Mon, 16 Jan 2017 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2017/01/16/cmakeprojectmanager2_teper_i_s_server_mode/</guid>
      <description>&lt;p&gt;Вот и прошло почти два месяца с последних изменений.&lt;/p&gt;
&lt;p&gt;Время было потрачено:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;для ожидания некоторой стабилизации апстрима, так как, по сути, они требовали писать абсолютно новый код для реализации текущего функционала, а в условиях сильных и фатальных изменений, переписывать свой код на каждый чих&amp;hellip; у меня столько времени нет.&lt;/li&gt;
&lt;li&gt;была предпринята 
&lt;a href=&#34;https://htrd.su/blog/2017/01/10/cmakeprojectmanager2_vozvraschaetsja/&#34;&gt;неудачная попытка&lt;/a&gt; продвинуть код в апстрим.&lt;/li&gt;
&lt;li&gt;ну и изучался новый код, когда выпадало время, плюс раздумья - как применить функциональность и для серверного режима работы CMake.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Так как код отвергли, а это, по сути, написанная с нуля реализация старого функционала, то он был взят за основу новых изменений. Ну как основу - 99%.&lt;/p&gt;
&lt;p&gt;Есть и изменения. Малой кровью была создана обёртка поверх Server Mode Reader&amp;rsquo;а, которая предоставляет всего его внутренние профиты за исключением классического вида дерева файлов.&lt;/p&gt;
&lt;p&gt;Соответственно изменения, сделанные для старого ридера (Tealeaf Reader), который используется для версий CMake младше 3.7, в части отображения всех файлов, добавления, удаления и переименования теперь применимы и для Server Mode Reader.&lt;/p&gt;
&lt;p&gt;Сразу же был найден и первый баг: неправильно обрабатываются дефайны из CMAke (&lt;code&gt;add_definition()&lt;/code&gt;). 
&lt;a href=&#34;https://codereview.qt-project.org/#/c/182431/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Патч уже отослан&lt;/a&gt;, у себя в коде изменений делать не буду, подожду, пока попадёт в апстрим, потом засинхронизируюсь.&lt;/p&gt;
&lt;p&gt;Функциональность же передачи Toolchain файлов выла дропнута. Можно делать настройки через Kit или же вручную создать параметр CMAKE_TOOLCHAIN_FILE и задать нужный. Главное не забудьте сделать Build -&amp;gt; Clear CMake Configuration после этого. Ну и будьте готовы, что парсер C++ вас перестанет понимать, как минимум, частично.&lt;/p&gt;
&lt;p&gt;Пакеты для Ubuntu 14.04 и 16.04 и производных уже доступны через 
&lt;a href=&#34;https://launchpad.net/~adrozdoff/&amp;#43;archive/ubuntu/qtcreator-git&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;PPA&lt;/a&gt;. Не забываем внимательно читать описание репозитория.&lt;/p&gt;
&lt;p&gt;В ближайших планах подготовить ветку для стабильной версии QtC - 4.2. Там окажется только текущая функциональность и нового появляться не будет (если только кто-то не возьмёт её на сопровождение). Есть вероятность, что серверный режим будет выключен, так как он требует много смежных изменений и бекпортирования. Явные косяки тоже будут переноситься. В будущем, планирую саппортить только текущую версию QtC. Для старых не планирую даже исправления ошибок переносить. На всё это нужно время.&lt;/p&gt;
&lt;p&gt;Если кто-то предложит варианты, как делать пребилды плагина для официальных версий QtC в автоматическом или полуавтоматическом режиме, буду рад выслушать.&lt;/p&gt;
&lt;p&gt;Ну и с ошибками и предложениями: 
&lt;a href=&#34;https://github.com/h4tr3d/cmakeprojectmanager2/issues&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/h4tr3d/cmakeprojectmanager2/issues&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>ThinkPad T530: доступ к Break, Pause, Scroll Lock и SysReq</title>
      <link>https://htrd.su/blog/2017/01/12/thinkpad_t530_dostup_k_break_pause_scroll_lock_i_sysreq/</link>
      <pubDate>Thu, 12 Jan 2017 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2017/01/12/thinkpad_t530_dostup_k_break_pause_scroll_lock_i_sysreq/</guid>
      <description>&lt;p&gt;Начиная с Tx30 Lenovo дропнули старую клавиатуру на ноутбуках серии ThinkPad, что очень грустно, так как новая в части предоставляемой раскладки просто не выдерживает критики. Одно расположение клавиши Print Screen чего только стоит - ощущение, что клавиатура для ярых скриншотеров, не меньше. С другой стороны, расположение PgUp/PgUp значительно более удобнее, нежели на классике.&lt;/p&gt;
&lt;p&gt;Помимо сокращения числа рядов клавиш, сократилось и их количество. К примеру, нет вышеозначенных в заголовке клавиш. При этом официальная документация на сайте 
&lt;a href=&#34;https://support.lenovo.com/ru/en/documents/ht074004&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&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;&lt;key&gt;Break&lt;/key&gt;&lt;/td&gt;
          &lt;td&gt;Fn+B&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;key&gt;SysRq&lt;/key&gt;&lt;/td&gt;
          &lt;td&gt;Fn+S&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;key&gt;Scroll Lock&lt;/key&gt;&lt;/td&gt;
          &lt;td&gt;Fn+K&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;key&gt;Pause&lt;/key&gt;&lt;/td&gt;
          &lt;td&gt;Fn+P&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Данные комбинации не зависят от операционки, судя по всему, генерируются самим контроллером, так что должны работать и в консоли и в иксах без каких-то телодвижений.&lt;/p&gt;
&lt;p&gt;Собственно вопрос, а чего бы эти значения не нанести на сами клавиши?&lt;/p&gt;
&lt;p&gt;Ииии важное замечение, как работать с 
&lt;a href=&#34;https://ru.wikipedia.org/wiki/SysRq#.D0.A1.D0.BF.D0.B8.D1.81.D0.BE.D0.BA_.D0.BA.D0.BE.D0.BC.D0.B0.D0.BD.D0.B4_SysRq_.D0.B2_Linux&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;SysRq в Linux&lt;/a&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Нажимаем Alt&lt;/li&gt;
&lt;li&gt;Нажимаем Fn&lt;/li&gt;
&lt;li&gt;Нажимаем S&lt;/li&gt;
&lt;li&gt;Отпускаем S&lt;/li&gt;
&lt;li&gt;Отпускаем Fn&lt;/li&gt;
&lt;li&gt;Нажимаем нужно командную клавишу (например S для синхронизации дисковых буферов, P - для распечатки регистров или C для паники :)&lt;/li&gt;
&lt;li&gt;Отпускаем нажатые клавиши в любом порядке или, &lt;strong&gt;не отпуская Alt&lt;/strong&gt;, нажимаем следующую командную клавишу&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;ВАЖНО:&lt;/strong&gt; простое нажатие Alt+Fn+S+буква ни к чему не приведут.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>CMakeProjectManager2 возвращается</title>
      <link>https://htrd.su/blog/2017/01/10/cmakeprojectmanager2_vozvraschaetsja/</link>
      <pubDate>Tue, 10 Jan 2017 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2017/01/10/cmakeprojectmanager2_vozvraschaetsja/</guid>
      <description>&lt;p&gt;В продолжение 
&lt;a href=&#34;https://htrd.su/blog/2016/12/24/qt_creator_cmake_i_sudba_cmakeprojectmanager2/&#34;&gt;post/2016/12/24/qt_creator_cmake_i_sudba_cmakeprojectmanager2&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Ревью 
&lt;a href=&#34;https://codereview.qt-project.org/#/c/180827/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://codereview.qt-project.org/#/c/180827/&lt;/a&gt; расставило точки над i: 
&lt;a href=&#34;https://github.com/qtproject/qt-creator/commit/f1456d3fd408183cd0cbd9a559ce7e1018e014bc&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&amp;ldquo;Project View == Build System View&amp;rdquo;&lt;/a&gt;, билд система не может отображать все файлы проекта? Значит не будем показывать. Билд система не предоставляет возможности добавлять, переименовывать и удалять файлы в проекте? Значит не будем даже пытаться предоставить возможность это делать. Не удобно? Ничего, целостность концепции важнее.&lt;/p&gt;
&lt;p&gt;Хотя&amp;hellip; мне одному кажется, что абстракции тут текут? Ведь Project View сам по себе подразумевает именно проект?&lt;/p&gt;
&lt;p&gt;Да, моё решение тоже не верх совершенства, даже так - костыль. Но он же реально помогает в условиях отсутствия более приличной альтернативы&amp;hellip;&lt;/p&gt;
&lt;p&gt;Ну и обоснование всего одно: &amp;ldquo;Я боюсь баг-репортов&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Неприятно, что у меня куча идей, а код из-за сервер-мода будет очень сильно меняться ещё, теперь держать кодовую базу в актуальном состоянии будет всё сложнее (более тяжёлые мёржи).&lt;/p&gt;
&lt;p&gt;В любом случае, сейчас будет перезагрузка кода, потому как для новой кодовой базы, по сути, написан новый код. Сейчас буду думать, как наименьшей кровью в истории перенести новые изменения. Скорее всего придётся заревертить все прошлые мои изменений, привести master в состояние идентичное qtc-master, после чего просто сделать новый комит.&lt;/p&gt;
&lt;p&gt;Ну а родной менеджер начнёт поддерживать данную функциональность, только кода CMake Server Mode сподобится на это. Удачи в ожидании :) Особенно при том условии, что конкуренты (KDevelop, Clion) это умеют делать.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>SSL на блоге</title>
      <link>https://htrd.su/blog/2017/01/09/ssl_na_bloge/</link>
      <pubDate>Mon, 09 Jan 2017 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2017/01/09/ssl_na_bloge/</guid>
      <description>&lt;p&gt;SSL Everywhere. С HTTP настроен редирект на HTTPS.&lt;/p&gt;
&lt;p&gt;Сертификаты от 
&lt;a href=&#34;https://letsencrypt.org&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Let&amp;rsquo;s Encrypt&lt;/a&gt;, получение и обновление сертификатов через 
&lt;a href=&#34;https://certbot.eff.org&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;CertBot&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Работать будет с браузерами, которые умеют &lt;a href=&#34;https://ru.wikipedia.org/wiki/Server_Name_Indication%7cSNI&#34; target=&#34;_blank&#34;&gt;Server_Name_Indication|SNI&lt;/a&gt;
, т.е. в пролёте древние Андроиды на 2.3.7, всякие IE6-IE8, HTTP клиенты в Java 6u45 и 7u25.&lt;/p&gt;
&lt;p&gt;Первоначальный рейтинг C тюнился до A+ по следующим статьям:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://raymii.org/s/tutorials/HTTP_Strict_Transport_Security_for_Apache_NGINX_and_Lighttpd.html#NGINX&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://raymii.org/s/tutorials/HTTP_Strict_Transport_Security_for_Apache_NGINX_and_Lighttpd.html#NGINX&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Результат: 
&lt;a href=&#34;https://www.ssllabs.com/ssltest/analyze.html?d=htrd.su&amp;amp;hideResults=on&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://www.ssllabs.com/ssltest/analyze.html?d=htrd.su&amp;hideResults=on&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Что пришлось менять и что поломалось:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ссылки на банеры, в частности картинки пришлось утянуть себе, так как доступны только по HTTP&lt;/li&gt;
&lt;li&gt;Воспользоваться миграционными тулами Disqus, что бы восстановить комментарии к статьям (URL Mapper, предварительно запросив текущий список и обработав его скриптом)&lt;/li&gt;
&lt;li&gt;Счётчики G+ слетели. Как их чинить для новых страниц - хз.&lt;/li&gt;
&lt;li&gt;&amp;hellip;&lt;/li&gt;
&lt;li&gt;Что ещё отвалилось. Иначе невозможно :)&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Garmin GPSMAP 64s</title>
      <link>https://htrd.su/blog/2016/12/30/garmin_gpsmap_64s/</link>
      <pubDate>Fri, 30 Dec 2016 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2016/12/30/garmin_gpsmap_64s/</guid>
      <description>&lt;p&gt;Обновочка. Продал свой GPSMAP 62s, как более неподдерживаемый. Плюс хотелось GLONASS. Зачем только не совсем понимаю :)&lt;/p&gt;
&lt;p&gt;Отличия пока только визуальные: 62s мне достался практически сразу после выхода, и у него была детская болячка - скрипел корпус. 64s появился в 2014 году и корпус более крепкий. А вот резиновая заглушка для USB и антены на новом навигаторе доверия не внушает. Ещё более тактильная отдача на кнопках при нажатии.&lt;/p&gt;
&lt;p&gt;Внутри место под флешку развернули на 90 градусов, теперь шансов, при доставании батареи, что флешка отойдёт меньше. А проблем с этим было две только среди моих знакомых (вторая - при мне быстро решили, но я уже про беду знал). Проявляется - карта то появляется, то исчезает.&lt;/p&gt;
&lt;p&gt;Заявлено более короткий срок жизни от батареи. Минимальное время включения подсветки экрана увеличено с 5 сек до 15.&lt;/p&gt;
&lt;p&gt;В этой модели можно заряжать аккумуляторы от USB. С одним &amp;ldquo;но&amp;rdquo;: внутри батарейного отсека появилась кнопка, что бы зарядка началась, нужно, что бы она была нажата. Автоматически это может сделать фирменный пак аккумуляторов, которые &amp;ldquo;сшит&amp;rdquo; общей рубашкой. Эта рубашка и зажимает кнопку. Типа, что бы беспечный пользователь не начал заряжать щелочные батарейки.&lt;/p&gt;
&lt;p&gt;К сожалению, погонять чисто GLONASS на приборе не получится, доступные режимы: GPS, GPS+GLONASS. Чисто GLONASS - нет. А очень бы хотелось.&lt;/p&gt;
&lt;p&gt;Теперь по ценам&amp;hellip; Не покупайте у наших барыг! Типичная цена на навигатор в России - 25000 руб. Плюс минус. Самая маленькая найденная - около 20к руб. Добавьте судя стоимость доставки - от 500 до 1500 руб. (особенно, если хочется быстрее получить). А вот покупка и доставка с Амазона (я выбрал дорогую доставку UPS за 37$) вышла примерно в 15800 руб. (получил в руки за 1.5 недели). Что даже дешевле покупки мною предыдущего навигатора 62s - он мне обошёлся в 15900 руб., а ведь происходило это существенно раньше и по совсем другому курсу доллара. Так-то. Продавец: 
&lt;a href=&#34;https://www.amazon.com/gp/product/B00HWL9AS8/ref=oh_aui_detailpage_o00_s00?ie=UTF8&amp;amp;psc=1&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://www.amazon.com/gp/product/B00HWL9AS8/ref=oh_aui_detailpage_o00_s00?ie=UTF8&amp;psc=1&lt;/a&gt;. Карту памяти купил уже тут, отдал за 32Гб около 1000 руб.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Учебные фильмы</title>
      <link>https://htrd.su/blog/2016/12/29/uchebnye_filmy/</link>
      <pubDate>Thu, 29 Dec 2016 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2016/12/29/uchebnye_filmy/</guid>
      <description>&lt;p&gt;Я на них вырос (часть из них крутили по 
&lt;a href=&#34;http://ru.tvpedia.wikia.com/wiki/%D0%A3%D1%87%D0%B5%D0%B1%D0%BD%D0%BE%D0%B5_%D0%A2%D0%92&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;УТВ&lt;/a&gt;): 
&lt;a href=&#34;https://www.youtube.com/user/AKhodus/videos&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://www.youtube.com/user/AKhodus/videos&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Qt Creator, CMake и судьба CMakeProjectManager2</title>
      <link>https://htrd.su/blog/2016/12/24/qt_creator_cmake_i_sudba_cmakeprojectmanager2/</link>
      <pubDate>Sat, 24 Dec 2016 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2016/12/24/qt_creator_cmake_i_sudba_cmakeprojectmanager2/</guid>
      <description>&lt;p&gt;Проект в стадии прекращения работы над ним&amp;hellip;&lt;/p&gt;
&lt;p&gt;&amp;hellip;А кто пользовался и следил - без паники! То, что давно не обновлялся репозиторий, это следствие того, что сделанные изменения готовятся быть продвинутыми в upstream, 
&lt;a href=&#34;https://blog.qt.io/blog/2016/11/15/cmake-support-in-qt-creator-and-elsewhere/#comment-1198504&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;по-пожеланию Tobias Hunger&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Да, это не даёт никаких гарантий, что изменения приживутся. Плюс я слабо представляю как реализовать две основные фичи: отображение всех файлов и добавление/удаление/переименование файлов в новом представлении дерева, сделанное для CMake Server Mode. Ревью же на включающее эти фичи для CMake &amp;lt; 3.7 будет скоро создано, пока были сделаны некоторые подготовительные шаги.&lt;/p&gt;
&lt;p&gt;Последующими шагами будет реализация следующих возможностей:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Добавление настроек CMake для проекта. Среди этих настроек хочется разместить такие параметры, как:
* отображать сканированные файлы в дереве или нет
* управление запуском CMake при добавлении/удалении/переименовании файлов
* управление исключениями для сканера дерева, что бы исключить нежелательные файлы и ускорить сканирование и формирование дерева&lt;/li&gt;
&lt;li&gt;Вынести формирование дерева проекта в абстрактные классы и сделать возможность пользователю управлять представлением. Заодно есть желание сделать вариант построения дерева средний между классикой и новым для server mode, более похожий на оный в KDevelop. Возможно этот шаг будет поделён на два: сначала абстракции без изменения внешнего вида, что бы не вызывать культурного шока, а потом уже остальное. В любом случае, работает правило: больше полезных комитов, а не нытья в рассылке - больше к твоему мнению прислушиваются, а значит легче протолкнуть свои идеи.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Пока минусом использования для построения дерева проекта всех файлов является момент построения дерева: оно делается внутренностями QtC, требует большого количества времени и не асинхронно. То есть QtC тупо подвисает на время построения дерева. Для больших проектов это бывает неприятно. Но Tobias утверждает, что они 
&lt;a href=&#34;https://blog.qt.io/blog/2016/11/15/cmake-support-in-qt-creator-and-elsewhere/#comment-1198506&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;планируют&lt;/a&gt; поработать над этим.&lt;/p&gt;
&lt;p&gt;Мастер создания проекта либо будет заинтегрирован тоже, или будет просто лежать в отдельном репозитории: много поддержки он не требует.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Беспроводная магия</title>
      <link>https://htrd.su/blog/2016/12/24/besprovodnaja_magija/</link>
      <pubDate>Sat, 24 Dec 2016 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2016/12/24/besprovodnaja_magija/</guid>
      <description>&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
      &lt;iframe allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen&#34; loading=&#34;eager&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; src=&#34;https://www.youtube.com/embed/s1eMryiU1ro?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; title=&#34;YouTube video&#34;&gt;&lt;/iframe&gt;
    &lt;/div&gt;

&lt;p&gt;Мужика вообще посмотреть стоит. Дядька тот ещё колдун.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Уплотнительные кольца для BRS-8</title>
      <link>https://htrd.su/blog/2016/12/22/uplotnitelnye_kolca_dlja_brs-8/</link>
      <pubDate>Thu, 22 Dec 2016 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2016/12/22/uplotnitelnye_kolca_dlja_brs-8/</guid>
      <description>&lt;p&gt;Прошлой зимой потёк бензонасос горелки. Потёк внезапно и в походе, хорошо был баллон газа.&lt;/p&gt;
&lt;p&gt;Протечка случилась по зазору вращающегося штока на насосе для прикручивания шланга.&lt;/p&gt;
&lt;p&gt;Как оказалось, уплотнительная резинка растянулась. Готовых рем-комплектов на али не оказалось, пришлось мерить кольца и искать уже конкретные экземпляры.&lt;/p&gt;
&lt;p&gt;Для начала небольшой словарь, которые поможет искать нужные номиналы:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;OD&lt;/strong&gt; - внешний диаметр&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ID&lt;/strong&gt; - внутренний диаметр&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CS&lt;/strong&gt; - толщина кольца&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Запрос стоит формировать как-то так: &amp;ldquo;oil rubber ring CS ###mm&amp;rdquo;, подставляя нужную толщину.&lt;/p&gt;
&lt;p&gt;Самих номиналов колец оказалось 4 штуки: кольца внутри проблемного штока (4 штуки), хоть и похожи, он сам шток конический и два чуть больше. Итак:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;OD 12мм, ID 8мм, CS 2мм - 2 штуки (диаметр посадочного места 8.2мм)&lt;/li&gt;
&lt;li&gt;OD 12.5мм, ID 8.5мм, CS 2мм - 2 штуки (диаметр посадочного места не замерил, потом обновлю)&lt;/li&gt;
&lt;li&gt;OD 6мм, ID 3мм, CS 1.5мм - 6 штук (диаметр посадочного места 3.1мм) - это уплотнители на штоке шланга (4 штуки) и в насосе (2 штуки)&lt;/li&gt;
&lt;li&gt;OD 33мм, ID 26мм, CS 3.5мм - 2+ штук - уплотнительные кольца на резьбе пробки бутылки и самом насосе, диаметр может варироваться, там главное придавить их.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Варианты на Ali:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1 и 2 номиналы: 
&lt;a href=&#34;https://ru.aliexpress.com/item/10pcs-Lot-Optional-OD-12-12-5-13-13-5-14-15-16-17-18-19/32728565764.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://ru.aliexpress.com/item/10pcs-Lot-Optional-OD-12-12-5-13-13-5-14-15-16-17-18-19/32728565764.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;3 номинал: 
&lt;a href=&#34;https://ru.aliexpress.com/item/OD-4-4-4-4-5-4-8-5-5-5-5-8-6-6-5/32730991081.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://ru.aliexpress.com/item/OD-4-4-4-4-5-4-8-5-5-5-5-8-6-6-5/32730991081.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;4 номинал: 
&lt;a href=&#34;https://ru.aliexpress.com/item/10x-CS3-5mm-NBR-O-ring-OD-33-34-35-36-37-38-39-40-41/32729993728.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://ru.aliexpress.com/item/10x-CS3-5mm-NBR-O-ring-OD-33-34-35-36-37-38-39-40-41/32729993728.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ссылка на аналогичную проблему:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://forum.poehali.net/index.php?board=10;action=display;threadid=76686;start=0&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://forum.poehali.net/index.php?board=10;action=display;threadid=76686;start=0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Раньше была возможность купить комплект:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://ru.aliexpress.com/item/Outdoor-burner-standard-general-stoves-gas-cylinders-seal-washer-rubber-ring/1561955158.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://ru.aliexpress.com/item/Outdoor-burner-standard-general-stoves-gas-cylinders-seal-washer-rubber-ring/1561955158.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;но сейчас китаец не продаёт. Найти аналогичный - не смог.&lt;/p&gt;
&lt;p&gt;Смущает только больший номинал колец в ремкомплекте для Kovea Booster+1 - 
&lt;a href=&#34;https://primalp.com/posuda-gorelki/gazovye-aksessuary/kovea-remkomplekt-dlya-kb-0603/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://primalp.com/posuda-gorelki/gazovye-aksessuary/kovea-remkomplekt-dlya-kb-0603/&lt;/a&gt; (кстати его можно попробовать использовать, заказать в Тибете, например).&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>OpenOCD, ThreadX и ваш процессор</title>
      <link>https://htrd.su/blog/2016/12/21/openocd_threadx_i_vash_processor/</link>
      <pubDate>Wed, 21 Dec 2016 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2016/12/21/openocd_threadx_i_vash_processor/</guid>
      <description>&lt;p&gt;TODO: нужно перетянуть статью в т.ч. сюда. Пока ссылка:&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://habrahabr.ru/post/249991/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://habrahabr.ru/post/249991/&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>О PDF-просмотрщиках</title>
      <link>https://htrd.su/blog/2016/12/21/o_pdf-prosmotrschikax/</link>
      <pubDate>Wed, 21 Dec 2016 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2016/12/21/o_pdf-prosmotrschikax/</guid>
      <description>&lt;p&gt;Немного о наболевшем.&lt;/p&gt;
&lt;p&gt;В PDF, обычно, распространяется документация.&lt;/p&gt;
&lt;p&gt;В документации, обычно, есть перекрёстные ссылки.&lt;/p&gt;
&lt;p&gt;По ссылкам неплохо иметь возможность переходить.&lt;/p&gt;
&lt;p&gt;До сего момента речь шла, практически, о 100% доступных читалок для PDF.&lt;/p&gt;
&lt;p&gt;А вот теперь, перейдя по ссылке, неплохо бы иметь возможность вернуться назад, к той точке, откуда мы пришли.&lt;/p&gt;
&lt;p&gt;Внезапно, но это, казалось бы простое требование просто фантастически прореживает стройные ряды просмотрщиков!&lt;/p&gt;
&lt;p&gt;После длительных поисков и переборов остался такой набор:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Кроссплатформенные&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Как это не парадоксально, но это &lt;strong&gt;
&lt;a href=&#34;https://github.com/mozilla/pdf.js&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;PDF.js&lt;/a&gt;&lt;/strong&gt; иными словами - Firefox. И он, пожалуй, единственный.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Linux&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Тут тоже нет разнообразия, единственный представитель, который умеет эту простую фичу - KDEшный &lt;strong&gt;Okular&lt;/strong&gt;. &lt;strong&gt;Evince&lt;/strong&gt; и производные что-то пытаются делать, но работают очень странно. Другие не умеют вовсе.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Windows&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Кто сказал - Acrobat Reader? Нет! Он не умеет. Из опробованных мной, с неперегруженным интерфейсом, только два варианта: &lt;strong&gt;STDUViewer&lt;/strong&gt; и &lt;strong&gt;Sumatra PDF&lt;/strong&gt;. Первый подглючивает временами, остановился на втором (на работе). Foxit Reader тоже, вроде, умеет, но его новомодный интерфейс мне непонятен и неприятен.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;UPD:&lt;/strong&gt; Сегодня появилась 
&lt;a href=&#34;https://habrahabr.ru/post/329628/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;статья на Хабре&lt;/a&gt;, где человек соединил Qt, QWebEngineView и PDF.js, вот репозиторий на GitHub:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://github.com/yshurik/qpdfjs&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/yshurik/qpdfjs&lt;/a&gt;
Про годность или негодность сего поделия напишу чуть позже.&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Системы заземления TN-S, TN-C, TNC-S, TT, IT</title>
      <link>https://htrd.su/blog/2016/12/21/sistemy_zazemlenija_tn-s_tn-c_tnc-s_tt_it/</link>
      <pubDate>Wed, 21 Dec 2016 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2016/12/21/sistemy_zazemlenija_tn-s_tn-c_tnc-s_tt_it/</guid>
      <description>&lt;p&gt;Наглядная статья: 
&lt;a href=&#34;http://www.zandz.ru/biblioteka/sistemy_zazemlenieya_TNS_TNC_TNCS_TT_IT.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Системы заземления TN-S, TN-C, TNC-S, TT, IT&lt;/a&gt;&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;/li&gt;
&lt;li&gt;Если ваша сеть не TN-S, то сделайте (наймите того, кто сможет!) хотя бы TN-C-S. Следите, что бы заземляющий ноль не был подключен на тот же &amp;ldquo;орех&amp;rdquo;, что и остальные. А лучше, что бы у вас было два своих подключения на нулевой провод в щитке: один для нуля, другой - для защитного зануления. Ещё лучше: требуйте от своей управляйки модернизации сети. В конце концов, часто то, что нам подсовывают под кап-ремонтом, им не является. Замена коммуникаций - это уже часть его.&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Переключение раскладки по CapsLock в Windows</title>
      <link>https://htrd.su/blog/2016/12/15/perekljuchenie_raskladki_po_capslock_v_windows/</link>
      <pubDate>Thu, 15 Dec 2016 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2016/12/15/perekljuchenie_raskladki_po_capslock_v_windows/</guid>
      <description>&lt;p&gt;На работе приходится сидеть в Windows по ряду причин, но очень неудобно, что нет привычного переключателя раскладок клавиатуры по CapsLock.&lt;/p&gt;
&lt;p&gt;Перебрал несколько вариантов: специализированные утилиты (сайты большинства умерли (привет Recaps, Keyla) за исключением, пожалуй 
&lt;a href=&#34;http://flydom.ru/capslang/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Capslang&lt;/a&gt;), правка реестра Windows (
&lt;a href=&#34;https://habrahabr.ru/post/305658/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://habrahabr.ru/post/305658/&lt;/a&gt;, не понравилось), использовал PuntoSwitcher (стрельба из пушки по воробьям ради только переключалки, плюс досадно глючил временами).&lt;/p&gt;
&lt;p&gt;В результате остановился на варианте с AutoHotkeys и эмуляцией нажатия клавиш переключения раскладки. Кроме того, учёл, что в рабочей сессии VirtualBox переопределять клавишу не нужно (для других VM код будет похожим). В результате получился такой скрипт:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-ahk&#34; data-lang=&#34;ahk&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;SetTitleMatchMode&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;RegEx&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;#ifWinNotActive&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;^.+&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Oracle&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;VM&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;VirtualBox$&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;	&lt;span class=&#34;nb&#34;&gt;SetCapsLockState&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;AlwaysOff&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;	&lt;span class=&#34;nl&#34;&gt;+CapsLock::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;CapsLock&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;	&lt;span class=&#34;nl&#34;&gt;CapsLock::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Send&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Ctrl&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;down&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Shift&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;down&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Shift&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;up&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Ctrl&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;up&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;#ifWinNotActive&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Сохраняем, запускаем, пользуемся. Если нужно, добавляем в автозагрузку. CapsLock остаётся доступен по сочетанию Shift+CapsLock.&lt;/p&gt;
&lt;p&gt;Справочник по регуляркам: 
&lt;a href=&#34;https://autohotkey.com/docs/misc/RegEx-QuickRef.htm&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://autohotkey.com/docs/misc/RegEx-QuickRef.htm&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ссылки по теме:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://gluek.info/2008/08/27/caps-lock-windows/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://gluek.info/2008/08/27/caps-lock-windows/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://habrahabr.ru/post/305658/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://habrahabr.ru/post/305658/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://flydom.ru/capslang/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://flydom.ru/capslang/&lt;/a&gt; (что-то не завелось у меня, может что поменялось)&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://superuser.com/questions/429930/using-capslock-to-switch-the-keyboard-language-layout&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://superuser.com/questions/429930/using-capslock-to-switch-the-keyboard-language-layout&lt;/a&gt; (моё решение взято именно отсюда, плюс проверка VBox)&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://dae.me/blog/1173/pereklyucheniye-yazika-vvoda-po-caps-lock-v-windows/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://dae.me/blog/1173/pereklyucheniye-yazika-vvoda-po-caps-lock-v-windows/&lt;/a&gt; подборка методов&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Распродажа туристического снаряжения</title>
      <link>https://htrd.su/blog/2016/12/03/rasprodazha_turisticheskogo_snarjazhenija/</link>
      <pubDate>Sat, 03 Dec 2016 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2016/12/03/rasprodazha_turisticheskogo_snarjazhenija/</guid>
      <description>&lt;p&gt;Немного накопилось, что не подошло, что хочется поменять, а что уже заменилось, поэтому выставляю:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;del&gt;Лот 1: (Б/У) &lt;strong&gt;Навигатор Garmin GPSMAP 62s&lt;/strong&gt;, в полной комплектации, с картами ДВ, Домашних вулканов Камчатки, Кодара, Тункинских гольцов на Восточном Сайне и района Белухи на Алтае, цена вопроса &lt;strong&gt;15000 руб&lt;/strong&gt;&lt;/del&gt; &lt;strong&gt;&lt;wrap em&gt;&lt;strong&gt;УШЁЛ&lt;/strong&gt;&lt;/wrap&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Лот 2: (Новый) &lt;strong&gt;Котелок с теплообменником Bulin S2500&lt;/strong&gt;, 2 литра, цена вопроса - &lt;strong&gt;2500 руб&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.farpost.ru/vladivostok/sport/tourism/kitchenware/kotelok-s-teploobmennikom-bulin-s2500-2l-50117402.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.farpost.ru/vladivostok/sport/tourism/kitchenware/kotelok-s-teploobmennikom-bulin-s2500-2l-50117402.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Лот 3: (Б/У) &lt;strong&gt;Алюминиевые секции дуги для палатки&lt;/strong&gt;, диаметр 8.5мм, длинна полная 360мм, 5 штук, цена вопроса &lt;strong&gt;100 руб/штука&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.farpost.ru/vladivostok/sport/tourism/tents/aljuminievye-sekcii-dugi-dlja-palatki-8.5-mm-x-360mm-b-u-50118214.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.farpost.ru/vladivostok/sport/tourism/tents/aljuminievye-sekcii-dugi-dlja-palatki-8.5-mm-x-360mm-b-u-50118214.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Лот 4: (Новый) &lt;strong&gt;Алюминиевая дуга для палатки&lt;/strong&gt;, диаметр 8.5мм, длинна полшная 3.6м, 11 секций, цена вопроса &lt;strong&gt;1200 руб&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.farpost.ru/vladivostok/sport/tourism/tents/aljuminievaja-duga-dlja-palatki-8.5-mm-x-3.6-m-11-sekcij-50118625.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.farpost.ru/vladivostok/sport/tourism/tents/aljuminievaja-duga-dlja-palatki-8.5-mm-x-3.6-m-11-sekcij-50118625.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Лот 5: (Новый) &lt;strong&gt;Запасные наконечники для трекинговых палок&lt;/strong&gt;, резьба, совместимы с кольцами Leki, 4 штуки, цена вопроса &lt;strong&gt;100 руб/штука&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.farpost.ru/vladivostok/sport/tourism/other/nakonechniki-dlja-trekingovyh-palok-rezba-pod-kolco-50118821.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.farpost.ru/vladivostok/sport/tourism/other/nakonechniki-dlja-trekingovyh-palok-rezba-pod-kolco-50118821.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>C&#43;&#43; и хорошие практики</title>
      <link>https://htrd.su/blog/2016/12/02/c_i_xoroshie_praktiki/</link>
      <pubDate>Fri, 02 Dec 2016 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2016/12/02/c_i_xoroshie_praktiki/</guid>
      <description>&lt;p&gt;Существуют хорошие практики программирования и их стоит изучать. Часть из них применима не всегда. Часть стандартов хорошо себя зарекомендовала, но стоят денег, например MISRA C++, но, помимо цены, ещё и достаточно консервативен и покрывает только язык до стандарта C++11 (выпущен в 2008 году).&lt;/p&gt;
&lt;p&gt;Ниже список, на мой взгляд, хороших источников, которые хорошо иметь под рукой и регулярно пробегаться глазами:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://github.com/isocpp/CppCoreGuidelines&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;The C++ Core Guidelines&lt;/a&gt; - естественно на первом месте, руководство от, можно сказать, создателей, корифеев языка. Основные составители Бьярне Страуструп, Герб Саттер и, конечно, сообщество. Развивается оперативно и быстро адаптируется под новые фишки стандарта.&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.codingstandard.com/section/index/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;High Integrity C++ Coding Standard&lt;/a&gt; - коротко и по делу. Немного пояснения: 
&lt;a href=&#34;https://en.wikipedia.org/wiki/High_Integrity_C%2B%2B&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://en.wikipedia.org/wiki/High_Integrity_C%2B%2B&lt;/a&gt;. Сейчас покрывает C++11. На этот стандарт даёт отсылки MISRA C++ 2008.&lt;/li&gt;
&lt;li&gt;Все книги из Скотта Майерса из серии Эффективное программирование на C++.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ну и на затравку: писать надёжный софт на C++ можно - 
&lt;a href=&#34;https://www.youtube.com/watch?v=3SdSKZFoUa8&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;C++ on Mars: Incorporating C++ into Mars Rover Flight Software&lt;/a&gt; :wink:&lt;/p&gt;
&lt;p&gt;И стоит помнить, что есть практики, есть стандарты, но не стоит выключать свой мозг и обкладываться паттернами, бустом и прочими непотребствами, если вам нужно вывести всего лишь &amp;ldquo;Hello, world!&amp;rdquo;.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Пакеты с отладочными символами для Debian</title>
      <link>https://htrd.su/blog/2016/11/21/pakety_s_otladochnymi_simvolami_dlja_debian/</link>
      <pubDate>Mon, 21 Nov 2016 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2016/11/21/pakety_s_otladochnymi_simvolami_dlja_debian/</guid>
      <description>&lt;p&gt;Пара линков на тему:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://wiki.debian.org/DebugPackage&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://wiki.debian.org/DebugPackage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://wiki.debian.org/AutomaticDebugPackages&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://wiki.debian.org/AutomaticDebugPackages&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Первый описывает базовые подходы для версий debhelper меньше и больше 7. Второй линк описывает новый, рекомендованный подход с автоматическим созданием dbgsym пакетов.&lt;/p&gt;
&lt;p&gt;Что бы файлы с отладочной информацией строились в PPA, в настройках (Change details&amp;hellip;) нужно включить опции:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[x] Build debug symbols
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[x] Publish debug symbols
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Ветки обсуждений в Thunderbird</title>
      <link>https://htrd.su/blog/2016/11/03/vetki_obsuzhdenij_v_thunderbird/</link>
      <pubDate>Thu, 03 Nov 2016 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2016/11/03/vetki_obsuzhdenij_v_thunderbird/</guid>
      <description>&lt;p&gt;Просто перечисление нескольких скрытых опций, которые могут оказаться полезными. В дополнение к 
&lt;a href=&#34;http://kb.mozillazine.org/Stop_threading_by_subject&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://kb.mozillazine.org/Stop_threading_by_subject&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mailnews.sort_threads_by_root&lt;/code&gt; - если кому-то хочется, что бы при сортировке по дате обсуждений использовалась дата корневого письма, а не самого последнее. Не знаю, кому такое может пригодиться, но полезно знать, на случай, если какое-то расширение изменит эту настройку в &lt;strong&gt;true&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mail.operate_on_msgs_in_collapsed_threads&lt;/code&gt; - управляет поведением на свёрнутых обсуждениях: показывать не-conversation вариант (&lt;strong&gt;true&lt;/strong&gt; - по-умолчанию) или показывает корневое сообщение (&lt;strong&gt;false&lt;/strong&gt;). Так как conversation-вариант попросту нефункциональный в TB, то я использую &lt;strong&gt;false&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Теперь ищу способ для:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Сделать свернутое обсуждение не просто подчёркнутым но выделенным жирным. Вроде как через пользовательский CSS можно.&lt;/li&gt;
&lt;li&gt;Сделать так, что бы обсуждение было только с одним уровнем ветвления, а остальные сообщения были в порядке прихода. Для большинства обсуждений важна хронология, а контекст содержится в цитируемом сообщении. Этот бы вариант можно было бы решить группировкой по дискуссии (Group By Discussion), к сожалению поиск в интернете для этого не дал мне результатов (и 
&lt;a href=&#34;http://superuser.com/questions/1035427/group-by-discussion-without-tree-in-thunderbird&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;вопрошание&lt;/a&gt; на SuperUser - тоже).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ну а под катом немного расширений, которые могут показаться кому-то интересными в части организации дискуссий.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://totalmessage.mozdev.org&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Total Message&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Плюсы&lt;/strong&gt; (здесь и далее - плюсы и минусы - для меня)
&lt;ul&gt;
&lt;li&gt;добавляет дополнительные средства по сортировке, например, сортировка по двум критериям. Но хорошо работает только на Earlybird.&lt;/li&gt;
&lt;li&gt;позволяет управлять вышеозначенными опциями через GUI.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Минусы&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;пытается изменять и отображение заголовков в сообщениях, что мне не нужно. Тем более, что другие расширения, типа ThreadVis при этом ломаются.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://addons.mozilla.org/ru/thunderbird/addon/gmail-conversation-view/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Thunderbird Conversations&lt;/a&gt;, 
&lt;a href=&#34;https://github.com/protz/thunderbird-conversations&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/protz/thunderbird-conversations&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Практически то, что мне хотелось в плане огранизации бесед. Но крайне глючная штука: легко может отметить непрочитанное письмо прочитанным (самая беда) или прочитанное - непрочитанным (не так страшно). И как-то вообще неторопливо работает.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://addons.mozilla.org/ru/thunderbird/addon/threadvis/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;ThreadVis&lt;/a&gt;, 
&lt;a href=&#34;http://threadvis.github.io/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://threadvis.github.io/&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Визуализирует цепочку сообщений и позволяет, в большинстве случаев по ней переключаться из любого места переписки. Не всегда работает корректно, иногда начинает &amp;ldquo;прыгать&amp;rdquo;, пытаясь подобрать правильный размер, лечится ручным увеличением и уменьшением масштаба.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://addons.mozilla.org/en-US/thunderbird/addon/compactheader/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;CompactHeader&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Рисует более компактные кнопки в заголовках сообщений. Не нужно при использовании Conversations.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>CMake и Qt Creator: на пути к CMake server mode</title>
      <link>https://htrd.su/blog/2016/10/10/cmake_i_qt_creator_na_puti_k_cmake_server_mode/</link>
      <pubDate>Mon, 10 Oct 2016 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2016/10/10/cmake_i_qt_creator_na_puti_k_cmake_server_mode/</guid>
      <description>&lt;p&gt;В транке появилась пачка изменений, ориентированные на использование 
&lt;a href=&#34;https://cmake.org/cmake/help/v3.7/manual/cmake-server.7.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;CMake Server Mode&lt;/a&gt;, в связи с чем плагин теперь может работать только с CMake версии 3.0 и более новым. Тобиас крепко взялся за плагин и будем надеяться, что, как минимум, скоро не будет требоваться:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;промежуточная генерация CodeBlocks проекта, дабы распарсить цели, получить список файлов и параметров компилятора.&lt;/li&gt;
&lt;li&gt;ручное парсирование файла кеша, для получения списка опций и их изменения.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Пока CMake Server Mode большего не предоставлят: в основном информация, но не изменение её. Так что ожидать автоматическое добавление файла к нужной цели или переименование файла в билд-системе средствами этого нового режима не стоит.&lt;/p&gt;
&lt;p&gt;Ну а в самом QtC пока только инфраструктурные изменения, чтобы эту фичу начать поддерживать.&lt;/p&gt;
&lt;p&gt;И от себя: в CMakeProjectManager2 добавил возможность использовать трюк от cmake, что бы задать варианты возможных значений для какого-то параметра и выводить их при редактировании в виде выпадающего списка. Фичу портировал в апстрим и завёл ревью, кому нужно, голосуйте: 
&lt;a href=&#34;https://codereview.qt-project.org/#/c/173340&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://codereview.qt-project.org/#/c/173340&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Про сам трюк:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://blog.kitware.com/constraining-values-with-comboboxes-in-cmake-cmake-gui/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://blog.kitware.com/constraining-values-with-comboboxes-in-cmake-cmake-gui/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://blog.bethcodes.com/cmake-tips-tricks-drop-down-list&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://blog.bethcodes.com/cmake-tips-tricks-drop-down-list&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://cmake.org/cmake/help/v3.3/prop_cache/STRINGS.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://cmake.org/cmake/help/v3.3/prop_cache/STRINGS.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Если коротко, то в вашем CMakeLists.txt, для задания возможных значений для параметра, нужно добавить конструкцию:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cmake&#34; data-lang=&#34;cmake&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;set_property&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;CACHE&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;OptionName&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;PROPERTY&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;STRINGS&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;PossibleValue1&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;PossibleValue2&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;PossibleValue3&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;...&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;PossibleValueN&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ни на что, кроме как для подсказки GUI этот параметр не влияет: CMake не делает валидацию введённых значений, поэтому возможность задать любое другое - остаётся.&lt;/p&gt;
&lt;p&gt;Ссылки по теме:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://blog.qt.io/blog/2016/11/15/cmake-support-in-qt-creator-and-elsewhere/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://blog.qt.io/blog/2016/11/15/cmake-support-in-qt-creator-and-elsewhere/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>IncludeOS</title>
      <link>https://htrd.su/blog/2016/09/22/includeos/</link>
      <pubDate>Thu, 22 Sep 2016 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2016/09/22/includeos/</guid>
      <description>&lt;p&gt;Не мог обойти вниманием сиё творение.&lt;/p&gt;
&lt;p&gt;Ребята запилили на суровом C++11/14 однозадачную сервисо-ориентированную операционку. Суть: операционка с минимальным футпринтом (образ 707кб), которая обслуживает ровно одну задачу (в их терминологии - сервис) и работает под управлением виртуальной машины: KVM, VirtualBox, используя возможности аппаратной виртуализации.&lt;/p&gt;
&lt;p&gt;Сама операционка внутри представлена в виде асинхронного фреймворка, призванного, в первую очередь, строить сетевые приложения. Т.е. внутри реализован стек TCP/IP (судя по описанию, пока только IPv4, но IPv6 активно пилится). Многопоточность не поддерживается, реализован подход с кооперативной многозадачностью, которых очень хорошо ложится на асинхронную модель. Есть базовая поддержка файловых и дисковых операций (как минимум есть поддержка RAM-диска и файловых систем Ext4 и FAT).&lt;/p&gt;
&lt;p&gt;При всём этом доступны для использования libc++ от LLVM (в том числе исключения), stdc в лице newlib.&lt;/p&gt;
&lt;p&gt;В общем, интересное решение для сервис-ориентированных архитектур, для создания выделенных микросервисов. Плюс приятная лицензия: Apache2.&lt;/p&gt;
&lt;p&gt;Ну и ссылки:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.includeos.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.includeos.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://github.com/hioa-cs/IncludeOS&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/hioa-cs/IncludeOS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.slideshare.net/IncludeOS/include-ltos-from-bootloader-to-rest-api-with-the-new-c&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.slideshare.net/IncludeOS/include-ltos-from-bootloader-to-rest-api-with-the-new-c&lt;/a&gt; - слайды-перезентация для получения представления об системе.&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Наконечники на трекинговые палки</title>
      <link>https://htrd.su/blog/2016/09/19/nakonechniki_na_trekingovye_palki/</link>
      <pubDate>Mon, 19 Sep 2016 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2016/09/19/nakonechniki_na_trekingovye_palki/</guid>
      <description>&lt;p&gt;Покупаешь палки, ходишь, и через некоторое время наконечники превращаются в такое:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2016/09/19/img_20160919_225026.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;и перестают &amp;ldquo;цепляться&amp;rdquo;, а при дальнейшем износе уже начинают убиваться сами палки.&lt;/p&gt;
&lt;p&gt;Ну&amp;hellip; это в том случае, если сами палки не убились раньше, что бывает не так уж и редки. Ну да это присказки. Речь про наконечники.&lt;/p&gt;
&lt;p&gt;Во время саянского подхода, Игорь подсказал, что они меняются и, как минимум, Сплав ими торгует как расходниками. Ну до сплава мне далеко, да и в наличии у них нет, приобретены были на Aliexpress пачкой из 10 штук. Искать по словам &amp;ldquo;Alpenstock Carbon Tips&amp;rdquo; или &amp;ldquo;Trakking Poles Tips&amp;rdquo; и выбирать среди резиновых наконечников нужное, что-то вроде:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2016/09/19/img_20160919_225141.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Теперь по процедуре замены.&lt;/p&gt;
&lt;p&gt;Она очень проста при наличии следующих инструментов:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Монтажный фен, способный дать воздух температурой 400 градусов&lt;/li&gt;
&lt;li&gt;Клеевой пистолет&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ещё потребуются:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;перчатки тканевые для защиты от температуры&lt;/li&gt;
&lt;li&gt;ацетон&lt;/li&gt;
&lt;li&gt;ветошь&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Сама процедура проста:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;даём разогреться фену&lt;/li&gt;
&lt;li&gt;греем наконечник около 30 секунд&lt;/li&gt;
&lt;li&gt;резко стягиваем наконечник&lt;/li&gt;
&lt;li&gt;даём остыть&lt;/li&gt;
&lt;li&gt;протираем ацетоном от остатков клея и что бы обезжирить&lt;/li&gt;
&lt;li&gt;снова подогреваем&lt;/li&gt;
&lt;li&gt;наносим полоску клея клеевым пистолетом, обмазывать со всех сторон не нужно&lt;/li&gt;
&lt;li&gt;снова подогреваем, что бы клей быстро не засох&lt;/li&gt;
&lt;li&gt;резко до конца одеваем наконечник&lt;/li&gt;
&lt;li&gt;даём остыть и засохнуть клею&lt;/li&gt;
&lt;li&gt;выступивший клей срезать&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Вот и всё.&lt;/p&gt;
&lt;p&gt;При отсутствии клеевого пистолета можно использовать любой клей типа Момент или Турклей, но время готовности палок увеличится до 24 часов.&lt;/p&gt;
&lt;p&gt;При отсутствии монтажного фена можно греть над конфоркой кухонной плиты, только избегайте открытого огня. В любом случае, тут дело удобства и скорости.&lt;/p&gt;
&lt;p&gt;Ну и напоследок: смотрите внимательно на размеры и тип крепления колец. Мои наконечники совместимы с кольцами Loki, которые, КМК, самые доступные для покупки по месту в том же Триал Спорт. На то, как ведут себя новые наконечники будет видно в походах.&lt;/p&gt;
&lt;p&gt;Удачи и что бы на любом маршруте было легко!&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Батареи для Lenovo Thinkpad T530</title>
      <link>https://htrd.su/blog/2016/08/27/batarei_dlja_lenovo_thinkpad_t530/</link>
      <pubDate>Sat, 27 Aug 2016 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2016/08/27/batarei_dlja_lenovo_thinkpad_t530/</guid>
      <description>&lt;p&gt;Всегда хочется, что бы ноутбук смог проработать в автономке подольше. Тут помимо оптимизации энергопотребления (статей посвящённых этому вопросу в интернетах уйма) иногда встаёт вопрос более ёмкой батареи. Причём актуальность автономной работы часто перекрывает некоторые неудобства, связанные с весом и габаритами.&lt;/p&gt;
&lt;p&gt;Когда у меня был основным мобильным компьютером нетбук Asus EeePC 1000HA, после деградации основной батареи я нашёл монстра на 11000 mAh (или ~80WH при напряжении 7.4В), выглядел он так:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/08/27/61nn5wbqzrl._sl1000_.jpg&#34; alt=&#34;&#34;&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/08/27/61tpn047_yl._sl1000_.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Сейчас же доступна вообще версия на 13000 mAh (~96WH):&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2016/08/27/41c5ktehvjl.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;В общем, учитывая тот факт, что и процессор там одноядерный и вообще производительность ни к чёрту, работало всё это дело в автономке не просто долго, а чертовски долго: хватало на час в транспорте до работы, 8 часов на работе и час обратного пути, и не высаживалось.&lt;/p&gt;
&lt;p&gt;Покупая числодробилку Lenovo Thinkpad T530 с топовым процессором в своей серии, я естественным образом не сильно рассчитывал на такую же длительность работы, поэтому сразу заказал ноутбук с батареей на 9 ячеек и 94WH (напряжение 11.1В, ёмкость 8400 mAh). Но меня смущало, что не существует батарей большей ёмкости. Нет, я знал, что можно подключить дополнительную батарею в слот 
&lt;a href=&#34;https://en.wikipedia.org/wiki/Lenovo_UltraBay&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;UltraBay&lt;/a&gt;, но я планирую туда поместить второй диск в будущем. Поэтому резонно, что хотелось найти батарею большей ёмкости, чем у меня стояла&amp;hellip;&lt;/p&gt;
&lt;p&gt;Сегодня искал батарею - старая уже деградировала до 27% номинальной ёмкости и, внезапно, обнаружил батарею, которая подключается как дополнительная к основной в порт док-станции. Причём ёмкость этой батареи так же 94WH!&lt;/p&gt;
&lt;p&gt;Выглядит это дело так:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/08/27/9802025f3355.jpg&#34; alt=&#34;&#34;&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/08/27/50b1d19611fd.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Итого, имеем:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Основная батарея до 94WH, номер модели 45N1011 (
&lt;a href=&#34;https://ru.aliexpress.com/item/11-1V-94Wh-8-4Ah-New-Laptop-Battery-for-Lenovo-ThinkPad-70-T430-W530-T530-L430/32695392243.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;вариант покупки&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Дополнительная батарея до 94WH, номера модели 45N1017 или 45N1016 (
&lt;a href=&#34;https://ru.aliexpress.com/item/Laptop-Battery-for-Lenovo-T430-T530-W530-L530-L430-Free-shipping-45N1017-Free-shipping/32351739459.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;вариант покупки&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Дополнительная батарея до 32WH, номер модели 51J0507&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;По факту, наиболее адекватный вариант, это две батареи по 94WH, что даст около 16800 mAh.&lt;/p&gt;
&lt;p&gt;Ещё на батареях можно видеть красные значки с цифрами вроде 55+, 55++, 70+, 70++ и так далее. Что это означат:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;число + означает количество элементов: отсутствие - 4 элемента, + - 6, ++ - 9&lt;/li&gt;
&lt;li&gt;55 и 70 - основная батарея, 70 - более новая, оптимизации с контроллером встроенным&lt;/li&gt;
&lt;li&gt;28 - это дополнительная батарея, что цепляется под основной&lt;/li&gt;
&lt;li&gt;42 и 43 - батарея для UltrayBay&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;А ещё, простой онлайн калькулятор для перевода ёмкости между WH и mAh:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://milliamps-watts.appspot.com&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://milliamps-watts.appspot.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Обновление Linux Mint 17.3 до 18...</title>
      <link>https://htrd.su/blog/2016/08/26/obnovlenie_linux_mint_17.3_do_18/</link>
      <pubDate>Fri, 26 Aug 2016 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2016/08/26/obnovlenie_linux_mint_17.3_do_18/</guid>
      <description>&lt;p&gt;Или разлепляем пельмени, а потом собираем их обратно. Пару заметок.&lt;/p&gt;
&lt;p&gt;Собственно разработчики Linux Mint всегда рекомендовали использовать новую установку вместо того, что бы просто обновлять систему. Несколько релизов я всё же обновлялся путём исправления репозиториев и &lt;code&gt;apg-get upgrade&lt;/code&gt; / &lt;code&gt;apt-get dist-upgrade&lt;/code&gt;. При выходе 18 версии дистрибутива авторы выложили инструмент и инструкцию для сего обновления:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://blog.linuxmint.com/?p=3068&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://blog.linuxmint.com/?p=3068&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://community.linuxmint.com/tutorial/view/2316&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://community.linuxmint.com/tutorial/view/2316&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Как обычно проблемы кроятся в мелочах. А именно: не учитывается влияние PPA от слова совсем.&lt;/p&gt;
&lt;p&gt;Собственно:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Очень злую шутку играет наличие PPA. Да, утилита выключает все сторонние репозитории, да вот откат изменений из них до актуальных версий из существующих репозиториев она сделать не может. Особенно доставляет PPA &lt;code&gt;ppa:ubuntu-toolchain-r/test&lt;/code&gt;, который, обычно, ставят когда есть желание поиграться со свежими версиями компиляторов. В моём случае, версия libstdc++6 из этого PPA для Trusty окалазалась новее стандартной libstdc++6 для Xenial. Как следствие - утилиты типа &lt;strong&gt;apt&lt;/strong&gt;, &lt;strong&gt;apt-get&lt;/strong&gt; и прочие, которые могут помочь в решении насущных вопросов восстановления системы попросту не работают. Хорошо, что бронебойный &lt;strong&gt;dpkg&lt;/strong&gt; остался в строю.&lt;/li&gt;
&lt;li&gt;Cinnamon при обновлении может упасть в середине установки пакетов. С учётом предыдущего пункта - собственно и получаете систему в виде разлепленных пельменей.&lt;/li&gt;
&lt;li&gt;На системах с гибридной графикой можете столкнуться, что альтернативы для GL и EGL станут указывать на реализацию OpenGL от nVidia. Что потом будет приводить к странному падению Cinnamon при запуске. Про переключение и подробности падения можно посмотреть в заметке 
&lt;a href=&#34;https://htrd.su/blog/2014/11/13/linux_thinkpad_t530_i_minidp_displayport/&#34;&gt;post/2014/11/13/linux_thinkpad_t530_i_minidp_displayport&lt;/a&gt;, там же лечение.&lt;/li&gt;
&lt;li&gt;Из разряда косметики, но с далеко идущими последствиями: может не обновится информация о дистрибутиве, которая выводится в Grub (косметика), при текстовом логине (косметика) и в выводе &lt;strong&gt;lsb_release&lt;/strong&gt;. Первые два пункта - косметика, последний помимо эстетического неприятия приводит к тому, что добавления PPA через &lt;strong&gt;apt-add-repository&lt;/strong&gt; добавляет его&amp;hellip; для Trusty!&lt;/li&gt;
&lt;li&gt;Ещё я зачем-то перезагрузил компьютер. Отдать должное - система загрузилась до текстового логина. Но позникло непонятно: работа с сетью. У провайдера IPoE в самом простом варианте: просто втыкаешь Ethernet кабель и делаешь &lt;strong&gt;dhclient eth0&lt;/strong&gt;. Сеть поднимается, выдаётся IP адрес, получаются DNS адреса, назначаются маршруты (если верить выводу &lt;strong&gt;ip route&lt;/strong&gt;), ping работает, правда, только от root, но, судя по всему, по новой политике с него сняли SUID бит, что не страшно. Но тут начинаются весёлости: при отсутствующих правилах iptables (не используется) работают утилиты &lt;strong&gt;dig&lt;/strong&gt; и &lt;strong&gt;host&lt;/strong&gt;, резолвят адреса, но TCP соединения ни по имени домена ни по IP не устанавливаются. Ещё весёлостей для восстановления.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Собственно последняя проблема относится к категории: звёзды сложились. Но &amp;ldquo;вылечил&amp;rdquo; я её путём явного запрета IPV6:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;echo &amp;#34;options ipv6 disable=1&amp;#34; &amp;gt; /etc/modprobe.d/ipv6.conf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;и подключения не по кабелю, а по WiFi к роутеру. Тут я постоянно забываю, так что на правах мемориза три команды:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;iwlist - для сканирования сетей&lt;/li&gt;
&lt;li&gt;wpa_supplicant - для аутентификации&lt;/li&gt;
&lt;li&gt;wpa_passphrase - для генерации конфига для wpa_supplicant с зашифрованным ключём&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Собственно последние две могут пригодиться и при правильном IPoE и проводном соединении.&lt;/p&gt;
&lt;p&gt;Как видно, в сусти проблемы я не разобрался, но получив рабочую сеть сразу приступил к восстановлению системы.&lt;/p&gt;
&lt;p&gt;Неработающий &lt;strong&gt;apt&lt;/strong&gt;/&lt;strong&gt;apt-get&lt;/strong&gt; решился скачиванием правильной версии libstdc++6 для данного релиза Ubuntu с официального сайта и установка его при помощи &lt;strong&gt;dpkg&lt;/strong&gt; с указанием опции &lt;code&gt;--force-all&lt;/code&gt;, так как вылазят конфликты, но они сейчас нас мало волнуют.&lt;/p&gt;
&lt;p&gt;После чего &lt;strong&gt;apt&lt;/strong&gt; заводится и достаточно выполнить:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt-get -f install
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;что бы привести систему к вижу: фарш - отдельно, тесто - отдельно.&lt;/p&gt;
&lt;p&gt;После этого станартная процедура из:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt update
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt upgrade
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt dist-upgrade
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;После чего поможет утилита &lt;strong&gt;apt-show-versions&lt;/strong&gt;, которая поможет найти пакеты, установленные в системе, но для которых нет соответствия в репозиториях:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt-show-versions | grep &amp;#39;No available version&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Тут могут быть как пакеты поставленные вручную, не из репозитория, типа Teamviewer или пакеты сделанные при помощи &lt;strong&gt;checkinstall&lt;/strong&gt; - на такие нужно просто обратить внимание, может они уже и не нужны или нуждаются в обновлении. Ну и самая гнусная категория - это пакеты, которые &amp;ldquo;новее&amp;rdquo;, чем те, что есть в стандартных репозиториях, обычно это остатки от PPA или сторонних репозиториев. Тут можно поступить двумя путями: настроить нужные сторонние репозитории и обновиться, что скорее всего вылечит от некого числа таких зависших пакетов, либо откатить все такие пакеты на дистрибутивные.&lt;/p&gt;
&lt;p&gt;Я выбрал последний пункт. Дело в том, что если в DEB системах в нескольких репозиториях есть разные версии одного пакета, то выбран по умолчанию будет самый новый (согласно правилам сравленения версий пакетов), но у вас остаётся возможность принудительно поставить и любую другую версию пакета, явно указав её:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt install foo=version
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;а вообще, для таких пакетов команда&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt show -a foo
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;выведет несколько записей, где можно посмотреть и описание и версии.&lt;/p&gt;
&lt;p&gt;В случае &amp;ldquo;зависших&amp;rdquo; пакетов, в выводе &lt;strong&gt;apt show&lt;/strong&gt; будет первой записью информация об установленной версии, а второй - актуальная версия в репозиториях. Ну а алгоритм получается так:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;пробегаемся по каждому пакету&lt;/li&gt;
&lt;li&gt;смотрим вывод &lt;strong&gt;apt show&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;если записей больше одной, то добавляем в список запись вида &amp;ldquo;пакет=версия&amp;rdquo;&lt;/li&gt;
&lt;li&gt;в конце одним махом делаем```
apt-get install пакет1=версия1 пакет2=версия2 &amp;hellip; пакетN=версияN&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Почему одним махом? А потому, что &amp;#34;зависшие&amp;#34; пакеты могут зависеть по версии друг от друга. Таким образом мы сразу выбираем все пакеты из дистрибутивных репозиториев и не ломаем зависимости. Чуть позже выложу скрипт, которые мне помог в разгребании этой проблемы.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Прочие &amp;#34;висячие&amp;#34; пакеты (для которых доступна только одна, установленная, версия) можно удалять. Но я делал это поодиночке, обращая внимание на то, что удаляется как связанная сущность. Само удаление делал парой команд:
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;apt-get purge foo
apt-get autoremove&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;autoremove использовал для того, что бы сразу удалить пакеты, которые ставились как зависимость для текущего. Предварительно я добился того, что бы список для autoremove был пуст - велика вероятность снести не то, чего хотелось бы. Для этого пункта тоже сделан скрипт.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Следующий шаг: поискать необновлённые пакеты, которые остались от PPA и актуальны для предыдущей версии. Некоторые такие пакеты, почему-то, не попадают в список **apt-show-versions**. Как их искать? Сложный вопрос. Если авторы порядочные люди, они в версию добавляют версию дистрибутива или его кодовое имя, тогда найти пакеты просто:
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;dpkg -l | grep &amp;lsquo;14.04&lt;br/&gt;|trusty&amp;rsquo;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;потом по этому списку пройтись по алгоритму удаления &amp;#34;висящих&amp;#34; пакетов.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Если информации о версии дистрибутива нет, пакет именно такой версии есть и стандартных репозиториях (при этом собран для старой версии библиотек), то простых вариантов решения проблемы я не вижу. Лично я оставил до момента, когда реально столкнусь с поломкой. Но мысль такая: смотреть кто пакетировал, сравнивать с записью для репозиторных пакетов, при не соответствии форсированно заменять на версию из репзитория.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;После этого нужно добиться правильной работы **lsb_release**. В чём тут дело, я так до конца и не разобрался: отчего-то не обновились файлы:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  * /etc/issue
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  * /etc/issue.net
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  * /etc/lsb-release
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;из пакеты *base-files* который предоставляется командой разработчиков Linux Mint, причём в самом пакете эти файлы с правильными данными. **dpkg-reconfigure** на пакет ни к чему не приводит, ровно как и форсированная переустановка. Поэтому решил просто: просто достал эти файлы из пакета и заменил их в файловой системе.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Косметическая проблема с названием пункта меню в Grub решается стандартно:
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;dpkg-reconfigure grub-pc&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;После этих телодвижения **apt-add-repository** станет работать корректно и можно приступать к восстановлению нужных сторонних репозиториев и PPA и установкой софта/обновлений из них.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;В целом ощущения такие:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  * стоило обновляться стандартным образом, как делал это раньше;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  * сколько зарекался запускать обновления из X11... в общем - консоль в помощь;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  * понятно нежелание разработчиков Mint поддерживать обновление: всего не учтёшь, а лучи ненависти получать будут;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  * флешка загрузочная даже не потребовалась, значит система просто превратилась в фарш, а не тыкву;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  * для C++ хочется стабильности ABI, хотя бы на уровне, сопоставимом с glibc;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  * это тот случай, когда хочется, что бы весь пакетный менеджер был собран статически.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Thinkpad T530 BIOS Update</title>
      <link>https://htrd.su/blog/2016/07/08/thinkpad_t530_bios_update/</link>
      <pubDate>Fri, 08 Jul 2016 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2016/07/08/thinkpad_t530_bios_update/</guid>
      <description>&lt;p&gt;Снова мемориз.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Находим BIOS 
&lt;a href=&#34;http://support.lenovo.com/ru/en/products/Laptops-and-netbooks/ThinkPad-T-Series-laptops/ThinkPad-T530&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;тут&lt;/a&gt; или по модели 
&lt;a href=&#34;http://support.lenovo.com/ru/en/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;тут&lt;/a&gt;. Скачиваем ISO. Не смущаемся наличием в описании разных Windows.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Используем руководство 
&lt;a href=&#34;http://www.thinkwiki.org/wiki/BIOS_Upgrade&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;отсюда&lt;/a&gt;. &lt;del&gt;В частности, 
&lt;a href=&#34;http://www.thinkwiki.org/wiki/BIOS_Upgrade#GRUB2:_booting_CD_Image&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;как использовать GRUB2&lt;/a&gt;, что бы не шить ISO никуда.&lt;/del&gt; У меня не сработало - зависание программы прошивальщика после первого подтверждения своих намерений. Помог способ с 
&lt;a href=&#34;http://www.thinkwiki.org/wiki/BIOS_Upgrade#Using_UEFI&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;загрузочной флешкой&lt;/a&gt;. Конспективно:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./geteltorito.pl -o xxx.img xxx.iso 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo dd &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;xxx.img &lt;span class=&#34;nv&#34;&gt;of&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/dev/sdX
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Перезагружаемся, выбираем флешку как источник загрузки и грузимся с неё. Дальше всё понятно.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Опционально 
&lt;a href=&#34;http://www.thinkwiki.org/wiki/BIOS_Upgrade#Installed_Firmware&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;проверяем версию BIOS&lt;/a&gt; и время релиза из системы:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo dmidecode -s bios-version
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo dmidecode -s bios-release-date
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Garmin GPSMAP 62s/64s: обновления</title>
      <link>https://htrd.su/blog/2016/07/07/garmin_gpsmap_62s/</link>
      <pubDate>Thu, 07 Jul 2016 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2016/07/07/garmin_gpsmap_62s/</guid>
      <description>&lt;p&gt;Это просто мемориз, а то задолбался каждый раз искать где и как брать свежий фирмварь и патчер для JNX.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Прошивка:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://whiter.brinkster.net/generated/LatestGarminFirmwares.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://whiter.brinkster.net/generated/LatestGarminFirmwares.html&lt;/a&gt; - не официально, но более удобно.&lt;/li&gt;
&lt;li&gt;62/78:
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://www8.garmin.com/support/download_details.jsp?id=4995&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www8.garmin.com/support/download_details.jsp?id=4995&lt;/a&gt; - официально, но добраться через сайт у меня не получилось. Дико настойчиво предлагают воспользоваться ихней тулой. Лучи поноса Гармин за это.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;64/64s:
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://www8.garmin.com/support/download_details.jsp?id=6805&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://www8.garmin.com/support/download_details.jsp?id=6805&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://www8.garmin.com/support/download_details.jsp?id=15450&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://www8.garmin.com/support/download_details.jsp?id=15450&lt;/a&gt; - beta&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Патчер:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://whiter.brinkster.net/en/Versions.shtml&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://whiter.brinkster.net/en/Versions.shtml&lt;/a&gt; - поддерживаемые версии и вверху ссылка на скачивание&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;GPSMAP 66/66s:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Просто полезная информация:
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.gps-forum.ru/forum/viewtopic.php?f=3&amp;amp;t=39295&amp;amp;start=170&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.gps-forum.ru/forum/viewtopic.php?f=3&amp;t=39295&amp;start=170&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Инструкция по обновлению (подсматривается на официальной странице прошивки нажав Ctrl-U :simple_smile:):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;NOTE&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;FOR&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;USERS&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;WANTING&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;TO&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;DOWNLOAD&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SOFTWARE&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ON&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ONE&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;COMPUTER&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;AND&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;THEN&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;INSTALL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;IT&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;TO&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;THEIR&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;DEVICE&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;USING&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;A&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;DIFFERENT&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;COMPUTER&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;To&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;download&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;the&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;region&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;used&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;by&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;WebUpdater&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;copy&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;and&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;paste&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;this&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;link&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;into&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;your&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;browser&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;computer&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#1:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;n&#34;&gt;http&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;//&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;download&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;garmin&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;com&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;software&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;GPSMAP62_78_WebUpdater__630&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gcd&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Bring&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;GPSMAP62_78_WebUpdater__630&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gcd&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;computer&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#2 where your device is attached.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Then&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;you&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;can&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;drag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;ow&#34;&gt;and&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;drop&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;GPSMAP62_78_WebUpdater__630&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gcd&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;onto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;the&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;WebUpdater&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;icon&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;your&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;desktop&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Or&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;you&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;can&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;invoke&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;WebUpdater&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;at&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;the&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;command&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;passing&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;the&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;region&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;parameter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;n&#34;&gt;C&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;WebUpdater&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;exe&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;GPSMAP62_78_WebUpdater__630&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gcd&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Что они нормальным путём этого не предлагают мне не понятно.&lt;/p&gt;
&lt;p&gt;Инструкция тоже не полная. Нужно:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Скачать файл прошивки&lt;/li&gt;
&lt;li&gt;Переименовать его в GUPDATE.GCD&lt;/li&gt;
&lt;li&gt;Закачать на флешку в папочку Garmin&lt;/li&gt;
&lt;li&gt;Перезагрузите навигатор, прошивка начнётся сама.&lt;/li&gt;
&lt;/ol&gt;</description>
    </item>
    
    <item>
      <title>Обновление в статьях</title>
      <link>https://htrd.su/blog/2016/07/07/obnovlenie_v_statjax/</link>
      <pubDate>Thu, 07 Jul 2016 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2016/07/07/obnovlenie_v_statjax/</guid>
      <description>&lt;p&gt;Изрядно обновил статью 
&lt;a href=&#34;https://htrd.su/blog/2014/11/13/linux_thinkpad_t530_i_minidp_displayport/&#34;&gt;&lt;/a&gt;, поместил ссылку на неё в 
&lt;a href=&#34;https://htrd.su/articles/&#34;&gt;статьи&lt;/a&gt;. Если коротко: то в общем и целом настройка чуть упростилась и улучшилась. Но дёготь остался, куда без него.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Топлёное масло</title>
      <link>https://htrd.su/blog/2016/07/04/topljonoe_maslo/</link>
      <pubDate>Mon, 04 Jul 2016 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2016/07/04/topljonoe_maslo/</guid>
      <description>&lt;p&gt;В преддверии похода по Восточному Саяну впервые приготовил топлёное масло. Оказалось несложно - главное подобрать хороший исходный продукт.&lt;/p&gt;
&lt;p&gt;Описание процесса искалось в интернетах. Я пользовался этим: 
&lt;a href=&#34;http://on-secret-whole-ight.ru/kak-delat-toplenoe-maslo/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://on-secret-whole-ight.ru/kak-delat-toplenoe-maslo/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Конспективно:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Масло брать такое, что бы в составе были только сливки.&lt;/li&gt;
&lt;li&gt;Жирность выбрать максимальную - тогда выход готового продукта будет больше и топление - быстрее.&lt;/li&gt;
&lt;li&gt;Время топление 0.5кг - примерно час - час двадцать. Увеличение количества исходного сырья увеличивает время топления примерно пропорционально (1 кг масла - будет часа два - два сорок).&lt;/li&gt;
&lt;li&gt;Кастрюля для топления должна быть с толстым дном, или сооружать водяную баню - что бы ограничить нагрев, сделать его более равномерным.&lt;/li&gt;
&lt;li&gt;Сразу приготовить:
&lt;ul&gt;
&lt;li&gt;ещё одну кастрюлю - куда сливать масло.&lt;/li&gt;
&lt;li&gt;шумовку или ложку с дырками - снимать пену.&lt;/li&gt;
&lt;li&gt;марлю для фильтрации, сложенную в 4 раза.&lt;/li&gt;
&lt;li&gt;дуршлаг.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Масло мелко нарезать - быстрее растопится.&lt;/li&gt;
&lt;li&gt;Загрузить в толстодонную кастрюлю и топить на самом медленном огне (у меня на электроплите положения от 1 до 6, я топил на 2, как только растопилось - переключил на 1).&lt;/li&gt;
&lt;li&gt;Как растопится всё - начинается процесс топления.&lt;/li&gt;
&lt;li&gt;Образуется пена, разные источники советуют или снимать или нет. Я снимал. В масле можно различить разные фракции.&lt;/li&gt;
&lt;li&gt;Я не переливал после кипения в другую посуду (не освобождал от осадка) - вкус остался приятным.&lt;/li&gt;
&lt;li&gt;Процесс топления продолжается до тех пор, пока масло не станет прозрачным, янтарного цвета.&lt;/li&gt;
&lt;li&gt;После чего я дал ему ещё 10 минут, затем убрал с огня и дал постоять 20 минут - подостыть. Не нужно бояться, что молочный жир застынет (а именно им и является топлёное масло) - окончательно вы его застудите только в холодильнике.&lt;/li&gt;
&lt;li&gt;Затем помещаем марлевый фильтр в дуршлаг и аккуратно, что бы не поднять осадок переливаем масло через фильтр в другую кастрюлю.&lt;/li&gt;
&lt;li&gt;Можно ещё дать постоять или сразу разливать по ёмкостям, где оно будет храниться. Стоит выбирать герметичные ёмкости, так как при транспортировке в жаркую погоду масло может подтаивать. Дополнительно ёмкость стоит поместить в пару фасовочных пакетов.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Фото исходного сырья:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/07/04/maslo1.jpg&#34; alt=&#34;&#34;&gt; &lt;img src=&#34;https://htrd.su/img/post/2016/07/04/maslo2.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Масло после топления:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2016/07/04/maslo3.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Оно же утром, после холодильника:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2016/07/04/maslo4.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Awesome C&#43;&#43;</title>
      <link>https://htrd.su/blog/2016/06/24/awesome_c/</link>
      <pubDate>Fri, 24 Jun 2016 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2016/06/24/awesome_c/</guid>
      <description>&lt;p&gt;Вырвано из G+:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://cpp.libhunt.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://cpp.libhunt.com/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;С сайта:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A curated list of awesome C/C++ frameworks, libraries, resources, and shiny things&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Систематизированный список библиотек для решения различных задач на C++. Пока ограничен битбакетом и гитхабом, поэтому добавить некоторые полезные библиотеки за пределами этих площадок пока (?) возможности нет.&lt;/p&gt;
&lt;p&gt;Список раньше хостился на GitHub, теперь обрёл второе рождение в виде сервиса.&lt;/p&gt;
&lt;p&gt;Система рейтингов и меток должна помогать выбирать полезное. Как будет работать на самом деле - покажет время.&lt;/p&gt;
&lt;p&gt;В подвале сайта смотреть подобные каталоги для других языков, в частности, 
&lt;a href=&#34;https://rust.libhunt.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Rust&lt;/a&gt; и 
&lt;a href=&#34;https://go.libhunt.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Go&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Две Икрянки и немного Партизанского хребта</title>
      <link>https://htrd.su/blog/2016/05/14/dve_ikrjanki_i_nemnogo_partizanskogo_xrebta/</link>
      <pubDate>Sat, 14 May 2016 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2016/05/14/dve_ikrjanki_i_nemnogo_partizanskogo_xrebta/</guid>
      <description>&lt;p&gt;На первомайские планировали сходить немного траверса по Партизанскому хребту с заходом на г.Синяя. Заход: по р.Икрянка от села Ястребовка. Выход: р.Правая Икрянка в село Ястребовка.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2016/05/14/marshrut.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Впечатление начала дня: дорога Шкотово-Партизанск. Ощущение, что она подверглась бомбёжке.&lt;/p&gt;
&lt;p&gt;От Ястребовки на машине получилось проехать немногим более 4-5 километров. Машину оставили перед первым возможным бродом одной из излучин Икрянки. Пешим ходом это брод обходится слева по ходу движения. Первый брод в районе слияния Икрянки и Правой Икрянки (где-то через 3 км от базового лагеря). После чего у вам будет 24 гарантированных и около 8 потенциальных бродов по Икрянке. Так что морально готовьтесь к мокрым ногам и запасайтесь носками. Потенциальные броды — это места где есть какое-то бревно или ещё не смытые остатки мостов, которые к следующему сезоны вполне себе могут смыты.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/05/14/dve_ikrjanki_i_nemnogo_partizanskogo_xrebta_image_0.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Но сама река довольно красива. В верхнем течении встречаются интересные водосливы:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/05/14/dve_ikrjanki_i_nemnogo_partizanskogo_xrebta_image_1.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;К обеду броды осточертели окончательно. К тому же, обнаружилось, что дома оставлены стратегические запасы чая и проталкивателя универсального (в народе — кетчуп). Отдать должное, природа над нами сжалилась и дала только несколько дополнительных бродов в послеобеденное время, а дальше сказала — вот вам старые мосты!&lt;/p&gt;
&lt;p&gt;В общем, протопав около 24 км от машины, остановились на уютной поляне около бывшего лесосклада:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2016/05/14/img_20160501_094749.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/05/14/dve_ikrjanki_i_nemnogo_partizanskogo_xrebta_image_2.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Жека, тем временем, забыл и свои любимые сланцы. По ходу движения мы нашли один бесхозный, который недолго думая поехал у него в рюкзаке. Второй башмак я предложил сделать из моих заначек — термоскатёрки. Получилась убийственная тема. Нужно налаживать массовое производство:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/05/14/dve_ikrjanki_i_nemnogo_partizanskogo_xrebta_image_3.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Ночью был заморозок. Ботинки слегка покрылись ледком.&lt;/p&gt;
&lt;p&gt;Утро ясное. Завтракаем, собираемся.&lt;/p&gt;
&lt;p&gt;По дороге проходим всего-ничего, после чего начинаем набор на пупырь 1252 м и далее на 1413 м. Практически сразу начали закапываться в снегу. Поэтому темп нехило снижается.&lt;/p&gt;
&lt;p&gt;Как только выползли на 1252 м нас обрадовали виды:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/05/14/dve_ikrjanki_i_nemnogo_partizanskogo_xrebta_image_4.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Испытали не слабый душевный подъём — не хребет, а трасса. Вот только радость была не сильно долгой. После того ближайшего холмика впереди и перед подъёмом на тот дальний (1413 м) пришлось порыться в снегу по самые уши.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/05/14/dve_ikrjanki_i_nemnogo_partizanskogo_xrebta_image_5.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Но виды всё же прекрасны:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/05/14/dve_ikrjanki_i_nemnogo_partizanskogo_xrebta_image_6.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Добравшись до пупыря 1413 м (стоит тригоном) решили сделать обед. Открылись виды на Синюю:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/05/14/dve_ikrjanki_i_nemnogo_partizanskogo_xrebta_image_7.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/05/14/dve_ikrjanki_i_nemnogo_partizanskogo_xrebta_image_8.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;А вот снежные проплешины стали более частыми и заметными. Преодолевать их становится всё труднее:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/05/14/dve_ikrjanki_i_nemnogo_partizanskogo_xrebta_image_9.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/05/14/dve_ikrjanki_i_nemnogo_partizanskogo_xrebta_image_10.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Но передышку нам иногда давали:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/05/14/dve_ikrjanki_i_nemnogo_partizanskogo_xrebta_image_11.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;На ночлег остановились за 4 км до Синей на пупыре 1195 м, протопав неполных 10 км за почти 9 часов. Прикинув все известные и неизвестные величины: наличие дороги внизу (о которой говорили только старые генштабовки), наличие снега не отходящем хребте от Синей да и вообще количество снега на подъёме к ней. Плюс запросив погоду, которая не обещала быть приятной, что на третий день, что на четвёртый (тут вообще циклон обещали), решаем сворачивать поход и в третий день выходить к машине.&lt;/p&gt;
&lt;p&gt;В усиление к нашему решению, сразу после ужина начинает накрапывать дождик, а ночью только усиливается.&lt;/p&gt;
&lt;p&gt;В ботинках, кстати, хлюпало больше, чем за целый день бродов по Икрянке.&lt;/p&gt;
&lt;p&gt;Утро. Просыпаемся в облаке, ветер и обложной дождь. Готовим завтрак в палатке и нехотя вылазим наружу, быстро собираем лагерь и топаем на спуск. Склон северный и снег с него уходит крайне неохотно:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/05/14/dve_ikrjanki_i_nemnogo_partizanskogo_xrebta_image_12.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Внизу, как и предполагали, дороги не оказалось. Не оказалось её и через 1.5 км, где она начинает отображаться на карте. Зато появляются охотничьи стоянки, хотя троп особо не видно. Встречаются только звериные. На заметную тропу вышли только через 10 км, набродив по Правой Икрянке около 15 бродов. Здесь стоить заметить, если бы двинулись на спуск по хребту от Синей, то сразу бы попали на тропу: после неё бродов очень долго нет, а всего их, до самого конца только четыре.&lt;/p&gt;
&lt;p&gt;Но река красивая. Все притоки образуют водопады или водосливы.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/05/14/dve_ikrjanki_i_nemnogo_partizanskogo_xrebta_image_13.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/05/14/dve_ikrjanki_i_nemnogo_partizanskogo_xrebta_image_14.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/05/14/dve_ikrjanki_i_nemnogo_partizanskogo_xrebta_image_15.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/05/14/dve_ikrjanki_i_nemnogo_partizanskogo_xrebta_image_16.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Как говорил уже выше, на тропу вышли только через 10 км, после очередной охотничьей стоянки. Они, кстати, почти в аккурат ровно через километр каждая. Первая была прямо под гребнем по которому мы спускались от пупыря, где ночевали. Почти сразу остановились на обед, около 16 часов.&lt;/p&gt;
&lt;p&gt;После обеда, через 2 км от начала тропы начинается дорога. Но, судя по качеству, её пробивали достаточно недавно и пользуются не сильно часто: судя по стёсаной коре на деревьях, количеству спиленных оных, что машину потёрли добротно, что люди потрудились — ездить часто тут не будут, а следовательно она же скоро и зарастёт. Но через 1-2 км качество дороги резко возрастает.&lt;/p&gt;
&lt;p&gt;Через 4.5 км и один брод после обеда, внезапно, наткнулись на кордон, или базу, или хутор, не знаю. Поболтали немного с местными, пораспрошали про дорогу и броды дальше — подсказали как обойти пару бродов и срезать путь.&lt;/p&gt;
&lt;p&gt;А вот в метрах через 500 после кордона&amp;hellip; Внезапно, прямо на дороге встретили медведя! Из-за поворота, в метрах 30, не более. Ступор, внутренняя команда не поворачиваться и не бежать, потом мозг выдаёт схожую ситуацию на Камчатке: шум воды, ветер не в сторону зверя&amp;hellip; В общем начинаю стучать палочками и громко выкрикивать. Мишка, молодец, сразу решил ретироваться. Правда, забежав на пригорочек, остановился посмотреть, а что шумит-то? Повторил выкрики, мишка решил убегать дальше. Снова молодец. По понятным причинам фото и видео данного события нет :)&lt;/p&gt;
&lt;p&gt;Темп движения по дороге существенно увеличился (нет, медведь, тут не причём). К 19 часам, протопав почти 26 км добрались до машины. В ночь решаем не ехать, поэтому последняя ночёвка и утром отправляемся. Всего за три дня протопано 57 км. Куча бродов, тропление, встреча с медведем — в общем, поход удался на 147%.&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;День&lt;/th&gt;
          &lt;th&gt;Протопали,&lt;br/&gt; км&lt;/th&gt;
          &lt;th&gt;Набор высоты,&lt;br/&gt; м&lt;/th&gt;
          &lt;th&gt;Сброс высоты,&lt;br/&gt; м&lt;/th&gt;
          &lt;th&gt;Время движения,&lt;br/&gt; ч&lt;/th&gt;
          &lt;th&gt;Средняя скорость,&lt;br/&gt; км/ч&lt;/th&gt;
          &lt;th&gt;Начало движения,&lt;br/&gt; ч&lt;/th&gt;
          &lt;th&gt;Конец движения,&lt;br/&gt; ч&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;Сб&lt;/td&gt;
          &lt;td&gt;23&lt;/td&gt;
          &lt;td&gt;840&lt;/td&gt;
          &lt;td&gt;307&lt;/td&gt;
          &lt;td&gt;06:46:00&lt;/td&gt;
          &lt;td&gt;3,4&lt;/td&gt;
          &lt;td&gt;12:24:00&lt;/td&gt;
          &lt;td&gt;19:10:00&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Вс&lt;/td&gt;
          &lt;td&gt;9,6&lt;/td&gt;
          &lt;td&gt;862&lt;/td&gt;
          &lt;td&gt;441&lt;/td&gt;
          &lt;td&gt;09:50:00&lt;/td&gt;
          &lt;td&gt;1,0&lt;/td&gt;
          &lt;td&gt;08:47:00&lt;/td&gt;
          &lt;td&gt;18:36:00&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Пн&lt;/td&gt;
          &lt;td&gt;24&lt;/td&gt;
          &lt;td&gt;84&lt;/td&gt;
          &lt;td&gt;1071&lt;/td&gt;
          &lt;td&gt;09:45:00&lt;/td&gt;
          &lt;td&gt;2,5&lt;/td&gt;
          &lt;td&gt;09:45:00&lt;/td&gt;
          &lt;td&gt;19:30:00&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;strong&gt;56,6&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;1786&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;1819&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;26:21:00&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;2,1&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;&amp;mdash;&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;&amp;mdash;&lt;/strong&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/05/14/dve_ikrjanki_i_nemnogo_partizanskogo_xrebta_image_17.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPD1:&lt;/strong&gt; добавил сводку по расходу газа: 
&lt;a href=&#34;https://htrd.su/blog/2015/09/07/rasxod_gaza_v_poxode/#dve_ikrjanki_i_nemnogo_partizanskogo_xrebta.md&#34;&gt;Расход газа в походе&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>std::string_view и временные объекты</title>
      <link>https://htrd.su/blog/2016/04/29/std_string_view_i_vremennye_obekty/</link>
      <pubDate>Fri, 29 Apr 2016 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2016/04/29/std_string_view_i_vremennye_obekty/</guid>
      <description>&lt;p&gt;Идея поста родилась при употреблении чая во внутрь на южной кухне.&lt;/p&gt;
&lt;p&gt;Недавно смотрел один доклад (точнее бегло просматривал) про Rust и в момент, когда начался рассказ про life-time, глаз зацепился за такой опасный пример из мира C++:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;get_url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;http://htrd.su&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;string_view&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;get_schema&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string_view&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;c1&#34;&gt;// тут какие-то действия, я их опущу
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;result&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;result&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_schema&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get_url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Что такое string_view - смотреть 
&lt;a href=&#34;http://en.cppreference.com/w/cpp/string/basic_string_view&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;тут&lt;/a&gt; или 
&lt;a href=&#34;http://www.boost.org/doc/libs/1_60_0/libs/utility/doc/html/string_ref.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;тут&lt;/a&gt;. Если коротко - это невладеющая строка. Полезна для экономии на аллокациях, когда нужно работать с частями исходной строки.&lt;/p&gt;
&lt;p&gt;В общем, из природы &lt;code&gt;string_view&lt;/code&gt; следует и проблемы в коде выше: &lt;code&gt;get_url()&lt;/code&gt; вернёт временный объект, который будет уничтожен в конце выражения, а следовательно, &lt;code&gt;v&lt;/code&gt; будет ссылаться на невалидный участок памяти.&lt;/p&gt;
&lt;p&gt;У меня в голове родилось, сходу, вариант защиты от такого: так как &lt;code&gt;string_view&lt;/code&gt; не владеет строкой, то перемещение для строки сделать невозможно (да и семантически неверно), а перемещающий конструктор будет предпочтён для временного объекта. Следовательно если сделать перемещающий конструктор для &lt;code&gt;string&lt;/code&gt; у &lt;code&gt;string_view&lt;/code&gt; удалённым, то код выше сломается на этапе компиляции.&lt;/p&gt;
&lt;p&gt;Подумав про это, решил глянуть, неужели разработчики стандарта об этом не подумали тоже&amp;hellip; Оказалось нет:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://en.cppreference.com/w/cpp/string/basic_string_view/basic_string_view&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://en.cppreference.com/w/cpp/string/basic_string_view/basic_string_view&lt;/a&gt; - запрещения данного конструктора нет&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.boost.org/doc/libs/1_60_0/libs/utility/doc/html/string_ref.html#string_ref.reference&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.boost.org/doc/libs/1_60_0/libs/utility/doc/html/string_ref.html#string_ref.reference&lt;/a&gt; - аналогичная ситуация&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Проверил концепт на простом примере:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;string_view&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;n&#34;&gt;string_view&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;n&#34;&gt;string_view&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;string_view&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;other&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;n&#34;&gt;string_view&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ptr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c_str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;length&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;n&#34;&gt;string_view&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;char&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ptr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;strlen&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;n&#34;&gt;string_view&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;char&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;size_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;len&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ptr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;len&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;c1&#34;&gt;// Protection for temporary objects
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;	&lt;span class=&#34;n&#34;&gt;string_view&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;delete&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;n&#34;&gt;string_view&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;operator&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;string_view&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;char&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ptr&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;nullptr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;n&#34;&gt;size_t&lt;/span&gt;      &lt;span class=&#34;n&#34;&gt;size&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Как видим, я запретил перемещение для &lt;code&gt;std::string&lt;/code&gt;. И теперь код из примера выше не собирается с такой ошибкой:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;prog.cpp: In function &amp;#39;int main()&amp;#39;:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;prog.cpp:56:33: error: use of deleted function &amp;#39;string_view::string_view(std::string&amp;amp;&amp;amp;)&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   auto v = get_schema(get_url());
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                 ^
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;prog.cpp:23:2: note: declared here
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  string_view(string&amp;amp;&amp;amp; str) = delete;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  ^
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ошибочным является и тоже не соберётся такой код:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-C++&#34; data-lang=&#34;C++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;string_view&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;v2&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;При этом прочие валидные сценарии продолжают работать:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;str&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_schema&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 2	
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string_view&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v2&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;hello&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 3	
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v3&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_schema&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;http://htrd.su&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Нельзя не сказать, что ищущий всегда найдёт способ обойти защиты и отстрелить ногу из гаубицы:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;string_view&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;get_schema2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;   
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;string_view&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;char&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;get_schema3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c_str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// WA for protection
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt;        &lt;span class=&#34;n&#34;&gt;v1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_schema2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get_url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt;        &lt;span class=&#34;n&#34;&gt;v2&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_schema&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get_url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;().&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c_str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;string_view&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v3&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_schema3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get_url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Такой код соберётся, но будет повторять ошибку из самого первого примера: использование уже освобождённой памяти. В общем: ищущий да обрящет.&lt;/p&gt;
&lt;p&gt;Собственно у меня резонный вопрос: почему такая защита не сделана в Boost и экспериментальных реализация string_view в STL? Я, быть может, не вижу какой-то очевидной (или не очень) вещи, которая препятствует этому?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PS&lt;/strong&gt; ну и полный листинг и ссылка на 
&lt;a href=&#34;http://ideone.com/LnO43G&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;ideone&lt;/a&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;cstring&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;using&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;string_view&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;n&#34;&gt;string_view&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;n&#34;&gt;string_view&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;string_view&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;other&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;n&#34;&gt;string_view&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ptr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c_str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;length&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;n&#34;&gt;string_view&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;char&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ptr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;strlen&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;n&#34;&gt;string_view&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;char&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;size_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;len&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ptr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;len&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;c1&#34;&gt;// Protection for temporary objects
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;	&lt;span class=&#34;n&#34;&gt;string_view&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;delete&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;n&#34;&gt;string_view&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;operator&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;string_view&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;char&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ptr&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;nullptr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;n&#34;&gt;size_t&lt;/span&gt;      &lt;span class=&#34;n&#34;&gt;size&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;get_url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;http://htrd.su&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;string_view&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;get_schema&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string_view&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;uri&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;uri&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;string_view&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;get_schema2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;n&#34;&gt;string_view&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;char&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;get_schema3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c_str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;c1&#34;&gt;// Compilation error:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;		&lt;span class=&#34;c1&#34;&gt;//auto v1 = get_schema(get_url());
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;		
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;c1&#34;&gt;//string_view v2;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;		&lt;span class=&#34;c1&#34;&gt;//v2 = get_url();
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;	&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;c1&#34;&gt;// WA for protection
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;		&lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_schema2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get_url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v2&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_schema&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get_url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;().&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c_str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;c1&#34;&gt;// Valid usage	
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;		&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;str&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_schema&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;n&#34;&gt;string_view&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v2&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;hello&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v3&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_schema&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;http://htrd.su&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Хранение перезаправленных картриджей ручек Platinum</title>
      <link>https://htrd.su/blog/2016/04/29/xranenie_perezapravlennyx_kartridzhej_ruchek_platinum/</link>
      <pubDate>Fri, 29 Apr 2016 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2016/04/29/xranenie_perezapravlennyx_kartridzhej_ruchek_platinum/</guid>
      <description>&lt;p&gt;Пост для истории. Основные посылы, которые &amp;ldquo;не позволили&amp;rdquo; мне воспользоваться конвертером для ручки Platinum Balance можно почитать на 
&lt;a href=&#34;http://penmania.ru/page/platinum_cartridge_refilling&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;penmania.ru&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Перезаправка картриджа не более грязная или долгая работа (наоборот, показалось, что выходит более чисто и быстро) чем заправка конвертера ручки. Но меня мучал вопрос хранения уже заправленных картриджей, ведь в этом случае проблема перезаправки становится ещё менее выраженной: при большей ёмкости и N-ном количестве картриджей шприц для заправки и бутылёк чернил можно хранить только дома и не носить с собой вообще.&lt;/p&gt;
&lt;p&gt;В ходе беглого исследования (подробности на пенмании) вышло два варианта:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;делать заглушки из обрезанного и залитого термоклеем инсулинового шприца;&lt;/li&gt;
&lt;li&gt;разбирать сам картридж, доставать шарик, заправлять и устанавливать шарик обратно.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Проблема первого варианта: заглушки можно потерять. Проблему решает пенал для картриджей. А ещё, можно оперативно сменить ещё не кончившийся картридж, ежели такая потребность возникла.&lt;/p&gt;
&lt;p&gt;Проблема второго варианта: больший износ. Неизвестно насколько хватит картриджа при таком отношении к нему.&lt;/p&gt;
&lt;p&gt;В общем вот видео на котором отображён процесс разбора картриджа:&lt;/p&gt;
&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
      &lt;iframe allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen&#34; loading=&#34;eager&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; src=&#34;https://www.youtube.com/embed/SMk99FLReCs?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; title=&#34;YouTube video&#34;&gt;&lt;/iframe&gt;
    &lt;/div&gt;</description>
    </item>
    
    <item>
      <title>C&#43;&#43; и 2D графика</title>
      <link>https://htrd.su/blog/2016/04/12/c_i_2d_grafika/</link>
      <pubDate>Tue, 12 Apr 2016 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2016/04/12/c_i_2d_grafika/</guid>
      <description>&lt;p&gt;
&lt;a href=&#34;http://ru.stackoverflow.com/questions/512077/%D0%A0%D0%B8%D1%81%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D0%B2-c/512141#512077&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Навеяно&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Из того, что мне понравилось:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;a href=&#34;https://www.libsdl.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;SDL2&lt;/a&gt;
* Язык: C
* Реализация: библиотека
* Реально проста для простых применений. Куча примеров и статей в интернете. Поддерживает достаточно большое число платформ и компиляторов.&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://cimg.eu/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;CImg&lt;/a&gt;
* Язык: C++
* Реализация: header-only
* Библиотека отличается феноменальной простотой установки: только один заголовочный файл и всё. Минусом будет только тот факт, что нужно будет указать правильные флаги линковщика для целевой платформы. Но при этом весь базовый функционал для рисования и процессинга изображений присутствует. Дружится с OpenCV. Думаю, стоит рассматривать вариант этой библиотеки, когда нужно что-то по-быстрому нарисовать.&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.sfml-dev.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;SMFL&lt;/a&gt;
* Язык: C++
* Реализация: библиотека
* С данной библиотекой особо не имел дел. Но примеры представляют её эдаким вариантом SDL, но на C++. Стоит попробовать.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Кроме того, на ресурсе 
&lt;a href=&#34;http://cppreference.com&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;cppreference.com&lt;/a&gt; есть свой 
&lt;a href=&#34;http://ru.cppreference.com/w/cpp/links/libs&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;список библиотек&lt;/a&gt; под различные задачи (в дополнение к 
&lt;a href=&#34;https://htrd.su/blog/2016/04/07/kollekcija_resursov_po_sovremennomu_c/&#34;&gt;предыдущему посту&lt;/a&gt;), и, в частности, 
&lt;a href=&#34;http://ru.cppreference.com/w/cpp/links/libs#.D0.93.D1.80.D0.B0.D1.84.D0.B8.D0.BA.D0.B0&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;для графики&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;ЗЫ по ссылке выше есть интересная библиотечка для пользовательского интерфейса (GUI): 
&lt;a href=&#34;http://www.nanapro.org/en-us/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;nana&lt;/a&gt;, стоит пощупать. А так же для TUI: 
&lt;a href=&#34;http://cwidget.alioth.debian.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;cwidget&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;ЗЗЫ прочие ссылки:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://open-std.org/JTC1/SC22/WG21/docs/papers/2016/p0267r0.pdf&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;A Proposal to Add 2D Graphics Rendering and Displayto C++&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://cristianadam.eu/20160228/introducing-c-plus-plus-experimental-io2d/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://cristianadam.eu/20160228/introducing-c-plus-plus-experimental-io2d/&lt;/a&gt; - разбор этого пропозала, референсная реализация
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://github.com/mikebmcl/N3888_RefImpl/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/mikebmcl/N3888_RefImpl/&lt;/a&gt; - оригинальная референсная реализация&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://github.com/cristianadam/io2d&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/cristianadam/io2d&lt;/a&gt; - форк от автора статьи&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Коллекция ресурсов по современному C&#43;&#43;</title>
      <link>https://htrd.su/blog/2016/04/07/kollekcija_resursov_po_sovremennomu_c/</link>
      <pubDate>Thu, 07 Apr 2016 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2016/04/07/kollekcija_resursov_po_sovremennomu_c/</guid>
      <description>&lt;p&gt;На RSDN промелькнуло, может ещё кому полезно будет:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://github.com/rigtorp/awesome-modern-cpp&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Awesome Modern C++&lt;/a&gt; -  A collection of resources on modern C++&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Кто хочет дополнить - шлите мёрж-реквесты.&lt;/p&gt;
&lt;p&gt;Прочие полезные ссылки, спасибо @sikmir:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://github.com/MattPD/cpplinks&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;C++ links&lt;/a&gt; - A categorized list of C++ resources. Assembler, Lock-free и иже с ними.&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://github.com/fffaraz/awesome-cpp&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Awesome C/C++&lt;/a&gt; - A curated list of awesome C/C++ frameworks, libraries, resources, and shiny things. Inspired by awesome-&amp;hellip; stuff.
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://fffaraz.github.io/awesome-cpp/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://fffaraz.github.io/awesome-cpp/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Полезные алиасы для программиста</title>
      <link>https://htrd.su/blog/2016/03/30/poleznye_aliasy_dlja_programmista/</link>
      <pubDate>Wed, 30 Mar 2016 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2016/03/30/poleznye_aliasy_dlja_programmista/</guid>
      <description>&lt;p&gt;Пока речь пойдёт про алиасы (alias) для &lt;strong&gt;man&lt;/strong&gt;. Потом, может быть, что-то будет дополнено.&lt;/p&gt;
&lt;h2 id=&#34;man&#34;&gt;MAN&lt;/h2&gt;
&lt;p&gt;Часто возникает вопрос: &amp;ldquo;man чаво?&amp;rdquo;. Кроме того, интересные программистам документы, обычно, находятся в секциях 2 (системные вызовы), 3 (библиотечные вызовы) и 7 (стандарты, соглашения, обзоры). По назначению других секций можете спрашивать:
man # intro&lt;/p&gt;
&lt;p&gt;где &lt;code&gt;#&lt;/code&gt; - номер секции от 1 до 7.&lt;/p&gt;
&lt;p&gt;В общем родилось три алиаса: для обращения и для поиска.&lt;/p&gt;
&lt;p&gt;Для использование, код ниже поместить в &lt;strong&gt;~/.bashrc&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt; man-prog&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;man -s 2,3,7&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt; man-prog-search&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;man -s 2,3,7 -K&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt; man-prog-apropos&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;man -s 2,3,7 -k&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Первый - просто ограничивает область поиска и по &lt;code&gt;man-prog printf&lt;/code&gt; выведет не описание команды, а описание функции.&lt;/p&gt;
&lt;p&gt;Второй - обеспечивает полнотекстовый поиск по страницам, третий - по индексу (apropos). В чём разница. Поясню на примере:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ man-prog-apropos tcp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;clnttcp_create (3)   - library routines for remote procedure calls
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;clock_getcpuclockid (3) - obtain ID of a process CPU-time clock
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;getcpu (2)           - determine CPU and NUMA node on which the calling thread is running
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pthread_getcpuclockid (3) - retrieve ID of a thread&amp;#39;s CPU time clock
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;QwtCPointerData (3)  - (неизвестный объект)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sched_getcpu (3)     - determine CPU on which the calling thread is running
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;svctcp_create (3)    - library routines for remote procedure calls
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tcp (7)              - TCP protocol
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;zmq_tcp (7)          - 0MQ unicast transport using TCP
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Вроде всё хорошо. Дальше:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ man-prog-apropos TCP_CORK
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;TCP_CORK: ничего подходящего не найдено.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Оппа&amp;hellip; В гуголь лезть? А если так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ man-prog-search TCP_CORK
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--Man-- след: sendfile(2) [ просм (ввод) | пропуск (Ctrl-D) | выход (Ctrl-C) ]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--Man-- след: sendfile64(2) [ просм (ввод) | пропуск (Ctrl-D) | выход (Ctrl-C) ]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--Man-- след: sendmsg(2) [ просм (ввод) | пропуск (Ctrl-D) | выход (Ctrl-C) ]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--Man-- след: sendto(2) [ просм (ввод) | пропуск (Ctrl-D) | выход (Ctrl-C) ]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--Man-- след: splice(2) [ просм (ввод) | пропуск (Ctrl-D) | выход (Ctrl-C) ]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--Man-- след: tcp(7) [ просм (ввод) | пропуск (Ctrl-D) | выход (Ctrl-C) ]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;в &lt;code&gt;man 7 tcp&lt;/code&gt; мы найдём искомое описание.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>std::cout, std::cerr и std::clog</title>
      <link>https://htrd.su/blog/2016/03/15/std_cout_std_cerr_i_std_clog/</link>
      <pubDate>Tue, 15 Mar 2016 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2016/03/15/std_cout_std_cerr_i_std_clog/</guid>
      <description>&lt;p&gt;Сначала немного информации из мира С.&lt;/p&gt;
&lt;p&gt;При запуске приложения (речь идёт о POSIX) вместе с ним открывается 3 файловых дескритоптора:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;0 - ассоциирован со стандартным вводом (stdin)&lt;/li&gt;
&lt;li&gt;1 - ассоциирован со стандартным выводом (stdout)&lt;/li&gt;
&lt;li&gt;2 - ассоциирован со стандартным выводом в поток ошибок (stderr)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;В стандартной библиотеки Си используется &lt;code&gt;FILE*&lt;/code&gt;-based буфферизируемый доступ к файлам и терминалу. В &lt;strong&gt;stdio.h&lt;/strong&gt; объявлены следующие глобальные символы, которые отражают стандартные потоки ввода вывода:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;stdin&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;stdout&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;stderr&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Соответственно их свободно можно использовать вместе с семейством функций &lt;code&gt;fread()&lt;/code&gt;/&lt;code&gt;fprintf()&lt;/code&gt;, обеспечивая буфферизированный доступ.&lt;/p&gt;
&lt;p&gt;Сами файловые дескрипторы POSIX объявляет через макросы в &lt;strong&gt;unistd.h&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;STDIN_FILENO&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;STDOUT_FILENO&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;STDERR_FILENO&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Соответственно их свободно можно использовать со всем семейством функций &lt;code&gt;read()&lt;/code&gt;, &lt;code&gt;write()&lt;/code&gt; и, даже, &lt;code&gt;select()&lt;/code&gt;/&lt;code&gt;epoll()&lt;/code&gt; и &lt;code&gt;fcntl()&lt;/code&gt; (например, при помощи &lt;code&gt;fcntl(O_NONBLOCK)&lt;/code&gt;+&lt;code&gt;select&lt;/code&gt;+&lt;code&gt;read&lt;/code&gt; можно реализовать аналог &lt;code&gt;[getch()](http://www.codenet.ru/progr/cpp/spr/175.php)&lt;/code&gt; из старого доброго Borland C++). Доступ через эти функции &lt;strong&gt;не буфферизирован&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Доступ к одному потоку разными механизмами в одной программе лучше не осуществлять: буферизация это уровень библиотеки C и внутреннего устройства FILE. &lt;code&gt;write()&lt;/code&gt; или &lt;code&gt;read()&lt;/code&gt; ближе к системным вызовам и ничего про это знать не обязаны. Как результат можете получить перемешивание текста даже в однопоточном приложении. Это не отменяет того файла, что сам &lt;code&gt;fwrite()&lt;/code&gt; может, в конце концов, вызвать &lt;code&gt;write()&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;На этом экскурс закончим и вернёмся в C++.&lt;/p&gt;
&lt;p&gt;В C++ для работы с потоками служит библиотека &lt;code&gt;[iostream](http://www.cplusplus.com/reference/istream/iostream/)&lt;/code&gt;. Причём доступ к конкретному стриму может быть как буфферизируемым так и не буфферизируемым (зависит от потребностей).&lt;/p&gt;
&lt;p&gt;Библиотека декларирует объекты, связанные со стандартными потоками:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;std::cin&lt;/code&gt; - стандартный ввод&lt;/li&gt;
&lt;li&gt;&lt;code&gt;std::cout&lt;/code&gt; - стандартный вывод&lt;/li&gt;
&lt;li&gt;&lt;code&gt;std::cerr&lt;/code&gt; - стандартный вывод ошибок и&lt;/li&gt;
&lt;li&gt;&lt;code&gt;std::clog&lt;/code&gt; - для логирования&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Про &lt;code&gt;std::cin&lt;/code&gt; особо гооврить (пока?) не будем - он один, в своём роде. А вот про оставшиеся три стоит.&lt;/p&gt;
&lt;p&gt;Итак, начнём с &lt;code&gt;std::cout&lt;/code&gt; и &lt;code&gt;std::cerr&lt;/code&gt;. В C++ они, помимо того, что связаны с разными дескрипторами, несколько отличаются поведением:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;std::cout&lt;/code&gt; - буферизируемый&lt;/li&gt;
&lt;li&gt;&lt;code&gt;std::cerr&lt;/code&gt; - &lt;strong&gt;не&lt;/strong&gt; буферизируемый&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Такое отличие явственно следует из семантики использования: ошибку нужно увидеть сразу без ожидания каких-то дополнительных действий со стороны программиста типа &lt;code&gt;std::flush&lt;/code&gt; или &lt;code&gt;std::endl&lt;/code&gt; (он, кстати, делает и flush, поэтому, для большей производительности строки в нормальном выводе стоит заканчивать &amp;lsquo;&lt;br/&gt;n&amp;rsquo;, а не &lt;code&gt;std::endl&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Ок, а что за &lt;code&gt;std::clog&lt;/code&gt;? А это всего-лишь &lt;code&gt;std::cerr&lt;/code&gt; + &lt;strong&gt;буферизация&lt;/strong&gt;. И снова, семантика использования проста: диагностика может чуть и подождать, что бы не понижать производительность вывода, но смешиваться с нормальным выводом не есть хорошо, мы, ведь, можем использовать приложения в пайпе и, желательно, разделить диагностику и ошибки от обычного вывода.&lt;/p&gt;
&lt;p&gt;Собственно, немного обобщая:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;std::cout&lt;/code&gt; - используется для обычного вывода результатов работы программы на экран, эти данные могут быть переданы дальше по пайпу для обработки.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;std::cerr&lt;/code&gt; - вывод сообщений об ошибке в обработке, что бы не подмешивались в основной поток и не ломали логику работы других программ в пайпе. При этом сообщение выводим максимально скоро.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;std::clog&lt;/code&gt; - используем для разного рода диагностических сообщений, но когда использование &lt;code&gt;std::cerr&lt;/code&gt; замедляет вывод из-за более частого дёргания системных вызовов, при этом, не подмешиваемся в основной поток и не мешаем работе других приложений в пайплайне.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Хорошим тоном, так же, является вывод справки по программе в &lt;code&gt;std::cout&lt;/code&gt;, если вызвано с параметрами &lt;code&gt;-h|--help&lt;/code&gt; - тогда её удобно смотреть в, например, &lt;strong&gt;less&lt;/strong&gt; без дополнительных телодвижений, а вот справку по опциям, в случае неправильной установки какого-то параметра (или пропуска обязательного), лучше выводить (тут особой разницы не вижу) в &lt;code&gt;std::cerr&lt;/code&gt; или &lt;code&gt;std::clog&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;И, на последок, лекция по поводу тормозов iostream и вообще, а как оно там внутри устроено:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://events.yandex.ru/lib/talks/3309/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://events.yandex.ru/lib/talks/3309/&lt;/a&gt; - просмотр строго рекомендован.&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Source Specific Multicast и Asio</title>
      <link>https://htrd.su/blog/2016/03/05/source_specific_multicast_i_asio/</link>
      <pubDate>Sat, 05 Mar 2016 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2016/03/05/source_specific_multicast_i_asio/</guid>
      <description>&lt;p&gt;Недавно на 
&lt;a href=&#34;http://ru.stackoverflow.com&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;ru.SO&lt;/a&gt; проскочил вопрос: 
&lt;a href=&#34;http://ru.stackoverflow.com/q/498326/189892&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;как можно подключиться&lt;/a&gt; к SSM (
&lt;a href=&#34;https://en.wikipedia.org/wiki/Source-specific_multicast&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Source Specific Multicast&lt;/a&gt;) группе?&lt;/p&gt;
&lt;p&gt;Нюанс в том, что для этого используется опция &lt;code&gt;MCAST_JOIN_SOURCE_GROUP&lt;/code&gt; для которой нет объекта-обёртки. Но, как оказалось, такой объект пишется самостоятельно на раз-два. Под катом я продублирую 
&lt;a href=&#34;http://ru.stackoverflow.com/a/499570/189892&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;свой ответ&lt;/a&gt;, как пример подхода реализации нужного функционала. Пример не самый идеологически правильный, но, как оказалось, рабочий. Автор сам предложил 
&lt;a href=&#34;http://ru.stackoverflow.com/a/498713/189892&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;свой вариант&lt;/a&gt; с захватом сырого хендла. Такой подход тоже имеет смысл в некоторых ситуациях((у меня случилось однажды так подружить сетевые абстракции Asio и libev, реализовав, тем самым, реактор на Asio :simple_smile:)).&lt;/p&gt;
&lt;p&gt;Что-бы установить опцию при помощи &lt;code&gt;socket.set_option()&lt;/code&gt; (или прочитать текущее значение), нужно создать класс со следующим публичным интерфейсом:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;template&amp;lt;typename Protocol&amp;gt; int level(const Protocol&amp;amp;) const&lt;/code&gt; - определяет уровень (&lt;code&gt;IPPROTO_IP&lt;/code&gt;, &lt;code&gt;IPPROTO_TCP&lt;/code&gt;, &lt;code&gt;SOL_SOCKET&lt;/code&gt; и так далее)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;template&amp;lt;typename Protocol&amp;gt; int name(const Protocol&amp;amp;) const&lt;/code&gt; - замысловато, но это ID опции (&lt;code&gt;TCP_CORK&lt;/code&gt;, &lt;code&gt;MCAST_JOIN_SOURCE_GROUP&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;template&amp;lt;typename Protocol&amp;gt; SOME_DATA_T* data(const Protocol&amp;amp;)&lt;/code&gt; и&lt;/li&gt;
&lt;li&gt;&lt;code&gt;template&amp;lt;typename Protocol&amp;gt; const SOME_DATA_T* data(const Protocol&amp;amp;)&lt;/code&gt; const - сами данные опции&lt;/li&gt;
&lt;li&gt;&lt;code&gt;template&amp;lt;typename Protocol&amp;gt; std::size_t size(const Protocol&amp;amp;) const&lt;/code&gt; - вернёт размер данных&lt;/li&gt;
&lt;li&gt;&lt;code&gt;template&amp;lt;typename Protocol&amp;gt; void resize(const Protocol&amp;amp;, std::size_t s)&lt;/code&gt; - не совсем понимаю, просто проверять &lt;code&gt;sizeof(data) == s&lt;/code&gt; и бросать исключение, если не выполняется.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;SOME_DATA_T&lt;/code&gt; может быть специфичен для опции или быть просто &lt;code&gt;void *&lt;/code&gt; (всё равно передаётся в &lt;code&gt;setsockopt()&lt;/code&gt;). Для &lt;code&gt;MCAST_JOIN_SOURCE_GROUP&lt;/code&gt; это будет &lt;code&gt;struct group_source_req&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Собственно реализация для &lt;code&gt;MCAST_JOIN_SOURCE_GROUP&lt;/code&gt; будет такой:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// Просто для помощи ради
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;using&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;group_source_req_t&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;group_source_req&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// Костыль для ASIO_OS_DEF, что бы можно было на разных системах примерно одинаково работать
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// типа если только опция отличается, но не данные. В данном случае можно обойтись вообще без этого
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;#define ASIO_OS_DEF_MCAST_JOIN_SOURCE_GROUP MCAST_JOIN_SOURCE_GROUP
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;mcast_join_source_group&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;mcast_join_source_group&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;m_data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;mcast_join_source_group&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;source_ip&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;group_ip&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;port&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;interface_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mcast_join_source_group&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ifname_number&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;if_nametoindex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;interface_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c_str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;sockaddr_in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;group_addr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;n&#34;&gt;group_addr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sin_addr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s_addr&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;inet_addr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;group_ip&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c_str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;n&#34;&gt;group_addr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sin_port&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;htons&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;port&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;n&#34;&gt;group_addr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sin_family&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;AF_INET&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;sockaddr_in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;source_addr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;n&#34;&gt;source_addr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sin_addr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s_addr&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;inet_addr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;source_ip&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c_str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;n&#34;&gt;source_addr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sin_port&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;htons&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;port&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;n&#34;&gt;source_addr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sin_family&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;AF_INET&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;n&#34;&gt;memcpy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;m_data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gsr_source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;sockaddr_storage&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;source_addr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;sizeof&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;sockaddr_in&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;n&#34;&gt;memcpy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;m_data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gsr_group&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;sockaddr_storage&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;group_addr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;sizeof&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;sockaddr_in&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;n&#34;&gt;m_data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gsr_interface&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ifname_number&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// Можно объявить вспомогательные методы для правки отдельных значений или всех полей
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;template&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;typename&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Protocol&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;level&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Protocol&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// Протокол, к слову, может быть и IPv6, для них обоих она работает одинаково. За исключением пары нюансов
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;#ifdef ASIO_OS_DEF
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;ASIO_OS_DEF&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;IPPROTO_IP&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#else
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;IPPROTO_IP&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#endif
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;template&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;typename&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Protocol&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Protocol&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#ifdef ASIO_OS_DEF
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;ASIO_OS_DEF&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MCAST_JOIN_SOURCE_GROUP&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#else
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MCAST_JOIN_SOURCE_GROUP&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#endif
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;template&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;typename&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Protocol&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;group_source_req_t&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Protocol&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;m_data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;template&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;typename&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Protocol&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;group_source_req_t&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Protocol&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;m_data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;template&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;typename&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Protocol&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Protocol&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;sizeof&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;m_data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;template&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;typename&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Protocol&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;resize&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Protocol&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;sizeof&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;m_data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;length_error&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;mcast_join_source_group socket option resize&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;asio&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;detail&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;throw_exception&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;private&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;group_source_req_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;m_data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Пользоваться как-то так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;socket&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;set_option&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mcast_join_source_group&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;91.203.255.225&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;239.195.1.131&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;17003&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;vlan389&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Данную реализацию можно улучшить, применив абстракции Asio типа &lt;code&gt;asio::ip:address&lt;/code&gt; и/или &lt;code&gt;asio::ip::endpoint&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Для простых опций уровня Вкл/Выкл делать придётся ещё меньше:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#ifndef ASIO_OS_DEF
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#  define ASIO_OS_DEF(x) x
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#endif
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#define ASIO_OS_DEF_SO_TIMESTAMP SO_TIMESTAMP
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;typedef&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;asio&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;detail&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;socket_option&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;boolean&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;ASIO_OS_DEF&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SOL_SOCKET&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ASIO_OS_DEF&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SO_TIMESTAMP&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;so_timestamp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#define ASIO_OS_DEF_IP_RECVTTL IP_RECVTTL
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;typedef&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;asio&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;detail&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;socket_option&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;boolean&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;ASIO_OS_DEF&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;IPPROTO_IP&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ASIO_OS_DEF&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;IP_RECVTTL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ip_recvttl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#define ASIO_OS_DEF_TCP_CORK TCP_CORK
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;typedef&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;asio&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;detail&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;socket_option&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;boolean&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;ASIO_OS_DEF&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;IPPROTO_IP&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ASIO_OS_DEF&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;TCP_CORK&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tcp_cork&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;и использовать как-то так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;socket&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;set_option&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tcp_cork&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>С юга на север по Ливадийскому хребту</title>
      <link>https://htrd.su/blog/2016/03/05/s_juga_na_sever_po_livadijskomu_xrebtu/</link>
      <pubDate>Sat, 05 Mar 2016 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2016/03/05/s_juga_na_sever_po_livadijskomu_xrebtu/</guid>
      <description>&lt;p&gt;23 февраля решили отпраздновать очередным снегоступингом.&lt;/p&gt;
&lt;p&gt;По предложению Кирилла рассматривали варианты посещения южных отрогов Ливадийского хребта.&lt;/p&gt;
&lt;p&gt;Маршрут изначально рассматривался как:&lt;br/&gt;&lt;br/&gt;
Фокино-г.Халаза-г.Горбуша-г.Лысый дед-Молёный мыс&lt;br/&gt;&lt;br/&gt;
но в результате был скорректирован до:&lt;br/&gt;&lt;br/&gt;
Душкино-падь Светланка-г.Круглая-г.Пидан-Лукьяновка.&lt;/p&gt;
&lt;p&gt;Собралось три человека: я, Кирилл, Саня. В роли адового тропильщика в этот раз Кирилл.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/03/05/s_juga_na_sever_po_livadijskomu_xrebtu_image_0.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Сразу сводка:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;День&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;Протопали, &lt;br&gt;км&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;Набор высоты,&lt;br&gt;м&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;Сброс высоты,&lt;br&gt;м&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;Время в движении,&lt;br&gt;ч&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;Средняя скорость,&lt;br&gt;км/ч&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;Начало движения,&lt;br&gt;ч&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;Конец движения,&lt;br&gt;ч&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;Вс&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;17&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;1315&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;226&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;06:03&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;2.6&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;10:52&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;19:28&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Пн&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;21&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;620&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;1512&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;07:31&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;2.8&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;07:59&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;18:03&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Всего&lt;/strong&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;strong&gt;37&lt;/strong&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;strong&gt;1935&lt;/strong&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;strong&gt;1738&lt;/strong&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;strong&gt;13:35&lt;/strong&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;strong&gt;2.7&lt;/strong&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;strong&gt;&amp;mdash;&lt;/strong&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;strong&gt;&amp;mdash;&lt;/strong&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;br /&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/03/05/s_juga_na_sever_po_livadijskomu_xrebtu_image_1.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/03/05/s_juga_na_sever_po_livadijskomu_xrebtu_image_2.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/03/05/s_juga_na_sever_po_livadijskomu_xrebtu_image_3.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Выходные на 23 февраля начались с воскресенья 20. На поход запланировали два дня, а третий — дома просушиться и отдохнуть перед следующей сверхдлинной (3 дня) рабочей неделей.&lt;/p&gt;
&lt;p&gt;Выезд из Владивостока на 516 автобусе в 7:00. Билеты купил Кирилл через сайт: 
&lt;a href=&#34;http://primvokzal.ru/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://primvokzal.ru/&lt;/a&gt;. Стоимость до Душкино около 400 руб. (375 + комиссия за предварительную покупку) и 60 рублей водителю за багаж. Можно было бы выехать и на автобусе до Сергеевки (через Находку) в 6:30, но на семичасовой автобус удобно добираться на первой же электричке.&lt;/p&gt;
&lt;p&gt;В автобусе ничего интересного: дорога хорошо знакомая, идёт медленно и печально и точно по расписанию. Остановка в Шкотово, закупка продукции ШПЦ (с частичным поглощением на месте… не из-за голода, так, традиция)&lt;/p&gt;
&lt;p&gt;В Душкино отдаю палатку Кириллу. Предлагаю поделить её с Саней, но он решает, что ходит сильно быстро, поэтому нужен груз, дабы притормозить себя.&lt;/p&gt;
&lt;p&gt;По пади Светланка проскакиваем чуть более чем за час (напоминает подход, как на Читинзе), сделав примерно 6-6.5 км. Немного офигиваем от своей крутости. Заправляемся чаем и… входим в печальный Южный лес. Да, именно так, с Большой буквы. Хотите его увидеть — прогуляйтесь за Пионерским водохранилищем. Только не по тропам и дорогам. В общем наш Южный лес в Приморье везде одинаков: плотные заросли разнообразной поросли, кущей, элеутерококка, аралии, с набором высоты это всё начинает разбавляться актинидией. В общем — ходить по такому безобразию удовольствие для истинных любителей. Поражённый такой красотой забываю доставать свою кофемолку, что бы сделать фотографий. Да и первые виды появились только по достижении первого пупыря в 500 метров:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/03/05/s_juga_na_sever_po_livadijskomu_xrebtu_image_4.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/03/05/s_juga_na_sever_po_livadijskomu_xrebtu_image_5.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/03/05/s_juga_na_sever_po_livadijskomu_xrebtu_image_6.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Мгла вокруг — это нас регулярно мелким снежком припорошивало.&lt;/p&gt;
&lt;p&gt;А вот и суровые восходители:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/03/05/s_juga_na_sever_po_livadijskomu_xrebtu_image_7.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/03/05/s_juga_na_sever_po_livadijskomu_xrebtu_image_8.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Кстати, «приятность» Южного леса, в основном, обусловлена деятельностью человека: вырубки, пожары. Но лесорубы всё ещё хотят выжать отсюда последние соки и взору открываются новые просеки и волоки:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/03/05/s_juga_na_sever_po_livadijskomu_xrebtu_image_9.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;А вот Пидана, из-за мглы, не видно. Уже было планируем: когда маршрут будем переходить? Видимости нет, значит не зачёт! Нас же путь лежат дальше этого пупыря, по тому хребту, что извивается и поворачивает налево.&lt;/p&gt;
&lt;p&gt;Кириллу, тем временем, на очередной чек пойнт доставляют трекинговые палки из экологически чистых материалов (отмечу: при изготовлении ни одно живое дерево не пострадало, точнее пострадало, но не от наших рук):&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/03/05/s_juga_na_sever_po_livadijskomu_xrebtu_image_10.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Снега же немного. Ползём так.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/03/05/s_juga_na_sever_po_livadijskomu_xrebtu_image_11.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Виды старательно прячутся за деревьями:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/03/05/s_juga_na_sever_po_livadijskomu_xrebtu_image_12.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/03/05/s_juga_na_sever_po_livadijskomu_xrebtu_image_13.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;По ёлкам невозможно определить где север, где юг, но зато можно запросто определить преобладающие ветра:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/03/05/s_juga_na_sever_po_livadijskomu_xrebtu_image_14.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Кстати, заметили: распогодилось. Случилось это к моменту достижения пупыря 787 м. С которого открылся (наконец-то!) вид на Ливадийский хребет и Пидан:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/03/05/s_juga_na_sever_po_livadijskomu_xrebtu_image_15.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;К этому моменты снега начало прибывать. Потихоньку дошли до следующего пупыря, немногим выше этого, но перевалив отметку 800 м, было решено обуваться в снегоступы. Виды, кстати, снова пропали. Силы, кстати, тоже начали, с чего-то, уходить. Поэтому кофемолку доставать для фотографий снова начал забывать.&lt;/p&gt;
&lt;p&gt;Медленным сапом, траверснув пупырь 886 м, в сумерках, забрались на Круглую (1066 м). Нашли место под палатку. Кирилл с Саней занялись подготовкой площадки и установкой палатки. Моя задача — кухня. Готовить планировали на бензине, поэтому взял BRS-8 и запас Калоши. На ужин — сайровый суп. Ага, размечтались! Дома проверил шланг и заменил на запасной. Но сей тревожный звоночек, почему-то, не стал поводом проверить насос под давлением. А оказалось, что он сифонит: пара уплотнительных колец устало. Готовить в таком раскладе: а) неудобно (постоянно подкачивать помпу, создавая давление), б) неэкономично (сколько бензина утекает) и в) тупо опасно (тут без комментариев). Котлы же не костровые. Да и заморачиваться костром не сильно хотелось. Благо, что есть початый газовый баллон на 230 грамм… Но его и летом то может не хватить на две готовки и чай. А зимой добавляйте топление снега и воду в термосы. В общем, олдскул тут рулит. А мы, почесав макушку, забрались в палатку, наделали воды в термосы на следующий день, сделали чая и умяли то, что не нуждалось в готовке на ужин. Здесь помогли и перекусы, которые на маршруте как-то не сильно шли, запас сала, чеснок и Санин какао. Ох, как он был в тему! Подъём запланировали на 6:00 утра.&lt;/p&gt;
&lt;p&gt;Ночь была относительно тёплая. Конденсат в палатке есть, но не так много: нет даже ледяной корки. Сказывается, что практически не готовили. На завтрак умяли банку сайры, которая прилежно грелась всю ночь в спальнике, часть бутербродов и сала, запив чаем с печеньем. А газа даже ещё осталось!&lt;/p&gt;
&lt;p&gt;После завтрака сбор лагеря и съёмка местности (видно Пидан и Фалазу):&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/03/05/s_juga_na_sever_po_livadijskomu_xrebtu_image_16.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/03/05/s_juga_na_sever_po_livadijskomu_xrebtu_image_17.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Вышли в 7:59. Небольшой подъём непосредственно на вершину Круглой, потом спуск в седловину (сброс около 150 метров) и выход непосредственно на Ливадийский хребет, на пупырь 1192 м (набор около 300-350 метров). Причём что далось сложнее: спуск или подъём — вопрос открытый. Спуск крутой, да ещё заросший, как джунгли амазонии. Седловина с хорошим настом, а подъём достаточно пологий и чистый, даром, что южный.&lt;/p&gt;
&lt;p&gt;По хребту идти стало значительно легче. Во-первых: где открыто, там хороший наст, а где закрыто, не так много пухлого снега. Во-вторых: если прикинуть текущую высоту (почти в 1200 метров) и высоту Пидана (около 1300 метров), то получается, что на 3 км нужно набрать всего около 100-150 метров. Фи! Прогулка по проспекту!&lt;/p&gt;
&lt;p&gt;Кстати, по этому проспекту и до самого Пидана вёл заячий след. Причём располагался там, где и нам идти было комфортно. Ну… почти всегда комфортно.&lt;/p&gt;
&lt;p&gt;Да и виды на этом проспекте шикарные:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/03/05/s_juga_na_sever_po_livadijskomu_xrebtu_image_18.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/03/05/s_juga_na_sever_po_livadijskomu_xrebtu_image_19.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/03/05/s_juga_na_sever_po_livadijskomu_xrebtu_image_20.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Видно море и окрестные хребты:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/03/05/s_juga_na_sever_po_livadijskomu_xrebtu_image_21.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/03/05/s_juga_na_sever_po_livadijskomu_xrebtu_image_22.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/03/05/s_juga_na_sever_po_livadijskomu_xrebtu_image_23.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Не удивительно, что даже суровые восходители фотографируются на фоне таких красот:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/03/05/s_juga_na_sever_po_livadijskomu_xrebtu_image_24.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;А тем временем на небе начали гулять свинцовые тучки. К моменту подъёма на Пидан мглой укутало всё вкруг. Еле проглядывается хребет Большой воробей:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/03/05/s_juga_na_sever_po_livadijskomu_xrebtu_image_25.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Почти не видно Фалазу:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/03/05/s_juga_na_sever_po_livadijskomu_xrebtu_image_26.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;На самой вершине неслабый южный ветер. Пару раз порывами меня пошатать смог. Хорошо, что только перевалив на северную сторону, ветер сразу прекратился (вершина закрыла).&lt;/p&gt;
&lt;p&gt;На спуске встретили одинокого туриста (обленились!) и красивые и мощные надувы снега:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/03/05/s_juga_na_sever_po_livadijskomu_xrebtu_image_27.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;По хребту тропы не видно. Заметает быстро. В лесу тропа тоже какая-то некузявая. А вот от хребта и вниз до р.Ойры — магистраль! Перед тем же спуском сняли снегоступы и нагрузили ими наши многострадальные спины.&lt;/p&gt;
&lt;p&gt;По самому ручью тоже магистраль. Причём не мудрствуя лукаво, протроплено прямо по нему. В результате идти было архикомфортно.&lt;/p&gt;
&lt;p&gt;Дальше небыстрым дуротопом доходим до Лукьяновки. До электрички около часа. Закупаемся в магазине всякими вредностями и соками, угощаем вредностями местных собак-попрошаек. Потом электричка, перестук колёс, автобус и последний рывок до дома.&lt;/p&gt;
&lt;p&gt;Думал, что организм будет протестовать и болеть. А он даже не подумал. Странный он.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPD:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;a href=&#34;https://htrd.su/img/post/2016/03/05/kruglaja-pidan.gpx&#34;&gt;Точки и треки&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description>
    </item>
    
    <item>
      <title>GeoCrop 1.0</title>
      <link>https://htrd.su/blog/2016/02/17/geocrop_1.0/</link>
      <pubDate>Wed, 17 Feb 2016 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2016/02/17/geocrop_1.0/</guid>
      <description>&lt;p&gt;Я подумал и решил, что функционала и стабильности достаточно для релиза версии 1.0.&lt;/p&gt;
&lt;p&gt;Так что да будет так: 
&lt;a href=&#34;https://github.com/h4tr3d/geocrop/releases/tag/v1.0&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/h4tr3d/geocrop/releases/tag/v1.0&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>GeoCrop и популярные привязки</title>
      <link>https://htrd.su/blog/2016/02/17/geocrop_i_populjarnye_privjazki/</link>
      <pubDate>Wed, 17 Feb 2016 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2016/02/17/geocrop_i_populjarnye_privjazki/</guid>
      <description>&lt;p&gt;Если у вас на входе привязанный GeoTIFF, то проблем нет никаких, но если у вас просто растр (.png, .jpeg, .gif) и привязка для него, то есть нюансы. Вообще, 
&lt;a href=&#34;TBD&#34;&gt;GeoCrop&lt;/a&gt; умеет работать с любыми данными, с которыми умеет общаться GDAL. Но в в некоторых случаях не всё получается гладко, так, например, только сегодня он научился читать файл проекции для world-привязок (пара .prj+.pgw).&lt;/p&gt;
&lt;p&gt;На просторах интернета можно встретить различные описания привязок, самые популярные:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ozi Explorer&lt;/li&gt;
&lt;li&gt;World files((
&lt;a href=&#34;http://www.gdal.org/frmt_various.html#WLD&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.gdal.org/frmt_various.html#WLD&lt;/a&gt;))&lt;/li&gt;
&lt;li&gt;Global Mapper
рассмотрим более подробно.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;ozi-explorer&#34;&gt;Ozi Explorer&lt;/h2&gt;
&lt;p&gt;GDAL не умеет только шифрованные OZFX, а так привязанная карта представляет собой пару .map+растр, где растр - это, обычно, .gif, .jpg или .png, реже - .bmp. При наличии такой привязки geocrop можно вызвать без дополнительных приготовлений:
geocrop -f VRT -s 50k K-53-026-A.map K-53-026-A.vrt&lt;/p&gt;
&lt;p&gt;Обратите внимание, что передаётся map файл, а не растр.&lt;/p&gt;
&lt;h2 id=&#34;world-files&#34;&gt;World files&lt;/h2&gt;
&lt;p&gt;Т.к. сама привязка состоит из двух файлов (.prj+.pgw), то не так просто сказать, что и откуда читать. 
&lt;a href=&#34;http://www.gdal.org/frmt_various.html#PNG&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Согласно документации&lt;/a&gt; .pgw, .pngw или .wld файл((Описание формата: 
&lt;a href=&#34;http://www.gdal.org/frmt_various.html#WLD&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.gdal.org/frmt_various.html#WLD&lt;/a&gt;)) подтягивается автоматически, если на входе карта в PNG (про другие форматы - ниже), а вот .prj файл нужно читать самому. Для этого в последней версии GeoCrop сделана небольшая эвристика:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Если растр содержит пустую проекцию, то производится попытка прочитать проекцию (формат WKT или PROJ.4) из файла с таким же именем, но расширением .prj и .prf.&lt;/li&gt;
&lt;li&gt;Либо файл проекции можно жестко задать при помощи новой опции &lt;code&gt;-p srs_def&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Т.е. при наличии привязки в виде world files GeoCrop так же можно вызвать без дополнительных приготовлений так:
geocrop -f VRT -s 50k K-53-026-A.png K-53-026-A.vrt
если файл проекции находится в K-53-026-A.prj или K-53-026-A.prf, или так:
geocrop -f VRT -s 50k -p K-53-026-A.wkt K-53-026-A.png K-53-026-A.vrt&lt;/p&gt;
&lt;p&gt;Обратите внимание, что в обоих случаях в качестве входного источника передаётся сам растр, а не его привязка.&lt;/p&gt;
&lt;p&gt;Если у вас растры отличные от PNG:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.gdal.org/frmt_bmp.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;BMP&lt;/a&gt; - привязка ищется в .bpw, .bmpw или .wld.&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.gdal.org/frmt_gif.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;GIF&lt;/a&gt; - привязка ищется в .gfw, .gifw или .wld.&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.gdal.org/frmt_gtiff.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;TIFF&lt;/a&gt; - если это GeoTIFF со встроенной привязкой, то она и используется, если это просто растр, то привязка ищется в .tfw, .tifw/.tiffw или .wld, а так же в MapInfo .tab файле.&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.gdal.org/frmt_jpeg.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;JPEG&lt;/a&gt; - привязка ищется в .jgw, .jpgw/.jpegw или .wld, а так же MapInfo .tab файле.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Полный и актуальный список всегда можно посмотреть тут: 
&lt;a href=&#34;http://www.gdal.org/formats_list.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.gdal.org/formats_list.html&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;global-mapper&#34;&gt;Global Mapper&lt;/h2&gt;
&lt;p&gt;В данный момент GDAL не поддерживает данный формат, а значит не поддерживает и GeoCrop. Ищите способ как сконвертировать его во что-то удобочитаемое.&lt;/p&gt;
&lt;p&gt;Вообще .gmw файлы достаточно простые для разбора, так что, возможно, появится у меня и их поддержка. Тем более, что для тех же карт GGC там сразу зашита информация об обрезке (только странно, что они сразу не сделали рамку прозрачной).&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Новый режим в GeoCrop</title>
      <link>https://htrd.su/blog/2016/02/17/novyj_rezhim_v_geocrop/</link>
      <pubDate>Wed, 17 Feb 2016 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2016/02/17/novyj_rezhim_v_geocrop/</guid>
      <description>&lt;p&gt;Теперь в 
&lt;a href=&#34;TBD&#34;&gt;GeoCrop&lt;/a&gt; появился новый режим: генерация полигона для обрезки рамки в формате CSV+WKT. Вывод на stdout, так что можно сохранить в любой удобный файл из скрипта, после чего использовать как аргумент для &lt;code&gt;-cutline&lt;/code&gt; у &lt;em&gt;gdalwarp&lt;/em&gt; в какой-то более сложной команде. Вызова &lt;em&gt;gdalwarp&lt;/em&gt; при этом не происходит.&lt;/p&gt;
&lt;p&gt;Активируется режим опцией &lt;code&gt;-g&lt;/code&gt; (от [g]enerate). Указывать выходной файл при этом не нужно - он будет проигнорирован.&lt;/p&gt;
&lt;p&gt;Так же, теперь появилась возможность указывать файл с описанием проекции: &lt;code&gt;-p srs_file&lt;/code&gt;. Сама проекция должна быть в формате WKT или PROJ.4. Эта опция перезаписывает определение проекции в текущем файле. Полезна для преобразования файлов с привязками в виде world-файлов. Более того, если проекция в файле пустая, а опция не указана то произведётся попытка прочитать её автоматически из файла с таким же именем, но с расширением .prj или .prf (какой первый попадётся). Так что популярные карты ГГЦ с такими привязками теперь можно конвертировать так же просто, как и с привязками Ozi Explorer.&lt;/p&gt;
&lt;p&gt;Чуть раньше реализована функциональность по передаче дополнительных параметров &lt;em&gt;gdalwarp&lt;/em&gt;. Для этого нужно завершить опции приложения двойным минусом &lt;code&gt;--&lt;/code&gt;, опции после него будут переданы &lt;em&gt;gdalwarp&lt;/em&gt; как есть без изменений:
geocrop -f VRT -s 200k K-53-07.map K-53-07.vrt &amp;ndash; -overwrite
опция &lt;code&gt;-overwrite&lt;/code&gt; будет передана &lt;em&gt;gdalwarp&lt;/em&gt;. Помимо этого, теперь можно переопределить и сам исполняемый файл &lt;em&gt;gdalwarp&lt;/em&gt; - опция &lt;code&gt;-w GDALWARP&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Кроме того изменился формат опций, стало возможным указывать выходной формат (опция &lt;code&gt;-f FMT&lt;/code&gt;, как следствие, образовались такие возможности: 
&lt;a href=&#34;https://htrd.su/blog/2016/02/11/bystro_i_nenavjazchivo_gotovim_kartu_dlja_otkrytija_v_qmapshack/&#34;&gt;post/2016/02/11/bystro_i_nenavjazchivo_gotovim_kartu_dlja_otkrytija_v_qmapshack&lt;/a&gt;) или только обрезать рамку, не делая кроп (опция &lt;code&gt;-n&lt;/code&gt;).&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>QMapShack</title>
      <link>https://htrd.su/blog/2016/02/11/qmapshack/</link>
      <pubDate>Thu, 11 Feb 2016 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2016/02/11/qmapshack/</guid>
      <description>&lt;p&gt;Внезапно 
&lt;a href=&#34;https://bitbucket.org/maproom/qmapshack/wiki/Home&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;QMapShack&lt;/a&gt; стал юзабельным!&lt;/p&gt;
&lt;p&gt;Но немного истории. 
&lt;a href=&#34;https://bitbucket.org/maproom/qmapshack/wiki/Home&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;QMapShack&lt;/a&gt;  это революционное развитие 
&lt;a href=&#34;TBD&#34;&gt;QLandkarteGT&lt;/a&gt; от того же автора. Просто архитектурно QLandkarteGT перестал соответствовать требованиям.&lt;/p&gt;
&lt;p&gt;Итак, как минимум следующие фичи теперь доступны в QMS (принятая аббревиатура для QMapShack в расслылке)((&lt;strong&gt;(!)&lt;/strong&gt; отмечены фичи уникальные, по сравнению с QLGT, а &lt;strong&gt;(-)&lt;/strong&gt;, то, что убрано, &lt;strong&gt;(?)&lt;/strong&gt; - спорные изменения)):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Открытие серии файлов с геоданными, переданных, как аргументы приложения. Это не относится с картам &lt;strong&gt;(?)&lt;/strong&gt; - они берутся только из директорий, которые вы настроили в программе (аналогично произвольная карта не может быть открыта через File -&amp;gt; Open Map, такого пункта просто нет).&lt;/li&gt;
&lt;li&gt;Поддерживаются ВСЕ форматы карт, которые поддерживаются GDAL &lt;strong&gt;(!)&lt;/strong&gt;. Но делается это не напрямую, а через формирование &lt;strong&gt;.vrt&lt;/strong&gt; файла. Сей унифицированный способ отменил отдельное открытие GeoTIFF - теперь нужно и для него формировать vrt-файл. К счастью теперь это делается через внутренний инструмент 
&lt;a href=&#34;https://bitbucket.org/maproom/qmapshack/wiki/DocBasicsMapDem#markdown-header-gdal-vrt-maps&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;vrtbuilder&lt;/a&gt; и позволяет в большинстве случаев обойтись без утомительной конвертации в GeoTIFF, например привязок OziExplorer((В случае привязок Ozi, нужно открывать .map файл, в случае привязок .pgw+.prj открывать нужно одноимённую картинку))((К сожалению, на карты и привязки с 
&lt;a href=&#34;http://loadmap.net&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://loadmap.net&lt;/a&gt; он упорно ругается)). Вообще 
&lt;a href=&#34;https://bitbucket.org/maproom/qmapshack/wiki/DocBasicsMapDem&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;список&lt;/a&gt; теперь достаточно вменяемый:
&lt;ul&gt;
&lt;li&gt;Векторые карты:
&lt;ul&gt;
&lt;li&gt;.img - веркторные карты Garmin в non-NT формате. NT-формат не поддерживается и поддерживаться не планируется.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Растровые карты:
&lt;ul&gt;
&lt;li&gt;.vrt - враппер для всех типов GDAL.&lt;/li&gt;
&lt;li&gt;.jnx - Garmin Birds Eye.&lt;/li&gt;
&lt;li&gt;.rmap - CompeGPS Map Container&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Онлайн карты:
&lt;ul&gt;
&lt;li&gt;.wmts - WMTSCapabilities.xml с любого картографического сервера, переименованный в уникальное имя. Дальше есть подробности.&lt;/li&gt;
&lt;li&gt;.tms - описание правил использования TMS серверов. Через такие файлы можно подключить всякие OpenStreetMap, OpenCycleMap и так далее. Встроенный мастер позволит сгенерировать такие файлы для некоторых популярных сервисов.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;DEM рельеф:
&lt;ul&gt;
&lt;li&gt;.vrt - как и прочие растровые карты&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;(!)&lt;/strong&gt; Более развитые средства управления геоданными. Каждый файл GPX воспринимается как отдельный контейнер-проект. Данные между ними можно копировать. Теперь можно объединить несколько треков в один &lt;strong&gt;(!)&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;(!)&lt;/strong&gt; Больше информации по трекам: можно задать тип активности, можно посмотреть графики высоты от расстояния, скорости от расстояния, или прогресса пути от времени.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;(!)&lt;/strong&gt; Более развитые средства редактирования треков. Правда точки так и не удаляются, но можно скрыть их, спрямив, например, трек (убрав топтание на месте, при остановке на обед или заделку колеса на велосипеде).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;(?)&lt;/strong&gt; Более активное использование мыши в окне отображения карты. В контекстном меню находится большинство полезных пунктов, типа создания путевой точки или трека. Да и вообще больше динамики в интерфейсе, точнее в области карты.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;(!!!)&lt;/strong&gt; Выделение, печать или сохранение произвольной области карты. Костыльное решение я делал для QLGT, но его не приняли. Там можно было распечатать только видимую часть карты.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;А вот теперь каких инструментов не хватает в QMS, но есть в QLGT:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Инструмент привязки карты по точкам (в визуальной форме). Не знаю, будет ли сделан, но таск 
&lt;a href=&#34;https://bitbucket.org/maproom/qmapshack/issues/111/map-referencing-tool-like-map-create-edit&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;завёл&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Экспорт выделенного куска карты в JNX. Потребность сомнительная, но пару раз пригождалась.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ну и ссылки:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Сайт: 
&lt;a href=&#34;https://bitbucket.org/maproom/qmapshack/wiki/Home&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://bitbucket.org/maproom/qmapshack/wiki/Home&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Документация: 
&lt;a href=&#34;https://bitbucket.org/maproom/qmapshack/wiki/DocMain&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://bitbucket.org/maproom/qmapshack/wiki/DocMain&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Быстро и ненавязчиво готовим карту для открытия в QMapShack</title>
      <link>https://htrd.su/blog/2016/02/11/bystro_i_nenavjazchivo_gotovim_kartu_dlja_otkrytija_v_qmapshack/</link>
      <pubDate>Thu, 11 Feb 2016 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2016/02/11/bystro_i_nenavjazchivo_gotovim_kartu_dlja_otkrytija_v_qmapshack/</guid>
      <description>&lt;p&gt;Для примера будет рассмотрен сервис 
&lt;a href=&#34;http://loadmap.net&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://loadmap.net&lt;/a&gt;, который предоставляет карты с привязками в формате OziExplorer.&lt;/p&gt;
&lt;p&gt;Минусом подобных карт бывает то, что у них есть рамка и отдельные листы карт перекрывают друг друга при открытии. Для того, что бы рамку резать я уже написал 
&lt;a href=&#34;https://htrd.su/blog/2012/06/22/dve_utility_dlja_raboty_s_kartami_ozi2map_i_geocrop/&#34;&gt;ранее&lt;/a&gt;((ozi2map от туда более не актуальна)) про свою программку 
&lt;a href=&#34;https://github.com/h4tr3d/geocrop&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;geocrop&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Теперь про самый смак: QMS умеет открывать .vrt файлы. VRT файл это XML документ, с описанием привязки и различных преобразований, понятные движку GDAL. Так вот, в ходе беглого исследования оказалось, что мой способ резки рамки применим к VRT файлам: данное преобразование просто сохраняется внутри и применяется при открытии! Если добавить сюда тот факт, что переконвертации самого растра не происходит и просто формируется дополнительный маленький XML файл, то счастье становится полным.&lt;/p&gt;
&lt;p&gt;Рассматривать вопрос сборки программы я подробно не буду, скажу только, что нужны dev пакеты для libgdal и libproj4. Устанавливать программу не нужно - просто скопируйте в удобное место, у меня это &lt;code&gt;~/bin&lt;/code&gt;. Сборка и работа на Windows не проверялась.&lt;/p&gt;
&lt;p&gt;Вот, преамбула завершилась&amp;hellip; Основная часть будет короче :)&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Скачиваем растровый файл карты, допустим это 500-метровка K-53-027-A, тогда файл будет K-53-027-A.png&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Скачиваем файл привязки K-53-027-A.map&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Обрезаем рамку и формируем VRT:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;~/bin/geocrop -s 50k -f VRT K-53-027-A.map K-53-027-A.vrt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Обратите внимание на параметр &lt;strong&gt;-s&lt;/strong&gt; - он задаёт масштаб листа в виде делителя, т.е. опущена &lt;code&gt;1:&lt;/code&gt;, а буква обозначает степень десятки на которое нужно домножить: 50k (кило) = 50 * 10^3 = 50000 и масштаб тогда 1:50000, т.е. пятисотметровка.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Повторяем эти шаги для всех нужных листов и добавляем в QMS путь до этих карт, после чего имеем такую картину:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/02/11/qms-vrt-maps.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Видны границы реальных карт, видно, что они перекрываются, но при этом это не мешает отображать нужные данные. На скриншоте использована карта в масштабе 200k.&lt;/p&gt;
&lt;p&gt;Для любителей подкастов можно поглядеть на ютубе подготовку карты из 4х пятисотметровок: 
&lt;a href=&#34;https://youtu.be/7mp35wYk0IQ&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://youtu.be/7mp35wYk0IQ&lt;/a&gt;&lt;/p&gt;
&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
      &lt;iframe allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen&#34; loading=&#34;eager&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; src=&#34;https://www.youtube.com/embed/7mp35wYk0IQ?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; title=&#34;YouTube video&#34;&gt;&lt;/iframe&gt;
    &lt;/div&gt;

&lt;p&gt;Стоит отметить, что если одновременно открываются карты нескольких масштабов, QMS неплохо выбирает когда начинать её отрисовывать. Но:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Карты более мелких масштабов должны идти перед картами более крупных масштабов!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;а так же стоит учитывать, что пока есть косяки в отрисовке, выглядит это так:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2016/02/11/qms-drawing-issues.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;откройте в полном размере. При этом, если чуть-чуть сдвинуть карту, области перерисуются.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPD:&lt;/strong&gt; косяков не наблюдается, если собирать карты одного масштаба в атлас (один VRT). Об этом я напишу чуть позже.&lt;/p&gt;
&lt;p&gt;Ещё нужно поэкспериментировать с тайлами. Возможно будет профит при прорисовки больших карт.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPD:&lt;/strong&gt; корявенький перевод на сайте QMS: 
&lt;a href=&#34;https://bitbucket.org/maproom/qmapshack/wiki/QuickWayToPrepareRasterMapForQMapShack&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://bitbucket.org/maproom/qmapshack/wiki/QuickWayToPrepareRasterMapForQMapShack&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Читинза под снегом 2</title>
      <link>https://htrd.su/blog/2016/02/11/chitinza_pod_snegom_2/</link>
      <pubDate>Thu, 11 Feb 2016 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2016/02/11/chitinza_pod_snegom_2/</guid>
      <description>&lt;p&gt;//Их было четверо&amp;hellip;&lt;br /&gt;
Они шли, шли, шли и, наконец, пришли!//&lt;/p&gt;
&lt;p&gt;Наконец-то первый полноценный снегоступный ПВД за сезон. То несросты, то переносы, но всё-таки собрались: Я, Коля, Кирилл и Гена.&lt;/p&gt;
&lt;p&gt;А вообще, пробую завести ещё одну традицию: снегоступинг на Читинзу во второй половине января или начале февраля. В прошлом году была первая серия.&lt;/p&gt;
&lt;p&gt;Как обычно, выехали на первой электричке в субботу, домой возвращались на крайней в воскресенье.&lt;/p&gt;
&lt;p&gt;Маршрут изначально намечали:&lt;br/&gt;&lt;br/&gt;
Партизан (пл.98 км) - руч.Просечный - С-В хребет - вершина 1156 м - трверс на Читинзу - Читинза - С-З хребет - р.Постышевка - Наречное.&lt;/p&gt;
&lt;p&gt;Но в электричке скорректировали его до:&lt;br/&gt;&lt;br/&gt;
Красноармейский - Ручьи - С-С-В хребет (классика) - Читинза - траверс на Смольную - Смольная - С-В хребет - вершина 734 м - руч.Прав.Лесопильный - Тигровой&lt;/p&gt;
&lt;p&gt;Небольшая сводка:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;День&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;Протопали, &lt;br&gt;км&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;Набор высоты,&lt;br&gt;м&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;Сброс высоты,&lt;br&gt;м&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;Время в движении,&lt;br&gt;ч&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;Средняя скорость,&lt;br&gt;км/ч&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;Начало движения,&lt;br&gt;ч&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;Конец движения,&lt;br&gt;ч&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;Cб&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;16.9&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;1434&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;554&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;06:25&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;2.0&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;10:00&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;18:34&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Вс&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;14.2&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;201&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;1091&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;04:33&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;3.1&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;09:04&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;14:38&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Всего&lt;/strong&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;strong&gt;31&lt;/strong&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;strong&gt;1635&lt;/strong&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;strong&gt;1645&lt;/strong&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;strong&gt;10:58&lt;/strong&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;strong&gt;2.8&lt;/strong&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;strong&gt;&amp;mdash;&lt;/strong&gt;&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;&lt;strong&gt;&amp;mdash;&lt;/strong&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2016/02/11/chitinza-smolnaja.png&#34; alt=&#34;&#34;&gt;&lt;br/&gt;&lt;br/&gt;
&lt;img src=&#34;https://htrd.su/img//post/2016/02/11/chitinza-smolnaja-grafiki.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Подкатом немного текста и фотографий.&lt;/p&gt;
&lt;p&gt;Движение начали в 10:00, чуть больше чем за час проскочили до начала подъёма по классике. Немного перекусили и около 11:30 начали подъём. На подъём ушло около 2.5 часов и на вершине были около 14:00.&lt;/p&gt;
&lt;p&gt;Более обстоятельный перекус и отправляемся на траверс Смольной.
&lt;img src=&#34;https://htrd.su/img//post/2016/02/11/img_20160206_151456.jpg&#34; alt=&#34;&#34;&gt;&lt;br/&gt;&lt;br/&gt;
&lt;img src=&#34;https://htrd.su/img//post/2016/02/11/img_20160206_151511.jpg&#34; alt=&#34;&#34;&gt;&lt;br/&gt;&lt;br/&gt;
&lt;img src=&#34;https://htrd.su/img//post/2016/02/11/img_20160206_154938.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;А это откуда мы пришли:
&lt;img src=&#34;https://htrd.su/img//post/2016/02/11/img_20160206_151521.jpg&#34; alt=&#34;&#34;&gt;&lt;br/&gt;&lt;br/&gt;
&lt;img src=&#34;https://htrd.su/img//post/2016/02/11/img_20160206_151525.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Наст шикарный. Но вообще снега немного, хотя местами и порядочно. Неприятно было пробираться через завалы возле 500 кВ ЛЭП. По лесу очень много следов копытных, зайцев.&lt;/p&gt;
&lt;p&gt;На ночёвку остановились под Смольной: под вершиной добрая поляна, а до вершины всего 50 м набора. Поляна очень хорошо защищена от северных ветров.&lt;/p&gt;
&lt;p&gt;Готовили в палатке, поэтому превратили её немного в баню, отчего спальники к утру были ужасно сырыми (конденсат, как замёрз, выпадал мелким снегом и таял). На одну ночёвку так можно, но на длительные походы нужно что-то думать. В целом ночь оказалась достаточно тёплой. Т.к. времени было много сразу натопили снег в термосы и просто воду в котёл - готовить утром (кто не знает, приоритет зимой такой (по затрате энергии и газа на кипячение): жидкая вода -&amp;gt; лёд -&amp;gt; снег).&lt;/p&gt;
&lt;p&gt;Подъём устроили в 6:30, т.к. планировали выйти в 9:00. Уже на станции думали, чего так рано - можно было спокойно спать до 9 часов и выходить в 11:00-11:30.&lt;/p&gt;
&lt;p&gt;Палатка полна льда. Везде: с внутренней стороны тента, на внутренней палатке. Часть палатки скидываю Кириллу, т.к. упаковочный объём у неё сильно увеличился. Снова отработал схему с большим пакетом: сбрасываешь туда вещи и выносишь к рюкзаку из палатки. Получается быстрее освободить жилище и собирать свой шмурдяк.&lt;/p&gt;
&lt;p&gt;Выход как по хронометру, в 9:00. Чуть чуть и мы на вершине. Начинают открываться замечательные виды на Ливадийский хребет, горы Пидан и Фалаза, &amp;ldquo;хвост бурундучка&amp;rdquo; (продолжение Ливадийского хребта от Фалазы в сторону Тигрового), хребет Большой Воробей и г.Туманная.
&lt;img src=&#34;https://htrd.su/img//post/2016/02/11/img_20160207_092535.jpg&#34; alt=&#34;&#34;&gt;&lt;br/&gt;&lt;br/&gt;
&lt;img src=&#34;https://htrd.su/img//post/2016/02/11/img_20160207_102219.jpg&#34; alt=&#34;&#34;&gt;&lt;br/&gt;&lt;br/&gt;
&lt;img src=&#34;https://htrd.su/img//post/2016/02/11/img_20160207_103045.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Около 12:20 были уже на ручье Правый Лесопильный.
&lt;img src=&#34;https://htrd.su/img//post/2016/02/11/img_20160207_115724.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Дорога вдоль него оказалась хорошо пробитой, поэтому даже медленной сапой, но сильно быстро дошли до станции, где пришлось куковать почти 4 часа до электрички.&lt;/p&gt;
&lt;p&gt;На самом ручье встречаются такие вот &amp;ldquo;сосульки&amp;rdquo;, растущие вверх:
&lt;img src=&#34;https://htrd.su/img//post/2016/02/11/img_20160207_123805.jpg&#34; alt=&#34;&#34;&gt;
судя по всему, лёд под тяжестью просел, образовалась полынья в которую под давлением пошла вода. Так и застыла на морозе, образовав зародыш сталагмита.&lt;/p&gt;
&lt;h2 id=&#34;снаряжение&#34;&gt;Снаряжение&lt;/h2&gt;
&lt;p&gt;По снаряжению:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Палатка 3 места Mobi Garden: всё хорошо, но молнии слабоваты при использовании на холоде при условии обледенения&lt;/li&gt;
&lt;li&gt;Коврик Therm-a-Rest Z-Lite SOL: хорош, впрочем, как обычно&lt;/li&gt;
&lt;li&gt;Вспомогательный коврик из 5 мм фольгированной теплоизоляции (ширина обычного коврика, длинна 3/4): готовить или подкладывать под себя, если сильно холодно, или по бокам. Я отгородился от стенки палатки.&lt;/li&gt;
&lt;li&gt;Спальник Сивера Гарип -9. 200 см коротковат на мой рост (180 см). В любом случае - этой ночью не мёрз.&lt;/li&gt;
&lt;li&gt;Ходовая куртка: софтшелка Сивера Сирин. Нареканий нет. Только расстёгнутым идти приходилось, т.к. жарковато было. На вершинах постоянно одевал капюшон.&lt;/li&gt;
&lt;li&gt;Ходовой полар: Полар 100 (Penguin) от Red Fox. Вкупе с курткой составили хороший тандем для данной погоды.&lt;/li&gt;
&lt;li&gt;Ходовые штаны: ACU от Сплава. Дешево и сердито. В отсутствие ветра обеспечивали крайне неплохую дышимость. Да и карго-карманы удобны.&lt;/li&gt;
&lt;li&gt;Термуха верх: что-то от The North Face, самая тонкая.&lt;/li&gt;
&lt;li&gt;Термуха низ: что-то от Ozone.&lt;/li&gt;
&lt;li&gt;Носки: как-то трекинговый Noname. Два комплекта: в том, в котором ночевал, на следующий день пошёл.&lt;/li&gt;
&lt;li&gt;Ботинки: Zamberlan Civetta. Пока ещё в процессе разноски (поддавливает на выпирающую косточку на правой ноге), но без мозолей. Да и ощущения, вцелом, замечательные. Утром без проблем оделись на ноги, без прогрева на горелке. Носки вечером были лишь чуть влажными. Если долго стоять на месте, начинает подхолаживать.&lt;/li&gt;
&lt;li&gt;Гамаши: какие-то от Ozone. Выбирал, что бы были просто петли (не ремешок) для шнурка, которым притягиваешь к ноге. Шнурок можно заменить на любую мотявку, если перетрётся. Молния кажется хлипкой, но ещё не подводила.&lt;/li&gt;
&lt;li&gt;Шапка: обычная флисовая от Red Fox.&lt;/li&gt;
&lt;li&gt;Перчатки: непонятно какие флисовые. Мокнут быстро. Сохнут быстро. Влажные греют.&lt;/li&gt;
&lt;li&gt;Верхонки: с утеплителем на Thinsulate от Red Fox. Который раз не жалею, что приобрёл. Не самые лёгкие, но и не самые тяжёлые. Плюс кондовые.&lt;/li&gt;
&lt;li&gt;Пуховка: Сивера Волин 2.0. Пока показывает себя хорошо - очень тепло. Не смутилась баней в палатке (лежала просто рядом). Но, в целом, погода пока не под неё - нужно холоднее :)&lt;/li&gt;
&lt;li&gt;Штаны поларовые: низ от ходовой флисовки, тоже полар 100. Использовал только для сна.&lt;/li&gt;
&lt;li&gt;Снегоступы: TSL Rando 225. Хорошие фирновые снегоступы. Их минусов: пластиковое крепление носка лопнуло на обоих. У Коли похожая проблема.&lt;/li&gt;
&lt;li&gt;Трекинговые палки: Снаряжение Mountain Pro. Хоть и облегчёнка, но пока меня держат и ведут себя хорошо. Из плюсов: существенно ниже цена, чем у всяких Leki, BD и иже с ними.&lt;/li&gt;
&lt;li&gt;Термос: Noname. Но работает сносно.&lt;/li&gt;
&lt;li&gt;Посуда: титановая ложка от Урал ВСМПО, титановая миска на 550 мл от Snow Peak. В качестве кружки - крышка от термоса.&lt;/li&gt;
&lt;li&gt;Котелок: Kovea 2.7 л. Хочу уже котёл с радиатором&lt;/li&gt;
&lt;li&gt;Горелка: Optimus Vega. При работе на жидкой фракции, бывает, подмерзает редуктор, после чего не всегда получается запустить. Вообще стоит посмотреть на Primus Gravity III (у II идиотский пьезоподжиг, в III он в виде отдельного гаджета) - цена сейчас ниже, более кондовая, разборный узел испарительной трубки. Оптимус Вега пока не сильно впечатляет (ещё и шланг ужасно жёсткий для веса самой горелки).&lt;/li&gt;
&lt;li&gt;Ветрозащита: 10-секционная, складная. Вот производителя не ведаю. Пригодилась на перекусе на Читинзе и при готовке чая, пока ждали электричку.&lt;/li&gt;
&lt;li&gt;Кофемолка для фотографий и звонков: Dexp Ixion ML 4.7. Холод его батарею не сильно смутил.&lt;/li&gt;
&lt;li&gt;Навигатор: Garmin GPSMap 62s.&lt;/li&gt;
&lt;li&gt;Фонарик: Petzl Myo RXP.&lt;/li&gt;
&lt;li&gt;Минимальная аптечка (стрептоцид, перевязочное, обезболивающее (спазмолитики и анальгетики - для разных болей), активированный уголь)&lt;/li&gt;
&lt;li&gt;Минимальный ремкомплект (нитки, иголки, резинка (может использоваться для ремонта резинки в дугах), трубка для ремонта друг палатки)&lt;/li&gt;
&lt;li&gt;Распально-зажигательное: огниво и парафиновые ватные диски. Никогда не покидают рюкзак. На всяких пожарный.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Что не пригодилось:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Флисовка Polarteck Thremal Pro от Сиверы: и так тепло было.&lt;/li&gt;
&lt;li&gt;Балаклава от Сиверы. Но такая вещь пусть лучше будет и не пригодится, чем потребуется, а её не будет.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Полностью рюкзак на старте весил около 15 кг. Тут-то и понимаешь, что практически такой же набор используется в любом большом походе - остальной вес добирается едой и баллонами с газом.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPD:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Фото от Коли: 
&lt;a href=&#34;https://picasaweb.google.com/102403156374194487298/201602060712391248#&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://picasaweb.google.com/102403156374194487298/201602060712391248#&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Отчёт от Коли: 
&lt;a href=&#34;http://turizm.primkray.ru/trek/krasnoarmeyskiy-chitinza-smolnaya-tigrovyy&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://turizm.primkray.ru/trek/krasnoarmeyskiy-chitinza-smolnaya-tigrovyy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Трек:
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://htrd.su/img/post/2016/02/11/2016-02-06_10.00.52_den.gpx&#34;&gt;День первый&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://htrd.su/img/post/2016/02/11/2016-02-07_09.04.13_den.gpx&#34;&gt;День второй&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://htrd.su/img/post/2016/02/11/chitinzacombinedtrack.gpx&#34;&gt;Общий и точка ночёвки&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Электродвигатели &#34;на пальцах&#34;</title>
      <link>https://htrd.su/blog/2016/02/09/ehlektrodvigateli_na_palcax/</link>
      <pubDate>Tue, 09 Feb 2016 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2016/02/09/ehlektrodvigateli_na_palcax/</guid>
      <description>&lt;p&gt;Не могу не пропиарить цикл статей по управлению и устройству различных электродвигателей (ДПТ, АД, СД, всякие шаговики и так далее):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://geektimes.ru/company/npf_vektor/blog/269486/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Векторное управление электродвигателем «на пальцах»&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://geektimes.ru/company/npf_vektor/blog/270206/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Векторное управление для асинхронного электродвигателя «на пальцах»&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://geektimes.ru/company/npf_vektor/blog/270666/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Электродвигатели: какие они бывают&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Да и вообще рекомендую блог к подписке: 
&lt;a href=&#34;https://geektimes.ru/company/npf_vektor/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;НПФ ВЕКТОР&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Про снегоступы</title>
      <link>https://htrd.su/blog/2016/02/03/pro_snegostupy/</link>
      <pubDate>Wed, 03 Feb 2016 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2016/02/03/pro_snegostupy/</guid>
      <description>&lt;p&gt;Поражаюсь способности наших заграничных друзей давать всему свои термины, стоить под это целы ниши услуг и товаров. Чего только стоит:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Гуляешь по парку? Пожалуйста - walking!&lt;/li&gt;
&lt;li&gt;Чуть сложнее? Да на здоровье - hikking!&lt;/li&gt;
&lt;li&gt;Уже несёшь дом за спиной? Всегда рады - backpacking!&lt;/li&gt;
&lt;li&gt;Идёшь в лыжный поход? Нет проблем - randonnee skiing (или ski touring)!&lt;/li&gt;
&lt;li&gt;Hillwalking, mountaineering, и так далее.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Под каждую нишу своё снаряжение, подготовленные тропы, гиды и так далее.&lt;/p&gt;
&lt;p&gt;При чём тут снегоступы? Оказывается и для них есть свои названия:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Наш жаргонный &amp;ldquo;снегоступинг&amp;rdquo; - это snowshoeing,&lt;/li&gt;
&lt;li&gt;а &amp;ldquo;снегоступер&amp;rdquo; - snowshoer.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;В статье на &lt;a href=&#34;https://en.wikipedia.org/wiki/Snowshoe%7c%d0%b2%d0%b8%d0%ba%d0%b8%d0%bf%d0%b5%d0%b4%d0%b8%d0%b8&#34; target=&#34;_blank&#34;&gt;Snowshoe|википедии&lt;/a&gt;
 про это есть. Уж не знаю, существуют ли подготовленные снегоступные трассы, но если ответ положительный - я не удивлюсь :)&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Как дышать на холоде</title>
      <link>https://htrd.su/blog/2016/01/31/kak_dyshat_na_xolode/</link>
      <pubDate>Sun, 31 Jan 2016 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2016/01/31/kak_dyshat_na_xolode/</guid>
      <description>&lt;p&gt;Хорошая статья на тему (автор - полярник):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://dave-aka-doc.livejournal.com/526452.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://dave-aka-doc.livejournal.com/526452.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Правда не знал, что -20, даже при ветре, это экстремально холодно :)&lt;/p&gt;
&lt;p&gt;По способам: всё правильно. К примеру, дыхание ртом, когда язык загибаешь к нёбу. Про этот способ несколько лет назад сказал мой друг Олег. С тех пор и пользуюсь. Балаклава с &amp;ldquo;намордником&amp;rdquo; тоже решает. Правда скулы нужно не забывать закрывать, а то легкие не застудишь, а ряху обморозишь.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Малый траверс Ботанического хребта и г.Острая по С-З гребню</title>
      <link>https://htrd.su/blog/2016/01/31/malyj_travers_botanicheskogo_xrebta_i_g.ostraja_po_s-z_grebnju/</link>
      <pubDate>Sun, 31 Jan 2016 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2016/01/31/malyj_travers_botanicheskogo_xrebta_i_g.ostraja_po_s-z_grebnju/</guid>
      <description>&lt;p&gt;Кто не понял - название шутка. Привет Спайдеру :wink:&lt;/p&gt;
&lt;p&gt;На воробей сходить никого сблатовать не получилось. Пришлось ноги напрячь, хотя бы где-то в районе города. Результат:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Время: 6:15
&lt;ol&gt;
&lt;li&gt;в движении: 5:06&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Километраж: 16.2 км&lt;/li&gt;
&lt;li&gt;Средняя скорость: 3.17 км/час&lt;/li&gt;
&lt;li&gt;Общий набор высоты: 1076 м&lt;/li&gt;
&lt;li&gt;Общий сброс высоты: 939 м&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2016/01/31/snimok_ehkrana_ot_2016-01-31_13_16_54.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;К слову сказать - до Острой не дошёл, но об этом дальше.&lt;/p&gt;
&lt;p&gt;Основная задача: ушататься.&lt;/p&gt;
&lt;p&gt;Добираюсь на автобусе. Планировал полностью пройти хребет Ботанического сада, стартуя с Амурского залива, но водитель, нехороший человек, набил людей в автобус и ни разу не объявлял остановки, хорошо, что остановил на Ботаническом саде, откуда, сказав ему пару ласковых, пехом двинул до Санаторной, где через дырку в заборе быстро прошмыгнул до хребта. Старт случился в 12:40.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2016/01/31/img_20160130_131458.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2016/01/31/img_20160130_131503.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2016/01/31/img_20160130_131510.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Тропа по хребту и до Малой Пионерки натоптана очень хорошо. По ходу встречаются кормушки для птиц (фото с прошлого выхода) с грудой семечек (ведь кто-то их постоянно подкладывает!):&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2016/01/31/img_20151219_142021.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;или такие вот боры:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2016/01/31/img_20160130_133153.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2016/01/31/img_20160130_133200.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;в 13:50 добрался до ЛЭП, а в 14:02 был уже на хребте, откуда открывался панорамный вид на Пионерской водохранилище, 6-й форт (г.Седанка, 302 м):&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2016/01/31/img_20160130_140322.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2016/01/31/img_20160130_140330.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;А дальше начался часть маршрута по хребту&amp;hellip; Да, я привык к большим высотам и более северным районам: в лесу столько поросли, что двигаться по нему без маски и очков нужно либо очень медленно, дабы не выколоть глаз, либо быть каким-то животным. Третьего не дано.&lt;/p&gt;
&lt;p&gt;На первом пупыре, который никак не обозначен, обнаружил следы укрепрайона: вершина окопана траншеями, ходами. На вершине грунт изъят для блиндажа (?), триангуляр и&amp;hellip; шалаш, вместо блиндажа - сейчас не жилой, но, судя по всему, летом активно используемый:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2016/01/31/img_20160130_141731.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2016/01/31/img_20160130_141745.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2016/01/31/img_20160130_142007.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Там же обнаружились остатки старой телеграфной линии, которая уходит в долину реки Большая Пионерка, вдоль одного из её притоков.&lt;/p&gt;
&lt;p&gt;Гнусно ругаясь про себя (а пару раз и вслух), медленно и верно двигался по хребту в сторону острой. Снега немного, но продирание по кущам доставляет. А если вдали маячит просвет, знайте: там поляна, заросшая актинидией. Лучше не суйтесь туда!&lt;/p&gt;
&lt;p&gt;Нашёл несколько лиан лимонника, прихватил с собой для чая.&lt;/p&gt;
&lt;p&gt;Около 15:00 пришлось приодеться. До этого шёл только в термухе и поларе 100. А тут уже поднялся ветерок и начало существенно подмораживать лицо. Одел софтшелку и балаклаву.&lt;/p&gt;
&lt;p&gt;Следя за временем (нужно было вернуться домой к 19:00), решил не пытаться поднять до Острой и, не дойдя около километра, свалился вниз к Большой Пионерке. Лес при этом был примерно такой:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2016/01/31/img_20160130_154955.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2016/01/31/img_20160130_154959.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;На спуске встретил следы зайца и копытного, встретил одну лёжку. Встретились два кедра в два моих обхвата:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2016/01/31/img_20160130_160535.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;А на снегу такая игра света и тени:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2016/01/31/img_20160130_160813.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Дойдя до реки остановился на перекус и сделать чая (термос не брал, взял только бутылку с залитым кипятком, из расчёта, что вода до конца маршрута не успеет замёрзнуть). Наконец-то раскупорил 110 граммовый баллон газа Snow Peak Giga Power (артикул GP-110), произведённый ещё 2007 году (ему уже почти 10 лет!) с достаточно производительной смесью (пропан 15%, изобутан 85%). Смесь отработала на отлично (как в экономичной режиме, так и на перевёрнутом баллоне). Без данных о температуре информация не полная, но термометр я с собой не ношу, так что только ориентируемся на rp5: около -16.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2016/01/31/img_20160130_165004.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;На привале порадовала пуховка: ощущал себя в ней как палатке с печкой. Но, всё же, температуры для неё нужно пробовать пониже :)&lt;/p&gt;
&lt;p&gt;После перекуса вышел на дорогу и быстрым шагом до ЛЭП, где последний подъём и в 18:24 уже на верху, откуда уже только спуск и выход на Варяг. В 18:56 уже жду автобус, что бы доехать домой.&lt;/p&gt;
&lt;p&gt;По итогу:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Основная задача: ушататься - выполнено.&lt;/li&gt;
&lt;li&gt;Острая взята: &lt;strong&gt;не выполнено&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Ощущение халявной процедуры иглоукалывания (привет элеутерококку): обеспечено.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;На Острую ещё нужно сходить, правда не по хребту, а двигаться по Мал.Пионерке, по лесной дороге, до перевала с которого до горы останется около километра. А вообще, даже в окрестностях Владивостока можно неплохо подушататься :)&lt;/p&gt;
&lt;p&gt;Как дополнение, что из снаряги использовал:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Термуха:
&lt;ol&gt;
&lt;li&gt;верх: самая тоненькая от The North Face&lt;/li&gt;
&lt;li&gt;низ: что-от Ozone&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Кофта Полартек 100 (Red Fox)&lt;/li&gt;
&lt;li&gt;Софтшелка: Сирин (Sivera)&lt;/li&gt;
&lt;li&gt;Пуховка: Волин 2.0 (Sivera)&lt;/li&gt;
&lt;li&gt;Балаклава: какая-то Сиверовская&lt;/li&gt;
&lt;li&gt;Шапка: Хант от Сиверы&lt;/li&gt;
&lt;li&gt;Ботинки: Zamberlan Civetta&lt;/li&gt;
&lt;li&gt;Гамаши: какие-то от Ozone&lt;/li&gt;
&lt;li&gt;Брюки: ACU от Сплава&lt;/li&gt;
&lt;li&gt;Перчатки: какие-то флисовые&lt;/li&gt;
&lt;li&gt;Верхонки: какие-то от Red Fox&lt;/li&gt;
&lt;li&gt;Наигатор: Garmin GPSMap 62s (ох! как мне нравится, что им можно пользоваться, не снимая перчатки)&lt;/li&gt;
&lt;li&gt;Фляга: Nalgene 1L&lt;/li&gt;
&lt;li&gt;Горелка: Optimus Vega&lt;/li&gt;
&lt;li&gt;Кружка-котелок: титашка от Snow Peak&lt;/li&gt;
&lt;li&gt;Какая-то хоба&lt;/li&gt;
&lt;li&gt;Кусок фольгированной теплоизоляции для горелки&lt;/li&gt;
&lt;li&gt;Кофеварка для фотографий: Dexp Ixion ML 4.7 в пакетике&lt;/li&gt;
&lt;li&gt;Ну и упаковано всё это было в рюкзак Улисс 100 от Normal-Акме со снятым клапаном.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
&lt;a href=&#34;https://htrd.su/img//post/2016/01/31/2016-01-30_12.40.33_malyj_trevers_botanicheskogo_xrebta_i_g.ostraja.gpx&#34;&gt;Трек для скачивания/заливки в навигатор&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Обновление Qt Creator</title>
      <link>https://htrd.su/blog/2016/01/29/obnovlenie_qt_creator/</link>
      <pubDate>Fri, 29 Jan 2016 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2016/01/29/obnovlenie_qt_creator/</guid>
      <description>&lt;p&gt;Пока LOG, Habrahabr и другие гудят по поводу смены лицензионной политики в части Qt (переход на LPGL3) и QtC (переход с LGPL2.1 на GPL3 /именно GPL/ с исключением для плагинов), у меня дошли руки обновить PPA: 
&lt;a href=&#34;https://launchpad.net/~adrozdoff/&amp;#43;archive/ubuntu/qtcreator-git&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://launchpad.net/~adrozdoff/+archive/ubuntu/qtcreator-git&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ну и несколько интересных (для меня) изменений, которые стали доступны в этом билде. Добро пожаловать под кат.&lt;/p&gt;
&lt;h2 id=&#34;ppa&#34;&gt;PPA&lt;/h2&gt;
&lt;p&gt;И хорошая новость и неприятность для меня и, возможно, для части пользователей: требования к Clang и LLVM поднялись до отметки 3.6.2. С Ubuntu 14.04 максимально доступная версия 3.6.0. Повышение версии связанно с нестабильностью работы Clang и падениям (в основном на Mac OS X). Пришлось делать бекпорт Clang 3.7 из Xenial, а ввиду большого объёма ложить его в отдельный репозиторий. Так что обновления вы не получите, пока не добавите:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt-add-repository ppa:adrozdoff/llvm-backport
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt-get update
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Кроме того, отработаны действия по поддержке PPA для нескольких дистрибуций, в виду грядущего 16.04 LTS. На Precise я строить, пожалуй, не буду (как минимум туда LLVM тоже бекпортировать нужно), но с выходом 16.04, я не планирую отказываться от отстройки для Trusty. Как минимум до тех пор, пока это не станет отнимать много времени. Кстати, на Xenial уже есть LLVM 3.7, а имена пакетов я сохранил на столько, что на этой версии добавлять репозиторий с LLVM не придётся. Ровно как и репозиторий с Qt5, но это требует отладки.&lt;/p&gt;
&lt;h2 id=&#34;clang-static-analyser&#34;&gt;Clang Static Analyser&lt;/h2&gt;
&lt;p&gt;В ряду анализаторов прибыло. Теперь доступен интерфейс к статическому анализатору clang-check. Настройки просты: исполняемый файл и количество потоков обработки. У меня максимальное число оных блокируется на 4.&lt;/p&gt;
&lt;p&gt;Вызывается анализатор просто:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2016/01/29/qtc_clanganalyse_2016-01-29_18-26-39.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;К сожалению, на моих проектах ошибок не показал, а на рабочем - есть, поэтому продемонстрировать не могу :) Просто на словах: ошибки были не фатальными, но возможными.&lt;/p&gt;
&lt;p&gt;На некоторых файлах падает с шикарным отладочным трейсом.&lt;/p&gt;
&lt;h2 id=&#34;clang-code-model&#34;&gt;Clang Code Model&lt;/h2&gt;
&lt;p&gt;Присутствует уже давно, но сейчас стартует автоматически, если плагин загружен. Соответственно, теперь, что бы выключить нужно выключать плагин. Помимо, собственно модели, предоставляет анализатор кода в реальном времени, по аналогии как делается в MSVS, или IDEA или Clion. Предупреждения назойливы как мухи и нет удобной настройки категорий. Хотя, практически все предупреждения, так или иначе, валидны.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2016/01/29/qtc_clangmodel_2016-01-29_18-22-55.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Неприятен тот момент, что не разбирается контекст анализа: C или C++, в результате много ругани на &amp;ldquo;old style cast&amp;rdquo;, которые ногами уползают в заголовочники С-библиотек. Та же проблема, если редактируется чисто C-файл.&lt;/p&gt;
&lt;p&gt;Отзывчивость редактора, вцелом, стала меньше, но работать можно. Больших проектов не открывал, поэтому не могу сказать - как он их переварит. Время от времени продолжает падать. Причём падает при уничтожении объекта QThread в момент, когда сам поток ещё работает. Грешу на старую Qt5, собранную из Git. Пересобрал - наблюдаю. В репозитории собрано с версией Qt 5.5.1.&lt;/p&gt;
&lt;p&gt;Хорошая новость, что парсер стал работать стабильнее, пока не наблюдаю старой проблемы со слётами подсветки. Она, кстати, при открытии файла тоже включается с заметным лагом. Значительно лучше работает автодополнение и навигация по коду.&lt;/p&gt;
&lt;h2 id=&#34;cmake-project-manager--cmake-project-manager-2&#34;&gt;CMake Project Manager / CMake Project Manager 2&lt;/h2&gt;
&lt;p&gt;В основной ветке идёт работал по рефакторингу и унификации кода. Я только синхронизируюсь, но ниже отпишу пару фич, которые не были ещё анонсированы, хотя появились с месяц назад.&lt;/p&gt;
&lt;p&gt;Итак, из заметного: использование в качестве билд-команды, не make, а &lt;code&gt;cmake --build . --target all&lt;/code&gt;. Сделано, что бы упростить код и не делать ветвлений между make/ninja или ещё чем-либо. Обратная сторона медали: парсер вывода не работает:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2016/01/29/qtc_cmakebuildcmd_2016-01-29_18-31-53.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Обходное решение, это удалить билд-команду по-умолчанию и добавить свою Custom, с указанием make (или ninja и т.п.), тогда парсер чинится (а на первой вкладке появляется сводка по ошибкам):&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2016/01/29/qtc_cmakemakecmd_2016-01-29_18-33-09.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Из менее заметного: теперь фильтруются наборы (Kits) и не выводятся те, для который не задан профиль CMake. Логичное действие. Далее: в диалоге запуска CMake теперь логируется то, с какими опциями он запускается. Для прозрачности и отладки. Удобно.&lt;/p&gt;
&lt;p&gt;Ну и мои анонсы. Точнее анонс. Один: теперь автоматически используется компилятор, которые задан в Kit, которые выбран для данной конфигурации. Соотстветсвенно немного изменён диалог: убрана настройка для переопределения тулчейна, которая была запланирована генерировать тулчейн файл из настроект Kit. Настройка не была реализована, надобности в ней не возникало, но желание использовать компилятор тулчейна (не зря же вы его выбираете!) было. Собственно и вылилось в реализацию. Костыльную. Но, вроде, работает.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2016/01/29/qtc_cmakerun_2016-01-29_19-16-53.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Ну и напомню, что теперь вместе с плагином распространяется и мастер новых проектов. Он один для C/C++ и NonQt/Qt4/Qt5 проектов - просто выбирайте нужные опции, нужный минимальный шаблон будет применён. Если я про это уже где-то писал, то пусть будет напоминанием :)&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>C&#43;&#43;: категории итераторов</title>
      <link>https://htrd.su/blog/2016/01/05/c_kategorii_iteratorov/</link>
      <pubDate>Tue, 05 Jan 2016 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2016/01/05/c_kategorii_iteratorov/</guid>
      <description>&lt;p&gt;Добротное разъяснение (кому непонятно 
&lt;a href=&#34;http://www.cplusplus.com/reference/iterator/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;это&lt;/a&gt; и 
&lt;a href=&#34;http://en.cppreference.com/w/cpp/iterator&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;это&lt;/a&gt; (ну и по ссылкам 
&lt;a href=&#34;http://en.cppreference.com/w/cpp/concept/Iterator&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;отсюда&lt;/a&gt;)) категорий итераторов на ru.SO:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://ru.stackoverflow.com/a/479269/189892&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://ru.stackoverflow.com/a/479269/189892&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>C&#43;&#43;11: несуразность std::thread</title>
      <link>https://htrd.su/blog/2016/01/05/c_11_std_thread/</link>
      <pubDate>Tue, 05 Jan 2016 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2016/01/05/c_11_std_thread/</guid>
      <description>&lt;p&gt;Пост-вопрос.&lt;/p&gt;
&lt;p&gt;Может кто объяснить, почему в стандарт вошла настолько обрезанная версия реализации &lt;code&gt;std::thread&lt;/code&gt;? Ведь предлагаемый интерфейс не предоставляет абсолютно никаких средств передачи параметров потоку в момент создания, к примеру, тот же размер стека, что крайне актуально на всяких RTOS. При этом Boost.Thread такую возможность предоставляют средствами &lt;code&gt;[boost::thread::attributes](http://www.boost.org/doc/libs/1_60_0/doc/html/thread/thread_management.html#thread.thread_management.thread.attributes)&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-C++&#34; data-lang=&#34;C++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;template&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;explicit&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;thread&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;attributes&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;attrs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;template&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kr&#34;&gt;thread&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;attributes&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;attrs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;template&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;Args&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;explicit&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;thread&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;attributes&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;attrs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Args&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;...&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Средства хоть и лимитированные, но доступ к native_handle атрибута позволяют тюнить параметры на конкретной платформе. Но в стандартной библиотеке нет и их. Нипанимать. Explain. Explain.&lt;/p&gt;
&lt;p&gt;PS libstdc++ зато предоставляет достаточно простые средства, что бы добавить поддержку своих потоков (на той же RTOS), не прибегая к модификации кода библиотеки (если кому интересно, могу на пальцах разбросать как, но без полной реализации).&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>OpenOCD, GDB и (сильно)удалённая отладка</title>
      <link>https://htrd.su/blog/2016/01/03/openocd_gdb_i_silno_udaljonnaja_otladka/</link>
      <pubDate>Sun, 03 Jan 2016 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2016/01/03/openocd_gdb_i_silno_udaljonnaja_otladka/</guid>
      <description>&lt;h2 id=&#34;intro&#34;&gt;Intro&lt;/h2&gt;
&lt;p&gt;Статью изначально опубликовал на Хабре: 
&lt;a href=&#34;http://habrahabr.ru/post/274179/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://habrahabr.ru/post/274179/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Дано:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;устройство с ARM926E-JS (Cypress FX3) на борту;&lt;/li&gt;
&lt;li&gt;находится на другом континенте;&lt;/li&gt;
&lt;li&gt;подключено (JTAG+USB+COM) к Linux компу;&lt;/li&gt;
&lt;li&gt;на комп есть SSH доступ (и больше ничего, только SSH порт).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Проблема: устройство нужно отлаживать и писать под него код. И делать это, желательно, удобно.&lt;/p&gt;
&lt;p&gt;Решение с использованием OpenOCD, GDB и Qt Creator, а так же описание пути к нему, под катом.&lt;/p&gt;
&lt;h2 id=&#34;настройка&#34;&gt;Настройка&lt;/h2&gt;
&lt;p&gt;Решений проблемы может быть много. Само быстрое и простое: запуск связки GDB+OpenOCD на удалённом компе через ssh сессию. Удобства не много, т.к. код удобнее править локально, а для отладки нужно постоянно заливать код на сервер при помощи scp или rsync.&lt;/p&gt;
&lt;p&gt;После недолгих размышлений, приходит идея: а ведь мы можем запускать команды удалённо на сервере используя SSH:
ssh user@host some-command some-arguments&lt;/p&gt;
&lt;p&gt;Хм&amp;hellip; А к тому же GDB может сам запустить OpenOCD в режиме конвейера (pipe) и общаться с ним. Так можно же сделать так, что бы запускался не просто OpenOCD, а удалённый, по ssh, и полученная связка уже использовалась для отладки.&lt;/p&gt;
&lt;p&gt;К сожалению такой вариант оказался нежизнеспособным: соединение постоянно отваливалось по таймауту.&lt;/p&gt;
&lt;p&gt;Следующая идея была: как-то поднять VPN и использовать его для подключения к любым портам на сервере, после чего запустить удалённо OpenOCD.&lt;/p&gt;
&lt;p&gt;Но как поднять VPN, если нет никаких портов, кроме SSH? Ладно,  знаем, что SSH может пробрасывать порты. Запускаем удалённо OpenOCD, пробрасываем порт&amp;hellip; Да, чуть лучше, чем запуск в режиме конвейера. Но именно, что чуток. Для работы никак не годится.&lt;/p&gt;
&lt;p&gt;Почти было решил бросить это дело и пользоваться самым первым, простым, надёжным, но неудобным решением, но тут набрал в гугле связку: SSH VPN. Сказать, что я был удивлён - не сказать ничего. Что бы не искать, этих двух ссылок достаточно:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://help.ubuntu.com/community/SSH_VPN&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://help.ubuntu.com/community/SSH_VPN&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://linuxoid.in/VPN-%D1%82%D1%83%D0%BD%D0%BD%D0%B5%D0%BB%D1%8C_%D1%81%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B2%D0%B0%D0%BC%D0%B8_ssh&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://linuxoid.in/VPN-%D1%82%D1%83%D0%BD%D0%BD%D0%B5%D0%BB%D1%8C_%D1%81%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B2%D0%B0%D0%BC%D0%B8_ssh&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;После настроек, на удалённой машине появился интерфейс &lt;strong&gt;tap8&lt;/strong&gt; с адресом &lt;strong&gt;192.168.100.1&lt;/strong&gt; и локально: интерфейс &lt;strong&gt;tap7&lt;/strong&gt; с адресом &lt;strong&gt;192.168.100.2&lt;/strong&gt; (адреса пригодятся в дальнейшем).&lt;/p&gt;
&lt;p&gt;Пробую запускать&amp;hellip; О чудо! Решение оказалось рабочим! Код загружается, всё работает, точки останова ставятся. Проблема одна: медленно. И если с ожиданием обновления состояния (стектрейсы,  локальные переменные и т.п.) я могу смириться, то загрузка 300 кБ elf&amp;rsquo;а занимает больше 6 минут. Локально быстрее. Значительно.&lt;/p&gt;
&lt;p&gt;В любом случае, вот пара скриптов, которые реализуют данную схему (настройки SSH не привожу):&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;openocd-remote&lt;/strong&gt; - просто оболочка для запуска удалённого OpenOCD через ssh. Отмечу, что расположение файлов и директорий на локальной машине и удалённой я сделал одинаковым. В противном бы случае в этот же скрипт добавил бы препроцессинг параметров при помощи sed, что бы сделать замены. Плюс, OpenOCD у меня собран из Git и скопирован в &lt;code&gt;~/bin/openocd-git/{bin,share}&lt;/code&gt; (соответствующие директории). Конфиги для FX3 (о них дальше) лежат в &lt;code&gt;~/bin/openocd-git/&lt;/code&gt;. В &lt;code&gt;~/bin/&lt;/code&gt; сделан симлинк на исполняемый файл openocd.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#!/bin/sh
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; shutdown &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; telnet host &lt;span class=&#34;m&#34;&gt;4444&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;exec&lt;/span&gt; ssh -TC user@host bin/openocd &lt;span class=&#34;nv&#34;&gt;$@&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;gdb-remote&lt;/strong&gt; - подключается к удалённому OpenOCD, загружает код:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#!/bin/sh
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;gdbcfg&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;fx3_gdb.ini
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;elf&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;some-code.elf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat &amp;gt; &lt;span class=&#34;nv&#34;&gt;$gdbcfg&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;lt;&amp;lt; EOF
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;set prompt (arm-gdb)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;set remotetimeout 30
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;target remote 192.168.100.1:3333
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;monitor halt
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;monitor soft_reset_halt
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;monitor adapter_khz 1000
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;set endian little
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;load
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;EOF&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;arm-none-eabi-gdb -x &lt;span class=&#34;nv&#34;&gt;$gdbcfg&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$elf&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Команда&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; shutdown &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; telnet host &lt;span class=&#34;m&#34;&gt;4444&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;заставит удалённый OpenOCD остановиться, что бы новый мог запуститься. К сожалению, текущая логика Qt Creator реализована так, что он уже успевает подцепиться на порт GDB (обычно он 3333) и это приводит к стабильному багу: отладка запускается ровно через раз. К счастью облом происходит почти сразу после запуска и с этим можно мириться.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Раздумья об ускорении запуска шли примерно в таком русле: простое копирование elf файла на удалённый сервер занимает секунд 10, плюс-минус. А вот бы было круто, загрузить образ на сервер и у в устройство загружать уже с него&amp;hellip;&lt;/p&gt;
&lt;p&gt;Штудирование документации по OpenOCD и вот оно: сам OpenOCD может загрузить код в устройство, а GDB просто подключится и даст команду на старт прошивки. Волшебная команда: &lt;code&gt;load_image&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Первые эксперименты были неутешительными: загрузка проходит ОЧЕНЬ нестабильно. Код грузится, грузится быстро: 1 минута против 6 с хвостом). Но прошивка то стартует, то нет. При этом, если же в той же сессии GDB сделать &lt;code&gt;load&lt;/code&gt;, то всё отлично запускается.&lt;/p&gt;
&lt;p&gt;Начал искать различия. Заинтересовала последняя строчка загрузки через &lt;code&gt;load&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Start&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;address&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;0x40035948&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;load&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;size&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;298456&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Это навеяло залогировать после загрузки кода через &lt;code&gt;load&lt;/code&gt; и через &lt;code&gt;load_image&lt;/code&gt; (через OpenOCD) и перед стартом (&lt;code&gt;continue&lt;/code&gt;) содержимое регистра &lt;code&gt;$pc&lt;/code&gt;. И&amp;hellip; отличие найдено: после &lt;code&gt;load&lt;/code&gt; &lt;code&gt;$pc&lt;/code&gt; установлен именно в этот &amp;ldquo;Start address&amp;rdquo;, тогда как после &lt;code&gt;load_image&lt;/code&gt; в &lt;code&gt;$pc&lt;/code&gt; остаётся что-то, в момент чего была начала загрузка. После установки &lt;code&gt;$pc&lt;/code&gt; в правильное значение загрузка стала стабильной. Остался вопрос: магические числа не есть гуд. Но тут помогло то, что в GDB можно указать символ и будет взят его адрес. В случае FX3 этот символ: &lt;code&gt;CyU3PFirmwareEntry&lt;/code&gt; (к слову, на локальных приложениях это будет, скорее всего, &lt;code&gt;_start&lt;/code&gt;) и команда установки &lt;code&gt;$pc&lt;/code&gt; превратилась в такую&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;set $pc = CyU3PFirmwareEntry
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Кроме того, у GDB есть возможность звать команды оболочки, поэтому мы можем легко и непринуждённо при старте залить elf файл на удалённый сервер и дать команду запущенному OpenOCD загрузить его (любую команду для OpenOCD можно дать из GDB предварив её словом &lt;code&gt;monitor&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Итоговый скрипт для запуска GDB:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#!/bin/sh
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;gdbcfg&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;fx3_gdb.ini
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;elf&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;some-code.elf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Генерим конфиг для GDB&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat &amp;gt; &lt;span class=&#34;nv&#34;&gt;$gdbcfg&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;lt;&amp;lt; EOF
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;set prompt (arm-gdb)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;set remotetimeout 30
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;target remote 192.168.100.1:3333
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;shell scp $elf user@192.168.100.1:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;monitor halt
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;monitor soft_reset_halt
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;monitor sleep 1000
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;monitor load_image %elf 0x00 elf
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;set $pc = CyU3PFirmwareEntry
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;EOF&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;arm-none-eabi-gdb -x &lt;span class=&#34;nv&#34;&gt;$gdbcfg&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$elf&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Скрипт для запуска OpenOCD остаётся таким же.&lt;/p&gt;
&lt;p&gt;Что нам теперь нужно, что бы начать удалённую отладку:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Запусить скрипт openocd-remote. Перезапускать его можно по потребностям.&lt;/li&gt;
&lt;li&gt;Остроить код и запустить gdb скриптом выше.&lt;/li&gt;
&lt;li&gt;&amp;hellip;&lt;/li&gt;
&lt;li&gt;PROFIT&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;А PROFIT ли? По мне, так нет. Код я пишу в Qt Creator и хочется в один клик всё это делать из него. И это делается в один клик. Достаточно:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Открыть диалог настроек&lt;/li&gt;
&lt;li&gt;Выбрать Bare Metal и добавить новый GDB Server Provider с типом OpenOCD со следующими параметрами:
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Name: на ваше усмотрение, пусть будет FX3 Remote&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Startup mode: Startup in TCP/IP&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Host: 192.168.100.1&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Port: 3333&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Executable file: путь к openocd-remote, у меня это /home/alexd/bin/openocd-remote&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Root scripts directory: /home/alexd/bin/openocd-git/share/openocd/scripts - у вас может отличаться, главное помните, что умный настройщик проверяет эти директории на доступность, именно поэтому я делал одинаковое дерево на локальном компьютере и на удалённом.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Configuration file: /home/alexd/bin/openocd-git/share/openocd/scripts/interface/ftdi/olimex-arm-usb-ocd-h.cfg - у меня используется отладчик Olimex ARM-USB-OCD-H, у вас может быть другой. Настройку отладчика не рассматриваю.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Additional argumets: -f ~/bin/openocd-git/fx3-common.cfg -f ~/bin/openocd-git/fx3-threadx.cfg - эти скрипты я опубликую ниже.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Init commands - самое интересное:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;monitor&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Upload image...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;shell&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;scp&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DebuggedExecutable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;NativeFilePath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;192.168&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;100.1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;monitor&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;halt&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;monitor&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;soft_reset_halt&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;monitor&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sleep&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;monitor&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Load image...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;monitor&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;load_image&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DebuggedExecutable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;FileName&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;0x00&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;elf&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;set&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pc&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;CyU3PFirmwareEntry&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;monitor&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Run image...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Как видите, полностью повторяет код из скрипта, только с макроподстановками, что бы не переписывать для каждого таргета.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Reset commands: &lt;code&gt;monitor reset halt&lt;/code&gt; (оставляем по умолчанию).&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Затем идём в Devices, делаем Add -&amp;gt; Bare Metal Device -&amp;gt; Даём имя (пусть будет FX3 Device Remote) и назначаем наш GDB Server provider (FX3 Remote)&lt;/li&gt;
&lt;li&gt;Затем идём в Build &amp;amp; Runs и в используемом наборе (Kits) для Cypress (или ARM или чего у вас там) выбираем:
&lt;ol&gt;
&lt;li&gt;Device type: Bare Metal Device&lt;/li&gt;
&lt;li&gt;Device: FX3 Device Remote&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Тут мне пришлось создавать для набора - для локальной и для удалённой разработки. Но что ж&amp;hellip; Пережить можно.&lt;/p&gt;
&lt;p&gt;Всё, после чего в настройках проекта добавляем новый набор, конфигурируем его, на вкладке Run добавляем конфирурации в названии которых есть &amp;ldquo;(via GDB Server or hardware debugger)&amp;rdquo; и начинаем отладку простым нажатием F5.&lt;/p&gt;
&lt;h2 id=&#34;полезные-материалы&#34;&gt;Полезные материалы&lt;/h2&gt;
&lt;p&gt;Скрипты fx3-common.cfg, fx3-threadx.cfg, fx3-boot.cfg (для отладки бутлодера или когда нет ThreadX) соответственно:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;fx3-common.cfg:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;######################################&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Target: CYPRESS FX3 ARM926-ejs&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Common part&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;######################################&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;info exists CHIPNAME&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; _CHIPNAME &lt;span class=&#34;nv&#34;&gt;$CHIPNAME&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; _CHIPNAME fx3
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;info exists ENDIAN&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; _ENDIAN &lt;span class=&#34;nv&#34;&gt;$ENDIAN&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; _ENDIAN little
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;info exists CPUTAPID&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; _CPUTAPID &lt;span class=&#34;nv&#34;&gt;$CPUTAPID&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; _CPUTAPID 0x07926069
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#delays on reset lines&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;adapter_nsrst_delay &lt;span class=&#34;m&#34;&gt;200&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;jtag_ntrst_delay &lt;span class=&#34;m&#34;&gt;200&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;adapter_khz &lt;span class=&#34;m&#34;&gt;1000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#reset_config trst_only&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#reset_config trst_only combined&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#reset_config trst_and_srst combined&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#reset_config trst_and_srst srst_pulls_trst&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# From the Cypress SDK&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;reset_config trst_and_srst srst_pulls_trst
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# My own well worked&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#reset_config trst_only&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;jtag newtap &lt;span class=&#34;nv&#34;&gt;$_CHIPNAME&lt;/span&gt; cpu -irlen &lt;span class=&#34;m&#34;&gt;4&lt;/span&gt; -ircapture 0x1 -irmask 0xf -expected-id &lt;span class=&#34;nv&#34;&gt;$_CPUTAPID&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;jtag_rclk &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;fx3-threadx.cfg&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;######################################&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Target: CYPRESS FX3 ARM926-ejs&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;######################################&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#source [find fx3-common.inc]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;######################&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Target configuration&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;######################&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; _TARGETNAME &lt;span class=&#34;nv&#34;&gt;$_CHIPNAME&lt;/span&gt;.cpu 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;target create &lt;span class=&#34;nv&#34;&gt;$_TARGETNAME&lt;/span&gt; arm926ejs -endian &lt;span class=&#34;nv&#34;&gt;$_ENDIAN&lt;/span&gt; -chain-position &lt;span class=&#34;nv&#34;&gt;$_TARGETNAME&lt;/span&gt; -rtos ThreadX
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;adapter_khz &lt;span class=&#34;m&#34;&gt;1000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;fx3-boot.cfg&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;######################################&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Target: CYPRESS FX3 ARM926-ejs&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;######################################&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#source [find fx3-common.inc]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;######################&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Target configuration&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;######################&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; _TARGETNAME &lt;span class=&#34;nv&#34;&gt;$_CHIPNAME&lt;/span&gt;.cpu 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;target create &lt;span class=&#34;nv&#34;&gt;$_TARGETNAME&lt;/span&gt; arm926ejs -endian &lt;span class=&#34;nv&#34;&gt;$_ENDIAN&lt;/span&gt; -chain-position &lt;span class=&#34;nv&#34;&gt;$_TARGETNAME&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;adapter_khz &lt;span class=&#34;m&#34;&gt;1000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Тип проекта в Qt Creator для ARM, FX3 и иже с ними может быть Generic, но я написал CMake правила для FX3: 
&lt;a href=&#34;https://github.com/h4tr3d/fx3-cmake&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/h4tr3d/fx3-cmake&lt;/a&gt; и использую CMake Project manager, что позволяет легко иметь несколько конфигураций в разных директориях, теневую сборку и повод не путаться в параметрах сборки на сложных проектах.&lt;/p&gt;
&lt;p&gt;Команды OpenOCD: 
&lt;a href=&#34;http://openocd.org/doc/html/General-Commands.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://openocd.org/doc/html/General-Commands.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Для вычисления &lt;code&gt;Entry Point&lt;/code&gt; автоматически, можно собрать GDB с поддержкой питон и воспользоваться рекомендациями:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://stackoverflow.com/questions/10483544/stopping-at-the-first-machine-code-instruction-in-gdb&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://stackoverflow.com/questions/10483544/stopping-at-the-first-machine-code-instruction-in-gdb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://ryanarn.blogspot.ru/2011/04/gdb-python-script-to-get-start-address.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://ryanarn.blogspot.ru/2011/04/gdb-python-script-to-get-start-address.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>ThinkPad T530, WiFi и DEAUTH_LEAVING</title>
      <link>https://htrd.su/blog/2016/01/03/thinkpad_t530_wifi_i_deauth_leaving/</link>
      <pubDate>Sun, 03 Jan 2016 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2016/01/03/thinkpad_t530_wifi_i_deauth_leaving/</guid>
      <description>&lt;p&gt;После экспериментов с роутером Zyxel Keenetic 4G II (прошил неофициальную прошивку серии V1 (V1.11.RU.NDMS), на родной серии V2 непредсказуемо работал multicast IPTV) заметил, что WiFi стал работать как-то нестабильно (затыки с сайтами, постоянный реконнект у мессенджеров). Временами, но стабильно, стал вылазить диалог с просьбой ввести пароль от точки. Будто бы порвалась связь и не получилось подключиться с какого-то количества попыток.&lt;/p&gt;
&lt;p&gt;Размышляя, что менял (ну кроме самой прошивки), вспомнил, что я переключил WiFi с режима 11b/g на режим 11b/g/n (раньше прошивка читалки не могла цепляться, если AP в таком режиме, после прошивку исправили, а настройки так и остались). Действительно, когда я переключил роутер обратно в режим 11b/g, то всё стало на свои места, так что не прошивка виновата. Казалось бы - решение найдено, но такой путь - не наш метод (хотя&amp;hellip; если ничто другое не помогает, то лучше синица в руках, чем журавль в небе).&lt;/p&gt;
&lt;p&gt;Если есть проблемы, куда нужно лезть? Не, не в гугл: что бы его спросить, нужно сначала узнать - что спросить. Поэтому лезем в логи, а там, с периодичностью в минуту (плюс-минус пара секунд) такое:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Jan  3 09:49:47 localhost kernel: [32313.303935] wlan0: deauthenticating from ff:ff:ff:ff:ff:f0 (заменил на фейковый) by local choice (Reason: 3=DEAUTH_LEAVING)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Jan  3 09:49:47 localhost wpa_supplicant[1354]: wlan0: CTRL-EVENT-DISCONNECTED bssid=ff:ff:ff:ff:ff:f0 reason=3 locally_generated=1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Jan  3 09:49:47 localhost NetworkManager[1171]: &amp;lt;warn&amp;gt; Connection disconnected (reason -3)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Jan  3 09:49:47 localhost NetworkManager[1171]: &amp;lt;info&amp;gt; (wlan0): supplicant interface state: completed -&amp;gt; disconnected
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Jan  3 09:49:47 localhost kernel: [32313.320727] cfg80211: World regulatory domain updated:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Jan  3 09:49:47 localhost kernel: [32313.320733] cfg80211:  DFS Master region: unset
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Jan  3 09:49:47 localhost kernel: [32313.320736] cfg80211:   (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp), (dfs_cac_time)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Jan  3 09:49:47 localhost kernel: [32313.320740] cfg80211:   (2402000 KHz - 2472000 KHz @ 40000 KHz), (300 mBi, 2000 mBm), (N/A)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Jan  3 09:49:47 localhost kernel: [32313.320744] cfg80211:   (2457000 KHz - 2482000 KHz @ 40000 KHz), (300 mBi, 2000 mBm), (N/A)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Jan  3 09:49:47 localhost kernel: [32313.320746] cfg80211:   (2474000 KHz - 2494000 KHz @ 20000 KHz), (300 mBi, 2000 mBm), (N/A)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Jan  3 09:49:47 localhost kernel: [32313.320749] cfg80211:   (5170000 KHz - 5250000 KHz @ 40000 KHz), (300 mBi, 2000 mBm), (N/A)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Jan  3 09:49:47 localhost kernel: [32313.320752] cfg80211:   (5735000 KHz - 5835000 KHz @ 40000 KHz), (300 mBi, 2000 mBm), (N/A)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Jan  3 09:49:47 localhost kernel: [32313.324167] cfg80211: Regulatory domain changed to country: RU
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Jan  3 09:49:47 localhost kernel: [32313.324172] cfg80211:  DFS Master region: unset
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Jan  3 09:49:47 localhost kernel: [32313.324174] cfg80211:   (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp), (dfs_cac_time)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Jan  3 09:49:47 localhost kernel: [32313.324178] cfg80211:   (2402000 KHz - 2482000 KHz @ 40000 KHz), (N/A, 2000 mBm), (N/A)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Jan  3 09:49:47 localhost kernel: [32313.324181] cfg80211:   (5735000 KHz - 5835000 KHz @ 20000 KHz), (N/A, 3000 mBm), (N/A)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Jan  3 09:49:47 localhost wpa_supplicant[1354]: wlan0: CTRL-EVENT-SCAN-STARTED 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Jan  3 09:49:47 localhost NetworkManager[1171]: &amp;lt;info&amp;gt; (wlan0): supplicant interface state: disconnected -&amp;gt; scanning
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Jan  3 09:49:48 localhost wpa_supplicant[1354]: wlan0: SME: Trying to authenticate with ff:ff:ff:ff:ff:f0 (SSID=&amp;#39;sample-ssid&amp;#39; freq=2472 MHz)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Jan  3 09:49:48 localhost kernel: [32314.524734] wlan0: authenticate with ff:ff:ff:ff:ff:f0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Jan  3 09:49:48 localhost kernel: [32314.524747] wlan0: capabilities/regulatory prevented using AP HT/VHT configuration, downgraded
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Jan  3 09:49:48 localhost wpa_supplicant[1354]: wlan0: Trying to associate with ff:ff:ff:ff:ff:f0 (SSID=&amp;#39;sample-ssid&amp;#39; freq=2472 MHz)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Jan  3 09:49:48 localhost kernel: [32314.526075] wlan0: send auth to ff:ff:ff:ff:ff:f0 (try 1/3)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Jan  3 09:49:48 localhost kernel: [32314.527929] wlan0: authenticated
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Jan  3 09:49:48 localhost kernel: [32314.529289] wlan0: associate with ff:ff:ff:ff:ff:f0 (try 1/3)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Jan  3 09:49:48 localhost NetworkManager[1171]: &amp;lt;info&amp;gt; (wlan0): supplicant interface state: scanning -&amp;gt; associating
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Jan  3 09:49:48 localhost wpa_supplicant[1354]: wlan0: Associated with ff:ff:ff:ff:ff:f0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Jan  3 09:49:48 localhost kernel: [32314.534416] wlan0: RX AssocResp from ff:ff:ff:ff:ff:f0 (capab=0x411 status=0 aid=1)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Jan  3 09:49:48 localhost kernel: [32314.536430] wlan0: associated
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Jan  3 09:49:48 localhost kernel: [32314.539815] cfg80211: Regulatory domain changed to country: TW
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Jan  3 09:49:48 localhost kernel: [32314.539820] cfg80211:  DFS Master region: unset
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Jan  3 09:49:48 localhost kernel: [32314.539822] cfg80211:   (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp), (dfs_cac_time)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Jan  3 09:49:48 localhost kernel: [32314.539827] cfg80211:   (2402000 KHz - 2472000 KHz @ 40000 KHz), (300 mBi, 2700 mBm), (N/A)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Jan  3 09:49:48 localhost kernel: [32314.539830] cfg80211:   (5270000 KHz - 5330000 KHz @ 40000 KHz), (300 mBi, 1700 mBm), (0 s)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Jan  3 09:49:48 localhost kernel: [32314.539833] cfg80211:   (5735000 KHz - 5815000 KHz @ 40000 KHz), (300 mBi, 3000 mBm), (N/A)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Jan  3 09:49:48 localhost NetworkManager[1171]: &amp;lt;info&amp;gt; (wlan0): supplicant interface state: associating -&amp;gt; associated
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Jan  3 09:49:49 localhost NetworkManager[1171]: &amp;lt;info&amp;gt; (wlan0): supplicant interface state: associated -&amp;gt; 4-way handshake
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Jan  3 09:49:49 localhost wpa_supplicant[1354]: wlan0: WPA: Key negotiation completed with ff:ff:ff:ff:ff:f0 [PTK=CCMP GTK=CCMP]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Jan  3 09:49:49 localhost wpa_supplicant[1354]: wlan0: CTRL-EVENT-CONNECTED - Connection to ff:ff:ff:ff:ff:f0 completed [id=0 id_str=]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Jan  3 09:49:49 localhost NetworkManager[1171]: &amp;lt;info&amp;gt; (wlan0): supplicant interface state: 4-way handshake -&amp;gt; completed
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Вышеописанный диалог запроса пароля, судя по всему, вылазит, когда не проходил 4-way handshake, так что проблема не только в реконнектах, а ещё и в каких-то гонках при реинициализации соединения. Приятно, если оставили закачку и пошли обедать/пить кофе/спать.&lt;/p&gt;
&lt;p&gt;Ищем, используя ключевые слова: intel, wifi, DEAUTH_LEAVING. Гугл выдаёт 
&lt;a href=&#34;https://www.google.ru/search?q=intel%20wifi%20DEAUTH_LEAVING&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;море ссылок&lt;/a&gt; на эту тему, основной посыл которых:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;выключить dhcpcd;&lt;/li&gt;
&lt;li&gt;выключить power management;&lt;/li&gt;
&lt;li&gt;прописать регион для crda;&lt;/li&gt;
&lt;li&gt;запретить 11n.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Первые два пункта, в моём, случае - полный промах. Третий - не помогло. А вот четвёртый&amp;hellip; не хочется. Т.к. быстрее. Где-то наткнулся на то, что при использовании 11n стандарта, но если будет для шифрования ключа использоваться TKIP, то скорость будет не больше 54Мбит. Это навело на мысль посмотреть подробнее описания стандартов и оказалось, что для 11n стандарта рекомендованной является пара: WPA2+AES.&lt;/p&gt;
&lt;p&gt;На роутере же у меня заявлена полная универсальность: WPA/WPA2 mix и TKIP/AES mix.&lt;/p&gt;
&lt;p&gt;Выставление этих параметров в:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;WPA2 only&lt;/li&gt;
&lt;li&gt;AES only&lt;/li&gt;
&lt;li&gt;плюс включение &lt;a href=&#34;https://ru.wikipedia.org/wiki/Wi-Fi_Multimedia%7cWMM&#34; target=&#34;_blank&#34;&gt;Wi-Fi_Multimedia|WMM&lt;/a&gt;
 (опция попала под замес, но без неё было уже лень пробовать)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;привело к исправлению проблемы с отвалами WiFi. Кроме того, сведения о соединении теперь стабильно дают 135-150 Мбит (антенка одна), против 48-64 при старых настройках: уж не знаю насколько это реально, чуть позже протестирую доступ с одного устройства на другое. Продукты Apple к сети с такой конфигурацией подключиться не смогут (или уже смогут?), но меня это мало волнует ввиду отсутствия оных.&lt;/p&gt;
&lt;p&gt;Ну и ссылки, которые навели меня на мысли:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://wireless.wiki.kernel.org/en/users/Drivers/iwlwifi&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://wireless.wiki.kernel.org/en/users/Drivers/iwlwifi&lt;/a&gt; (проблемная карта: Intel Centrino Advanced-N 6205 [8086:0085])&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://ubuntuforums.org/showthread.php?t=2259029&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://ubuntuforums.org/showthread.php?t=2259029&lt;/a&gt; - установка CRDA&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://bugs.launchpad.net/ubuntu/&amp;#43;source/linux/&amp;#43;bug/1176812&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1176812&lt;/a&gt;, в частности:
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://bugs.launchpad.net/ubuntu/&amp;#43;source/linux/&amp;#43;bug/1176812/comments/3&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1176812/comments/3&lt;/a&gt; - CRDA&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://forums.gentoo.org/viewtopic-t-968312-view-previous.html?sid=74c949af883e65bb4dea9040900e8869&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://forums.gentoo.org/viewtopic-t-968312-view-previous.html?sid=74c949af883e65bb4dea9040900e8869&lt;/a&gt; - &lt;code&gt;11n_disable=1&lt;/code&gt; и &lt;code&gt;5ghz_disable=1&lt;/code&gt; для модуля ядра
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://bugs.launchpad.net/archlinux/&amp;#43;source/linux/&amp;#43;bug/1005832/comments/36&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://bugs.launchpad.net/archlinux/+source/linux/+bug/1005832/comments/36&lt;/a&gt; - аналогично, выключение 11n.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://bbs.archlinux.org/viewtopic.php?id=159080&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://bbs.archlinux.org/viewtopic.php?id=159080&lt;/a&gt; - power safe off&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://forums.fedoraforum.org/showthread.php?t=227035&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://forums.fedoraforum.org/showthread.php?t=227035&lt;/a&gt; - софтовая криптография, хотя и относится к другой карте
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://forum.siduction.org/index.php?PHPSESSID=ql2evh2tkfeqcgdrem9f7n7jg2&amp;amp;topic=4678.15&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://forum.siduction.org/index.php?PHPSESSID=ql2evh2tkfeqcgdrem9f7n7jg2&amp;topic=4678.15&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://www.linux.org.ru/forum/admin/10999522&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://www.linux.org.ru/forum/admin/10999522&lt;/a&gt; - куда же без LOR. Но не останавливаться заставил 
&lt;a href=&#34;https://www.linux.org.ru/forum/admin/10999522?cid=11002142&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;этот ответ&lt;/a&gt;, во всём остальном этот пост показывает проблемы с агрессивным power saving и dhcpcd.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;По поводу параметров ключа и понижения скорости:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.howtogeek.com/204697/wi-fi-security-should-you-use-wpa2-aes-wpa2-tkip-or-both&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.howtogeek.com/204697/wi-fi-security-should-you-use-wpa2-aes-wpa2-tkip-or-both&lt;/a&gt; (искать &amp;ldquo;WPA and TKIP Will Slow Your Wi-Fi Down&amp;rdquo;)&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://wifinetnews.com/archives/2010/06/say_goodbye_to_wep_and_tkip.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://wifinetnews.com/archives/2010/06/say_goodbye_to_wep_and_tkip.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.speedguide.net/faq/how-to-fix-slow-wireless-network-speed-375&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.speedguide.net/faq/how-to-fix-slow-wireless-network-speed-375&lt;/a&gt; - особо рекомендуется к ознакомлению.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;И, на последок, куда смотрел, что бы найти причину:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/var/log/syslog&lt;/code&gt; (альтернативно: &lt;code&gt;/var/log/messages&lt;/code&gt; или даже &lt;code&gt;/var/log/everything&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;традиционно &lt;code&gt;dmesg&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>г.Голец</title>
      <link>https://htrd.su/blog/2015/12/08/g.golec/</link>
      <pubDate>Tue, 08 Dec 2015 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2015/12/08/g.golec/</guid>
      <description>&lt;p&gt;Запоздалый пост. Краткое описалово может чуть позже (или никогда) накатаю, а фото вот:&lt;br/&gt;&lt;br/&gt;

&lt;a href=&#34;https://picasaweb.google.com/116960244871002539190/102015&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://picasaweb.google.com/116960244871002539190/102015&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>MinGW GCC 5 в Trusty</title>
      <link>https://htrd.su/blog/2015/12/07/mingw_gcc_5_v_trusty/</link>
      <pubDate>Mon, 07 Dec 2015 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2015/12/07/mingw_gcc_5_v_trusty/</guid>
      <description>&lt;p&gt;Сделал PPA, куда положил MinGW GCC 5: 
&lt;a href=&#34;https://launchpad.net/~adrozdoff/&amp;#43;archive/ubuntu/mingw&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://launchpad.net/~adrozdoff/+archive/ubuntu/mingw&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Версия GCC на момент написания поста: 5.3.0. Сборка зависит от репозитория 
&lt;a href=&#34;https://launchpad.net/~ubuntu-toolchain-r/&amp;#43;archive/ubuntu/test/&amp;#43;packages&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://launchpad.net/~ubuntu-toolchain-r/+archive/ubuntu/test/+packages&lt;/a&gt; (если надумаете собирать сами).&lt;/p&gt;
&lt;p&gt;Краткие характеристики сборки:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Модель потоков: только &lt;strong&gt;posix&lt;/strong&gt; (требуется libwinpthreads), т.к. позволяет использовать все возможности C++11/C++14. Если будет спрос на &lt;strong&gt;win32&lt;/strong&gt;, то нужно только добавить одну строчку и чуть подкорректировать альтернативы (т.е. сборка поддерживает, просто выключил &lt;strong&gt;win32&lt;/strong&gt;).&lt;/li&gt;
&lt;li&gt;Обработка исключений: &lt;strong&gt;sjlj&lt;/strong&gt; для win32 и &lt;strong&gt;seh&lt;/strong&gt; для win64&lt;/li&gt;
&lt;li&gt;Сборка для Win32 и Win64&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Добавление репозитория:
sudo apt-add-repository ppa:adrozdoff/mingw&lt;/p&gt;
&lt;p&gt;Установка:
sudo apt-get install gcc-5-mingw-w64 g++-5-mingw-w64&lt;/p&gt;
&lt;p&gt;Компилятор с суффиксом &lt;code&gt;-5&lt;/code&gt;, что бы не конфликтовать с тем, что распространяется вместе с Ubuntu/Mint.&lt;/p&gt;
&lt;p&gt;В этом же репозитории планирую выкладывать сборки библиотек.&lt;/p&gt;
&lt;p&gt;TODO: 
&lt;a href=&#34;https://launchpad.net/~flosoft/&amp;#43;archive/ubuntu/cross-mingw/&amp;#43;packages&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://launchpad.net/~flosoft/+archive/ubuntu/cross-mingw/+packages&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Выбор дефолтного компилятора в Ubuntu/Mint/Debian</title>
      <link>https://htrd.su/blog/2015/12/03/debian/</link>
      <pubDate>Thu, 03 Dec 2015 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2015/12/03/debian/</guid>
      <description>&lt;p&gt;Создать альтернативы:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 &lt;span class=&#34;m&#34;&gt;99&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 &lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5   &lt;span class=&#34;m&#34;&gt;20&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 &lt;span class=&#34;m&#34;&gt;99&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.9 &lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5   &lt;span class=&#34;m&#34;&gt;20&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc &lt;span class=&#34;m&#34;&gt;99&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo update-alternatives --set cc /usr/bin/gcc
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++ &lt;span class=&#34;m&#34;&gt;99&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo update-alternatives --set c++ /usr/bin/g++
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;После чего можно переключаться вручную через меню:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo update-alternatives --config gcc
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo update-alternatives --config g++
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;или скриптом:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo update-alternatives --set gcc /usr/bin/gcc-5
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo update-alternatives --set g++ /usr/bin/g++-5
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;или вернуть в автоматический режим:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo update-alternatives --auto gcc
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo update-alternatives --auto g++
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Снести альтернативы:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo update-alternatives --remove-all gcc 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo update-alternatives --remove-all g++
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Или только указанную:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo update-alternatives --remove gcc /usr/bin/gcc-4.9
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo update-alternatives --remove g++ /usr/bin/g++-4.9
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;В последнем случае, подберётся другая альтернатива (на основе приоритета) и выбор будет выставлен в auto. Если альтернатив нет, то будут почищены все симлинки.&lt;/p&gt;
&lt;p&gt;На основе: 
&lt;a href=&#34;http://askubuntu.com/questions/26498/choose-gcc-and-g-version&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://askubuntu.com/questions/26498/choose-gcc-and-g-version&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Про использование ссылок и указателей в C&#43;&#43;</title>
      <link>https://htrd.su/blog/2015/11/21/pro_ispolzovanie_ssylok_i_ukazatelej_v_c/</link>
      <pubDate>Sat, 21 Nov 2015 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2015/11/21/pro_ispolzovanie_ssylok_i_ukazatelej_v_c/</guid>
      <description>&lt;p&gt;Данная статья практически на 100% отражает и мой подход к использованию ссылок и указателей, рекомендую к ознакомлению:&lt;br/&gt;&lt;br/&gt;

&lt;a href=&#34;http://eao197.blogspot.ru/2015/11/progthoughts-c.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://eao197.blogspot.ru/2015/11/progthoughts-c.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Тезисно:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;void f(const T &amp;amp;p)&lt;/code&gt; ожидает реально существующий объект, но не изменяет его;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;void f(T &amp;amp;p)&lt;/code&gt; ожидает реально существующий объект и изменяет его;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;void f(const T *p)&lt;/code&gt; ожидает объект или &lt;code&gt;nullptr&lt;/code&gt;, если объект существует, то не изменяет его;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;void f(T *p)&lt;/code&gt; ожидает объект или &lt;code&gt;nullptr&lt;/code&gt;, если объект существует, то изменяет его;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;void f(unique_ptr&amp;lt;T&amp;gt; p)&lt;/code&gt; ожидает объект или &lt;code&gt;nullptr&lt;/code&gt;; если объект существует, то забирает ответственность за его удаление;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;void f(shared_ptr&amp;lt;T&amp;gt; p)&lt;/code&gt; ожидает объект или &lt;code&gt;nullptr&lt;/code&gt;; если объект существует, то разделяет владение этим объектом (что дает право функции &lt;code&gt;f()&lt;/code&gt; сохранить &lt;code&gt;p&lt;/code&gt; у себя для дальнейшего использования или передать кому-то еще).&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>C&#43;&#43;: inline namespace</title>
      <link>https://htrd.su/blog/2015/11/19/c_inline_namespace/</link>
      <pubDate>Thu, 19 Nov 2015 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2015/11/19/c_inline_namespace/</guid>
      <description>&lt;p&gt;Как-то упустил сей момент:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://stackoverflow.com/questions/11016220/what-are-inline-namespaces-for&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://stackoverflow.com/questions/11016220/what-are-inline-namespaces-for&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.stroustrup.com/C&amp;#43;&amp;#43;11FAQ.html#inline-namespace&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.stroustrup.com/C++11FAQ.html#inline-namespace&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Вообще 
&lt;a href=&#34;http://www.stroustrup.com/C&amp;#43;&amp;#43;11FAQ.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;FAQ&lt;/a&gt; стоит перечитать.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>FFmpeg loop input</title>
      <link>https://htrd.su/blog/2015/11/18/ffmpeg_loop/</link>
      <pubDate>Wed, 18 Nov 2015 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2015/11/18/ffmpeg_loop/</guid>
      <description>&lt;p&gt;Если нужно сделать повторный стриминг небольшого файла (или просто сделать большой файл из нескольких повторов маленького), то поможет такая команда:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ffmpeg -re -f lavfi -i &amp;#34;movie=filename=/some/path/input.mp4:loop=0, setpts=N/(FRAME_RATE*TB)&amp;#34; -ar 44100 -f flv rtmp://some.server/app/live
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Чуть подробнее:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;-re&lt;/code&gt; процессит входные фреймы так, как если бы это был live stream&lt;/li&gt;
&lt;li&gt;формат входного файла &lt;code&gt;lavfi&lt;/code&gt; говорит, что входной файл, это не регулярный файл, устройство или сетевой ресурс, а описание графа фильтра (комплексного)&lt;/li&gt;
&lt;li&gt;соответственно аргументом &lt;code&gt;-i&lt;/code&gt; становится описание графа фильтра:
1. &lt;code&gt;movie&lt;/code&gt; - фильтр задаёт источник данных, а его параметр &lt;code&gt;loop=N&lt;/code&gt; задаёт число повторов, 0 - бесконечное число раз, отличное от нуля - будет сделано именно такое число повторов.
2. &lt;code&gt;setpts&lt;/code&gt; - предыдущий фильтр действует принципу KISS: попросили повторять файл - буду, но PTS будет оставаться без модификаций, соответсвенно муксеру это может (и даже, скорее всего, обязательно) показаться неприятным. Соответственно нам нужно пересчитать PTS на основе прошедших (&lt;code&gt;N&lt;/code&gt;) кадров, фреймрейта (&lt;code&gt;FRAME_RATE&lt;/code&gt;) и time-base входного PTS (&lt;code&gt;TB&lt;/code&gt;, про time-base 
&lt;a href=&#34;https://htrd.su/blog/2012/11/23/ffmpeg_nemnogo_pro_time-base/&#34;&gt;я уже писал&lt;/a&gt;)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Дальнейшие опции роли не играют и могут сильно варьироваться. Выходным файлом может быть что угодно. Проблемы могут быть с входными файлами с переменным фреймрейтом, но я таких не видел.&lt;/p&gt;
&lt;p&gt;Продублировал как ответы на вопросы на сайта Stack Exchange:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://video.stackexchange.com/a/16933/12104&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://video.stackexchange.com/a/16933/12104&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://stackoverflow.com/a/33774838/1828241&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://stackoverflow.com/a/33774838/1828241&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Добавляем PGP ключ к Launchpad</title>
      <link>https://htrd.su/blog/2015/11/18/dobavljaem_pgp_kljuch_k_launchpad/</link>
      <pubDate>Wed, 18 Nov 2015 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2015/11/18/dobavljaem_pgp_kljuch_k_launchpad/</guid>
      <description>&lt;p&gt;Просто памятка:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Генерируем ключ (&lt;code&gt;gpg --gen-key&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Экспортируем ключ (&lt;code&gt;gpg -a --export &amp;lt;тут мыло или другой идентификатор ключа&amp;gt;&lt;/code&gt;, а подробнее тут: 
&lt;a href=&#34;https://www.gnupg.org/gph/en/manual/x56.html%29&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://www.gnupg.org/gph/en/manual/x56.html)&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Идём на 
&lt;a href=&#34;http://keyserver.ubuntu.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://keyserver.ubuntu.com/&lt;/a&gt; и добавляем в окно &amp;ldquo;Submitting a new OpenPGP Key&amp;rdquo; ключ экспортированный на прошлом шаге.&lt;/li&gt;
&lt;li&gt;Теперь получаем отпечаток (fingerprint) ключа (&lt;code&gt;gpg --fingerprint&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Идём на 
&lt;a href=&#34;https://launchpad.net/~USERNAME/&amp;#43;editpgpkeys&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://launchpad.net/~USERNAME/+editpgpkeys&lt;/a&gt;, проходим все &lt;del&gt;круги ада&lt;/del&gt; шаги авторизации и на странице внизу находим &amp;ldquo;Import an OpenPGP key&amp;rdquo; и в поле ввода копируем свой отпечаток с предыдущего шага. Причём нажатие на кнопку Import Key может как-то странно реагировать, тогда как нажатие Enter в онке ввода отпечатка работает как надо.&lt;/li&gt;
&lt;li&gt;Ждём письма на почту.&lt;/li&gt;
&lt;li&gt;Расшифровываем файл из письма (&lt;code&gt;gpg -d file.txt&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Переходим по ссылке из файла.&lt;/li&gt;
&lt;li&gt;PROFIT.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Имеет смысл в &lt;code&gt;~/.profile&lt;/code&gt; или &lt;code&gt;~/.bashrc&lt;/code&gt; добавить строки:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# PPA&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;DEBFULLNAME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Foo Bar&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;DEBEMAIL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;foo_bar@gmail.com&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Одно но: полное имя и почта должны соответствовать идентификатору ключа GPG. Иначе - создавайте алиасы.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>IceWM: I&#39;m alive!</title>
      <link>https://htrd.su/blog/2015/11/13/icewm/</link>
      <pubDate>Fri, 13 Nov 2015 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2015/11/13/icewm/</guid>
      <description>&lt;p&gt;Хороший WM((
&lt;a href=&#34;http://icemw.org&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://icemw.org&lt;/a&gt;, 
&lt;a href=&#34;https://ru.wikipedia.org/wiki/IceWM%29%29&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://ru.wikipedia.org/wiki/IceWM))&lt;/a&gt;. Официально не развивается с 2013 года. Хорошей новостью является то, что автор не совсем на него забил и, хотя бы, обновляет сайт. Собственно на сайте появилась ссылка на неофициальный, но развиваемый репозиторий: 
&lt;a href=&#34;https://github.com/bbidulock/icewm&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/bbidulock/icewm&lt;/a&gt;, так что реквесты приветствуются :)&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>О качестве документации и понимании сути</title>
      <link>https://htrd.su/blog/2015/11/12/o_kachestve_dokumentacii_i_ponimanii_suti/</link>
      <pubDate>Thu, 12 Nov 2015 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2015/11/12/o_kachestve_dokumentacii_i_ponimanii_suti/</guid>
      <description>&lt;p&gt;Есть такой чип: Cypress FX3. Это чип для построения USB 3.0 устройств. Внутри железная реализация протокола, 512кБ памяти и ядро ARM926E-JS. Cypress предоставляет SDK, в котором поставляется RTOS ThreadX и необходимый код для работы с их железом.&lt;/p&gt;
&lt;p&gt;Как и классических встраеваемых SDK есть возможность ставить пользовательские колбеки и, по сути, управлять и строить логику конкретного приложения, ну и реализовать нужное вам USB 3.0 (2.0 тоже) устройство.&lt;/p&gt;
&lt;p&gt;Отмечу, что сервисы (в терминах ThreadX) ThreadX напрямую не вызываются, они замаплены примерно так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;/***************************** Mutex functions ****************************/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#define CyU3PMutexCreate(mutex_ptr,priority_inherit) &amp;lt;br/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;n&#34;&gt;tx_mutex_create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mutex_ptr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;priority_inherit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#define CyU3PMutexDestroy tx_mutex_delete
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#define CyU3PMutexGet tx_mutex_get
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#define CyU3PMutexPut tx_mutex_put
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ещё отмечу, что некоторые сервисы имеют ограничения на вызов из различных контекстов, например, из контекста ISR (прерывания). В частности нельзя создавать никакие объекты операционной системы типа мутексов, эвент-групп, потоков и т.д. Любой такой вызов из ISR (не только, но не будем вдаваться в подробности) приведёт или к непредвиденному поведению или, в случае использования защитных обёрток((та же функция, но начинается с &lt;code&gt;_txe_XXX&lt;/code&gt;, а не &lt;code&gt;_tx_XXX&lt;/code&gt; - дополнительный оверхед, но по умолчанию грамотно разбросано: критичные замаплены на &lt;code&gt;_txe_XXX&lt;/code&gt;, а некритичные на &lt;code&gt;_tx_XXX&lt;/code&gt;)), вернёт ошибку.&lt;/p&gt;
&lt;p&gt;Понятно: что-бы не нарваться на неприятности, нужно грамотно смотреть и не смешивать общий код и код обработчика прерывания. Но по рукожопости разработчиков Cypress (я не расист, но судя по форуму - сплошь индусы), часть колбеков может вызываться как из контекста потока (причём, некоторые прямо во время регистрации - прямо из потока регистратора), так и из контекста прерывания. Пример такого колбека: &lt;code&gt;CyU3PUsbRegisterEventCallback()&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Причём документация((
&lt;a href=&#34;http://www.cypress.com/system/files/document/files/FX3APIGuide_0.pdf&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.cypress.com/system/files/document/files/FX3APIGuide_0.pdf&lt;/a&gt;)) явно молчит о контексте исполнения.&lt;/p&gt;
&lt;p&gt;Ок, нам нужно как-то уметь различать, откуда мы выполняемся, что бы пусть код по разным веткам для потока и для ISR((у ISR ещё и стек оооочень маленький и длинная цепочка вызовов может сделать stack overflow)). Сами разработчики предлагают использовать для этого функцию &lt;code&gt;CyU3PThreadIdentify()&lt;/code&gt; вот выдержка из документации((
&lt;a href=&#34;http://www.cypress.com/system/files/document/files/FX3APIGuide_0.pdf%29%29&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.cypress.com/system/files/document/files/FX3APIGuide_0.pdf))&lt;/a&gt;, страница 445, пункт 5.27.12.72:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;This function returns a pointer to the thread structure corresponding to the active thread, or &lt;strong&gt;NULL if called from
interrupt context&lt;/strong&gt;.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;И они сами и используют её так, например в &lt;strong&gt;cyfxtx.cpp&lt;/strong&gt; (часть проектного дерева), в методе &lt;code&gt;CyU3PMemAlloc(uint32_t size)&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;cm&#34;&gt;/* Cannot wait in interrupt context */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;CyU3PThreadIdentify&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;status&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;CyU3PByteAlloc&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;glMemBytePool&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ret_p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;CY_U3P_MEM_ALLOC_TIMEOUT&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;status&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;CyU3PByteAlloc&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;glMemBytePool&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ret_p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;CYU3P_NO_WAIT&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;А теперь перейдём к самому вкусному.&lt;/p&gt;
&lt;p&gt;Эта функция мапится в вызов ThreadX:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#define CyU3PThreadIdentify tx_thread_identify
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Открываем документацию на ThreadX((
&lt;a href=&#34;http://rtos.com/images/uploads/ThreadX_User_Guide_V5.pdf&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://rtos.com/images/uploads/ThreadX_User_Guide_V5.pdf&lt;/a&gt;)) и на странице 238 читаем само описание и, особо, примечение с восклицательным знаком:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If this service is called from an ISR, the return value represents the thread running prior to the executing interrupt handler.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Вкупе с самим описанием:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;This service returns a pointer to the currently executing thread. If no thread is executing, this service returns a null pointer.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Т.е. &lt;code&gt;NULL&lt;/code&gt; будет возвращён только в случае если вызов был произведён из ISR и НЕ БЫЛ прерван ни один поток: то есть все потоки или спали или были заблокированы на примитивах синхронизации.&lt;/p&gt;
&lt;p&gt;Перефразируя: &lt;strong&gt;эта функция, будучи вызванной из контекста ISR, может вернуть не &lt;code&gt;NULL&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Занавес.&lt;/p&gt;
&lt;p&gt;Т.е. много кода, что с самом SDK, что в пользовательском коде опирается на предположение, которое неверно и, как следствие, может падать или исполняться неверно при неблагоприятных стечениях обстоятельств.&lt;/p&gt;
&lt;p&gt;Собственно у нас на проекте я и отхватил с этим.&lt;/p&gt;
&lt;p&gt;Ну и примеры ошибочного использования с недрах SDK (версия 1.3.1, но в 1.3.3 то же самое):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://github.com/nickdademo/cypress-fx3-sdk-linux/blob/b142a1612d874e259f66cf171bf58c596bfe9dba/FX3_SDK_1_3_1_SRC/sdk/firmware/src/lpp/cyu3i2s.c#L49&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/nickdademo/cypress-fx3-sdk-linux/blob/b142a1612d874e259f66cf171bf58c596bfe9dba/FX3_SDK_1_3_1_SRC/sdk/firmware/src/lpp/cyu3i2s.c#L49&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://github.com/nickdademo/cypress-fx3-sdk-linux/blob/b142a1612d874e259f66cf171bf58c596bfe9dba/FX3_SDK_1_3_1_SRC/sdk/firmware/src/lpp/cyu3uart.c#L50&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/nickdademo/cypress-fx3-sdk-linux/blob/b142a1612d874e259f66cf171bf58c596bfe9dba/FX3_SDK_1_3_1_SRC/sdk/firmware/src/lpp/cyu3uart.c#L50&lt;/a&gt; - UART, по документации, можно использовать для легковесного логирования из ISR: можно намертво зависнуть.&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://github.com/nickdademo/cypress-fx3-sdk-linux/blob/b142a1612d874e259f66cf171bf58c596bfe9dba/FX3_SDK_1_3_1_SRC/sdk/firmware/src/lpp/cyu3i2c.c#L55&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/nickdademo/cypress-fx3-sdk-linux/blob/b142a1612d874e259f66cf171bf58c596bfe9dba/FX3_SDK_1_3_1_SRC/sdk/firmware/src/lpp/cyu3i2c.c#L55&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://github.com/nickdademo/cypress-fx3-sdk-linux/blob/b142a1612d874e259f66cf171bf58c596bfe9dba/FX3_SDK_1_3_1_SRC/sdk/firmware/src/lpp/cyu3spi.c#L48&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/nickdademo/cypress-fx3-sdk-linux/blob/b142a1612d874e259f66cf171bf58c596bfe9dba/FX3_SDK_1_3_1_SRC/sdk/firmware/src/lpp/cyu3spi.c#L48&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://github.com/nickdademo/cypress-fx3-sdk-linux/blob/b142a1612d874e259f66cf171bf58c596bfe9dba/FX3_SDK_1_3_1_SRC/sdk/firmware/src/system/cyu3system.c#L98&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/nickdademo/cypress-fx3-sdk-linux/blob/b142a1612d874e259f66cf171bf58c596bfe9dba/FX3_SDK_1_3_1_SRC/sdk/firmware/src/system/cyu3system.c#L98&lt;/a&gt; - тут не фатально, усыплять устройство из ISR вообще дурная идея&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://github.com/nickdademo/cypress-fx3-sdk-linux/blob/b142a1612d874e259f66cf171bf58c596bfe9dba/FX3_SDK_1_3_1_SRC/sdk/firmware/src/dma/cyu3multichannelutils.c#L287&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/nickdademo/cypress-fx3-sdk-linux/blob/b142a1612d874e259f66cf171bf58c596bfe9dba/FX3_SDK_1_3_1_SRC/sdk/firmware/src/dma/cyu3multichannelutils.c#L287&lt;/a&gt; - не фатально&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://github.com/nickdademo/cypress-fx3-sdk-linux/blob/b142a1612d874e259f66cf171bf58c596bfe9dba/FX3_SDK_1_3_1_SRC/sdk/firmware/src/dma/cyu3multichannel.c#L1326&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/nickdademo/cypress-fx3-sdk-linux/blob/b142a1612d874e259f66cf171bf58c596bfe9dba/FX3_SDK_1_3_1_SRC/sdk/firmware/src/dma/cyu3multichannel.c#L1326&lt;/a&gt; - не фатально&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://github.com/nickdademo/cypress-fx3-sdk-linux/blob/b142a1612d874e259f66cf171bf58c596bfe9dba/FX3_SDK_1_3_1_SRC/sdk/firmware/src/pport/cyu3pib.c#L567&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/nickdademo/cypress-fx3-sdk-linux/blob/b142a1612d874e259f66cf171bf58c596bfe9dba/FX3_SDK_1_3_1_SRC/sdk/firmware/src/pport/cyu3pib.c#L567&lt;/a&gt; - не фатально&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ну а официального способа определить, что мы находимся в прерывании попросту не существует. Есть три метода разного уровня костыльности:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Читать регистр CPSR и проверять, что прерывания запрещены - делать вывод, что мы уже в обработчике прерывания. При существовании возможности вложенных прерываний можем так же сфейлиться.&lt;/li&gt;
&lt;li&gt;Мегахак, но работает 100% на данной платформе: читать регистр SP (Stack Pointeer) и проверять, что он меньше 0x40000000 - тогда мы в обработчике прерывания. Может сломаться если потребуется код переносить куда-то ещё, причём сломаться в рантайме, что очень плохо. Выглядеть это будет как-то так:
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;inline&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;bool&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;isr_active&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;uint32_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kr&#34;&gt;__asm&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;volatile&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;mov %0, SP&amp;lt;br/&amp;gt;n&amp;lt;br/&amp;gt;t&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;=r&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;cm&#34;&gt;/**/&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sp&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;0x40000000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;?&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;Меньший хак: внутри ThreadX есть переменная &lt;code&gt;_tx_thread_system_state&lt;/code&gt;, если её значение больше 0, то мы в прерывании или система ещё не проиницализировалась (тогда там 0xf0f0f0f0). Можно использовать так:
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;inline&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;bool&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;isr_active&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;static_assert&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;sizeof&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Checked to work only on 32 bit CPUs&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;extern&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;uint32_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;_tx_thread_system_state&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;_tx_thread_system_state&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;если будет портирование так же может сломаться (данной переменной нет), но сломается на линковке и не полезет в рантайм, что существенно лучше. В рантайме может сломаться, если вызов какого-то прерывания не обрамляется функциями сохранения и восстановления контекста, но это очень большой баг, который будет вам портить жизнь куда больше корректной проверки выполнения в контексте прерывания.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Перекличка</title>
      <link>https://htrd.su/blog/2015/11/12/pereklichka/</link>
      <pubDate>Thu, 12 Nov 2015 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2015/11/12/pereklichka/</guid>
      <description>&lt;p&gt;Пост ни о чём. Просто хочется узнать сколько людей читает этот блог :) Такая вот блажь накатила. Поэтому велкам в камменты: кто читает, кому что интересно, может какие-то пожелания и т.п.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>FFmpeg и VP9 (libvpx)</title>
      <link>https://htrd.su/blog/2015/11/06/ffmpeg_i_vp9_libvpx/</link>
      <pubDate>Fri, 06 Nov 2015 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2015/11/06/ffmpeg_i_vp9_libvpx/</guid>
      <description>&lt;p&gt;Тут немец один в почту постучался. У него проблемы с кодированием кодеком VP9:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ffmpeg: /build/buildd/libvpx-1.3.0/vp9/encoder/vp9_encodeframe.c:1747: rd_pick_partition: Assertion `tp_orig &amp;lt; *tp&amp;#39; failed.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Если вы сидите на каком-нить Mint 17 или Ubuntu 14.04, то у вас в системе стоит libvpx версии &lt;strong&gt;1.3.0&lt;/strong&gt; в котором есть баг: при параметре &lt;code&gt;arnr-maxframes&lt;/code&gt; равным нулю он крешится вот таким вот образом. Причем &lt;code&gt;0&lt;/code&gt; - это валидное значение согласно документации. Если эту опцию принудительно не указывать для vpxenc, то он нормально кодирует, т.е. использует какое-то значение отличное от нуля, если указать - такой же креш. А вот FFmpeg, там внутри тоже не без косяка: лапша в настройках, задаёт дефолтное значение в &lt;code&gt;0&lt;/code&gt;, хотя разработчики рассчитывали (судя по всему) как раз на &lt;code&gt;-1&lt;/code&gt;. Потому такая петрушка.&lt;/p&gt;
&lt;p&gt;Лечится указанием ffmpeg опции &lt;code&gt;-arnr-maxframes&lt;/code&gt; со значением &lt;code&gt;-1&lt;/code&gt; или больше &lt;code&gt;0&lt;/code&gt;. &lt;code&gt;-1&lt;/code&gt; - включит это самое &amp;ldquo;дефолтное&amp;rdquo; значение внутри libvpx.&lt;/p&gt;
&lt;p&gt;В новых версиях libvpx проблема исправлена. Репорты:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://trac.ffmpeg.org/ticket/4413&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://trac.ffmpeg.org/ticket/4413&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://bugs.chromium.org/p/webm/issues/detail?id=690&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://bugs.chromium.org/p/webm/issues/detail?id=690&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ЗЫ о целесообразности использования VP9 меня не спрашивайте. Меня просто спросили, а я разобрался :)
ЗЗЫ FFmpeg версии 2.8.1 но роли это не играет.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Qt Creator из Git, VirtualBox и Linux Guest</title>
      <link>https://htrd.su/blog/2015/10/21/qt_creator_iz_git_virtualbox_i_linux_guest/</link>
      <pubDate>Wed, 21 Oct 2015 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2015/10/21/qt_creator_iz_git_virtualbox_i_linux_guest/</guid>
      <description>&lt;p&gt;Заголовок не отражает всей сути. Конкретно:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;VirtualBox: 5.0.8&lt;/li&gt;
&lt;li&gt;Гость: Linut Mint 17.2 и Ubuntu 14.04.2, x86_64&lt;/li&gt;
&lt;li&gt;Зост: Win8, x86_64&lt;/li&gt;
&lt;li&gt;Сборка Qt Creator из PPA: 
&lt;a href=&#34;https://launchpad.net/~adrozdoff/&amp;#43;archive/ubuntu/qtcreator-git&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://launchpad.net/~adrozdoff/+archive/ubuntu/qtcreator-git&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Проблема: при запуске крешится. Выводится такой стек-трейс:
&lt;hidden&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;alexd&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;alexd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;VirtualBox&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;~&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;$&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;qtcreator&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;git&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;libGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pci&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;id&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fd&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;80&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ee&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;beef&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;driver&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;OpenGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;glFlushVertexArrayRangeNV&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;found&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mesa&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;table&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;OpenGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;glVertexArrayRangeNV&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;found&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mesa&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;table&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;OpenGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;glCombinerInputNV&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;found&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mesa&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;table&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;OpenGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;glCombinerOutputNV&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;found&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mesa&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;table&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;OpenGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;glCombinerParameterfNV&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;found&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mesa&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;table&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;OpenGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;glCombinerParameterfvNV&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;found&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mesa&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;table&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;OpenGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;glCombinerParameteriNV&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;found&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mesa&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;table&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;OpenGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;glCombinerParameterivNV&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;found&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mesa&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;table&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;OpenGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;glFinalCombinerInputNV&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;found&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mesa&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;table&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;OpenGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;glGetCombinerInputParameterfvNV&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;found&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mesa&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;table&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;OpenGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;glGetCombinerInputParameterivNV&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;found&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mesa&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;table&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;OpenGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;glGetCombinerOutputParameterfvNV&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;found&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mesa&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;table&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;OpenGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;glGetCombinerOutputParameterivNV&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;found&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mesa&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;table&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;OpenGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;glGetFinalCombinerInputParameterfvNV&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;found&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mesa&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;table&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;OpenGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;glGetFinalCombinerInputParameterivNV&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;found&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mesa&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;table&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;OpenGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;glDeleteFencesNV&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;found&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mesa&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;table&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;OpenGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;glFinishFenceNV&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;found&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mesa&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;table&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;OpenGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;glGenFencesNV&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;found&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mesa&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;table&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;OpenGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;glGetFenceivNV&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;found&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mesa&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;table&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;OpenGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;glIsFenceNV&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;found&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mesa&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;table&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;OpenGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;glSetFenceNV&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;found&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mesa&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;table&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;OpenGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;glTestFenceNV&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;found&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mesa&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;table&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;libGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;core&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dri&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;or&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dri2&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;extension&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;found&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;libGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;failed&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;load&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;driver&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vboxvideo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;OpenGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;XGetVisualInfo&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;returned&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;visuals&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0000000001&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;deadb0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;OpenGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Retry&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;0x8002&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;returned&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;visuals&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;OpenGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;XGetVisualInfo&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;returned&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;visuals&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0000000001&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;deadb0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;OpenGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Retry&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;0x8002&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;returned&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;visuals&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;OpenGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;glXGetFBConfigAttrib&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0000000001&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;deadb0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;failed&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;XVisualInfo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;OpenGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;XGetVisualInfo&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;returned&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;visuals&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0000000001&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;deadb0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;OpenGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Retry&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;0x8002&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;returned&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;visuals&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;OpenGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;glXGetFBConfigAttrib&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0000000001&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;deadb0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;failed&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;XVisualInfo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;OpenGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;XGetVisualInfo&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;returned&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;visuals&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0000000001&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;deadb0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;OpenGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Retry&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;0x8002&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;returned&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;visuals&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;OpenGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;glXGetFBConfigAttrib&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0000000001&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;deadb0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;failed&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;XVisualInfo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;OpenGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;XGetVisualInfo&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;returned&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;visuals&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0000000001&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;deadb0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;OpenGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Retry&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;0x8002&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;returned&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;visuals&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;OpenGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;glXGetFBConfigAttrib&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0000000001&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;deadb0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;failed&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;XVisualInfo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;OpenGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;XGetVisualInfo&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;returned&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;visuals&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0000000001&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;deadb0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;OpenGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Retry&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;0x8002&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;returned&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;visuals&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;OpenGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;glXGetFBConfigAttrib&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0000000001&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;deadb0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;failed&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;XVisualInfo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;OpenGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;XGetVisualInfo&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;returned&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;visuals&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0000000001&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;deadb0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;OpenGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Retry&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;0x8002&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;returned&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;visuals&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;OpenGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;glXGetFBConfigAttrib&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0000000001&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;deadb0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;failed&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;XVisualInfo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;OpenGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;XGetVisualInfo&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;returned&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;visuals&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0000000001&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;deadb0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;OpenGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Retry&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;0x8002&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;returned&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;visuals&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;OpenGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;glXGetFBConfigAttrib&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0000000001&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;deadb0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;failed&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;XVisualInfo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;OpenGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;XGetVisualInfo&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;returned&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;visuals&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0000000001&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;deadb0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;OpenGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Retry&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;0x8002&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;returned&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;visuals&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;OpenGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;glXGetFBConfigAttrib&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0000000001&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;deadb0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;failed&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;XVisualInfo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;OpenGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;XGetVisualInfo&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;returned&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;visuals&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0000000001&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;deadb0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;OpenGL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Retry&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;0x8002&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;returned&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;visuals&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Could&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;initialize&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;GLX&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;libLLVM&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;3.6&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;so&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;           &lt;span class=&#34;mh&#34;&gt;0x00007fe411df7912&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;llvm&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sys&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PrintStackTrace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_IO_FILE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;34&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;libLLVM&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;3.6&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;so&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;           &lt;span class=&#34;mh&#34;&gt;0x00007fe411df5eb1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;libpthread&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;so&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;            &lt;span class=&#34;mh&#34;&gt;0x00007fe431190340&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;libc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;so&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;                  &lt;span class=&#34;mh&#34;&gt;0x00007fe43085ecc9&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gsignal&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;57&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;libc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;so&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;                  &lt;span class=&#34;mh&#34;&gt;0x00007fe4308620d8&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;abort&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;328&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;libQt5Core&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;so&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;            &lt;span class=&#34;mh&#34;&gt;0x00007fe43143230e&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;libqxcb&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;glx&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;integration&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;so&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;0x00007fe4325e52dc&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;7&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;libqxcb&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;glx&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;integration&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;so&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;0x00007fe4325e60f8&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;libqxcb&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;glx&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;integration&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;so&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;0x00007fe4325e484b&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;9&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;libQt5XcbQpa&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;so&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;          &lt;span class=&#34;mh&#34;&gt;0x00007fe429bbcf91&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;QXcbIntegration&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;createPlatformOpenGLContext&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;QOpenGLContext&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;49&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;libQt5Gui&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;so&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;             &lt;span class=&#34;mh&#34;&gt;0x00007fe4303e721d&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;QOpenGLContext&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;45&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;11&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;libUtils&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;so&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;              &lt;span class=&#34;mh&#34;&gt;0x00007fe43205afc5&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Utils&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;HostOsInfo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;canCreateOpenGLContext&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;QString&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;165&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;12&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;libQmlDesigner&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;so&lt;/span&gt;          &lt;span class=&#34;mh&#34;&gt;0x00007fe40a098f2c&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;QmlDesigner&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;QmlDesignerPlugin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;initialize&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;QStringList&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;QString&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;28&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;13&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;libExtensionSystem&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;so&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;    &lt;span class=&#34;mh&#34;&gt;0x00007fe4323111e6&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ExtensionSystem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Internal&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PluginSpecPrivate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;initializePlugin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;246&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;libExtensionSystem&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;so&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;    &lt;span class=&#34;mh&#34;&gt;0x00007fe43230920c&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ExtensionSystem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Internal&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PluginManagerPrivate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;loadPlugin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ExtensionSystem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PluginSpec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ExtensionSystem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PluginSpec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;State&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;828&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;15&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;libExtensionSystem&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;so&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;    &lt;span class=&#34;mh&#34;&gt;0x00007fe43230d070&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ExtensionSystem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Internal&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PluginManagerPrivate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;loadPlugins&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;256&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;16&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;qtcreator&lt;/span&gt;                  &lt;span class=&#34;mh&#34;&gt;0x0000000000409a31&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;libc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;so&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;                  &lt;span class=&#34;mh&#34;&gt;0x00007fe430849ec5&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;__libc_start_main&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;245&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;qtcreator&lt;/span&gt;                  &lt;span class=&#34;mh&#34;&gt;0x0000000000409db2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;Аварийный&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;останов&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/hidden&gt;
&lt;p&gt;Существует какая-то проблема в реализации поддержки OpenGL в гостевых расширениях VirtualBox. В результате это аффектит два плагина: QmlDesigner и QmlProfiler.&lt;/p&gt;
&lt;p&gt;В качестве work-around можно не загружать эти плагины (для меня не критично, но для кого-то может оказаться - очень, но тогда добивайтесь более действенного результата сами). Для этого сначала запустить Qt Creator так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;qtcreator-git -noload QmlDesigner -noload QmlProfiler
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;после чего выключить загрузку этих плагинов в настройках и запускать QtC обычным образом.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Ускорение позиционирования в удалённом flv файле при использовании http-транспорта</title>
      <link>https://htrd.su/blog/2015/10/20/uskorenie_pozicionirovanija_v_udaljonnom_flv_fajle_pri_ispolzovanii_http-transporta/</link>
      <pubDate>Tue, 20 Oct 2015 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2015/10/20/uskorenie_pozicionirovanija_v_udaljonnom_flv_fajle_pri_ispolzovanii_http-transporta/</guid>
      <description>&lt;p&gt;Пост основан на двух вопросах на 
&lt;a href=&#34;https://toster.ru/q/257810&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Тостере&lt;/a&gt; и 
&lt;a href=&#34;http://ru.stackoverflow.com/questions/459155/%D0%9A%D0%B0%D0%BA-%D1%83%D1%81%D0%BA%D0%BE%D1%80%D0%B8%D1%82%D1%8C-%D0%BF%D0%BE%D0%B7%D0%B8%D1%86%D0%B8%D0%BE%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D0%B2-%D1%83%D0%B4%D0%B0%D0%BB%D1%91%D0%BD%D0%BD%D0%BE%D0%BC-flv-%D1%84%D0%B0%D0%B9%D0%BB%D0%B5-%D0%BF%D1%80%D0%B8-%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF%D0%B5-%D1%87%D0%B5%D1%80%D0%B5%D0%B7-http&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;RU.SO&lt;/a&gt;. На RU.SO я же накатал ответ, на основе которого и буду строить свой псто. Кроме того, рассматриваю более подробно как работает перемотка со стороны 
&lt;a href=&#34;https://ffmpeg.org&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;FFmpeg&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;В общем, жаждущие - подкат.&lt;/p&gt;
&lt;p&gt;У каждого 
&lt;a href=&#34;http://ffmpeg.org/ffmpeg-formats.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;формата&lt;/a&gt; и 
&lt;a href=&#34;http://ffmpeg.org/ffmpeg-protocols.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;протокола&lt;/a&gt; в FFmpeg есть свои опции, которыми можно играться. Позиционирование, оно же - перемотка (seek) по времени, работает не всеми форматами и не во всех случаях оно поддерживается: к примеру, если источник - это простой HTTP сервер, типа апача или nginx, а видеофайл - простой файл на диске, то возможность &lt;strong&gt;не&lt;/strong&gt;последовательной перемотки определяется форматом файла, а так же настройками сервера: может ли он отдавать файл с произвольного места (проверить просто: при помощи wget -c начать качать файл, прервать и попробовать снова - если закачака продолжится - значит поддерживается, если начнётся заново - значит нет, дефолтные настройки Apache2 и nginx позволяют докачку без лишних телодвижений), плюс возвращает ли сервер размер файла в заголовках (возвращает - повезло, не возвращает - нет).&lt;/p&gt;
&lt;p&gt;Если, хотя бы одно из вышеозначенных условий не выполняется, то перемотка будет последовательной - т.е. будет читаться файл до нужной временной метки.&lt;/p&gt;
&lt;p&gt;Кроме того, если сервер - стриминговый, а файл, на самом деле не файл, а каноническое имя стрима и стрим - Live - то никакой перемотки не будет. Если стрим VOD - наличие перемотки зависит от того, умеет ли это сервер для данного транспорта (http) или нет (тут верны выкладки для обычного сервера).&lt;/p&gt;
&lt;p&gt;На этом вводное слово закончим. Перейдём к делу.&lt;/p&gt;
&lt;p&gt;В случае передачи flv через http (псевдостриминг) работает стек форматов и протоколов (в терминологии FFmpeg): &lt;code&gt;tcp&lt;/code&gt; -&amp;gt; &lt;code&gt;http&lt;/code&gt; -&amp;gt; &lt;code&gt;flv&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Формат flv &lt;strong&gt;не&lt;/strong&gt; умеет перемотку по времени - перенаправляет её на слой ниже (на протокольную часть: к примеру, rtmp умеет обрабатывать такие запросы). Http протокол же перемотку по времени делать не может в силу того, что он на это не рассчитан, ровно как и обычный файловый &amp;ldquo;протокол&amp;rdquo; (при доступе к локальному файлу): сами подумайте, ведь через эти протоколы можно обращаться вообще к любому файлу, а насколько к вашему текстовому документу применима перемотка по времени? Но (при соблюдении условий выше) реализация умеет делать перемотку побайтово (по сути классический 
&lt;a href=&#34;http://manned.org/fseek.3&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;fseek(3p)&lt;/a&gt;). Собственно сама перемотка осуществляется, внутри, при помощи более высокоуровневой функции (
&lt;a href=&#34;http://ffmpeg.org/doxygen/trunk/group__lavf__decoding.html#gaa23f7619d8d4ea0857065d9979c75ac8&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;av_frame_seek()&lt;/a&gt;), которая сначала пытается сделать перемотку по времени (в случае формата flv и протокола http эта попытка фейлится), если не удалось - то перемотку при помощи индекса (по сути, индекс хранит определённые временные метки и соответствующее смещение). Если индекса нет (или по какой-то другой причине, не позволяющей его использовать) то используется последовательное чтение кадров, сравнение их DTS с заданным.&lt;/p&gt;
&lt;p&gt;Так вот, в случае flv таблица индекса &lt;strong&gt;не&lt;/strong&gt; поддерживается. Точнее на уровне FFmpeg она реализована и создаётся динамически для уже прочитанного контента, т.е. перемотку в ещё непрочитанные данные можно осуществить, в данной связке (&lt;code&gt;http&lt;/code&gt;+&lt;code&gt;flv&lt;/code&gt;, &lt;code&gt;file&lt;/code&gt;+&lt;code&gt;flv&lt;/code&gt;), только путём последовательного чтения. Прямая перемотка осуществима только в связке &lt;code&gt;rtmp&lt;/code&gt;+&lt;code&gt;flv&lt;/code&gt; при условии поддержки медиа-сервером (в данном случае это будет VOD стриминг, можно в качестве стримера для этого взять nginx-rtmp).&lt;/p&gt;
&lt;p&gt;Сам flv не поддерживает, но он поддерживает метаинфорацию и один из метатегов называется &lt;code&gt;keyframes&lt;/code&gt;, внутри такого блока располагаются пары значений &lt;code&gt;times&lt;/code&gt; и &lt;code&gt;filepositions&lt;/code&gt; которые и образуют эту самую индексную таблицу. Данную таблицу понимает FFmpeg и стоит индекс на основе её. Но он не умеет добавлять её (по крайней мере я не знаю способа как это сделать, ровно как и не вижу в коде данного функционала).&lt;/p&gt;
&lt;p&gt;Метаинформация, в т.ч. и индексная таблица, может навешиваться при помощи внешних утилит, к примеру:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://github.com/noirotm/flvmeta&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;flvmeta&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://yamdi.sourceforge.net/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;yamdi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://rubyforge.org/projects/flvtool2/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;flvtool2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://mirror.facebook.net/facebook/flvtool&amp;#43;&amp;#43;/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;flvtool++&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.buraks.com/flvmdi/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;flvmdi&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Пример для flvtool2:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;flvtool2&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;UP&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;media&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;flv&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Интернеты где-то упоминали, что yamdi самый адекватный тул.&lt;/p&gt;
&lt;p&gt;Резюмируя: быстрая перемотка (позиционирование) flv через http-транспорт возможна только если:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Http сервер умеет докачивать файлы (поддерживает заголовки Content-Length и Content-Range).&lt;/li&gt;
&lt;li&gt;Это именно файл или каноническое имя VOD-стрима (при поддержке стриминговым сервером), но не Live-стрима.&lt;/li&gt;
&lt;li&gt;Внешней утилитой на flv навешана индексная таблица.&lt;/li&gt;
&lt;li&gt;Клиент умеет пользоваться этой индексной таблицей (ffmpeg - умеет, vlc, скорее всего - тоже, насчёт web-проигрывателей на знаю).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Если чего-то из вышеперечисленного не выполняется - перемотка будет последовательной (медленной) с возможностью быстрой обратной перемотки.&lt;/p&gt;
&lt;p&gt;Ну и полезные ссылки:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://ru.stackoverflow.com/questions/459155&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://ru.stackoverflow.com/questions/459155&lt;/a&gt; - вопрос и мой ответ на RU.SO.&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.zenhaven.org/blog/2012/05/21/flv-metadata-injectors-shootout/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.zenhaven.org/blog/2012/05/21/flv-metadata-injectors-shootout/&lt;/a&gt; - сравнение инъекторов метаданных от разработчика flvmeta.&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.brooksandrus.com/blog/2007/03/18/flvtool2-flash-video-flv-metadata-cue-point-injector-and-cutting-tool/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.brooksandrus.com/blog/2007/03/18/flvtool2-flash-video-flv-metadata-cue-point-injector-and-cutting-tool/&lt;/a&gt; - обзор flvtool2.&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://lzone.de/cheat-sheet/ffmpeg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://lzone.de/cheat-sheet/ffmpeg&lt;/a&gt; - различные нюансы работы с FFmpeg, в частности краткий обзор 
&lt;a href=&#34;http://lzone.de/cheat-sheet/ffmpeg#Metadata%20Tagging%20Tools&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;утилит тегирования flv и mp4&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Горелка Optimus Vega</title>
      <link>https://htrd.su/blog/2015/10/09/gorelka_optimus_vega/</link>
      <pubDate>Fri, 09 Oct 2015 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2015/10/09/gorelka_optimus_vega/</guid>
      <description>&lt;p&gt;Волею судеб, китайская 
&lt;a href=&#34;https://htrd.su/blog/2014/01/29/kitajskaja_multitoplivnaja_gorelka_brs-8_i_zapchasti_ot_kovea/&#34;&gt;BRS-8&lt;/a&gt; оказалась первой моей шланговой горелкой (мультитопливной тоже, но роли не играет). Но был замечен минус: после обычных накручивающихся (через ковеевский переходник Cobra) ощущался повышенный расход газа. Но плюсы контура испарителя и возможность погреть баллон очень сильно манили. Ещё хотелось чего-то более лёгкого: вес &amp;ldquo;газового&amp;rdquo; комплекта BRS-8 у меня доходит до 500 грамм, что не сильно мало.&lt;/p&gt;
&lt;p&gt;Рассматривал различные варинты, взвешивал за и против (если кому интересно: выкладки могу опубликовать), ориентировался на известные бренды. Остановился на Optimus Vega, при покупке на eBay она встала мне с доставкой около 4000 руб, текущая цена, в районе 7000 руб, поставила бы на ней крест изначально. Собственно варианты были следующими:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Optimus Vega&lt;/li&gt;
&lt;li&gt;MSR WindPro II&lt;/li&gt;
&lt;li&gt;Primus Express Spider&lt;/li&gt;
&lt;li&gt;Primus Gravity II EF&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Плюс краем глаза смотрел на 
&lt;a href=&#34;http://www.fire-maple.ru/fire-maple-gorelki-gazovie-volcano-fms-118-FMS-118/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Fire-Maple VOLCANO FMS-118&lt;/a&gt; (или 
&lt;a href=&#34;http://www.fire-maple.ru/articles/obzor-gorelki-fms-118-ot-firemaple.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;читать обзор&lt;/a&gt;) (забегая вперёд, скажу, что в текущей ситуации остановился бы на ней)&lt;/p&gt;
&lt;p&gt;Итак, сама горелка:&lt;br/&gt;&lt;br/&gt;
&lt;img src=&#34;https://htrd.su/img//post/2015/10/09/p1020133.jpg&#34; alt=&#34;Optimus Vega stove&#34;&gt;&lt;/p&gt;
&lt;p&gt;Для начала, существующие обзоры и обсуждения:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;в русскоязычном интернете:
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.risk.ru/blog/199612&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.risk.ru/blog/199612&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://widermove.blogspot.ru/2014/03/optimus-vega.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://widermove.blogspot.ru/2014/03/optimus-vega.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://forum.guns.ru/forum_light_message/21/1272401.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://forum.guns.ru/forum_light_message/21/1272401.html&lt;/a&gt; - упоминается и обсуждается (воспользуйтесь поиском по тексту)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;в забугорном интернете:
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.backcountry.com/optimus-vega-stove&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.backcountry.com/optimus-vega-stove&lt;/a&gt; - тут больше комментарии ценны.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Как-то не получалось делать фото во время эксплуатации, но нагрузки были не заоблачными. Кормилась, в основном, ковеевским газом, изредка - цанговыми баллонами корейского происхождения через переходник. Неплохо показала себя зимой: готовили внутри палатки, по горелку ставили тонкий слой термоизоляции с фольгой сверху. Достаточно устойчиво располагается баллон вверх ногами, чему позволяет узел с регулятором. Очень понравился низкий профиль горелки и отсутствие пьезоподжига. Но сразу было замечено, что металл ножек достаточно мягкий, но это слабо проявляется при транспортировке сложенной горелки в штатном чехле. Большим плюсом горелки является возможность установки посуды малого диаметра, например - кружки. Штатную ветрозащиту не использовал ни разу.&lt;/p&gt;
&lt;p&gt;К лету сего года заметил, что как-то чахло горелка работает. Возникло желание попытаться прочистить форсунку. Аналогично всем другим горелкам попытался разобрать и иглой прочистить. Начал отдавать гайку (которая поменьше, но пошире), но, судя по всему, что-то там закислилось и сама форсунка прокрутилась тоже, в результате на сварной шов, соединяющий нагревательную трубку и патрубок - лопнул:&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2015/10/09/img_20150921_174622.jpg&#34; alt=&#34;&#34;&gt;
&lt;img src=&#34;https://htrd.su/img/post/2015/10/09/img_20150922_185020.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Провалялась горелка в таком виде почти всё лето. После 
&lt;a href=&#34;https://htrd.su/blog/2015/09/22/slony_idut_na_sever_2._ili_dazhe_korabli_ne_vyxodjat_v_more_v_ponedelnik/&#34;&gt;Тернея&lt;/a&gt; решил заняться ею более плотно.&lt;/p&gt;
&lt;p&gt;Первым делом посмотрел на 
&lt;a href=&#34;http://optimusstoves.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;сайте производителя&lt;/a&gt; наличие запасных частей. Был неприятно удивлён отсутствием оных. Даже нет отдельно уплотнительных колец, на которые отсылается инструкция по эксплуатации (да, там есть даже часть на русском языке). Естественно, предполагая, что случай далеко от ганантийного, 
&lt;a href=&#34;http://www.optimusstoves.com/en/service/kontakt000/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;написал запрос&lt;/a&gt;, мол таки и так, случилась такая беда, есть ли возможность купить (отмечу: я запросил не просто прислать, а именно купить) запасной газовый шланг с трубкой в сборе? Кстати это второй (первый, как вы, наверное, поняли - слабая сварка) минус: шланг с трубкой в сборе и нет возможности его открутить и просто заменить, хотя бы на что-то совместимое (как, например, можно сделать в случае с BRS-8 и Booster +1 - они там совместимы в обе стороны).&lt;/p&gt;
&lt;p&gt;Запрос был подан в понедельник. Ожидая ответа, решил попытаться сделать ремонт своими силами. Для начала попытался скрепить узлы при помощи высокотемпературной холодной сварки (это была первая попытка вообще иметь с ней дело), осознал всю суть маркетингового слова &amp;ldquo;сварка&amp;rdquo; :) Следующим шагом была попытка пайки легкоплавким припоем (ПОС-61), но температура в том месте оказалась сильно выше температуры плавления олова - оно сифонящим газом просто выдулось. Попытка номер три: пайка тугоплавкими припоями. Тут опыта ровно столько же сколько с холодной сваркой: гугление, гугление и ещё раз гугление. Вроде как для пайки нержавейки стоит использовать припои на основе латуни или серебрянные. Серебряный припой по цене 600 руб за электрод (50 см - за глаза и с боооольшим запасом) нахожу на фарпосте. Пайка в открытом пламени, горелка простая китайская, баллон - корейский цанговый, флюс: тот что на электроде плюс бура (на всякий пожарный). Короче, помучался, но спаял. Но от термической деформации, судя по всему, пострадал патрубок, в результате он теперь плотно в конус форсунки не прижимается и газ сифонит, что чревато:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;снижение мощности&lt;/li&gt;
&lt;li&gt;повышенный расход газа&lt;/li&gt;
&lt;li&gt;попросту не пожаробезопасно&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;За сим сделал паузу, ведь прошла почти неделя. Ответа, кстати всё не было. В следующий понедельник пишу повторный запрос, просьбу упрощаю до минимума: сломалося, продайте, а? И опять в ожидание (вперемешку с поиском адекватной замены)&amp;hellip;&lt;/p&gt;
&lt;p&gt;Ожидание, внезапно, прервалось к концу дня вторника звонком с московского номера: девушка начинает про какую-то лампу, мол у вас сломалась&amp;hellip; Честно, не сразу понимаю, о чём речь, но бегло называю ключевые слова: может не лампа, а горелка? Optimus? Ответ положительный.&lt;/p&gt;
&lt;p&gt;Оказывается, это Российские партнёры Optimus, которым они делегировали мою проблему. А по сути: типа ваш случай гарантийный, и мы хотим прислать вам горелку на замену. Просто уточнили, что я - это я и адрес доставки. Всё. Ни вопроса - когда купил, где купил, какой серийник, ни просьба отправить горелку в ремонт, хотя в инструкции об этом явно указано, как и срок гарантии 2 года. Судя по всему, это следствие отзывов пилотной горелки Nova/Nova+ из-за обнаруженных в них дефектов (по слухам, после попытки переместить производство в Китай), иначе объяснить такую халяву я не могу. Может и упрощение сервиса, по типу Logitech (они сначала требовали фото разбитой мыши/клавиатуры (а сейчас и этого не просят), после чего отсылали новый айтем) - типа обороты и экономия на сервисных центрах выйдут дешевле.&lt;/p&gt;
&lt;p&gt;Партнёров нужно знать, это торговый дом &amp;ldquo;Кемпинг 2000&amp;rdquo;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.camping2000.ru/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.camping2000.ru/&lt;/a&gt; - сайт&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.camping.ru/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.camping.ru/&lt;/a&gt; - магазин&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;В общем и целом, я  не в обиде от такого разворота событий. Горелку отправили EMS, получил ровно через неделю. Из минусов: обещали прислать извещение, что отослали и трекинговый номер, но ничего из этого не упало даже в спам. В остальном - спасибо.&lt;/p&gt;
&lt;p&gt;Из сухого остатка, плюсы и минусы горелки:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Плюсы&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Компактность, малый вес&lt;/li&gt;
&lt;li&gt;Хорошая мощность в форсированном режиме&lt;/li&gt;
&lt;li&gt;Плавная регулировкай в нормальном режиме&lt;/li&gt;
&lt;li&gt;Возможность работы на перевёрнутых баллонах (штатная, конструкция регулятора этому способствует)&lt;/li&gt;
&lt;li&gt;Неплохо показала себя зимой&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Минусы&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Слабые сварные швы&lt;/li&gt;
&lt;li&gt;Неразборный шланг+трубка (даже на газе имеет смысл временами чистить тросик)&lt;/li&gt;
&lt;li&gt;Отсутствие запасных частей&lt;/li&gt;
&lt;li&gt;Обобщая: слабая ремонтопригодность в полевых условиях, плюс возможность окончательно экстерминировать горелку&lt;/li&gt;
&lt;li&gt;Конструкция воздухозаборных окон допускает попадание сбежавшей пищи, что может способствовать засору форсунки&lt;/li&gt;
&lt;li&gt;После Kovea Expedition с шлангом 50см, теперь кажется коротким шланг :)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Рекомендовать или не рекомендовать горелку к покупке - не буду. Каждый должен решать сам, взвешивая все за и против. Как минимум в обзорах выше, людей всё устраивает и трудится она длительное время.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Слоны идут на север 2. Или: даже корабли не выходят в море в понедельник</title>
      <link>https://htrd.su/blog/2015/09/22/slony_idut_na_sever_2._ili_dazhe_korabli_ne_vyxodjat_v_more_v_ponedelnik/</link>
      <pubDate>Tue, 22 Sep 2015 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2015/09/22/slony_idut_na_sever_2._ili_dazhe_korabli_ne_vyxodjat_v_more_v_ponedelnik/</guid>
      <description>&lt;h2 id=&#34;вводное-слово&#34;&gt;Вводное слово&lt;/h2&gt;
&lt;p&gt;Где-то 30 августа звонит Женя и предлагает на неделю сгонять на севера Приморья, поглядеть на Большой Амгинский, сходить
на г.Курортная, посетить теплые источники и вообще, полюбоваться красотами северной Приморской природы. А я, 
&lt;a href=&#34;https://htrd.su/blog/2010/08/31/2010-08-31_22.05_slony_idut_na_sever/&#34;&gt;зная эти красоты&lt;/a&gt;, просто не мог отказаться от такого предложения, благо жена, услышав о чём речь, сама сказала - ехать! Вот только
сделала ремарку по поводу отправки в понедельник 14, а не в воскресенье 13. Но мы не суеверные!&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;strong&gt;Терней. Историко-географическая справка&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;До 1922 года - Грингмутовка.&lt;/p&gt;
&lt;p&gt;Посёлок Терней стоит на правом берегу реки Серебрянка в трёх километрах от впадения её в бухту Серебрянка Японского моря.&lt;/p&gt;
&lt;p&gt;Дорога к пос. Терней идёт на север от пос. Пластун, расстояние до Пластуна около 58 км.&lt;/p&gt;
&lt;p&gt;Расстояние по автодороге до Владивостока 665 км, до Хабаровска 640 км.&lt;/p&gt;
&lt;p&gt;Бухта Терней была открыта для европейцев Лаперузом 23 июня 1787 года, и названа им же в честь французского мореплавателя адмирала Шарля д’Арсака де-Тернея (фр. Baie de Ternay).&lt;/p&gt;
&lt;p&gt;Деревня Грингмутовка основана в сентябре 1908, названа переселенцами в честь скончавшегося в 1907 лидера черносотенного движения Владимира Грингмута.&lt;/p&gt;
&lt;p&gt;Основное предприятие: Тернейлес.&lt;/p&gt;
&lt;p&gt;Ссылки:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.terney.info/content/view/31/32/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Названия района&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.terney.info/content/view/12/32/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Исторический очерк&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.terney.info/content/section/6/32/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Да и вообще&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;Помимо нас планировалось ещё несколько машин. Часть из них - просто приехать и матрасить на источнике св.Елены. Часть,
как и мы, планировали походить пешком. За неделю выразила желание ехать Настя и Лиза на Паджеро ИО. А вот матрасники -
откололись совсем.&lt;/p&gt;
&lt;p&gt;Свои экипажи составляли из расчёта 3 человека в машину, одна 20 л канистра бензина в запас на машину. На Женин Форестер,
по расчётам, выходило бензина на 9000 руб, т.е. по 3000 на человека. Раскладка вышла в районе 1100 руб на человека. Саму
раскладку  приведу в приложении, дабы была для примера, отмечу что ехать с джиперами - нужно по другому составлять меню :)
т.к., по результату, сами готовили только завтраки, а обеды и ужины получались общими, поэтому вкидывал в общий котёл то,
что мог вкинуть, дабы не чувствовать себя совсем неудобно. Кстати да, я оказался завхозом. Настю назначил замом, чем она
сильно помогла.&lt;/p&gt;
&lt;p&gt;Раскладку закупали в субботу с настей в Реми. Потом у неё дома рассортировали по приёмам и запихнули всё в отдельные
пакеты: Завтраки, Обеды, Ужины. Что бы проще было потом сортировать по людям: состояние некоторых дорог мы не знали и
некоторые детали маршрута нам были не ясны, так что предполагалось, что очень вероятно ситуация, что продукты будем таскать
не только в машине.&lt;/p&gt;
&lt;p&gt;Спальные места обеспечивали по машинам. На нашу я брал свою китайскую &amp;ldquo;брендовую&amp;rdquo; палатку 
&lt;a href=&#34;http://ru.aliexpress.com/item/Mobi-garden-outdoor-camping-tent-4-seasons-double-layer-aluminum-tent-Two-rooms-big-camping-tent/32354812829.html?ws_ab_test=201526_2,201527_3_71_72_73_74_75,201409_5&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Mobi Garden&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Всё остальное особой подготовки не требовало поэтому и описывать нечего.&lt;/p&gt;
&lt;p&gt;В воскресенье последняя созвонка, договариваемся выезжать в 7.30 с Седанки, а туда нас четверых: меня, Серёгу и Лизу, Настя
везёт на своём Паджерике, где уже Я и Серёга пересаживаемся в Форестер Жени и в путь.&lt;/p&gt;
&lt;h2 id=&#34;день-1&#34;&gt;День 1&lt;/h2&gt;
&lt;p&gt;Дорога, дорога, дорога. Перед Анучино начинаем на заправках подливать 98 бензин, т.к. не знаем точно
где он кончится. Изначально планировали обедать в Каменке в Астории, но её проехали ещё до 11 часов. Обедать рано. Звоним
девчатам, согласуем обед в Дальнегорске. Итак, пилим до Дальнегорска. В нём перекус в кафе, обнаружение таракана в тарелке,
который ловко выполз из салата до этого. Первый звоночек понедельника. Но мы не суеверные!&lt;/p&gt;
&lt;p&gt;Созваниваемся с девчатами, они говорят, что еда есть, остановятся где-нибудь на речке и перекусят. Договариваемся, что
встречаемся уже в Тернее.&lt;/p&gt;
&lt;p&gt;Последняя заправка с 98 оказывается в Кавалерово (CHECK: вроде на обратном пути, на въезде в Дальнегорск (со стороны М-60)
заметили Альянс с 98, но нужно будет проверить). 95 думаем лить уже в Тернее, благо топлива хватает.&lt;/p&gt;
&lt;p&gt;Рудная пристань. Чуть проскакиваем поворот на Каменку (да-да, в двух смежных районах два села с одинаковым названием!),
возвращаемся. Сразу после Лидовки - привет грунтовка! И так до Пластуна (с маааааленькими вкраплениями асфальта).&lt;/p&gt;
&lt;p&gt;Пластун. Пока без происшествий, колёса целы, водитель бодр. Есть немного связи у MTS. Единственная заправка - Альянс.
Среди номенклатуры бензина есть 95. Снова асфальт, причём, достаточно хороший (небольшой участок ремонта и грунтовки на
перевале не считаем), и так до Тернея.&lt;/p&gt;
&lt;p&gt;Терней. Заправка. Приключение первое: бензина нет. От слова - совсем. Лёгкие нервные смешки и летим обратно в Пластун.
Хорошо, хоть, дорога нормальная. По дороге вызваниваем Настю и Лизу, что бы тоже заливались под горлышко в там же.&lt;/p&gt;
&lt;p&gt;Пластун. Снова. Заправка. Встречаем девчат, заливаются 92. На колонке с 95 радостная табличка: НЕТ. 92 лить в Форестер,
турбовый&amp;hellip; no way. Тут подкатывает CR-V первого поколения, с кем-то из начальства заправки и заливает&amp;hellip; 95 которого нет!
Летим в кассу - как мол так? Ответ: остатки, только по ведомостям. Подкатываем к водителю, уговариваем залить и нас по её
же ведомости. Уговорили, дали 40 литров. Нам нужно около 50, но хоть что-то! Женя долго сомневается, доливать ли 92 до
полного бака. Решается. Дальше едем на едрёной смеси из, примерно, 10 литров 98, 40 литров 95 и, примерно, 9-10 литров 92.
Турбина сказала - идите в баню. Двигатель справляется.&lt;/p&gt;
&lt;p&gt;Едем на рандеву с девчатами в Терней. Потеря времени и лишнего бензина (на, около, 59 км), но, по прикидкам, должно хватить.&lt;/p&gt;
&lt;p&gt;Терней. Центр. Опять немного связи у MTS. Больше связи не будет. Созваниваюсь с женой, описываю первые приключения. Хотел
&amp;ldquo;отравиться&amp;rdquo; какой-нибудь нездоровой едой в местных магазинах, но подходящей отравы не нашёл. Женя попытался сделать то же
самое при помощи пирожка с капустой. Пирожок, по отзывам участвующих в его поедании Серёги и Жени, так себе, но отравиться
не получилось.&lt;/p&gt;
&lt;p&gt;Путь на север. Привыкаем к грунтовке: здесь асфальт нам только снился. Качество сильно варьируется: с четверга 10 сентября
были сильные дожди. Но дорогу прогрейдеровали, хоть и абы как. Проходим перевалы Берёзовый и Таёжный. До Таёжного даже
знаки встречаются. Дальше до Амгу даже километраж не указан (как в прошлом опусе: а доедите ли?).&lt;/p&gt;
&lt;p&gt;На Таёжном уже начинает смеркаться. Желание Жени стать на ночёвку засветло не сбывается. Но дорога несколько улучшается,
плюс почти полное отсутствие встречных машин, так что ехать ненапряжно. Девчата от нас сильно не отстают. С другими экипажами
было договорено ночевать на Кеме, на пороге Труба. Серёга точно не знает его положения, поэтому сначала останавливаемся
на Горелом (как его идентифицировали после беглого ориентирования), там сразу отпугнула шикарная грязевая лужа и невозможность
хотя бы немного скрыть машину с дороги. Едем дальше. На Трубе грязевая лужа тоже в наличии и куча народа как на поляне, так и
вокруг. Идем километр-два дальше и там ещё сворот к Кеме. На машинах проезжаем в лес сколько получается, оставляем и идём
на поляну к реке (всё это после небольшоё пешей разведки). Ставимся, начинаем готовку, Серёга уходит на трассу встречать
джип-составляющую нашей группы, которая вскоре и подъезжает: Nissan Safari со Славой и Алексеем (знаток здешних мест) и
Nissan Datsun Pickup с Вадимом, его женой Татьяно и Ольгой. Ужинаем, угощаемся легендарной жениной настойкой на Лимоннике,
знакомимся и спать.&lt;/p&gt;
&lt;p&gt;Ночь тёплая, ночую в одних трусах, жалею, что не взял более лёгкий спальник.&lt;/p&gt;
&lt;h2 id=&#34;день-2&#34;&gt;День 2&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2015/09/22/img_20150915_094549.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Выдвигаемся в сторону источника св.Елены. Дорога ещё хуже. Возникает опасность, что на обратный путь на Паджерик может
не хватить бензина. Прорабатываем варианты. Серёга предлагает ехать на Большой Амгинский на одной машине, тем самым
сэкономить какое-то число топлива. Плюс решаем не трогать 98 в канистре у форика до последнего: топлива хватает, а паджерик
может и на 98 поехать.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2015/09/22/img_20150915_095111.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2015/09/22/img_20150915_102941.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;На одном участке догоняем датсун, Женя решает обогнать, и на скорости ловим защитой, очень ощутимо, камень. Торможение,
осмотр, масла вроде нет.&lt;/p&gt;
&lt;p&gt;Сворот на источник, дорога проезжабельная. Ещё раз осмотр защиты - помята, но картер цел.&lt;/p&gt;
&lt;p&gt;Брод через р.Максимовка. Приключение номер два начинается. Думаем, смогут ли проехать форик и ИО. Настя решает попытаться
штурмануть брод и&amp;hellip; неудачно: поехала чуть правее, взяла большую глубину, сильно вывернула колёса и упёрлась в камни.
Пока цепляли трос, набрали воды.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2015/09/22/img_20150915_122000.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Вытянули. С другого берега наблюдаем картину: открываются двери и&amp;hellip; выходит вода. Пока девчата разгружают машину и вычёрпывают
воду решаем однозначно оставлять форик перед бродом, грузим рюкзаки на сафарик и переправляемся на другой берег.&lt;/p&gt;
&lt;p&gt;Паджерик пробуем завести. Вроде успешно, но при попытке тронуться с места - глохнем. После чего завестись не получается
и грозно горит &amp;ldquo;Check engine&amp;rdquo;. Цепляем паджерик на шкворку к сафарю, Серёгу за руль, как более опытного и сильного: машина
заглушена, руль и тормоза деревянные.&lt;/p&gt;
&lt;p&gt;Почти сразу второй брод: узкий но глубокий. Проскакивая его ловим воду аж на лобовое стекло. После брода дорога постепенно
ухудшается, пару раз чувствительно шоркам защитой. Настя радуется, что буквально в воскресенье поставила её.&lt;/p&gt;
&lt;p&gt;Через пару километров Лёха пробует скинуть &amp;ldquo;check engine&amp;rdquo; отключив аккумулятор. Успешно. До поляны добираемся своим ходом.&lt;/p&gt;
&lt;p&gt;Серёга раскидываем салон паджерика: снимает кресла, обшивку пола. Сушим.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2015/09/22/img_20150915_171949.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Располагаемся. Осматриваемся, ходим купаться на источник.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2015/09/22/img_20150915_142014.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2015/09/22/img_20150915_171923.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2015/09/22/img_20150915_172009.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2015/09/22/img_20150915_172032.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2015/09/22/img_20150915_133821.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2015/09/22/img_20150915_134433.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2015/09/22/img_20150915_134502.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2015/09/22/img_20150915_134641.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2015/09/22/img_20150915_134718.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Но приключения этого дня на этом не заканчиваются.&lt;/p&gt;
&lt;p&gt;Вечером общие посиделки. И первое знакомство с суровыми максимовскими мышами. Если сказать, что их много - не сказать
ничего. Их тьма. Причём людей совершенно не боятся, без малейшего сомнения пробегают по ногам, тусуются под столом. Пока
сидели эти мешегопники проели палатку девчатам и погрызки еду, что там была: поставили плотно к стенке - учуяли. У нас,
по опыту Камчатки (привет евражки!) - посередине на коврах. А ночью в ноги, но отгораживаем хобами, одеждой, задираем
ковры (забегая вперёд: чуть схалтурили и одну дырку таки заработали).&lt;/p&gt;
&lt;p&gt;Ночь ещё более тёплая, чем на Кеме. Ночую в термухе, но на ковре, спальником только прикрываюсь.&lt;/p&gt;
&lt;h2 id=&#34;день-3&#34;&gt;День 3&lt;/h2&gt;
&lt;p&gt;Радиальных выход на г.Курортную. На вчерашней полуднёвке собрал перекус из раскладочных ништяков и Серёгиной неучтёнки.&lt;/p&gt;
&lt;p&gt;Топать, примерно, 7 км с набором около 1000 м с поляны. Тропы нет, сначала прошли метров 500 вдоль хребта, после чего начали
забираться на него, там есть намёк на оную, но скоро лес сменяется скально-курумниковой грядой, топать вверх по ней -
как по асфальту и тропа не нужна.&lt;/p&gt;
&lt;p&gt;Лиза отстаёт. Договариваемся, что буду присматривать за ней. Отдают радиостанцию, что бы была связь. Медленно поднимаемся до
пупыря 1500 метров (если точно 1585, но не суть). По пути встречаются жиденькие заросли кедрового стланника, который или легко обходятся (в основном слева
по ходу движения вверх), или проходятся через проплешины, или напролом (редко).&lt;/p&gt;
&lt;p&gt;Солнце припекает, но не сильно жарко. Спасает открытый хребет и наличие лёгкого ветерка. Но с водой не подрассчитали почти
все. Но любованию красотами это не мешает (а открытый хребе ещё и помогает), хотя наличие брусники ставит под вопрос успех
восхождения.&lt;/p&gt;
&lt;p&gt;У пупыря договариваемся с Лизой, что она подождёт нас тут. Отдаю ей радиостанцию, говорю, что бы выходила на связь каждые 15
минут. До вершины доскакиваю за 40 минут.&lt;/p&gt;
&lt;p&gt;И снова виды. Они шикарны, тут словами не описать.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2015/09/22/img_20150916_152019.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2015/09/22/img_20150916_151825.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2015/09/22/img_20150916_151837.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2015/09/22/img_20150916_152008.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2015/09/22/img_20150916_152031.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Небольшой перекур (для меня, так как все уже изрядное время провели наверху), перекус (весь перекус-то был у меня (тут
гомерический ХА-ХА-ХА)) и обратно. Да, воистину, на подъём работает дыхалка, а на спуск - ноги. Подзабиваются быстро и
сильно, всё же почаще ходить нужно.&lt;/p&gt;
&lt;p&gt;Женя собирает бруснику. Хватает потом на три компота, что очень недурственно.&lt;/p&gt;
&lt;p&gt;На спуск до источника уходит около 3 часов. Итого, общее время, около 8 часов.&lt;/p&gt;
&lt;p&gt;Я, Женя, Настя решаем попробовать посмотреть еле уловимую тропу по хребту и спуститься напрямую в лагерь или на источник
(по горизонталям читается еле уловимая развилка хребта). Смущает, правда, близость горизонталей, но она не сильно отличается
от склонов. Тропа то теряется, то появляется. Либо звериная, либо крайне редко пользуются ею. Около одного из останцев
она приводит к чему-то вроде алтаря: выложены камни, а на них какой-то пучок травы придавленный камнем. Не похоже, что
животные этим занимались. После тропа вообще перестала читаться. Идём по приборам. Забираем к источнику, спуск становится
круче и более завален буреломом, так что идти сложнее. Практически в самом конце заваливаемся в овраг. Пытаемся выйти из
него вправо и снова овраг, причём более крутой. Выходим на бровку между ними&amp;hellip; И попадаем на тропу. Звериная или нет, но
человеку идти комфортно и идёт зигзагом, дабы не ломиться вверх напролом. Тропа спускается вниз, после чего приводит аккурат
к зимовью на источнике. Это жу неспроста. Стоит попытаться подняться по тропе в следующий раз - может в этом ракурсе её
будет легче следить и не терять.&lt;/p&gt;
&lt;p&gt;На источнике встречаем Ольгу и, практически сразу, подходят Вадим и Татьяна - они опередили нас на спуске, но нагнали.
Настя отправляется в лагерь, а мы с Женей заваливаемся в источник, причитая, что нет таких ванн у каждой горы (ага, а были бы -
не прорвались бы). Пока лежали, подошёл Лёха, а через несколько минут и остальные: Лиза, Серёга и Слава.&lt;/p&gt;
&lt;p&gt;Ещё на спуске сделал вброс, что на ужин нужно готовить сайровый суп. Вброс удался, суп приготовили. Плюс, получилось немного
разгрузить раскладочные продукты: мы то тоже планировали суп :) Да и на фоне небольшого обезвоживания и усталости пошёл
он на ура.&lt;/p&gt;
&lt;p&gt;Вечер закончился совместным ужином.&lt;/p&gt;
&lt;h2 id=&#34;день-4&#34;&gt;День 4&lt;/h2&gt;
&lt;p&gt;Женя несколько опрометчиво расположил посуду около края, ровно как и аптечку (кто бы мог подумать! голова заболела что ли?), запаха хватило приманить внимание местных мышегопников. И они не упустили шанс! В палатке появляется первая мышиная дырка плюс покусали но, правда на подъёме: это место нужно будет более тщательно починить. Продукты покусать не успели: Женя ворочается много, видать, спугнул, но пакеты покусали.&lt;/p&gt;
&lt;p&gt;Давеча, Лёха предлагал вариант сходить на водопад на одном из притоков Максимовки. Но все забили. Вадим отправился на рыбалку,
Серёга тоже подключился. Мы с Женей собрали машину Насте, потыкали завод - заводится, страшных красных лампочек не горит.
По приходу Серёга ещё что-то промониторил, но вроде ок. Стало только что-то ощутимо шуршать в двигательном отсеке и при
заводе визжать какой-то ремень.&lt;/p&gt;
&lt;p&gt;Потом шляндались, приготовили общий обед, купались в источнике. В общем - днёвка.&lt;/p&gt;
&lt;p&gt;Серёга соорудил ловушку из местного бидончика: закопал его в землю и подвесил печенье над ним. Печенье, естественно, утащили
бурундуки. Прикрутил барбариску - по наблюдениям мыши её сильно уважают. Бурундуки, к слову, тоже попадались в ловушку, но
она для них, как для слона дробина - вылетали сразу. Тем временем пару раз словил бурундука в мусорном пакете, подвешенном
на ветку: бурундук туда, я тихо подкрадываюсь и закрываю выход. По моему субъективному мнению, бурундуки нам сильно не
пакостили, поэтому отпустили. После, Женя умудрился словить мышь в пакете, когда та сунулась туда за конфетами. Без
вдавания в подробности, но трупик мыши был подвешен рядом с мусорным пакетом, после чего, покушения на него прекратились
полностью.&lt;/p&gt;
&lt;p&gt;Вечером половина лагеря принимала участие в готовке ухи из рыбы, пойманной нашими рыбаками. Уха удалась. А закончил день
мышиный аттракцион: когда мышь хваталась за наживку, вцеплялась в неё и сбрасывалась в ловушку, приготовленную Серёгой.
Первые быстро освоились оттуда выпрыгивать, после чего туда была налита вода. Сильно уж они достали. Ночь, в мышином плане
была спокойнее. А ещё значительно теплее предыдущих: вечером даже комары появились. До этого вяло орудовала только белоножка
(по крайней мере в отношении меня).&lt;/p&gt;
&lt;h2 id=&#34;день-5&#34;&gt;День 5&lt;/h2&gt;
&lt;p&gt;Выезд на Большой Амгинский водопад. Он же, в народе, Черный Шаман (ох уж эти популистские названия, но некоторые даже не
понимают о чём речь, когда говорю про Большой Амгинский).&lt;/p&gt;
&lt;p&gt;Потерь от мышей, вроде, нет.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2015/09/22/img_20150918_100217.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2015/09/22/img_20150918_100238.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Пытаемся определиться, будем ли ночевать под (точнее над) Шаманом, но толком так ни к чему и не приходим. Завтракаем,
собираемся, отправляемся.&lt;/p&gt;
&lt;p&gt;Сразу готовим трос для паджерика. Пока занимались разбором салона, нашли уши, так что теперь узлы вязать не придётся (до
этого: восьмёркой к сафарю и полусхватом за скобу паджерика - первый смог развязать руками, несмотря на нагрузку, второй
без отвёртки не смог, но лишний раз подтвердил навыки развязывателя узлов).&lt;/p&gt;
&lt;p&gt;Немного попугала красная лампа SRS. Но, только начали бояться, она решила погаснуть. Ну и отлично.&lt;/p&gt;
&lt;p&gt;На тросе проходим только броды. На глубоком снова сильно шаркаем защитой - сафарь, при выезде, поднял камни. Но
обделываемся лёгким испугом. На широком, чем основное русло Максимовке, где и утопили паджерик, укорачиваем трос, но
тоже задеваем камень защитой. Снова пронесло. Больше ничего не замочили.&lt;/p&gt;
&lt;p&gt;Пересаживаемся с Серёгой в форик и едем до трассы. Там снова пакуемся в паджерик и датсун и до Амгу. Из существенных
бродов до момента оставления паджерика - только один. Плюс кусок проезда по реке. Машину оставили за 3 км до поляны,
перед первым гряземесом и глубокой колеёй. В метрах 300 до этого места есть полянка, на которой можно воткнуть пару
палаток и расположить пару машин. Но, в целом, дорога вполне себе, плюс кто-то её подлатал, единственно, стоит опасаться
пеньков на дороге - ехать тише.&lt;/p&gt;
&lt;p&gt;На поляне перекус. И к водопаду. Пришли как раз вовремя: наверху только один эскудик, в внизу только два человека. Плюс,
как раз вода спала настолько, что бы комфортно пройти без сапогов и не замочить ноги (или замочить не сильно).&lt;/p&gt;
&lt;p&gt;Ущелье радует глаз. А водопад шикарен! В 2010 году воды было существенно меньше. Любуемся, фотографируемся. Женя, Настя и
Я лезем по кулуару наверх. Наверху находим смотровую на ущелье, но ползать по ней опасно: достаточно круто и конгломерат -
непредсказуемо, а лететь около 30 метров. Нужно брать верёвку и обвязку в следующий раз - свеситься, посмотреть на ущелье
сверху.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2015/09/22/img_20150918_143914.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2015/09/22/img_20150918_144935.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2015/09/22/img_20150918_144940.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2015/09/22/img_20150918_151810.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2015/09/22/img_20150918_151828.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2015/09/22/img_20150918_153250.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Находим тропу. Читается плохо, но есть свежая маркировка. Видать охотники ходят (встречаются затёсы на деревьях). Проходим
точки двух водопадов, которые выше Амгинского, но спуска в ущелье нет. Делаем предположение, что плато и ущелье дальше сходятся,
и к водопадам нужно идти вниз по течению реки. Думаем, идти ли дальше или поворачивать. Точку ставит следующее событие&amp;hellip;&lt;/p&gt;
&lt;p&gt;Слышим шорох камней. Первая мысль - камнепад. Потом топот - удивление. Потом видим тёмную тушу, что несётся в нашу сторону.
Следующая мысль: &amp;ldquo;медведь!&amp;rdquo; и, сразу за ней: &amp;ldquo;от попали&amp;hellip;&amp;rdquo;. Оказалось: кабан. Здоровый, клыкастый. Пробежал по прямой нам
наперерез метрах в 4-5. Инстинктивно только расположился так, что бы между ним и мной было дерево. Как пробежал - малость
испугался. Остальные - не знаю. В любом случае, решили поворачивать на поляну. Возвращаемся, фотографируемся, снимаем на
GPS тропу. Настя собирает осенние опята - их много в лесу. Я сомневаюсь в точности идентификации грибов. Поэтому отношусь
скептически к возможности принять их вовнутрь.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2015/09/22/img_20150918_164048.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2015/09/22/img_20150918_164211.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;На поляне уже вернувшиеся экипажи датсуна и сафаря. Слава агитирует ехать на Тёплый ключ. Объясняем, что у нас с топливом
не всё гладко. Решаем, что Женя грузится в датсун, на трассе его высаживают, сгружают рюкзаки и там он ждёт нас. Мы, тем
временем, ожидаем Серёгу и Лизу и топаем до паджерика. После чего добираемся до трассы, пытаемся запаковаться в Ио и
добираемся до оставленного форика, там, рядом с мостом через Максимовку располагаемся и ждём остальных.&lt;/p&gt;
&lt;p&gt;По итогу: планы снова поменялись. На тёплый ключ никто не поехал, Женю добросили до форика, а на ночёвку расположились в 2.5 км
от трассы в сторону источника св.Елена на галечной косе. Больше разброда и шатания! :)&lt;/p&gt;
&lt;p&gt;Вечером делаем общий ужин, больше похожий на пир: как по количеству блюд, так и их объёму: тут и овощной плов, и жаренная
картошка с грибами и печёный картофельный шашлык с салом и специями&amp;hellip;&lt;/p&gt;
&lt;p&gt;А тем временем&amp;hellip; Правильно, темнеет и появляются легендарные максимовские мыши! Но продукты из палаток и рюкзаков, уже
на автомате, выложены и оставлены в машинах. Решаем складировать туда и рюкзаки, перетрясаем и ложим.&lt;/p&gt;
&lt;p&gt;Мыши не менее наглые и многочисленные, чем на источнике. Памятуя, что небольшой террор делает ночь спокойнее - шугаем,
швыряем камни. Я умудился словить одну рукой, что вызвало восторг у Вадима, который это наблюдал. Мышь полетела в реку -
опасался, что укусит.&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;/ul&gt;
&lt;p&gt;Серёга предлагает сделать отраву, ввиде смеси толчёного стекла и колбасы. Жестоко, но опасаемся, что этот мышиный Итан
Хант попортит какую магистраль или провода. Хорошо если на стоянке, а не сигналку на ходу. Я делаю ловушку по типу садка
для рыбы из пластиковой бутылки, надеясь, что мыша не прогрызёт её. Пока подвязывал - мыша вылезла и была в 20 см от моей
руки, но рука прямая - реакции схватить не хватило. Мыша смылась под сиденье.&lt;/p&gt;
&lt;p&gt;Так или иначе, а спать надо. Ночь опять теплая, но комаров вечером не было.&lt;/p&gt;
&lt;h2 id=&#34;день-6&#34;&gt;День 6&lt;/h2&gt;
&lt;p&gt;Пороги и выезд в цивилизацию.&lt;/p&gt;
&lt;p&gt;Утро показало пустую ловушку (приманка не тронута), а так же съеденную отраву&amp;hellip; Как мы думали вначале. Но отодвинув
водительское сидение обнаружили: она просто запихала её за щеки, и почти сразу - выплюнула. Женя перетряхивает машину. К
боевым потерям добавляются:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;погрызенный пенопластовый органайзер, и&lt;/li&gt;
&lt;li&gt;прогрызенный ход в обшивке под водительским сиденьем&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Заводим проверяем работу машины - вроде ок, до проводов не добралась. Пока?&lt;/p&gt;
&lt;p&gt;Насте в паджерик заливаем её 20 л 92 бензина. Стрелка уровня - на середине. Должно хватить, тем паче, что замечено, что
стрелка вначале падает быстро, а с половины - существенно медленнее.&lt;/p&gt;
&lt;p&gt;В дорогу. Сафарь уезжает на источник купаться. Решаем не дожидаться и ехать смотреть пороги. Договорённость: ночуем на
оз.Духовское, что между Пластуном и Каменкой, недоезжая оз.Круглое и пер.Китовое ребро.&lt;/p&gt;
&lt;p&gt;Первый порог - Труба. Стоянка поредела. На главной поляне прошлых жителей сменили водники: сушатся каты и спасики.&lt;/p&gt;
&lt;p&gt;Осматриваемся, фотографируемся. Красота.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2015/09/22/img_20150919_115118.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2015/09/22/img_20150919_115311.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2015/09/22/img_20150919_115327.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2015/09/22/img_20150919_115415.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2015/09/22/img_20150919_120402.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Замечаю Лену Чиняеву. Здороваюсь, расспрашиваю, откуда куда. Говорит, что вода отличная - ровно столько сколько нужно.&lt;/p&gt;
&lt;p&gt;Сколько времени провели на пороге - не засекал. Минут 30 точно.&lt;/p&gt;
&lt;p&gt;Следующий порог - Горелый. Более длинный нежели Труба, походили около часа, если не больше. Красиво.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2015/09/22/img_20150919_132442.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2015/09/22/img_20150919_132822.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2015/09/22/img_20150919_132849.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2015/09/22/img_20150919_132930.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2015/09/22/img_20150919_133015.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2015/09/22/img_20150919_133115.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2015/09/22/img_20150919_133740.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2015/09/22/img_20150919_133905.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2015/09/22/img_20150919_140832.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2015/09/22/img_20150919_140841.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Серёга умудрился потерять радиостанцию. До этого уже пытался то же сделать со своим навигатором, хотя и безуспешно. В этот
раз окончательно потерять тоже не получилось, но мысль, что снарягу нужно к себе привязывать окончательно сформировалась.
Что ж, будущие походы покажут. А пока, окончательная потеря только одна: болт от штатива. Реквестирую штативы оранжевого
цвета с такими же болтами, ибо найти чёрный, даже по горячим следам не получилось.&lt;/p&gt;
&lt;p&gt;На обратном пути Настя снова находит опят, а на одном пне я умудрился собрать столько же, сколько уже было в пакете до этого.&lt;/p&gt;
&lt;p&gt;Женя, тем временем, уже добрался до машины и слушал шебуршание мыши, вынашивая злобные планы по её уничтожению, лелея надежду
приобрести в Тернее мышеловку&amp;hellip; нет, три мышеловки! А пока ходили проехал датсун и оставили записку под дворниками.&lt;/p&gt;
&lt;p&gt;Следующая остановка - порог, названия которого я не знаю. На нём останавливались с Сашей, когда были тут в 2010 году. Тоже
красота.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2015/09/22/img_20150919_150238.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2015/09/22/img_20150919_150331.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2015/09/22/img_20150919_150342.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2015/09/22/img_20150919_150348.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2015/09/22/img_20150919_150447.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Дальше чешем уже до Тернея, время от времени ожидая девчат: машина не сильно хорошо себя чувствует плюс опасность окончания
бензина ненулевая. Пока едем - обгоняет сафарь. Летит быстро.&lt;/p&gt;
&lt;p&gt;План действий на Терней:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Покупка мышеловки&lt;/li&gt;
&lt;li&gt;Перекус&lt;/li&gt;
&lt;li&gt;Заправка&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;По факту сначала закупились всякой отравой типа колбасок и пива, потом заехали в хозяйственный, где мышеловок не оказалось,
дозакупились отравой в продуктовом рядом и на заправку.&lt;/p&gt;
&lt;p&gt;92 нет, но есть 95. Заливать могут только точное количество литров, отсечка не работает. Настя льёт 25 литров (по итогу её
запаса горючего хватало и до Пластуна, а то и дальше). Женя заливает тоже около 20-25 и остальное доводит 20 литрами 98
из канистры. Форику понравилось, даже турбина стала раскручиваться.&lt;/p&gt;
&lt;p&gt;Быстро и задорно доезжаем до Духовского. Диких съездов нет. Только через базу. Ценник (200 руб с человека за въезд плюс
300 руб с палатки в сутки) не устраивает, плюс ловим SMS от Лёхи, что обстоятельства изменились и они чешут до дома в ночь.
Добираемся до оз.Круглое&amp;hellip; Берег - помойка изрядная. Человеки! Стыдно! Появляется немного связи, звонок от Лёхи, узнаём, что
датсун тоже ломанулся в город. Решаем ехать в сторону пер.Китовое ребро и искать съезды вдоль речек или ручьёв и вставать
на ночёвку ибо уже смеркается. Место находим в паре километрах от озера. Как и в первый день, засветло встать не получилось.&lt;/p&gt;
&lt;p&gt;Мыши на стоянке тоже оказались. Подтянулись на огонёк. Но не такие дикие, как Максимовские - от направленного фонаря
сразу убегали, но по палаткам ночью носились и любой шелест пакета вынуждал просыпаться, что бы проверить целостность
внутренней палатки, ибо прецедент.&lt;/p&gt;
&lt;p&gt;Ночь самая тёплая. Жарко было в термухе.&lt;/p&gt;
&lt;h2 id=&#34;день-7&#34;&gt;День 7&lt;/h2&gt;
&lt;p&gt;Возвращение во Владивосток.&lt;/p&gt;
&lt;p&gt;Потери от мышей: засраный полог палатки. Мыша в форике активности не проявляла. Судя по всему сдохла от отравы,
обезвоживания или жары.&lt;/p&gt;
&lt;p&gt;Близость стоянки к трассе никак не сказалось на качестве сна, а вот яма под палаткой и мыши - сказались. Но в целом -
ночёвка нормальная. Отметили место как точку возможной стоянки.&lt;/p&gt;
&lt;p&gt;Завтракаем. Раскидываю остатки продуктов и газа по участникам, дабы не пересчитывать финансы. Снова в путь.&lt;/p&gt;
&lt;p&gt;С Лизой время от времени созваниваюсь, дабы узнать локацию и состояние машины. Около Лидовки они останавливаются искупаться,
мы же чешем до Каменки (которая другая Каменка). Останавливаемся в Дальнегорске купить воды, в хозяйственном снова не оказывается
мышеловки. Хотя необходимость в ней, по косвенным признакам, отпала. Останавливаемся на Дальнегорском перевале - зело
виды красивые.&lt;/p&gt;
&lt;p&gt;Когда расположились на обед в Каменке оказалось, что паджерик всего в 25 км от нас, так что на обеде пересеклись. Так же
накрыл, частично, грозовой фронт. Дальше по дороге то въезжали в полосу дождя, то выезжали из неё.&lt;/p&gt;
&lt;p&gt;В общем и целом, всё было спокойно примерно до Ивановки, где дорогу, внезапно, перелетал выводок фазанов&amp;hellip; Минус два
фазана и поломанный пластик решётки радиатора форика. Обделались лёгким испугом, что не в лобовое и цел радиатор. Фазанов
собрали в пакет и отдали Жене, как водителю управляемого снаряда.&lt;/p&gt;
&lt;p&gt;Дальше в город вернулись без существенных приключений. Разве что исследовали съезд с объездной с целью миновать
пробки на ней, и предупредили Настю, что бы не совалась на объездную.&lt;/p&gt;
&lt;p&gt;Вечером уже подбили, что все нормально добрались до дома. Настя машину на диагностику будет отдавать только в конце недели,
так что потери паджерика там и узнаем.&lt;/p&gt;
&lt;h2 id=&#34;в-заключение&#34;&gt;В заключение&lt;/h2&gt;
&lt;p&gt;Поездка удалась. Попали в удачное время года: в начале недели осенних красок было значительно меньше, чем в конце, и всё
это наблюдали без отвлечения на что-либо ещё. А при движении обратно наблюдали плавное возвращение к лету - к Владивостоку
осенних красок становилось всё меньше. Плюс малое количество кровососов: комары вылезли только в один день, а белоножки
было достаточно мало (хотя некоторый дискомфорт и привносила).&lt;/p&gt;
&lt;p&gt;Коллектив тоже собрался душевный. Печально, что ходили мало, но без забросок и выбросок иначе и
не получалось. Повезло с водой - её и не много и не мало, как следствие - Большой Амгинский полон воды и красив. Никогда
этого не встречал кабана, да ещё близко и без последствий. Страшновато, но потрясно. Плюс одна красивая и высокая гора
Приморья, да ещё и со спелой брусникой.&lt;/p&gt;
&lt;p&gt;Омрачил выезд утопленный паджерик,
подпорченные мышами палатки и продукты, но взамен мы получили новый опыт и подтвердили некоторый прошлый (типа ставь продукты
на ковёр, посреди палатки, не прижимай к стенкам, изолируй, подвешивай что только можно, от бурундуков прячь на горизонтальных
ветках - подвешивай на верёвках подальше от ствола и так далее).&lt;/p&gt;
&lt;p&gt;Сделаны некоторые заметки, к примеру: хорошо иметь
заброды в машине, дабы щупать броды. А о наличии бензина на заправках нужно справляться заранее по телефону, а по возможности
заказывать кому-то, дабы купили заранее. Кроме того, канистр нужно брать как минимум две (по 20 л), дабы меньше волноваться
о внезапном его окончании плюс добавит свободы манёвра (к примеру, можно было бы рвануть на Тёплый ключ и в Амгу).&lt;/p&gt;
&lt;p&gt;По результату, получился автопоход с радиальными пешими выходами. Что тоже неплохо.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Фото:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Фото от Серёги и Алексея: 
&lt;a href=&#34;https://yadi.sk/d/hgrk9g9yjLMQw&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://yadi.sk/d/hgrk9g9yjLMQw&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Фото от Жени: 
&lt;a href=&#34;https://mega.nz/#F!4A80kT5b!1eektbf0ZvDiEigx_c5Eeg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://mega.nz/#F!4A80kT5b!1eektbf0ZvDiEigx_c5Eeg&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;раскладка&#34;&gt;Раскладка&lt;/h2&gt;
&lt;p&gt;TODO&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>День программиста</title>
      <link>https://htrd.su/blog/2015/09/13/den_programmista/</link>
      <pubDate>Sun, 13 Sep 2015 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2015/09/13/den_programmista/</guid>
      <description>&lt;p&gt;С праздником, коллеги! Что бы не было в вашем коде:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#define TRUE FALSE
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Расход газа в походе</title>
      <link>https://htrd.su/blog/2015/09/07/rasxod_gaza_v_poxode/</link>
      <pubDate>Mon, 07 Sep 2015 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2015/09/07/rasxod_gaza_v_poxode/</guid>
      <description>&lt;p&gt;Добрая статья: 
&lt;a href=&#34;http://www.mount.ru/shop/dir.php?id=235&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.mount.ru/shop/dir.php?id=235&lt;/a&gt; в целом соответствует моему опыту использования газа.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Статья выше на WEB Archive: 
&lt;a href=&#34;https://web.archive.org/web/20170911003435/http://www.mount.ru/shop/dir.php?id=235&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://web.archive.org/web/20170911003435/http://www.mount.ru/shop/dir.php?id=235&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Конспективно:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Минимальный&lt;/strong&gt;: 30 грамм/человек/день
&lt;ul&gt;
&lt;li&gt;пожалуй только на Jet Boil и прочих интегрированных системах или котелками с радиаторами плюс использование горелки только доведения до кипения и запаривание еды. У самого такого расхода не получалось.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Стандартный&lt;/strong&gt;: 60-90 грамм/человек/день
&lt;ul&gt;
&lt;li&gt;в т.ч. готовка риса, гречки, но отсутствие топления снега и льда. Вода от 7-10 градусов. Каши из перловки и кукурузы - в пролёте. Наличие ветрозащиты. Котёл 2.7 л, для горелок, Ковея, алюминиевый.&lt;/li&gt;
&lt;li&gt;при наличии опыта общения с газовым оборудованием, использовании котлов с теплообменниками и эффективных горелок, можно рассчитывать на 40-50 грамм/человек/день. Но! Пока не наберёте свою статистику, лучше закладывать 60.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Экстремальный&lt;/strong&gt;: от 100 до 300, а то и выше грамм/человек/день
&lt;ul&gt;
&lt;li&gt;топление снега, готовка на большой высоте: на берельском седле, по ощущениям, потребление было около 120 грамм.&lt;/li&gt;
&lt;li&gt;отсутсвие защитных ветровых стенок, экранов, неэффективные (костровые: с овальным дном или с нагаром, который является отличнымтеплоизолятором) или слишком большие котлы (больше 2-3 литров - уже много потерь, нужно озадачиться теплотканью).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Выводы:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;В низкогорье (до 2000-2500 м) и на равнине при отсутствии топления снега при готовке (т.е. будете не просто запаривать, а варить) можете уложиться в 60-70 грамм и меньше&lt;/li&gt;
&lt;li&gt;При топлении снега увеличьте до 90-100&lt;/li&gt;
&lt;li&gt;При увеличении высоты доведите до 120&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Иногда получается комбинировать, к примеру:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;на Jet Boil или чём-то подобном натопить и накипятить воды и залить в термосы&lt;/li&gt;
&lt;li&gt;основное блюдо приготовить на горелке добавляя туда уже подогретую и натопленную воду&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Стоить отметить, что готовка без наблюдения, при использовании котлов с нагаром (например, костровых), при пониженных температурах, при повышенных высотах всегда будет увеличивать расход газа.&lt;/p&gt;
&lt;p&gt;При таком раскладе, расход выше чем чисто на Jet Boil, но проще готовить на палатку из 3-4 человек плюс меньше расход, чем чисто на горелке.&lt;/p&gt;
&lt;p&gt;Пост буду уточнять по мере появления свежих наблюдений. Ещё есть старый пост: 
&lt;a href=&#34;https://htrd.su/blog/2014/04/25/gaz_gazovye_smesi_i_xolod/&#34;&gt;Газовые смеси и холод&lt;/a&gt;, который поможет сориентироваться при использовании газа в походе.&lt;/p&gt;
&lt;h2 id=&#34;полевые-наблюдения&#34;&gt;Полевые наблюдения&lt;/h2&gt;
&lt;p&gt;Наблюдения изложены в свободном стиле, но в хронологическом порядке (самые новые - в конце).&lt;/p&gt;
&lt;h3 id=&#34;терней-кема-курортная-2015&#34;&gt;Терней-Кема-Курортная 2015&lt;/h3&gt;
&lt;p&gt;Отчёт: 
&lt;a href=&#34;https://htrd.su/blog/2015/09/22/slony_idut_na_sever_2._ili_dazhe_korabli_ne_vyxodjat_v_more_v_ponedelnik/&#34;&gt;Терней-Кема-Курортная 2015&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Считали газ по 60гр, горелка была 
&lt;a href=&#34;https://kovea.ru/gazovaya-gorelka-expedition-stove-camp-1-tkb-n9703-l.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Kovea Expedition&lt;/a&gt;, газ корейский, в цанговых баллонах 220гр (смесь, судя по надписи на баллоне: изобутан&amp;hellip;80%, бутан&amp;hellip;15%, пропан&amp;hellip;5%, название MaxButane, баллон красно-белый, производитель Daeryuk Can Co., Ltd), готовили рис, гречку, лапшу (быстрой варки), кипятили около 2.5л воды на чай на 5 человек в алюминиевом котле (высокий, больше костровой, но не закопчённый) с высокой ветрозащитой, температура окружающей среды от 10 до 20 градусов. По расчёту на один день должно было уходить чуть больше одного баллона (60&lt;em&gt;5=300гр). По факту, одного баллона хватало, примерно, на 3.5 готовки (грубо: на 1.17 день (пропорция, 2д - 6 готовок, X д - 3.5 готовки: 3.5&lt;/em&gt;2/6 = 1.17)): старого хватало накипятить воду и немного варить рис/гречку. Баллоны не взвешивали, так что получается, примерно, расход газа: 220/5/1.17 = &lt;strong&gt;37.6 гр/чел/день&lt;/strong&gt;, округлим в большую сторону, получаем: &lt;strong&gt;40 гр/чел/день&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id=&#34;сборы-дикоросов&#34;&gt;Сборы дикоросов&lt;/h3&gt;
&lt;p&gt;Сентябрь 2015.&lt;/p&gt;
&lt;p&gt;Гоняли за лимонником, было 3 готовки (быстрая лапша, рис и суп харчо, чай) на 3 человек, горелка 
&lt;a href=&#34;https://htrd.su/blog/2014/01/29/kitajskaja_multitoplivnaja_gorelka_brs-8_i_zapchasti_ot_kovea/&#34;&gt;BRS-8&lt;/a&gt; со штатной форсункой 0.37мм, газ корейский, в цанговых баллонах 220гр (смесь, судя по надписи на баллоне: изобутан&amp;hellip;80%, бутан&amp;hellip;15%, пропан&amp;hellip;5%), котёл 2.7л алюминиевые Kovea, для горелок (низкий широкий) с высокой ветрозащитой, температура окружающей среды (субъективно) от 10 до 20 градусов. Первый баллон был чуть початый (половина последней готовки в Тернее на нём была сделана), а из нового почали 68 грамм газа, так что ушло, примерно, баллон или чуть более или 220-230 грамм, т.к. готовки было 3, принимаем что это один день, тогда расход: 230/3=&lt;strong&gt;76,67гр/чел/день&lt;/strong&gt;, округляем до ближайшего: &lt;strong&gt;80 гр/чел/день&lt;/strong&gt;. Не удивлён: замечено, что расход газа на этой горелке достаточно высокий плюс готовка супа (часть продуктов: картофель, морковь были сырыми). Хотя, для этой горелки нужно уточнять: вдруг в исходном баллоне было меньше половины.&lt;/p&gt;
&lt;h3 id=&#34;две-икрянки-и-немного-партизанского-хребта&#34;&gt;Две Икрянки и немного Партизанского хребта&lt;/h3&gt;
&lt;p&gt;Отчёт: 
&lt;a href=&#34;https://htrd.su/blog/2016/05/14/dve_ikrjanki_i_nemnogo_partizanskogo_xrebta/&#34;&gt;Две Икрянки и немного Партизанского хребта&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Газ никак не считали, взяли по баллону &amp;ldquo;дихлофоса&amp;rdquo; на день. Горелка 
&lt;a href=&#34;https://htrd.su/blog/2015/10/09/gorelka_optimus_vega/&#34;&gt;Optimus Vega&lt;/a&gt;. Первый баллон был чуть початым, типичным &amp;ldquo;китайским&amp;rdquo; (на самом деле этот газовый баллон и смесь произведены в Республике Корея), его хватило на 4 готовки, больше про него ничего, т.к. замеры по нему неизвестны. Второй баллон: корейский, цанговый, 220 гр (смесь, судя по надписи на баллоне: изобутан&amp;hellip;80%, бутан&amp;hellip;15%, пропан&amp;hellip;5%, название: Мега Макс, баллон голубой с белым, гордая надпись -20 градусов, производитель Daeryuk Can Co., Ltd, работала смесь лучше первого баллона). Готовили: рис, гречку, просто кипяток на лапшу и каши, макароны, чай, разогревали тушёнку, кипятили около 1-1.5л воды на чай на 2 человек в алюминиевом котле (высокий, больше костровой, но не закопчённый) с высокой ветрозащитой, температура окружающей среды от 5 до 10 градусов (по данным rp5). Баллона хватило на 5 готовок. Считаем, что один день - это 3 готовки, значит: 1 * 5 / 3 = 1.67 дня, тогда расход газа на человек/день: 220/2/1.67 = &lt;strong&gt;65.87 гр/чел/день&lt;/strong&gt;. Расчёт грубый, так как точно не помню, когда начали использовать второй баллон, поэтому сместил в сторону большего расхода. Несколько раз пропускали кипение, что тоже сказывалось на увеличении расхода, кроме того, воды, по ощущениям заливалось больше, чем требовалось. Использовался производительный режим (перевёрнутый баллон на этой горелке) - на нём расход больше, возможно не совсем хорошо сгорает топливо. Но в средний расход уложились.&lt;/p&gt;
&lt;h3 id=&#34;домашний-эксперимент&#34;&gt;Домашний эксперимент&lt;/h3&gt;
&lt;p&gt;Заинтересовал тот факт, что расход газа в прошлом походе оказался на двух человек больше, чем расход в Тернее. Решил проверить гипотезу о менее эффективном использовании газа при небольшом количестве человек.&lt;/p&gt;
&lt;p&gt;Итак: тепличные домашние условия, отсутствие сквозняка, окружающая температура около 24 градусов, вода для первой готовки - около 24 градусов, для второй готовки - несколько холоднее (из-под крана). &amp;ldquo;Дихлофосный&amp;rdquo; баллон, тот же, что в Тернее (чуть начатый, 219гр из 220, смесь, судя по надписи на баллоне: изобутан&amp;hellip;80%, бутан&amp;hellip;15%, пропан&amp;hellip;5%, название MaxButane, баллон красно-белый, производитель Daeryuk Can Co., Ltd). Две готовки: суп сайровый из сырой картошки (из расчёта на 1 человека, т.е. воды 550 мл, где 50 мл - запас на выкипание) плюс чай (400 мл) и лапша быстрой варки (600 мл: 550 рекомендовано в инструкции по готовке, 50 - запас на выкипание) плюс чай (400 мл). Котёл газовый, 1.7л, алюминиевый, Kovea. Ветрозащита не использовалась. Горелка 
&lt;a href=&#34;https://htrd.su/blog/2015/10/09/gorelka_optimus_vega/&#34;&gt;Optimus Vega&lt;/a&gt;. Третью готовку не делал, так как даже в таком случае расход газа получился 54 грамма (одна готовка 20 грамм, другая - 34 /суп/), если экстраполировать, то расход должен получиться: 54 * 3 / 2 = &lt;strong&gt;81 грамм&lt;/strong&gt;. Оценка очень грубая, но не думаю, что получилось бы меньше 70 грамм.&lt;/p&gt;
&lt;p&gt;Выводы такие: оптимально готовить на 3-4 человек (5 если не сильно холодно за бортом). Больше - нужен больший котёл, следовательно его площадь будет больше, следовательно он больше будет излучать в окружающую среду, следовательно ожидается больший расход газа. Меньше - тепло не так эффективно утилизируется. Либо нужны компактные низкие, но широкие котлы. Кроме того, готовка супов из сырых продуктов так же сказывается на расходе газа, использование сушеных компонентов может сократить как время готовки так и расход газа.&lt;/p&gt;
&lt;h3 id=&#34;восточные-саяны-2016---тункинские-гольцы&#34;&gt;Восточные Саяны 2016 - Тункинские гольцы&lt;/h3&gt;
&lt;p&gt;Середина июня - начало августа 2016.&lt;/p&gt;
&lt;p&gt;Вводные:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Поход планировался на 14 полных дней, по факту получился 12.&lt;/li&gt;
&lt;li&gt;Основная часть похода на высоте около 1000м над уровнем моря.&lt;/li&gt;
&lt;li&gt;Три приёма пищи (полноценная готовка)&lt;/li&gt;
&lt;li&gt;Меню разное: и быстрые супы и долгоиграющие крупы типа пшена, мясо сушёное, грибы шиитаке (брать только цельные!)&lt;/li&gt;
&lt;li&gt;Две кухни:
&lt;ul&gt;
&lt;li&gt;мясная:
&lt;ul&gt;
&lt;li&gt;4 человека&lt;/li&gt;
&lt;li&gt;горелка 
&lt;a href=&#34;https://htrd.su/blog/2015/10/09/gorelka_optimus_vega/&#34;&gt;Optimus Vega&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;безмясная:
&lt;ul&gt;
&lt;li&gt;3 человека&lt;/li&gt;
&lt;li&gt;горелка 
&lt;a href=&#34;https://kovea.ru/gazovaya-gorelka-expedition-stove-camp-1-tkb-n9703-l.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Kovea Expedition&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Во всех кухнях использовалась ветрозащита и газовые картриджи стандарта EpiGas от Kovea (450 гр)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;В &lt;strong&gt;мясной&lt;/strong&gt; кухне было использовано 5 баллонов газа со следующими оговорками:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;было несколько случаев неучтённого использования газа ввиду явной экономии;&lt;/li&gt;
&lt;li&gt;последний баллон был выбран не полностью, возможно могло хватить на чай или готовку: газа осталось мало, поэтому домой не везли, утилизировали на месте.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Итоговый расход: 5 * 450 = 2250 гр&lt;/p&gt;
&lt;p&gt;Дневной расход: 2250 / 4 / 12 = &lt;strong&gt;46.88 гр/чел/день&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;В &lt;strong&gt;безмясной&lt;/strong&gt; кухне использовано 4 и половина 5 баллона. Так же был не полностью выбран один из 4х баллонов (по накладке начали два баллона), остатков, по ощущениям, могло хватить на 2 полноценных готовки (2/3 дня).&lt;/p&gt;
&lt;p&gt;Итоговый расход: 4.5 * 450 = 2025 гр&lt;/p&gt;
&lt;p&gt;Дневной расход: 2025 / 3 / 12 = &lt;strong&gt;56.25 гр/чел/день&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Дневной (предположительный((если бы использовался выброшенный баллон))) расход: 2025 / 3 / (12 + 2 / 3) = &lt;strong&gt;53.29 гр/чел/день&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Баллона хватало, в среднем, на 7-8 готовок на 4 человек в мясной кухне.&lt;/p&gt;
&lt;p&gt;Видно, что расход в разных кухнях, с разными горелками и разным количество людей различается.&lt;/p&gt;
&lt;h3 id=&#34;в-гостях-на-турслёте-в-лукьяновке-2023&#34;&gt;В гостях на турслёте в Лукьяновке 2023&lt;/h3&gt;
&lt;p&gt;Конец июня. Температура окружающей среды порядка 20-25 градусов.&lt;/p&gt;
&lt;p&gt;Два дня, 3 готовки, поэтому считаем за один полноценный день. Питалось два человека.&lt;/p&gt;
&lt;p&gt;Питание: два приёма готовых блюд от Кронидов, один приём - полноценная готовка риса. Плюс чай. Разогревали на интегрированной системе FireMaple Polaris X5. Для полноценной готовки использовали таганок и котелок Bulin на 2л с радиатором, таганок штатный из комплекта.&lt;/p&gt;
&lt;p&gt;Газ: &amp;ldquo;дихлофос&amp;rdquo; и китайский переходник по типу Kovea Cobra.&lt;/p&gt;
&lt;p&gt;Результат: баллон на старте - &lt;strong&gt;204 г&lt;/strong&gt;, по итогу - &lt;strong&gt;123 г&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Суммарный расход: 204 - 123 = &lt;strong&gt;81 г&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Дневной расход на человека: 81 / 2 / 1 = &lt;strong&gt;40.5 г/человек/день&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Выводы: не готовить, а разогревать/кипятить выгодно, системы с теплообменом - рулят, газ и цангового баллона идёт хуже (ниже давление?).&lt;/p&gt;
&lt;h3 id=&#34;водопады-березняк-и-маруськины-слёзы&#34;&gt;Водопады Березняк и Маруськины слёзы&lt;/h3&gt;
&lt;p&gt;Отчёт: 
&lt;a href=&#34;https://htrd.su/blog/2023/07/23/waterflows-bereznyak-maruskiny-szlezy/&#34;&gt;Водопады Березняк и Маруськины слёзы&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Вторая половина июля. Температура окружающей среды около 25 градусов.&lt;/p&gt;
&lt;p&gt;Два дня. Планировалось 4 готовки, но вышло 3, т.е. поноценный день. Полноценное питание с чаем на двух человек.&lt;/p&gt;
&lt;p&gt;Питание: один приём лапша яичная быстрой (3 минуты) варки, &amp;ldquo;гнёзда&amp;rdquo; (плюс сухой соус и тушёшка от Кронидов), один приём - готовое блюдо от Кронидов и завтрак - каша 5 злаков (нужно варить 3 минуты, но просто запарили на 8 минут). Естественно - чай. Разогревали на интегрированной системе FireMaple Polaris X5. Использовали только стандартный котелок.&lt;/p&gt;
&lt;p&gt;Газ: резьбовой, 230 грамм, 
&lt;a href=&#34;https://primalp.com/catalog/ballony_gazovye/tibet_ballon_gazovyy_230gr_/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Тибет&lt;/a&gt;, 25% - пропан, 75% - изобутан.&lt;/p&gt;
&lt;p&gt;Расход баллон на старте весил &lt;strong&gt;366 г&lt;/strong&gt;, в финале - &lt;strong&gt;305 г&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Суммарный расход: 366 - 305 = &lt;strong&gt;61 г&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Расход на человека/день: 61 / 2 / 1 = &lt;strong&gt;30.5 г/чел/день&lt;/strong&gt;. Пусть будет &lt;strong&gt;31 г&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Пока это у меня абсолютный рекорд. Стоит посмотреть изменение расхода по мере уменьшения газа в баллоне.&lt;/p&gt;
&lt;h3 id=&#34;киргизия-2025&#34;&gt;Киргизия 2025&lt;/h3&gt;
&lt;p&gt;Тут сложно делать предположения, так как получилось прикинуть только по первому баллону. Его хватило, грубо на &lt;strong&gt;6+0.3&lt;/strong&gt; готовок еды (0.3 - началась седьмая готовка, но почти сразу пришлось перейти на новый баллон). Плюс рассчитывали на 7 дней, а в результате смогли проскочить маршрут за 5. Поэтому оставлю чисто для ориентировки.&lt;/p&gt;
&lt;p&gt;Раскладка: сухие супы, многие приходилось готовить по 20+ минут, крупы, типа гречки и риса (8 (после закипания, если бросать  в холодную воду) или 12 (если бросать в кипящую воду) и 22 минуты готовки соответственно), утренние каши 100500 злаков (варили заявленные 3 минуты). Делали много чая.&lt;/p&gt;
&lt;p&gt;Газ: резьбовой, 450г, GAS TOURIST STANDARD (зелёный баллон), смесь изобутан, бутан и пропан, но пропорции неизвестны (в некоторых местах фигурируют: пропан 24%, изобутан 60%, бутан 16%). Работал неплохо, что по долинам днём, что утром на Ала-Кёль.&lt;/p&gt;
&lt;p&gt;Горелка: Kovea Camp-1 и, пару раз, горелка системы Firemaple X5 для чая.&lt;/p&gt;
&lt;p&gt;Котлы: Primus  на 3л с теплообменником и стандартный от системы Firemaple X5.&lt;/p&gt;
&lt;p&gt;Так как засекли расход только одного, первого баллона, то считаем полный расход &lt;strong&gt;450 г&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Расход на человека/день: &lt;/p&gt;
$$450 / \dfrac{6 + 0.3}{3} / 4 = 53.57, г/чел/день$$&lt;p&gt; Пусть будет &lt;strong&gt;54 г/чел/день&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Понятно, что на большей дистанции расход мог бы получиться и меньше, но что имеем. Видно, что разваривание супов требует изрядного времени и скорее всего этот момент нужно корректировать: делать супы самосборными и сублимированных продуктов (на Ozon можно без проблем найти, например, сушёный картофель кубиками). В целом расход выше, чем на Саянах, хотя использовались и более энергоэффективные  котлы. Хотя было замечено, что факел горелки Camp-1 часто бил не в центр котла и расползался на радиатор, а бил в саму защиту радиатора: возможно стоит присмотреться к этому моменту. В любом случае, расчёт закладывал 45 г/чел/день, если бы мы шли маршрут все эти дни, газа могло бы не хватить, поэтому нужно учитывать, что если есть готовые сухие супы, то газа закладывать не меньше 55 г/чел/день, либо оптимизировать систему готовки.&lt;/p&gt;
&lt;h3 id=&#34;традиционная-читинза-2025&#34;&gt;Традиционная Читинза, 2025&lt;/h3&gt;
&lt;p&gt;Днём, по ощущениям было не меньше 15-20 градусов. Вечером и утром было холоднее, но не сильно. По прогнозу в Партизанске обещали около 9 градусов.&lt;/p&gt;
&lt;p&gt;4 полноценные готовки на четырёх человек. Плюс дополнительно грели чай в родном котле Firemaple X5. Считаю, что дней было:
&lt;/p&gt;
$$\dfrac{4 + 0.3}{3}$$&lt;p&gt;
4 - это число полных готовок
0.3 - это дополнительный чай: &amp;ldquo;треть готовки&amp;rdquo;.
делим на 3 - это число готовок в день, типа нормировка.&lt;/p&gt;
&lt;p&gt;Раскладка: запариваемый рис, лапша пятиминутка и разогрев Кронидов, каша 100500 злаков (тоже запариваю на кипятке) и одна готовка супа харчо на дегидрированных продуктах. Ну и чай, около 2л на каждый приём.&lt;/p&gt;
&lt;p&gt;Газ: резьбовой баллон с перезалитым газом из цангового, чисто для удобства. Смесь &amp;ldquo;летняя&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Горелка: Firemaple X5,  котёл Bulin 2 л (с радиатором) на таганке и родной для чая.&lt;/p&gt;
&lt;p&gt;На старте в баллоне было &lt;strong&gt;230&lt;/strong&gt; г газа нетто. На финише осталось около &lt;strong&gt;20&lt;/strong&gt; грамм (по факту чуть больше).&lt;/p&gt;
&lt;p&gt;Суммарный расход: 230 - 20 = &lt;strong&gt;210 г&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Расход на человека/день: &lt;/p&gt;
$$210 / \dfrac{4 + 0.3}{3} / 4 = 36.63, г/чел/день$$&lt;p&gt; Пусть будет &lt;strong&gt;37 г/чел/день&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Расход больше, чем на родном котле при готовке на двух человек, но вполне себе скромный.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Qt5, OpenGL и Ubuntu/Mint</title>
      <link>https://htrd.su/blog/2015/08/28/mint/</link>
      <pubDate>Fri, 28 Aug 2015 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2015/08/28/mint/</guid>
      <description>&lt;p&gt;Временами, при сборке ловится такое:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/usr/bin/ld: cannot find -lGL
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;collect2: error: ld returned &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt; status
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;При этом в системе наблюдается такое:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ locate libGL.so
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/usr/lib/i386-linux-gnu/mesa/libGL.so.1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/usr/lib/i386-linux-gnu/mesa/libGL.so.1.2.0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/usr/lib/insync/libGL.so.1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/usr/lib/nvidia-346-updates/libGL.so
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/usr/lib/nvidia-346-updates/libGL.so.1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/usr/lib/nvidia-346-updates/libGL.so.346.82
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/usr/lib/x86_64-linux-gnu/mesa/libGL.so
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/usr/lib/x86_64-linux-gnu/mesa/libGL.so.1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/usr/lib/x86_64-linux-gnu/primus/libGL.so.1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/usr/lib32/nvidia-346-updates/libGL.so
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/usr/lib32/nvidia-346-updates/libGL.so.1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/usr/lib32/nvidia-346-updates/libGL.so.346.82
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Т.е. вроде всё есть, но чего-то не хватает. А не хватает того, что они живут в директориях, которые не видны линковщику. Для рантайма средство есть через aternatives:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;x86_64-linux-gnu_gl_conf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;x86_64-linux-gnu_egl_conf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Для девелопмента должен стоять пакет &lt;code&gt;libgl1-mesa-dev&lt;/code&gt;. После его установки станет так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ ls -l /usr/lib/x86_64-linux-gnu/libGL.so
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;lrwxrwxrwx 1 root root 13 марта 12 08:47 /usr/lib/x86_64-linux-gnu/libGL.so -&amp;gt; mesa/libGL.so
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Проблема в том, что пакет стоит, а файла нет&amp;hellip; Скорее всего были какие-то нюансы при обновлении или ещё чего. Лечится:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt-get install --reinstall libgl1-mesa-dev
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Обновлённый графический стек в Ubuntu/Mint</title>
      <link>https://htrd.su/blog/2015/08/12/mint/</link>
      <pubDate>Wed, 12 Aug 2015 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2015/08/12/mint/</guid>
      <description>&lt;p&gt;Собственно, не только стек, но и ядро 3.19&lt;/p&gt;
&lt;p&gt;Основная ссылка: 
&lt;a href=&#34;http://www.opennet.ru/opennews/art.shtml?num=42744&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.opennet.ru/opennews/art.shtml?num=42744&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Команда для обновления:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt-get install --install-recommends linux-generic-lts-vivid xserver-xorg-core-lts-vivid xserver-xorg-lts-vivid xserver-xorg-video-all-lts-vivid xserver-xorg-input-all-lts-vivid libwayland-egl1-mesa-lts-vivid
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Стоит отметить, что при наличии PPA xorg-edgers у вас не получится обновиться: нужно сначала вычистить этот PPA и все установленные из него пакеты заменить на дистрибутивные. Но воспользоваться для этого ppa-purge не получится: удивитесь количеству конфликтов.&lt;/p&gt;
&lt;p&gt;Я делал вручную по следующему алгоритму&amp;hellip;&lt;/p&gt;
&lt;p&gt;&amp;lt;WRAP center round alert 60%&amp;gt;
ВНИМАНИЕ!!! СЛЕДУЙТЕ ДАННЫМ ИНСТРУКЦИЯМ ТОЛЬКО В СЛУЧАЕ, ЕСЛИ ВЫ РЕАЛЬНО ПОНИМАЕТЕ, ЧТО ДЕЛАЕТЕ. УБИТЬ СИСТЕМУ ТАК ПРОЩЕ ПРОСТОГО.
&lt;/WRAP&gt;&lt;/p&gt;
&lt;p&gt;Перво-наперво: выполняйте команды из чистой консоли, а не из терминала. Если вы не понимаете о чём речь, лучше тут и остановиться.&lt;/p&gt;
&lt;p&gt;Далее, для простоты на x86_64 системах стоит удалить i386 пакеты - они ставились, например, при установке Skype, TeamViewer или Wine. Соответсвенно, сами программы тоже снесутся. На всякий случай стоит сохранить список:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dpkg -l &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep :i386 &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; awk &lt;span class=&#34;s1&#34;&gt;&amp;#39;{print $2}&amp;#39;&lt;/span&gt; &amp;gt; i386_list.txt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;После чего нужно их удалить:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dpkg -l &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep :i386 &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; awk &lt;span class=&#34;s1&#34;&gt;&amp;#39;{print $2}&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs sudo apt-get remove
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Нет стоит использовать purge на этой стадии.&lt;/p&gt;
&lt;p&gt;Затем нужно удалить в настройках apt репозиторий xorg-edgers и обновить список пакетов:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt-get update
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;После, нужно заменить все пакеты в названии которых (точнее версии) содержатся слова &lt;code&gt;xedgers&lt;/code&gt; ,&lt;code&gt;sarvatt&lt;/code&gt; и &lt;code&gt;ricotz&lt;/code&gt;, а так же пакеты:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ppa-purge&lt;/li&gt;
&lt;li&gt;wayland&lt;/li&gt;
&lt;li&gt;i915
которые содержатся в данном репозитории, но не соответствует правилам вышеприведённым правилам именования, на пакеты из основного репозитория.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Сделать этом можно в два этапа. Сначала удаляем пакеты игнорируя все зависимости:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dpkg -l &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep &lt;span class=&#34;s1&#34;&gt;&amp;#39;xedgers&amp;lt;br/&amp;gt;|sarvatt&amp;lt;br/&amp;gt;|ricotz&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; awk &lt;span class=&#34;s1&#34;&gt;&amp;#39;{print $2}&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs sudo dpkg -r --force-depends ppa-purge wayland i915
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Затем восстановить поломанные зависимости:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt-get install -f
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Поставятся уже дистрибутивные пакеты.&lt;/p&gt;
&lt;p&gt;После этого можно восстановить i386 пакеты и доставить пакеты &lt;code&gt;ppa-purge&lt;/code&gt;, &lt;code&gt;i915&lt;/code&gt;, если необходимо.&lt;/p&gt;
&lt;p&gt;После данных действий, можно будет обновить стек xorg.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>C&#43;&#43;11: std::error_code &amp; std::error_condition в GCC 4.8/4.9 и 5.1</title>
      <link>https://htrd.su/blog/2015/08/06/4.9_i_5.0/</link>
      <pubDate>Thu, 06 Aug 2015 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2015/08/06/4.9_i_5.0/</guid>
      <description>&lt;p&gt;Кусок кода:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ecod&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;make_error_code&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;errc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;resource_unavailable_try_again&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;econ&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;make_error_condition&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;errc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;resource_unavailable_try_again&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;assert&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ecod&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;econ&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Согласно документации ассерт не должен срабатывать. Компилятор GCC 4.8 и 4.9 в Linux Mint собирает код и выдаёт такое при запуске:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ ./webserver
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;webserver: webserver.cpp:661: int main(int, char**): Assertion `ecod == econ&amp;#39; failed.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Aborted
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Внезапно.&lt;/p&gt;
&lt;p&gt;GCC 5.1 собирает и нормально обрабатывает ситуацию.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Переключение входов в UAC</title>
      <link>https://htrd.su/blog/2015/07/23/perekljuchenie_vxodov_v_uac/</link>
      <pubDate>Thu, 23 Jul 2015 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2015/07/23/perekljuchenie_vxodov_v_uac/</guid>
      <description>&lt;p&gt;В спеке USB Audio Class есть описание чудного компонента - &amp;ldquo;Selector Unit (SU)&amp;rdquo;, который позволяет переключать несколько входов на один выход. Терминах USB спецификации: несколько Input Terminals (IT) к одному Output Terminal (OT). Сразу отмечу, что к каждому юниту может быть прикреплён строковый дескриптор, который его описывает. Если такое поведение не нужно, то ставится ноль и используется имя соответствующей USB функции (UAC в нашем случае) или устройства как такового, если дескриптор для функции тоже не задан, в общем - иерархия.&lt;/p&gt;
&lt;p&gt;Но самый смак, как он обслуживается в разных операционных системах. Рассмотрим триаду: Windows (конкретно Win8), Linux (Ubuntu 14.04), MacOSX (TBD).&lt;/p&gt;
&lt;h2 id=&#34;windows&#34;&gt;Windows&lt;/h2&gt;
&lt;p&gt;У вас 16 входов, между которыми нужно переключаться без потери стрима? Получите 16 отдельных устройств для записи с одинаковыми именами к которым система сама добавит #1, #2 и так далее, начиная со второго! Основой для имени будет выбран тип терминала (Микрофон, к примеру) и имя функции (ну или устройства)! Причём переключаться можно путём выбора дефолтного устройства для записи. Остальные устройства помечаются при этом как временно недоступные. Windows лучше знает, что показывать пользователю: вдруг производитель железки какую каку в имени написал!&lt;/p&gt;
&lt;p&gt;UAA появилась ещё в XP, а воз почти и не тронулся. Прекрасный UI.&lt;/p&gt;
&lt;h2 id=&#34;linux&#34;&gt;Linux&lt;/h2&gt;
&lt;p&gt;Стандартный контрол звука в Юнити входы не увидел. Но показал честно одно устройство. Откуда будет идти звук - гадай (привет pulseaudio!). GNOME Alsa Mixer - вообще какую-то муть вывел. А вот консольный alsamixer, правильно отобразил карту, а при выборе её - селектор для входов. При этом корректно отобразились строковые описания входов. Как обычно для Linux: UI отстрой, консоль рулит!&lt;/p&gt;
&lt;p&gt;Возможно - это кривые настройки у убунты. Сегодня проверю на Mint. Но универсальный и самый дружественный способ один: выбрать в alsamixer.&lt;/p&gt;
&lt;h2 id=&#34;mac-os-x&#34;&gt;Mac OS X&lt;/h2&gt;
&lt;p&gt;Версию уточню. Сам не любитель маков. НО! Это единственная система в которой это сделано для человеков: устройство отображается одно, к нему подписывается сколько у него есть входов и выходов и даётся возможность выбрать вход, если он переключается через Selector Unit. Блеск.&lt;/p&gt;
&lt;p&gt;Завтра уточню по поводу имён, но, вроде как, аналогично alsamixer, отображает корректно.&lt;/p&gt;
&lt;h2 id=&#34;послесловие&#34;&gt;Послесловие&lt;/h2&gt;
&lt;p&gt;А не будет его. Сами выводы делайте. Лучше ссылок чуток накидаю:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://developer.apple.com/library/mac/technotes/tn2274/_index.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Technical Note TN2274: USB Audio on the Mac&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.thesycon.de/deu/usb_audiodriver.shtml&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;USB Audio 2.0 Class Driver for Windows&lt;/a&gt; - да, из коробки её нету. В Linux есть, в Маках есть, а в Windows нет. Выкусите. Пруфы: 
&lt;a href=&#34;https://msdn.microsoft.com/en-us/library/windows/hardware/dn641625%28v=vs.85%29.aspx&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;раз&lt;/a&gt;, 
&lt;a href=&#34;https://msdn.microsoft.com/en-us/library/windows/hardware/ff538820%28v=vs.85%29.aspx&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;два (отсюда по двум редиректам пришел к пункту раз)&lt;/a&gt;, 
&lt;a href=&#34;http://answers.microsoft.com/en-us/insider/forum/insider_wintp-insider_devices/windows-support-for-usb-audio-20/0d633b9f-3193-4c63-8654-fb10b3614a04?auth=1&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;три&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.usb.org/developers/docs/devclass_docs/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Спеки на USB классы&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Обзорные статьи по UAC:
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://electronix.ru/forum/index.php?act=Attach&amp;amp;type=post&amp;amp;id=19450&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://electronix.ru/forum/index.php?act=Attach&amp;type=post&amp;id=19450&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://florian.nouwt.com/wiki/index.php/USB_Audio_Class#Selector_Unit&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://florian.nouwt.com/wiki/index.php/USB_Audio_Class#Selector_Unit&lt;/a&gt; - тут иконки для рисования схем можно урвать, жаль, что не SVG :)&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://doc.micrium.com/display/USBDDOCV403/Audio&amp;#43;Class&amp;#43;Overview&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://doc.micrium.com/display/USBDDOCV403/Audio+Class+Overview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://york.wikidot.com/usb-audio&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://york.wikidot.com/usb-audio&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>AvCpp: API-2 rework, веха вторая</title>
      <link>https://htrd.su/blog/2015/07/21/avcpp_api-2_rework_vexa_vtoraja/</link>
      <pubDate>Tue, 21 Jul 2015 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2015/07/21/avcpp_api-2_rework_vexa_vtoraja/</guid>
      <description>&lt;p&gt;Продолжаем отслеживать судьбу изменений, описанных в 
&lt;a href=&#34;https://htrd.su/blog/2015/03/29/avcpp_api-2_rework_vexa_pervaja/&#34;&gt;post/2015/03/29/avcpp_api-2_rework_vexa_pervaja&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Как обычно, объём работ отличается от того, что было запланировано. Итак, что сделано:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Работа со словарями и поддержка оных во всех местах, где только можно. Это вызвало необходимость разнести открытие входного потока и поиск информации о стриме (
&lt;a href=&#34;https://htrd.su/blog/2015/07/20/snova_ffmpeg_i_low-latency/&#34;&gt;post/2015/07/20/snova_ffmpeg_i_low-latency&lt;/a&gt;). Как следствие, добавился новый вызов: &lt;code&gt;av::FormatContext::findStreamInfo()&lt;/code&gt;. Он может принимать коллекцию словарей для каждого стрима в потоке.&lt;/li&gt;
&lt;li&gt;Начата работа над фильтрами. Уже появилась базовая инфраструктура. Но пока нет понимания в каком виде оно должно получиться на выходе.&lt;/li&gt;
&lt;li&gt;В рамках чистки кода тотально переработана обработка ошибок. Теперь это делается через &lt;code&gt;std::error_code&lt;/code&gt;, который передаётся опциональным аргументом в те функции фейл которых может приводить к неоднозначностям в будущем. Если переменная для кода ошибки не передана, будет выброшено исключение &lt;code&gt;av::Exception&lt;/code&gt; которое будет содержать данный код. Планируется, что набор исключений расширится под каждую сущность. Данные изменений повлекли достаточно сильные изменений в API, требующие изменений в коде приложений, которые их используют. При обработке ошибок стоит учитывать категорию оных. На дынный момент используется, как минимум три:
* &lt;code&gt;avcpp_category()&lt;/code&gt; - для внутренних ошибок AvCpp
* &lt;code&gt;ffmpeg_category()&lt;/code&gt; - для ошибок, пришедших от FFmpeg
* &lt;code&gt;system_category()&lt;/code&gt; - для системных ошибок, в основном так рапортуются ошибки выделения памяти при помощи встроенных &lt;code&gt;av_alloc()&lt;/code&gt; (когда владение принимается FFmpeg&amp;rsquo;ом и он сам освобождает, как следствие, использовать &lt;code&gt;new&lt;/code&gt;/&lt;code&gt;new[]&lt;/code&gt; нет возможности). Целесообразность использовать &lt;code&gt;std::bad_alloc&lt;/code&gt; обдумывается.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ну и главное, реорганизация бранчей:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;все наработки первой вехи выделены в отдельный бранч &lt;code&gt;api-2.0&lt;/code&gt; (исправляются только ошибки)&lt;/li&gt;
&lt;li&gt;старый мастер стал бранчем &lt;code&gt;api-legacy&lt;/code&gt; (для совместимости, самостоятельно тут ничего не исправляется, только принимаются мерж-реквесты)&lt;/li&gt;
&lt;li&gt;вся разработка перемещена на бранч &lt;code&gt;master&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Что осталось:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Интерфейс опций&lt;/li&gt;
&lt;li&gt;Доделать фильтры&lt;/li&gt;
&lt;li&gt;Ревизия и чистка кода в т.ч. примеров.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Планируется, что это будет сделано в следующей, третье вехе.&lt;/p&gt;
&lt;p&gt;Как обычно, за отзывы, багрепорты и пул-реквесты буду благодарен.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Новые интересные фичи в Qt Creator Master</title>
      <link>https://htrd.su/blog/2015/07/20/novye_interesnye_fichi_v_qt_creator_master/</link>
      <pubDate>Mon, 20 Jul 2015 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2015/07/20/novye_interesnye_fichi_v_qt_creator_master/</guid>
      <description>&lt;p&gt;Для начала: создал репозиторий PPA, куда буду с разной периодичностью бубликовать снапшот QtC из master-бранча. Кроме того, туда же поместил свой плагин 
&lt;a href=&#34;https://github.com/h4tr3d/cmakeprojectmanager2&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;CMakeProjectManager2&lt;/a&gt;:&lt;br/&gt;&lt;br/&gt;

&lt;a href=&#34;https://launchpad.net/~adrozdoff/&amp;#43;archive/ubuntu/qtcreator-git&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://launchpad.net/~adrozdoff/+archive/ubuntu/qtcreator-git&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Установка:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo add-apt-repository ppa:adrozdoff/qtcreator-git
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt-get update
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt-get install qtcrator-git qtcreator-git-plugin-cmake2
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Для разработчиков плагинов будет полезен пакет &lt;code&gt;qtcretor-git-dev&lt;/code&gt; который ставит в &lt;code&gt;/usr/src/qtcreator-git&lt;/code&gt; заголовочники и .pri файлы. Пример использования можно поглядеть в спеках отстройки qtcreator-git-plugin-cmake2:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt-get install qtcrator-git-dev
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ну а теперь фичи.&lt;/p&gt;
&lt;h2 id=&#34;кодовая-модель&#34;&gt;Кодовая модель&lt;/h2&gt;
&lt;p&gt;Уже давно появились приятные дополнительные инструменты вроде &amp;ldquo;Reparse Externally Changed Files&amp;rdquo; (удобно при наличии внешних генераторов, тот же протобуф) и &amp;ldquo;Inspect C++ Code Model&amp;hellip;&amp;rdquo;, позволяющая понять, что не так при парсинге и отослать более вменяемый отчёт.&lt;/p&gt;
&lt;p&gt;Сравнительно же недавно появилась возможность задавать индивидуально для каждого файла дополнительные директивы препроцессора: &amp;ldquo;Additional Preprocessor Directives&amp;hellip;&amp;rdquo;. Очень удобная штука, когда парсинг почему-то затыкается (например какая-то опция может подхватываться из переданных CXXFLAGS) - обозначил и вперёд! Или правишь код на одной системы, а нужно исправить блок для другой: определяем &amp;ldquo;#define WIN32&amp;rdquo; и пробуем что получилось. Для быстрого доступа служит иконка с &amp;ldquo;#&amp;rdquo; в верхнем правом углу рядом с номером строки и колонки.&lt;/p&gt;
&lt;h2 id=&#34;gui&#34;&gt;GUI&lt;/h2&gt;
&lt;p&gt;Тоже появилось сравнительно давно, многие просили: открытие в новом окне (Window -&amp;gt; Open in New Window иди Ctrl+E,4). Удобно при навигации и рефакторинге при наличии нескольких мониторов.&lt;/p&gt;
&lt;h2 id=&#34;cmake&#34;&gt;CMake&lt;/h2&gt;
&lt;p&gt;Про свой плагин не пишу. В мейнстриме появилась возможность задавать не один фиксированный cmake, а разные для разных наборов инструментов (Kits).&lt;/p&gt;
&lt;h2 id=&#34;external-tools&#34;&gt;External Tools&lt;/h2&gt;
&lt;p&gt;Данный функционал оооочень давно в QtC, но очень многие его не замечают. А ведь очень много проблем можно решить с его помощью. К примеру: править исходники локально, а потом засабмитить на билд-сервер и выполнить на нём процедуру билда. Если чуть поднапрячься, можно и парсинг ошибок разобрать.&lt;/p&gt;
&lt;p&gt;Либо вызвать cppcheck на текущий проект, либо&amp;hellip; что в голову взбредёт.&lt;/p&gt;
&lt;h2 id=&#34;чего-хотелось-бы-но-нет&#34;&gt;Чего хотелось бы, но нет&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Настройки лицензии (шапки для новых файлов) индивидуально для проекта.&lt;/li&gt;
&lt;li&gt;Замена отдельных частей Kit индивидуально для проекта&lt;/li&gt;
&lt;li&gt;Более гибкая система настройки устройств для Baremetal: сейчас устройство намертво привязано к Kit со своими настройками доступа к, примеру, OpenOCD и gdb. Вот для Cypress SDK нужно как минимум два: для основной прошивки и для Bootloader.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Засим пока всё.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Снова FFmpeg и low-latency</title>
      <link>https://htrd.su/blog/2015/07/20/snova_ffmpeg_i_low-latency/</link>
      <pubDate>Mon, 20 Jul 2015 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2015/07/20/snova_ffmpeg_i_low-latency/</guid>
      <description>&lt;p&gt;В дополнение к моей прошлой заметке: 
&lt;a href=&#34;https://htrd.su/blog/2014/09/24/x264_low_latency/&#34;&gt;post/2014/09/24/x264_low_latency&lt;/a&gt; пару статей на эту же тему, но без привязки к x264:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://iosvideokit.com/2014/02/13/minimizing-the-initial-delay/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Minimizing the initial delay&lt;/a&gt; - профилировка цепочки запуска входного потока&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://iosvideokit.com/2014/02/13/minimizing-the-latency-in-realtime-communication/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Minimizing the latency in realtime communication&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Стоит отметить, что в первой статье наихудшие показатели показала &lt;code&gt;avformat_find_stream_info()&lt;/code&gt;, эта же функция не понравилась коллеге на работе, но без неё могут быть такие артефакты:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ошибки при чтении фрейма (&lt;code&gt;av_read_frame()&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;может случаться примерно такое: 
&lt;a href=&#34;https://github.com/h4tr3d/avcpp/pull/7#issuecomment-122670538&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/h4tr3d/avcpp/pull/7#issuecomment-122670538&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;может ещё чего.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;В общем, 
&lt;a href=&#34;http://www.ffmpeg.org/doxygen/2.7/group__lavf__decoding.html#details&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;согласно документации&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The above code attempts to allocate an AVFormatContext, open the specified file (autodetecting the format) and read the header, exporting the information stored there into s. Some formats do not have a header or do not store enough information there, so it is recommended that you call the avformat_find_stream_info() function which tries to read and decode a few frames to find missing information.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Суть: просто открыть файл не всегда достаточно, что бы делать предположения о некоторых параметрах файла. Походу, с этим нужно просто смириться или попытаться предпринять меры из ссылки 1, а именно зарезать параметры &lt;code&gt;probesize&lt;/code&gt; и &lt;code&gt;analyzeduration&lt;/code&gt; в 32 (минимально допустимое значение).&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>CMake для Cypress FX3</title>
      <link>https://htrd.su/blog/2015/07/08/cmake_dlja_cypress_fx3/</link>
      <pubDate>Wed, 08 Jul 2015 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2015/07/08/cmake_dlja_cypress_fx3/</guid>
      <description>&lt;p&gt;Слишком много параметров сборки появилось. Поэтому на досуге да под эгидой нового продукта наваял правила для сборки кода при помощи CMake: 
&lt;a href=&#34;https://github.com/h4tr3d/fx3-cmake&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/h4tr3d/fx3-cmake&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Под виндой нужно обязательно указывать генератор: при использовании &lt;code&gt;cs-make&lt;/code&gt; поставляемого вместе с SDK это &amp;ldquo;MinGW Makefiles&amp;rdquo;.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Скользящее среднее</title>
      <link>https://htrd.su/blog/2015/04/24/skolzjaschee_srednee/</link>
      <pubDate>Fri, 24 Apr 2015 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2015/04/24/skolzjaschee_srednee/</guid>
      <description>&lt;p&gt;Сегодня для себя открыл:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;a href=&#34;http://habrahabr.ru/company/nerepetitor/blog/256317/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://habrahabr.ru/company/nerepetitor/blog/256317/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://ru.wikipedia.org/wiki/%D0%A1%D0%BA%D0%BE%D0%BB%D1%8C%D0%B7%D1%8F%D1%89%D0%B0%D1%8F_%D1%81%D1%80%D0%B5%D0%B4%D0%BD%D1%8F%D1%8F&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://ru.wikipedia.org/wiki/%D0%A1%D0%BA%D0%BE%D0%BB%D1%8C%D0%B7%D1%8F%D1%89%D0%B0%D1%8F_%D1%81%D1%80%D0%B5%D0%B4%D0%BD%D1%8F%D1%8F&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;хотя, как оказывается, уже использовал раньше (в варианте простого скользящего). Только не знал, что это общеизвестный приём.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>AvCpp: API-2 rework, веха первая</title>
      <link>https://htrd.su/blog/2015/03/29/avcpp_api-2_rework_vexa_pervaja/</link>
      <pubDate>Sun, 29 Mar 2015 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2015/03/29/avcpp_api-2_rework_vexa_pervaja/</guid>
      <description>&lt;p&gt;Для начала, что такое 
&lt;a href=&#34;https://github.com/h4tr3d/avcpp&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;AvCpp&lt;/a&gt; - это C++ враппер над FFmpeg, позволяющий несколько упростить работу непосредственно с функциями FFmpeg.&lt;/p&gt;
&lt;p&gt;Написание враппера помогло очень хорошо разобраться во внутренностях FFmpeg, а так же в большей части скрыть некоторые нюансы работы, которые неподготовленному человеку могут встать в долгие часы отладки и попытках понять, что он сделал не так.&lt;/p&gt;
&lt;p&gt;Изначально структура классов опиралась на Xuggle API, ведь когда начинал его делать, многое не понимал - почему оно так. Со временем такой подход перестал мне нравится, начали вылазить всякие неприятные оверхеды, баги. Так появился подпроект API-2, цели которого:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Уйти где только можно от shared_ptr (это получилось почти везде).&lt;/li&gt;
&lt;li&gt;Использовать по максимуму возможности новых версий FFmpeg, где появился reference-counting для AVFrame/AVPacket, при этом предоставить возможности создавать &amp;ldquo;тяжёлые&amp;rdquo; копии, где нужно.&lt;/li&gt;
&lt;li&gt;Более логично организовать мапинг сущностей FFmpeg в AvCpp, к примеру, если раньше AVCodecContext мапился в av::StreamCoder, то теперь av::CodecContext, аналогично для AVFormatContext (av::Container vs av::FormatContext).&lt;/li&gt;
&lt;li&gt;Корректно реализовать аудио-ресемплер&lt;/li&gt;
&lt;li&gt;Добавить побольше примеров использования API2&lt;/li&gt;
&lt;li&gt;Работа с av_options для поддерживаемых сущностей&lt;/li&gt;
&lt;li&gt;Поддержка передачи параметров через словари&lt;/li&gt;
&lt;li&gt;Тотальная переработка фильтров&lt;/li&gt;
&lt;li&gt;Чистка кода, удаление ненужных сущностей&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;На текущий момент на бранче api-2 уже лежат почти все эти наработки. Нереализованными остались последние 4 пункта. Приэтому, попутно, устранено несколько багов, особенно связанных с последовательностью уничтожения разных объектов (например Stream2 и FormatContext: стримом владеет FormatContext, Stream2 только предоставляет доступ к нему, при этом, даже если уничтожить объект контекста, объект Stream2 может теперь корректно рапортовать, что он инвалидировался).&lt;/p&gt;
&lt;p&gt;Вторая веха, судя по всему, будет реализация поддержки AVOptions/AVDict, третья веха - фильтры (к слову их сейчас нет вообще в рамках API-2). Последующие вехи пока не сформированы, скорее всего нужно будет подумать над возможностями использования аппаратного ускорения для декодирования (оно достаточно некрасиво и в самом FFmpeg реализовано - нужно делать много телодвижений).&lt;/p&gt;
&lt;p&gt;В любом случае, я уже настоятельно рекомендую начинать использовать ветку api-2. В скором времени она заместит master-ветку, а текущий мастер переедет на ветку legacy.&lt;/p&gt;
&lt;p&gt;За отзывы, багрепорты и пул-реквесты буду благодарен.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Внешний вид шрифтов Qt 5.4.1 в LinuxMint/Cinnamon</title>
      <link>https://htrd.su/blog/2015/03/02/cinnamon/</link>
      <pubDate>Mon, 02 Mar 2015 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2015/03/02/cinnamon/</guid>
      <description>&lt;p&gt;В Qt 5.4.1 вернули рендеринг шрифтов в Linux а-ля Qt4. Поставил Qt 5.4.1 (
&lt;a href=&#34;https://launchpad.net/~beineri&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;отсюда&lt;/a&gt;), собрал Qt Creator из git, запустил, шрифты явно не похожи на то, что используется в системе (Linux Mint 17.x/Cinnamon).&lt;/p&gt;
&lt;p&gt;Поиск в инетрнетах привёл на ссылку: 
&lt;a href=&#34;https://forum.manjaro.org/index.php?topic=14931.0&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://forum.manjaro.org/index.php?topic=14931.0&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Если коротко, то установка переменной окружения:
export XDG_CURRENT_DESKTOP=GNOME&lt;/p&gt;
&lt;p&gt;волшебным образом преобразует внешний вид приложения. Будет хорошим тоном прописать это в qtcreator.sh или аналогичный враппер для приложения, а не делать общесистемным параметром.&lt;/p&gt;
&lt;p&gt;По умолчанию этот параметр для Cinnamon содержит: X-Cinnamon, что соответствует спекам XDG.&lt;/p&gt;
&lt;p&gt;Стоить отметить, что после перезагрузки всё стало на свои места и без этого параметра. Но если проблема будет проглядываться - попробуйте такой вариант.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>CMakeProjectManager2: улучшения в диалоге конфигурирования (2)</title>
      <link>https://htrd.su/blog/2015/02/19/cmakeprojectmanager2_uluchshenija_v_dialoge_konfigurirovanija_2/</link>
      <pubDate>Thu, 19 Feb 2015 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2015/02/19/cmakeprojectmanager2_uluchshenija_v_dialoge_konfigurirovanija_2/</guid>
      <description>&lt;p&gt;Очередная порция изменений в развитие 
&lt;a href=&#34;https://htrd.su/blog/2015/01/22/cmakeprojectmanager2_uluchshenija_v_dialoge_konfigurirovanija/&#34;&gt;post/2015/01/22/cmakeprojectmanager2_uluchshenija_v_dialoge_konfigurirovanija&lt;/a&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Исправлен креш при создании конфигурации, при указании тулчейн файла, когда он лежит в директории исходников. Изредка креш проявлялся при переключении уже готовых конфигураций.&lt;/li&gt;
&lt;li&gt;Добавлена кнопка обзора для выбора тулчейн-файла. По умолчанию открывается в дереве исходников проекта, если тулчейн выбран в другом месте (к примеру, у вас коллекция тулчейнов независимых от проекта), то открывается в месте, где лежит тулчейн. В быстрые закладки добавляется ссылка на дерево проекта, что бы было можно быстро туда перейти. Закрыта задача 
&lt;a href=&#34;https://github.com/h4tr3d/cmakeprojectmanager2/issues/2&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;#2&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Добавлена возможность очищать кеш при запуске CMake, что бывает необходимо при изменении некоторых параметров, одним из них, к примеру, является &lt;code&gt;CMAKE_TOOLCHAIN_FILE&lt;/code&gt;, другим популярным (особенно при выборе разных версий Qt) является &lt;code&gt;CMAKE_PREFIX_PATH&lt;/code&gt;. Изменение этих параметров без удаления кеша ни к чему не приводит, поэтому добавил параметр &amp;ldquo;Reset cache on CMake run&amp;rdquo;. Стоит отметить, что при изменении тулчейна это действие обязательно, поэтому, если тулчейн поменялся, но этот параметр не включен, то будет выдаваться вопрос: &amp;ldquo;You change toolchain. This action requires CMake cache reset. Continue?&amp;rdquo;. Закрыл задачу 
&lt;a href=&#34;https://github.com/h4tr3d/cmakeprojectmanager2/issues/1&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;#1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;При встроенном редактировании тулчейна теперь открывается не пустое окно, если ничего не было, а пример тулчейна для Mingw. Можно оставлять только опции, задающие компилятор, что бы выбрать нужную версию оно в системе, если их стоит несколько.&lt;/li&gt;
&lt;li&gt;Небольшое косметическое изменение: кнопка Edit стала поменьше.&lt;/li&gt;
&lt;/ol&gt;</description>
    </item>
    
    <item>
      <title>Predeclared ARM Register Names</title>
      <link>https://htrd.su/blog/2015/01/28/predeclared_arm_register_names/</link>
      <pubDate>Wed, 28 Jan 2015 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2015/01/28/predeclared_arm_register_names/</guid>
      <description>&lt;p&gt;Бывает нужно, часто забываю:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;R0–R15&lt;/strong&gt; and &lt;strong&gt;r0–r15&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;c0–c15&lt;/strong&gt; coprocessor registers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;p0–p15&lt;/strong&gt; coprocessor registers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;a1-a4&lt;/strong&gt; scratch registers, synonymous with &lt;strong&gt;r0-r3&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;v1-v8&lt;/strong&gt; variable registers, synonymous with &lt;strong&gt;r4-r11&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;sb&lt;/strong&gt; and &lt;strong&gt;SB&lt;/strong&gt; stack base, synonymous with &lt;strong&gt;r9&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;sl&lt;/strong&gt; and &lt;strong&gt;SL&lt;/strong&gt; stack base, synonymous with &lt;strong&gt;r10&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;fp&lt;/strong&gt; and &lt;strong&gt;FP&lt;/strong&gt; frame pointer, synonymous with &lt;strong&gt;r11&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ip&lt;/strong&gt; and &lt;strong&gt;IP&lt;/strong&gt; intra-procedure call scratch register, synonymous with &lt;strong&gt;r12&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;sp&lt;/strong&gt; and &lt;strong&gt;SP&lt;/strong&gt; stack pointer, synonymous with &lt;strong&gt;r13&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;lr&lt;/strong&gt; and &lt;strong&gt;LR&lt;/strong&gt; link register, synonymous with &lt;strong&gt;r14&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;pc&lt;/strong&gt; and &lt;strong&gt;PC&lt;/strong&gt; program counter, synonymous with &lt;strong&gt;r15&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;s0-s32&lt;/strong&gt; VFP single precision registers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;d0-d16&lt;/strong&gt; VFP double precision registers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;fpsid&lt;/strong&gt; VFP system ID register&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;fpscr&lt;/strong&gt; VFP status and control register&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;fpexc&lt;/strong&gt; VFP exception register&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;wr0-wr16&lt;/strong&gt; WMMX SIMD data registers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;wc0-wc16&lt;/strong&gt; WMMX status and control registers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;wcid&lt;/strong&gt; WMMX coprocessor ID register, synonymous with &lt;strong&gt;wc0&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;wcon&lt;/strong&gt; WMMX control register, synonymous with &lt;strong&gt;wc1&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;wcssf&lt;/strong&gt; WMMX saturation SIMD flags, synonymous with &lt;strong&gt;wc2&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;wcasf&lt;/strong&gt; WMMX arithmetic SIMD flags, synonymous with &lt;strong&gt;wc3&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;wcgr0-wcgr3&lt;/strong&gt; WMMX control general purpose registers, synonymous with &lt;strong&gt;wc8-wc11&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;В дополнение - хороший справочник (armv7tdmi):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.gaw.ru/html.cgi/txt/doc/micros/arm/index.htm&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.gaw.ru/html.cgi/txt/doc/micros/arm/index.htm&lt;/a&gt;, в частности системы команд
&lt;ul&gt;
&lt;li&gt;ARM: 
&lt;a href=&#34;http://www.gaw.ru/html.cgi/txt/doc/micros/arm/asm/asm_arm/index.htm&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.gaw.ru/html.cgi/txt/doc/micros/arm/asm/asm_arm/index.htm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Thumb: 
&lt;a href=&#34;http://www.gaw.ru/html.cgi/txt/doc/micros/arm/asm/arm_thumb/index.htm&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.gaw.ru/html.cgi/txt/doc/micros/arm/asm/arm_thumb/index.htm&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>CMakeProjectManager2: улучшения в диалоге конфигурирования</title>
      <link>https://htrd.su/blog/2015/01/22/cmakeprojectmanager2_uluchshenija_v_dialoge_konfigurirovanija/</link>
      <pubDate>Thu, 22 Jan 2015 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2015/01/22/cmakeprojectmanager2_uluchshenija_v_dialoge_konfigurirovanija/</guid>
      <description>&lt;p&gt;Для тех, кто не в курсе, что такое CMakeProjectManager2, вот ссылка на статью 2012 года: 
&lt;a href=&#34;https://htrd.su/blog/2012/10/17/cmakeprojectmanager2_-_poslednie_izmenenija/&#34;&gt;post/2012/10/17/cmakeprojectmanager2_-_poslednie_izmenenija&lt;/a&gt;. Собственно тогда и были сделаны последние крупные изменения, которых мне хватало до сегодняшнего дня. В остальном была работа по синхронизации кодовой базы с апстримом, что бы плагин продолжал собираться и радовать глаз. Код располагается на GitHub: 
&lt;a href=&#34;https://github.com/h4tr3d/cmakeprojectmanager2&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/h4tr3d/cmakeprojectmanager2&lt;/a&gt;. Инструкции по сборке приложены в 
&lt;a href=&#34;https://github.com/h4tr3d/cmakeprojectmanager2/blob/master/README.txt&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;README.txt&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Итак, как бы ни хотелось, но времени заниматься реализацией TODO листа нет и не предвидится (суть списка: сделать парсер и обойтись без генерации файла для CodeBlocks, а всё остальное уже на это опирается). Но есть и другие задачи. В частности, в сегодняшнем обновлении несколько изменён вид окна &amp;ldquo;Run CMake&amp;rdquo; мастера, а именно:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Добавлена возможность выбирать тип сборки&lt;/li&gt;
&lt;li&gt;Добавлена возможность назначать тулчейн (это файл с настройками среды сборки, особенно актуально для кросс-сборки: 
&lt;a href=&#34;http://www.vtk.org/Wiki/CMake_Cross_Compiling#The_toolchain_file%29&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.vtk.org/Wiki/CMake_Cross_Compiling#The_toolchain_file)&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;По сути, эти параметры служат для задания в более дружественной формы параметров для CMake: &lt;code&gt;-DCMAKE_BUILD_TYPE=&lt;/code&gt; и &lt;code&gt;-DCMAKE_TOOLCHAIN_FILE=&lt;/code&gt; соответственно.&lt;/p&gt;
&lt;p&gt;Про тулчейн немного подробнее. Изначально планировалось три способа его задания:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Автоматическое конструирование на основе Qt Creator Kit&lt;/li&gt;
&lt;li&gt;Ручное задание файла (пока сделано без возможности открытия диалога поиска, только ручной ввод: 
&lt;a href=&#34;https://github.com/h4tr3d/cmakeprojectmanager2/issues/2&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;issue #2&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Инлайн&amp;rdquo; тулчейн: редактирует во встроенном редакторе, при запуске контент сохраняется в директории отстройки под именем &lt;code&gt;QtCreator-toolchain-override.cmake&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Пока вариант на основе Qt Creator Kit выключен. Будет время - доделаю.&lt;/p&gt;
&lt;p&gt;Плюс есть нюанс: согласно документации CMake, смена тулчейна возможно только на новой конфигурации либо на полной очистке текущей (удаления &lt;code&gt;CMakeFiles&lt;/code&gt; и &lt;code&gt;CMakeCache.txt&lt;/code&gt;), поэтому, если замечены изменения настроек тулчейна, производится полное переконфигурирование без использования кеша. Планирую добавить диалог с предупреждением (
&lt;a href=&#34;https://github.com/h4tr3d/cmakeprojectmanager2/issues/1&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;issue #1&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Стоит отметить, что пользовательский ввод параметров сохранён, более того, определяется, если параметр уже задан, то будет использоваться пользовательский.&lt;/p&gt;
&lt;p&gt;Ну и картинка:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2015/01/22/snimok_ehkrana_ot_2015-01-22_12_3a00_3a05.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;PS Анонс на хабре: 
&lt;a href=&#34;http://habrahabr.ru/post/248517/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://habrahabr.ru/post/248517/&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>C&#43;&#43;11: паттерн Transaction</title>
      <link>https://htrd.su/blog/2015/01/12/c_11_pattern_transaction/</link>
      <pubDate>Mon, 12 Jan 2015 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2015/01/12/c_11_pattern_transaction/</guid>
      <description>&lt;p&gt;Переосмысление реализации паттерна 
&lt;a href=&#34;http://insidecpp.ru/patterns/transaction/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Transaction&lt;/a&gt;, опубликованного в 
&lt;a href=&#34;http://insidecpp.ru&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&amp;ldquo;Inside C++&amp;rdquo;&lt;/a&gt;, в рамках стандарта C++11 с &lt;del&gt;блек&amp;hellip;&lt;/del&gt; variadict templates и хранением данных на стеке.&lt;/p&gt;
&lt;p&gt;Итак, что не нравится в оригинальном способе? Мне не нравится скрытое использование Type erasure, которое требует динамической аллокации маленьких кусочков памяти для каждого хранимого параметра. Так что делаем полностью статическую версию, хранение параметров происходит на стеке, параметров любое количество.&lt;/p&gt;
&lt;p&gt;Реализация:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;tuple&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;template&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;typename&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;...&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Args&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Transaction&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;Transaction&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Args&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;...&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;refs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;...),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;n&#34;&gt;vals&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;...)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;~&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Transaction&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;incomplete&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;revert&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;commit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;incomplete&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// Disable copy and allow move
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;n&#34;&gt;Transaction&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Transaction&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;            &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;delete&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;Transaction&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;operator&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Transaction&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;delete&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;Transaction&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Transaction&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;                 &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;Transaction&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;operator&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Transaction&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;      &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;private&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;revert&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;refs&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vals&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tuple&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Args&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;refs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tuple&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Args&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vals&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;bool&lt;/span&gt;                  &lt;span class=&#34;n&#34;&gt;incomplete&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;template&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;typename&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;...&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Args&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Transaction&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;make_transaction&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Args&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;...&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Transaction&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;...);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Angelina&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;float&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;bosom&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;85.3f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;float&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;waist&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;68.5f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;float&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pelvis&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;88.8f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;try&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;trn&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;make_transaction&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;bosom&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;waist&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pelvis&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;   &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Olga&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;bosom&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;102.4f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;waist&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;59.3f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;pelvis&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;92.3f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// ...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;        &lt;span class=&#34;c1&#34;&gt;// Здесь что-то происходит
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;        &lt;span class=&#34;c1&#34;&gt;// ...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;throw&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;runtime_error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Wife is coming!&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;trn&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;commit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;catch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;exception&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Hi, dear!&amp;lt;br/&amp;gt;n&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;endl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Вспомогательная функция &lt;code&gt;make_transaction()&lt;/code&gt; вкупе с &lt;code&gt;auto&lt;/code&gt; позволяет уйти от ручного задания типа хранимых параметров и точного типа транзакции. Для хранения параметров и их начальных значений используется кортеж (появился в C++11).&lt;/p&gt;
&lt;p&gt;Как видим, кода получилось даже меньше, чем в оригинальном варианте при схоже читабельности. Есть возможность реализовать подобное и в рамках C++98/2003, но решение выйдет сильно громоздким (посмотрите как реализацию boost::function для C++98/03).&lt;/p&gt;
&lt;p&gt;Плюсы и минусы паттерна, описанные в оригинальной статье, никуда не уходят.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Плюс&lt;/strong&gt; реализации: отсутствие оверхеда на аллокацию памяти, раздолье для оптимизатора компилятора.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Минус&lt;/strong&gt;: нельзя в динамике добавить параметр в транзакцию, а в embedded может сильно сказаться поглощение стека.&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Временные зоны в Lightning</title>
      <link>https://htrd.su/blog/2014/12/09/vremennye_zony_v_lightning/</link>
      <pubDate>Tue, 09 Dec 2014 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2014/12/09/vremennye_zony_v_lightning/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://ru.wikipedia.org/wiki/Lightning_%28%d0%9f%d0%9e%29%7cLightning&#34; target=&#34;_blank&#34;&gt;Lightning_(ПО)|Lightning&lt;/a&gt;
 мощный календарь для &lt;a href=&#34;https://ru.wikipedia.org/wiki/Thunderbird&#34; target=&#34;_blank&#34;&gt;Thunderbird&lt;/a&gt;
. Вкупе с 
&lt;a href=&#34;https://github.com/Ericsson/exchangecalendar/releases&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Exchange EWS Provider&lt;/a&gt; может явиться полноценной заменой Outlook.&lt;/p&gt;
&lt;p&gt;Беда которую заметил буквально сегодня - сдвинутое время в календаре. Из за нашего перехода на перманентное зимнее время. Оказалось, что расширение содержит свою базу описания временных зон (руки отбить за такое, не даёт им покоя слава Java). И обновляться оно пока не собирается. Решил посмотреть сам.&lt;/p&gt;
&lt;p&gt;Оказалось, что база часовых поясов хранится в sqlite: &lt;code&gt;timezones.sqlite&lt;/code&gt; - ищем этот файлик в одной из поддиректорий в директории extensions в профиле TB.&lt;/p&gt;
&lt;p&gt;Для всех временных зон обновления не дам, но покажу, на примере Владивостока, как их можно поменять.&lt;/p&gt;
&lt;p&gt;Для начала закрываем TB.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPD:&lt;/strong&gt; описание ниже - изначальный путь решения проблемы, кто не понимает о чём тут речь, лучше сразу перейти в конец заметки и воспользоваться sqlitebrowser.&lt;/p&gt;
&lt;p&gt;Вторым шагом, делаем дамп текущей базы (не отдельной зоны, календарь очень придирчив к переносу строк в VCARD, так будет проще)&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sqlite3 timezones.sqlite .dump &amp;gt; timezones.dump
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;По строке &amp;lsquo;Asia/Vladivostok&amp;rsquo; находим нужную зону:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;INSERT&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;INTO&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;tz_data&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;VALUES&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Asia/Vladivostok&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;NULL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;+0431000&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;+1315600&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;BEGIN:VTIMEZONE
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;TZID:Asia/Vladivostok
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;X-LIC-LOCATION:Asia/Vladivostok
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;BEGIN:STANDARD
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;TZOFFSETFROM:+1100
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;TZOFFSETTO:+1100
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;TZNAME:VLAT
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;DTSTART:19700101T000000
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;END:STANDARD
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;END:VTIMEZONE
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Видим некорректные значение полей:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;TZOFFSETFROM:+1100
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;TZOFFSETTO:+1100
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Исправляем их на &lt;code&gt;+1000&lt;/code&gt;, итог получается такой:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;INSERT&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;INTO&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;tz_data&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;VALUES&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Asia/Vladivostok&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;NULL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;+0431000&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;+1315600&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;BEGIN:VTIMEZONE
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;TZID:Asia/Vladivostok
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;X-LIC-LOCATION:Asia/Vladivostok
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;BEGIN:STANDARD
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;TZOFFSETFROM:+1000
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;TZOFFSETTO:+1000
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;TZNAME:VLAT
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;DTSTART:19700101T000000
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;END:STANDARD
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;END:VTIMEZONE
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Теперь грохаем базу:
rm timezones.sqlite&lt;/p&gt;
&lt;p&gt;И восстанавливаем её из нашего отредактированного дампа:
cat timezones.dump | sqlite3 timezones.sqlite&lt;/p&gt;
&lt;p&gt;Для проверки, запускаем TB из терминала, смотрим, что нет ругани вроде такой:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Exception:[Exception... &amp;#34;Component returned failure code: 0x804a0100 [calIICSService.parseICS]&amp;#34;  nsresult: &amp;#34;0x804a0100 (&amp;lt;unknown&amp;gt;)&amp;#34;  location: &amp;#34;JS frame :: resource:*calendar/modules/calUtils.jsm -&amp;gt; file:*/home/user/.thunderbird/8q56g6ui.default/extensions/%7Be2fda1a4-762b-4020-b5ad-a41df1933103%7D/calendar-js/calTimezone.js :: calLibicalTimezone.prototype.icalComponent :: line 84&amp;#34;  data: no]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Если есть, значит таки напороли с переносом строк. Исправляем внимательно.&lt;/p&gt;
&lt;p&gt;Всё, теперь запускаем TB и радуемся правильному времени в календаре.&lt;/p&gt;
&lt;p&gt;Эту процедуру можно сделать чуть проще при помощи 
&lt;a href=&#34;http://sqlitebrowser.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;sqlitebrowser&lt;/a&gt;: просто открываем &lt;code&gt;timezones.sqlite&lt;/code&gt;, находим нужную строку и правим аккуратно в нём, применяем, сохраняем, запускаем TB.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Practical Guide to Bare Metal C&#43;&#43;</title>
      <link>https://htrd.su/blog/2014/11/18/practical_guide_to_bare_metal_c/</link>
      <pubDate>Tue, 18 Nov 2014 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2014/11/18/practical_guide_to_bare_metal_c/</guid>
      <description>&lt;p&gt;Недавно наткнулся на эту книжку на GitBook: 
&lt;a href=&#34;http://arobenko.gitbooks.io/bare_metal_cpp/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://arobenko.gitbooks.io/bare_metal_cpp/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Доступна для онлайн-чтения, в виде форматов ePUB, MOBI и PDF. Рассматриваются вопросы уменьшения размера приложений, написания своих реализаций ABI функций, что позволяет более детально понимать, а что там вообще внутри происходит, что бывает полезно и обычных приложениях. Вместе с ней обязательно ознакомиться с 
&lt;a href=&#34;https://htrd.su/blog/2013/03/28/scott_meyers._effective_c_in_an_embedded_environment/&#34;&gt;post/2013/03/28/scott_meyers._effective_c_in_an_embedded_environment&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Книга больше ориентирована на ARM, в частности Raspberry PI, но идеи адаптировать к другим платформам труда не составит.&lt;/p&gt;
&lt;p&gt;Дополнительные ссылки:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://elegantinvention.com/blog/information/smaller-binary-size-with-c-on-baremetal-g/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://elegantinvention.com/blog/information/smaller-binary-size-with-c-on-baremetal-g/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.webalice.it/fede.tft/cpp_on_microcontrollers_tricks/cpp_on_microcontrollers_tricks.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.webalice.it/fede.tft/cpp_on_microcontrollers_tricks/cpp_on_microcontrollers_tricks.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.state-machine.com/arm/Building_bare-metal_ARM_with_GNU.pdf&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.state-machine.com/arm/Building_bare-metal_ARM_with_GNU.pdf&lt;/a&gt; или 
&lt;a href=&#34;https://htrd.su/img/post/2014/11/18/building_bare-metal_arm_with_gnu.pdf&#34;&gt;с блога&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;UPD:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://istarc.wordpress.com/2014/07/26/stm32f4-code-optimizations/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;STM32F4 – Code Optimization&lt;/a&gt; хорошая заметка в блоге (блог вообще стоит почитать: 
&lt;a href=&#34;http://istarc.wordpress.com/category/embedded-systems/stm32f4/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://istarc.wordpress.com/category/embedded-systems/stm32f4/&lt;/a&gt;) по поводу оптимизации кода по размеру, информация о дополнительных опциях -fno-builtin (не включать встроенные функции gcc) и -flto (использовать 
&lt;a href=&#34;https://gcc.gnu.org/onlinedocs/gccint/LTO.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;link-time optimization&lt;/a&gt; и 
&lt;a href=&#34;https://gcc.gnu.org/wiki/LinkTimeOptimization&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;тыц&lt;/a&gt;), а так же дополнительную литературу по теме использования C++ в embedded:
&lt;ul&gt;
&lt;li&gt;анализ производительности (в т.ч. STL):
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.open-std.org/jtc1/sc22/wg21/docs/TR18015.pdf&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Technical Report on C++ Performance&lt;/a&gt; - мегадока! Must Read.&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.carnica-technology.com/download/InefficiencyofC&amp;#43;&amp;#43;.pdf&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;The Inefficiency of C++. Fact or Fiction?&lt;/a&gt; от IAR Systems.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://elinux.org/images/2/2d/ELC2010-gc-sections_Denys_Vlasenko.pdf&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Link time dead code and data elimination using GNU toolchain&lt;/a&gt; - про то, что может поломать -Wl,-gc-sections&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Linux, ThinkPad T530 и miniDP (displayport)</title>
      <link>https://htrd.su/blog/2014/11/13/linux_thinkpad_t530_i_minidp_displayport/</link>
      <pubDate>Thu, 13 Nov 2014 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2014/11/13/linux_thinkpad_t530_i_minidp_displayport/</guid>
      <description>&lt;p&gt;На Thinkpad T530 есть два порта для подключения внешних мониторов: VGA и miniDP (Display Port). Если ноутбук с дискретной графикой, то DP разведён на дискретную карту nVidia, соответственно без шаманства графику туда не выведешь.&lt;/p&gt;
&lt;div class=&#34;notices warning&#34; &gt;Используйте данную ссылку только для ознакомительных целей! Подробности под катом.&lt;/div&gt;
&lt;div class=&#34;notices tip&#34; &gt;А если вопросы производительности не стоят остро, то рекомендую посмотреть в сторону Nouveau драйвера. В случае его использования и DRI3 не придётся настраивать &lt;strong&gt;ничего&lt;/strong&gt;. 
&lt;a href=&#34;https://nouveau.freedesktop.org/wiki/Optimus/#usingoutputsondiscretegpu&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Подробности&lt;/a&gt;.&lt;/div&gt;
&lt;p&gt;Полное и законченное описание подключения и вывода по ссылке:&lt;br /&gt;

&lt;a href=&#34;http://www.unixreich.com/blog/2013/linux-nvidia-optimus-on-thinkpad-w520w530-with-external-monitor-finally-solved/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.unixreich.com/blog/2013/linux-nvidia-optimus-on-thinkpad-w520w530-with-external-monitor-finally-solved/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Если коротко, то в современных реалиях от туда нужно брать только часть информации. К примеру:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Теперь не нужно отказываться от &lt;code&gt;bbswitch&lt;/code&gt; как средств сбережения питания в настройках Bumblebee.&lt;/li&gt;
&lt;li&gt;Не нужно принудительно оставлять запущенным X-сервер на дискретной карте&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Это всё при условии современного &lt;code&gt;intel-virtual-outputs&lt;/code&gt;. Т.е. рекомендацию по сборке оного из статьи выше взять нужно:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt-get install xorg-dev git autoconf automake libtool
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone git://anongit.freedesktop.org/xorg/driver/xf86-video-intel
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; xf86-video-intel 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./autogen.sh 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; tools
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo cp intel-virtual-output /usr/bin/ 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo chmod +x /usr/bin/intel-virtual-output
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;В сухом остатке - у нас всё будет работать практически при дефолтной установке Bumblebee. Но ложка дёгтя есть. Или, даже, пара.&lt;/p&gt;
&lt;p&gt;Дело в том, что для того, что бы &lt;code&gt;optirun&lt;/code&gt; работал без подключенного физического монитора в новых версиях Bumblebee в конфиге &lt;code&gt;/etc/bumblebee/xorg.conf.nvidia&lt;/code&gt; появилась строка:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Option &amp;#34;UseDisplayDevice&amp;#34; &amp;#34;none&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Всё хорошо, но она мешает работе &lt;code&gt;intel-virtual-output&lt;/code&gt;: он запускается без ошибок, но монитор, покдлюченный к miniDP порту в упор не видит((поправочка: ошибка всё же есть, если запускать с ключём &lt;code&gt;-f&lt;/code&gt; от программа сразу завершает свою работу, а без данного ключа - не остаётся в режиме демона)). Коментируешь строку, перезапускаешь - всё работает. Понять - какой вариант использовать и как это сделать автоматически, я пока не знаю. Точнее задумка есть: при подключении монитора к miniDP прилетает ACPI эвент, мол монитор есть. Если монитор подключен, то &lt;code&gt;optirun&lt;/code&gt; будет работать. Проблема в том, что при отключении ничего не прилетает. Так бы было возможно настроить обработчик acpid и подменять конфигурационные файлы.&lt;/p&gt;
&lt;p&gt;В сухом остатке: нужно всегда выбирать, или работаем с внешним монитором, тогда конфиг без этой строки. Или работает без внешнего монитора, тогда конфиг с этой строкой. В противном случае, что-то откажется работать: или &lt;code&gt;optirun&lt;/code&gt; без подключенного монитора, или монитор через intel-virtual-outputs.&lt;/p&gt;
&lt;p&gt;В рекомендациях Bumblebee ещё говорят включить эти опции при работе с внешним монитором, я их решил не игнорировать:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# в секции ServiceLayout
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Option &amp;#34;AutoAddDevices&amp;#34; &amp;#34;true&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# в секции Device
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Option &amp;#34;UseEDID&amp;#34; &amp;#34;true&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Есть ещё мнение, что с &lt;code&gt;intel-virtual-outputs&lt;/code&gt; где-то кешируются и не перенстраиваются параметры монитора, поэтому переключение другого монитора требует рестарта иксов. Проблема пока не проверена.&lt;/p&gt;
&lt;p&gt;Всё выше проверено на стеке Xorg lts-vivid и lts-wily в Linux Mint 17.3. Ядро 4.6.3.&lt;/p&gt;
&lt;p&gt;К слову, утилита &lt;code&gt;intel-virtual-outputs&lt;/code&gt; поставляется вместе с драйверами для карты Intel в этих стеках. На lts-vivid она не работает, на lts-wily - работает. Но лучше собирать самому.&lt;/p&gt;
&lt;p&gt;При изменении стека обязательно нужно выбрать Mesa в качестве альтернативы для OpenGL:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo update-alternatives --config i386-linux-gnu_gl_conf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo update-alternatives --config x86_64-linux-gnu_gl_conf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo ldconfig
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;иначе не будет ни технологии Optimus, не OpenGL даже для встроенной видео карты: альтернатива nvidia имеет куда больший приоритет.&lt;/p&gt;
&lt;div class=&#34;notices note&#34; &gt;&lt;p&gt;&lt;strong&gt;2016-08-26:&lt;/strong&gt; к слову, помимо отсутствия Optimus и вообще OpenGL у вас может начать валиться Cinnamon с сообщением в &lt;strong&gt;~/.xsession-errors&lt;/strong&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;(cinnamon:2813): Clutter-CRITICAL **: Unable to initialize Clutter: &amp;lt;тут может быть любой текст&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Он вообще как-то странно относится к драйверам nVidia((
&lt;a href=&#34;https://bugs.launchpad.net/linuxmint/&amp;#43;bug/1611544&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;раз&lt;/a&gt;, 
&lt;a href=&#34;http://mintlinux.ru/forum/thread10968.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;два&lt;/a&gt; и вообще 
&lt;a href=&#34;https://www.google.ru/search?q=cinnamon%20crashes%20with%20nvidia&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;достаточно много такого&lt;/a&gt;)), а тут ещё подстава: драйвера одни (точнее реализации OpenGL), а карта вообще другая.&lt;/p&gt;
&lt;p&gt;Столкнулся после обновления на Mint 18 с 17.3, путём превращения системы в фарш и лепки пельменей из неё обратно.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Ещё, модули ядра, если вздумали попробовать свежие драйвера nVidia из линейки 367, то крайне желательно создать файл &lt;code&gt;/etc/modprobe.d/bumblebee-367.conf&lt;/code&gt; с таким, примерно, содержимым:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# 367
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;blacklist nvidia-367
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;blacklist nvidia-367-updates
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;blacklist nvidia-experimental-367
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# Workaround to make sure nvidia-uvm is removed as well
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;remove nvidia rmmod nvidia_uvm nvidia_drm nvidia_modeset nvidia
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;softdep nvidia_367 post: nvidia_367_modeset nvidia_367_drm nvidia_367_uvm
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;что бы появилась возможность у Bumblebee выгружать все части nVidia.&lt;/p&gt;
&lt;p&gt;Кроме того, стоит запретить работу &lt;code&gt;gpu-manager&lt;/code&gt; и снести &lt;code&gt;/etc/X11/xorg.conf&lt;/code&gt;, который генерируется им:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;echo manual | sudo tee /etc/init/gpu-manager.override
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo service gpu-manager stop
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo rm -f /etc/X11/xorg.conf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;А то он очень хочет сделать вам nVidia карту основной. На ноутбуке, я думаю, карты меняются сильно не часто, и прожить без этой чудо утилиты вполне реально.&lt;/p&gt;
&lt;p&gt;Стоить отметить, что за год стабильность работы значительно улучшилась. А если придумать способ автоматической подмены конфигурации Xorg для Bumblebee, то ещё и работает без привbлегий root.&lt;/p&gt;
&lt;p&gt;Материалы:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;
&lt;a href=&#34;http://www.unixreich.com/blog/2013/linux-nvidia-optimus-on-thinkpad-w520w530-with-external-monitor-finally-solved/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.unixreich.com/blog/2013/linux-nvidia-optimus-on-thinkpad-w520w530-with-external-monitor-finally-solved/&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://github.com/Bumblebee-Project/Bumblebee/wiki/Multi-monitor-setup&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/Bumblebee-Project/Bumblebee/wiki/Multi-monitor-setup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.thinkwiki.org/wiki/DisplayPort&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.thinkwiki.org/wiki/DisplayPort&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://askubuntu.com/questions/380844/intel-virtual-output-command-for-saucy-13-10-with-dual-monitor-setup-and-hybrid&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://askubuntu.com/questions/380844/intel-virtual-output-command-for-saucy-13-10-with-dual-monitor-setup-and-hybrid&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://bugs.launchpad.net/ubuntu/&amp;#43;source/xserver-xorg-video-intel/&amp;#43;bug/1247528&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://bugs.launchpad.net/ubuntu/+source/xserver-xorg-video-intel/+bug/1247528&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://askubuntu.com/questions/103564/external-displays-with-bumblebee&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://askubuntu.com/questions/103564/external-displays-with-bumblebee&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://askubuntu.com/questions/105582/how-do-i-set-up-a-second-display-via-dvi-viewport-with-a-lenovo-t420s&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://askubuntu.com/questions/105582/how-do-i-set-up-a-second-display-via-dvi-viewport-with-a-lenovo-t420s&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>git-svn: новый git репозиторий в существующий svn</title>
      <link>https://htrd.su/blog/2014/09/29/git-svn_novyj_git_repozitorij_v_suschestvujuschij_svn/</link>
      <pubDate>Mon, 29 Sep 2014 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2014/09/29/git-svn_novyj_git_repozitorij_v_suschestvujuschij_svn/</guid>
      <description>&lt;p&gt;Так сложилось, что в нашей компании используется SVN для внутренних нужд. Но делать локальные эксперименты, или вообще проверки, бранчевания и т.п. значительно удобнее используя git. Естественно и логично для индивидуальной работы использовать &lt;code&gt;git-svn&lt;/code&gt;. В 
&lt;a href=&#34;http://www.draconianoverlord.com/2010/03/05/existing-git-into-svn.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;статье&lt;/a&gt; подробно рассмотрен вопрос экспорта своего нового проекта из git в svn с сохранением истории. Это случай, когда вы делаете локальный проект, отлаживаете его и, по результату, выкладываете в центральный SVN репозиторий.&lt;/p&gt;
&lt;p&gt;Подкатом вольный пересказ при использовании стандартного размещения каталогов: ProjectName/{trunk,tags,branches}, для нестандартного - в статье.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Создаём директорию проекта&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ svn mkdir --parents https://host.domain/svn/some_path/Project/trunk -m &lt;span class=&#34;s2&#34;&gt;&amp;#34;Make project directory.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# В текущем git репозитории делаем:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ git svn init https://host.domain/svn/some_path/Project -T trunk -t tags -b branches --prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;svn/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# стоит отметить, что для стандартного размещения опции -T/-t/-b можно не использовать, а указать:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# -s или --stdlayout, т.е. в примере выше можно было смело написать:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#   git svn init https://host.domain/svn/some_path/Project -s --prefix=svn/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# --prefix=svn/ - этот префикс будет добавлен ко всем тегам/бранчам из SVN, удобно что бы не запутаться.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# маппинг логинов svn и авторов в git, выбирать будет ли это глобальной (--global) или локальной &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# (--local, для репозитория) - на ваше усмотрение. Мне удобнее глобальное:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ git config --global svn.authorsfile ~/.git-svn-authors
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# внутри ~/.git-svn-authors примерно такое:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# svnlogin = Name SecondName &amp;lt;mail@company.com&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Теперь получаем данные из svn:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ git svn fetch
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# вывод должен закончится чем-то вроде:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# r4800 = a8a5a003d5b1b331275e29b4fa80748369374287 (refs/remotes/svn/trunk)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# если неправильно заполнили .git-svn-authors, вам об этом скажут, просто поправьте и выполните команду заново.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Проверьте бранчи, как должен обязательно присутствовать master (если вы его не переименовывали) и&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# remotes/svn/trunk (если вы не меняли префикс в git svn clone):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ git branch -av
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;* master            c3a7161 The latest git commit.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  remotes/svn/trunk 3b7fed6 Make project directory.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# видно, что головы отличаются&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Теперь накатим наши изменения выше изменений из репозитория:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ git rebase svn/trunk
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Ну и теперь можно загрузить всё это в svn:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ git svn dcommit
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>x264 low latency</title>
      <link>https://htrd.su/blog/2014/09/24/x264_low_latency/</link>
      <pubDate>Wed, 24 Sep 2014 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2014/09/24/x264_low_latency/</guid>
      <description>&lt;p&gt;Очень хорошая статья на тему: 
&lt;a href=&#34;http://x264dev.multimedia.cx/archives/249&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://x264dev.multimedia.cx/archives/249&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;
UPD, ссылка недоступна, через веб-архив: 
&lt;a href=&#34;http://web.archive.org/web/20150421033553/http://x264dev.multimedia.cx/archives/249&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://web.archive.org/web/20150421033553/http://x264dev.multimedia.cx/archives/249&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Цитата оттуда:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The total latency of x264, including encoder/decoder-side buffering, is:&lt;/p&gt;
&lt;p&gt;B-frame latency (in frames) + Threading latency (in frames) + RC-lookahead (in frames) + Sync-lookahead (in frames) + VBV buffer size (in seconds) + Time to encode one frame (in milliseconds)&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Собственно отсюда видно какие ручки крутить у того же FFmpeg что бы сделать задержку на стриминг как можно меньше:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-rc-lookahead #
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-bf #
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-threads #
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-refs #
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-x264-params sync-lookahead=#
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;и всякие буффера.&lt;/p&gt;
&lt;p&gt;Эти же опции применительно к AVCodecContext:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;AVCodecContext&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ctx&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;...;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nf&#34;&gt;av_opt_set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ctx&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;rc-lookahead&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;#&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;AV_OPT_SEARCH_CHILDREN&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nf&#34;&gt;av_opt_set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ctx&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;threads&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;      &lt;span class=&#34;s&#34;&gt;&amp;#34;#&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;AV_OPT_SEARCH_CHILDREN&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nf&#34;&gt;av_opt_set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ctx&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;bf&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;           &lt;span class=&#34;s&#34;&gt;&amp;#34;#&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;AV_OPT_SEARCH_CHILDREN&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nf&#34;&gt;av_opt_set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ctx&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;refs&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;         &lt;span class=&#34;s&#34;&gt;&amp;#34;#&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;AV_OPT_SEARCH_CHILDREN&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;GOP size (-g/&amp;ldquo;g&amp;rdquo;) будет влиять на объём траффика и как быстро картинка сможет восстановиться, если ключевой кадр был потерян.&lt;/p&gt;
&lt;p&gt;Ну из опций видно, что загоняя эти параметры в минимальные значения, получим максимальную скорость. Уменьшать количество потоков (threads) имеет смысл когда у вас несколько подобных процессингов.&lt;/p&gt;
&lt;p&gt;Есть ещё опция -tune (&amp;ldquo;tune&amp;rdquo;) со значением &amp;ldquo;zerolatency&amp;rdquo; - вундервафля, которая почти сгоняет задержку в ноль, но и качество картинки примерно туда же. Про то, что включает в себя различные опции тюнинга можно посмотреть в выводе:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;x264 --fullhelp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Дополнительные материалы:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://mewiki.project357.com/wiki/X264_Settings&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;X264 Settings&lt;/a&gt; - детальное описание параметров x264, может быть не самым актуальным.
&lt;ul&gt;
&lt;li&gt;ссылка через веб-архив: 
&lt;a href=&#34;http://web.archive.org/web/20150203203142/http://mewiki.project357.com/wiki/X264_Settings&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://web.archive.org/web/20150203203142/http://mewiki.project357.com/wiki/X264_Settings&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://dev.beandog.org/x264_preset_reference.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Encoding presets for x264&lt;/a&gt; - какие пресеты какие параметры включают, может быть не самым актуальным.
&lt;ul&gt;
&lt;li&gt;ссылка через веб-архив: 
&lt;a href=&#34;http://web.archive.org/web/20150802090458/http://dev.beandog.org/x264_preset_reference.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://web.archive.org/web/20150802090458/http://dev.beandog.org/x264_preset_reference.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;UPD: что-то странно, что все ссылки стали недоступны. Особенно рекомендации Ясона.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Пакетирование отладочной информации в deb</title>
      <link>https://htrd.su/blog/2014/09/05/paketirovanie_otladochnoj_informacii_v_deb/</link>
      <pubDate>Fri, 05 Sep 2014 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2014/09/05/paketirovanie_otladochnoj_informacii_v_deb/</guid>
      <description>&lt;p&gt;Всё достаточно просто. В &lt;code&gt;control&lt;/code&gt; добавляем описание нового пакета, вроде:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Package&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;ffmpeg&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;real&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;dbg&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Section&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;libdevel&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Architecture&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;any&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Depends&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;shlibs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Depends&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;misc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Depends&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Description&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;debug&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;symbols&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;ffmpeg&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;libraries&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;nx&#34;&gt;This&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;package&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;contains&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;the&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;debug&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;symbols&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;FFmpeg&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;lubraries&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;nx&#34;&gt;This&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;is&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;the&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;real&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;ffmpeg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;The&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;libraries&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;are&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;installed&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;the&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;opt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;ffmpeg&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;lib&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;А в &lt;code&gt;rules&lt;/code&gt; что-то вроде:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-make&#34; data-lang=&#34;make&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nf&#34;&gt;override_dh_strip&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       dh_strip --dbg-package&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;ffmpeg-real-dbg
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Главное, что бы имя пакета соответствовало. Естественно, при сборке нужно обеспечить что бы при компиляции отладочная информация вообще создавась. В случае real-ffmpeg от samrog131 нужно добавить&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--enable-debug=3
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;к &lt;code&gt;./configure&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Подробнее: 
&lt;a href=&#34;http://askubuntu.com/questions/182703/how-and-why-to-create-dbg-dev-doc-packages&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://askubuntu.com/questions/182703/how-and-why-to-create-dbg-dev-doc-packages&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Проблема с внутренними зависимостями при отстройке deb пакетов</title>
      <link>https://htrd.su/blog/2014/09/04/problema_s_vnutrennimi_zavisimostjami_pri_otstrojke_deb_paketov/</link>
      <pubDate>Thu, 04 Sep 2014 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2014/09/04/problema_s_vnutrennimi_zavisimostjami_pri_otstrojke_deb_paketov/</guid>
      <description>&lt;p&gt;Не знал как лучше сформулировать тему.&lt;/p&gt;
&lt;p&gt;Суть: есть source-пакет из которого строится несколько бинарных deb-пакетов.&lt;/p&gt;
&lt;p&gt;Допустим:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Библиотека: libfoo&lt;/li&gt;
&lt;li&gt;Бинарник, зависящий от этой библиотеки: foo&lt;/li&gt;
&lt;li&gt;Пакет для разработчика: libfoo-dev&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;При отстройке имеем примерно такую проблему:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dpkg-shlibdeps: error: couldn&amp;#39;t find library libopencv_core.so.2.4 needed by debian/libopencv-ffmpeg-dev/opt/opencv/bin/opencv_traincascade (ELF format: &amp;#39;elf64-x86-64&amp;#39;; RPATH: &amp;#39;&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dpkg-shlibdeps: error: couldn&amp;#39;t find library libopencv_ml.so.2.4 needed by debian/libopencv-ffmpeg-dev/opt/opencv/bin/opencv_traincascade (ELF format: &amp;#39;elf64-x86-64&amp;#39;; RPATH: &amp;#39;&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dpkg-shlibdeps: error: couldn&amp;#39;t find library libopencv_imgproc.so.2.4 needed by debian/libopencv-ffmpeg-dev/opt/opencv/bin/opencv_traincascade (ELF format: &amp;#39;elf64-x86-64&amp;#39;; RPATH: &amp;#39;&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dpkg-shlibdeps: error: couldn&amp;#39;t find library libopencv_highgui.so.2.4 needed by debian/libopencv-ffmpeg-dev/opt/opencv/bin/opencv_traincascade (ELF format: &amp;#39;elf64-x86-64&amp;#39;; RPATH: &amp;#39;&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dpkg-shlibdeps: error: couldn&amp;#39;t find library libopencv_objdetect.so.2.4 needed by debian/libopencv-ffmpeg-dev/opt/opencv/bin/opencv_haartraining (ELF format: &amp;#39;elf64-x86-64&amp;#39;; RPATH: &amp;#39;&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dpkg-shlibdeps: error: couldn&amp;#39;t find library libopencv_calib3d.so.2.4 needed by debian/libopencv-ffmpeg-dev/opt/opencv/bin/opencv_haartraining (ELF format: &amp;#39;elf64-x86-64&amp;#39;; RPATH: &amp;#39;&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dpkg-shlibdeps: error: couldn&amp;#39;t find library libopencv_highgui.so.2.4 needed by debian/libopencv-ffmpeg-dev/opt/opencv/bin/opencv_haartraining (ELF format: &amp;#39;elf64-x86-64&amp;#39;; RPATH: &amp;#39;&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dpkg-shlibdeps: error: couldn&amp;#39;t find library libopencv_imgproc.so.2.4 needed by debian/libopencv-ffmpeg-dev/opt/opencv/bin/opencv_haartraining (ELF format: &amp;#39;elf64-x86-64&amp;#39;; RPATH: &amp;#39;&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dpkg-shlibdeps: error: couldn&amp;#39;t find library libopencv_core.so.2.4 needed by debian/libopencv-ffmpeg-dev/opt/opencv/bin/opencv_haartraining (ELF format: &amp;#39;elf64-x86-64&amp;#39;; RPATH: &amp;#39;&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dpkg-shlibdeps: error: couldn&amp;#39;t find library libopencv_core.so.2.4 needed by debian/libopencv-ffmpeg-dev/opt/opencv/bin/opencv_performance (ELF format: &amp;#39;elf64-x86-64&amp;#39;; RPATH: &amp;#39;&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dpkg-shlibdeps: error: couldn&amp;#39;t find library libopencv_highgui.so.2.4 needed by debian/libopencv-ffmpeg-dev/opt/opencv/bin/opencv_performance (ELF format: &amp;#39;elf64-x86-64&amp;#39;; RPATH: &amp;#39;&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dpkg-shlibdeps: error: couldn&amp;#39;t find library libopencv_objdetect.so.2.4 needed by debian/libopencv-ffmpeg-dev/opt/opencv/bin/opencv_performance (ELF format: &amp;#39;elf64-x86-64&amp;#39;; RPATH: &amp;#39;&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dpkg-shlibdeps: error: couldn&amp;#39;t find library libopencv_objdetect.so.2.4 needed by debian/libopencv-ffmpeg-dev/opt/opencv/bin/opencv_createsamples (ELF format: &amp;#39;elf64-x86-64&amp;#39;; RPATH: &amp;#39;&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dpkg-shlibdeps: error: couldn&amp;#39;t find library libopencv_calib3d.so.2.4 needed by debian/libopencv-ffmpeg-dev/opt/opencv/bin/opencv_createsamples (ELF format: &amp;#39;elf64-x86-64&amp;#39;; RPATH: &amp;#39;&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dpkg-shlibdeps: error: couldn&amp;#39;t find library libopencv_highgui.so.2.4 needed by debian/libopencv-ffmpeg-dev/opt/opencv/bin/opencv_createsamples (ELF format: &amp;#39;elf64-x86-64&amp;#39;; RPATH: &amp;#39;&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dpkg-shlibdeps: error: couldn&amp;#39;t find library libopencv_imgproc.so.2.4 needed by debian/libopencv-ffmpeg-dev/opt/opencv/bin/opencv_createsamples (ELF format: &amp;#39;elf64-x86-64&amp;#39;; RPATH: &amp;#39;&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dpkg-shlibdeps: error: couldn&amp;#39;t find library libopencv_core.so.2.4 needed by debian/libopencv-ffmpeg-dev/opt/opencv/bin/opencv_createsamples (ELF format: &amp;#39;elf64-x86-64&amp;#39;; RPATH: &amp;#39;&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dpkg-shlibdeps: error: cannot continue due to the errors listed above
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Note: libraries are not searched in other binary packages that do not have any shlibs or symbols file.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;To help dpkg-shlibdeps find private libraries, you might need to set LD_LIBRARY_PATH.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;При этом библиотеки отстроены и с ними всё в порядке.&lt;/p&gt;
&lt;p&gt;Лечится добавлением в debian/rules примерно такого:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-make&#34; data-lang=&#34;make&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nf&#34;&gt;override_dh_shlibdeps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;LD_LIBRARY_PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;LD_LIBRARY_PATH&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;:debian/tmp/PATH_TO_LIB_DIR dh_shlibdeps
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Главное, замените &lt;code&gt;PATH_TO_LIB_DIR&lt;/code&gt; на своё, обычно это &lt;code&gt;PREFIX/lib&lt;/code&gt; или &lt;code&gt;PREFIX/lib/$(DEB_HOST_MULTIARCH)&lt;/code&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Threads и fork: дважды подумайте</title>
      <link>https://htrd.su/blog/2014/08/30/threads_i_fork_dvazhdy_podumajte/</link>
      <pubDate>Sat, 30 Aug 2014 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2014/08/30/threads_i_fork_dvazhdy_podumajte/</guid>
      <description>&lt;p&gt;Да, дважды подумайте перед тем как смешивать их: 
&lt;a href=&#34;http://www.linuxprogrammingblog.com/threads-and-fork-think-twice-before-using-them&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.linuxprogrammingblog.com/threads-and-fork-think-twice-before-using-them&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>MinGW и локали</title>
      <link>https://htrd.su/blog/2014/08/29/mingw_i_lokali/</link>
      <pubDate>Fri, 29 Aug 2014 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2014/08/29/mingw_i_lokali/</guid>
      <description>&lt;p&gt;Если коротко, то всё, что связано с &lt;code&gt;std::locale&lt;/code&gt; в MinGW не работает. Точка.&lt;/p&gt;
&lt;p&gt;Зато вполне себе работает функционал из Си:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;locale&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;global&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;locale&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// не установит текущую локаль
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;setlocale&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LC_ALL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// установит текущую локаль, у меня это Russian_Russia.Cp1251
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ну и прицепом, что бы определить текущую кодировку не получится воспользоваться функционалом 
&lt;a href=&#34;http://linux.die.net/man/3/nl_langinfo&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;nl_langinfo()&lt;/a&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;char&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;charset&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;nl_langinfo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;CODESET&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;его просто нет. Зато есть, в комплекте, libcharset, идущая вместе с GNU libiconv (в некоторых дистрибутивах Linux она тоже есть). Нужно только не забывать линковаться с iconv:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-liconv
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Сам код:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;charset.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;char&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;charset&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;locale_charset&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// вернёт CP1251 для русской локали
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Почти то же самое, на английском: 
&lt;a href=&#34;http://www.haible.de/bruno/packages-libcharset.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.haible.de/bruno/packages-libcharset.html&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Пополняем шпаргалки по C&#43;&#43;: неявно-генерируемые перемещающий конструктор и оператор присваивания</title>
      <link>https://htrd.su/blog/2014/08/29/popolnjaem_shpargalki_po_c_nejavno-generiruemye_peremeschajuschij_konstruktor_i_operator_prisvaivanija/</link>
      <pubDate>Fri, 29 Aug 2014 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2014/08/29/popolnjaem_shpargalki_po_c_nejavno-generiruemye_peremeschajuschij_konstruktor_i_operator_prisvaivanija/</guid>
      <description>&lt;p&gt;Статью изначально публиковал на хабре: 
&lt;a href=&#34;http://habrahabr.ru/post/232775/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://habrahabr.ru/post/232775/&lt;/a&gt;. Здесь - для единства мыслей :)&lt;/p&gt;
&lt;p&gt;Когда не так часто, как хотелось бы, приходится работать с языком, некоторые аспекты забываются. А некоторые никогда и не откладываются в голове. Поэтому, когда возникают вопросы, приходится отвлекаться и лезть в документацию.&lt;/p&gt;
&lt;p&gt;Чтобы сэкономить время в последующем, а также, чтобы лучше понять в ходе обучения, крайне помогает вести конспекты и делать наглядные шпаргалки. Шпаргалку можно повесить рядом на стену. Хороши шпаргалки в виде блок-схем, по которым можно легко, по шагам, получить нужный результат (например 
&lt;a href=&#34;http://habrahabr.ru/company/infopulse/blog/194726/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;выбрать правильный контейнер&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Под катом я решил опубликовать пару шпаргалок для определения условия когда будет создан компилятором неявно-генерируемый перемещающий конструктор и перемещающий оператор присваивания.&lt;/p&gt;
&lt;p&gt;Шпаргалки представлены в виде PDF файлов для печати на принтере A4, в виде картинки PNG, а также исходников в SVG.&lt;/p&gt;
&lt;h2 id=&#34;неявно-генерируемый-перемещающий-конструктор&#34;&gt;Неявно-генерируемый перемещающий конструктор&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2014/08/29/c_11-move-ctor.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;неявно-генерируемый-перемещающий-оператор-присваивания&#34;&gt;Неявно-генерируемый перемещающий оператор присваивания&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2014/08/29/c_11-move-assignment.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Исходники и PDF формата A4: 
&lt;a href=&#34;https://yadi.sk/d/s7t7uEdKAxHKq/Cheatsheets/My/C%2B%2B-move-ctor/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://yadi.sk/d/s7t7uEdKAxHKq/Cheatsheets/My/C%2B%2B-move-ctor/&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;triviallycopyable-концепт&#34;&gt;TriviallyCopyable концепт&lt;/h2&gt;
&lt;p&gt;На диаграммах есть отсылки к тривиальности конструкторов и т.п. Используя 
&lt;a href=&#34;http://en.cppreference.com/w/cpp/concept/TriviallyCopyable&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://en.cppreference.com/w/cpp/concept/TriviallyCopyable&lt;/a&gt; составил карту памяти:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2014/08/29/triviallycopyable_s_11_.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Исходники и PDF: 
&lt;a href=&#34;https://yadi.sk/d/s7t7uEdKAxHKq/Cheatsheets/My/C%2B%2B-move-ctor/Concepts/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://yadi.sk/d/s7t7uEdKAxHKq/Cheatsheets/My/C%2B%2B-move-ctor/Concepts/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Вот и всё, жду замечаний. Если кому-то пригодится, не забывайте выражать свои эмоции в комментариях.&lt;/p&gt;
&lt;p&gt;Используемые материалы:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;a href=&#34;http://en.cppreference.com/w/cpp/language/move_operator&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://en.cppreference.com/w/cpp/language/move_operator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://en.cppreference.com/w/cpp/language/move_constructor&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://en.cppreference.com/w/cpp/language/move_constructor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://en.cppreference.com/w/cpp/language/copy_constructor&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://en.cppreference.com/w/cpp/language/copy_constructor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://en.cppreference.com/w/cpp/language/as_operator&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://en.cppreference.com/w/cpp/language/as_operator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://en.cppreference.com/w/cpp/language/destructor&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://en.cppreference.com/w/cpp/language/destructor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://en.cppreference.com/w/cpp/concept/TriviallyCopyable&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://en.cppreference.com/w/cpp/concept/TriviallyCopyable&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://accu.org/content/conf2014/Howard_Hinnant_Accu_2014.pdf&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://accu.org/content/conf2014/Howard_Hinnant_Accu_2014.pdf&lt;/a&gt; - очень хорошая презенташка по Move Semantics&lt;/li&gt;
&lt;/ol&gt;</description>
    </item>
    
    <item>
      <title>hex ↔ bin в уме</title>
      <link>https://htrd.su/blog/2014/08/20/hex_-_bin_v_ume/</link>
      <pubDate>Wed, 20 Aug 2014 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2014/08/20/hex_-_bin_v_ume/</guid>
      <description>&lt;p&gt;Однажды писал про двоичные литералы в GCC: 
&lt;a href=&#34;https://htrd.su/blog/2009/10/02/2009-10-02_13.44_0b00100100/&#34;&gt;/post/2009-10-02_13.44_0b00100100&lt;/a&gt;, новый стандарт C++14 закрепил их в C++.&lt;/p&gt;
&lt;p&gt;Но тут я хотел бы рассмотреть лёгкий способ перехода в уме между hex и bin представлениями.&lt;/p&gt;
&lt;p&gt;Переводить, на самом деле, не просто, а очень просто. Достаточно запомнить таблицу представления от 0 до F, а дальше переходить от hex в bin и обратно как два пальца об асфальт: каждая hex цифра - это 4 бита в bin.&lt;/p&gt;
&lt;p&gt;Для примера, таблица:&lt;br/&gt;&lt;br/&gt;
0 - 0000&lt;br/&gt;&lt;br/&gt;
1 - 0001&lt;br/&gt;&lt;br/&gt;
2 - 0010&lt;br/&gt;&lt;br/&gt;
3 - 0011&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;4 - 0100&lt;br/&gt;&lt;br/&gt;
5 - 0101&lt;br/&gt;&lt;br/&gt;
6 - 0110&lt;br/&gt;&lt;br/&gt;
7 - 0111&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;8 - 1000&lt;br/&gt;&lt;br/&gt;
9 - 1001&lt;br/&gt;&lt;br/&gt;
A - 1010&lt;br/&gt;&lt;br/&gt;
B - 1011&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;C - 1100&lt;br/&gt;&lt;br/&gt;
D - 1101&lt;br/&gt;&lt;br/&gt;
E - 1110&lt;br/&gt;&lt;br/&gt;
F - 1111&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;Ну и взять число: 110110110B&lt;/p&gt;
&lt;p&gt;Разделим на группы по 4 бита, недостающие (слева) добьём нулями:&lt;/p&gt;
&lt;p&gt;110110110B -&amp;gt; 1 1011 0110B -&amp;gt; 0001 1011 0110&lt;/p&gt;
&lt;p&gt;0001b = 1h
1011b = Bh
0110b = 6h&lt;/p&gt;
&lt;p&gt;т.е. имеем 0x1B6&lt;/p&gt;
&lt;p&gt;Причём в таблице, если разделить её на 4 части, то в бинарном виде первый два бита - это номер части от 0 (00b) до 3 (11b) и запомнить, по сути, нужно только числа от 0 до 3 в бинарном виде. К примеру:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;1010b = 1000b + 0010b 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  10b = 2h ⇒ 1000b = 2h * 4 = 8h
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;1000b + 0010b = 8h + 2h = Ah
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;или: 1101b&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;1101b = 1100b + 0001b
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  11b = 3 ⇒ 1100b = 3 * 4 = 12 = Ch
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;1100b + 0001b = 11b * 4 + 01b = Ch + 1h = Dh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ну или в более общем виде:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;XXYYb = XXb * 4 + YYb
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Понятно, что 64бит число в уме не совсем получится переводить, но последовательно записывая его на бумажке - вполне себе можно.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>C&#43;&#43;14: Done</title>
      <link>https://htrd.su/blog/2014/08/19/c_14_done/</link>
      <pubDate>Tue, 19 Aug 2014 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2014/08/19/c_14_done/</guid>
      <description>&lt;p&gt;Стандарт отправился в печать: 
&lt;a href=&#34;https://isocpp.org/blog/2014/08/we-have-cpp14&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://isocpp.org/blog/2014/08/we-have-cpp14&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Сильно быстро меняется, компиляторы не поспевают, не то что головы программистов и промышленность. Надеюсь они притормозят коней, да займутся больше багофиксами.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Сервис для анализа последовательностей</title>
      <link>https://htrd.su/blog/2014/06/16/servis_dlja_analiza_posledovatelnostej/</link>
      <pubDate>Mon, 16 Jun 2014 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2014/06/16/servis_dlja_analiza_posledovatelnostej/</guid>
      <description>&lt;p&gt;Удобный сервис для анализа последовательностей и поиска зависимостей и вывода формулы: 
&lt;a href=&#34;http://oeis.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://oeis.org/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Удобно использовать для различных видов анализа, обратной разработки и т.п.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>erase_if</title>
      <link>https://htrd.su/blog/2014/05/30/erase_if/</link>
      <pubDate>Fri, 30 May 2014 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2014/05/30/erase_if/</guid>
      <description>&lt;p&gt;Условное удаление по значению из всяких там map и иже с ними. А так же, бонусом, наиболее оптимальный вариант условного удаления для вектора.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;/// [1]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;template&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;typename&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Container&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;typename&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Predicate&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;inline&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;size_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;erase_if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Container&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;typename&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Container&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;iterator&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;typename&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Container&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;iterator&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Predicate&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;size_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;erased&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;it&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;it&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;)&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;it&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;erase&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;it&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;erased&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;it&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;erased&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;/// [2]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;template&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;typename&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Container&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;typename&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Predicate&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;inline&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;size_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;erase_if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Container&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Predicate&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;erase_if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;begin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;end&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Первая форма - для диапазона, вторая форма - для всего контейнера (имхо, наиболее частый случай).&lt;/p&gt;
&lt;p&gt;Использовать:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;map&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;m&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;200&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;300&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;/// [1] форма
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;erase_if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;begin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;end&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[](&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pair&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;second&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;200&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;/// [2] форма
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;erase_if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[](&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pair&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;first&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// так тоже можно, только зачем? :)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Для C++98/2003 адаптируется в два хода: первая форма без изменений, вторая - заменить std::begin()/end() на соответствующие методы контейнера.&lt;/p&gt;
&lt;p&gt;Дополнительно можно переопределить для std::list, что бы звался его remove_if.&lt;/p&gt;
&lt;h2 id=&#34;erase_if-для-вектора&#34;&gt;erase_if для вектора&lt;/h2&gt;
&lt;p&gt;Идея взята отсюда: 
&lt;a href=&#34;http://misc-sonofagun.blogspot.ru/2012/12/blog-post_25.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://misc-sonofagun.blogspot.ru/2012/12/blog-post_25.html&lt;/a&gt;. Скопирую только информацию о сложности:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Алгоритмическая сложность: N сравнений + N перестановок в случае, если &lt;code&gt;std::stable_partition&lt;/code&gt; сможет использовать внутренний буффер или N log N перестановок в противном случае.&lt;/p&gt;&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;/// [3]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;template&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;typename&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;typename&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Predicate&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;inline&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;size_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;erase_if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;vector&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;typename&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;vector&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;iterator&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;typename&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;vector&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;iterator&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Predicate&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;size_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;erased&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;remove_begin&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stable_partition&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;](&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;erased&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;distance&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;remove_begin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;erase&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;remove_begin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;erased&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;/// [4]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;template&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;typename&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;typename&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Predicate&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;inline&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;size_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;erase_if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;vector&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Predicate&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;erase_if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;begin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;end&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Отмечу, что наиболее эффективная версия будет [4] либо версия [3], когда конец диапазона равен &lt;code&gt;std::end( c )&lt;/code&gt;, иначе все действия будут происходить внутри этого диапазона и значения от &lt;code&gt;e&lt;/code&gt; до &lt;code&gt;std::end( c )&lt;/code&gt; придётся сдвигать (т.е. копировать).&lt;/p&gt;
&lt;p&gt;Так же этот алгоритм нужно применять для дека (&lt;code&gt;std::deque&lt;/code&gt;).&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Const correctness</title>
      <link>https://htrd.su/blog/2014/05/28/const_correctness/</link>
      <pubDate>Wed, 28 May 2014 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2014/05/28/const_correctness/</guid>
      <description>&lt;p&gt;Ничего нового, просто ссылки:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.parashift.com/c&amp;#43;&amp;#43;-faq/const-correctness.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.parashift.com/c++-faq/const-correctness.html&lt;/a&gt; - разные аспекты&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.cprogramming.com/tutorial/const_correctness.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.cprogramming.com/tutorial/const_correctness.html&lt;/a&gt; - для чего нужно и почему, а так же логическая и побитовая константность.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Если коротко, то что даёт применение ключевого слова &lt;code&gt;const&lt;/code&gt; везде, где это уместно:
&amp;lt;WRAP center round tip 60%&amp;gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Уберегает вас от некоторых ошибок, связанных с внезапным изменением данных в каких-то вызовых. Т.е. добавляет безопасности.&lt;/li&gt;
&lt;li&gt;Автодокументирование кода: вы выдите const =&amp;gt; вы знаете, что данные не меняются ни в этом вызове, ни далее по иерархии.
&lt;/WRAP&gt;&lt;/li&gt;
&lt;/ol&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;code&gt;mutable&lt;/code&gt;. Для чего они нужны? Самый простой пример: экземпляр класса может использоваться из разных потоков. Писать может один поток, а читать другой. Логично, что метод для чтения будет константным. Так же логично, что чтение и запись следует защитить мьютексом. Но если мы попробуем заблокировать мьютекс в константном методе, получис ошибку компиляции. Понятно, что изменение мьютекса никак не влияет на логическую константность класса, поэтому его можно объявить &lt;code&gt;mutable&lt;/code&gt; и спокойно защищать им данные.&lt;/p&gt;
&lt;p&gt;Из примера выше можно сделать такое неформальное заключение:
&amp;lt;WRAP center round tip 60%&amp;gt;
Побитовая константностью - неиболее сильная. Логическая - более слабая.
&lt;/WRAP&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Qt Creator и C&#43;&#43;11</title>
      <link>https://htrd.su/blog/2014/05/22/qt_creator_i_c_11/</link>
      <pubDate>Thu, 22 May 2014 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2014/05/22/qt_creator_i_c_11/</guid>
      <description>&lt;p&gt;Небольшая заметка о том, как форсировать поддержку C++11 в парсере для различных билд-систем. Заметки касаются master-снапшота QTC (брать тут: 
&lt;a href=&#34;http://download.qt-project.org/snapshots/qtcreator/master/latest/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://download.qt-project.org/snapshots/qtcreator/master/latest/&lt;/a&gt; или собирать из исходников).&lt;/p&gt;
&lt;p&gt;Нужно отметить, что синтаксис нового стандарта поддерживается сейчас по-умолчанию. Проблемы касаются правильного определения констант компилятора, подключения частей стандартной библиотеки и т.п.&lt;/p&gt;
&lt;h2 id=&#34;qmake&#34;&gt;QMake&lt;/h2&gt;
&lt;p&gt;Система сборки по умолчанию.&lt;/p&gt;
&lt;p&gt;Нужно добавить следующий параметр в .pro файл:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;QMAKE_CXX_FLAGS += -std=c++11
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;после чего проект переконфигурируется, а на вкладке &amp;ldquo;Project Parts&amp;rdquo; в Tools -&amp;gt; C++ -&amp;gt; Check Code Model C++&amp;hellip; вы увидите:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;CXXVersion = CXX11
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;А параметр &lt;code&gt;__cplusplus&lt;/code&gt; в Toolchain defines будет определён в &lt;code&gt;201103L&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;UPD, в рассылке Qt Creator подсказали, что для QMake достаточно передавать:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;CONFIG+=c++11
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;cmake&#34;&gt;CMake&lt;/h2&gt;
&lt;p&gt;Нужно добавить следующий параметр в CMakeLists.txt:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cmake&#34; data-lang=&#34;cmake&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;CMAKE_CXX_FLAGS&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;${CMAKE_CXX_FLAGS} -std=c++11&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;generic-project-manager&#34;&gt;Generic Project Manager&lt;/h2&gt;
&lt;p&gt;Использует пользовательские определения для отстройки кода. Лично я использую этот режим для различных embedded приложений (на работе) у которых свои, самобытные системы сборки (правда там нет и C++11, но C++11 проект на Makefile&amp;rsquo;ах мне недавно попался)&lt;/p&gt;
&lt;p&gt;Заявлено, что по умолчанию уже включена CXX11, Check Code Model говорит о том же, но на деле не видит mutex, this_thread и т.п. даже при подключенных хидерах.&lt;/p&gt;
&lt;p&gt;Основная причина, что в предопределённых дефайнах видим такое:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#define __cplusplus 199711L
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;а должно быть не менее 201103L.&lt;/p&gt;
&lt;p&gt;Как хак можно использовать следующий дефайн в .config файле:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#define __cplusplus 201103L
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;в Toolchain defines это не отразится, но парсится включаемые файлы станут корректно.&lt;/p&gt;
&lt;p&gt;UPD: найден баг, описывающий данную проблему: 
&lt;a href=&#34;https://bugreports.qt-project.org/browse/QTCREATORBUG-10404&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://bugreports.qt-project.org/browse/QTCREATORBUG-10404&lt;/a&gt;, баг закрыт без решения, но там предложен ещё один workaround, через отдельный тулчейн с предопределённым &lt;code&gt;-std=c++11&lt;/code&gt;&lt;/p&gt;
&lt;h2 id=&#34;autotools-project-manager&#34;&gt;Autotools Project Manager&lt;/h2&gt;
&lt;p&gt;FIXME Не пользовался, ничего не могу сказать.&lt;/p&gt;
&lt;h2 id=&#34;qbs&#34;&gt;QBS&lt;/h2&gt;
&lt;p&gt;Взято отсюда: 
&lt;a href=&#34;http://www.linux.org.ru/forum/development/9645878?cid=9648329&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.linux.org.ru/forum/development/9645878?cid=9648329&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-qbs&#34; data-lang=&#34;qbs&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;cpp.cxxFlags:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     &lt;span class=&#34;p&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     &lt;span class=&#34;s2&#34;&gt;&amp;#34;-std=c++11&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     &lt;span class=&#34;p&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Проверил, действительно значение дефайна &lt;code&gt;__cplusplus&lt;/code&gt; в Toolchain defines изменяется.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>std::begin() и std::end()</title>
      <link>https://htrd.su/blog/2014/05/22/std_begin_i_std_end/</link>
      <pubDate>Thu, 22 May 2014 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2014/05/22/std_begin_i_std_end/</guid>
      <description>&lt;p&gt;С приходом нового стандарта эти две свободные функции появились в STL, в библиотеке итераторов (&lt;code&gt;#include &amp;lt;iterator&amp;gt;&lt;/code&gt;). Кроме того, в примерах кода часто можно увидеть, что они используются на STL контейнерах вместо собственных методов &lt;code&gt;.begin()&lt;/code&gt; и &lt;code&gt;.end()&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;vector&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;iterators&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;using&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;vector&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;it&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;begin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;it&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;end&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;it&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;cout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Number: &amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;it&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;endl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Мне хорошо понятно, что эти функции отлично подходят для RAW-массивов, т.е. если в примере выше заменить:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;vector&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;на&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;или даже&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[]{&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;То весь остальной код менять не нужно. Удобно, причём мы защищены от подсовывания указателя вместо массива. Но почему они применяются для STL контейнеров?&lt;/p&gt;
&lt;p&gt;Поиск по интернету дал только один ответ: для унификации. И только.&lt;/p&gt;
&lt;p&gt;Т.е. ни по &amp;ldquo;кошерности&amp;rdquo; ни по скорости два этих подхода не отличаются. Чисто для единства вида.&lt;/p&gt;
&lt;p&gt;Если у кого есть другие предположения - милости просим в дискуссию.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ссылки&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.cplusplus.com/reference/iterator/begin/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;std::begin()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.cplusplus.com/reference/iterator/end/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;std::end()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.cplusplus.com/reference/iterator/next/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;std::next()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.cplusplus.com/reference/iterator/prev/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;std::prev()&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description>
    </item>
    
    <item>
      <title>Nvidia Optimus</title>
      <link>https://htrd.su/blog/2014/05/15/nvidia_optimus/</link>
      <pubDate>Thu, 15 May 2014 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2014/05/15/nvidia_optimus/</guid>
      <description>&lt;p&gt;Дошли руки до включения данной фичи на моём ноутбуке. Всё оказалось не просто, а очень просто, в случае Linux Mint 16, всё делаем по инструкции: 
&lt;a href=&#34;http://help.ubuntu.ru/wiki/bumblebee&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://help.ubuntu.ru/wiki/bumblebee&lt;/a&gt; для Linux Mint 16 смотрим на версии убунты 13.10, для будущего Linux Mint 17 - 14.04.&lt;/p&gt;
&lt;p&gt;За более детальными настройками: 
&lt;a href=&#34;https://wiki.archlinux.org/index.php/Bumblebee_%28%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9%29&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://wiki.archlinux.org/index.php/Bumblebee_%28%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9%29&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Если коротко:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Включаем в биосе Nvidia Optimus, у меня стоит предупреждение, что тема только для Windows 7 и 8, тупо игнорим&lt;/li&gt;
&lt;li&gt;После перезагрузке в выводе&lt;code&gt;lspci -nn | grep VGA&lt;/code&gt; наблюдаем две строки, а не одну, как обычно.&lt;/li&gt;
&lt;li&gt;Ставим дрова nvidia (проприетарные): &lt;code&gt;sudo apt-get install nvidia-319-updates nvidia-settings-319-updates&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Ставим бамблбее: &lt;code&gt;sudo apt-get install bumblebee bumblebee-nvidia primus primus-libs-ia32&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Ребутимся (а может и не нужно, но у меня на этом шаге Optimus был выключен в биосе, так что один фиг нужно было включить, но перелогиниться нужно точно, так как текущий пользователь был включён в группу bumblebee, что бы иметь возможность вызывать optirun).&lt;/li&gt;
&lt;li&gt;Профит!&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;После загрузки смотрим вывод &lt;code&gt;optirun --status&lt;/code&gt; видим, что всё ок. А приложения запускаем:
optirun [аргументы] &amp;lt;приложение&amp;gt; [аргументы приложения]&lt;/p&gt;
&lt;p&gt;Для самых нетерпеливых, можно сравнить вывод двух команд:
glxinfo
optirun glxinfo&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Quake IV в Linux</title>
      <link>https://htrd.su/blog/2014/04/26/quake_iv_v_linux/</link>
      <pubDate>Sat, 26 Apr 2014 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2014/04/26/quake_iv_v_linux/</guid>
      <description>&lt;p&gt;Если при старте вылазит такое:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...using GL_NV_blend_square
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...using GL_ARB_texture_compression
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;X..GL_EXT_texture_compression_s3tc not found
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Fatal Error: Texture compression unavailable
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Shutting down SDL subsystem
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--------------- BSE Shutdown ----------------
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;---------------------------------------------
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;idRenderSystem::Shutdown()
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Sys_Error: Texture compression unavailable
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Нужно сделать следующее:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Устанавливаем &lt;code&gt;driconf&lt;/code&gt;, для deb-based: &lt;code&gt;apt-get install driconf&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Запускаем его от простого пользователя&lt;/li&gt;
&lt;li&gt;На вкладке &amp;ldquo;Image Quality&amp;rdquo; включаем параметр &amp;ldquo;Enable S3TC texture compression even if software support is not available&amp;rdquo;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Всё, радуемся игре.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Газ, газовые смеси и холод</title>
      <link>https://htrd.su/blog/2014/04/25/gaz_gazovye_smesi_i_xolod/</link>
      <pubDate>Fri, 25 Apr 2014 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2014/04/25/gaz_gazovye_smesi_i_xolod/</guid>
      <description>&lt;p&gt;Часто вижу непонимание того, как и почему должен работать газ на холоде. Была задумка скомпоновать всю полученную информацию воедино, но так сложилось, что все уже сделано за нас. Итак, подборка:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://out-door-life.com/82/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Как ведут себя газовые смеси зимой и какую газовую горелку выбрать для эксплуатации при низких температурах&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;TODO&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Дома дополню про вес баллонов, в т.ч. для &amp;ldquo;экспедиционных&amp;rdquo; 5 и 12л пропановых.&lt;/p&gt;
&lt;p&gt;Но если кратко:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Все смеси делаются из двух или более газов, обычно: пропан, бутан, изобутан.&lt;/li&gt;
&lt;li&gt;Пропан кипит при температуре -42 градуса по цельсию.&lt;/li&gt;
&lt;li&gt;Бутан кипит при температуре -1 градус цельсия.&lt;/li&gt;
&lt;li&gt;Изобутан кипит при температуре -12 градусов цельсия.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Отсюда видно, что чем в смеси больше пропана и меньше бутана, тем газ лучше будет работать в холодную погоду. Наиболее оптимальными на холода будут пропан-изобутановые смеси, где не меньше 20-25% пропана.&lt;/p&gt;
&lt;p&gt;Чисто пропановые баллоны не делают по &lt;del&gt;двум&lt;/del&gt; трём (на основании комментариев) причинам:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;опасность взрыва от перегрева в тёплое/жаркое время года;&lt;/li&gt;
&lt;li&gt;стоимость изобутана и бутана значительно меньше стоимости пропана.&lt;/li&gt;
&lt;li&gt;пропан не имеет запаха, поэтому бутан, как сильно вонючий, добавляют для контроля утечек газа.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Т.е. теперь, глядя на баллон, хотя бы примерно можно представлять как он будет вести себя на холоде. По субъективным наблюдениям: &amp;ldquo;новая&amp;rdquo; ковеевская смесь (изобутан 72%, пропан 22%, бутан 6%) работает хорошо до -20 градусов. Будет больше пропана и меньше бутана - на меньшую температуру можно рассчитывать.&lt;/p&gt;
&lt;p&gt;Ну и сразу же по расходу или сколько планировать газа на маршрут, взято отсюда: 
&lt;a href=&#34;http://kovea.ru/articles/information/portativnye-gazovye-ballony-i-gazovye-kartridzhi/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://kovea.ru/articles/information/portativnye-gazovye-ballony-i-gazovye-kartridzhi/&lt;/a&gt;, но, в целом, отражает суть (хотя по оценка на высоте + топление снега как раз получалось около 160 грамм):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Количество газа нужно брать рассчитывается индивидуально исходя из условий, в которых будете находиться, при использовании газовых горелок и плит из-за сильного ветра теплопотери будут огромные, обязательно докупите ветрозащитный экран или сконструируйте сами. Обычно примерный расчет газа идет такой:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;50 гр./чел в день – эконом..&lt;/li&gt;
&lt;li&gt;80 гр./чел в день - оптимальный вариант&lt;/li&gt;
&lt;li&gt;100 гр./чел в день – комфортные условия.&lt;/li&gt;
&lt;li&gt;100-300 гр./чел в день – альпинизм (растопить снег, обычно берется в 2е больше примерно 160-200 гр./чел в день).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Интегрированные системы могут сэкономить расход газа на 20-30%.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Есть ещё варианты котлов под обычные горелки, но с радиатором. Судя по тестам, радиатор даёт выигрыш по времени около 40%, по расходу газа 15-20%.&lt;/p&gt;
&lt;p&gt;Мои наблюдения и компоновка знаний по расходу газа в походах отражена в заметке: 
&lt;a href=&#34;https://htrd.su/blog/2015/09/07/rasxod_gaza_v_poxode/&#34;&gt;Расход газа в походе&lt;/a&gt;. Там же рекомендации, на какое количество газа ориентироваться под конкретную ситуацию.&lt;/p&gt;
&lt;p&gt;И дополнительно по массе баллонов, начну с непривычных, бытовых баллонов (эти данные для ориентировки, на шильдике самого баллона более точная информация указана):&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.germes-gas.ru/gazovye-ballony/propan/5&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.germes-gas.ru/gazovye-ballony/propan/5&lt;/a&gt; - баллон 5л&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.germes-gas.ru/gazovye-ballony/propan/12&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.germes-gas.ru/gazovye-ballony/propan/12&lt;/a&gt; - баллон 12л&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://wikimassa.org/skolko_vesit_gazovyj_ballon&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://wikimassa.org/skolko_vesit_gazovyj_ballon&lt;/a&gt; - баллоны 5-50л&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://tourist.kharkov.ua/phpbb/viewtopic.php?t=7492&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://tourist.kharkov.ua/phpbb/viewtopic.php?t=7492&lt;/a&gt; - мегаподборка по весу разных туристических баллонов газа (вес пустого баллона, вес полного)&lt;/li&gt;
&lt;/ol&gt;</description>
    </item>
    
    <item>
      <title>C&#43;&#43; и копирование перекрывающихся областей</title>
      <link>https://htrd.su/blog/2014/04/07/c_i_kopirovanie_perekryvajuschixsja_oblastej/</link>
      <pubDate>Mon, 07 Apr 2014 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2014/04/07/c_i_kopirovanie_perekryvajuschixsja_oblastej/</guid>
      <description>&lt;p&gt;Программируя на Си многие сталкивались с такими функциями как &lt;code&gt;memcpy()&lt;/code&gt; и &lt;code&gt;memmove()&lt;/code&gt;, по сути, функции делают одно и тоже, но вторая корректно отрабатывает ситуацию, когда области памяти перекрываются (на что появляются дополнительные накладные расходы).&lt;/p&gt;
&lt;p&gt;В мире С++ никто не запрещает пользоваться этими функциями (часто эти функции используют различные механизмы оптимизации и могут статься быстрее своих собратьев из мира C++), но есть и более родное средство, работающее через итераторы: &lt;code&gt;std::copy&lt;/code&gt;. Это средство применимо не только к POD типам, а к любым сущностям, поддерживающим итераторы. О деталях реализации в стандарте ничего не сказано, но можно предположить, что разработчики библиотеки не настолько глупы, что бы не использовать, оптимизированные &lt;code&gt;memcpy()&lt;/code&gt;/&lt;code&gt;memmove()&lt;/code&gt; когда это возможно.&lt;/p&gt;
&lt;p&gt;Но по наитию, хочется посмотреть, а что там с пересекающимися областями (overlapping memory blocks)? Ведь задача, на самом деле, не такая уж редкая. К примеру, хотим мы читать MPEG-TS пакеты (размер каждого 188 байт, каждый пакет начинается с 0x47 /sync byte/) из какого-то потока, и есть вероятность, что первое (а может и последующее, либо имеем дело с M2TS контейнером, размер блока которого 192 байта и лишние 4 байта в большинстве случаем мы можем игнорировать) чтение может попасть на середину пакета. В таких случаях обычно делается так: вычитываем блок 188 байт, далее ищем байт синхронизации, если он в нулевой позиции - всё отлично, если нет, то данные от него и до конца, нужно переместить в начало блока, в освободившееся место нужно дочитать недостающу порцию, после чего пакет считается вычитанным и можно отдавать его на обработку.&lt;/p&gt;
&lt;p&gt;Наглядно процесс копирования данных в начало блока можно показать этой картинкой:&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2014/04/07/copy.png&#34; alt=&#34;std::copy&#34;&gt;&lt;/p&gt;
&lt;p&gt;Т.е. видим, что есть перекрытие. Логично, было бы применить какой-то аналог &lt;code&gt;memmove()&lt;/code&gt;, но в стандартной библиотеке есть только &lt;code&gt;std::move&lt;/code&gt; который делает совершенно не то. Но при этом, читая описание для &lt;code&gt;std::copy&lt;/code&gt; (
&lt;a href=&#34;http://www.cplusplus.com/reference/algorithm/copy&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.cplusplus.com/reference/algorithm/copy&lt;/a&gt;) видим следующую строчку:&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The ranges shall not overlap in such a way that result points to an element in the range [first,last).&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;т.е. на самом деле, если начало области (result) куда копировать, лежит вне области [first,last), то всё должно быть ок. И это реально так.&lt;/p&gt;
&lt;p&gt;Но посмотрим такую схему копирования с перекрытием:&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2014/04/07/copy-backward.png&#34; alt=&#34;std::copy_backward&#34;&gt;&lt;/p&gt;
&lt;p&gt;пока не обращаем внимание на то, что result тут в конце. Смысл картинки в том, что блок памяти нужно сдвинуть с начала на какое-то смещение вперёд, соответственно если это смещение меньше размера сдвигаемого блока, то адрес назначения у нас будет лежать в пределах [first,last), таким образом условие применимости &lt;code&gt;std::copy&lt;/code&gt; не соблюдаются. И если применить его, мы просто затрём данным в перекрывающейся области.&lt;/p&gt;
&lt;p&gt;Но тут на помощь нам приходит его собрат, как раз решающий эту проблему: &lt;code&gt;std::copy_backward&lt;/code&gt;, всё отличие этой функции в том, что он осуществляет копирование с конца. Т.е. для случая изображённой на второй картинке, он возьмёт (далее очень грубо, т.е. на самом деле last и result это указатели на конец блока, а ближайшие данные находятся по last-1 и result-1) элемент из last и ложится в result, далее из last-1 в result-1, далее из last-2 в result-2 и так далее.&lt;/p&gt;
&lt;p&gt;Видно, что при такой схеме копирования, когда мы начнём писать в перекрывающуюся область, данные в ней уже будут обработаны. Т.е. для нас всё хорошо. Забавно, что условие применимости при перекрывающийся областях для &lt;code&gt;std::copy_backward&lt;/code&gt; слово в слово повторяет данное условие для &lt;code&gt;std::copy&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Итак, резюмируя, простое правило:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Если result &amp;lt; first (&amp;ldquo;сдвиг блока к началу /или влево/&amp;rdquo;), то применяем &lt;code&gt;std::copy&lt;/code&gt;, в качестве result указываем НАЧАЛО блока-назначения.&lt;/li&gt;
&lt;li&gt;Если result &amp;gt; first (&amp;ldquo;сдвиг блока к концу /или вправо/&amp;rdquo;), то применяем &lt;code&gt;std::copy_backward&lt;/code&gt;, в качестве result указываем КОНЕЦ блока-назначения.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Текст является творческим переосмыслением англоязычной статьи: 
&lt;a href=&#34;http://www.trilithium.com/johan/2006/02/copy-confusion&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.trilithium.com/johan/2006/02/copy-confusion&lt;/a&gt;, картинки взяты от туда же, пример из собственного опыта.&lt;/p&gt;
&lt;p&gt;Референс:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.cplusplus.com/reference/algorithm/copy&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.cplusplus.com/reference/algorithm/copy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.cplusplus.com/reference/algorithm/copy_backward&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.cplusplus.com/reference/algorithm/copy_backward&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;PS Статья была опубликована на Habrahabr: 
&lt;a href=&#34;http://habrahabr.ru/post/218451&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://habrahabr.ru/post/218451&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>C&#43;&#43;11 regex</title>
      <link>https://htrd.su/blog/2014/04/05/c_11_regex/</link>
      <pubDate>Sat, 05 Apr 2014 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2014/04/05/c_11_regex/</guid>
      <description>&lt;p&gt;В синтаксисе регулярок в GCC 4.8.1/libstdc++4.8 нет поддержки квадратных скобок: &lt;code&gt;[]&lt;/code&gt;. Пришлось использовать Boost.Regex&lt;/p&gt;
&lt;p&gt;Ах да, пруф: 
&lt;a href=&#34;http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53631&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53631&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Калькулятор X11 Modeline</title>
      <link>https://htrd.su/blog/2014/03/26/kalkuljator_x11_modeline/</link>
      <pubDate>Wed, 26 Mar 2014 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2014/03/26/kalkuljator_x11_modeline/</guid>
      <description>&lt;p&gt;Да, времена, когда нужно было считать модлайны, дабы выжать из своего монитора и видюхи максимум уже прошли (вздох, вспомнив пару ADI Microscan 4V и S3 Trio 64V+). Но если вас настигла проблема или вдруг, как мне, для тестов, потребовалось нестандартное разрешение экрана, то вот простой калькулятор: 
&lt;a href=&#34;http://www.arachnoid.com/modelines/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.arachnoid.com/modelines/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ниже по тексту идёт теория, а так же информация о том, куда нужно вставлять полученный модлайн.&lt;/p&gt;
&lt;p&gt;Про калькулятор написал, что простой. Не хороший, а простой. Почему так? А потому, что очень много тонких настроек скрыто, по сути, вы задаёте жалемое разрешение и частоту обновления. Ну а для более тонкой настройки есть и другие, типа: 
&lt;a href=&#34;http://xtiming.sourceforge.net/cgi-bin/xtiming.pl&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://xtiming.sourceforge.net/cgi-bin/xtiming.pl&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;В оффлайне, аналогами этих калькуляторов, пожалуй будут: &lt;code&gt;gtf&lt;/code&gt; и &lt;code&gt;xvidtune&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Первая прячется в пакете (debian-based) &lt;code&gt;xserver-xorg-core&lt;/code&gt;, вторая в пакете &lt;code&gt;x11-xserver-utils&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Пользоватся &lt;code&gt;gtf&lt;/code&gt; так же просто как первым описанным калькулятором, просто передаём ей разрешение и частоту на вход, получаем результат:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ gtf &lt;span class=&#34;m&#34;&gt;800&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;480&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;60&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 800x480 @ 60.00 Hz (GTF) hsync: 29.82 kHz; pclk: 29.58 MHz&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Modeline &lt;span class=&#34;s2&#34;&gt;&amp;#34;800x480_60.00&amp;#34;&lt;/span&gt;  29.58  &lt;span class=&#34;m&#34;&gt;800&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;816&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;896&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;992&lt;/span&gt;  &lt;span class=&#34;m&#34;&gt;480&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;481&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;484&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;497&lt;/span&gt;  -HSync +Vsync
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;xvidtune&lt;/code&gt; своим названием говорит: запускам и тюним в интерактивном режиме.&lt;/p&gt;
&lt;p&gt;Для добавления сгенерированного ModeLine нужно добавить его в секцию &amp;ldquo;Monitor&amp;rdquo; в &lt;code&gt;/etc/X11/xorg.conf&lt;/code&gt; или создать файл &lt;code&gt;/etc/X11/xorg.conf.d/00-modeline.conf&lt;/code&gt; примерно следующего содержимого:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Section &amp;#34;Monitor&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ModeLine &amp;#34;800x480_60.00&amp;#34;  29.58  800 816 896 992  480 481 484 497  -hsync +vsync
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;EndSection
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Можно добавить параметр &lt;code&gt;Identifier&lt;/code&gt; что бы указать к какому монитору добавлять.&lt;/p&gt;
&lt;p&gt;Второй вариант: использовать &lt;code&gt;xrandr&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Выглядит это примерно так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;xrandr --newmode &lt;span class=&#34;s2&#34;&gt;&amp;#34;800x480_60.00&amp;#34;&lt;/span&gt;  29.58  &lt;span class=&#34;m&#34;&gt;800&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;816&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;896&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;992&lt;/span&gt;  &lt;span class=&#34;m&#34;&gt;480&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;481&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;484&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;497&lt;/span&gt;  -HSync +Vsync
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;xrandr --addmode HDMI1 &lt;span class=&#34;s2&#34;&gt;&amp;#34;800x480_60.00&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;xrandr --output HDMI1 --mode &lt;span class=&#34;s2&#34;&gt;&amp;#34;800x480_60.00&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Больше теории о ModeLine:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://howto-pages.org/ModeLines/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;X and ModeLines&lt;/a&gt;: Tweaking your X configuration manually…&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://www.x.org/wiki/FAQVideoModes/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Video Modes FAQ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://en.wikipedia.org/wiki/XFree86_Modeline&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;XFree86 Modeline&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Если возникнет вопрос, что мол, скоро Wayland закопает XOrg, то ответ простой:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;если и закопает, то не скоро&lt;/li&gt;
&lt;li&gt;и подобные знания могут потребоваться внезапно, к примеру, генератор Marshall V-SG4K-HDI позволяет задать кастомный сигнал, и тут как раз пригодится mode line&lt;/li&gt;
&lt;li&gt;может потребовать для конфигурирования Frame Buffer без иксов и Wayland вообще&lt;/li&gt;
&lt;/ol&gt;</description>
    </item>
    
    <item>
      <title>Китайская мультитопливная горелка BRS-8 и запчасти от Kovea</title>
      <link>https://htrd.su/blog/2014/01/29/kitajskaja_multitoplivnaja_gorelka_brs-8_i_zapchasti_ot_kovea/</link>
      <pubDate>Wed, 29 Jan 2014 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2014/01/29/kitajskaja_multitoplivnaja_gorelka_brs-8_i_zapchasti_ot_kovea/</guid>
      <description>&lt;p&gt;Итак, буквально перед новым годом стал обладателем горелки китайского производства BRS-8&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2014/01/29/brs-8.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Плюс этой горелки - её цена. Мне она обошлась в 2200 рублей в местном магазине во Владивостоке. Естественно встал вопрос надёжности отдельных частей, всё же &amp;ldquo;китай&amp;rdquo; в России уже термин нарицательный, описывающий определённое качество товаров, крайне далеко отстоящее от положительного.&lt;/p&gt;
&lt;p&gt;Гугление особо ничего не дало, многократных подтверждений и особых болезней тоже не было выявлено, но получилось выделить следующее (наиболее собрано получилось тут: 
&lt;a href=&#34;http://www.youtube.com/watch?v=jEds1uRhWkI&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.youtube.com/watch?v=jEds1uRhWkI&lt;/a&gt;):&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Износ шланга, травление в районе крепления к штуцеру со стороны регулятора и крепления к самой горелки&lt;/li&gt;
&lt;li&gt;Износ регулятора, начинает сифонить, при этом изнашивается не резиновые прокладки, а металл (!!!)&lt;/li&gt;
&lt;li&gt;Насос, точнее резьба, которая вкручивается в баллон, из-за своей пластиковой природы изнашивается. У некоторых сифонит по периметру, в месте вхождения насоса в пробку.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Логичным путём было поискать возможные замены для отдельных узлов и агрегатов. И тут&amp;hellip; у меня родилась мысль&amp;hellip;&lt;/p&gt;
&lt;p&gt;В названии этой горелки в разных каталогах встречается приписка &amp;ldquo;Booster +1&amp;rdquo;, что как бы намекает на отношение этой горелки к 
&lt;a href=&#34;http://kovea.ru/catalog/items/multitoplivnaya-gorelka-kb-0603-booster-1&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Kovea KB-0603 Booster +1&lt;/a&gt;. Действительно, визуальное сравнение по фотографиям приводит только к следующим различиям:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;форма ног самой печки;&lt;/li&gt;
&lt;li&gt;наличие бутылки в комплекте BRS-8&lt;/li&gt;
&lt;li&gt;более скудный ремкомплект у BRS-8&lt;/li&gt;
&lt;li&gt;отсутствие переходника на цанговый баллон у BRS-8&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Всё. Визуальных конструкционных раздичий больше не наблюдается. Шланг, регулятор, насос, рассекатель пламени (он и оригинального бустера нередко теряется)  похожи как, почти, две капли воды. Сами поглядите:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2014/01/29/koveabosster1.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Соответственно было решено попытаться заказать комплектующие от оригинального бустера, примерить на китайский BRS-8 и посчитать результирующую стоимость полученного мутанта.&lt;/p&gt;
&lt;p&gt;Насос, пока, было решено не покупать, а когда потребуется, взять в местном магазине (ровно как и ремкомплект и переходник на цанговый баллон). Шланг, регулятор и рассекатель пламени брались на 
&lt;a href=&#34;http://kovea.ru&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://kovea.ru&lt;/a&gt;. При этом, в каталоге их нет, поэтому нужно писать на 
&lt;a href=&#34;mailto:eshop@kovea.ru&#34;&gt;eshop@kovea.ru&lt;/a&gt; или 
&lt;a href=&#34;mailto:service@kovea.ru&#34;&gt;service@kovea.ru&lt;/a&gt;. Стоимость этих позиций узнаётся в этом разделе: 
&lt;a href=&#34;http://kovea.ru/page/service/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://kovea.ru/page/service/&lt;/a&gt;. Жителям Москвы будет проще лично забрать необходимые позиции там, для удалёнки, оплата через робокассу (почти все возможные методы оплаты) и доставка EMS или другой курьерской службой.&lt;/p&gt;
&lt;p&gt;Подкатом много картинок. Здесь и далее все изображение кликабельны.&lt;/p&gt;
&lt;h2 id=&#34;сравнение-комплектующих&#34;&gt;Сравнение комплектующих&lt;/h2&gt;
&lt;p&gt;Итак, начнём сравнение.&lt;/p&gt;
&lt;p&gt;Для начала две фотографии оригинального (слева) узла &amp;ldquo;шланг+регулятор&amp;rdquo; в сборе и ковеевского (справа):&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2014/01/29/p1290021.jpg&#34; alt=&#34;&#34;&gt; &lt;img src=&#34;https://htrd.su/img/post/2014/01/29/p1290022.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Теперь посмотрим на регуляторы (ковеевский слева, оригинальный - справа):&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2014/01/29/p1290023.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Внешние отличия минимальны и, практически, только визуальные: цвет ручки серый у коввеевского, жёлтый у китайца. Длинна регулятора у китайца больше, при этом ковеевский регулятор делает только один поворот от положения &amp;ldquo;закрыто&amp;rdquo; до &amp;ldquo;открыто полностью&amp;rdquo;, а вот китайцу нужно больше оборотов. В резьбе для баллона/насоса отличий тоже нет. А вот узел для подключения шланга уже значительно отличается: у китайца штуцер толще. Как следствие: китайский шланг не полезет в ковеевский регулятор, а ковеевский шланг будет болтаться в китайском регуляторе. Отсюда минус - если сдох шланг или регулятор, нужно менять или на китайский или менять сразу всборе. На картинках ниже видно различие в толщине штуцера (китаец слеве, ковея - справа):&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2014/01/29/p1290024.jpg&#34; alt=&#34;&#34;&gt; &lt;img src=&#34;https://htrd.su/img/post/2014/01/29/p1290025.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Узел &amp;ldquo;шланг+регулятор&amp;rdquo; ковея на китайском насосе:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2014/01/29/p1290035.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Кроме того, длинна ковеевского шланга чуть меньше:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2014/01/29/p1290026.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Узел крепления к комфорке тоже отличается: на коввевском шланге длинна резьбы больше:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2014/01/29/p1290027.jpg&#34; alt=&#34;&#34;&gt; &lt;img src=&#34;https://htrd.su/img/post/2014/01/29/p1290029.jpg&#34; alt=&#34;&#34;&gt; &lt;img src=&#34;https://htrd.su/img/post/2014/01/29/p1290031.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Меня это несколько смутило, испугался, что из-за неплотного контакта возможно травление. С другой стороны теперь шланг накручивается полностью и, в случае травления, можно надеть уплотняющую резинку на резьбу:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2014/01/29/p1290036.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Ходовые испытания на газе не дали травления, нарочно водил ражженой зажигалкой на стеке шланга и комфорки&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2014/01/29/p1290037.jpg&#34; alt=&#34;&#34;&gt; &lt;img src=&#34;https://htrd.su/img/post/2014/01/29/p1290038.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Ну и рассекатель, хоть и покупал не себе, но решил проверить (на первом фото два рассекателя рядом, на втором - один на другом):&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2014/01/29/p1290032.jpg&#34; alt=&#34;&#34;&gt; &lt;img src=&#34;https://htrd.su/img/post/2014/01/29/p1290033.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Посадка очень свободная, при переворачивании горелки - слетает. Сразу нужно подонуть лапки, дабы одевалась с небольшим усилием:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2014/01/29/p1290034.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;del&gt;Про насос напишу чуть позже. Пока покупать его необходимости не вижу, но, возможно, даст потестировать владелец оригинального бустера.&lt;/del&gt; Читайте далее.&lt;/p&gt;
&lt;p&gt;Отмечу, что китайцы сделали ещё две модификации этой горелки: BRS-8A (поставляется в пластиковом кейсе) и BRS-8B. Первая стоит дороже, но выкладки для неё полностью аналогичны оригинальной BRS-8. В BRS-8B изменили узлы крепления шланга к комфорке и шланга к насосу, как следствие - потеряна совместимость с ковеевским бустером. На базе этой модификации делаются горелки Следопыт &amp;ldquo;Огонь Прометея&amp;rdquo;. На базе оригинальной BRS-8 Tramp делает свою TRG-013 (они же продают шланг+регулятор в сборе под идентификатором TRG-022, и стоит оно в 2 раза меньше, чем ковеевское). В обоих случаях ценник увеличивается больше чем на 1000 рублей.&lt;/p&gt;
&lt;p&gt;Далее посмотрим на флягу и насосы:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2014/01/29/p2170056.jpg&#34; alt=&#34;&#34;&gt; &lt;img src=&#34;https://htrd.su/img/post/2014/01/29/p2170059.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;С флягами, где какая, всё понятно. С насосами: ковеевский слева, китайский (желтая гайка и оранжевая резиновая прокладка) - справа. Выглядят как два брата-близнеца. Но тут и кроется подвох: разный диаметр резьбы. У китайца он чуть меньше. В результате ковеевский насос просто физически, без хитрых модификаций не вкрутить в китайскую флягу. Т.е. в случае выхода из строя насоса или стачивании пластиковой резьбы, придётся покупать и ковеевскую флягу. Так же об этом стоит помнить, если в один поход идут обе горелки (при использовании запасный ковеевских фляг). К сожалению, точный диаметр резьбы, в виду отсутствия штангенциркуля, изменить не могу.&lt;/p&gt;
&lt;h2 id=&#34;скупой-платит-дважды&#34;&gt;Скупой платит дважды?&lt;/h2&gt;
&lt;p&gt;По стоимости комплектующих получается такой расклад:&lt;/p&gt;
&lt;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;/td&gt;
          &lt;td&gt;400 (+200)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Регулятор&lt;/td&gt;
          &lt;td&gt;400 (+200)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Рассекатель&lt;/td&gt;
          &lt;td&gt;200 (+100)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Насос&lt;/td&gt;
          &lt;td&gt;900&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Фляга&lt;/td&gt;
          &lt;td&gt;900&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Ремкомплект&lt;/td&gt;
          &lt;td&gt;200&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Переходник&lt;/td&gt;
          &lt;td&gt;250&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Рассекатель я брал не для себя, поэтому в расчётах его учитывать не буду. Доставка получилась 500 руб (EMS), я её раскидал пропорционально на шланг, регулятор и рассекатель (значения в скобочках).&lt;/p&gt;
&lt;p&gt;Теперь немного посчитаем:&lt;br/&gt;&lt;br/&gt;
Горелка обошлась мне в 2200 руб, даже если сразу на ней заменить шланг, регулятор и насос на фирменные получается:&lt;br/&gt;&lt;br/&gt;
&lt;m&gt;2200 + 600 + 600 + 900 = 4300&lt;/m&gt; руб&lt;br/&gt;&lt;br/&gt;
при стоимости горелки Kovea Booster +1 6800 руб, получаем экономию:&lt;br/&gt;&lt;br/&gt;
&lt;m&gt;6800 - 4300 = 2500&lt;/m&gt; руб&lt;br/&gt;&lt;br/&gt;
или&lt;br/&gt;&lt;br/&gt;
&lt;m&gt;2500 / 6800  100% = 36%&lt;/m&gt;&lt;br/&gt;&lt;br/&gt;
т.е. больше трети стоимости. Неплохо. Для более дешёвой доставки и для жителей Москвы эта цифра будет ещё больше. Соответственно, если докупить ремкомплект и переходник (его нет в комплекте оригинального бустера), экономия будет более скромной, но всё равно более 30%. Максимальная скидка, которая мне доступна в магазине, где я могу купить оригинальный бустер - 10%. В общем - ощутимо. При покупке фляги, выигрыш снижается до 23.5%.&lt;/p&gt;
&lt;p&gt;Кроме того, оригинальные запчасти всё равно некоторое время поработают и траты будут размазаны по времени, что тоже более щадяще для кармана. Ну и никто не запрещает, в случае выхода из строя регулятора или шланга взять его же от Tramp (Tramp TRG-022), что выйдет в 250-400 рублей, что дешевле ковеевского.&lt;/p&gt;
&lt;h3 id=&#34;upd-цены-на-2018-год&#34;&gt;UPD: цены на 2018 год&lt;/h3&gt;
&lt;p&gt;Китайцы теперь цены подняли, да и корейцы тоже&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Оригинальный бустер: 12230&lt;/li&gt;
&lt;li&gt;BRS-8: ~3600&lt;/li&gt;
&lt;/ul&gt;
&lt;p&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;Шланг&lt;/td&gt;
          &lt;td&gt;750&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Регулятор&lt;/td&gt;
          &lt;td&gt;750 *&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Рассекатель&lt;/td&gt;
          &lt;td&gt;350 *&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Насос&lt;/td&gt;
          &lt;td&gt;2760&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Фляга&lt;/td&gt;
          &lt;td&gt;1630&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Ремкомплект&lt;/td&gt;
          &lt;td&gt;290&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Переходник&lt;/td&gt;
          &lt;td&gt;520&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;(*) отмечены примерные цены, запрос на уточнение отправлен в kovea.ru. Остальные цены - из каталого Kovea.ru.&lt;/p&gt;
&lt;p&gt;Итого, полный комплект BRS-8 без ремкомплекта:&lt;br/&gt;&lt;br/&gt;
&lt;m&gt;3600 + 750 + 750 + 2760 + 1630 + 520 = 10010&lt;/m&gt;, руб&lt;/p&gt;
&lt;p&gt;Экономия:&lt;br/&gt;&lt;br/&gt;
&lt;m&gt;12230 - 10010 = 2220&lt;/m&gt;, руб&lt;/p&gt;
&lt;p&gt;или:&lt;br/&gt;&lt;br/&gt;
&lt;m&gt;2220 / 12230 100% = 18.15%&lt;/m&gt;&lt;/p&gt;
&lt;h2 id=&#34;выводы&#34;&gt;Выводы&lt;/h2&gt;
&lt;p&gt;Основные потенциально ненадёжные узлы успешно заменяются на узлы от Kovea Booster+1. По стоимости, даже полная замена комплектующих получается выгоднее чем покупка оригинального бустера. Есть идея сравнить их в части скорости закипания и расхода газа и бензина, но когда это получится сделать - неизвестно.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>PlantUML: параллельное выполнение в Sequence Diagram</title>
      <link>https://htrd.su/blog/2014/01/27/plantuml_parallelnoe_vypolnenie_sequence_diagram/</link>
      <pubDate>Mon, 27 Jan 2014 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2014/01/27/plantuml_parallelnoe_vypolnenie_sequence_diagram/</guid>
      <description>&lt;p&gt;Давно хотелось иметь в PlantUML возможно в Sequence диаграмме рисовать две параллельные ветки выполнения (на самом деле иногда больше, но хотя бы&amp;hellip;).&lt;/p&gt;
&lt;p&gt;И вот, случайно в последней версии нащупал такую команду:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;par2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  ...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;else
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  ...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;end
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Т.е. при примерно таком коде:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;@startuml
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hide footbox
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;A++
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;par2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    A -&amp;gt; B ++
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    B -&amp;gt; B ++
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    return
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    return
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;else
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    A -&amp;gt; C ++
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    C -&amp;gt; C ++
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;end
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;A--
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;@enduml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;мы получим следующую картинку:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2014/01/27/sequence_diagram_parallel.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;в общем, чего и хотелось.&lt;/p&gt;
&lt;p&gt;Правда при таком подходе, если, допустим, A, B и C - разные потоки, то операции с A нужно корректно вставлять в одну из веток &lt;code&gt;par2&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;PS в примере можно видеть различные операции типа &lt;code&gt;++&lt;/code&gt; и &lt;code&gt;--&lt;/code&gt; найти их описание можно здесь: 
&lt;a href=&#34;http://plantuml.sourceforge.net/incubation.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://plantuml.sourceforge.net/incubation.html&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Прототипирование UI для мобильных приложений на бумаге</title>
      <link>https://htrd.su/blog/2014/01/16/prototipirovanie_ui_dlja_mobilnyx_prilozhenij_na_bumage/</link>
      <pubDate>Thu, 16 Jan 2014 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2014/01/16/prototipirovanie_ui_dlja_mobilnyx_prilozhenij_na_bumage/</guid>
      <description>&lt;p&gt;Люблю работать с бумажными носителями. Люблю гаджеты, облегчающие эту работу. И хоть я не пишу под мобильные платформы, но информация о средствах прототипирования пользовательского интерфейса для мобильных приложений с помощью бумаги меня заинтересовала. Итак:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Блокноты для прототипирования: 
&lt;a href=&#34;http://onapkin.com/shop/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://onapkin.com/shop/&lt;/a&gt; удобны, но не обязательны
1. Ещё блокноты:
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.uistencils.com/products/android-handset-sketch-pad&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.uistencils.com/products/android-handset-sketch-pad&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.uistencils.com/products/android-tablet-sketch-pad&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.uistencils.com/products/android-tablet-sketch-pad&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Программа для склейки и анимирования: 
&lt;a href=&#34;https://popapp.in/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://popapp.in/&lt;/a&gt;, там же: демонстрация работы.&lt;/li&gt;
&lt;li&gt;Статья на хабре про трафарет для iPhone: 
&lt;a href=&#34;http://habrahabr.ru/post/209002/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://habrahabr.ru/post/209002/&lt;/a&gt;, трафареты для Android на сайте производителя:
1. 
&lt;a href=&#34;http://www.uistencils.com/collections/frontpage/products/android-tablet-stencil-kit&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.uistencils.com/collections/frontpage/products/android-tablet-stencil-kit&lt;/a&gt; - для планшетов
2. 
&lt;a href=&#34;http://www.uistencils.com/collections/frontpage/products/android-stencil-kit&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.uistencils.com/collections/frontpage/products/android-stencil-kit&lt;/a&gt; - для телефонов&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Особнячком, русский магазин, который возит на заказ: 
&lt;a href=&#34;http://moiprototip.ru/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://moiprototip.ru/&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Wifi на Asus X551C</title>
      <link>https://htrd.su/blog/2013/12/22/wifi_na_asus_x551c/</link>
      <pubDate>Sun, 22 Dec 2013 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2013/12/22/wifi_na_asus_x551c/</guid>
      <description>&lt;p&gt;Не думаю, что проблема дистрибутивно-специфичная, но писать буду про Linux Mint 16.&lt;/p&gt;
&lt;p&gt;Итак, имеем проблему: при загрузке с CD и уже в самой системе после установки у нас заблокирован Wifi:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;user@user-X551CAP ~ $ rfkill list
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;1: phy0: Wireless LAN
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	Soft blocked: no
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	Hard blocked: yes
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;2: asus-wlan: Wireless LAN
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	Soft blocked: no
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	Hard blocked: no
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;3: asus-bluetooth: Bluetooth
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	Soft blocked: no
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	Hard blocked: no
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;4: hci0: Bluetooth
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	Soft blocked: no
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	Hard blocked: no
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Обращаем внимание на строку&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Hard blocked: yes
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;для устройства &lt;code&gt;phy0&lt;/code&gt;. Обычно такое бывает когда карта выключена или через BIOS или через переключатель корпусе ноутбука. В случае конкретной модели Asus это состояние должно переклчаться через Fn-F2. Да вот беда: не работает эта комбинация. Вызов &lt;code&gt;acpi_listen&lt;/code&gt; молчит как партизан при нажатии этой кнопки.&lt;/p&gt;
&lt;p&gt;Но самым шоком стало то, что после засыпания и просыпания карта включалась! Собственно это стало поводом к поиску. И&amp;hellip; первым воркэраундом :)&lt;/p&gt;
&lt;p&gt;Перебирая выводы команд &lt;code&gt;lspci -nn&lt;/code&gt;, &lt;code&gt;lsmod&lt;/code&gt;, изучил какие модули используются. Особо заинтересовали модули из серии &lt;strong&gt;wmi&lt;/strong&gt; - Windows Management Instrumentation и, в частности, &lt;strong&gt;asus_nb_wmi&lt;/strong&gt; отвечающий, судя по всему за трансляцию различных клавиатурных эвентов, и его опция &lt;strong&gt;wapf&lt;/strong&gt;, которая, судя по интернетам, отвечает за поведение клавиш включения/выключения Wifi и Bt.&lt;/p&gt;
&lt;p&gt;Итак, погуглив по интернетам, нахожу следующие ссылки:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;a href=&#34;http://ubuntuforums.org/showthread.php?t=2173539&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://ubuntuforums.org/showthread.php?t=2173539&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://ubuntuforums.org/showthread.php?t=2172434&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://ubuntuforums.org/showthread.php?t=2172434&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;В общем, вроде как у некоторых проблему решает. Забегая вперёд хочу отметить: wifi заработал со значением wapf равным единице, но сама клавиша Fn-F2 - нет. Пробовать начинал с 0. Беда в том, что просто перегрузка модуля не помогает, нужно или полностью перегружать модули для карты и всего сопутствующего или просто перегружать комп.&lt;/p&gt;
&lt;p&gt;В общем решение: создаём файл &lt;strong&gt;/etc/modprobe.d/asus.conf&lt;/strong&gt; следующего содержимого:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;options asus_nb_wmi wapf=1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;и перегружаем комп.&lt;/p&gt;
&lt;p&gt;Отмечу, что ещё до этого решения я задал через параметры ядра (задал в /etc/default/grub.conf) следующие настройки:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GRUB_CMDLINE_LINUX_DEFAULT=&amp;#34;... rfkill.master_switch_mode=2 rfkill.default_state=1&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Быть может они помогли в комплексе, но проверять WAPF без параметров для rfkill было уже лень.&lt;/p&gt;
&lt;p&gt;Ссылки по теме:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://habrahabr.ru/post/134968/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://habrahabr.ru/post/134968/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Смайлы в Unicode</title>
      <link>https://htrd.su/blog/2013/12/16/smajly_v_unicode/</link>
      <pubDate>Mon, 16 Dec 2013 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2013/12/16/smajly_v_unicode/</guid>
      <description>&lt;p&gt;
&lt;a href=&#34;https://gist.github.com/endolith/157796&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://gist.github.com/endolith/157796&lt;/a&gt; и 
&lt;a href=&#34;http://www.alanwood.net/unicode/emoticons.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.alanwood.net/unicode/emoticons.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Краткая выдержка, есть вероятность, что не во всех шрифтах будет отображаться корректно:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;☹
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;☺
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;☻
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;♾
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;〠 smile in hat
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ツ
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;㋡
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;😁
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;😃
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;😆
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;😇
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;😈
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;😉
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;😊
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;😋
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;😌
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;😎
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;😏
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;😐
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;😞
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;😠
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;😣
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;😲
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;😹
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;😺
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>KDevelop 4.6 в Linux Mint</title>
      <link>https://htrd.su/blog/2013/12/15/kdevelop_4.6_v_linux_mint/</link>
      <pubDate>Sun, 15 Dec 2013 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2013/12/15/kdevelop_4.6_v_linux_mint/</guid>
      <description>&lt;p&gt;Ставим из PPA kubuntu-ppa/backports. Подробности:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.ubuntuupdates.org/package/kubuntu-ppa_backports/saucy/main/base/kdevelop&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.ubuntuupdates.org/package/kubuntu-ppa_backports/saucy/main/base/kdevelop&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.ubuntuupdates.org/ppa/kubuntu-ppa_backports?dist=saucy&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.ubuntuupdates.org/ppa/kubuntu-ppa_backports?dist=saucy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.kubuntu.org/news/kdevelop-4.6&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.kubuntu.org/news/kdevelop-4.6&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;А если коротко:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo add-apt-repository ppa:kubuntu-ppa/backports 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt-get update
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt-get install kdevelop
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>LyX и вёрстка в три колонки</title>
      <link>https://htrd.su/blog/2013/12/04/lyx_i_vjorstka_v_tri_kolonki/</link>
      <pubDate>Wed, 04 Dec 2013 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2013/12/04/lyx_i_vjorstka_v_tri_kolonki/</guid>
      <description>&lt;p&gt;Ничего необычного, используем пакет LaTeX &lt;strong&gt;multicols&lt;/strong&gt;: 
&lt;a href=&#34;http://tex.stackexchange.com/questions/78294/lyx-3-column-document&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://tex.stackexchange.com/questions/78294/lyx-3-column-document&lt;/a&gt; Колонок может быть и больше :)&lt;/p&gt;
&lt;p&gt;И на будущее нужно ознакомиться с LyX FAQ: 
&lt;a href=&#34;http://wiki.lyx.org/FAQ/FAQ&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://wiki.lyx.org/FAQ/FAQ&lt;/a&gt; в частности, там есть информация как убрать дату из заголовка. 
&lt;a href=&#34;http://www.tux-crazy.com/2010/11/tips-to-get-you-started-with-lyx.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Здесь же&lt;/a&gt; в совете номер 5 есть информация как копипастить таблицы из Open- и LibreOffice.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Android SDK/NDK в Linux Mint</title>
      <link>https://htrd.su/blog/2013/12/01/ndk_v_linux_mint/</link>
      <pubDate>Sun, 01 Dec 2013 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2013/12/01/ndk_v_linux_mint/</guid>
      <description>&lt;p&gt;Просто последовательность действий - на память (брать из PPA не хотелось). Как качать NDK, SDK и Android Studio я расписывать не буду. Распаковку всего этого добра произвёл в &lt;strong&gt;~/Android&lt;/strong&gt;. Имена директорий привёл к виду (или переименованием или созданием необходимых симлинков):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;android-sdk&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;android-ndk&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;android-studio&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;По сути, этот рецепт подходит для любого дистрибутива, в большинстве случаев  будет отличаться только первый пункт.&lt;/p&gt;
&lt;p&gt;Итак&amp;hellip;&lt;/p&gt;
&lt;h2 id=&#34;необходимое&#34;&gt;Необходимое&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Ставим OpenJDK: &lt;code&gt;sudo apt-get install openjdk-7-jdk libswt-cairo-gtk-3-jni libswt-cairo-gtk-3-jni ant&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;В &lt;strong&gt;~/.profile&lt;/strong&gt; или &lt;strong&gt;~/.bashrc_profile&lt;/strong&gt; прописываем:```bash
export ANDROID_HOME=$HOME/Android/android-sdk
export ANDROID_NDK=$HOME/Android/android-ndk&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&#34;for-compability&#34;&gt;For compability&lt;/h1&gt;
&lt;p&gt;export NDK_HOME=$ANDROID_NDK
export ANDROID_SWT=/usr/share/java
export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$ANDROID_NDK:$HOME/Android/android-studio/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ANDROID_HOME/tools/lib&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  1. Переходим в **~/Android/android-studio/bin** и выполняем:```shln -s studio.sh android-studio```
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  2. Добавляем следующие параметры в **studio.vmoptions** и **studio64.vmoptions** (предварительно сделайте резервные копии, пригодятся при обновлениях):```
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-Dswing.aatext=true
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol&gt;
&lt;li&gt;На этом шаге можно перелогиниться, вызвать &lt;strong&gt;android&lt;/strong&gt; и поставить платформы, утилиты, потом запустить Android Studio и сделать необходимые настройки.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;опциональное&#34;&gt;Опциональное&lt;/h2&gt;
&lt;h3 id=&#34;ярлыки-в-меню&#34;&gt;Ярлыки в меню&lt;/h3&gt;
&lt;p&gt;FIXME относительные пути к иконкам не воспринимаются, поэтому иконки не отображаются, только текст.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Создаём файл: &lt;strong&gt;~/.local/share/applications/android-sdk.desktop&lt;/strong&gt; со следующим содержимым:```desktop
[Desktop Entry]
Encoding=UTF-8
Name=Android SDK
Comment=Android Sofware Development Kit
Exec=android
Icon=~/Android/android-sdk/tools/apps/SdkController/res/drawable-xhdpi/ic_launcher.png
Terminal=false
Type=Application
Categories=IDE;Development;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  1. Извлекаем иконку Android Studio: ```shunzip -o lib/resources.jar artwork/icon_AS_128.png``` Вызываем команду из корня android-studio
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  2. Создаём файл: **~/.local/share/applications/android-studio.desktop**:```desktop
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[Desktop Entry]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Version=1.0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Type=Application
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Name=Android Studio
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Exec=android-studio %f
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Icon=~/Android/android-studio/artwork/icon_AS_128.png
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Comment=Develop with pleasure!
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Categories=Development;IDE;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Terminal=false
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;StartupNotify=true
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;StartupWMClass=jetbrains-android-studio
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;MimeType=application/x-extension-iml;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;автодополнение-bash&#34;&gt;Автодополнение BASH&lt;/h3&gt;
&lt;p&gt;Автодополнение для команд &lt;strong&gt;android&lt;/strong&gt;, &lt;strong&gt;adb&lt;/strong&gt;, &lt;strong&gt;emulator&lt;/strong&gt;, &lt;strong&gt;fastboot&lt;/strong&gt; и &lt;strong&gt;repo&lt;/strong&gt;.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Идём в &lt;strong&gt;~/Android&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Забираем последнюю версию скрипта (предполагаю, что git уже установлен):&lt;code&gt;bashgit clone https://github.com/mbrubeck/android-completion.git&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Создаём файл &lt;strong&gt;~/.bash_completion&lt;/strong&gt; и помещаем в него:```bash
. $HOME/Android/android-completion/android
. $HOME/Android/android-completion/repo&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  1. Перелогиниваемся
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Infinality в Linux Mint &amp; Ubuntu</title>
      <link>https://htrd.su/blog/2013/12/01/infinality_v_linux_mint_ubuntu/</link>
      <pubDate>Sun, 01 Dec 2013 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2013/12/01/infinality_v_linux_mint_ubuntu/</guid>
      <description>&lt;p&gt;Готовый PPA: 
&lt;a href=&#34;https://launchpad.net/~no1wantdthisname/&amp;#43;archive/ppa&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://launchpad.net/~no1wantdthisname/+archive/ppa&lt;/a&gt; описание там же.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPD:&lt;/strong&gt; ломает загрузку минта в графику к чертям собачьим. &lt;strong&gt;НЕ ИСПОЛЬЗОВАТЬ&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPD2:&lt;/strong&gt; мужики нашли workaround: 
&lt;a href=&#34;http://forums.linuxmint.com/viewtopic.php?f=208&amp;amp;t=136307&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://forums.linuxmint.com/viewtopic.php?f=208&amp;t=136307&lt;/a&gt;. &lt;strong&gt;Не пробовал&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPD3:&lt;/strong&gt; применил решение из &lt;em&gt;UDP2&lt;/em&gt;, только поместил в более логичное место: &lt;strong&gt;~/.profile&lt;/strong&gt;. Система работает. А то смотреть без слёз на рендеринг шрифтов в QtCreator&amp;rsquo;е было нельзя.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPD4:&lt;/strong&gt; Сохраню тут для потомков и собственного удобства:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# move infinality-settings out of system profile&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mv /etc/profile.d/infinality-settings.sh /etc/infinality-settings.sh
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# make execute by everyone&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo chmod a+rx /etc/infinality-settings.sh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;а уже вызов &lt;code&gt;/etc/infinality-settings.sh&lt;/code&gt; добавить в ~/.profile&lt;/p&gt;
&lt;p&gt;Хотя в той же теме на форуме, сказано, что 
&lt;a href=&#34;http://forums.linuxmint.com/viewtopic.php?f=208&amp;amp;t=136307#p1002601&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;исправлено&lt;/a&gt; в mdm (его вообще мог зафейлить любой косяк в &lt;code&gt;/etc/profile.d/*&lt;/code&gt;): 
&lt;a href=&#34;https://github.com/linuxmint/mdm/commit/ee1a28b3c295c283aa94b890658d78be25e31bb7&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/linuxmint/mdm/commit/ee1a28b3c295c283aa94b890658d78be25e31bb7&lt;/a&gt; и доступно всё это в Mint 17.2 &amp;lsquo;Rafaela&amp;rsquo;. Альтернативной апдейту: отредактировать &lt;code&gt;/etc/init/mdm.conf&lt;/code&gt; согласно патчу.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>LyX в Linux Mint и русский</title>
      <link>https://htrd.su/blog/2013/11/23/lyx_v_linux_mint/</link>
      <pubDate>Sat, 23 Nov 2013 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2013/11/23/lyx_v_linux_mint/</guid>
      <description>&lt;p&gt;Что бы в 
&lt;a href=&#34;http://lyx.org&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;LyX&lt;/a&gt; начали сходу работать русский нужно поставить пакеты: &lt;strong&gt;texlive-lang-cyrillic&lt;/strong&gt; и &lt;strong&gt;cm-super&lt;/strong&gt;. Точнее даже не так: набивать тексты вы сможете сразу, а вот генерировать PDF - только после установки пакетов.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Linux Mint Petra и встроенная ATI/AMD RS880 [Radeon HD 4250]</title>
      <link>https://htrd.su/blog/2013/11/22/amd_rs880_radeon_hd_4250/</link>
      <pubDate>Fri, 22 Nov 2013 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2013/11/22/amd_rs880_radeon_hd_4250/</guid>
      <description>&lt;p&gt;Внезапно, при логине в систему (иксы) выдалось, что рендеринг у меня софтовый. Хотя пакет с драйвером radeon стоял. Изучение &lt;strong&gt;/var/log/Xorg.0.log&lt;/strong&gt; указало на то, что не получается загрузить модули &lt;strong&gt;ati&lt;/strong&gt; и &lt;strong&gt;fglrx&lt;/strong&gt;. При этом нет попыток грузить модуль &lt;strong&gt;radeon&lt;/strong&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cat&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Xorg&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;0.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;log&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;grep&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;ati&amp;lt;br/&amp;gt;|radeon&amp;lt;br/&amp;gt;|fglxrx&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;   &lt;span class=&#34;mf&#34;&gt;990.107&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Build&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Operating&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;System&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Linux&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;3.2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;37&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x86_64&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Ubuntu&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;   &lt;span class=&#34;mf&#34;&gt;990.107&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Current&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Operating&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;System&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Linux&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;work&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;3.11&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;13&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#20-Ubuntu SMP Wed Oct 23 07:38:26 UTC 2013 x86_64&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;command&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;notice&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;II&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;informational&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;n&#34;&gt;Using&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;default&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;monitor&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;configuration&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;   &lt;span class=&#34;mf&#34;&gt;990.109&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;simple_smile&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Automatically&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;adding&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;   &lt;span class=&#34;mf&#34;&gt;990.109&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;simple_smile&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Automatically&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;enabling&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;   &lt;span class=&#34;mf&#34;&gt;990.109&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;simple_smile&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Automatically&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;adding&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;GPU&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;   &lt;span class=&#34;mf&#34;&gt;990.109&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; 	&lt;span class=&#34;n&#34;&gt;X&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Org&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ANSI&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;C&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Emulation&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;0.4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;   &lt;span class=&#34;mf&#34;&gt;990.113&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Initializing&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;built&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;extension&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;XVideo&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MotionCompensation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;   &lt;span class=&#34;mf&#34;&gt;990.114&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;II&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Module&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;glx&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vendor&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;X.Org Foundation&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;   &lt;span class=&#34;mf&#34;&gt;990.114&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;simple_smile&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Matched&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ati&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;autoconfigured&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;driver&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;   &lt;span class=&#34;mf&#34;&gt;990.115&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;simple_smile&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Matched&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ati&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;autoconfigured&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;driver&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;   &lt;span class=&#34;mf&#34;&gt;990.115&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;II&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;LoadModule&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;ati&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;   &lt;span class=&#34;mf&#34;&gt;990.116&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;WW&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;couldn&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;t open module ati&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;   &lt;span class=&#34;mf&#34;&gt;990.116&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;II&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;UnloadModule&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;ati&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;   &lt;span class=&#34;mf&#34;&gt;990.116&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;II&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Unloading&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ati&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;   &lt;span class=&#34;mf&#34;&gt;990.116&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Failed&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;load&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;module&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;ati&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;module&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;does&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;exist&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;   &lt;span class=&#34;mf&#34;&gt;990.117&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;II&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Module&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vesa&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vendor&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;X.Org Foundation&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;   &lt;span class=&#34;mf&#34;&gt;990.117&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;II&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Module&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;modesetting&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vendor&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;X.Org Foundation&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;   &lt;span class=&#34;mf&#34;&gt;990.118&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;II&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Module&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fbdev&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vendor&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;X.Org Foundation&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;   &lt;span class=&#34;mf&#34;&gt;990.118&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;simple_smile&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Matched&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ati&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;autoconfigured&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;driver&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;   &lt;span class=&#34;mf&#34;&gt;990.118&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;simple_smile&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Matched&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ati&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;autoconfigured&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;driver&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;   &lt;span class=&#34;mf&#34;&gt;990.119&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;II&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;LoadModule&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;ati&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;   &lt;span class=&#34;mf&#34;&gt;990.120&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;WW&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;couldn&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;t open module ati&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;   &lt;span class=&#34;mf&#34;&gt;990.120&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;II&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;UnloadModule&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;ati&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;   &lt;span class=&#34;mf&#34;&gt;990.120&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;II&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Unloading&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ati&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;   &lt;span class=&#34;mf&#34;&gt;990.120&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Failed&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;load&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;module&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;ati&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;module&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;does&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;exist&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Почесав макушку, решил попытаться &amp;ldquo;помочь&amp;rdquo; серверу, подтолкнув его в нужном направлении. Для чего идём в &lt;strong&gt;/etc/X11&lt;/strong&gt; создаём каталог &lt;strong&gt;xorg.conf.d&lt;/strong&gt;, а в нём файл &lt;strong&gt;radeon.conf&lt;/strong&gt; (используя любой редактор на своё усмотрение) со следующим содержимым:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Section &amp;#34;Device&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Identifier &amp;#34;radeon&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Driver &amp;#34;radeon&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;EndSection
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Сохраняемся, перелогиниваемся, радуемся отсутствию предупреждения о софтовом рендеринге. Проверяем:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cat&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Xorg&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;0.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;log&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;grep&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;ati&amp;lt;br/&amp;gt;|radeon&amp;lt;br/&amp;gt;|fglxrx&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2082.177&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Build&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Operating&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;System&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Linux&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;3.2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;37&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x86_64&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Ubuntu&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2082.177&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Current&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Operating&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;System&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Linux&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gaz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;work&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;3.11&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;13&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;generic&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#20-Ubuntu SMP Wed Oct 23 07:38:26 UTC 2013 x86_64&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;command&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;notice&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;II&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;informational&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2082.178&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;   &lt;span class=&#34;o&#34;&gt;|--&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Device&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;radeon&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;n&#34;&gt;Using&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;default&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;monitor&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;configuration&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2082.178&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;simple_smile&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Automatically&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;adding&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2082.178&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;simple_smile&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Automatically&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;enabling&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2082.179&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;simple_smile&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Automatically&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;adding&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;GPU&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;devices&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2082.179&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; 	&lt;span class=&#34;n&#34;&gt;X&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Org&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ANSI&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;C&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Emulation&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;0.4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2082.183&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Initializing&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;built&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;extension&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;XVideo&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MotionCompensation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2082.184&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;II&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Module&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;glx&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vendor&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;X.Org Foundation&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2082.184&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;II&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;LoadModule&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;radeon&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2082.185&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;II&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Loading&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;xorg&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;modules&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;drivers&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;radeon_drv&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;so&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2082.219&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;II&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Module&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;radeon&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vendor&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;X.Org Foundation&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2082.236&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;II&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;RADEON&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Creating&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;default&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Display&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;subsection&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Screen&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;section&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2082.248&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;II&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Module&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;exa&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vendor&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;X.Org Foundation&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2082.313&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;II&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Module&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vendor&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;X.Org Foundation&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2082.313&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; 	&lt;span class=&#34;n&#34;&gt;ABI&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;X&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Org&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ANSI&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;C&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Emulation&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;version&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;0.4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2082.313&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;II&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;EXA&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Driver&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;registered&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;support&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;the&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;following&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;operations&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2082.313&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;II&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;         &lt;span class=&#34;n&#34;&gt;Composite&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;RENDER&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;acceleration&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2082.313&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;II&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;RADEON&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Acceleration&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;enabled&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;и&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ glxinfo |grep -i render
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;direct rendering: Yes
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;OpenGL renderer string: Gallium 0.4 on AMD RS880
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;До этого вместо AMD RS880 выводилось следующее:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ glxinfo | grep -i render
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;direct rendering: Yes
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;OpenGL renderer string: Gallium 0.4 on llvmpipe (LLVM 3.3, 128 bits)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Собственно всё.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Firefox и быстрый поиск</title>
      <link>https://htrd.su/blog/2013/11/21/firefox_i_bystryj_poisk/</link>
      <pubDate>Thu, 21 Nov 2013 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2013/11/21/firefox_i_bystryj_poisk/</guid>
      <description>&lt;p&gt;Все - не все, но многие знают, что в Firefox, Google Chrome и, вроде, Опере можно в свойствах закладки указать т.н. ключевое слово (keyword), набрав которое в адресной строке браузера и нажав Ввод перейдёшь по ссылке, на которую указывает данная закладка.&lt;/p&gt;
&lt;p&gt;Удобно? Кому как. Но! У этого функционала есть ещё одно одно применение.&lt;/p&gt;
&lt;p&gt;Дело в том, что в самом адресе закладки можно указать подстановочную последовательность (плейсхолдер, placeholder, уж не знаю как более корректно перевести это слово на русский язык) &lt;code&gt;%s&lt;/code&gt;. На это место будет подставлен весь текст который будет введён после ключевого слова.&lt;/p&gt;
&lt;p&gt;На пальцах. Допустим, у нас есть закладка, у которой ключевое слово &lt;code&gt;g&lt;/code&gt;, тогда, если в адресной строке введём:
g ябеда-корябеда солёный огурец&lt;/p&gt;
&lt;p&gt;то вместо &lt;code&gt;%s&lt;/code&gt; будет подставлено: &amp;ldquo;ябеда-корябеда солёный огурец&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Теперь чуете? Правильно! Мы можем вызывать какие-то URL с параметрами. Это общий случай, я же, в основном, использую это для поиска. К примеру, у меня такой набор (&lt;strong&gt;жирным&lt;/strong&gt; выделены названия закладок):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Google Search&lt;/strong&gt; - поиск в Google
&lt;ul&gt;
&lt;li&gt;Location: &lt;code&gt;https://www.google.ru/search?q=%s&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Keyword: &lt;code&gt;g&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Man pages search&lt;/strong&gt; - поиск по unix man pages
&lt;ul&gt;
&lt;li&gt;Location: &lt;code&gt;http://manned.org/browse/search?q=%s&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Keyword: &lt;code&gt;man&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C++ Reference&lt;/strong&gt; - поиск по сайту 
&lt;a href=&#34;http://cplusplus.com&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://cplusplus.com&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Location: &lt;code&gt;http://www.cplusplus.com/search.do?q=%s&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Keyword: &lt;code&gt;cpp&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ohloh Code Search&lt;/strong&gt; - отличный поиск примеров использования кода, да и вообще, возможных реализаций ваших идей
&lt;ul&gt;
&lt;li&gt;Location: &lt;code&gt;http://code.ohloh.net/search?s=%s&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Keyword: &lt;code&gt;code&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Wikipedia [rus]&lt;/strong&gt; - поиск в русской Википедии
&lt;ul&gt;
&lt;li&gt;Location: &lt;code&gt;http://ru.wikipedia.org/w/index.php?search=%s&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Keyword: &lt;code&gt;wpru&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Да, в самом Firefox можно ключевые слова задать для существующих поисковых систем (в Search bar), но вручную там нельзя добавить произвольную (задав только URL для поиска), только установкой соответствующего расширения, которого может не оказаться. Плюс метод работает во многих браузерах, так что импортировав закладки, получите и работающий поиск, к которому привыкли.&lt;/p&gt;
&lt;p&gt;В 
&lt;a href=&#34;http://luakit.org&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;luakit&lt;/a&gt; это сделано прямо и ровно через технологию Search Engine. Пример можно посмотреть прямо в коробке в файле &lt;strong&gt;globals.lua&lt;/strong&gt; (
&lt;a href=&#34;https://gitorious.org/hatred-configs/luakit/source/globals.lua#L56&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;или тут&lt;/a&gt;).&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>ps2pdf и отрицательное смещение сверху</title>
      <link>https://htrd.su/blog/2013/11/19/ps2pdf_i_otricatelnoe_smeschenie_sverxu/</link>
      <pubDate>Tue, 19 Nov 2013 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2013/11/19/ps2pdf_i_otricatelnoe_smeschenie_sverxu/</guid>
      <description>&lt;p&gt;Если при преобразовании PS в PDF на выходе наблюдается отрицательное смещение (как бы часть листа срезана) сверху, то стоит попробовать явно задать формат страницы при преобразовании:
ps2pdf -sPAPERSIZE=a4 input.ps output.pdf&lt;/p&gt;
&lt;p&gt;Скорее всего это связано с тем, что преобразование идёт по пайпу и теряется информация формате листа входного документа и используется значение по умолчанию, которое, скорее всего - letter. Эксперимент, с явным заданием letter как формата, порождает файл со смещением, что косвенно подтверждает мою догадку.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Эффект плазмы</title>
      <link>https://htrd.su/blog/2013/11/18/ehffekt_plazmy/</link>
      <pubDate>Mon, 18 Nov 2013 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2013/11/18/ehffekt_plazmy/</guid>
      <description>&lt;p&gt;Во многих системах есть хранитель экрана который показывает примерно следующее:&lt;br/&gt;
&lt;img src=&#34;https://upload.wikimedia.org/wikipedia/commons/f/f7/-PLASMA-ColorCycling.Gif&#34; alt=&#34;-PLASMA-ColorCycling.Gif&#34;&gt;&lt;/p&gt;
&lt;p&gt;Разбираясь на работе с функционалом дисплея, особенно в динамическом режиме (при смене картинок), решил использовать алгоритм для генерации данной красоты.&lt;/p&gt;
&lt;p&gt;Сразу сниму все лавры со своей головы - алгоритм полностью взят отсюда: 
&lt;a href=&#34;https://lodev.org/cgtutor/plasma.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://lodev.org/cgtutor/plasma.html&lt;/a&gt; (вообще интересный сайт, в частности: 
&lt;a href=&#34;https://lodev.org/cgtutor/%29&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://lodev.org/cgtutor/)&lt;/a&gt;. Более подробно про него можно почитать тут: &lt;a href=&#34;https://en.wikipedia.org/wiki/Plasma_effect&#34; target=&#34;_blank&#34;&gt;Plasma_effect&lt;/a&gt;
. Кроме того, будет полезно ознакомиться со схожим эффектом: 
&lt;a href=&#34;https://www.cubic.org/docs/marble.htm&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://www.cubic.org/docs/marble.htm&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Реализация на C++ (примешали совсем чуточку шаблонов :))&lt;/p&gt;
&lt;p&gt;Для начала определим вспомогательные классы: &lt;code&gt;RgbColor&lt;/code&gt;, &lt;code&gt;YuvColor&lt;/code&gt; что бы хранить составляющие в цветовых простанствах RGB24 и YUV444 соответственно (что бы хранить составляющие YUV420/411/422 и т.п. после достаточно произвести необходимые расчёты с UV компонентами):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;RgbColor&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;RgbColor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;R&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;G&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;B&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;RgbColor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;uint8_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;uint8_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;uint8_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;R&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;n&#34;&gt;G&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;n&#34;&gt;B&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;uint8_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;R&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;uint8_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;G&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;uint8_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;B&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;YuvColor&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;YuvColor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;U&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;V&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;YuvColor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;uint8_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;uint8_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;u&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;uint8_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;n&#34;&gt;U&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;u&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;n&#34;&gt;V&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;uint8_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;uint8_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;U&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;uint8_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;V&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Сразу определю функцию для перехода от RGB24 к YUV:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;inline&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;rgb2yuv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;RgbColor&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rgb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;YuvColor&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;yuv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;yuv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Y&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;uint8_t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(((&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;66&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;rgb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;R&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;129&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;rgb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;G&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;25&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;rgb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;128&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;16&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;yuv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;U&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;uint8_t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(((&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;38&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;rgb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;R&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;74&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;rgb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;G&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;112&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;rgb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;128&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;128&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;yuv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;V&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;uint8_t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(((&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;112&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;rgb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;R&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;94&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;rgb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;G&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;rgb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;128&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;128&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Теоретически, можно было бы сделать симметричную функцию для YUV-&amp;gt;RGB, но мне она не требовалась. Кроме того, можно было бы сделать соответствующие методы и конструкторы в классах RgbColor/YuvColor для перехода между цветовыми пространствами, но переход, особенно целочисленный, привносит ошибки, поэтому оставил так.&lt;/p&gt;
&lt;p&gt;Теперь короткое лирическое отступление: данная реализация алгоритма основывается на использовании 256 цветной палитры, базовой картинки (паттерна) и сдвига для генерации цвета в нужном пикселе. Если генерацией палитры мы сможем только поменять составные цвета результирующей картинки, то генерация базовой картинки очень существенно сказывается на внешнем виде конечного результата:&lt;br/&gt;&lt;br/&gt;
&lt;img src=&#34;https://lodev.org/cgtutor/images/plasma2.jpg&#34; alt=&#34;plasma2.jpg&#34;&gt;
&lt;img src=&#34;https://lodev.org/cgtutor/images/plasma3.jpg&#34; alt=&#34;plasma3.jpg&#34;&gt;
&lt;img src=&#34;https://lodev.org/cgtutor/images/plasma5.jpg&#34; alt=&#34;plasma5.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;(картинки взяты с сайта с описанием реализации алгоритма)&lt;/p&gt;
&lt;p&gt;В текущей реализации я решил, что палитра будет генерироваться постоянно одна и та же((не совсем правда)), а вот алгоритм генерации паттерна можно переключать: три предопределённых и пользовательский.&lt;/p&gt;
&lt;p&gt;При задании пользовательского алгоритма необходимо задать функцию, в которой будет произведён расчёт паттерна. Кроме того, в случае пользовательского алгоритма, можно заполнить и палитру своими значениями цвета. Обратите внимание: по умолчанию размер палитры - 256. Размер не ограничен (в разумных пределах, конечно), но если нужно больше нужно будет установить новый размер вектору с палитрой.&lt;/p&gt;
&lt;p&gt;Кроме того, сама генерация паттерна вынесена в свободные функции, поэтому можно в пользовательском алгоритме поменять только палитру и далее вызвать предопределённую функцию генерации паттерна.&lt;/p&gt;
&lt;p&gt;Вернёмся к коду. Что бы для стандартных алгоритмов не обращаться к указателям ввёл вспомогательное перечисление:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;enum&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;PlasmaAlgorithm&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;PLASMA_UNDEFINED&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;PLASMA_CIRCLE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;PLASMA_ALGO1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;PLASMA_ALGO2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;PLASMA_USER&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;PLASMA_DEFAULT&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;PLASMA_ALGO1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Далее определим три стандартных алгоритма генерации паттерна:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;template&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;typename&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Color&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;PlasmaCircleGenerator&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;uint32_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;uint32_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vector&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Color&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;cm&#34;&gt;/*pallete*/&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vector&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pattern&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;assert&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pattern&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;width&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;uint32_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;uint32_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;color&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;mf&#34;&gt;128.0&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;128.0&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;16.0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;mf&#34;&gt;128.0&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;128.0&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;16.0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;pattern&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;width&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;template&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;typename&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Color&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;PlasmaAlgo1Generator&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;uint32_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;uint32_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vector&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Color&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;cm&#34;&gt;/*pallete*/&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vector&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pattern&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;assert&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pattern&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;width&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;uint32_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;uint32_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;color&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                          &lt;span class=&#34;mf&#34;&gt;128.0&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;128.0&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;16.0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;128.0&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;128.0&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;8.0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;128.0&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;128.0&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;16.0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;128.0&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;128.0&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sqrt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;double&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;8.0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;pattern&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;width&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;template&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;typename&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Color&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;PlasmaAlgo2Generator&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;uint32_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;uint32_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vector&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Color&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;cm&#34;&gt;/*pallete*/&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vector&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pattern&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;assert&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pattern&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;width&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;uint32_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;uint32_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;color&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                          &lt;span class=&#34;mf&#34;&gt;128.0&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;128.0&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;16.0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;128.0&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;128.0&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;32.0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;128.0&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;128.0&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sqrt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;double&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;width&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;2.0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;width&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;2.0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;height&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;2.0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;height&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;2.0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;8.0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;128.0&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;128.0&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sqrt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;double&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;8.0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;pattern&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;width&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Тут начинает шаблонная магия самого низкого (в смысле сложности) уровня: я хочу видеть плазму одинаковой для RGB и YUV и, возможно, для другого цветового пространства (HSV, к примеру), но не сейчас.&lt;/p&gt;
&lt;p&gt;Далее определяем функции генерации палитры:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;template&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;typename&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Color&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;CreateDefaultPlasmaPallete&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;vector&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Color&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;plasmaPallete&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;template&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;CreateDefaultPlasmaPallete&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;RgbColor&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;vector&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;RgbColor&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;plasmaPallete&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;uint32_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;plasmaPallete&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;RgbColor&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rgb&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;plasmaPallete&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;rgb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;R&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;uint8_t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;128.0&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;128&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;3.1415&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;32.0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;rgb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;G&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;uint8_t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;128.0&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;128&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;3.1415&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;64.0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;rgb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;uint8_t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;128.0&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;128&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;3.1415&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;128.0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;template&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;CreateDefaultPlasmaPallete&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;YuvColor&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;vector&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;YuvColor&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;plasmaPallete&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;uint32_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;plasmaPallete&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;YuvColor&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;yuv&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;plasmaPallete&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;RgbColor&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;rgb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;rgb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;R&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;uint8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;128.0&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;128&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;3.1415&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;32.0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;rgb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;G&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;uint8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;128.0&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;128&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;3.1415&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;64.0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;rgb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;uint8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;128.0&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;128&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;3.1415&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;128.0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;rgb2yuv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rgb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;yuv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Обратите внимание, что &lt;code&gt;CreateDefaultPlasmaPallete&lt;/code&gt; определена только для &lt;code&gt;RgbColor&lt;/code&gt; и &lt;code&gt;YuvColor&lt;/code&gt;. Если нужна поддержка других цветовых пространств вам нужно будет определить функцию генерации палитры для него.&lt;/p&gt;
&lt;p&gt;Ну и собираем все это в классе &lt;code&gt;PlasmaGenerator&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;template&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;typename&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Color&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;RgbColor&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;PlasmaGenerator&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;typedef&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PlasmaUserGenerator&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;uint32_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;uint32_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vector&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Color&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pallete&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vector&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pattern&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;PlasmaGenerator&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;m_plasmaPallete&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;256&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;n&#34;&gt;m_width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;n&#34;&gt;m_height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;n&#34;&gt;m_algo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PLASMA_UNDEFINED&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;n&#34;&gt;m_generator&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;PlasmaGenerator&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;uint32_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;uint32_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;PlasmaAlgorithm&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;algo&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;PLASMA_DEFAULT&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;m_plasmaPallete&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;256&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;n&#34;&gt;m_generator&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;init&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;algo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;setUserGenerator&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PlasmaUserGenerator&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;generator&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;m_generator&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;generator&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;init&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;uint32_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;uint32_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;PlasmaAlgorithm&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;algo&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;PLASMA_DEFAULT&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;assert&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;algo&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;PLASMA_UNDEFINED&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;m_width&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;m_height&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;m_algo&lt;/span&gt;   &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;algo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;m_plasmaPattern&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;width&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;m_plasmaPattern&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;resize&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;width&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;switch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;algo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;nl&#34;&gt;PLASMA_CIRCLE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;m_generator&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PlasmaCircleGenerator&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Color&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;nl&#34;&gt;PLASMA_ALGO1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;m_generator&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PlasmaAlgo1Generator&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Color&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;nl&#34;&gt;PLASMA_ALGO2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;m_generator&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PlasmaAlgo2Generator&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Color&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;commonPlasmaInit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;bool&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;isInited&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;m_plasmaPattern&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Color&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;getColor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;uint32_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;uint32_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;uint32_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;shift&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;assert&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;m_plasmaPattern&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;uint32_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;patternIndex&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;m_width&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;%&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;m_plasmaPattern&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;m_plasmaPallete&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;m_plasmaPattern&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;patternIndex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;shift&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;%&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;m_plasmaPallete&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;private&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;commonPlasmaInit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;assert&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;m_generator&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;m_algo&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;PLASMA_USER&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;CreateDefaultPlasmaPallete&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;m_plasmaPallete&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;m_generator&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;m_width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;m_height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;m_plasmaPallete&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;m_plasmaPattern&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;private&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;vector&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Color&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;     &lt;span class=&#34;n&#34;&gt;m_plasmaPallete&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;vector&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;       &lt;span class=&#34;n&#34;&gt;m_plasmaPattern&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;uint32_t&lt;/span&gt;            &lt;span class=&#34;n&#34;&gt;m_width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;uint32_t&lt;/span&gt;            &lt;span class=&#34;n&#34;&gt;m_height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;PlasmaAlgorithm&lt;/span&gt;     &lt;span class=&#34;n&#34;&gt;m_algo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;PlasmaUserGenerator&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;m_generator&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Пользоваться достаточно просто:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;ctime&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;#34;plasmagenerator.h&amp;#34;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;n&#34;&gt;PlasmaGenerator&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;RgbColor&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;plasma&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// создаст непроинициализированный генератор
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;   &lt;span class=&#34;c1&#34;&gt;// plasma.isInited() возвращает false
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;   &lt;span class=&#34;c1&#34;&gt;// plasma.getColor(x, y, shift) вызывает assert
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;   
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;c1&#34;&gt;// Инициализируем генератор для изображения размером 320x240 пикселей, используя генератор по умолчанию
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;   &lt;span class=&#34;n&#34;&gt;plasma&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;init&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;320&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;240&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;c1&#34;&gt;// Переинициализируем генератор для нового размера изображения и нового алгоритма
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;   &lt;span class=&#34;c1&#34;&gt;// Для алгоритма PLASMA_USER нужно предварительно установить генератор:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;   &lt;span class=&#34;c1&#34;&gt;//   plasma.setUserGenerator(userGenerator);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;   &lt;span class=&#34;n&#34;&gt;plasma&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;init&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;640&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;480&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;PLASMA_CIRCLE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;while&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;c1&#34;&gt;// Если считать сдвиг от времени, по получим изменяющуюся по времени картинку
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;      &lt;span class=&#34;kt&#34;&gt;uint32_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;shift&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;time&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;10.0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;uint32_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;480&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;uint32_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;640&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;RgbColor&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;rgb&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;plasma&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;getColor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;shift&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;c1&#34;&gt;// Записываем в картинку, буффер или ещё куда
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;         &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;c1&#34;&gt;// Отрисовываем буффер
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;      
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;c1&#34;&gt;// Тут хорошо бы поспать
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;   &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Отмечу, что доступ к &lt;code&gt;PlasmaGenerator::getColor()&lt;/code&gt; из разных потоков безопасен, поэтому заполнение целевой картинки, теоретически, можно параллелить. Но вот генерацию плазмы (&lt;code&gt;PlasmaGenerator::init()&lt;/code&gt;) нужно обязательно синхронизировать и работает она в один поток.&lt;/p&gt;
&lt;p&gt;PS вспомогательный функционал:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Целочисленное преобразование RGB в YUV (псевдокод):
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Y = ( (  66 * R + 129 * G +  25 * B + 128) &amp;gt;&amp;gt; 8) +  16
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;U = ( ( -38 * R -  74 * G + 112 * B + 128) &amp;gt;&amp;gt; 8) + 128
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;V = ( ( 112 * R -  94 * G -  18 * B + 128) &amp;gt;&amp;gt; 8) + 128
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;Целочисленное преобразование YUV в RGB (псевдокод):
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;C = Y - 16
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;D = U - 128
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;E = V - 128
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;R = uint8_t(( 298 * C           + 409 * E + 128) &amp;gt;&amp;gt; 8)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;G = uint8_t(( 298 * C - 100 * D - 208 * E + 128) &amp;gt;&amp;gt; 8)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;B = uint8_t(( 298 * C + 516 * D           + 128) &amp;gt;&amp;gt; 8)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Владивосток: УК &#34;Дальневосточный регион&#34; и смена сантехники</title>
      <link>https://htrd.su/blog/2013/11/09/vladivostok_uk_dalnevostochnyj_region_i_smena_santexniki/</link>
      <pubDate>Sat, 09 Nov 2013 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2013/11/09/vladivostok_uk_dalnevostochnyj_region_i_smena_santexniki/</guid>
      <description>&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;/li&gt;
&lt;li&gt;Стоимость при этом достаточно кусачая, и даже примерная смета отличается от списка работ на сайте компании.&lt;/li&gt;
&lt;li&gt;Наша ошибка, не затребовали составление договора, акт выполненых работ сделан только в одном экземпляре, который, естественно, остался не у нас. Ни компания, ни сами мастера даже не предложили. Смета работ тоже не составлена.&lt;/li&gt;
&lt;li&gt;Неверно посчитали материалы, как результат пришлось два раза дополнительно бегать покупать /для установки змеевика, унитаза/&lt;/li&gt;
&lt;li&gt;Не позвали, когда прикручивали змеевик, в результате утопили в короб /ещё не смонтированный/, пришлось просить &amp;ldquo;выдвигать&amp;rdquo;, дырки на новом кафеле &amp;ldquo;приятно&amp;rdquo; дополняют внешний вид.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;В общем, если есть возможность, вызывайте кого-то другого, лучше если с отзывами, составляйте смету, заключайте договор, оставляйте экземпляр себе, проверяйте что бы была гарантия на работу. При приёмке, проливайте канализацию большим количеством воды, если пол мокрый - вытереть.&lt;/p&gt;
&lt;p&gt;Ещё один камень в огород: на сайте есть телефон аварийной службы, позвонили им, на что они ответили, что текущая канализация, особенно после новой установки - не аварийный случай, ждите понедельника, а после работы этих сантехников сейчас два стояка /14 квартир/, сидят без холодной и горячей воды, так же до понедельника.&lt;/p&gt;
&lt;p&gt;Сайт: 
&lt;a href=&#34;http://www.dvregion.vl.ru&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.dvregion.vl.ru&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Luakit и Readability.com</title>
      <link>https://htrd.su/blog/2013/10/30/luakit_i_readability.com/</link>
      <pubDate>Wed, 30 Oct 2013 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2013/10/30/luakit_i_readability.com/</guid>
      <description>&lt;p&gt;Чуть более года назад выложил свои конфиги для 
&lt;a href=&#34;http://mason-larobina.github.io/luakit/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Luakit&lt;/a&gt; на гиториусе: 
&lt;a href=&#34;https://gitorious.org/hatred-configs/luakit/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://gitorious.org/hatred-configs/luakit/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Помимо подстроек под себя, там же был реализован URI-rewriting. Правда использовал только для хабра, что бы адрес преобразовался по следующему правилу:

&lt;a href=&#34;http://habrahabr.ru/post/196966/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://habrahabr.ru/post/196966/&lt;/a&gt; &amp;ndash;&amp;gt; 
&lt;a href=&#34;http://m.habrahabr.ru/post/196966/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://m.habrahabr.ru/post/196966/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;дабы избавится от рекламы, флеша и лишнего форматирования.&lt;/p&gt;
&lt;p&gt;Вчера же добавился функционал для сохранения страниц на сервисе отложенного чтения readability.com. Сделано полностью в виде отдельного модуля (в отличии от URI-rewrite). По умолчанию заданы следующие комбинации клавиш:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;vv&lt;/strong&gt; - смотреть страницу через readability&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;vs&lt;/strong&gt; - сохранить для отложенного чтения&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;vg&lt;/strong&gt; - открыть сайт readability.com в новой вкладке&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;У функционала &amp;ldquo;смотреть страницу через readability&amp;rdquo; внезапно оказалось одно интересное и полезное побочное свойство: просмотр страниц, попавших в немилость роскомнадзору.&lt;/p&gt;
&lt;p&gt;Enjoy! :simple_smile:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TODO&lt;/strong&gt; добавить функционал для открытия сайта через 
&lt;a href=&#34;http://anonymouse.org/cgi-bin/anon-www.cgi/URL&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://anonymouse.org/cgi-bin/anon-www.cgi/URL&lt;/a&gt; или:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://hidemyass.com&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://hidemyass.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://anonymizer.nntime.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://anonymizer.nntime.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://hideme.ru/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://hideme.ru/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Big-endian и little-endian: шпаргалка</title>
      <link>https://htrd.su/blog/2013/10/21/big-endian_i_little-endian_shpargalka/</link>
      <pubDate>Mon, 21 Oct 2013 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2013/10/21/big-endian_i_little-endian_shpargalka/</guid>
      <description>&lt;html&gt;
&lt;style type=&#34;text/css&#34;&gt;
.tg  {border-collapse:collapse;border-spacing:0;}
.tg td{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;
  overflow:hidden;padding:10px 5px;word-break:normal;}
.tg th{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;
  font-weight:normal;overflow:hidden;padding:10px 5px;word-break:normal;}
.tg .tg-c3ow{border-color:inherit;text-align:center;vertical-align:top}
.tg .tg-0pky{border-color:inherit;text-align:left;vertical-align:top}
.tg .tg-fymr{border-color:inherit;font-weight:bold;text-align:left;vertical-align:top}
&lt;/style&gt;
&lt;table class=&#34;tg&#34;&gt;&lt;thead&gt;
  &lt;tr&gt;
    &lt;th class=&#34;tg-0pky&#34;&gt;&lt;/th&gt;
    &lt;th class=&#34;tg-0pky&#34;&gt;&lt;/th&gt;
    &lt;th class=&#34;tg-fymr&#34;&gt;Big-endian&lt;/th&gt;
    &lt;th class=&#34;tg-fymr&#34;&gt;Little-endian&lt;/th&gt;
  &lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
  &lt;tr&gt;
    &lt;td class=&#34;tg-0pky&#34;&gt;Формулировка&lt;/td&gt;
    &lt;td class=&#34;tg-0pky&#34;&gt;&lt;/td&gt;
    &lt;td class=&#34;tg-0pky&#34;&gt;Старшие разряды (байты) - первые&lt;/td&gt;
    &lt;td class=&#34;tg-0pky&#34;&gt;Младшие разряды (байты) - первые&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td class=&#34;tg-0pky&#34;&gt;Запись&lt;/td&gt;
    &lt;td class=&#34;tg-0pky&#34;&gt;&lt;/td&gt;
    &lt;td class=&#34;tg-c3ow&#34; colspan=&#34;2&#34;&gt;$$M = \sum_{i=0}^{n}{A_i} \cdot {B^i} = A_0 \cdot B^0 + A_1 \cdot B^1 + \cdots + A_n \cdot B^n$$&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td class=&#34;tg-0pky&#34;&gt;:::&lt;/td&gt;
    &lt;td class=&#34;tg-0pky&#34;&gt;&lt;/td&gt;
    &lt;td class=&#34;tg-c3ow&#34; colspan=&#34;2&#34;&gt;\(B\) - база системы счисления, для dec - 10, для hex - 0xFF или 256.&lt;br&gt;&lt;br&gt; \(A_0\) - младший разряд, \(A_n\) - старший разряд&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td class=&#34;tg-0pky&#34;&gt;:::&lt;/td&gt;
    &lt;td class=&#34;tg-0pky&#34;&gt;&lt;/td&gt;
    &lt;td class=&#34;tg-0pky&#34;&gt;An, ..., A1, A0&lt;/td&gt;
    &lt;td class=&#34;tg-0pky&#34;&gt;A0, A1, ..., An&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td class=&#34;tg-0pky&#34;&gt;:::&lt;/td&gt;
    &lt;td class=&#34;tg-0pky&#34;&gt;&lt;/td&gt;
    &lt;td class=&#34;tg-c3ow&#34; colspan=&#34;2&#34;&gt;1024 (dec), 0x0400 (hex)&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td class=&#34;tg-0pky&#34;&gt;&lt;/td&gt;
    &lt;td class=&#34;tg-0pky&#34;&gt;dec&lt;/td&gt;
    &lt;td class=&#34;tg-0pky&#34;&gt;1, 0, 2, 4&lt;/td&gt;
    &lt;td class=&#34;tg-0pky&#34;&gt;4, 2, 0, 1&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td class=&#34;tg-0pky&#34;&gt;:::&lt;/td&gt;
    &lt;td class=&#34;tg-0pky&#34;&gt;hex&lt;/td&gt;
    &lt;td class=&#34;tg-0pky&#34;&gt;0x40, 0x00&lt;/td&gt;
    &lt;td class=&#34;tg-0pky&#34;&gt;0x00, 0x40&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td class=&#34;tg-0pky&#34;&gt;Синонимы&lt;/td&gt;
    &lt;td class=&#34;tg-0pky&#34;&gt;&lt;/td&gt;
    &lt;td class=&#34;tg-0pky&#34;&gt;Network byte order&lt;br&gt; Motorola byte order&lt;/td&gt;
    &lt;td class=&#34;tg-0pky&#34;&gt;Intel byte order&lt;br&gt; VAX order&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td class=&#34;tg-0pky&#34;&gt;Использование&lt;/td&gt;
    &lt;td class=&#34;tg-0pky&#34;&gt;&lt;/td&gt;
    &lt;td class=&#34;tg-0pky&#34;&gt;Обычная для человека((Для письма слева-направо)) запись чисел (в том&lt;br&gt; числе шестнадцатиричных в C/C++ и других)&lt;br&gt; TCP/IP&lt;br&gt; PNG&lt;/td&gt;
    &lt;td class=&#34;tg-0pky&#34;&gt;Числа в памяти на x86 и некоторых других&lt;br&gt; USB&lt;br&gt; PCI&lt;/td&gt;
  &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/html&gt;</description>
    </item>
    
    <item>
      <title>Пароль BIOS на ноутбуке Toshiba</title>
      <link>https://htrd.su/blog/2013/10/04/parol_bios_na_noutbuke_toshiba/</link>
      <pubDate>Fri, 04 Oct 2013 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2013/10/04/parol_bios_na_noutbuke_toshiba/</guid>
      <description>&lt;p&gt;Дома настраивал ноутбук Toshiba матери. При включении сразу меня поприветствовала такая надпись:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2013/10/04/parol_bios_na_noutbuke_toshiba/password.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Первая мысль была сбросить пароль на биос, в поисках подходящего репепта обнаружились следующие сайты:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.ccl-la.com/blog/index.php/clearing-bios-power-on-passwords-on-toshiba-laptops/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.ccl-la.com/blog/index.php/clearing-bios-power-on-passwords-on-toshiba-laptops/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://findpassword.net/reset-toshiba-satellite-bios-password/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://findpassword.net/reset-toshiba-satellite-bios-password/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Но сначала решил попробовать стандартные варианты тыпа qwerty и иже с ними. При этом, после окончания попыток наблюдал такую картинку:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2013/10/04/parol_bios_na_noutbuke_toshiba/systemdisabled2.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Этот номер меня немного заинтересовал и забил я этой CRC в гугле на поиск. Изыскания привели к этой статье: 
&lt;a href=&#34;http://dogber1.blogspot.co.uk/2009/05/table-of-reverse-engineered-bios.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://dogber1.blogspot.co.uk/2009/05/table-of-reverse-engineered-bios.html&lt;/a&gt;, где рассказывается про алгоритм как получить подходящий пароль, контрольная сумма которого будет такой же как и у неизвестного. Там же в конце идёт ссылка на сайт Вячеслава Бачерикова, который реализовал этот алгоритм на JavaScript:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://bios-pw.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://bios-pw.org/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Первый же пароль от туда подошёл к системе (хотя нотбука и нет среди &amp;ldquo;поддерживаемых&amp;rdquo;). Так что даже не пришлось разбрать ноут и сбрасывать настройки CMOS.&lt;/p&gt;
&lt;p&gt;Одно не понимаю, нафига все эти защиты, если они обходятся достаточно не сложным анализом и поиском в гугле?&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>На заметку: чисто виртуальные функции с определением</title>
      <link>https://htrd.su/blog/2013/10/02/na_zametku_chisto_virtualnye_funkcii_s_opredeleniem/</link>
      <pubDate>Wed, 02 Oct 2013 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2013/10/02/na_zametku_chisto_virtualnye_funkcii_s_opredeleniem/</guid>
      <description>&lt;p&gt;Да, речь про такое:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Foo&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;virtual&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;~&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Foo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;      &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// [1]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;k&#34;&gt;virtual&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;proc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// [2]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// [3]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Foo&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::~&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Foo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;c1&#34;&gt;// some actions
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// [4]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Foo&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;proc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;c1&#34;&gt;// some actions
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;[3]&lt;/strong&gt; и &lt;strong&gt;[4]&lt;/strong&gt; для &lt;strong&gt;[1]&lt;/strong&gt; и &lt;strong&gt;[2]&lt;/strong&gt; соответственно могут находится в другом файле.&lt;/p&gt;
&lt;p&gt;Информации в интернете много, поэтому заметка для себя, ибо где-то пропустил в изучении. Далее мои домысли и моё понимание проблемы.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Начнём с [2]&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Такое нужно:
&amp;lt;WRAP center round tip 60%&amp;gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;когда требуется, что бы в наследниках эти функции были обязательно определены (т.е. были чисто виртуальными в базовом),&lt;/li&gt;
&lt;li&gt;но при этом требуется, что бы была предоставлена реализация по умолчанию.
&lt;/WRAP&gt;
Например:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Bar&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Foo&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;virtual&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;proc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// здесь полностью своя реализация
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Baz&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Foo&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;virtual&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;proc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// а здесь мы позвали реализацию по умолчанию.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;n&#34;&gt;Foo&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;proc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Bak&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Foo&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;c1&#34;&gt;// а такой класс мы инстанцировать не сможем
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;А теперь про [1]&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Начнём с того, что деструкторы, по иерархии, не переопределяются и при уничтожении объекта вызываются все деструкторы до базового класса и если деструктор будет чисто виртуальным, то получим такую ошибку, ещё на этапе компиляции:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/tmp/cc42YqK5.o: In function `Bar::~Bar()&amp;#39;:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;main.cpp:(.text._ZN3BarD2Ev[_ZN3BarD5Ev]+0x1f): undefined reference to `Foo::~Foo()&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;collect2: error: ld returned 1 exit status
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Т.е. тело у деструктора должно быть &lt;strong&gt;всегда&lt;/strong&gt; (ну не совсем, см. ниже). Так когда возникает необходимость сделать деструктор базового класса чисто виртуальным с определением? Мне в голову пришло только:
&amp;lt;WRAP center round tip 60%&amp;gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;сделать класс чисто виртуальным, не объявляя ни одной чисто виртуальной функции.&lt;/li&gt;
&lt;li&gt;сделать класс только со статическими членами и запретить создание объектов этого типа, помогает защититься от дружественных классов и функций и просто от наследования (помещение конструктора по умолчанию в приватную секцию не спасёт от френдов). В этом случае, кстати, делать определение для чисто виртуального деструктора не обязательно.
&lt;/WRAP&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Поясню. Если сделать так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Virtuable&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;virtual&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;~&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Virtuable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Все классы-наследники автоматом будут с виртуальными деструкторам, но при этом мы можем сделать такое:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Virtuable&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Virtuable&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Virtuable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Т.е. мы можем создать объекты-пустышки. А зачем нам это? Если же объявить класс так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Virtuable&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;virtual&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;~&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Virtuable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Virtuable&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::~&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Virtuable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;то, у нас так же все классы-наследники будут иметь виртуальные деструкторы, а вышеизложенный код уже не будет компилироваться, т.е. объекты-пустышки создать не получится.&lt;/p&gt;
&lt;p&gt;Имхо, может быть полезно во всяких фабриках.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Мысли о DPI</title>
      <link>https://htrd.su/blog/2013/09/27/mysli_o_dpi/</link>
      <pubDate>Fri, 27 Sep 2013 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2013/09/27/mysli_o_dpi/</guid>
      <description>&lt;p&gt;Точнее о DPI((Dots Per Inch [точек на дюйм] - мера разрешающей способности чего либо: монитора, принтера и т.п.)) мониторов.&lt;/p&gt;
&lt;p&gt;Очень вяло задавался вопросом, почему на моём маленьком, слабеньком, не сильно дорогом Asus EeePC 1000HA изображение на мониторе отличное, почти все шрифты выглядят нормально, а почти на всех новых, рабочих мониторах с диагональю 24 дюйма и фулхд разрешением, полная беда, что в Linux, что в Windows.&lt;/p&gt;
&lt;p&gt;Да, можно покрутить ручки fontconfig или поставить mactype, но всё равно: на нетбуке же я не крутил!&lt;/p&gt;
&lt;p&gt;Мысль в нужную сторону повернуло то, что случайно заметил два пакета в системе: xorg-fonts-75dpi и xorg-fonts-100dpi. Точнее видел я их и раньше, но как-то не обращал внимание на их оконцовку. Логика подсказала, что шрифты для разных экранных разрешений. А какое разрешение у меня? Методом несложных вычислений на основе известных данных (диагональ монитора, максимальное разрешение по X и Y) для нетбука получилось значение в 116dpi. Разогнался и начал считать для остального:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Asus EeePC 1000HA (10.2&amp;quot;): 116dpi&lt;/li&gt;
&lt;li&gt;BenQ GW2460HM (24&amp;quot;): 92dpi&lt;/li&gt;
&lt;li&gt;BenQ GW2255 (21.5&amp;quot;): 102dpi&lt;/li&gt;
&lt;li&gt;ViewSonic VA702 (17&amp;quot;): 96dpi&lt;/li&gt;
&lt;li&gt;Lenovo ThinkPad T530 (15.6&amp;quot;): 141dpi&lt;/li&gt;
&lt;li&gt;Lenovo ThinkPad P15 Gen2 (15.6&amp;quot;): 141dpi&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Для Lenovo  ThinkPad T530 есть матрицы с разным разрешением, я считал для 1920x1080 (fullhd).&lt;/p&gt;
&lt;p&gt;Понятно, что чем выше значение dpi тем более мелкие пиксели, тем более чёткая картинка получается. Понятно, почему новый BenQ GW2460HM и старичок ViewSonic VA702, стоящие рядом, отображают шрифты примерно одинаково (там есть другие радикальные отличия в пользу первого, но сейчас не про них). И ещё, интуитивно склонялся к монитору 21.5 дюйма, на рабочее место, теперь будет обоснование - почему.&lt;/p&gt;
&lt;p&gt;Что же получается? Получается, что если бы прогресс не гнался только за увеличением диагоналей, но и за увеличением разрешающей способности мониторов, нам бы не нужны были всякие хитрые алгоритмы хинтинга, а проблема ШГ плавно бы ушла прочь сама собой.&lt;/p&gt;
&lt;p&gt;А как же минусы? Действительно, как же без них: не много софта написано с возможностью работать при больших разрешениях. Всё будет мелко, а при попытке поиграться шрифтами в большую сторону может статься так, что все формы полезут (привет Delphi). Ну и системы по умолчанию не подстраиваются под высокие разрешения: на прошлой работе на 21.5&amp;quot; FullHD мониторе пришлось всё настройки шрифтов подкрурить в большую сторону. Думаю, это далеко не все проблемы.&lt;/p&gt;
&lt;p&gt;Если кто хочет подсчитать разрешение своих мониторов, вот функцейка и пример использования на octave (пойдёт и в matlab или scilab):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-octave&#34; data-lang=&#34;octave&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;monitor_params&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;diag, xres, yres&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to_cm&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;2.54&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;diag_res&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;sqrt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;xres&lt;/span&gt;^&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;yres&lt;/span&gt;^&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;dpi&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;diag_res&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;diag&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;xres&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dpi&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;yres&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dpi&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;check&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;sqrt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;^&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;^&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;x_cm&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to_cm&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;y_cm&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to_cm&lt;/span&gt;  &lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;end&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;monitor_params&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;24&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1920&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1080&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;   &lt;span class=&#34;c&#34;&gt;# BenQ GW2460HM&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;monitor_params&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;21.5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1920&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1080&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;# BenQ GW2255&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;monitor_params&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1280&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1024&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;   &lt;span class=&#34;c&#34;&gt;# ViewSonic VA702&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;monitor_params&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;10.2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1024&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;600&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;  &lt;span class=&#34;c&#34;&gt;# Asus EeePC 1000HA&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;monitor_params&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;15.6&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1920&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1080&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;# Lenovo ThinkPad T530&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;И онлайн-компилятор, где это можно прогнать: 
&lt;a href=&#34;http://www.compileonline.com/execute_matlab_online.php&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.compileonline.com/execute_matlab_online.php&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Logitech Unifying и Linux</title>
      <link>https://htrd.su/blog/2013/09/26/logitech_unifying_i_linux/</link>
      <pubDate>Thu, 26 Sep 2013 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2013/09/26/logitech_unifying_i_linux/</guid>
      <description>&lt;p&gt;Кратко: Logitech Unifying Receiver приёмник у беспроводных устройств Logitech к одному которому можно слинковать до 6 устройст. При этом устройство, с которым вместе идёт приёмник уже заранее слинковано с ним и работает из коробки.&lt;/p&gt;
&lt;p&gt;Проблема в том, что бы добавить новое устройство. Для этого нужен софт, и софт этот -есть- был только под Windows и под Mac OS X. Хорошо, что слинковав устройства на одном компе можно было использовать их на остальных без проблем. Но, согласитесь, не удобно.&lt;/p&gt;
&lt;p&gt;Не волновал бы меня этот факт если бы не стал обладателем манипулятора Logitech M510 и в ожидании прихода с amazon.com Logitech K800 (заказывал с амазона только с одной целью: получить клавиатуру с &amp;ldquo;американской&amp;rdquo; раскладкой, т.е. с широким левым shift и узким enter, отсутствие русских букв не смущает: на нетбуке, с которым уже не первый год, их тоже отродясь не было).&lt;/p&gt;
&lt;p&gt;Поэтому начался поиск. Первый результат официального форума Logitech неутешительный: линкуйте устройства в Win/Mac пользуйтесь везде.&lt;/p&gt;
&lt;p&gt;Но дальше была просто сказка: почти сразу находится английская статья, описывающая утилиту &lt;strong&gt;Solaar&lt;/strong&gt; 
&lt;a href=&#34;http://www.webupd8.org/2013/07/pair-unpair-logitech-unifying-devices.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;раз&lt;/a&gt;,
&lt;a href=&#34;http://pwr.github.io/Solaar/index.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;два&lt;/a&gt;, далее ссылка на 
&lt;a href=&#34;https://wiki.archlinux.org/index.php/Logitech_Unifying_Receiver&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Арчвики&lt;/a&gt; из которой узнаётся о ещё двух (правда чисто консольных) утилитах: &lt;strong&gt;ltunify&lt;/strong&gt; и  &lt;strong&gt;pairingtool&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Опробовал только &lt;strong&gt;Solaar&lt;/strong&gt;, хоть она и написана на Python, но зато имеет и GUI и CLI версию.&lt;/p&gt;
&lt;p&gt;Для владельцев Debian &amp;amp; Ubunu установка не станет проблемой: добавляете репозиторий, делаете &lt;code&gt;atp-get update&lt;/code&gt;, а дальше &lt;code&gt;pt-get install solaar&lt;/code&gt;. На официальном сайте есть так же пакеты для OpenSuSE, для ArchLinux есть пакет в AUR. Последний и использовал.&lt;/p&gt;
&lt;p&gt;Надо заметить, что при установке не говорится о таких полезных вещах, как:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;для работы нужно пользователя добавить в группу &lt;code&gt;plugdev&lt;/code&gt;, делаем сами:&lt;code&gt;bashgpasswd -a USER plugdev&lt;/code&gt;И перелогиниваемся, что бы изменения вступили в силу.&lt;/li&gt;
&lt;li&gt;после установки нужно или перегрузить машину или заставить udev перечитать правила:&lt;code&gt;bashudevadm control --reload-rules&lt;/code&gt;и переподключить ресивер.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Но у меня Solaar и после этого отказался видеть приёмник. Как оказалось, проблема была в моём LTS ядре 3.0.x (обновление сегодня утром принесло LTS ядро 3.10, так что проблем больше не будет), т.к. полноценная поддержка ресиверов появилась только в ядрах 3.2.&lt;/p&gt;
&lt;p&gt;После обновления и перезагрузки с новым ядром устройство моментально увиделось. Как оказалось, помимо линковки устройств программа так же позволяет менять некоторые настройки самих устройств, отображать некоторые статусы и отлинковывать их (даже если устройство не подключено и находится в недосягаемости, к примеру, потеряли). Для моей M510 настроек/статусов получилось немного:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;уровень заряда батареи&lt;/li&gt;
&lt;li&gt;включение/выключение плавной прокрутки&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Поддерживаемые (гарантированно) устройства и фичи перечислены в табличке на официальном сайте: 
&lt;a href=&#34;http://pwr.github.io/Solaar/devices.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://pwr.github.io/Solaar/devices.html&lt;/a&gt;, но даже если вашего устройства там нет, есть вероятность, что оно заработает. По крайней мере слинковать его можно будет. Думаю, в таком случае, следует связаться с автором и рассказать, что за устройство и как работает, для пополнения коллекции.&lt;/p&gt;
&lt;p&gt;На этом всё. Придёт K800 посмотрю как с ней подружится.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Онлайн компиляторы C/C&#43;&#43; и не только</title>
      <link>https://htrd.su/blog/2013/09/19/online_compilers_for_c_cxx_and_others/</link>
      <pubDate>Thu, 19 Sep 2013 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2013/09/19/online_compilers_for_c_cxx_and_others/</guid>
      <description>&lt;p&gt;Иногда нужно быстро проверить работоспособность какой-то идеи или алгоритма. Хорошо, когда у вас Linux и какая-то система из семейства Unix с установленным компилятором (имхо, в 90% случаев это будет правдой), вам просто нужно открыть консоль вызвать vim/emacs/joe/mcedit/etc набросать программку и вызвать компилятор. Но иногда вы в гостях/командировке/интернет-кафе, в общем тогда, когда компилятора нет под рукой, но есть доступ в интернет. Тут помогут онлайн-компиляторы.&lt;/p&gt;
&lt;p&gt;Отправной точкой можно взять ресурсы:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://isocpp.org/blog/2013/01/online-c-compilers&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://isocpp.org/blog/2013/01/online-c-compilers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://arne-mertz.de/2017/05/online-compilers/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://arne-mertz.de/2017/05/online-compilers/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Из перечисленных там, мне понравились нижеперечисленные.&lt;/p&gt;
&lt;h2 id=&#34;лидеры&#34;&gt;Лидеры&lt;/h2&gt;
&lt;p&gt;Лидеры моего внутреннего рейтинга. На основе развития за все годы существования этой заметки.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://wandbox.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://wandbox.org/&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;del&gt;Мой фаворит&lt;/del&gt; Не совсем. Работает как-то медленно. Чаще 
&lt;a href=&#34;https://cpp.sh&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://cpp.sh&lt;/a&gt; запускаю (см ниже)&lt;/li&gt;
&lt;li&gt;Плюсы:
&lt;ul&gt;
&lt;li&gt;Самые свежие версии компиляторов (см. ниже) и, соответственно, самые свежие версии стандартов.&lt;/li&gt;
&lt;li&gt;Gcc/Clang/Zapcc на выбор и много вариантов версий&lt;/li&gt;
&lt;li&gt;Удобный выбор версий стандарта (C++)&lt;/li&gt;
&lt;li&gt;Доступен Boost разных версий и дополнительные библиотеки типа 
&lt;a href=&#34;http://bolero-murakami.github.io/Sprout/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Sprout&lt;/a&gt; и 
&lt;a href=&#34;https://github.com/msgpack/msgpack-c&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;MessagePack&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Можно задать дополнительные опции компилятору (&amp;ldquo;Compiler options&amp;rdquo;)&lt;/li&gt;
&lt;li&gt;Уже можно задать опции командной строки для приложения (&amp;ldquo;Runtime options&amp;rdquo;)&lt;/li&gt;
&lt;li&gt;Можно передать программе STDIN&lt;/li&gt;
&lt;li&gt;Можно создавать дополнительные текстовые файлы (например для программ, читающих из файлов). При этом, можно хитро извернуться и использовать WandBox как IDE: эти файлы могут быть исходниками,
проосто печислите их в параметрах компилятора ;-)&lt;/li&gt;
&lt;li&gt;Несколько языков&lt;/li&gt;
&lt;li&gt;Можно шарить код&lt;/li&gt;
&lt;li&gt;Автоматически сохраняет код между запусками браузера&lt;/li&gt;
&lt;li&gt;Быстрый запуск по Ctrl+Enter&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Минусы
&lt;ul&gt;
&lt;li&gt;Нет студийного компилятора&lt;/li&gt;
&lt;li&gt;На момент &amp;ldquo;конец октября 2024&amp;rdquo;: интерфейс стал очень тормозным&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://coliru.stacked-crooked.com&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://coliru.stacked-crooked.com&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Плюсы:
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;C++20, можно поиграться с параметром &lt;code&gt;-std=XXX&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Последняя версия компилятора&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Можно выбрать компилятор: см минусы&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;А выбрать только так, вместо команды билда указать: &lt;code&gt;ls /usr/local/bin/*g++* /usr/bin/*g++*&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Итого, на август 2023:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;g++&lt;/code&gt; - актуальная версия (13)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;g++-4.7&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;g++-4.8&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;g++-4.9&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;g++-5.1&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;g++-5.2&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;g++-5&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;clang++&lt;/code&gt; - 5 версия&lt;/li&gt;
&lt;li&gt;&lt;code&gt;clang++-5&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Можно задать параметры сборки&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Автоматически сохраняет код между запусками браузера&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Можно использовать для шаринга кода (внизу кропка Share)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Можно передать параметры программе через аргументы командной строки&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Можно передать программе STDIN используя трюк Shell:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;g++ -std&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;c++20 -O2 -Wall -pedantic -pthread main.cpp &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; ./a.out &lt;span class=&#34;s&#34;&gt;&amp;lt;&amp;lt; EOF
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;Hey! I am stdin!
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;EOF&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Много шоркатов&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Минусы:
&lt;ul&gt;
&lt;li&gt;Небольшой выбор компиляторов и версий и хакерский путь поиска оных&lt;/li&gt;
&lt;li&gt;У меня пару раз не работал.&lt;/li&gt;
&lt;li&gt;Язык только (?) C/C++&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://gcc.godbolt.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://gcc.godbolt.org/&lt;/a&gt; - &lt;del&gt;тут укажу один минус сразу: &lt;strong&gt;он только компилирует, но не выполняет код&lt;/strong&gt; и&lt;/del&gt; отображает ассемблерный листинг, что удобно для анализа всяких оптимизаций.
&lt;ul&gt;
&lt;li&gt;Плюсы:
&lt;ul&gt;
&lt;li&gt;Много разных компиляторов и их версий: gcc (4.4-4.8), arm-gcc (4.5-4.6), avr-gcc (4.5), mps430-gcc (4.5), clang (3.0), icc (13.0.1)&lt;/li&gt;
&lt;li&gt;Показывает ассемблерный выход&lt;/li&gt;
&lt;li&gt;Можно задать параметры компиляции&lt;/li&gt;
&lt;li&gt;Можно шарить код&lt;/li&gt;
&lt;li&gt;Мегатулза для анализа сгенерированного кода&lt;/li&gt;
&lt;li&gt;На момент &amp;ldquo;август 2023&amp;rdquo; уже умеет выполнять код (не для всех компиляторов), для этого нужно нажать в окне ассемблерного выхлопа иконку с &amp;ldquo;+&amp;rdquo; и выбрать пункт &amp;ldquo;Executor From This&amp;rdquo;. Далее можно задать как параметры коммандной строки, так и данные на STDIN.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Минусы:
&lt;ul&gt;
&lt;li&gt;Для меня - больше нет :)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Субъективно: выполнение кода появилось, но всё же удобнее использовать его как инструмент анализа и оптимизации.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://cppinsights.io/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://cppinsights.io/&lt;/a&gt; - ещё один сервис уровня godbolt, но! Он показывает во что могут разворачиваться синтаксические конструкции, типа лябдб и, к примеру, 
&lt;a href=&#34;https://www.cppstories.com/2019/02/2lines3featuresoverload.html/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;идиомы &amp;ldquo;overload&amp;rdquo;&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Плюсы:
&lt;ul&gt;
&lt;li&gt;Все актуальные стандарты&lt;/li&gt;
&lt;li&gt;Помогает разбираться в тонкостях и нюансах&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Минусы:
&lt;ul&gt;
&lt;li&gt;Не вижу, но смотреть особенности&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Особенности:
&lt;ul&gt;
&lt;li&gt;Это не компилятор в прямом смысле слова. Он не запускает программу, не читает файлы, аргументы и т.п. Он нужен что бы развернуть синтаксические конструкции в простые, примитивные конструкции языка, более доступные для понимания.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;прочие&#34;&gt;Прочие&lt;/h2&gt;
&lt;p&gt;Которыми раньше пользовался, но которые по каким-то причинам ушли из моих фаворитов.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://cpp.sh/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://cpp.sh/&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Особенности (ни плюс, ни минус, а данность):
&lt;ul&gt;
&lt;li&gt;Код собирается на сервере через emscripten в WebAssemply code, который уже выполняется непосредственно в браузере&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Плюсы:
&lt;ul&gt;
&lt;li&gt;Короткое и лаконичное имя :-)&lt;/li&gt;
&lt;li&gt;C++98, C++11, C++14, C++17, C++20, C++23 - по выбору (GCC 4.9.2)&lt;/li&gt;
&lt;li&gt;Различные уровни оптимизации: O0, O1, O2, O3&lt;/li&gt;
&lt;li&gt;Поддержка предупреждений: Wall, Wextra, Wpedantic&lt;/li&gt;
&lt;li&gt;&lt;del&gt;Boost 1.55 (больше никто не предоставляет)&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;Можно шарить код&lt;/li&gt;
&lt;li&gt;&lt;del&gt;Ввод через стандартный ввод: интерактивный (этого нет ни у кого больше) и текст&lt;/del&gt; см минусы&lt;/li&gt;
&lt;li&gt;Сразу большое окно редактора&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Минусы
&lt;ul&gt;
&lt;li&gt;Только C++&lt;/li&gt;
&lt;li&gt;Нет работы с файлами&lt;/li&gt;
&lt;li&gt;Не понимает завершения процесса по сигналу&lt;/li&gt;
&lt;li&gt;Больше нет возможности передать параметры коммандной строки&lt;/li&gt;
&lt;li&gt;Больше нет возможности передать STDIN&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://ideone.com&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://ideone.com&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Август 2023: не открывается&lt;/li&gt;
&lt;li&gt;Плюсы:
&lt;ul&gt;
&lt;li&gt;C++14 стандарт (компилятор gcc 8.2 и clang 8.0)&lt;/li&gt;
&lt;li&gt;Можно шарить код + оставить аннотацию к нему (нажать &amp;ldquo;More options&amp;rdquo;)&lt;/li&gt;
&lt;li&gt;Можно задать данные которые отошлются на STDIN программы&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Минусы:
&lt;ul&gt;
&lt;li&gt;Нельзя задать параметры сборки&lt;/li&gt;
&lt;li&gt;Нельзя передать параметры командной строки&lt;/li&gt;
&lt;li&gt;Других стандартов C++ нет (С++98/03, C++11, C++17, C++20)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Забавный баг</title>
      <link>https://htrd.su/blog/2013/09/18/zabavnyj_bag/</link>
      <pubDate>Wed, 18 Sep 2013 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2013/09/18/zabavnyj_bag/</guid>
      <description>&lt;p&gt;Есть некая система (embedded), у которой вся память поделена на пулы различного размера и способы
выделения память (фиксированный размер, переменный размер). Есть механизм для выделения памяти
из этих пулов (на основе размера аллокации подбирает подходящий пул и делает от туда выделение) и
возвращение её туда, примем его таким:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;pool_alloc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// выделение памяти из пула
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;pool_calloc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// выделение памяти из пула и зануление её
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;pool_free&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ptr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// возврат (освобождение) памяти в пул
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;есть так же определённые операторы &lt;code&gt;new/new[]/delete/delete[]&lt;/code&gt; для использования этого механизма в
C++ коде (код сильно упрощён):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;operator&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pool_alloc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;operator&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;pool_alloc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;operator&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;delete&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ptr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;pool_free&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ptr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;operator&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;delete&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ptr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;pool_free&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ptr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;На этом вводная часть закончена. Переходим к сути.&lt;/p&gt;
&lt;p&gt;Существовала испокон веков некая большая структура (в терминологии C++ - POD тип), и код, использующий
её был повсеместно на чистом C. Назовём эту структуру так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;BigStruct&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// a lot of fields
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Соответственно память под эту структуру выделялась и освобождалась так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;big_struct_ptr&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;BigStruct&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pool_calloc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;sizeof&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;BigStruct&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// память сразу занулялась
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;pool_free&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;big_struct_ptr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Время шло, код постепенно &amp;ldquo;переписывался&amp;rdquo; на C++. В кавычках, потому как это &amp;ldquo;переписывание&amp;rdquo; сводилось
к изменению расширения файла на &lt;code&gt;.cpp&lt;/code&gt; и исправлению очевидных ошибок и предупреждений (тут, с одной
стороны, используется &lt;code&gt;-Werror&lt;/code&gt; как опция для GCC, с другой стороны, предупреждение включены далеко
не все). И вот, в один прекрасный момент, весь код, который использует эту структуру, уже компилируется
C++ компилятором. Как результат, при очередной фиче или багофиксе в структуре появляется поле типа&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;vector&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Foo&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;some_field&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;То есть, одним мановением руки, структура перестаёт быть POD-типом, но&amp;hellip; Механизм выделения и
освобождения памяти для неё не меняется!&lt;/p&gt;
&lt;p&gt;Теперь сделайте паузу и пофантазируйте, к чему это приводит.&lt;/p&gt;
&lt;p&gt;На практике, это решение жило около двух лет (на момент написания статьи) и никак себя не проявляло.
А приводило оно к постепенной утечке памяти: для &lt;code&gt;std::vector&lt;/code&gt; не вызывался ни конструктор ни
деструктор. Отсутствие вызова конструктора проходило незаметно, в этом конкретном примере &amp;ldquo;спасало&amp;rdquo;
то, что память занулялась и у класса нет vtable. А вот отсутствие вызова деструктора приводило к тому,
что все аллокации, сделанные внутри вектора, не освобождались. Маскировало эту проблему то, что
аллокации были очень маленькие (около 4 байт), и их было немного за весь период нормальной работы
аппарата от момента включения до выключения.&lt;/p&gt;
&lt;p&gt;Выявило нагрузочное тестирование, где один алгоритм прогонялся атипичное, для нормальной работы,
количество раз (помогло логирование вызовов &lt;code&gt;new&lt;/code&gt; при помощи gcc&amp;rsquo;шной &lt;code&gt;__builtin_return_address()&lt;/code&gt;,
&lt;code&gt;objdump -d&lt;/code&gt; и базовые знания ассемблера).&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Qt Creator и perforce</title>
      <link>https://htrd.su/blog/2013/09/10/qt_creator_i_perforce/</link>
      <pubDate>Tue, 10 Sep 2013 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2013/09/10/qt_creator_i_perforce/</guid>
      <description>&lt;p&gt;&lt;strong&gt;UPD:&lt;/strong&gt; Изменения, на основе этого патча, заинтегрированы в Qt Creator другим человеком. От меня была только ревью кода.&lt;/p&gt;
&lt;p&gt;Во времена, когда проект Qt и все смежные тулы были под управлением VCS Perforce, появился плагин для Qt Creator&amp;rsquo;а для интеграции работы с этой системой, да вот только в своём развитии он конкретно и застрял в тех стародавних временах. Причина проста: проект переехал на Git, а перфорс нафиг никому не сдался. Как результат: плагин есть, и даже собирается, да вот только считать его хоть малость рабочим&amp;hellip; не получается.&lt;/p&gt;
&lt;p&gt;Как минимум одна особенность (читать бага), перечёркивает весь (и без того убогий) функционал: он не может определить директорию верхнего уровня для файлов.&lt;/p&gt;
&lt;p&gt;При этом, это вроде как работает, когда забиваешь настройки, да вот только они там и поселяются навсегда, прибитые к одному серверу и одному пользователю. А кроме того, за директорию верхнего уровня принимается текущая рабочая директория (читать: та, из которой запущен Qt Creator).&lt;/p&gt;
&lt;p&gt;Немного повозившись, родился патч:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-diff&#34; data-lang=&#34;diff&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;From c111318c78acb2b7ddd41533de3577fa7dc64b1d Mon Sep 17 00:00:00 2001
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;From: Alexander Drozdov &amp;lt;adrozdoff@gmail.com&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Date: Tue, 10 Sep 2013 17:33:55 +1100
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Subject: [PATCH] Perforce VCS plugin: fix top-level directory detection
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gs&#34;&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gs&#34;&gt;&lt;/span&gt; src/plugins/perforce/perforcechecker.cpp        | 21 ++++++++-
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; src/plugins/perforce/perforcechecker.h          |  5 ++-
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; src/plugins/perforce/perforceconstants.h        |  2 +-
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; src/plugins/perforce/perforceplugin.cpp         | 57 ++++++++++++++++++++-----
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; src/plugins/perforce/perforceplugin.h           | 16 ++++++-
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; src/plugins/perforce/perforceversioncontrol.cpp |  2 +-
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; 6 files changed, 86 insertions(+), 17 deletions(-)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;diff --git a/src/plugins/perforce/perforcechecker.cpp b/src/plugins/perforce/perforcechecker.cpp
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;index 5971c00..b9b0395 100644
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gd&#34;&gt;--- a/src/plugins/perforce/perforcechecker.cpp
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gi&#34;&gt;+++ b/src/plugins/perforce/perforcechecker.cpp
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gu&#34;&gt;@@ -28,6 +28,7 @@
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;&lt;/span&gt; ****************************************************************************/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; #include &amp;#34;perforcechecker.h&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+#include &amp;#34;perforceconstants.h&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; #include &amp;lt;utils/qtcassert.h&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; #include &amp;lt;utils/synchronousprocess.h&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;@@ -78,7 +79,8 @@ void PerforceChecker::resetOverrideCursor()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; void PerforceChecker::start(const QString &amp;amp;binary,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                             const QStringList &amp;amp;basicArgs,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-                            int timeoutMS)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gi&#34;&gt;+                            int timeoutMS,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+                            const QString &amp;amp;workingDirectory)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     if (isRunning()) {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         emitFailed(QLatin1String(&amp;#34;Internal error: process still running&amp;#34;));
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;@@ -91,6 +93,15 @@ void PerforceChecker::start(const QString &amp;amp;binary,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;&lt;/span&gt;     m_binary = binary;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     QStringList args = basicArgs;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     args &amp;lt;&amp;lt; QLatin1String(&amp;#34;client&amp;#34;) &amp;lt;&amp;lt; QLatin1String(&amp;#34;-o&amp;#34;);
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+    if (Perforce::Constants::debug)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+        qDebug() &amp;lt;&amp;lt; &amp;#34;PerforceChecker::start: [&amp;#34; &amp;lt;&amp;lt; workingDirectory &amp;lt;&amp;lt; &amp;#34;]&amp;#34; &amp;lt;&amp;lt; m_binary &amp;lt;&amp;lt; args;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+    if (!workingDirectory.isEmpty())
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+    {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+        m_process.setWorkingDirectory(workingDirectory);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+    }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt;     m_process.start(m_binary, args);
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     m_process.closeWriteChannel();
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     // Timeout handling
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;@@ -105,6 +116,11 @@ void PerforceChecker::start(const QString &amp;amp;binary,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;&lt;/span&gt;     }
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+bool PerforceChecker::waitForFinished(int msec)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+{
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+    return m_process.waitForFinished(msec);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt; void PerforceChecker::slotTimeOut()
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     if (!isRunning())
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;@@ -169,6 +185,9 @@ static inline QString clientRootFromOutput(const QString &amp;amp;in)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; void PerforceChecker::parseOutput(const QString &amp;amp;response)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+    if (Perforce::Constants::debug)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+        qDebug() &amp;lt;&amp;lt; &amp;#34;PerforceChecker::parseOutput: &amp;#34; &amp;lt;&amp;lt; response;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt;     if (!response.contains(QLatin1String(&amp;#34;View:&amp;#34;)) &amp;amp;&amp;amp; !response.contains(QLatin1String(&amp;#34;//depot/&amp;#34;))) {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         emitFailed(tr(&amp;#34;The client does not seem to contain any mapped files.&amp;#34;));
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         return;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;diff --git a/src/plugins/perforce/perforcechecker.h b/src/plugins/perforce/perforcechecker.h
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;index e466250..aada848 100644
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gd&#34;&gt;--- a/src/plugins/perforce/perforcechecker.h
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gi&#34;&gt;+++ b/src/plugins/perforce/perforcechecker.h
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gu&#34;&gt;@@ -50,10 +50,13 @@ public:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;&lt;/span&gt; public slots:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     void start(const QString &amp;amp;binary,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                const QStringList &amp;amp;basicArgs = QStringList(),
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-               int timeoutMS = -1);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gi&#34;&gt;+               int timeoutMS = -1,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+               const QString &amp;amp;workingDirectory = QString());
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     bool isRunning() const;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+    bool waitForFinished(int msec = -1);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt;     bool useOverideCursor() const;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     void setUseOverideCursor(bool v);
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;diff --git a/src/plugins/perforce/perforceconstants.h b/src/plugins/perforce/perforceconstants.h
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;index 316fc24..1f8c2a1 100644
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gd&#34;&gt;--- a/src/plugins/perforce/perforceconstants.h
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gi&#34;&gt;+++ b/src/plugins/perforce/perforceconstants.h
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gu&#34;&gt;@@ -55,7 +55,7 @@ const char SUBMIT_CURRENT[] = &amp;#34;Perforce.SubmitCurrentLog&amp;#34;;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;&lt;/span&gt; const char DIFF_SELECTED[] = &amp;#34;Perforce.DiffSelectedFilesInLog&amp;#34;;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; const char SUBMIT_MIMETYPE[] = &amp;#34;text/vnd.qtcreator.p4.submit&amp;#34;;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-enum { debug = 0 };
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gi&#34;&gt;+enum { debug = 1 };
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; } // Constants
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; } // Perforce
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;diff --git a/src/plugins/perforce/perforceplugin.cpp b/src/plugins/perforce/perforceplugin.cpp
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;index 8fd5957..1f9480d 100644
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gd&#34;&gt;--- a/src/plugins/perforce/perforceplugin.cpp
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gi&#34;&gt;+++ b/src/plugins/perforce/perforceplugin.cpp
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gu&#34;&gt;@@ -824,7 +824,11 @@ bool PerforcePlugin::managesDirectory(const QString &amp;amp;directory, QString *topLeve
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;&lt;/span&gt;     const bool rc = managesDirectoryFstat(directory);
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     if (topLevel) {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         if (rc)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+        {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+            if (Perforce::Constants::debug)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+                qDebug() &amp;lt;&amp;lt; &amp;#34;Top Level: &amp;#34; &amp;lt;&amp;lt; m_settings.topLevelSymLinkTarget();
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt;             *topLevel = m_settings.topLevelSymLinkTarget();
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+        }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt;         else
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;             topLevel-&amp;gt;clear();
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     }
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;@@ -834,28 +838,48 @@ bool PerforcePlugin::managesDirectory(const QString &amp;amp;directory, QString *topLeve
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;&lt;/span&gt; bool PerforcePlugin::managesDirectoryFstat(const QString &amp;amp;directory)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     if (!m_settings.isValid())
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+    {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+        if (Perforce::Constants::debug)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+            qDebug() &amp;lt;&amp;lt; &amp;#34;Settings invalid&amp;#34;;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt;         return false;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+    }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt;     // Cached?
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     const ManagedDirectoryCache::const_iterator cit = m_managedDirectoryCache.constFind(directory);
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     if (cit != m_managedDirectoryCache.constEnd())
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-        return cit.value();
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gi&#34;&gt;+    {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+        const DirectoryCacheEntry &amp;amp;entry = cit.value();
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+        if (Perforce::Constants::debug)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+            qDebug() &amp;lt;&amp;lt; &amp;#34;Directory: &amp;#34; &amp;lt;&amp;lt; directory &amp;lt;&amp;lt; &amp;#34; is cached and managed: &amp;#34; &amp;lt;&amp;lt; entry.isManaged;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+        setNewTopLevel(entry.topLevel);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+        return entry.isManaged;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+    }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt;     // Determine value and insert into cache
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     bool managed = false;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     do {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         // Quick check: Must be at or below top level and not &amp;#34;../../other_path&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         const QStringList relativeDirArgs = m_settings.relativeToTopLevelArguments(directory);
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         if (!relativeDirArgs.empty() &amp;amp;&amp;amp; relativeDirArgs.front().startsWith(QLatin1String(&amp;#34;..&amp;#34;)))
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-            break;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gi&#34;&gt;+        {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+            if (Perforce::Constants::debug)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+                qDebug() &amp;lt;&amp;lt; &amp;#34;Directory &amp;#34; &amp;lt;&amp;lt; directory &amp;lt;&amp;lt; &amp;#34; is a relative path to current top level dir [&amp;#34; &amp;lt;&amp;lt; relativeDirArgs &amp;lt;&amp;lt; &amp;#34;], try find new top level.&amp;#34;;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+            getTopLevel(directory, true);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+        }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt;         // Is it actually managed by perforce?
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         QStringList args;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         args &amp;lt;&amp;lt; QLatin1String(&amp;#34;fstat&amp;#34;) &amp;lt;&amp;lt; QLatin1String(&amp;#34;-m1&amp;#34;) &amp;lt;&amp;lt; perforceRelativeFileArguments(relativeDirArgs);
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         const PerforceResponse result = runP4Cmd(m_settings.topLevel(), args,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                                  RunFullySynchronous);
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+        if (Perforce::Constants::debug)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+            qDebug() &amp;lt;&amp;lt; &amp;#34;Perforce result:\n&amp;#34; &amp;lt;&amp;lt; result.stdOut &amp;lt;&amp;lt; &amp;#34;\n---\n&amp;#34; &amp;lt;&amp;lt; result.stdErr &amp;lt;&amp;lt; &amp;#34;\n---\n&amp;#34; &amp;lt;&amp;lt; result.message;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt;         managed = result.stdOut.contains(QLatin1String(&amp;#34;depotFile&amp;#34;))
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   || result.stdErr.contains(QLatin1String(&amp;#34;... - no such file(s)&amp;#34;));
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     } while (false);
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-    m_managedDirectoryCache.insert(directory, managed);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gi&#34;&gt;+    m_managedDirectoryCache.insert(directory, DirectoryCacheEntry(managed, m_settings.topLevel()));
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt;     return managed;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;@@ -1489,12 +1513,7 @@ PerforceVersionControl *PerforcePlugin::perforceVersionControl() const
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; void PerforcePlugin::slotTopLevelFound(const QString &amp;amp;t)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-    m_settings.setTopLevel(t);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-    const QString msg = tr(&amp;#34;Perforce repository: %1&amp;#34;).
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-                        arg(QDir::toNativeSeparators(t));
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-    VcsBase::VcsBaseOutputWindow::instance()-&amp;gt;appendSilently(msg);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-    if (Perforce::Constants::debug)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-        qDebug() &amp;lt;&amp;lt; &amp;#34;P4: &amp;#34; &amp;lt;&amp;lt; t;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gi&#34;&gt;+    setNewTopLevel(t);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; void PerforcePlugin::slotTopLevelFailed(const QString &amp;amp;errorMessage)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;@@ -1504,7 +1523,7 @@ void PerforcePlugin::slotTopLevelFailed(const QString &amp;amp;errorMessage)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;&lt;/span&gt;         qDebug() &amp;lt;&amp;lt; errorMessage;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-void PerforcePlugin::getTopLevel()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gi&#34;&gt;+void PerforcePlugin::getTopLevel(const QString &amp;amp;workingDirectory, bool isSync)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     // Run a new checker
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     if (m_settings.p4BinaryPath().isEmpty())
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;@@ -1514,7 +1533,23 @@ void PerforcePlugin::getTopLevel()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;&lt;/span&gt;     connect(checker, SIGNAL(failed(QString)), checker, SLOT(deleteLater()));
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     connect(checker, SIGNAL(succeeded(QString)), this, SLOT(slotTopLevelFound(QString)));
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     connect(checker, SIGNAL(succeeded(QString)),checker, SLOT(deleteLater()));
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-    checker-&amp;gt;start(m_settings.p4BinaryPath(), m_settings.commonP4Arguments(QString()), 30000);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gi&#34;&gt;+    checker-&amp;gt;start(m_settings.p4BinaryPath(), m_settings.commonP4Arguments(QString()), 30000, workingDirectory);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+    if (isSync)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+        checker-&amp;gt;waitForFinished();
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+void PerforcePlugin::setNewTopLevel(const QString &amp;amp;newTopLevel)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+{
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+    if (m_settings.topLevel() != newTopLevel)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+    {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+        m_settings.setTopLevel(newTopLevel);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+        const QString msg = tr(&amp;#34;Perforce repository: %1&amp;#34;).
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+                            arg(QDir::toNativeSeparators(newTopLevel));
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+        VcsBase::VcsBaseOutputWindow::instance()-&amp;gt;appendSilently(msg);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+        if (Perforce::Constants::debug)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+            qDebug() &amp;lt;&amp;lt; &amp;#34;P4: &amp;#34; &amp;lt;&amp;lt; newTopLevel;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+    }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; #ifdef WITH_TESTS
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;diff --git a/src/plugins/perforce/perforceplugin.h b/src/plugins/perforce/perforceplugin.h
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;index 8eeb1e2..8e08500 100644
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gd&#34;&gt;--- a/src/plugins/perforce/perforceplugin.h
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gi&#34;&gt;+++ b/src/plugins/perforce/perforceplugin.h
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gu&#34;&gt;@@ -146,7 +146,18 @@ protected:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; private:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-    typedef QHash&amp;lt;QString, bool&amp;gt; ManagedDirectoryCache;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gi&#34;&gt;+    struct DirectoryCacheEntry
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+    {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+        DirectoryCacheEntry(bool isManaged, const QString &amp;amp;topLevel)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+            : isManaged(isManaged),
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+              topLevel(topLevel)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+        {}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+        bool    isManaged;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+        QString topLevel;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+    };
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+    typedef QHash&amp;lt;QString, DirectoryCacheEntry&amp;gt; ManagedDirectoryCache;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     Core::IEditor *showOutputInEditor(const QString&amp;amp; title, const QString output,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                       int editorType, const QString &amp;amp;source,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;@@ -193,7 +204,8 @@ private:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;&lt;/span&gt;     bool isCommitEditorOpen() const;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     QSharedPointer&amp;lt;Utils::TempFileSaver&amp;gt; createTemporaryArgumentFile(const QStringList &amp;amp;extraArgs,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                                                      QString *errorString) const;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-    void getTopLevel();
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gi&#34;&gt;+    void getTopLevel(const QString &amp;amp;workingDirectory = QString(), bool isSync = false);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+    void setNewTopLevel(const QString &amp;amp;newTopLevel);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt;     QString pendingChangesData();
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     void updateCheckout(const QString &amp;amp;workingDir = QString(),
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;diff --git a/src/plugins/perforce/perforceversioncontrol.cpp b/src/plugins/perforce/perforceversioncontrol.cpp
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;index 19303a6..ad4f35b 100644
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gd&#34;&gt;--- a/src/plugins/perforce/perforceversioncontrol.cpp
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gi&#34;&gt;+++ b/src/plugins/perforce/perforceversioncontrol.cpp
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gu&#34;&gt;@@ -178,7 +178,7 @@ bool PerforceVersionControl::managesDirectory(const QString &amp;amp;directory, QString
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;&lt;/span&gt;         QDebug nsp = qDebug().nospace();
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         nsp &amp;lt;&amp;lt; &amp;#34;managesDirectory&amp;#34; &amp;lt;&amp;lt; directory &amp;lt;&amp;lt; rc;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         if (topLevel)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-            nsp &amp;lt;&amp;lt; topLevel;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gi&#34;&gt;+            nsp &amp;lt;&amp;lt; *topLevel;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt;     }
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     return rc;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-- 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt;1.8.3.msysgit.0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Алтай, г.Белуха</title>
      <link>https://htrd.su/blog/2013/07/17/altaj_g.beluxa/</link>
      <pubDate>Wed, 17 Jul 2013 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2013/07/17/altaj_g.beluxa/</guid>
      <description>&lt;p&gt;&lt;del&gt;В воскресенье уже самолёт. Следить за нами можно по карте ниже, точки отсылаются при помощи трекера Delorme Inreach.&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;Фото с похода:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://yadi.sk/a/nyXcmA1CsTknT&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://yadi.sk/a/nyXcmA1CsTknT&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Небольшой редизайн сайта</title>
      <link>https://htrd.su/blog/2013/05/18/nebolshoj_redizajn_sajta/</link>
      <pubDate>Sat, 18 May 2013 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2013/05/18/nebolshoj_redizajn_sajta/</guid>
      <description>&lt;p&gt;Собственно основу можно заметить невооружённым глазом:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Убрана большая шапка&lt;/li&gt;
&lt;li&gt;Убраны большие закруглённые углы&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Менее заметные:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Большой логотип претерпел некоторый &amp;ldquo;ребрендинг&amp;rdquo; (этот логотип предлагается как картинка по умолчанию при репостинге в G+)&lt;/li&gt;
&lt;li&gt;Сделаны миникопии логотипа под разные размеры, один из них выводится в верхней навигационной строке, другой используется как favicon (теперь видно, что там картинка, а не чёрная клякса, но чёткости так и не получилось добиться)&lt;/li&gt;
&lt;li&gt;Возвратил стандартный поиск по сайту, потому как гугловский внезапно стал глючить и выдавать пустые ответы (при этом поисковые запросы типа &amp;ldquo;site:htrd.su ЗАПРОС&amp;rdquo; работают исправно), разбираться лень, т.к. сам не веб-разработчик и тратить на это время просто жалко (на крайний случай: 
&lt;a href=&#34;https://www.google.ru/search?q=site%3Ahtrd.su&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://www.google.ru/search?q=site%3Ahtrd.su&lt;/a&gt;). Кроме того, это несколько ускорило загрузку страницы.&lt;/li&gt;
&lt;li&gt;Небольшая косметика правой колонки: убрано лишнее, подкорректированы размеры шрифтов&lt;/li&gt;
&lt;li&gt;Немного откорректированы шрифты заголовков&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Build Boost on Windows with MinGW</title>
      <link>https://htrd.su/blog/2013/04/18/build_boost_on_windows_with_mingw/</link>
      <pubDate>Thu, 18 Apr 2013 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2013/04/18/build_boost_on_windows_with_mingw/</guid>
      <description>&lt;p&gt;Чисто заметка, без вдавания в детали.&lt;/p&gt;
&lt;p&gt;Для начала нужно поставить MinGW и MSYS.&lt;/p&gt;
&lt;p&gt;Сделать это можно двумя путями. Первый, это поставить и то и другое средствами mingw-get-inst: 
&lt;a href=&#34;http://sourceforge.net/projects/mingw/files/Installer/mingw-get-inst/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://sourceforge.net/projects/mingw/files/Installer/mingw-get-inst/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Но там только GCC 4.7.2, а мне нужен был GCC 4.8 (где брать свежие сборки MinGW я уже 
&lt;a href=&#34;https://htrd.su/blog/2013/04/04/binarnye_sborki_mingw/&#34;&gt;ранее писал&lt;/a&gt;, замечу только, что брать нужно версию с поддержкой threads-posix и dwarf, если вдруг захочется использовать бинарные сборки Qt). MSYS поставил при помощи &lt;code&gt;mingw-get&lt;/code&gt; (
&lt;a href=&#34;http://sourceforge.net/projects/mingw/files/Installer/mingw-get/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://sourceforge.net/projects/mingw/files/Installer/mingw-get/&lt;/a&gt;, а можно и вручную, скачивая и распаковывая файлы отсюда: 
&lt;a href=&#34;http://sourceforge.net/projects/mingw/files/MSYS/%29&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://sourceforge.net/projects/mingw/files/MSYS/)&lt;/a&gt;.
Распаковываем его, к примеру, в &lt;code&gt;C:\msys&lt;/code&gt;, далее:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cmd&#34; data-lang=&#34;cmd&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;cd&lt;/span&gt; C:\msys\bin
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mingw-get.exe update
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mingw-get.exe install msys
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;После этого MSYS будет расположен в &lt;code&gt;C:\msys\msys\1.0&lt;/code&gt;.
Если потребуется ещё что-то от msys: &lt;code&gt;mingw-get list&lt;/code&gt; вам в помощь.&lt;/p&gt;
&lt;p&gt;Далее сборка Boost (у меня 1.53.0).&lt;/p&gt;
&lt;p&gt;Распаковываем его, например в &lt;code&gt;D:\boost_1_53_0&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Настраиваем пути до компилятора (делаем это из запущенной копии &lt;code&gt;cmd&lt;/code&gt;):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cmd&#34; data-lang=&#34;cmd&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;set&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;PATH&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;c:\msys\msys\1.0\bin;c:\mingw\bin;&lt;span class=&#34;nv&#34;&gt;%PATH%&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Тут обращаю ваше внимание на один факт, за который разработчикам буста нужно малость по рукам настучать:
буст соберётся хорошо только в случае, если MinGW поставлен в &lt;code&gt;C:\MinGW&lt;/code&gt; и ни как иначе!&lt;/p&gt;
&lt;p&gt;После чего собираем &lt;code&gt;bjam&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cmd&#34; data-lang=&#34;cmd&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;cd&lt;/span&gt; D:\boost_1_53_0\tools\build\v2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bootstrap.bat gcc
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;b2 --prefix=C:\boost install
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;set&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;PATH&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;%PATH%&lt;/span&gt;;C:\boost\bin
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Теперь мы готовы собирать сам буст:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cmd&#34; data-lang=&#34;cmd&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;cd&lt;/span&gt; D:\boost_1_53_0\
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bjam -j2 toolset=gcc --build-type=complete --prefix=C:\boost install
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Вместо &lt;code&gt;-j2&lt;/code&gt; ставим нужное количество потоков сборки.&lt;/p&gt;
&lt;p&gt;После продолжительной сборки буст будет расположен:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;заголовки:  &lt;code&gt;C:\boost\include\boost-1_53&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;библиотеки: &lt;code&gt;C:\boost\lib&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;И полезные параметры при сборке:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cmd&#34; data-lang=&#34;cmd&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-Wno-unused-local-typedefs -DGLIBCXX_FORCE_NEW -D_WIN32_WINNT=0x0501 -DBOOST_THREAD_USE_LIB -DBOOST_THREAD_PROVIDES_GENERIC_SHARED_MUTEX_ON_WIN
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Для совсем ленивых, напоминаю про 
&lt;a href=&#34;https://htrd.su/blog/2011/12/13/alternativnaja_sborka_mingw32/&#34;&gt;альтернативную сборку MinGW от Стефана&lt;/a&gt;, в ней он уже обновил GCC до 4.8 и Boost до 1.53. Кстати, Стефан работает в Microsoft :)&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>С днём космонавтики!</title>
      <link>https://htrd.su/blog/2013/04/12/s_dnjom_kosmonavtiki/</link>
      <pubDate>Fri, 12 Apr 2013 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2013/04/12/s_dnjom_kosmonavtiki/</guid>
      <description>&lt;p&gt;Надеюсь мои ощущения, что космические программы стали более активными, не просто ощущения. Поздравляю всех причастных!&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Qt Creator: C/C&#43;&#43; parser and &#34;pre-included&#34; headers</title>
      <link>https://htrd.su/blog/2013/04/09/c_parser_and_pre-included_headers/</link>
      <pubDate>Tue, 09 Apr 2013 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2013/04/09/c_parser_and_pre-included_headers/</guid>
      <description>&lt;p&gt;Некоторые компиляторы (если не все) поддерживают такую функциональность: через параметр командной строки можно указать файл или файлы, которые будут подключаться автоматически к каждому обрабатываемому файлу. У GCC это опция `-include ````.&lt;/p&gt;
&lt;p&gt;В некоторых проектах используют эту особенность, как результат - явного включения файла нет, а парсер в Qt Creator&amp;rsquo;е не видит части объявлений.&lt;/p&gt;
&lt;p&gt;Решения единого нет: для каждого типа проекта (qmake, cmake, generic &amp;amp; etc), теоретически, оно своё (если есть вообще). В моём случае используется Generic project, для него решение существует.&lt;/p&gt;
&lt;p&gt;И решение достаточно простое: Generic Project Mananger использует несколько файлов для хранения настроек проекта:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ProjectName**.creator**&lt;/code&gt; - головной файл, по сути не содержит никакой полезной информации&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ProjectName**.files**&lt;/code&gt; - список файлов проекта (может содержать и не исходники)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ProjectName**.includes**&lt;/code&gt; - пути поиска заголовочных файлов&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ProjectName**.config**&lt;/code&gt; - как гласит комментарий внутри этого файла: &amp;ldquo;&lt;code&gt;ADD PREDEFINED MACROS HERE!&lt;/code&gt;&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Вот последний файл самый интересный. Комментарий немного наводит в ступор и мы решаем, что тут можно только писать код вида:
#define MACRO some_value&lt;/p&gt;
&lt;p&gt;На самом деле, парсером этот файл воспринимается как обычный заголовочный файл и информация из него используется для парсинга всего остального. Чуете профит? Если нет, подсказываю: по сути это и есть наш &amp;ldquo;pre-included&amp;rdquo;  header для парсера! И писать в нём мы можем всё, что понимается препроцессором (если быть точнее: парсером скеатора). Т.е. мы можем сделать такое:
#include &amp;ldquo;includes/pre-included.h&amp;rdquo;&lt;/p&gt;
&lt;p&gt;И всё, что объявлено в нашем &lt;code&gt;pre-included.h&lt;/code&gt; станет доступно парсеру при обработке каждого файла. Дело сделано!&lt;/p&gt;
&lt;p&gt;Было бы любопытно узнать как такое можно реализовать для Qmake и Cmake проектов.&lt;/p&gt;
&lt;p&gt;PS вопрос этот я поднял в списке рассылки Qt Creator&amp;rsquo;а, пока ждал ответ, в голову пришла идея с &lt;code&gt;#include&lt;/code&gt;, в результате список только подтвердил моё изыскание :)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt; рано обрадовался, внезапно, решение отказалось работать. Имхо, причина в несовсем корректном использовании &lt;code&gt;.config&lt;/code&gt; файла.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>C&#43;&#43; Template Metaprogramming</title>
      <link>https://htrd.su/blog/2013/04/08/c_template_metaprogramming/</link>
      <pubDate>Mon, 08 Apr 2013 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2013/04/08/c_template_metaprogramming/</guid>
      <description>&lt;p&gt;Что-то не нашёл официального русского перевода книги, только сделанный в частном порядке (читать сложновато): 
&lt;a href=&#34;http://enotcpp.blogspot.ru/2011/11/c-template-metaprogramming-david.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://enotcpp.blogspot.ru/2011/11/c-template-metaprogramming-david.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;На английском: 
&lt;a href=&#34;http://ultra.sdk.free.fr/misc/docs/Addison.Wesley.C&amp;#43;&amp;#43;.Template.Metaprogramming.Concepts.Tools.and.Techniques.from.Boost.and.Beyond.pdf&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://ultra.sdk.free.fr/misc/docs/Addison.Wesley.C++.Template.Metaprogramming.Concepts.Tools.and.Techniques.from.Boost.and.Beyond.pdf&lt;/a&gt; или среди торрентов: 
&lt;a href=&#34;http://rutracker.org/forum/viewtopic.php?t=1140883&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://rutracker.org/forum/viewtopic.php?t=1140883&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>C&#43;&#43; Traits</title>
      <link>https://htrd.su/blog/2013/04/08/c_traits/</link>
      <pubDate>Mon, 08 Apr 2013 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2013/04/08/c_traits/</guid>
      <description>&lt;p&gt;Будет дополняться и оформляться.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.cantrip.org/traits.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.cantrip.org/traits.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://accu.org/index.php/journals/442&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://accu.org/index.php/journals/442&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.drdobbs.com/article/print?articleId=184404270&amp;amp;siteSectionName=cpp&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.drdobbs.com/article/print?articleId=184404270&amp;siteSectionName=cpp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.rsdn.ru/forum/info/FAQ.cpp.traits&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.rsdn.ru/forum/info/FAQ.cpp.traits&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Binary Logic Bit Operations In C and C&#43;&#43;</title>
      <link>https://htrd.su/blog/2013/04/04/binary_logic_bit_operations_in_c_and_c/</link>
      <pubDate>Thu, 04 Apr 2013 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2013/04/04/binary_logic_bit_operations_in_c_and_c/</guid>
      <description>&lt;p&gt;На заметку: 
&lt;a href=&#34;http://www.somacon.com/p125.php&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.somacon.com/p125.php&lt;/a&gt; там же удобный калькулятор для перевода констант между четырмя популярными системами счисления (BIN, OCT, HEX, DEC)&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Бинарные сборки MinGW</title>
      <link>https://htrd.su/blog/2013/04/04/binarnye_sborki_mingw/</link>
      <pubDate>Thu, 04 Apr 2013 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2013/04/04/binarnye_sborki_mingw/</guid>
      <description>&lt;p&gt;Сайт qt-project.org навёл меня на проект 
&lt;a href=&#34;http://sourceforge.net/projects/mingwbuilds/files/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://sourceforge.net/projects/mingwbuilds/files/&lt;/a&gt; где можно разжиться бинарными сборками MinGW для MacOSX, Linux, Windows.&lt;/p&gt;
&lt;p&gt;Удобдно для использования  совместно с Qt Creator на Windows.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Qt Creator: &#34;the debugger could not load the debugging helper library&#34; на Windows XP</title>
      <link>https://htrd.su/blog/2013/03/28/qt_creator_the_debugger_could_not_load_the_debugging_helper_library_na_windows_xp/</link>
      <pubDate>Thu, 28 Mar 2013 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2013/03/28/qt_creator_the_debugger_could_not_load_the_debugging_helper_library_na_windows_xp/</guid>
      <description>&lt;p&gt;Решение подсказывают 
&lt;a href=&#34;http://groakat.wordpress.com/2012/03/01/qt-creator-the-debugger-could-not-load-the-debugging-helper-library/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;тут&lt;/a&gt; и 
&lt;a href=&#34;https://qt-project.org/forums/viewthread/518&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;тут&lt;/a&gt;. Если коротко: нужен GDB скомпилированный с поддержкой Python и Qt Creator на это расчитывает. По первой ссылке его рекомендуют брать в QtSDK, но качать его сильно накладно. Недолгое гугление привело на эту ссылку: 
&lt;a href=&#34;http://origin.releases.qt-project.org/gdb/windows-xp/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://origin.releases.qt-project.org/gdb/windows-xp/&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Устанавливатся просто: скачиваем, распаковываем, в настройках китов в Qt Creator (Tool -&amp;gt; Options&amp;hellip; -&amp;gt; Build &amp;amp; Run -&amp;gt; Kits) выбираем новый отладчик (для MinGW) и живём.&lt;/p&gt;
&lt;p&gt;PS другие версии: 
&lt;a href=&#34;http://origin.releases.qt-project.org/gdb/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://origin.releases.qt-project.org/gdb/&lt;/a&gt;
PPS более корректные ссылки: 
&lt;a href=&#34;http://builds.qt-project.org/job/gdb-windowsxp/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://builds.qt-project.org/job/gdb-windowsxp/&lt;/a&gt; и 
&lt;a href=&#34;http://builds.qt-project.org/job/gdb-windows/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://builds.qt-project.org/job/gdb-windows/&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Scott Meyers. Effective C&#43;&#43; in an Embedded Environment</title>
      <link>https://htrd.su/blog/2013/03/28/scott_meyers._effective_c_in_an_embedded_environment/</link>
      <pubDate>Thu, 28 Mar 2013 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2013/03/28/scott_meyers._effective_c_in_an_embedded_environment/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2013/03/28/scott_meyers._effective_c_in_an_embedded_environment/effcppembcover240x185.gif&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;This PDF document contains the presentation materials from Scott Meyers&amp;rsquo; two-day training course Effective C++ in an Embedded Environment. It provides an in-depth examination of how C++ can be applied in embedded systems, including costs of language features, ROMing, ISRs, memory management, safety-critical and real-time considerations, and more.&lt;/p&gt;
&lt;p&gt;Формат: презентация в PDF, чётко и по делу.&lt;/p&gt;
&lt;p&gt;Для желающих получить без оплаты: 
&lt;a href=&#34;https://htrd.su/img//post/2013/03/28/scott_meyers._effective_c_in_an_embedded_environment/effectcppemb.pdf&#34;&gt;effectcppemb.pdf&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>С переездом!</title>
      <link>https://htrd.su/blog/2013/03/25/s_pereezdom/</link>
      <pubDate>Mon, 25 Mar 2013 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2013/03/25/s_pereezdom/</guid>
      <description>&lt;p&gt;Переехал на новый хостинг, вроде всё основное запустил. Заодно обновился и обновил плагин 
&lt;a href=&#34;https://htrd.su/proekty/googleplus-ng/start/&#34;&gt;googleplusoneng&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Теперь проблем со скоростью (100Мбит) и доступностью (всё же сервер в серверной :)) должно быть поменьше.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Google Drive и прокси с доменной авторизацией</title>
      <link>https://htrd.su/blog/2013/03/05/google_drive_i_proksi_s_domennoj_avtorizaciej/</link>
      <pubDate>Tue, 05 Mar 2013 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2013/03/05/google_drive_i_proksi_s_domennoj_avtorizaciej/</guid>
      <description>&lt;p&gt;Google Drive [речь про Windows] может работать только с прямым подключением к интернету или через прокси, настроенный в IE и без авторизации.&lt;/p&gt;
&lt;p&gt;Что бы решить сабжевую проблему:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://superuser.com/questions/416845/google-drive-with-proxy-authentication&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://superuser.com/questions/416845/google-drive-with-proxy-authentication&lt;/a&gt; - рецепт&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://cntlm.sourceforge.net/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://cntlm.sourceforge.net/&lt;/a&gt; - основной ингредиент&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Пересказывая&amp;hellip; Ставим &lt;code&gt;cntlm&lt;/code&gt; прокси, идём в &amp;ldquo;C:&lt;br/&gt;Program Files&lt;br/&gt;Cntlm&amp;rdquo;, редактируем &lt;code&gt;cntlm.ini&lt;/code&gt;, указываем логин и домен. При этом не спешим вводить свой пароль открытым текстом, вместо того вызываем &lt;code&gt;cntml.exe&lt;/code&gt; следующим образом:
cntlm.exe -H&lt;/p&gt;
&lt;p&gt;вводим пароль, и копируем один из вариантов хеша в конфиг.&lt;/p&gt;
&lt;p&gt;После всего этого делаем команду:
net start cntml&lt;/p&gt;
&lt;p&gt;и сервис у нас запущен.&lt;/p&gt;
&lt;p&gt;В настройках прокси IE указываем:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;хост&lt;/strong&gt;: localhost&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;порт&lt;/strong&gt;: 3128&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Пробуем зайти на куда нибудь и радуемся жизни. Если на этот момент Google Drive уже поставлен и запущен, он сразу сможет подрубиться и начать свою работу.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPD:&lt;/strong&gt; Под Linux нужно попробовать: 
&lt;a href=&#34;https://aur.archlinux.org/packages/insync/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://aur.archlinux.org/packages/insync/&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>OpenCV Cheat Sheet (C&#43;&#43;)</title>
      <link>https://htrd.su/blog/2013/01/28/opencv_cheat_sheet_c/</link>
      <pubDate>Mon, 28 Jan 2013 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2013/01/28/opencv_cheat_sheet_c/</guid>
      <description>&lt;p&gt;Текщущая версия 2.4: 
&lt;a href=&#34;http://docs.opencv.org/trunk/opencv_cheatsheet.pdf&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://docs.opencv.org/trunk/opencv_cheatsheet.pdf&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Она же на этом ресурсе: 
&lt;a href=&#34;https://htrd.su/img//post/2013/01/28/opencv_cheatsheet.pdf&#34;&gt;opencv_cheatsheet.pdf&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>ArchLinux, systemd, run-level 3, startx, udisks и монтирование</title>
      <link>https://htrd.su/blog/2013/01/23/archlinux_systemd_run-level_3_startx_udisks_i_montirovanie/</link>
      <pubDate>Wed, 23 Jan 2013 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2013/01/23/archlinux_systemd_run-level_3_startx_udisks_i_montirovanie/</guid>
      <description>&lt;p&gt;Столкнулся с ситуацией: после перехода к systemd и его logind внезапно отказались монтироваться
флешки средствами udisks и udisks2. При этом на соседнем компьютере всё нормально. Разница при этом
между ними только одна: на одном иксы запускаются через kdm, на другом - startx. Вот там, где
используется startx монтирование и не работает.&lt;/p&gt;
&lt;p&gt;В ходе разбора наткнулся на эпичный тред, где поттеринг пытается убедить, что нужно апдейтить
startx: 
&lt;a href=&#34;https://bugzilla.redhat.com/show_bug.cgi?id=820675&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://bugzilla.redhat.com/show_bug.cgi?id=820675&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Но оставим этого человека альтернативной ориентации и вернёмся к нашим баранам. А бараны такие:
заставить без костылей или минимум оных монтировать накопители средствами udisks/udisks2 на машине,
где используется startx.&lt;/p&gt;
&lt;p&gt;Для начала выясняем, а в чём собственно соль проблемы. Выясняется, что когда мы запускаем иксы, они
захватывают отдельный терминал и переключают пользователя на него, тем самым мы как бы переключаемся
из сессии, созданной при логине в консоли, и она становится неактивной. Новой сессии для иксов при
этом не создаётся. В результате этого в выводе команды
loginctl show-session $XDG_SESSION_ID&lt;/p&gt;
&lt;p&gt;видим такие строчки:
Active=no&lt;/p&gt;
&lt;p&gt;При этом, изучая конфиги polkit, мы можем увидеть, что мы можем регулировать права доступа для
монтирования для активной сессии, неактивной и для остальных. Отсюда вытекает первый вариант
исправления ошибки (и первый костыльный): править конфиги polkit и разрешать доступы с неактивных
сессий для операций монтирования.&lt;/p&gt;
&lt;p&gt;Проблема метода очевидна: ближайшее обновление и нам нужно мержить, или менять снова. Не гут.&lt;/p&gt;
&lt;p&gt;Второй метод, запустить иксы на том же терминале, на котором мы залогинились. К примеру, мы зашли с
первой консоли, команда &lt;code&gt;tty&lt;/code&gt; выдаёт следующее:
/dev/tty1&lt;/p&gt;
&lt;p&gt;тогда, что бы запустить иксы на этой консоли нам нужно выполнить следующую команду:
startx &amp;ndash; vt1&lt;/p&gt;
&lt;p&gt;И видим, что в выводе loginctl Active стал yes. Viva!&lt;/p&gt;
&lt;p&gt;В таком варианте есть свой плюс: если заблокировать экран, допустим, с помощью xscreensaver, то мы
не сможем переключиться на первую текстовую консоль и, нажав Ctrl-C, убить иксы и получить доступ к
залогиненому аккаунту. Здесь же кроется и минус: подвисшую сессию оперативно не убьёшь, особенно, если
она отказывается реагировать на Ctrl-Alt-BS. Плюс как-то не классически.&lt;/p&gt;
&lt;p&gt;Как последний штрих, добавляем в &lt;code&gt;~/.bashrc&lt;/code&gt; следующее:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;stx&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;vt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;fgconsole&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	startx -- vt&lt;span class=&#34;nv&#34;&gt;$vt&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;startx&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;stx&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;и продолжать пользоваться просто командой startx.&lt;/p&gt;
&lt;p&gt;Здесь же кроется забавный баг: теперь, если случайно нажать startx в окне терминала в запущенных
иксах, поверх них запустится их вторая копия и переключиться между ними не получится ни при каких
обстоятельствах. Так что будьте осторожны и бдительны.&lt;/p&gt;
&lt;p&gt;Как заключение: подобные изменения лишний раз подтверждают правило: работает - не трожь! Особенно
если это касается системообразующих функций, систем загрузки и пр.&lt;/p&gt;
&lt;p&gt;Материалы которые помогли мне разобраться:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://bugzilla.redhat.com/show_bug.cgi?id=820675&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://bugzilla.redhat.com/show_bug.cgi?id=820675&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://bugzilla.redhat.com/show_bug.cgi?id=826459&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://bugzilla.redhat.com/show_bug.cgi?id=826459&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://bugzilla.redhat.com/show_bug.cgi?id=806491&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://bugzilla.redhat.com/show_bug.cgi?id=806491&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://lists.freedesktop.org/archives/systemd-devel/2012-August/006385.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://lists.freedesktop.org/archives/systemd-devel/2012-August/006385.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://gist.github.com/3489325&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://gist.github.com/3489325&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>AsciiDoc и PlantUML</title>
      <link>https://htrd.su/blog/2013/01/23/asciidoc_i_plantuml/</link>
      <pubDate>Wed, 23 Jan 2013 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2013/01/23/asciidoc_i_plantuml/</guid>
      <description>&lt;p&gt;
&lt;a href=&#34;http://www.methods.co.nz/asciidoc/index.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;AsciiDoc&lt;/a&gt; - язык разметки и утилита для генерации, из этой самой разметки, документов самых разных форматов: Unix man pages, HTML, PDF, OpenOffice и т.п. (список поддерживаемых форматов можно расширить модулями). При этом текст разметки напоминает некоторые WiKi (типа той же DokuWiki) и остаётся читабельным даже без компиляции в какой либо выходной формат. Часто используется для приготовления документации к продуктам.&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;http://plantuml.sourceforge.net/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;PlantUML&lt;/a&gt; - тоже язык разметки, и тоже текстовый, для генерации различных UML диаграмм.&lt;/p&gt;
&lt;p&gt;Резонный вопрос: как бы их скрестить. Помогает модульность AsciiDoc, в частности фильтры. В скором времени находим уже готовое решение: 
&lt;a href=&#34;http://code.google.com/p/asciidoc-plantuml/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://code.google.com/p/asciidoc-plantuml/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Устанавливается просто:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;скачиваем файл &lt;code&gt;plantuml.zip&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;натравливаем на него команду:
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;asciidoc --filter install plantuml.zip
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Либо, для пользователей ArchLinux, ипользуем пакет из AUR: 
&lt;a href=&#34;https://aur.archlinux.org/packages/asciidoc-plantuml&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://aur.archlinux.org/packages/asciidoc-plantuml&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;После чего, в тело документа можно вставлять такие блоки:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[plantuml]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;------
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;User -&amp;gt; (Start)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;User --&amp;gt; (Use the application) : Polish label-Zażółć gęślą jaźń
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;:Main Admin: ---&amp;gt; (Use the application) : This is&amp;lt;br/&amp;gt;nyet another&amp;lt;br/&amp;gt;nlabel
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;------
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;И оно заменится картинкой с диаграммой.&lt;/p&gt;
&lt;p&gt;Под катом снимок экрана редактора 
&lt;a href=&#34;https://www.gitorious.org/h4tr3d-utils/asciidoc-gui&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;asciidoc-gui&lt;/a&gt; с предпросмотром диаграммы.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2013/01/23/asciidoc-gui-plantuml.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Простой враппер для встроенных типов в C&#43;&#43;</title>
      <link>https://htrd.su/blog/2013/01/16/prostoj_vrapper_dlja_vstroennyx_tipov_v_c/</link>
      <pubDate>Wed, 16 Jan 2013 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2013/01/16/prostoj_vrapper_dlja_vstroennyx_tipov_v_c/</guid>
      <description>&lt;p&gt;В C/C++ определение переменной не есть её инициализация. Верно для фундаментальных (или встроенных) типов. Для пользовательских типов всегда (если не указано ничего иного) вызывается конструктор по умолчанию, в котором можно принять необходимые меры по инициализации.&lt;/p&gt;
&lt;p&gt;Враппер помогает решать задачи инициализации переменной при её объявлении, а так же при использовании в контейнерах типа &lt;code&gt;std::map&lt;/code&gt; или &lt;code&gt;std::multimap&lt;/code&gt;, когда нужно проверить переменную для ключа, которого ещё нет (при обращении через &lt;code&gt;operator[]&lt;/code&gt; создастся новое значение, для которого вызовется конструктор по умолчанию).&lt;/p&gt;
&lt;p&gt;Код:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * Can be used for built-in types only (like int, char, long and so on)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;template&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;typename&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;T&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;initialValue&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;BuiltInTypeWrapper&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;BuiltInTypeWrapper&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;initialValue&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;BuiltInTypeWrapper&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;T&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;bool&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;isValid&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;value&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;initialValue&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;reset&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;value&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;initialValue&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;operator&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;operator&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;T&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;BuiltInTypeWrapper&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;operator&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;T&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;value&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;T&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Для временных меток в FFMPEG можно использовать так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * Simple wrapper for time stamp values
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;typedef&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BuiltInTypeWrapper&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int64_t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;AV_NOPTS_VALUE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;TsWrapper&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;т.е. при объявлении переменной типа TsWrapper она автоматом станет инициализирована в &lt;code&gt;AV_NOPTS_VALUE&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;А просто для &lt;code&gt;int&lt;/code&gt; так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;typedef&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BuiltInTypeWrapper&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Integer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;При этом при объявлении переменной типа будет она будет инициализирована в 0.&lt;/p&gt;
&lt;p&gt;За счёт определения оператора приведения типа и перегруженному оператору присваивания использование обёрнутого значения мало отличается от необёрнутого:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;typedef&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BuiltInTypeWrapper&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int64_t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;AV_NOPTS_VALUE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;TsWrapper&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;foo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int64_t&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;clog&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;endl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;TsWrapper&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;wrappedValue&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int64_t&lt;/span&gt;   &lt;span class=&#34;n&#34;&gt;value&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;wrappedValue&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;      &lt;span class=&#34;c1&#34;&gt;// 1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;wrappedValue&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// 2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;foo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;wrappedValue&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;          &lt;span class=&#34;c1&#34;&gt;// 3
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;wrappedValue&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;            &lt;span class=&#34;c1&#34;&gt;// 4, аналогично для префиксной формы
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;wrappedValue&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;            &lt;span class=&#34;c1&#34;&gt;// 5, аналогично для префиксной формы
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;wrappedValue&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;         &lt;span class=&#34;c1&#34;&gt;// 6
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;wrappedValue&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;         &lt;span class=&#34;c1&#34;&gt;// 7  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;В общем и целом практически повторяет поведение оригинального типа.&lt;/p&gt;
&lt;p&gt;Кто какие нюансы видит?&lt;/p&gt;
&lt;p&gt;PS тестировалось на gcc 4.7.2&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>MinGW32: как избавиться от зависимостей в виде libgcc_*.dll и libstdc&#43;&#43;-*.dll?</title>
      <link>https://htrd.su/blog/2012/12/17/mingw32_kak_izbavitsja_ot_zavisimostej_v_vide_libgcc_.dll_ilibstdc_-_.dll/</link>
      <pubDate>Mon, 17 Dec 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/12/17/mingw32_kak_izbavitsja_ot_zavisimostej_v_vide_libgcc_.dll_ilibstdc_-_.dll/</guid>
      <description>&lt;p&gt;Почти всегда программа (особенно маленькие и без инсталлятора) для win распространяется в виде законченного бандла со всеми DLL и прочим потребством. Проблема, что программа, скомпилированная примерно так:
i486-mingw32-g++ -o foo.exe foo.cpp&lt;/p&gt;
&lt;p&gt;как минимум требует двух DLL: &lt;code&gt;libgcc_*.dll&lt;/code&gt; и &lt;code&gt;libstdc++-*.dll&lt;/code&gt;, что бы избавится от них можно использовать опции &lt;code&gt;-static-libgcc&lt;/code&gt; и &lt;code&gt;-static-libstdc++&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  i486-mingw32-g++ -static-libgcc -static-libstdc++ -o foo.exe foo.cpp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Boost shared_ptr, bind и thread</title>
      <link>https://htrd.su/blog/2012/12/13/boost_shared_ptr_bind_i_thread/</link>
      <pubDate>Thu, 13 Dec 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/12/13/boost_shared_ptr_bind_i_thread/</guid>
      <description>&lt;p&gt;&lt;strong&gt;Правило:&lt;/strong&gt; при использовании &lt;code&gt;boost::bind&lt;/code&gt; будьте предельно осторожны при передаче аргументов
в виде &lt;code&gt;boost::shared_ptr&lt;/code&gt; (как и других типов умных указателей): по умолчанию используется
семантика копирования, поэтому в полученном функторе будет храниться копия вашего указателя с
увеличенным счётчиком ссылок. Данный факт, вкупе с использованием совместно с &lt;code&gt;boost::thread&lt;/code&gt;,
может стать иточником утечки ресурсов.&lt;/p&gt;
&lt;p&gt;Ниже более детально.&lt;/p&gt;
&lt;p&gt;На днях выстрелил себе в ногу: словил утечку файловых дескрипторов и отказ в обслуживании при
сетевых подключениях. Дальнейшие изыскания показали, что не все объекты корректно уничтожаются, при
перезапуске некоторых подсистем, точнее вообще не уничтожаются, а так и продолжают висеть и занимать
память.&lt;/p&gt;
&lt;p&gt;Ниже код, воспроизводящий данный самострел:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;list&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;boost/smart_ptr.hpp&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;boost/thread.hpp&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;boost/bind.hpp&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;using&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;MyStruct&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;MyStruct&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;clog&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;ctor&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;endl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;~&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MyStruct&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;clog&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;dtor&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;endl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;typedef&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;boost&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shared_ptr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MyStruct&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MyStructPtr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;typedef&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;boost&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;weak_ptr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MyStruct&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;   &lt;span class=&#34;n&#34;&gt;MyStructWPtr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;fooThread&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MyStructPtr&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ptr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;//                                                                 (4)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;n&#34;&gt;MyStructWPtr&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;weak&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ptr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// create weak pointer
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;n&#34;&gt;ptr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;reset&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// release ptr                                        (5)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;k&#34;&gt;while&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;weak&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;expired&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;boost&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;this_thread&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sleep&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;boost&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;posix_time&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;seconds&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;cout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;tick!&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;endl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;clog&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;fooThread exit&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;endl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Foo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;list&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MyStructPtr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ptrList&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;boost&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;thread&lt;/span&gt;     &lt;span class=&#34;kr&#34;&gt;thread&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;start&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;MyStructPtr&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ptr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MyStruct&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;                              &lt;span class=&#34;c1&#34;&gt;// (0)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;        &lt;span class=&#34;n&#34;&gt;ptrList&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;push_back&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ptr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;                                     &lt;span class=&#34;c1&#34;&gt;// (1)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kr&#34;&gt;thread&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;boost&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;thread&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;boost&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bind&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fooThread&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ptr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;        &lt;span class=&#34;c1&#34;&gt;// (2)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;stop&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;ptrList&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;clear&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;                                            &lt;span class=&#34;c1&#34;&gt;// (3)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;join&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kr&#34;&gt;thread&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;join&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;Foo&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;foo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;foo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;start&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;boost&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;this_thread&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sleep&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;boost&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;posix_time&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;seconds&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;foo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stop&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;foo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;join&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Практическая польза данного листинга нулевая. Но если посмотреть на него вниматерльно и подумать:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Сначала мы создаём объект типа &lt;code&gt;Foo&lt;/code&gt; затем вызываем метод &lt;code&gt;start()&lt;/code&gt; в котором создаём умный указатель &lt;code&gt;ptr&lt;/code&gt; (точка (0)), здесь у нас счётчик ссылок равен 1. Затем мы добавляем его в список &lt;code&gt;ptrList&lt;/code&gt; (точка (1)), здесь счётчик ссылок у нас увеличивается на 1 и    становится равным 2, понятно почему так происходит - в списке сохраняется копия объета    (используется копирующий конструктор &lt;code&gt;shared_ptr&lt;/code&gt;). В точке (2) создаётся нить, которой, в    качестве параметра передаётся (при помощи &lt;code&gt;bind&lt;/code&gt;) наш умный указатель, логично думаем, раз    в функцию потока передаём его по значению, то ещё один раз задействуется копирующий конструктор    &lt;code&gt;shared_ptr&lt;/code&gt; и счётчик ссылок становится равным 3 в точке (4). В точке (5) говорим, что мы    прекратили работать с этой копией указателя, тем самым счётчик ссылок уменьшился на 1 и стал    равен 2 (пренебрегаем тем, что код может выполняться одновременно на многопроцессорных    системах, а так же тем, что последовательность выполнения разных потоков зависит от планировщика    операционной системы). Возвращаемся обратно в &lt;code&gt;start()&lt;/code&gt;, которая подошла к концу, выходим из    неё при этом вызывается деструктор у локальной копии &lt;code&gt;ptr&lt;/code&gt;, снова уменьшается счётчик ссылок,     теперь он 1, как и предполагалось (остался только сохранённый экземляр в листе). Всё отлично,     всё как запланировано. Запущенный поток при этом работает до тех пор, пока умный указатель     остаётся валидным.&lt;/li&gt;
&lt;li&gt;Спим 5 секунд, тем временем на экран будет печататься &amp;rsquo;tick!&amp;rsquo; через каждую секунду. Максимум будет    выведено 4-5 такие надписи.&lt;/li&gt;
&lt;li&gt;Вызываем метод &lt;code&gt;stop()&lt;/code&gt;, где очищаем список, тем самым у нашего экземпляра умного указателя    счётчик ссылок уменьшается до 0 и память освобождается. Поток ловит тот факт, что умный указатель    больше не валиден и завершает свою работу.&lt;/li&gt;
&lt;li&gt;Делаем &lt;code&gt;join()&lt;/code&gt; у потока, но т.к. он уже завершился (если нет, то сделает это крайне скоро)&lt;/li&gt;
&lt;li&gt;Программа завершается&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Так мы думаем она работает. Компилируем, запускаем и&amp;hellip; на экран медленно и печально выводится &amp;ldquo;tick!&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Где же мы ошиблись? Если посмотреть с отладчиком на момент очистки списка у нас счётчик ссылок равен
2 а не 1, как предполагалось.&lt;/p&gt;
&lt;p&gt;Всё становится ясно, когда начинаем изучать работу bind. По дизайну, bind создаёт копии всех
аргументов, которые передаются ему и сохраняет их в возвращаемом функторе. Если какой-то из аргументов
является &lt;code&gt;shared_ptr&lt;/code&gt; то мы получаем увеличение счётчика ссылок, которое мы не предусмотрели в
размышлениях выше. Функциональный объект передаётся как аргумент в конструктор &lt;code&gt;boost::thread&lt;/code&gt; и&amp;hellip;
дальше не смотрел, что с ним происходит: просто так он не сохраняется, т.к. в случае если делается
&lt;code&gt;detach()&lt;/code&gt; и разрушении объекта &lt;code&gt;thread&lt;/code&gt; счётчик так же не уменьшается. Но, в общем, это и не
важно.&lt;/p&gt;
&lt;p&gt;Что бы &lt;code&gt;boost::bind&lt;/code&gt; не работал с копиями объектов, а со ссылками, можно воспользоваться
&lt;code&gt;boost::ref()&lt;/code&gt; или &lt;code&gt;boost::cref()&lt;/code&gt;, но передавать потоку значение по ссылке, особенно, если это
локальный объект, который уничтожится по выходу из области видимости - чревато. Поэтому, в нашем
случае, самый простой вариант, передавать в поток не сильный, а слабый указатель, &lt;code&gt;weak_ptr&lt;/code&gt;, а
уже внутри функции потока, если нужен сильный указатель, попытаться захватить его и использовать.&lt;/p&gt;
&lt;p&gt;На основе вышесказанного, исправленная версия кода выше (привожу только ту часть, что поменялась):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;fooThread&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MyStructWPtr&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;weak&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// Если нужно, захватываем указатель:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;n&#34;&gt;MyStructPtr&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ptr&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;weak&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lock&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// используем
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;p&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// Освобождаем
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;n&#34;&gt;ptr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;reset&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;while&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;weak&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;expired&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;boost&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;this_thread&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sleep&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;boost&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;posix_time&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;seconds&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;cout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;tick!&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;endl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;clog&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;fooThread exit&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;endl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// создание потока
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;        &lt;span class=&#34;kr&#34;&gt;thread&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;boost&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;thread&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;boost&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bind&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fooThread&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MyStructWPtr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ptr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Подготовка фотографии для перевода на фольгу</title>
      <link>https://htrd.su/blog/2012/12/13/podgotovka_fotografii_dlja_perevoda_na_folgu/</link>
      <pubDate>Thu, 13 Dec 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/12/13/podgotovka_fotografii_dlja_perevoda_na_folgu/</guid>
      <description>&lt;p&gt;Название страшное. На самом деле просто приведу, на заметку, команды которыми можно подготовить фотографию, что бы она была выполнена в монохромной палитре (1bpp - один бит на пиксель). Это удобно для реализации идеи приведённой в статье на хабре: 
&lt;a href=&#34;http://habrahabr.ru/post/157465/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://habrahabr.ru/post/157465/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Просто вариант с &amp;ldquo;газетным подходом&amp;rdquo; мне не совсем понравился, решил попробовать другое.&lt;/p&gt;
&lt;p&gt;Итак, понадобится только 
&lt;a href=&#34;http://www.imagemagick.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;ImageMagick&lt;/a&gt; или 
&lt;a href=&#34;http://www.graphicsmagick.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;GraphicsMagick&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Приведу для начала исходное изображение:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2012/12/13/avatar.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Первый вариант издевательства:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;convert  avatar.jpg -colorspace gray -auto-level -threshold 10% out1.png
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;или&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gm convert  avatar.jpg -colorspace gray -auto-level -threshold 10% out1.png
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Играемся с порогом, выискиваем наиболее подходящий вариант. В итоге получается&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2012/12/13/out1.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Деталей мало, но на некоторых фото получаются хорошие результаты, так что попробовать можно. Из плюсов: обилие крупных деталей, как следствие легко реализовать перевод на медь методом ЛУТ. Можно добавить параметр &lt;code&gt;-level&lt;/code&gt; и поиграться с ним, высветляя или затемняя изображение. Например так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;convert avatar.jpg -level 20,30% -colorspace gray -threshold 35% out3.png
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;И результат:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2012/12/13/out3.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Второй вариант издевательства:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;convert avatar.jpg -level 0,40% -colorspace gray -type bilevel  out2.png
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;или&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gm  convert avatar.jpg -level 0,40% -colorspace gray -type bilevel  out2.png
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Получается что-то вроде:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2012/12/13/out2.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Да, на самом деле в этом изображении всего два цвета: чёрный и белый. Но очень много мелких элементов, так что при переводе возможны потери. Больше подходит для фоторезиста.&lt;/p&gt;
&lt;p&gt;Если у кого ещё есть варианты перевода изображений: предлагаем в комментариях.&lt;/p&gt;
&lt;p&gt;Ссылки по теме:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.imagemagick.org/Usage/color_mods/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.imagemagick.org/Usage/color_mods/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://habrahabr.ru/post/157465/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://habrahabr.ru/post/157465/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Немного тюнинга Firefox</title>
      <link>https://htrd.su/blog/2012/12/10/nemnogo_tjuninga_firefox/</link>
      <pubDate>Mon, 10 Dec 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/12/10/nemnogo_tjuninga_firefox/</guid>
      <description>&lt;p&gt;В основном в части вкладок (в народе - &amp;ldquo;табов&amp;rdquo;).&lt;/p&gt;
&lt;p&gt;Задачи две:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Сделать так, что бы не отображался скролинг вкладок, а сами вкладки уменьшались до минимума аля Opera&lt;/li&gt;
&lt;li&gt;Уменьшить их высоту&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Поиск дал ссылки на следующие материалы:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.howtogeek.com/howto/internet/firefox/quick-tip-disable-firefox-tab-scrolling&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Quick Tip: Disable Firefox Tab Scrolling&lt;/a&gt; - расказывает как при помощи &lt;code&gt;about:config&lt;/code&gt; добиться эффекта отсутствия скрола для множества табов, там же даётся ссылка на расширение Tab Mix Plus, при помощи которого можно сделать это же, а так же много другое (к примеру, назначить различные стили для незагруженных страниц, или страниц, содержимое которых изменилось со времени последнего просмотра). От себя замечу: лучше поставить опцию &lt;strong&gt;browser.tabs.tabMinWidth&lt;/strong&gt; в &lt;strong&gt;0&lt;/strong&gt;, т.к. через дополнение не получается поставить значение меньше 16. Опции может и не быть в списке, тогда нужно её создать, тип указывать: &lt;strong&gt;integer&lt;/strong&gt;. В некоторых источниках это же рекомендуют сделать с параметром &lt;strong&gt;browser.tabs.tabClipWidth&lt;/strong&gt;. В некоторых версиях FireFox и это не поможет, тогда следует попробовать такой CSS-код в вашем &lt;code&gt;userChrome.css&lt;/code&gt; (источник на Reddit: 
&lt;a href=&#34;https://www.reddit.com/r/firefox/comments/6oy6md/how_to_shrink_tab_width/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;How to shrink tab width?&lt;/a&gt;):&lt;code&gt;css .tabbrowser-tab[fadein]:not([pinned]) { min-width: 0px !important; max-width: 250px !important; } &lt;/code&gt;К сожалению, полностью от скролинга это не позволяет избавится.&lt;br/&gt;&lt;br/&gt; &lt;strong&gt;UPD:&lt;/strong&gt; другой источник предлагает более элегантное решение: 
&lt;a href=&#34;https://www.reddit.com/r/FirefoxCSS/comments/70cvby/fully_disable_tab_overflow/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://www.reddit.com/r/FirefoxCSS/comments/70cvby/fully_disable_tab_overflow/&lt;/a&gt;. Я его немного адаптировал, что бы исключить прилепленный вкладки:```css
.tabbrowser-tab:not([pinned]) {
min-width: initial !important;
}
.tab-content {
overflow: hidden !important;
}&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  * В Firefox Quantum появилась возможность в Menu -&amp;gt; Customize... в нижней строчке в меню Density выбрать вариант Сompact, который решает проблему. Если интересно решение с CSS - смотрите историю этой страницы.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  * [Creating more screen space in Firefox](http://wiki.eeeuser.com/howto:shrinkfirefox) - статья на eeeuser.org которая описывает, как получить больше полезного пространства в Firefox на устройствах с небольшим размером экрана (типа Asus EeePC).
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  * [r/FirefoxCSS](https://www.reddit.com/r/FirefoxCSS/) - много трюков с `userChrome.css`
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;И на последок, мой `userChrome.css`:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;```css
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;@namespace url(&amp;#34;http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul&amp;#34;);
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; * Setup minimal Tab width
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; * Ref: https://www.reddit.com/r/FirefoxCSS/comments/70cvby/fully_disable_tab_overflow/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; */
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.tabbrowser-tab:not([pinned]) {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    min-width: initial !important;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.tab-content {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    overflow: hidden !important;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Охранные классы в boost::thread</title>
      <link>https://htrd.su/blog/2012/12/10/oxrannye_klassy_v_boost_thread/</link>
      <pubDate>Mon, 10 Dec 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/12/10/oxrannye_klassy_v_boost_thread/</guid>
      <description>&lt;p&gt;Для начала, охранные классы, это не что иное как различные &lt;code&gt;*_lock&lt;/code&gt; классы, реализующие идиому
RAII, захватывающие мутекс в конструкторе (&lt;code&gt;lock()&lt;/code&gt;) и освобождающие его в деструкторе (&lt;code&gt;unlock()&lt;/code&gt;) -
паттерн &amp;ldquo;блокировка в области видимости&amp;rdquo;. Не смог придумать более корректного перевода.&lt;/p&gt;
&lt;p&gt;Охранных классов в Boost много, легко можно в них запутаться. Но знать про них необходимо, так как почти вся библиотека
boost::thread спроектирована с ориентацией на их использование.&lt;/p&gt;
&lt;h2 id=&#34;boostlock_guard&#34;&gt;boost::lock_guard&lt;/h2&gt;
&lt;p&gt;Самый простой охранный класc. Не предоставляет никакой дополнительной функциональности кроме захвата мутекса в конструкторе
и освобождение в деструкторе. Используется для защиты данных в пределах какой-то области видимости:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Foo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;increment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;boost&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lock_guard&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;boost&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mutex&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;lock&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mutex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;decrement&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;boost&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lock_guard&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;boost&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mutex&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;lock&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mutex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;boost&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lock_guard&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;boost&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mutex&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;lock&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mutex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;private&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;boost&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mutex&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mutex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;          &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;boostunique_lock&#34;&gt;boost::unique_lock&lt;/h2&gt;
&lt;p&gt;Более навороченный класс-защитник. Помимо захвата и освобождения мутекса предоставляет доступ почти ко всем его методам:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;lock()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;try_lock()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;timed_lock()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;unlock()&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Кроме того предоставляет различные варианты конструирования.&lt;/p&gt;
&lt;p&gt;Благодаря своей возможности освобождать и снова захватывать мутекс в процессе своей жизни может использоваться совместно с
&lt;code&gt;boost::conditional_variable&lt;/code&gt; и &lt;code&gt;boost::conditional_variable_any&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Самый простой пример использования аналогичен &lt;code&gt;boost::lock_guard&lt;/code&gt;, но более интерес вариант использования с условными переменными:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Foo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;push&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;boost&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lock_guard&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;boost&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mutex&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;lock&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mutex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// Защитим данные
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;        &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;                                &lt;span class=&#34;c1&#34;&gt;// запишем данные
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;        &lt;span class=&#34;n&#34;&gt;cond&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;notify_all&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;                           &lt;span class=&#34;c1&#34;&gt;// уведомим, что есть новые данные
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;pop&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;boost&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;unique_lock&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;boost&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mutex&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;lock&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mutex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// Защитим данные
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;        &lt;span class=&#34;n&#34;&gt;cond&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;wait&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lock&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;                              &lt;span class=&#34;c1&#34;&gt;// ждём новые данные, при этом мутекс разблокируется, по выходу
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;                                                      &lt;span class=&#34;c1&#34;&gt;// он будет снова заблакирован
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;private&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;boost&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mutex&lt;/span&gt;                &lt;span class=&#34;n&#34;&gt;mutex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;boost&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;conditional_variable&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cond&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;                         &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Хоть к теме данной заметки это не относится, но обращу внимание, что &lt;code&gt;cond.wait()&lt;/code&gt; может быть прерван до вызова &lt;code&gt;notify_all()&lt;/code&gt; или
&lt;code&gt;notify_one()&lt;/code&gt;, поэтому в реальном коде нужно применять какие-то дополнительные меры проверки, обычно используется такую конструкцию:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;boost&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;scoped_lock&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;boost&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mutex&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;lock&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mutex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;while&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;isNewDataAvail&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;cond&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;wait&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lock&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;boostmutexscoped_lock&#34;&gt;boost::mutex::scoped_lock&lt;/h2&gt;
&lt;p&gt;Да, это не опечатка, &lt;code&gt;boost::mutex::scoped_lock&lt;/code&gt; является всего лишь объявлением типа, вида:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;typedef&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;boost&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;unique_lock&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;boost&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mutex&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;scoped_lock&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;внутри класса &lt;code&gt;boost::mutex&lt;/code&gt; и предоставляет более короткий вариант объявления:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;boost&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mutex&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;scoped_lock&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;lock&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mutex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Хотя это и спорно.&lt;/p&gt;
&lt;h2 id=&#34;boostshared_lock&#34;&gt;boost::shared_lock&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;shared_lock&lt;/code&gt; похож на &lt;code&gt;boost::unique_lock&lt;/code&gt; за тем малым исключением что работает с &lt;code&gt;boost::shared_mutex&lt;/code&gt;, то есть тем типом мутекса, который
реализует подход &amp;ldquo;много читателей/один писатель&amp;rdquo; и используется в той части где происходит чтение. Таким образом, &lt;code&gt;shared_lock&lt;/code&gt; вызывает методы &lt;code&gt;lock_shared()&lt;/code&gt; и &lt;code&gt;unlock_shared()&lt;/code&gt; у переданного ему мутекса вместо &lt;code&gt;lock()&lt;/code&gt; и &lt;code&gt;unlock()&lt;/code&gt; и не будет заблокирован до тех пор, пока где-то
не будет вызван &lt;code&gt;lock()&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;К слову сказать, &lt;code&gt;boost::unique_lock&lt;/code&gt; так же работает с &lt;code&gt;boost::shared_mutex&lt;/code&gt;, но используется со стороны писателя (аналогично может быть использован и &lt;code&gt;boost::lock_guard&lt;/code&gt;).&lt;/p&gt;
&lt;h2 id=&#34;boostupgrade_lock&#34;&gt;boost::upgrade_lock&lt;/h2&gt;
&lt;p&gt;Аналогичен &lt;code&gt;boost::shared_lock&lt;/code&gt;, используется совместно с &lt;code&gt;boost::upgrade_mutex&lt;/code&gt; (на pthread-системах это синоним для &lt;code&gt;boost::shared_mutex&lt;/code&gt;) используется в системах в которых реализуется подход &amp;ldquo;много читателей/один писатель&amp;rdquo; в случае, когда нужно превратиться из читателя в писателя (проапгрейдится)&lt;/p&gt;
&lt;h2 id=&#34;boostupgrade_to_unique_lock&#34;&gt;boost::upgrade_to_unique_lock&lt;/h2&gt;
&lt;p&gt;Используется совместно с &lt;code&gt;boost::upgrade_lock&lt;/code&gt; для временного повышения своих прав владения до эксклюзивных, тем становясь в схеме &amp;ldquo;много читателей/один писатель&amp;rdquo; из читателя писателем.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;foo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;boost&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;upgrade_lock&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;boost&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shared_mutex&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;lock&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mutex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// что-то делаем
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;p&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;cm&#34;&gt;/* какое-то условие */&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// становимся писателем
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;        &lt;span class=&#34;n&#34;&gt;boost&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;upgrade_to_unique_lock&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;boost&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shared_mutex&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;newLock&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lock&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// пишем
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;        &lt;span class=&#34;p&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// а здесь мы снова читатели
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;p&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;мутекс-специфичный-scoped_try_lock&#34;&gt;Мутекс-специфичный scoped_try_lock&lt;/h2&gt;
&lt;p&gt;Объявляется как typedef внутри класса мутекса, в частности: &lt;code&gt;boost::mutex::scoped_try_lock&lt;/code&gt;. Всё отличие от &lt;code&gt;boost::unique_lock&amp;lt;MutexType&amp;gt;&lt;/code&gt; заключается в том, что в конструкторе вызывается &lt;code&gt;try_lock&lt;/code&gt; вместо &lt;code&gt;lock&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;немного-итогов&#34;&gt;Немного итогов&lt;/h2&gt;
&lt;p&gt;Несомненно, самым часто используем охранным классом является &lt;code&gt;boost::lock_guard&lt;/code&gt;, так как реализует необходимый минимум функционала при минимуме
накладных расходов. Затем идёт &lt;code&gt;boost::unique_lock&lt;/code&gt; или его синоним для &lt;code&gt;boost::mutex&lt;/code&gt; - &lt;code&gt;boost::mutex::scoped_lock&lt;/code&gt;. Остальные классы применяются гораздо реже.&lt;/p&gt;
&lt;p&gt;Разуется тут не отражено всего, что может быть в текущей версии библиотеки, поэтому рекомендую смотреть полную информацию по следующей ссылке:&lt;br/&gt;&lt;br/&gt;

&lt;a href=&#34;http://www.boost.org/doc/libs/1_52_0/doc/html/thread/synchronization.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.boost.org/doc/libs/1_52_0/doc/html/thread/synchronization.html&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;
подставляя вместо номера версии нужную вам.&lt;/p&gt;
&lt;p&gt;Там узнаете о различных подходах к созданию функционала блокировок, а так же вариантах их реализации в виде конкретных классов мутексов (&lt;code&gt;boost::mutex&lt;/code&gt;, &lt;code&gt;boost::shared_mutex&lt;/code&gt;) и охранных классов. Кроме того, узнаете о условных переменных, функциях вызываемых единожды, реализации барьера.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>FFMPEG: немного про time-base и PTS</title>
      <link>https://htrd.su/blog/2012/11/23/ffmpeg_nemnogo_pro_time-base/</link>
      <pubDate>Fri, 23 Nov 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/11/23/ffmpeg_nemnogo_pro_time-base/</guid>
      <description>&lt;p&gt;В терминах FFMPEG time-base, это параметр, используя который можно перевести PTS (Presentation Timestamp) закодированного пакета (&lt;code&gt;AVPacke&lt;/code&gt;t) или раскодированного фрейма (&lt;code&gt;AVFrame&lt;/code&gt;) в реальное время, выраженное в секундах (это же верно для DTS закодированного пакета). Представляет собой рациональное число типа &lt;code&gt;AVRational&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;А вот теперь интересности, связанные с ним.&lt;/p&gt;
&lt;h2 id=&#34;общие-сведения&#34;&gt;Общие сведения&lt;/h2&gt;
&lt;p&gt;Внутри библиотек libavformat и libavcodec, входящих в состав FFMPEG time-base может храниться в двух контекстах:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;контекст потока (&lt;code&gt;AVStream&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;и контекст кодека (&lt;code&gt;AVCodecContext&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;При этом временные метки (далее я буду говорить только про PTS, если потребуется сказать про DTS - отдельно обращу внимание) могут храниться у &lt;code&gt;AVFrame&lt;/code&gt; (поле &lt;code&gt;pts&lt;/code&gt;) и &lt;code&gt;AVPacket&lt;/code&gt; (аналогично, поле &lt;code&gt;pts&lt;/code&gt;) тип всех временных меток (включая поле &lt;code&gt;dts&lt;/code&gt; у &lt;code&gt;AVPacket&lt;/code&gt;) - &lt;code&gt;int64_t&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Отсюда возникает резонный вопрос: как соотносить time-base и временные метки.&lt;/p&gt;
&lt;p&gt;Короткий ответ:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;time-base &lt;code&gt;AVStream&lt;/code&gt; является основной для временных меток &lt;code&gt;AVPacket&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;time-base &lt;code&gt;AVCodecContext&lt;/code&gt; является основой для временных меток &lt;code&gt;AVFrame&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Далее рассмотрим, когда и как мы должны устанавливать руками, а что и когда установится само.&lt;/p&gt;
&lt;h2 id=&#34;чтение-и-раскодирования-файла&#34;&gt;Чтение и раскодирования файла&lt;/h2&gt;
&lt;p&gt;После того как создан и открыт &lt;code&gt;AVFormatContext&lt;/code&gt;, прочитана информация о потоках картина получается такой:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;поле &lt;code&gt;time_base&lt;/code&gt; каждого потока (&lt;code&gt;AVStream&lt;/code&gt;) заполнено самой библиотекой, изменять вручную его крайне не желательно, даже не могу представить, какие последствия может принести данная операция.&lt;/li&gt;
&lt;li&gt;поле &lt;code&gt;time_base&lt;/code&gt; созданных декодеров для каждого типа потока (&lt;code&gt;AVCodecContext&lt;/code&gt;) так же заполняется библиотекой и изменять его не желательно&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Логично было бы предположить, что временные метки для потока и его декодировщика должны быть одинаковы, но это не так. Как следствие временные метки пакета и раскодированного фрейма нельзя сравнивать напрямую. И если вы хотите установить, после раскодировки, PTS фрейма, это нужно делать при помощи функции &lt;code&gt;av_rescale_q(...)&lt;/code&gt;, примерно так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;frame&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pts&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;av_rescale_q&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;packet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pts&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;packetTimeBase&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;frameTimeBase&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ясно, что &lt;code&gt;frameTimeBase&lt;/code&gt; берётся из &lt;code&gt;AVCodecContext&lt;/code&gt;, а &lt;code&gt;packetTimeBase&lt;/code&gt; из &lt;code&gt;AVStream&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Стоит отметить так же то, что у некоторых пакетов поле &lt;code&gt;pts&lt;/code&gt; имеет значение &lt;code&gt;AV_NOPTS_VALUE&lt;/code&gt;, тогда как поле &lt;code&gt;dts&lt;/code&gt; имеет корректное значение, тогда его и стоит брать для присваивания значению PTS фрейма. Суть такого поведения для меня не ясна.&lt;/p&gt;
&lt;p&gt;Так же стоит отметить для для звуковых семплов, после раскодировки значение PTS фрейма будет AV_NOPTS_VALUE и НИ В КОЕМ СЛУЧАЕ НЕ МЕНЯЙТЕ ЕГО НА ЧТО-ТО ЛИБО ДРУГОЕ, это приведёт в смятение микшер, как следствие, звука в результирующем файле вы не услышите. И снова, суть такого поведения для меня не ясна.&lt;/p&gt;
&lt;h2 id=&#34;кодировка-и-запись-микширование-потоков&#34;&gt;Кодировка и запись (микширование потоков)&lt;/h2&gt;
&lt;p&gt;При кодировании и микшировании мы сами добавляем потоки в выходной формат. При этом time-base мы должны задавать только для кодировщика (&lt;code&gt;AVCodecContext&lt;/code&gt;) и делать это &lt;strong&gt;обязательно&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Поле time-base у потока (&lt;code&gt;AVStream&lt;/code&gt;) можно устанавливать, а можно и нет, всё равно, после вызова &lt;code&gt;avformat_write_header(...)&lt;/code&gt; оно будет сброшено и установлено в необходимое значение подходящее для данного типа контейнера. При этом, значение time-base из &lt;code&gt;AVCodecContext&lt;/code&gt; будет использоваться как подсказка, если контейнер не определяет требований к значению time-base.&lt;/p&gt;
&lt;p&gt;Соответственно, важно: даже при записи вы не можете гарантировать, что значения time-base в &lt;code&gt;AVStream&lt;/code&gt; и в &lt;code&gt;AVCodecContext&lt;/code&gt; будут эквивалентны. Кроме того, вы не можете опираться на значение time-base внутри &lt;code&gt;AVStream&lt;/code&gt; пока не будет вызвана &lt;code&gt;avformat__write_header(...)&lt;/code&gt;. Как следствие, при копировании временной метки из фрейма в пакет нужно использовать &lt;code&gt;av_rescale_q(...)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Особо хочу отметить, что если вы делаете масштабирование поля &lt;code&gt;pts&lt;/code&gt; пакета, не забудьте сделать то же для поля &lt;code&gt;dts&lt;/code&gt;, иначе получите интересные артефакты при воспроизведении.&lt;/p&gt;
&lt;p&gt;Для аудио-фреймов и аудио пакетов поля &lt;code&gt;pts&lt;/code&gt; и &lt;code&gt;dts&lt;/code&gt; всегда будут &lt;code&gt;AV_NOPTS_VALUE&lt;/code&gt; и никаких преобразований делать не нужно.&lt;/p&gt;
&lt;h2 id=&#34;случай-транскодирования&#34;&gt;Случай транскодирования&lt;/h2&gt;
&lt;p&gt;Пусть мы имеем входной файл формата Format1 с одним видео потоком Stream1, закодированный кодеком Codec1, нам нужно его перекодировать в файл формата Format2, так же с одним видео потоком Stream2, закодированным кодеком Codec2.&lt;/p&gt;
&lt;p&gt;Что получается:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;после открытия входного файла Stream1 имеет time-base InStreamTimeBase, а Coder1 имеет time-base InCoderTimeBase.&lt;/li&gt;
&lt;li&gt;после настройки выходного формата, и записи заголовка мы имеем: Stream2 с OutStreamTimeBase и Codec2 с OutCoderTimeBase.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;av_read_fream()&lt;/code&gt; возвращает пакеты с pts/dts в масштабе InStreamTimeBase.&lt;/li&gt;
&lt;li&gt;после декодирования видео-фрагментов, мы получаем фрейм с pts в масштабе InCoderTimeBase&lt;/li&gt;
&lt;li&gt;если возникает необходимость копировать pts/dts пакеты в pts фрейма необходимо сделать масштабирование: frame.pts = av_rescale_q(packet.pts/dts, InStreamTimeBase, InCoderTimeBase);&lt;/li&gt;
&lt;li&gt;перед кодировкой фрейма при помощи Coder1 нужно смаштабировать его pts: frame.pts = av_rescale_q(frame.pts, InCoderTimeBase, OutCoderTimeBase);&lt;/li&gt;
&lt;li&gt;перед записью получившегося пакета, нужно смаштабировать его pts/dts: packet.pts/dts = av_rescale_q(packet.pts/dts, OutCoderTimeBase, OutStreamTimeBase);&lt;/li&gt;
&lt;li&gt;записать пакет.&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Масштабирования нужно делать только если значение временной метки не равно AV_NOPTS_VALUE.&lt;/p&gt;
&lt;p&gt;За сим всё.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Последняя прошивка для книжки Digma e600</title>
      <link>https://htrd.su/blog/2012/11/20/poslednjaja_proshivka_dlja_knizhki_digma_e600/</link>
      <pubDate>Tue, 20 Nov 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/11/20/poslednjaja_proshivka_dlja_knizhki_digma_e600/</guid>
      <description>&lt;p&gt;Валидных ссылок всё меньше и меньше, поэтому сохранил у себя:&lt;br/&gt;&lt;br/&gt;

&lt;a href=&#34;http://htrd.su/~hatred/digma/e600_fw27_05_2011.zip&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://htrd.su/~hatred/digma/e600_fw27_05_2011.zip&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Прошивка не официальная.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>CMakeProjectManager2 - последние изменения</title>
      <link>https://htrd.su/blog/2012/10/17/cmakeprojectmanager2_-_poslednie_izmenenija/</link>
      <pubDate>Wed, 17 Oct 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/10/17/cmakeprojectmanager2_-_poslednie_izmenenija/</guid>
      <description>&lt;p&gt;Как я уже 
&lt;a href=&#34;https://htrd.su/blog/2011/03/24/2011-03-24_14.49_qt_creator_i_cmake_-_prodolzhenie/&#34;&gt;писал&lt;/a&gt;, вяло пилю модифицированную версию плагина CMakeProjectManager для Qt Creator&amp;rsquo;а. Там же указаны причины, вынудившие меня на это. Но разговор, не про это, а про то, что с момента прошлого поста было сделано.&lt;/p&gt;
&lt;p&gt;Итак:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Для каждого профиля сборки сохраняются введённые параметры для CMake, так что, выбрав в следующий раз &amp;ldquo;Run CMake&amp;rdquo; не нужно вспоминать, с какими параметрами вы его запускали и легче управлять профилями сборки. Вкупе с последней фичей из апстрима: сохранения глобальной истории параметров для CMake, получается достаточно мощный механизм.&lt;/li&gt;
&lt;li&gt;Используя вышеприведённую информацию, появилась возможность при модификации дерева исходников (добавление, удаление, переименование) в фоновом режиме запускать обновление CBP файла и дерева сборки, что особо актуально при использовании глоббинга.&lt;/li&gt;
&lt;li&gt;По сравнению с первым вариантом, получилось значительно сократить расходование памяти при использовании плагина, особенно когда в дереве проекта много вспомогательных модулей, временного C/C++ кода.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Кодовая база периодически синхронизируется с GIT версией Qt Creator. Если кто-то будет делать клоны для стабильных релизов, просьба отписываться с информацией об оных.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;HINT:&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;
Так как, при добавлении, удалении или переименовывании файла, не осуществляется модификация CMakeLists.txt, то нужно вносить изменения самому, либо использовать globbing:```cmake# UTILS
file(GLOB_RECURSE UTIL_SOURCES &amp;ldquo;../util/&lt;em&gt;.cpp&amp;rdquo;)
file(GLOB_RECURSE UTIL_HEADERS &amp;ldquo;../util/&lt;/em&gt;.h&amp;rdquo; &amp;ldquo;../util/*.hpp&amp;rdquo;)&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Паттерн Iterator</title>
      <link>https://htrd.su/blog/2012/10/08/pattern_iterator/</link>
      <pubDate>Mon, 08 Oct 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/10/08/pattern_iterator/</guid>
      <description>&lt;p&gt;Полезно, когда нужно перебирать последовательно какие-то данные, мне, в частности, потребовалось для
перебора кодеков и форматов во C++ враппере для FFMPEG, а так же получения набора параметров и
именованных констант, которые они могут принимать.&lt;/p&gt;
&lt;p&gt;Основные идеи данного паттерна изложены по этой ссылке:

&lt;a href=&#34;http://sourcemaking.com/design_patterns/iterator&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://sourcemaking.com/design_patterns/iterator&lt;/a&gt;, а возможные реализации на C++ здесь:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;С применением методов для перемещения итератора, разыменования оного: 
&lt;a href=&#34;http://sourcemaking.com/design_patterns/iterator/cpp/1&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://sourcemaking.com/design_patterns/iterator/cpp/1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;С использованием операторов для перемещения итератора, разыменования оного: 
&lt;a href=&#34;http://sourcemaking.com/design_patterns/iterator/cpp/2&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://sourcemaking.com/design_patterns/iterator/cpp/2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Сведения эти - общетеоретические. Более практическое описание с разделением итераторов на типы
приведено на cplusplus.com: 
&lt;a href=&#34;http://www.cplusplus.com/reference/std/iterator/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.cplusplus.com/reference/std/iterator/&lt;/a&gt;, в частности вводятся
понятие следующих типов итераторов (а так же наглядная таблица, по которой можно понять какие методы
и операторы должны определяться в классе-итераторе):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Input - перемещается только вперёд, доступно только чтение значения (пример: поток stdin): 
&lt;a href=&#34;http://www.cplusplus.com/reference/std/iterator/InputIterator/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.cplusplus.com/reference/std/iterator/InputIterator/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Output - перемещение только вперёд, доступна только запись значений (пример: поток stdout): 
&lt;a href=&#34;http://www.cplusplus.com/reference/std/iterator/OutputIterator/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.cplusplus.com/reference/std/iterator/OutputIterator/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Forward - объёдиняет свойства Input и Output итераторов: 
&lt;a href=&#34;http://www.cplusplus.com/reference/std/iterator/ForwardIterator/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.cplusplus.com/reference/std/iterator/ForwardIterator/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Bidirectional - расширяет Forward итератор для перемещения назад: 
&lt;a href=&#34;http://www.cplusplus.com/reference/std/iterator/BidirectionalIterator/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.cplusplus.com/reference/std/iterator/BidirectionalIterator/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Random Access - итератор с возможностью свободного перемещения назад/вперёд на произвольное количество позиций (пример: простой массив): 
&lt;a href=&#34;http://www.cplusplus.com/reference/std/iterator/RandomAccessIterator/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.cplusplus.com/reference/std/iterator/RandomAccessIterator/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;А что бы несколько привести итераторы к одному виду, существует класс в стандартной библиотеке,
называется &lt;del&gt;std::iterator&lt;/del&gt;, почитать можно здесь:

&lt;a href=&#34;http://www.cplusplus.com/reference/std/iterator/iterator/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.cplusplus.com/reference/std/iterator/iterator/&lt;/a&gt;, там же приведён простой пример итератора.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Emacs configs</title>
      <link>https://htrd.su/blog/2012/10/04/emacs_configs/</link>
      <pubDate>Thu, 04 Oct 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/10/04/emacs_configs/</guid>
      <description>&lt;p&gt;В след за 
&lt;a href=&#34;https://htrd.su/blog/2012/09/10/luakit_configs/&#34;&gt;&lt;/a&gt; выкладываю свои конфиги для Emacs: 
&lt;a href=&#34;https://gitlab.com/hatred-configs/emacs%28%28&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://gitlab.com/hatred-configs/emacs((&lt;/a&gt;Репозитории для клонирования: 
&lt;a href=&#34;https://gitlab.com/hatred-configs/emacs.git&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://gitlab.com/hatred-configs/emacs.git&lt;/a&gt;, 
&lt;a href=&#34;mailto:git@gitlab.com&#34;&gt;git@gitlab.com&lt;/a&gt;:hatred-configs/emacs.git))&lt;/p&gt;
&lt;p&gt;На данный момент они не совсем самодостаточны: нужно некоторые пакеты устанавливать самостоятельно, так что запуск &lt;code&gt;emacs --debug-init&lt;/code&gt; в первое время в помощь. Все недостающие пакеты есть в AUR для ArchLinux.&lt;/p&gt;
&lt;p&gt;Кроме того, некоторые расширения тянутся из git, и они подключены как субмодули, поэтому после клонирования репозитория нужно будет выполнить следующие команды:
git submodule init
git submodule update&lt;/p&gt;
&lt;p&gt;Пожелания по унификации приветствуются.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Emacs Org mode &#43; ditaa &#43; Artist mode</title>
      <link>https://htrd.su/blog/2012/09/17/emacs_org_mode_ditaa_artist_mode/</link>
      <pubDate>Mon, 17 Sep 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/09/17/emacs_org_mode_ditaa_artist_mode/</guid>
      <description>&lt;p&gt;&lt;strong&gt;Ditaa&lt;/strong&gt; - DIagrams Through Ascii Art - &amp;ldquo;компилятор&amp;rdquo; для ASCII диаграмм, на выходе создаёт достаточно приятные для глаза диаграммки:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Официальный сайт:&lt;/strong&gt; 
&lt;a href=&#34;http://ditaa.sourceforge.net/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://ditaa.sourceforge.net/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Demo:&lt;/strong&gt; 
&lt;a href=&#34;http://ditaa.org/ditaa/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://ditaa.org/ditaa/&lt;/a&gt; - сервис, можно посмотреть на возможности программки и посоздавать свои&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Дополнения:&lt;/strong&gt; 
&lt;a href=&#34;http://ditaa-addons.sourceforge.net/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://ditaa-addons.sourceforge.net/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ditaa дружит с org-babel в Emacs 
&lt;a href=&#34;http://orgmode.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;org-mode&lt;/a&gt;, так что можно создавать диаграммы прямо в режиме заметки в 
&lt;a href=&#34;http://orgmode.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Org mode&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Для начала, нужно добавить в &lt;em&gt;.emacs&lt;/em&gt; (или &lt;em&gt;.emacs.d/init.el&lt;/em&gt;) следующее:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;;; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;;; Org Babel &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;;; &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;require&lt;/span&gt; &lt;span class=&#34;ss&#34;&gt;&amp;#39;ob-tangle&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;setq&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;org-ditaa-jar-path&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;/usr/share/emacs/site-lisp/org_contrib/scripts/ditaa.jar&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;;(setq org-plantuml-jar-path &amp;#34;~/java/plantuml.jar&amp;#34;) &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;defun&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;bh/display-inline-images&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;condition-case&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;nil&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;org-display-inline-images&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;error&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;nil&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;add-hook&lt;/span&gt; &lt;span class=&#34;ss&#34;&gt;&amp;#39;org-babel-after-execute-hook&lt;/span&gt; &lt;span class=&#34;ss&#34;&gt;&amp;#39;bh/display-inline-images&lt;/span&gt; &lt;span class=&#34;ss&#34;&gt;&amp;#39;append&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;; Make babel results blocks lowercase &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;setq&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;org-babel-results-keyword&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;results&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;org-babel-do-load-languages&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;quote&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;org-babel-load-languages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;quote&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;emacs-lisp&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;dot&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;ditaa&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;R&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;python&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;ruby&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;gnuplot&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;clojure&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;sh&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;ledger&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;org&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;plantuml&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;latex&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))))&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;; Do not prompt to confirm evaluation &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;; This may be dangerous - make sure you understand the consequences &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;; of setting this -- see the docstring for details &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;setq&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;org-confirm-babel-evaluate&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;nil&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;С моей версией emacs-org-mode из AUR ditaa уже идёт комплекте. Если нет, скачайте с домашнего сайта и укажите путь до него.&lt;/p&gt;
&lt;p&gt;само рисование осуществляется в блоке кода:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-org&#34; data-lang=&#34;org&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;#+begin_src &lt;/span&gt;&lt;span class=&#34;cs&#34;&gt;ditaa&lt;/span&gt;&lt;span class=&#34;c&#34;&gt; :file out.png 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&lt;/span&gt;... 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;... 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;... 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;#+end_src &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Теперь небольшой хинт. Есть в штатной поставке emacs 24 такой минорный режим, как &lt;strong&gt;
&lt;a href=&#34;http://emacswiki.org/emacs/ArtistMode&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;artist-mode&lt;/a&gt;&lt;/strong&gt; - позволяет рисовать в ASCII, его-то можно использовать для рисования диаграмм, далее вспоминаем про такую штуку как narrowing (ну хоть убейте - не знаю как перевести, а если кратко: то можно выделить блок текста, так, что бы все изменения были только с ним, а остальные части документа вообще бы никак не могли быть доступны для изменения). Посему:&lt;br/&gt;&lt;br/&gt;
&lt;strong&gt;Шаг 1&lt;/strong&gt;: жмем сколько нужно &amp;lsquo;RET&amp;rsquo; (в народе - Enter) в блоке &lt;code&gt;#+begin_src/#+end_src&lt;/code&gt; - выделяем себе пространство для дальнейшего манёвра&lt;br/&gt;&lt;br/&gt;
&lt;strong&gt;Шаг 2&lt;/strong&gt;: выделяем весь этот блок и жмем &amp;lsquo;C-x n n&amp;rsquo; (если включен CUA mode, то вместе &amp;lsquo;C-x&amp;rsquo; нужно нажимать или &amp;lsquo;C-x C-x&amp;rsquo; или &amp;lsquo;S-C-x&amp;rsquo;, я использую второе) - тем самым мы перейдём к редактированию только этого блока&lt;br/&gt;&lt;br/&gt;
&lt;strong&gt;Шаг 3&lt;/strong&gt;: выключаем artist-mode: &lt;code&gt;M-x artist-mode&lt;/code&gt;&lt;br/&gt;&lt;br/&gt;
&lt;strong&gt;Шаг 4&lt;/strong&gt;: рисуем диаграмму&lt;br/&gt;&lt;br/&gt;
&lt;strong&gt;Шаг 5&lt;/strong&gt;: выключаем artist-mode: &lt;code&gt;M-x artist-mode&lt;/code&gt;&lt;br/&gt;&lt;br/&gt;
&lt;strong&gt;Шаг 6&lt;/strong&gt;: убираем выделение региона: &amp;lsquo;C-x n w&amp;rsquo;&lt;br/&gt;&lt;br/&gt;
&lt;strong&gt;Шаг 7&lt;/strong&gt;: Жмем &amp;lsquo;C-c C-c&amp;rsquo; находясь внутри блоке &lt;code&gt;#+begin_src/#+end_src&lt;/code&gt; - запустится ditta и картинка покажется ниже блока кода.&lt;/p&gt;
&lt;p&gt;Для себя, включение и выключение Artist mode я повесил на клавиатурную комбинацию &amp;lsquo;C-x a&amp;rsquo;, а выбор инструмента рисования в режиме Artist mode на C-s (инкрементный поиск тут не нужен)&lt;/p&gt;
&lt;p&gt;И на последок, скрин-каст про artist mode: 
&lt;a href=&#34;http://www.cinsk.org/emacs/emacs-artist.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.cinsk.org/emacs/emacs-artist.html&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Luakit configs</title>
      <link>https://htrd.su/blog/2012/09/10/luakit_configs/</link>
      <pubDate>Mon, 10 Sep 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/09/10/luakit_configs/</guid>
      <description>&lt;p&gt;Выложил свои конфиги для 
&lt;a href=&#34;http://mason-larobina.github.com/luakit/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Luakit&lt;/a&gt; на Gitorious: 
&lt;a href=&#34;https://www.gitorious.org/hatred-configs/luakit&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://www.gitorious.org/hatred-configs/luakit&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Помимо небольших кастомизаций под себя:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;цвета закладок&lt;/li&gt;
&lt;li&gt;сохранение сессии по &lt;code&gt;w&lt;/code&gt;, а открытие окна по &lt;code&gt;wi&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;включено отображение полосы прокрутки&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;сделана подсистема URI Rewrite и в globals.lua показано, как можно её использовать:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;globals&lt;/code&gt; &amp;ndash;&amp;gt; &lt;code&gt;uri_rewrite_enable&lt;/code&gt; [true/false] &amp;mdash; включить или выключить URI Rewrite&lt;/li&gt;
&lt;li&gt;список &lt;code&gt;uri_rewrites&lt;/code&gt; позволяет указать, что и как заменять, в конфиге показано как там заполнять, чуть ниже показано как делать &amp;ldquo;синонимы&amp;rdquo; для доменов, что бы, к примеру, для сайта с и без www. в начеле, делать одинаковые замены.&lt;/li&gt;
&lt;li&gt;горячая клавиша Shift-F5 - перечитать текущую страницу, используя URI Rewrite&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Посмотреть изменения относительно оригинальных конфигов:
git diff master hatred&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Errno Codes by Platform</title>
      <link>https://htrd.su/blog/2012/08/21/errno_codes_by_platform/</link>
      <pubDate>Tue, 21 Aug 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/08/21/errno_codes_by_platform/</guid>
      <description>&lt;p&gt;Расшифровка значений переменной &lt;code&gt;errno&lt;/code&gt; на различных платформах: 
&lt;a href=&#34;http://www.ioplex.com/~miallen/errcmp.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.ioplex.com/~miallen/errcmp.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Копия на этом сервере: 
&lt;a href=&#34;http://htrd.su/data/errno_codes/errcmp.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://htrd.su/data/errno_codes/errcmp.html&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Using Internet Sockets</title>
      <link>https://htrd.su/blog/2012/08/16/using_internet_sockets/</link>
      <pubDate>Thu, 16 Aug 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/08/16/using_internet_sockets/</guid>
      <description>&lt;p&gt;Работая над программой столкнулся с проблемой в части функционала сокетов, пока искал в интернетах возможный пути решения проблемы, натолкнулся на интересное руководство: 
&lt;a href=&#34;http://beej.us/guide/bgnet/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Beej&amp;rsquo;s Guide to Network Programming. Using Internet Sockets&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Руководство доступно в в различных форматах (по ссылке выше можно найти подходящие), вот самые удобные, на мой взгляд:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://beej.us/guide/bgnet/output/html/singlepage/bgnet.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Одностраничный HTML&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://beej.us/guide/bgnet/output/print/bgnet_A4.pdf&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;PDF A4, односторонний&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Руководство переведено на несколько языков, но русского среди них нет, так что если кому не терпится - переводите, будет, по крайней мере, от меня, большое спасибо и пару-тройку бутылочек пива, если окажетесь в зоне досягаемости :)&lt;/p&gt;
&lt;p&gt;Стоит отметить, что помимо всяких Linux/Unix есть информация и про Windows, в частности будет полезно при разработке кроссплатформенных сетевых приложений.&lt;/p&gt;
&lt;p&gt;Ещё, среди кучи ссылок, в тексте обнаружилась такая полезная: 
&lt;a href=&#34;http://developerweb.net/?f=70&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;UNIX Socket FAQ&lt;/a&gt; - тоже кладезь знаний.&lt;/p&gt;
&lt;p&gt;В дополнение, книжка &amp;ldquo;Linux Socket Programming by Example&amp;rdquo;, можно купить на Амазоне: 
&lt;a href=&#34;http://www.amazon.com/Linux-Socket-Programming-Example-Warren/dp/0789722410&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.amazon.com/Linux-Socket-Programming-Example-Warren/dp/0789722410&lt;/a&gt; или:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Почитать Online: 
&lt;a href=&#34;http://alas.matf.bg.ac.rs/manuals/lspe/mode=1.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://alas.matf.bg.ac.rs/manuals/lspe/mode=1.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Скачать на торрентах: 
&lt;a href=&#34;http://rutracker.org/forum/viewtopic.php?t=749222&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://rutracker.org/forum/viewtopic.php?t=749222&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Скачать PDF: 
&lt;a href=&#34;http://read.pudn.com/downloads166/ebook/759178/Que-Linux-Socket-Programming.pdf&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://read.pudn.com/downloads166/ebook/759178/Que-Linux-Socket-Programming.pdf&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Mime тип для GPX</title>
      <link>https://htrd.su/blog/2012/07/07/mime_tip_dlja_gpx/</link>
      <pubDate>Sat, 07 Jul 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/07/07/mime_tip_dlja_gpx/</guid>
      <description>&lt;p&gt;Столкнулся с тем, что в файловых менеджерах в уютненьком Арчике &lt;a href=&#34;https://ru.wikipedia.org/wiki/GPX&#34; target=&#34;_blank&#34;&gt;GPX&lt;/a&gt;
 файлы отображаются просто как &amp;ldquo;Документ XML&amp;rdquo;, соответственно если назначишь для открытия какую программу, это распространяется на все XML файлы.&lt;/p&gt;
&lt;p&gt;Выход: сделать описание Mime типа&lt;/p&gt;
&lt;p&gt;Рассмотрю вариант индивидуальный для пользователя, общесистемно - домашнее задание.&lt;/p&gt;
&lt;p&gt;Шаг первый, создаём файл &lt;code&gt;$HOME/.local/share/mime/packages/application-gpx+xml.xml&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-xml&#34; data-lang=&#34;xml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&amp;lt;?xml version=&amp;#34;1.0&amp;#34; encoding=&amp;#34;UTF-8&amp;#34;?&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;mime-info&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;xmlns=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;http://www.freedesktop.org/standards/shared-mime-info&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;mime-type&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;type=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;application/gpx+xml&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;comment&amp;gt;&lt;/span&gt;Geoinformation data (waypoints, tracks and so on) in GPX format&lt;span class=&#34;nt&#34;&gt;&amp;lt;/comment&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;glob-deleteall/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;glob&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;pattern=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;*.gpx&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;/mime-type&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/mime-info&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Для ленивых, качаем в одну команду:
wget -O $HOME/.local/share/mime/packages/application-gpx+xml.xml 
&lt;a href=&#34;http://htrd.su/wiki/_export/code/post/2012/07/07/mime_tip_dlja_gpx?codeblock=0&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://htrd.su/wiki/_export/code/post/2012/07/07/mime_tip_dlja_gpx?codeblock=0&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;После чего выполняем команду:
update-mime-database $HOME/.local/share/mime&lt;/p&gt;
&lt;p&gt;Усё.&lt;/p&gt;
&lt;p&gt;Для быстрого просмотра удобна программа 
&lt;a href=&#34;http://viking.sourceforge.net/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Viking&lt;/a&gt;, в Арчике есть в стандартных репозиториях.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>XeTex и XeLaTeX</title>
      <link>https://htrd.su/blog/2012/07/03/xetex_i_xelatex/</link>
      <pubDate>Tue, 03 Jul 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/07/03/xetex_i_xelatex/</guid>
      <description>&lt;p&gt;На правах мемориза:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://sovety.blogspot.com/2008/12/xelatex-opentype-latex.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;XeLaTeX и шрифты OpenType в LaTeX &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://sovety.blogspot.com/2008/12/russian-bibtex-xelatex-babel-or.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Русский BibTeX и XeLaTeX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://sovety.blogspot.com/2009/01/drop-caps-in-latex.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Буквицы в LaTeX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://astronu.jinr.ru/wiki/index.php/XeLaTeX_%D0%B8%D0%BB%D0%B8_%D0%BD%D0%B0_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA_%D1%83%D0%BB%D1%83%D1%87%D1%88%D0%B8%D0%BC_%D0%BA%D0%B0%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%BE_%D1%88%D1%80%D0%B8%D1%84%D1%82%D0%BE%D0%B2_%D0%B2_%D0%BE%D0%BA%D0%BE%D0%BD%D1%87%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D0%BC_pdf&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;XeLaTeX или на порядок улучшим качество шрифтов в окончательном pdf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://romankiseliov.livejournal.com/28305.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Мой минимум для XeLaTeX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://ru.wikipedia.org/wiki/XeTeX%7cXeTeX&#34; target=&#34;_blank&#34;&gt;XeTeX|XeTeX&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.tug.org/texlive/doc/texlive-ru/texlive-ru.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Руководство пользователя TEX Live (TEX Live 2012)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://wiki.archlinux.org/index.php/TeX_Live&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;ArchLinux and TexLive&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Библиотеки для MinGW</title>
      <link>https://htrd.su/blog/2012/06/28/biblioteki_dlja_mingw32/</link>
      <pubDate>Thu, 28 Jun 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/06/28/biblioteki_dlja_mingw32/</guid>
      <description>&lt;p&gt;Некоторые библиотеки находятся в AUR, некоторые собираются сами, но есть ещё такой чудный проект как Windows KDE: 
&lt;a href=&#34;http://windows.kde.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://windows.kde.org/&lt;/a&gt; в рамках которого, для компиляции KDE уже отстроено много библиотек.&lt;/p&gt;
&lt;p&gt;Найти их можно:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;раз: 
&lt;a href=&#34;http://www.winkde.org/pub/kde/ports/win32/repository-4.8/kde/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.winkde.org/pub/kde/ports/win32/repository-4.8/kde/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;два: 
&lt;a href=&#34;http://www.winkde.org/pub/kde/ports/win32/repository-4.8/win32libs/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.winkde.org/pub/kde/ports/win32/repository-4.8/win32libs/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ну и поиграться с версиями, начиная отсюда: 
&lt;a href=&#34;http://www.winkde.org/pub/kde/ports/win32/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.winkde.org/pub/kde/ports/win32/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Что самое чудное, есть версии не только для mingw, но и для VC10, а так же версии библиотек с отладочной информацией.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPD&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Для зависимостей между модулями будет полезно: 
&lt;a href=&#34;http://www.winkde.org/pub/kde/ports/win32/repository-4.8/config/config.txt&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.winkde.org/pub/kde/ports/win32/repository-4.8/config/config.txt&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;И все файлы одним списком без разделение ня kde &amp;amp; win32libs: 
&lt;a href=&#34;http://winkde.org/pub/kde/ports/win32/releases/stable/4.8.0/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://winkde.org/pub/kde/ports/win32/releases/stable/4.8.0/&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Ночь в лесу</title>
      <link>https://htrd.su/blog/2012/06/27/noch_v_lesu/</link>
      <pubDate>Wed, 27 Jun 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/06/27/noch_v_lesu/</guid>
      <description>&lt;p&gt;Долго собирался и вот, наконец, дошло до дела: опробовать аварийную ночёвку в лесу, когда под руками
только самое необходимое, а то и без него.&lt;/p&gt;
&lt;p&gt;Итак, 2 июня, после экзаменов в горной школе нашего турклуба, на пару с другом Евгением, сруливаем в,
относительно, недалёкие окрестности стольного града Владивостока.&lt;/p&gt;
&lt;p&gt;Задачу ставим на первый раз простую: организация укрытия, ночёвка в нём, при этом нет спальника
(легенда: &amp;ldquo;палатка и спальник в рюкзаке, рюкзак свалился в пропасть&amp;rdquo;). Насчёт пенки решили сделать
допущение, ровно как на котелок и еду - в самом деле, не всё же сразу!&lt;/p&gt;
&lt;p&gt;Самое главное, если вдруг оказался в чрезвычайной ситуации - не паниковать. Не знаешь что делать -
лучше сядь и посиди, успокаивая мысли, не делай лишних телодвижений, шевели головой - на это меньше
тратится энергии, а полезного выхлопа больше.&lt;/p&gt;
&lt;p&gt;Особенно этому правилу нужно следовать в делах выбора места для ночлега: если палатка и может защитить
в некоторой степени, даже будучи поставленной на сырую землю, то когда пола нет совсем, нужно поискать
месте более приподнятое, сухое, лучше если оно будет хорошо освещаться солнцем (естественно при его
наличии). Примерно такое место мы и нашли, плюс недалеко, в распадке обнаружился ручей - чистая
вода очень хороший помощник! Но остерегайтесь чуть журчащих по земле и листве ручейков - такую воду
однозначно следует кипятить, если ручей бурный, с каменистым дном - опасностей для организма в такой
воде значительно меньше. Хотя быстрый бег с низкими приседаниями и не исключены и в этом случае.&lt;/p&gt;
&lt;p&gt;И вот, место выбрано, теперь стоит определиться с укрытием. Если вас один-два человека, подойдут
даже природные заготовки, вроде вывороченного пня - просто наложите лаги, застелите ветками, засыпьте
листвой, и закрытое почти со всех сторон жилище готово. Иногда в лесу падает сухостой, по дороге к
земле, бывает зацепляется, при этом, часто, образуется уже почти готовый шалаш, только пообломай лишние
ветки, да немного облагородь. Мы решаем делать односкатный шалаш, можно сказать, из ничего.&lt;/p&gt;
&lt;p&gt;Посмотришь всякие фильмы, где суровые дядьки показывают, что делать когда случилась опа, у них куда не плюнь -
верёвка из лианы: плети, крути, делай что хочешь. А у на в Приморском крае оказывается не хуже - актинидии
(в народе киш-мышь), лимонника да дикого винограда где только нет. В нашем распоряжении оказалось
немного актинидии, её мы и использовали, как замену верёвки, для укрепления нашего жилища.&lt;/p&gt;
&lt;p&gt;Основа - два дерева. Для двух человек достаточно, что бы расстояние между ними было сантиметров 130-140.
Меньше - тесно, да дождь по бокам может заливать, больше - дополнительные трудозатраты, как следствие,
потеря энергии (это у нас была еда, а если действительно - рюкзак в пропасть?). Находим подходящую
сухую жердину, главное что бы она не сломалась от малейшего чиха. Лучшим выбором будет дерево не
лежачее на земле, а ещё стоячее - оно меньше подвержено гнили.  Глубина ската выбирается по росту
самого высокого человека, плюс десять, двадцать сантиметров. Высота ската при этом побирается такой,
что бы угол между скатом и землёй был примерно 45 градусов - потом поясню, для чего.&lt;/p&gt;
&lt;p&gt;Итак, два дерева найдены, жердина подобрана, теперь её нужно закрепить. У нас веток на деревьях на
нужной высоте не оказалось, поэтому нашли две сухие рогатины, нужной высоты, прислонили к деревьям,
закрепили актинидией, на рогатины положили жердь.&lt;/p&gt;
&lt;hr /&gt;
&lt;blockquote&gt;
&lt;p&gt;Если ничего лианоподобного нет, нет ивы (кору с её молодых побегов легко можно использовать как верёвку, да и счищать можно руками), то тогда следует
подыскать деревья, на которые можно положить перекладину без дополнительных ухищрений&lt;/p&gt;&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;p&gt;Теперь нужно уложить поперечные лаги. Предварительно нахожу три бревна побольше, можно даже сущую
труху, главное что бы было потяжелее. Одно бревно ложу на землю параллельно нашей жерди - на него и
на жердь будут ложиться лаги. Лаги - тоже сушнины, только потоньше и полегче, нежели основная жердь,
укладываем их на расстоянии 40-60 сантиметров друг от друга. К поперечной жерди приматываем той же
актинидией. Когда все лаги будут уложены, на нижнюю часть, сверху ложим два запасённых бревна, тем
самым плотно прижав концы к лежачему на земле бревну.&lt;/p&gt;
&lt;hr /&gt;
&lt;blockquote&gt;
&lt;p&gt;Снова, если нет ничего для вязки, закрепить лаги сверху можно, положив поверх ещё одну жердь - она придавит их к основной&lt;/p&gt;&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;p&gt;После этого я нарезал тонкой живой гибкой поросли и как бы вплёл её поперёк лагов, в результате
получилась этакая сетчатая конструкция. На эту конструкцию теперь будет удобно укладывать &amp;ldquo;черепицу&amp;rdquo;&amp;hellip;
В качестве оной &amp;ldquo;матёрые выживальщики&amp;rdquo; используют пальмовые листья, ога, ща, сгоняем по быстрому!
Поэтому снова нарезаем поросль, тонкие ветки с листвой, собирая их в своеобразный веник и укладывая
их на нашу сетчатую конструкцию таким образом, что бы черенки смотрели вверх. Естественно укладываем
с нахлёстом, снизу вверх, как настоящую черепицу.&lt;/p&gt;
&lt;p&gt;Всё, по сути на этом процесс строительства укрытия закончен, правда если у вас не окажется коврика
(как я писал выше, у нас это было допущением), нужно будет сделать настил, что бы поднять ваше тело
от сырости и холода земли (почки вам ещё пригодятся!). Сделать его можно просто: найти два бревна
побольше, положить их параллельно боковым стенкам и плотно плотно уложить на них поперечные жерди.
Поверх жердей, как и на крышу, можно уложить веток с листвой - комфорта будет значительно больше и
отдохнувший организм скажет вам спасибо.&lt;/p&gt;
&lt;p&gt;Всё, теперь можно заносить вещи и озадачиваться обогревом жилища.&lt;/p&gt;
&lt;p&gt;В качестве обогревателя будет костёр, а другого и не дано! Делаем его из длинных брёвен, желательно
их натаскать пока светло, фонарика тоже может не быть, а бегать вотьмах за дровами сомнительное
удовольствие. Раскладываем его параллельно входу. Если получится подыскать подходящий материал для
нодьи - лучше сделать её: горит долго, жара много. На крайний случай пойдёт и таёжный костёр.&lt;/p&gt;
&lt;p&gt;Важным элементом обогрева, про который мы по глупому забыли в этот раз, это теплоотбойник. Название
страшное, а суть проста: за костром, на расстоянии 40-50 (и более, зависит от жара) см делается
вертикальная стенка, высотой до 50см. Материал - дерево (деревянный век какой-то). Что бы она
держалась, берутся 4 ветки молодняка и втыкаются в землю, между ними накладывается стенка, просто
и быстро, наличие щелей не особо критично.&lt;/p&gt;
&lt;p&gt;Вцелом на все приготовления у нас ушло меньше двух часов, притом, что строительством жилища занимался
в основном только я, Женя занимался заготовкой дров и костром, при этом укрытие получилось не на 2х
человек, а на 4-5, соответственно есть запас по ресурсам.&lt;/p&gt;
&lt;p&gt;Переночевали сносно, костёр прогорал примерно каждые 2 часа, просыпались, от того, что становилось
прохладно, подкладывали дров и снова засыпали.&lt;/p&gt;
&lt;p&gt;Теперь пару замечаний, которые вынесли после такой ночёвки.&lt;/p&gt;
&lt;p&gt;Первое, это уже упомянутый выше теплоотбойник - делать обязательно! Меньший расход дров, даст больше
тепла.&lt;/p&gt;
&lt;p&gt;Второе, тут мы тоже сделали не правильно, ветер должен надувать на стенку, в нашем случае он дул во
внутрь убежища, задувал костёр, поэтому то было очень жарко, то прохладно. Кроме того, костёр сушит
листья, и держать дождь они будут хуже, да и спалить из снаряжения, оставшегося, будет проще. А
отбойник с правильно расположенной стенкой даст спокойный огонь и ровное тепло. Так же, ветер не будет
задувать капли дождя, при подобном расположении ската.&lt;/p&gt;
&lt;p&gt;Третье, про угол 45 градусов, его мы тоже не соблюли. Вообще критично, если крыша из листьев
(и листья эти не пальмовые), тогда капли дождя будут скатываться и меньше проникать во внутрь. Если
найдена какая нибудь плёнка, то лучше укрыть крышу ею, главное закрепить (положить сверху несколько
лаг), что бы не унесло ветром&lt;/p&gt;
&lt;p&gt;Больше огрехов, вроде не заметили, при этом, вцелом, при строительстве можно было даже обойтись даже
без ножа, не говоря уж о каком-то другом инструменте (я пользовался только ножом). Теперь нужно
будет отработать ночёвки в безлесье и в зимний период.&lt;/p&gt;
&lt;p&gt;И напоследок, немного фотографий, делал на телефон, поэтому не обесудьте. На фотографии, со стороны
ската ещё не все ветки с листьями уложены, поэтому выглядит так облезло.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2012/06/27/foto0196.jpg&#34; alt=&#34;&#34;&gt; &lt;img src=&#34;https://htrd.su/img/post/2012/06/27/foto0197.jpg&#34; alt=&#34;&#34;&gt; &lt;img src=&#34;https://htrd.su/img/post/2012/06/27/foto0198.jpg&#34; alt=&#34;&#34;&gt; &lt;img src=&#34;https://htrd.su/img/post/2012/06/27/foto0199.jpg&#34; alt=&#34;&#34;&gt; &lt;img src=&#34;https://htrd.su/img/post/2012/06/27/foto0200.jpg&#34; alt=&#34;&#34;&gt; &lt;img src=&#34;https://htrd.su/img/post/2012/06/27/foto0201.jpg&#34; alt=&#34;&#34;&gt; &lt;img src=&#34;https://htrd.su/img//post/2012/06/27/foto0203.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Где брать карты?</title>
      <link>https://htrd.su/blog/2012/06/23/gde_brat_karty/</link>
      <pubDate>Sat, 23 Jun 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/06/23/gde_brat_karty/</guid>
      <description>&lt;p&gt;Карты ресурса &amp;ldquo;Поехали&amp;rdquo; канули в лету, хоть они и не блистали своим качеством. Теперь их можно найти на различных торрентах в сбониках и т.д. Данная заметка, что бы после было можно оперативно найти себе карту (привязать, кропнуть, склеить, сделать jnx :simple_smile:) для похода.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPD 2019-11-14:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Отличная обзорная статья: 
&lt;a href=&#34;https://shuriktravel.ru/maps/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Карты. Для подготовки к походу&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;про генштаб&lt;/li&gt;
&lt;li&gt;про ГГЦ&lt;/li&gt;
&lt;li&gt;про OSM и OSM Topo&lt;/li&gt;
&lt;li&gt;про WikiMapia&lt;/li&gt;
&lt;li&gt;про хребтовки&lt;/li&gt;
&lt;li&gt;про Locus и AnyGIS.ru&lt;/li&gt;
&lt;li&gt;про Garmin&lt;/li&gt;
&lt;li&gt;и т.д.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://slazav.mccme.ru/maps/index.htm&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Карты от В.Завьялова aka slazav&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;есть хребтовки для Garmin&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Сайт для обзора и планирования: 
&lt;a href=&#34;https://nakarte.me&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;NaKarte.me&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;старые-генштабовки&#34;&gt;Старые генштабовки&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;можно найти тут: 
&lt;a href=&#34;http://www.afanas.ru/mapbase/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.afanas.ru/mapbase/&lt;/a&gt; но нет карт мелких масштабов (иногда хочется иметь, в качестве обзорной)&lt;/li&gt;
&lt;li&gt;или у Власенко: 
&lt;a href=&#34;http://maps.vlasenko.net/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://maps.vlasenko.net/&lt;/a&gt; - оооочень хорошая подборка карт&lt;/li&gt;
&lt;li&gt;подробка самых лучших километровок Приморского края, почему-то нет ни в одном из вышеперечисленных наборов (торрент): 
&lt;a href=&#34;http://rutracker.org/forum/viewtopic.php?t=1850504&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://rutracker.org/forum/viewtopic.php?t=1850504&lt;/a&gt; (есть ещё дополнительная информация из серии &amp;ldquo;Это интересно знать&amp;rdquo;, типа документов о переименовании географических объектов)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;карты-госгисцентра&#34;&gt;Карты Госгисцентра&lt;/h2&gt;
&lt;p&gt;Которые утекли на просторы интернета, скачиваются на торрентах с 
&lt;a href=&#34;http://rutracker.org&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://rutracker.org&lt;/a&gt;, поиск по слову &amp;ldquo;ggc&amp;rdquo;. Отдельно стоит отметить то, что к ним есть привязки (там же на торрентах) в трёх форматах:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;OZI Explorer&lt;/li&gt;
&lt;li&gt;Global Mapper&lt;/li&gt;
&lt;li&gt;World&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Последние представляют из себя пару файлов с расширениями .prj (описание проекции в тестовом формате &lt;a href=&#34;https://en.wikipedia.org/wiki/Well-known_text%7cWKT%20%28Well-Known%20Text%29&#34; target=&#34;_blank&#34;&gt;Well-known_text|WKT (Well-Known Text)&lt;/a&gt;
) и .pgw (файл с 6 строчками с цифрами - сам Wold файл) и могут быть использованы &lt;code&gt;gdal_translate&lt;/code&gt; для получения привязанного GeoTIFF (об этом я вскользь уже упоминал: 
&lt;a href=&#34;https://htrd.su/blog/2012/06/17/problema_s_gdal_sistema_koordinat_local_cs_vmesto_projcs/&#34;&gt;Проблема с gdal: система координат LOCAL_CS вместо PROJCS [SOLVED] &lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Полный набор можно скачать с раздачи на nnm-club: 
&lt;a href=&#34;http://nnm-club.ru/forum/viewtopic.php?t=403156&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://nnm-club.ru/forum/viewtopic.php?t=403156&lt;/a&gt; только раздача очень жирная, на моём нетбуке открыть её не получилось :)&lt;/p&gt;
&lt;p&gt;Наличие самих карт можно смотреть на неофициальном сайте: 
&lt;a href=&#34;http://loadmap.net&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://loadmap.net&lt;/a&gt; (старый генштаб тут же).&lt;/p&gt;
&lt;h2 id=&#34;dem-рельеф&#34;&gt;DEM рельеф&lt;/h2&gt;
&lt;p&gt;Особенно полезен в различных картографических программах, вроде QLandkarteGT, для планирования маршрута, дневных переходов, т.к. предоставляет карту высот и мы может увидеть график высоты, оценить, стоит ли подниматься на перевал с этой стороны или выбрать другой вариант.&lt;/p&gt;
&lt;p&gt;SRTM данные, в формате, поддерживаемом gdal можно скачать тут (официальный сайт): 
&lt;a href=&#34;http://dds.cr.usgs.gov/srtm/version2_1/SRTM3&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://dds.cr.usgs.gov/srtm/version2_1/SRTM3&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Файлы там имеют структуру: NddEddd.hgt.zip, где N - северная широта (S - для южной), dd - градусы широты,  E - восточная долгота (W - для западной), ddd - градусы долготы. Сайм файл рельефа покрывает площать 1x1 градус. Датум у этих файлов WGS84, для использования с генштабовскими картами, нужно будет преобразовать систему координат с помощью &lt;code&gt;gdalwarp&lt;/code&gt; (на выхода правда получится уже не hgt, а GeoTIFF - но почти все программы такой вариант представления высоты тоже понимают)&lt;/p&gt;
&lt;p&gt;Этими же файлами можно разжиться в двух раздачать на торрентах:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://rutracker.org/forum/viewtopic.php?t=640812&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://rutracker.org/forum/viewtopic.php?t=640812&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://rutracker.org/forum/viewtopic.php?t=2988728&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://rutracker.org/forum/viewtopic.php?t=2988728&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Для широт севернее 60 градусов северной широты можно данные можно взять тут: 
&lt;a href=&#34;http://www.viewfinderpanoramas.org/Coverage%20map%20viewfinderpanoramas_org3.htm&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.viewfinderpanoramas.org/Coverage%20map%20viewfinderpanoramas_org3.htm&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;векторные-карты&#34;&gt;Векторные карты&lt;/h2&gt;
&lt;p&gt;Для начала, для навигаторов Garmin, а вообще не раздел, а один сплошной TODO, т.е. все рекомендации приветствуются.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Приморский край, &amp;ldquo;Приморский край ТОПО&amp;rdquo;: 
&lt;a href=&#34;http://dvmaps.narod.ru/pkmap.htm&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://dvmaps.narod.ru/pkmap.htm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Камчатка, домашние вулканы (сам был в том походе, для которого она делалась и по результатам которого обновлялась): 
&lt;a href=&#34;http://dvmaps.narod.ru/HomeVulc-map.htm&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://dvmaps.narod.ru/HomeVulc-map.htm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;И вообще карты: 
&lt;a href=&#34;http://dvmaps.narod.ru/download.htm&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://dvmaps.narod.ru/download.htm&lt;/a&gt;, кроме вышеперечисленных, качество которых я лично могу подтвердить, на момент написания данного поста имеется:
&lt;ul&gt;
&lt;li&gt;Алтай, Катнуский хребет, г.Белуха 1:50000, карта для GPS Garmin&lt;/li&gt;
&lt;li&gt;Карта Северного прибайкалья (г.Черского, оз.Фролиха) масштаб 1:50000 для GPS Garmin.&lt;/li&gt;
&lt;li&gt;L-54-11 Южно-Сахалинск, подробная карта СТК &amp;ldquo;Горный Воздух&amp;rdquo;, 1:100000, для GPS Garmin&lt;/li&gt;
&lt;li&gt;Баджал, улунский цирк, M-53-053, 1:100000, карта для GPS Garmin&lt;/li&gt;
&lt;li&gt;O-56-014 Магадан, 1:100000, карта для GPS Garmin&lt;/li&gt;
&lt;li&gt;Заилийский Алатай, сырая незаконченная карта для GPS Garmin&lt;/li&gt;
&lt;li&gt;хребет Баджал, 1:100000, незаконченная карта для GPS Garmin&lt;/li&gt;
&lt;li&gt;Ергаки, 1:30000, карта для GPS Garmin&lt;/li&gt;
&lt;li&gt;Мунку-Сардык, 1:30000, карта для GPS Garmin&lt;/li&gt;
&lt;li&gt;Борус, 1:50000, карта для GPS Garmin&lt;/li&gt;
&lt;li&gt;Мана, 1:50000, карта для GPS Garmin&lt;/li&gt;
&lt;li&gt;Тункинские гольцы, 1:50000, карта для GPS Garmin&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.gpstourism.ru/go.php?dst=maps&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Туристические карты для GPS-навигаторов&lt;/a&gt;, не густо, но вроде как принимают заявки на изготовление.&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://meridian.perm.ru/04_maps/maps_for_gps.shtml&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Самодельные векторные карты для GPS-навигаторов&lt;/a&gt; - очень неплохая коллекция&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://karty-garmin.ru/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://karty-garmin.ru/&lt;/a&gt; - пока ничего сказать не могу. Взял карты Абхазии.&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Qt4 и стандартные иконки</title>
      <link>https://htrd.su/blog/2012/06/22/qt4_i_standartnye_ikonki/</link>
      <pubDate>Fri, 22 Jun 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/06/22/qt4_i_standartnye_ikonki/</guid>
      <description>&lt;p&gt;Бывает необходимость в вашем приложении отобразить ту или иную стандартную системную иконку, типа значка диска CD-ROM. Можно, конечно, создавать свой ресурсный файл и ложить иконки туда, но это будет выглядеть несуразно, особенно при смене различных тем оформления. Задаёмся резонным вопросом: а как бы использовать то, что уже есть в Qt и/или системе?&lt;/p&gt;
&lt;h2 id=&#34;вариант-1-стандартные-ресурсы-qt4&#34;&gt;Вариант 1: стандартные ресурсы Qt4&lt;/h2&gt;
&lt;p&gt;Про это написано тут: 
&lt;a href=&#34;http://www.qtcentre.org/wiki/index.php?title=Embedded_resources&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.qtcentre.org/wiki/index.php?title=Embedded_resources&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Помимо списка, приведён и код, которым можно получить список самостоятельно. Так же показан пример, как создавать изображение из ресурса:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;QPixmap pixmap(&amp;#34;:/trolltech/styles/commonstyle/images/up-128.png&amp;#34;);
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;QIcon   icon(&amp;#34;:/trolltech/styles/commonstyle/images/up-128.png&amp;#34;);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;вариант-2-стандартные-иконки-при-помощи-qstyle&#34;&gt;Вариант 2: стандартные иконки при помощи QStyle&lt;/h2&gt;
&lt;p&gt;Сылки по теме:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;a href=&#34;http://doc.trolltech.com/latest/qstyle.html#standardIcon&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://doc.trolltech.com/latest/qstyle.html#standardIcon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://doc.trolltech.com/latest/qstyle.html#StandardPixmap-enum&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://doc.trolltech.com/latest/qstyle.html#StandardPixmap-enum&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Собственно что нам нужно, это метод класса QStyle:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;QIcon&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;QStyle&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;standardIcon&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;StandardPixmap&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;standardIcon&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;QStyleOption&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;option&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;QWidget&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;widget&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Иконки опеределяются перечислением 
&lt;a href=&#34;http://doc.trolltech.com/latest/qstyle.html#StandardPixmap-enum&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;StandardPixmap&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;вариант-3-использование-иконок-темы-оформления&#34;&gt;Вариант 3: использование иконок темы оформления&lt;/h2&gt;
&lt;p&gt;Тут, скорее всего, всё будет очень сильно зависеть от платформы. Но в общем случае, нам нужен такой вызов:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;QIcon icon(QIcon::fromTheme(QString::fromUtf8(&amp;#34;icon-name&amp;#34;)));
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;icon-name&lt;/code&gt; имя иконки, возможные значения, стандартные, для Linux можно узнать тут: 
&lt;a href=&#34;http://standards.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://standards.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Две утилиты для работы с картами: ozi2map и geocrop</title>
      <link>https://htrd.su/blog/2012/06/22/dve_utility_dlja_raboty_s_kartami_ozi2map_i_geocrop/</link>
      <pubDate>Fri, 22 Jun 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/06/22/dve_utility_dlja_raboty_s_kartami_ozi2map_i_geocrop/</guid>
      <description>&lt;p&gt;На выходных готовил растровую карту для похода на Кодар, с последующей конвертацией оной в JNX.&lt;/p&gt;
&lt;p&gt;Самые неинтересные и скучные моменты в этом деле была обрезка рамки. А кроме того, печаль, по причине того, что есть карты с привязками OZI, но нет нормального конвертера для них.&lt;/p&gt;
&lt;p&gt;В результате, подумал и написал за выходные две программы: ozi2map и geocrop&lt;/p&gt;
&lt;h2 id=&#34;ozi2map&#34;&gt;ozi2map&lt;/h2&gt;
&lt;p&gt;&lt;wrap em&gt;Данная утилита более не актуальна. Версия GDAL (&amp;gt;=1.10), входящая во все популярные дистрибутивы, уже умеет сама обрабатывать такие MAP файлы.&lt;/wrap&gt;&lt;/p&gt;
&lt;p&gt;Первая, как можно понять из названия, предназначена для конвертации карты с привязкой OZI (сама карта в JPEG или GIF или другом распространённом растровом формате, который поддерживает OZI, но не OZFX/OZFX2/OZFX3, для них преобразования можно сделать средствами самого gdal (в прошлых статьях писал про это)).&lt;/p&gt;
&lt;p&gt;Для чтения точек привязки и параметров проекции используется функция из недр GDAL: &lt;code&gt;GDALReadOziMapFile(...)&lt;/code&gt;, что, в отличии от питоновского ozi2geotiff.py, даёт корректные параметры проекции. Далее, не стал особо заморачиваться и подсовывая нужные параметры gdal_translate/gdalwarp вызываю их через &lt;code&gt;system()&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Я вообще не стал лезть в разбор map файла, поэтому файла растра автоматически не определяется и его нужно указывать самому:
./ozi2map O-50-103.map O-50-103.jpg
./ozi2map O-50-103.map O-50-103.jpg O-50-103.tif&lt;/p&gt;
&lt;p&gt;Если имя выходного файла не задано, имя будет сформировано из имени растра с заменой расширения на .tif.&lt;/p&gt;
&lt;p&gt;Всё, пользоваться программой должно быть проще простого. Найти исходники (GPLv2) можно тут:&lt;br/&gt;&lt;br/&gt;
&lt;del&gt;
&lt;a href=&#34;https://git.gitorious.org/h4tr3d-utils/ozi2map.git&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://git.gitorious.org/h4tr3d-utils/ozi2map.git&lt;/a&gt;&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;Собирать просто:
make&lt;/p&gt;
&lt;p&gt;Полученный бинарник можно запускать от куда угодно.&lt;/p&gt;
&lt;h2 id=&#34;geocrop&#34;&gt;geocrop&lt;/h2&gt;
&lt;p&gt;Вторая программа предназначена для автоматической (хотя лукавлю: полуавтоматической) обрезки рамки на номенклатурном листе. Принцип действия прост: определённому набору координат соответствует какой-то стандартный лист заданного масштаба (его как раз и нужно указывать). Стандартный лист обрамлён вполне конкретными координатами, по которым вполне можно осуществить обрезку без вмешательства человека.&lt;/p&gt;
&lt;p&gt;Т.е. по сути, программе на вход нужен только масштаб листа (в виде 1M, 500k, 200k, 100k, 50k, 25k, 10k, 5k, 2k) и сам лист карты в формате, поддерживаемом GDAL с корректной привязкой.&lt;/p&gt;
&lt;p&gt;Когда расчёты по привязке будут выполнены, вызывается &lt;strong&gt;gdalwarp&lt;/strong&gt; через &lt;code&gt;system()&lt;/code&gt;. Полигон для обрезки формируется в координатах листа (не в точках растра), для всех листов, кроме 1M, это 4х угольник (на будущее будет более качественно сделано, но и текущего результата хватит в 99.99% случаев).&lt;/p&gt;
&lt;p&gt;Пользоваться программой не сложнее чем ozi2map:
./geocrop -s 100k O-50-103.tif O-50-103-crop.tif&lt;/p&gt;
&lt;p&gt;Первым аргументом - стилизованное обозначение масштаба:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1M - 1:1 000 000 (это масштаб используется, если мнемоника не распознана)&lt;/li&gt;
&lt;li&gt;500k - 1:500 000 (&amp;ldquo;пятикилометровка&amp;rdquo;)&lt;/li&gt;
&lt;li&gt;200k - 1:200 000 (&amp;ldquo;двухкилометровка&amp;rdquo;)&lt;/li&gt;
&lt;li&gt;100k - 1:100 000 (&amp;ldquo;километровка&amp;rdquo;)&lt;/li&gt;
&lt;li&gt;50k - 1:50 000 (&amp;ldquo;полукилометровка&amp;rdquo; или &amp;ldquo;пятисотметровка&amp;rdquo;)&lt;/li&gt;
&lt;li&gt;25k - 1:25 000 (&amp;ldquo;двухсотпятидесятиметровка&amp;rdquo;)&lt;/li&gt;
&lt;li&gt;10k - 1:10 000 (&amp;ldquo;стометровка&amp;rdquo;, пока не реализовано)&lt;/li&gt;
&lt;li&gt;5k - 1:5000 (&amp;ldquo;пятидесятиметровка&amp;rdquo;, пока не реализовано)&lt;/li&gt;
&lt;li&gt;2k - 2:2000 (&amp;ldquo;двадцатиметровка&amp;rdquo;, пока не реализовано)
Если этот параметр пропущен, используется масштаб 100k.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Вторым аргрументом - входной файл, поддерживаемый GDAL.&lt;/p&gt;
&lt;p&gt;Третий аргумент - выходной, кропнутый файл. По умолчанию - GeoTiff, но можно переопределить опцией &amp;ldquo;-f FORMAT&amp;rdquo;, где FORMAT - любой поддерживаемый GDAL.&lt;/p&gt;
&lt;p&gt;Если хотите обрезанные карты потом склеивать при помощи &lt;code&gt;gdal_merge.py&lt;/code&gt;, и получить вразумительные результат, входной файл &lt;strong&gt;должен быть в цветовой палитре RGB&lt;/strong&gt;, узнать это можно при помощи утилиты &lt;code&gt;gdalinfo&lt;/code&gt;, если в выводе есть такое:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Band 1 Block=4096x1 Type=Byte, ColorInterp=Red
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Band 2 Block=4096x1 Type=Byte, ColorInterp=Green
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Band 3 Block=4096x1 Type=Byte, ColorInterp=Blue
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;значит всё хорошо, если нет (выводится палитра из 255 цветов), то палитра индексированная, нужно преобразовать в RGB при помощи утилиты &lt;code&gt;pct2rgb.py&lt;/code&gt; из комплекта GDAL.&lt;/p&gt;
&lt;p&gt;Собирать просто:
mkdir build
cd build
cmake ..
make&lt;/p&gt;
&lt;p&gt;Если на стадии cmake будут какие-то проблемы, стоит поставить dev-пакеты для GDAL и PROJ.4&lt;/p&gt;
&lt;p&gt;Исходники можно взять тут (GPLv2):&lt;br/&gt;&lt;br/&gt;

&lt;a href=&#34;https://github.com/h4tr3d/geocrop&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/h4tr3d/geocrop&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Проблема с gdal: система координат LOCAL_CS вместо PROJCS [SOLVED]</title>
      <link>https://htrd.su/blog/2012/06/17/problema_s_gdal_sistema_koordinat_local_cs_vmesto_projcs/</link>
      <pubDate>Sun, 17 Jun 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/06/17/problema_s_gdal_sistema_koordinat_local_cs_vmesto_projcs/</guid>
      <description>&lt;p&gt;Суть проблемы: при отработке утилит вроде 
&lt;a href=&#34;https://aur.archlinux.org/packages.php?ID=39885&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;ozi2geotiff&lt;/a&gt; получался geotiff который потом не читался в том же QLandkarteGT и утилитами самого gdal (типа того же gdalwarp). Самое печальное, что это коснулось и файлов привязок для карт с росгисцентра (в формате .pgw + .prj (первый - привязка в формате ESRI World file, второй - описание проекции в формате WKT((Well Known Text))), картами и привязками можно разжиться 
&lt;a href=&#34;http://nnm-club.ru/forum/viewtopic.php?t=403156&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;тут&lt;/a&gt; или на 
&lt;a href=&#34;http://rutracker.org&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://rutracker.org&lt;/a&gt; поиском по слову ggc).&lt;/p&gt;
&lt;p&gt;Печально потому, что если положить рядом файл карты в .png, файл привязки .pgw и описание проекции .prj (имя файла без расширения при этом должно быть одинаковым), то получить geotiff становится проще простого:
gdal_translate -of GTiff -a_srs O-50-103-D.prj O-50-103-D.png O-50-103-D.tiff&lt;/p&gt;
&lt;p&gt;Файл .pgw подхватывается автоматически, дополнительно его указывать не нужно (об этом же говорится в официальной документации про поддержку PNG: 
&lt;a href=&#34;http://www.gdal.org/frmt_various.html%29&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.gdal.org/frmt_various.html)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;В печали я написал в список рассылки разработчиков gdal, к утру получил ответ от  Frank Warmerdam, с уведомлнем, что он попытался на последне версии gdal и проблемы не наблюдает. Попытался собрать и тоже проблема самоустранилась, при этом, gdalinfo выдал корректную информацию для файлов сгенерированных старым gdal_translate, эти же карты после обновления открылись и в QLandkarteGT. Так что, у кого стоит gdal 1.9.0, нужно срочно обновляться (вроде как проблемы нет уже в 1.9.1, но не проверял)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Полезные ссылки:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://geotiff.maptools.org/faq.html#WorldFile2&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://geotiff.maptools.org/faq.html#WorldFile2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.cadforum.cz/cadforum_en/qaID.asp?tip=3515&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;What are the .TFW, .JGW or .PGW files?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://aur.archlinux.org/packages.php?ID=60115&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;gdal-svn в AUR для ArchLinux&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Привязка генштабовских карт в QLandkarteGT</title>
      <link>https://htrd.su/blog/2012/06/16/privjazka_genshtabovskix_kart_v_qlandkartegt/</link>
      <pubDate>Sat, 16 Jun 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/06/16/privjazka_genshtabovskix_kart_v_qlandkartegt/</guid>
      <description>&lt;p&gt;В интернетах уже есть заметки по этой тематике, например ссылки приводил в 
&lt;a href=&#34;https://htrd.su/blog/2009/03/15/2009-03-15_11.42_paru_zametok_o_qlandkartegt/&#34;&gt;post/2009-03-15_11.42_paru_zametok_o_qlandkartegt&lt;/a&gt;, но что бы было под рукой. Опускаться до того, в какой пункт меню заходить не буду, приведу чисто технические моменты.&lt;/p&gt;
&lt;p&gt;Исходные данные: лист километровки О-50-103.tiff&lt;/p&gt;
&lt;p&gt;На первом шаге нужно указать проекцию карты, для нашего родного генштаба проекция будет примерно такого вида:&lt;br/&gt;&lt;br/&gt;
&lt;del&gt;+proj=tmerc +lat_0=0 +lon_0=&lt;strong&gt;117&lt;/strong&gt; +k=1 +x_0=&lt;strong&gt;20500000&lt;/strong&gt; +y_0=0 +ellps=krass +units=m +no_defs&lt;/del&gt;&lt;br/&gt;&lt;br/&gt;
+proj=tmerc +lat_0=0 +lon_0=&lt;strong&gt;117&lt;/strong&gt; +k=1 +x_0=&lt;strong&gt;20500000&lt;/strong&gt; +y_0=0 +ellps=krass +towgs84=23.9,-141.3,-80.9,0,-0.37,-0.85,-0.12 +units=m +no_defs&lt;/p&gt;
&lt;p&gt;(параметр towgs84, определяет параметры перехода к датуму wgs84, который используется в том же GPS, этот параметр автоматом добавится, если в мастере настройки проекции выбрать датум Pulkovo 1942)&lt;/p&gt;
&lt;p&gt;собственно для каждого листа миллионки она будет своя, жирным выделено то, что будет меняться от листа к листу. Теперь пояснения:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;lon_0&lt;/strong&gt; - центральный меридиан&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;x_0&lt;/strong&gt; - мнимый восток (false easting)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;В статье 
&lt;a href=&#34;https://htrd.su/blog/2011/06/26/2011-06-26_14.58_gotovim_rastrovuju_kartu_dlja_navigatora_garmin_gpsmap_62s/&#34;&gt;post/2011-06-26_14.58_gotovim_rastrovuju_kartu_dlja_navigatora_garmin_gpsmap_62s&lt;/a&gt; я уже показывал как рассчитывать эти параметры, продублирую и здесь:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-scilab&#34; data-lang=&#34;scilab&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;lon_0&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Nз&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;            # центральный меридиан по известной зоне&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x_0&lt;/span&gt;   &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Nз&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1000000&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;500000&lt;/span&gt; # мнимый восток &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;false&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;easting&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Nз&lt;/span&gt;    &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;floor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lon&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;    # номер зоны по любому значению долготы на листе&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;floor&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; взятие целой части от деления&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Nз&lt;/span&gt;    &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lon_0&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;       # номер зоны по центральному меридиану &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;частный случай&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Как видно, оба параметра зависят от номер зоны, что бы не заморачиваться, есть ещё один очень простой способ определения её: по номеру листа, вычитая из него 30. Т.е. лист у нас O-50, значит его номер - 50, тогда:```scilab
Nз = 50 - 30 = 20&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Тогда значения центрального меридиана и мнимого востока:```scilab
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;lon_0 = 20 * 6 - 3 = 117
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;x_0   = 20 * 1000000 + 500000 = 20500000
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Так же, для простоты, можно принять, что мнимый восток это: 500000 перед которым написан номер зоны, как он есть, т.е. как результат объединения двух строк (в программировании):```
&amp;ldquo;20&amp;rdquo; + &amp;ldquo;500000&amp;rdquo; = &amp;ldquo;20500000&amp;rdquo;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Переходим ко второму шагу. Тут нужно указать проекцию, в которой вводятся координаты точек привязки:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  * если привязки указаны в географических координатах (долгота и широта, особенно удобно на листах с рамкой - на них у нас имеются 5 точек указанными координатами - грех не воспользоваться), то проекцию можем ввести:&amp;lt;del&amp;gt;```
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;```&amp;lt;/del&amp;gt; ```+proj=latlong +ellps=krass +towgs84=23.9,-141.3,-80.9,0,-0.37,-0.85,-0.12``` и не особо парить мозг. Тогда значения координат точек нужно вводить примерно так:```
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;N57 20.00 E117 00.00
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;``` не значащие нули опускать не нужно
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  * если привязываете по линиям километровой сетки, то копируете проекцию с первого этапа, а значения координат указываете в метрах, примерно так:```
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;20520000 6356000
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;``` подробнее о привязывании по километровой сетке не расскажу - делал всегда по координатам.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Собственно, на этом всё, осталось нажать кнопку Process.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>На правах заметки: Статический анализ кода C&#43;&#43;</title>
      <link>https://htrd.su/blog/2012/06/08/na_pravax_zametki_staticheskij_analiz_koda_c/</link>
      <pubDate>Fri, 08 Jun 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/06/08/na_pravax_zametki_staticheskij_analiz_koda_c/</guid>
      <description>&lt;p&gt;Давно пользуюсь услугами cppcheck, но решил поглядеть что есть ещё (как оказалось, лучше, по сути, ничего и нету). Наткнулся на статью по теме на хабре: 
&lt;a href=&#34;http://habrahabr.ru/post/75123&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://habrahabr.ru/post/75123&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Тезисно:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Педантичные ключи для gcc (сам автор отсылает за подробностями: 
&lt;a href=&#34;http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html%29&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html)&lt;/a&gt;, особо хочется отметить неизвестный мне ключ &lt;code&gt;-Weffc++&lt;/code&gt;, включает проверку на соответствие рекомендациям Скотта Майерса. Результат сборки моего последнего проекта поверг в уныние: будет ещё работы по вычистке.&lt;/li&gt;
&lt;li&gt;cppcheck (в арчике есть в стандартных репах)&lt;/li&gt;
&lt;li&gt;vera++ (есть в AUR)&lt;/li&gt;
&lt;li&gt;rats (есть в AUR)&lt;/li&gt;
&lt;li&gt;проверялки для чистого Си (как оказалось((
&lt;a href=&#34;http://www.cert.org/secure-coding/tools.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.cert.org/secure-coding/tools.html&lt;/a&gt; и 
&lt;a href=&#34;http://www.cs.cmu.edu/~aldrich/courses/654/tools/index.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.cs.cmu.edu/~aldrich/courses/654/tools/index.html&lt;/a&gt;)) их значительно больше, нежели для C++)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Далее, &lt;strong&gt;
&lt;a href=&#34;http://habrahabr.ru/post/128534/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Анализ утилит статического анализа C++ кода&lt;/a&gt;&lt;/strong&gt;, автор рассматривает следующие анализаторы:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;rats (выше писал)&lt;/li&gt;
&lt;li&gt;cppcheck (аналогично)&lt;/li&gt;
&lt;li&gt;Graudit (есть в AUR)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;причём рассматривает проблемы, которые они не выявляют.&lt;/p&gt;
&lt;p&gt;Список статических анализаторов можно поглядеть на страничке в википедии: 
&lt;a href=&#34;http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis&lt;/a&gt;, причём не только для C/C++&lt;/p&gt;
&lt;p&gt;Для интереса можно почитать перевод статьи Джона Кармака о статическом анализе: 
&lt;a href=&#34;http://habrahabr.ru/post/135234/%28%28&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://habrahabr.ru/post/135234/((&lt;/a&gt;Оригинал статьи: altdevblogaday.com/2011/12/24/static-code-analysis/)), где кратко излагается, какими инструментами ему довелось воспользоваться, и какие впечатления остались после них.&lt;/p&gt;
&lt;p&gt;И на последок серия из четырёх заметок камрада 
&lt;a href=&#34;http://habrahabr.ru/users/Andrey2008&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Andrey2008&lt;/a&gt;((Один из разработчиков PVS-Studio, поэтому малость пропускаем его отсылы к этому продукту)) &amp;ldquo;Как уменьшить вероятность ошибки на этапе написания кода&amp;rdquo;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://habrahabr.ru/post/115143/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Заметка №1&lt;/a&gt;:
&lt;ol&gt;
&lt;li&gt;Избегайте функции memset, memcpy, ZeroMemory и им аналогичные&lt;/li&gt;
&lt;li&gt;Внимательно следите, работаете вы со знаковым или беззнаковым типом&lt;/li&gt;
&lt;li&gt;Избегайте большого количества вычислений в одной строке&lt;/li&gt;
&lt;li&gt;Выравнивайте в коде всё, что возможно&lt;/li&gt;
&lt;li&gt;Не размножайте строку более, чем один раз&lt;/li&gt;
&lt;li&gt;Выставляйте высокий уровень предупреждений у компилятора и используйте статические анализаторы&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://habrahabr.ru/post/116397/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Заметка №2&lt;/a&gt;
&lt;ol&gt;
&lt;li&gt;Не используйте тернарную операцию &amp;lsquo;?:&amp;rsquo; в составных выражениях&lt;/li&gt;
&lt;li&gt;Не стесняйтесь использовать скобки&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://habrahabr.ru/post/123603/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Заметка №3&lt;/a&gt; - на примерах ошибок в Qt4
&lt;ol&gt;
&lt;li&gt;Обрабатывайте переменные в той же последовательности, как они объявлены&lt;/li&gt;
&lt;li&gt;Табличные методы — это хорошо&lt;/li&gt;
&lt;li&gt;Разное интересное (про разные и интересные ошибки в Qt4)&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://habrahabr.ru/post/134571/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Заметка №4&lt;/a&gt; - на примерах ошибок в Firefox&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>luakit: проблема со скролингом по PgUp/PgDown</title>
      <link>https://htrd.su/blog/2012/06/02/pgdown/</link>
      <pubDate>Sat, 02 Jun 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/06/02/pgdown/</guid>
      <description>&lt;p&gt;Проблема странная, проявляется не сразу: вроде при запуске всё отлично работает, потом бац, перестаёт, при этом выводится сообщение слудющего содержания:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Error: in bind call: /home/user/.config/luakit/webview.lua:341: attempt to perform arithmetic on local &amp;#39;p&amp;#39; (a nil value)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Решение проблемы нашёл тут: 
&lt;a href=&#34;https://github.com/mason-larobina/luakit/issues/68&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/mason-larobina/luakit/issues/68&lt;/a&gt;, нормальный рабочий вариант получается этот: 
&lt;a href=&#34;https://github.com/mason-larobina/luakit/issues/68#issuecomment-5528890&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/mason-larobina/luakit/issues/68#issuecomment-5528890&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Многопоточность в C&#43;&#43;</title>
      <link>https://htrd.su/blog/2012/05/26/mnogopotochnost_v_c/</link>
      <pubDate>Sat, 26 May 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/05/26/mnogopotochnost_v_c/</guid>
      <description>&lt;p&gt;На правах заметки: цикл статей о многопоточности в C++.&lt;/p&gt;
&lt;p&gt;В цикле рассматриваются создание обёртки над pthreads((ссылки по теме:&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://ru.wikipedia.org/wiki/POSIX_Threads&#34; target=&#34;_blank&#34;&gt;POSIX_Threads&lt;/a&gt;
&lt;br/&gt;&lt;br/&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://computing.llnl.gov/tutorials/pthreads&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;POSIX Threads Programming&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.opennet.ru/base/dev/pthreads.txt.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Краткое описание pthread (threads)&lt;/a&gt;)), использование 
&lt;a href=&#34;http://www.boost.org/doc/libs/1_49_0/doc/html/thread.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;boost::thread&lt;/a&gt;, а так же использование идиомы &lt;a href=&#34;https://ru.wikipedia.org/wiki/RAII%7cRAII%20%28%d0%97%d0%b0%d1%85%d0%b2%d0%b0%d1%82%20%d1%80%d0%b5%d1%81%d1%83%d1%80%d1%81%d0%b0%20%d0%b5%d1%81%d1%82%d1%8c%20%d0%b8%d0%bd%d0%b8%d1%86%d0%b8%d0%b0%d0%bb%d0%b8%d0%b7%d0%b0%d1%86%d0%b8%d1%8f%29&#34; target=&#34;_blank&#34;&gt;RAII|RAII (Захват ресурса есть инициализация)&lt;/a&gt;
 в контексте потоков.&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://blog.emptycrate.com/node/270&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Multithreaded C++: Part 1: Pthreads&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://blog.emptycrate.com/node/277&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Multithreaded C++: Part 2: Boost Threads&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://blog.emptycrate.com/node/282&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Multithreaded C++: Part 3: RAII And Threads&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Вообще, блог 
&lt;a href=&#34;http://blog.emptycrate.com&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Empty Crate&lt;/a&gt; крайне рекомендую к ознакомлению - интересные заметки по программированию на C++.&lt;/p&gt;
&lt;p&gt;Так же в тему многопоточности concurency в C++0x (но всё это можно переложить, с небольшими оговорками и на boost::thread) серия статей в блоге Just Software Solution:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.justsoftwaresolutions.co.uk/threading/multithreading-in-c&amp;#43;&amp;#43;0x-part-1-starting-threads.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Multithreading in C++0x part 1: Starting Threads&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.justsoftwaresolutions.co.uk/threading/multithreading-in-c&amp;#43;&amp;#43;0x-part-2-function-objects-and-arguments.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Multithreading in C++0x part 2: Starting Threads with Function Objects and Arguments&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.justsoftwaresolutions.co.uk/threading/multithreading-in-c&amp;#43;&amp;#43;0x-part-3.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Multithreading in C++0x part 3: Starting Threads with Member Functions and Reference Arguments&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.justsoftwaresolutions.co.uk/threading/multithreading-in-c&amp;#43;&amp;#43;0x-part-4-protecting-shared-data.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Multithreading in C++0x part 4: Protecting Shared Data&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.justsoftwaresolutions.co.uk/threading/multithreading-in-c&amp;#43;&amp;#43;0x-part-5-flexible-locking.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Multithreading in C++0x Part 5: Flexible locking with std::unique_lock&amp;lt;&amp;gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.justsoftwaresolutions.co.uk/threading/multithreading-in-c&amp;#43;&amp;#43;0x-part-6-double-checked-locking.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Multithreading in C++0x part 6: Lazy initialization and double-checked locking with atomics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.justsoftwaresolutions.co.uk/threading/multithreading-in-c&amp;#43;&amp;#43;0x-part-7-locking-multiple-mutexes.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Multithreading in C++0x part 7: Locking multiple mutexes without deadlock&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.justsoftwaresolutions.co.uk/threading/multithreading-in-c&amp;#43;&amp;#43;0x-part-8-futures-and-promises.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Multithreading in C++0x part 8: Futures, Promises and Asynchronous Function Calls&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Однооконный Dia</title>
      <link>https://htrd.su/blog/2012/05/12/odnookonnyj_dia/</link>
      <pubDate>Sat, 12 May 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/05/12/odnookonnyj_dia/</guid>
      <description>&lt;p&gt;Достаточно запустить:
dia &amp;ndash;integrated&lt;/p&gt;
&lt;p&gt;теперь вполне можно пользоваться.&lt;/p&gt;
&lt;p&gt;Ну и чуть ярости: ну какого чёрта не вынести это в настройки!?&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Test</title>
      <link>https://htrd.su/blog/2012/05/11/test/</link>
      <pubDate>Fri, 11 May 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/05/11/test/</guid>
      <description>&lt;p&gt;Первый тестовый пост после обновления PHP с 5.3.10 на 5.4.3 и отказа BlogTNG.&lt;/p&gt;
&lt;p&gt;Причина: BlogTNG использует SQLite2, который выкинули из PHP 5.4.0.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Как узнать каким компилятором мы компилируемся?</title>
      <link>https://htrd.su/blog/2012/05/05/kak_uznat_kakim_kompiljatorom_my_kompiliruemsja/</link>
      <pubDate>Sat, 05 May 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/05/05/kak_uznat_kakim_kompiljatorom_my_kompiliruemsja/</guid>
      <description>&lt;p&gt;Не всё делается одинаково во всех компиляторах, не на всех платформах, приходится временами городить хитрые конструкции из #if/#elif/#endif. Случайно наткнулся на шпаргалку, в которой описано, какие директивы препроцессора предопределяют конкретные компиляторы: 
&lt;a href=&#34;http://sourceforge.net/p/predef/wiki/Compilers/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://sourceforge.net/p/predef/wiki/Compilers/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;С того же ресурса:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;для операционных систем: 
&lt;a href=&#34;http://sourceforge.net/p/predef/wiki/OperatingSystems/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://sourceforge.net/p/predef/wiki/OperatingSystems/&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;версии Windows: 
&lt;a href=&#34;https://msdn.microsoft.com/en-us/library/6sehtctf.aspx&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://msdn.microsoft.com/en-us/library/6sehtctf.aspx&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;в рантайме:
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://msdn.microsoft.com/en-us/library/windows/desktop/ms724439%28v=vs.85%29.aspx&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://msdn.microsoft.com/en-us/library/windows/desktop/ms724439(v=vs.85).aspx&lt;/a&gt; (устарела)&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://msdn.microsoft.com/en-us/library/windows/desktop/dn424972%28v=vs.85%29.aspx&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://msdn.microsoft.com/en-us/library/windows/desktop/dn424972(v=vs.85).aspx&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;для стандартов языка: 
&lt;a href=&#34;http://sourceforge.net/p/predef/wiki/Standards/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://sourceforge.net/p/predef/wiki/Standards/&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;более актуальная информация от проекта GCC: 
&lt;a href=&#34;https://gcc.gnu.org/onlinedocs/cpp/Standard-Predefined-Macros.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://gcc.gnu.org/onlinedocs/cpp/Standard-Predefined-Macros.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;для стандартных библиотек (реализаций) C и C++: 
&lt;a href=&#34;http://sourceforge.net/p/predef/wiki/Libraries/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://sourceforge.net/p/predef/wiki/Libraries/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;для архитектур: 
&lt;a href=&#34;http://sourceforge.net/p/predef/wiki/Architectures/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://sourceforge.net/p/predef/wiki/Architectures/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;А так же определение порядка байтов: 
&lt;a href=&#34;http://sourceforge.net/p/predef/wiki/Endianness/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://sourceforge.net/p/predef/wiki/Endianness/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Другие ссылки на эту тематику:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://nadeausoftware.com/articles/2012/10/c_c_tip_how_detect_compiler_name_and_version_using_compiler_predefined_macros&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;C/C++ tip: How to detect the compiler name and version using compiler predefined macros&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ниже самое нужное мне, тезисно.&lt;/p&gt;
&lt;h2 id=&#34;версии-c-и-его-библиотек&#34;&gt;Версии C++ и его библиотек&lt;/h2&gt;
&lt;p&gt;
&lt;a href=&#34;https://gcc.gnu.org/onlinedocs/cpp/Standard-Predefined-Macros.html#__cplusplus&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Макрос &lt;code&gt;__cplusplus&lt;/code&gt;&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;199711L&lt;/code&gt; - C++98&lt;/li&gt;
&lt;li&gt;&lt;code&gt;201103L&lt;/code&gt; - C++11&lt;/li&gt;
&lt;li&gt;&lt;code&gt;201402L&lt;/code&gt; - C++14&lt;/li&gt;
&lt;li&gt;&lt;code&gt;201703L&lt;/code&gt; - C++17&lt;/li&gt;
&lt;li&gt;&lt;code&gt;202002L&lt;/code&gt; - C++20&lt;/li&gt;
&lt;li&gt;&lt;code&gt;202302L&lt;/code&gt; - C++23&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Можно проверять отдельные фичи (начиная с C++20):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://en.cppreference.com/w/cpp/feature_test.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://en.cppreference.com/w/cpp/feature_test.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;платформы-windowslinuxandroid&#34;&gt;Платформы Windows/Linux/Android&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Linux:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;__linux__&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Windows (TBD: перепроверить`):
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;_WIN16&lt;/code&gt; - скорее всего не встретится, для 16 бит окружения&lt;/li&gt;
&lt;li&gt;&lt;code&gt;_WIN32&lt;/code&gt; - определено для 32 и для 64 бит окружения&lt;/li&gt;
&lt;li&gt;&lt;code&gt;_WIN64&lt;/code&gt; - определено для 64 бит окружения&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Android
&lt;ul&gt;
&lt;li&gt;на нём же определён &lt;code&gt;__linux__&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;__ANDROID__&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;__ANDROID_API__&lt;/code&gt; - значение - API level (&lt;code&gt;&amp;lt;android/api-level.h&amp;gt;&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;архитектура-x86x86_64armaarch64&#34;&gt;Архитектура x86/x86_64/arm/aarch64&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;x86_64
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;__amd64__&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;__x86_64__&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;x86
&lt;ul&gt;
&lt;li&gt;GCC/Clang:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;__i386__&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;и куча вариаций (при этом предыдущий так же будет определён)
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;__i486__&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;__i586__&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;__i686__&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;MinGW:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;_X86_&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Visual Studio:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;_M_I86&lt;/code&gt; - только для 16 бит платформ&lt;/li&gt;
&lt;li&gt;&lt;code&gt;_M_IX86&lt;/code&gt; - только для 32 бит платформ, при этом это и версия типа &lt;code&gt;V00&lt;/code&gt; (300 - 386, 400 - 486, 500 - 586, 600 - 686)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;arm64/aarch64
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;__aarch64__&lt;/code&gt;, но &lt;code&gt;__arm__&lt;/code&gt; тоже определён&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;arm
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;__arm__&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;__thumb__&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;ещё куча всего связанного с конкретными архитектурами&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;компиляторы&#34;&gt;Компиляторы&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Clang
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;__clang__&lt;/code&gt; - стоит отметить, что в IDE использующих llvm/clang для парсинга (Qt Creator) этот макрос будет определён в дополнении к макросам реального компилятора.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;__clang_major__&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;__clang_minor__&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;__clang_patchlevel__&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;__clang_version__&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;GCC
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;__GNUC__&lt;/code&gt; - он же major версии компилятора&lt;/li&gt;
&lt;li&gt;&lt;code&gt;__GNUC_MINOR__&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;__GNUC_PATCHLEVEL__&lt;/code&gt; - может быть не определён&lt;/li&gt;
&lt;li&gt;&lt;code&gt;__GNUC_VERSION__&lt;/code&gt; - децимальная версия (&lt;code&gt;__GNUC__ * 10000 + __GNUC_MINOR__*100 + __GNUC_PATCHLEVEL__&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;MSVC
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;_MSC_VER&lt;/code&gt; - децимальная версия, вида &lt;code&gt;VVRR&lt;/code&gt;: &lt;code&gt;VV&lt;/code&gt; - Version, &lt;code&gt;RR&lt;/code&gt; - Revision
&lt;ul&gt;
&lt;li&gt;наиболее актуальные:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;1900&lt;/code&gt; - 14.0 (2015)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;1910&lt;/code&gt;..&lt;code&gt;1916&lt;/code&gt; - 15.0 (2017)..15.9 (2017)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;1920&lt;/code&gt;..&lt;code&gt;1929&lt;/code&gt; - 16.0 (2019)..16.11 (2019)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;1930&lt;/code&gt;..&lt;code&gt;1944&lt;/code&gt; - 17.0 (2022)..17.14 (2022)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;_MSC_FULL_VER&lt;/code&gt; - полная децимальная версия вида
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;VVRRPPPP&lt;/code&gt;: &lt;code&gt;VV&lt;/code&gt; - Version, &lt;code&gt;RR&lt;/code&gt; - Revision, &lt;code&gt;PPPP&lt;/code&gt; - Patch, начиная с Visual C++ 6.0 Processor pack&lt;/li&gt;
&lt;li&gt;&lt;code&gt;VVRRPPPPP&lt;/code&gt;: &lt;code&gt;VV&lt;/code&gt; - Version, &lt;code&gt;RR&lt;/code&gt; - Revision, &lt;code&gt;PPPPP&lt;/code&gt; - Patch, начиная с Visual C++ 8.0 (больше цифр для Patch)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Детально тут: 
&lt;a href=&#34;https://learn.microsoft.com/en-us/cpp/overview/compiler-versions?view=msvc-170&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Microsoft C++ (MSVC) compiler versioning&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;MinGW
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;__MINGW32__&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;__MINGW64__&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;biglittle-endianness&#34;&gt;Big/Little Endianness&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;BE
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;__BIG_ENDIAN__&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;__BYTE_ORDER__ = __BIG_ENDIAN__&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;__FLOAT_WORD_ORDER__ == __BIG_ENDIAN__&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;LE
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;__LITTLE_ENDIAN__&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;__BYTE_ORDER__ = __LITTLE_ENDIAN__&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;__FLOAT_WORD_ORDER__ = __LITTLE_ENDIAN__&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;На C++20 в compile-time можно проверять через 
&lt;a href=&#34;https://en.cppreference.com/w/cpp/types/endian.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;std::endian&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>C&#43;&#43; Cheat Sheets</title>
      <link>https://htrd.su/blog/2012/04/17/c_cheat_sheets/</link>
      <pubDate>Tue, 17 Apr 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/04/17/c_cheat_sheets/</guid>
      <description>&lt;ol&gt;
&lt;li&gt;C++ Containers Cheat Sheet:
1. 
&lt;a href=&#34;http://homepages.e3.net.nz/~djm/cppcontainers.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://homepages.e3.net.nz/~djm/cppcontainers.html&lt;/a&gt;
2. 
&lt;a href=&#34;http://habrahabr.ru/company/infopulse/blog/194726/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://habrahabr.ru/company/infopulse/blog/194726/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;C++ Iterators &amp;amp; Algorithms Cheat Sheet:
1. 
&lt;a href=&#34;http://homepages.e3.net.nz/~djm/cppiterators.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://homepages.e3.net.nz/~djm/cppiterators.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Shifting from C to C++ strings:
1. 
&lt;a href=&#34;http://homepages.e3.net.nz/~djm/cppstrings.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://homepages.e3.net.nz/~djm/cppstrings.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;C++03 vs C++11:
1. 
&lt;a href=&#34;http://dl.dropboxusercontent.com/u/13100941/C%2B%2B11.pdf&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://dl.dropboxusercontent.com/u/13100941/C%2B%2B11.pdf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;C++ Quick Reference:
1. 
&lt;a href=&#34;http://www.dreamincode.net/downloads/ref_sheets/cpp_reference_sheet.pdf&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.dreamincode.net/downloads/ref_sheets/cpp_reference_sheet.pdf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;STL Quick Reference:
1. 
&lt;a href=&#34;http://www.digilife.be/quickreferences/QRC/STL%20Quick%20Reference%201.29.pdf&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.digilife.be/quickreferences/QRC/STL%20Quick%20Reference%201.29.pdf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;C++ Concurency:
1. 
&lt;a href=&#34;http://cpprocks.com/wp-content/uploads/C&amp;#43;&amp;#43;-concurrency-cheatsheet.pdf&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://cpprocks.com/wp-content/uploads/C++-concurrency-cheatsheet.pdf&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Отдельно по ANSI C: 
&lt;a href=&#34;http://www.digilife.be/quickreferences/QRC/C%20Reference%20Card%20%28ANSI%29%202.2.pdf&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.digilife.be/quickreferences/QRC/C%20Reference%20Card%20%28ANSI%29%202.2.pdf&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Цикл статей &#34;Введение в C&#43;&#43;11&#34;</title>
      <link>https://htrd.su/blog/2012/04/17/cikl_statej_vvedenie_v_c_11/</link>
      <pubDate>Tue, 17 Apr 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/04/17/cikl_statej_vvedenie_v_c_11/</guid>
      <description>&lt;p&gt;Цикл статей камрада 
&lt;a href=&#34;http://www.kalnitsky.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Игоря Кальницкого&lt;/a&gt; для &amp;ldquo;самых маленький&amp;rdquo; про плюшки нового стандарта C++:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;a href=&#34;http://kalnitsky.org/2011/08/28/introduction-to-cpp11-part-1/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Введение в C++11: auto, decltype, nested templates и range-based-for&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://kalnitsky.org/2011/09/04/introduction-to-cpp11-part-2/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Введение в C++11: nullptr и нововведения в системе инициализации&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://kalnitsky.org/2011/10/30/introduction-to-cpp11-part-3/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Введение в C++11: лямбда функции&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://kalnitsky.org/2011/11/02/smart-pointers-in-cpp11/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Введение в C++11: умные указатели&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://kalnitsky.org/2012/01/23/introduction-to-cpp11-new-specifiers/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Введение в C++11: новые спецификаторы&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://kalnitsky.org/2012/03/20/user-defined-literals-in-cpp11/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Введение в C++11: пользовательские литералы&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Так же стоит прочитать статью на Википедии, на удивление информативная: &lt;a href=&#34;https://ru.wikipedia.org/wiki/C&amp;#43;&amp;#43;11&#34; target=&#34;_blank&#34;&gt;C&amp;#43;&amp;#43;11&lt;/a&gt;
&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>BgBilling 5.2 - ошибка</title>
      <link>https://htrd.su/blog/2012/04/16/bgbilling_5.2_-_oshibka/</link>
      <pubDate>Mon, 16 Apr 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/04/16/bgbilling_5.2_-_oshibka/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2012/04/16/bgbilling_5.2_-_oshibka/screen_shoot-20120416-100445-fix.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;А как оказалось, на разделе с &lt;strong&gt;/tmp&lt;/strong&gt; кончилось место, сказал об том Midnight Commander при запуске.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>С днем космонавтики!</title>
      <link>https://htrd.su/blog/2012/04/12/s_dnem_kosmonavtiki/</link>
      <pubDate>Thu, 12 Apr 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/04/12/s_dnem_kosmonavtiki/</guid>
      <description>&lt;p&gt;Надеюсь, что всё таки выберемся за пределы орбиты Земли..&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>The Function Pointer Tutorials</title>
      <link>https://htrd.su/blog/2012/04/11/the_function_pointer_tutorials/</link>
      <pubDate>Wed, 11 Apr 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/04/11/the_function_pointer_tutorials/</guid>
      <description>&lt;p&gt;Хорошее руководство: 
&lt;a href=&#34;http://www.newty.de/fpt/index.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.newty.de/fpt/index.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;PDF версия: 
&lt;a href=&#34;http://www.newty.de/fpt/zip/e_fpt.pdf&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.newty.de/fpt/zip/e_fpt.pdf&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Там же, прицепом: &amp;ldquo;Callback Implementations in C++&amp;rdquo;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;сама статья: 
&lt;a href=&#34;http://www.newty.de/jakubik/callback.pdf&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.newty.de/jakubik/callback.pdf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;доп материалы: 
&lt;a href=&#34;http://www.newty.de/jakubik/callback.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.newty.de/jakubik/callback.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Удаление weak_ptr из std::list</title>
      <link>https://htrd.su/blog/2012/04/11/udalenie_weak_ptr_iz_std_list/</link>
      <pubDate>Wed, 11 Apr 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/04/11/udalenie_weak_ptr_iz_std_list/</guid>
      <description>&lt;p&gt;Дано: контейнер примерно такого вида:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;list&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;boost&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;weak_ptr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Item&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;items&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Вместо %%boost::weak_ptr&amp;lt;&amp;gt;%% могу быть:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;%%std::tr1::weak_ptr&amp;lt;&amp;gt;%%&lt;/li&gt;
&lt;li&gt;%%std::weak_ptr&amp;lt;&amp;gt;%% для C++11&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Задача: нужно удалить элемент по значению.&lt;/p&gt;
&lt;p&gt;Казалось бы, просто сделай:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;items&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;remove&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ан нет: для %%weak_ptr&amp;lt;&amp;gt;%% не определён оператор сравнения. Если потеоретизировать, можно предположить, почему так сделано: что бы гарантировать консистентность указателей при сравнении нужно их захватить (сделать %%value.lock()%%), т.е. создать два %%shared_ptr%% и уже их сравнивать, т.е. лишние накладные расходы.&lt;/p&gt;
&lt;p&gt;Поэтому удаление можно делать так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;template&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;typename&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;bool&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;operator&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;boost&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;weak_ptr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;boost&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;weak_ptr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lock&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lock&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;после такого %%std::list::remove(const T&amp;amp;)%% будет работать для всех типов. Можно и сузить до конкретного.&lt;/p&gt;
&lt;p&gt;Либо использовать %%std::list::remove_if(Predicate)%%,  предикат объявить как:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;EqPredicate&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;boost&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;weak_ptr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Item&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;item&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;EqPredicate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;boost&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;weak_ptr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Item&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;item&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;item&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;item&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;bool&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;operator&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;boost&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;weak_ptr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Item&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lock&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;item&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lock&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;и использовать так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;list&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;boost&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;weak_ptr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Item&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;items&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;items&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;remove_if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EqPredicate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Информация взята отсюда: 
&lt;a href=&#34;http://stackoverflow.com/questions/1390340/how-can-i-use-stdremove-on-a-container-with-stdtr1weak-ptr&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://stackoverflow.com/questions/1390340/how-can-i-use-stdremove-on-a-container-with-stdtr1weak-ptr&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Вышесказанное верно для %%boost::weak_ptr%%, %%std::tr1::weak_ptr%%, %%std::weak_ptr%%&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>0x10c - Hard Science Fiction</title>
      <link>https://htrd.su/blog/2012/04/05/0x10c_-_hard_science_fiction/</link>
      <pubDate>Thu, 05 Apr 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/04/05/0x10c_-_hard_science_fiction/</guid>
      <description>&lt;p&gt;Проект новой игры от создателя &lt;a href=&#34;https://ru.wikipedia.org/wiki/Minecraft&#34; target=&#34;_blank&#34;&gt;Minecraft&lt;/a&gt;
 - 
&lt;a href=&#34;http://0x10c.com&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;0x10c&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Канву и основные фичи читать на сайте, отмечу только, что в игре придётся заниматься программированием 16-битного компьютера на чипе 
&lt;a href=&#34;http://0x10c.com/doc/dcpu-16.txt&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;DCPU-16&lt;/a&gt;, спецификация чипа прилагается. Думаю, что тут можно будет проследить историю развития языков :)&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Ищем замену OziExplorer на Linux</title>
      <link>https://htrd.su/blog/2012/03/27/ischem_zamenu_oziexplorer_na_linux/</link>
      <pubDate>Tue, 27 Mar 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/03/27/ischem_zamenu_oziexplorer_na_linux/</guid>
      <description>&lt;p&gt;Решил таки переопубликовать свою статью в OpenSource (
&lt;a href=&#34;http://osa.samag.ru/info/OpenSource068.zip&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://osa.samag.ru/info/OpenSource068.zip&lt;/a&gt;) и у себя в блоге. В журнале статья называется: &amp;ldquo;QLandKarte GT как замена OziExplorer в GNU/Linux&amp;rdquo;, здесь же публикую под оригинальным.&lt;/p&gt;
&lt;p&gt;Ни для кого не секрет, что, наверное, самой популярной средой для работы с GPS навигаторами, и вообще картографической информацией с целью навигации под Windows, является OziExplorer. Большой плюс оной программы - её простота (особенно если сравнивать с различными GIS). Популярность Ozi&amp;rsquo;ка стала причиной появления в интернете огромного количества геоинформации в его формате, в частности: путевые точки (Waypoints), треки (Tracks) и файлы привязок растровых карт (Map файлы).&lt;/p&gt;
&lt;p&gt;Естественным желание становится использовать как-то всю эту прорву данных и в Linux. Но на пути становится первая преграда: OziExplorer существует только в версии для Windows. Выручить тут могут только два фактора:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;все версии Ozi прекрасно запускаются под Wine (но для легального и полноценного использования нужно купить лицензию, стоит около 90$).&lt;/li&gt;
&lt;li&gt;несмотря на закрытость самой программы, авторы оной сделали свои форматы открытыми (простые текстовые файлы) и даже дали описание в справочном руководстве, за что им огромное спасибо (посмотреть описание можно, например, тут: 
&lt;a href=&#34;http://www.realbiker.ru/OziExplorer/fileformats.shtml%29&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.realbiker.ru/OziExplorer/fileformats.shtml)&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Логично, что первый вариант, хоть и имеет право на жизнь, но не является достаточно изящным решением. Поэтому дальше мы сделаем попытку найти готовое программное обеспечение, которое может работать с форматами OziExplorer. Сделаю одну оговорку: к сожалению, вопрос непосредственного сопряжения с устройствами GPS я рассматривать не буду, ввиду отсутствия подобных устройств в зоне моей доступности, отложим это на будущее.&lt;/p&gt;
&lt;h2 id=&#34;работа-с-картами-атласами-геоданными-и-gps&#34;&gt;Работа с картами, атласами, геоданными и GPS&lt;/h2&gt;
&lt;p&gt;По совокупности характеристик таких как простота и функциональность в данную категорию попадает, пожалуй, только одна программа - QLandKarte GT (
&lt;a href=&#34;http://www.qlandkarte.org/%29&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.qlandkarte.org/)&lt;/a&gt;. Есть ещё версия &amp;lsquo;M&amp;rsquo;, предназначена для различных PDA.&lt;/p&gt;
&lt;p&gt;По сути, эта программа, прямой аналог OziExplorer, позволяет производить привязку растровых карт (например сканированных атласов или других источников), в качестве основного формата которых, используется GeoTiff, кроме того поддерживаются векторные карты Garmin в tdb формате (img формат требует дополнительных действий от пользователя, почитать об этом можно тут: 
&lt;a href=&#34;http://sourceforge.net/apps/mediawiki/qlandkartegt/index.php?title=FAQ&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://sourceforge.net/apps/mediawiki/qlandkartegt/index.php?title=FAQ&lt;/a&gt;, к сожалению, на английском). Кроме того позволяет загружать геоданные (точки, треки) из файлов на диске (набор форматов ограничен, но главное, что есть GPX (
&lt;a href=&#34;http://ru.wikipedia.org/wiki/GPX%29&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://ru.wikipedia.org/wiki/GPX)&lt;/a&gt;, подробнее - ниже). Эти же данные она может экспортировать обратно в файлы, а так же читать/загружать из/в GPS устройства. Ещё одной важной и нужной особенностью программы является возможность создавать атласы, в которых указывать для разных масштабов различные растровые карты.&lt;/p&gt;
&lt;p&gt;Подробно на описании этой программы Я останавливаться не буду, так как информация есть уже и у меня в блоге, а так же в интернете (хотя и не очень много, а жаль), основной список источников, которые следует прочитать перед началом работы я привел в конце статьи.&lt;/p&gt;
&lt;p&gt;Во многих дистрибутивах данную программу можно найти в репозиториях, в случае ArchLinux она есть в AUR в виде &lt;del&gt;двух&lt;/del&gt; пакетов (первый пакет уже спокойно себе живёт в репозитории community): qlandkartegt и qlandkartegt-svn. Так же стоит обратить внимание на комплект драйверов для работы QLandKarte с GPS Garmin (&lt;del&gt;там же в AUR&lt;/del&gt; тоже следом за qlandkartegt поселился в community): garmindev. Установка не должна занять много времени и сил.&lt;/p&gt;
&lt;p&gt;В общем, всё вроде хорошо, вот только ни привязанные в OziExplorer карты ни геоинформацию в его формате QLandKarte читать не умеет. Когда я это обнаружил, чуть было не расстроился, но поискав в интернете нашел решения нужных мне вопросов.&lt;/p&gt;
&lt;h2 id=&#34;карты&#34;&gt;Карты&lt;/h2&gt;
&lt;p&gt;На сайте разработчиков QLandKarte GT есть небольшая сводка, о том, где брать карты, у меня в блоге((
&lt;a href=&#34;https://htrd.su/blog/2008/10/24/2008-10-24_13.49_kartograficheskie_prilozhenija_a_tak_zhe_vizualizacija/&#34;&gt;Картографические приложения, а так же визуализация&lt;/a&gt;)) краткая выборка. В общем одним из пунктов идет: конвертация карт OziExplorer в  формат GeoTiff при помощи скрипта на Python: &lt;code&gt;ozi2geotiff.py&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Сам скрипт можно достать тут: 
&lt;a href=&#34;http://sourceforge.net/projects/ozi2geotiff&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://sourceforge.net/projects/ozi2geotiff&lt;/a&gt;, но разработчики не выкладывают пакеты и доступ возможен только через SVN. Для пользователей ArchLinux я поместил в AUR правила для сборки пакета для этого скрипта, так что для них сложностей быть не должно (пакет называется ozi2geotiff-svn, так же там лежит скрипт ozi2gpx о котором ниже): после сборки и установки пакета, конвертер вызывается командой:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ozi2geotiff &amp;lt;params&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Для остальных же можно скачать скрипт таким образом:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget -O ozi2geotiff.py http://ozi2geotiff.svn.sourceforge.net/viewvc/ozi2geotiff/trunk/ozi2geotiff.py?revision&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;HEAD
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;А запускать так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python ozi2geotiff.py &amp;lt;params&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Так же проверьте, что у вас стоят все необходимые пакеты:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;python&lt;/li&gt;
&lt;li&gt;libgeotiff&lt;/li&gt;
&lt;li&gt;gdal&lt;/li&gt;
&lt;li&gt;imagemagick&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Запуск без параметров выведет экран справки.&lt;/p&gt;
&lt;p&gt;Использовать скрипт достаточно просто:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ozi2geotiff -i karta.map --in-img&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;karta.gif -o karta.tiff
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Можно ещё добавить параметр -v для более подробного вывода. Что же за параметры мы использовали, посмотрим подробнее:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-i karta.map&lt;/code&gt;  - собственно задаем файл привязки, обязательный параметр&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--in-img=karta.gif&lt;/code&gt; - задаем растр, к которому применяется привязка (формат gif здесь только для примера), параметр не обязательный, если путь к растровой карте в map-файле задан корректно (в этом случае он берется от туда)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-o karta.tiff&lt;/code&gt; - наша карта в GeoTiff формате, её мы уже можем загружать в QLandKarte GT и работать.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Справедливости ради, стоит отметить, что существует ещё один скрипт для подобного преобразования, написанный на Ruby, вот только работать у меня он отказался (и даже при всей своей нелюбви к Python, я не стал разбираться в причинах - мне главное конечный результат). Скачать этот скрипт можно тут: 
&lt;a href=&#34;http://sites.google.com/site/osmbelarus/Home/files&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://sites.google.com/site/osmbelarus/Home/files&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Хочется так отметить, что скрипт ozi2geotiff.py не является финальным продуктом и может содержать ошибки, но автор - русскоговорящий, о всех найденных недочетах можно писать ему на почту.&lt;/p&gt;
&lt;h3 id=&#34;карты-garmin&#34;&gt;Карты Garmin&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Примечение:&lt;/strong&gt; текст ниже несколько устарел. По правовым соображениям, программа не может работать с картами Garmin в NT формате, карты же Евгения Богатырёва распространяются только в нём.&lt;/p&gt;
&lt;p&gt;Теперь посмотрим, что можно сотворить из карт для Garmin в .img формате (для Приморского края, к примеру, можно разжиться тут: 
&lt;a href=&#34;http://john.bdk.com.ru/gpsmaps/pkmap2/main.htm&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://john.bdk.com.ru/gpsmaps/pkmap2/main.htm&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Напрямую эти файлы загрузить не получится, нужно собрать их в альбом (файл с расширением .tdb). Для этого нам поможет программа mkgmap (
&lt;a href=&#34;http://www.mkgmap.org.uk/page/main%29&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.mkgmap.org.uk/page/main)&lt;/a&gt;. В случае ArchLinux она имеется в AUR: mkgmap-svn (для работы нужна Java).&lt;/p&gt;
&lt;p&gt;Единственный нюанс, файлы нужно будет переименовать в вид&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;########.img&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;где &lt;code&gt;########&lt;/code&gt; - 8 цифр, внутреннее представление имени файла. Как получить эту цифру правильно, я не понял, поэтому сделал в лоб:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;strings karta.img &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep &lt;span class=&#34;s1&#34;&gt;&amp;#39;RGN&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Записей будет несколько, но смысл понятен. Затем все эти файлы собираем в одной директории и выполняем команду:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkgmap --input-file&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;00000001.img ... --input-file&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;0000000n.img --tdbfile
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;В результате у нас дополнительно появятся файлы: osmmap.img и osmmap.tdb&lt;/p&gt;
&lt;p&gt;Загружая карту выбираем osmmap.tdb, затем он предложит выбрать .img файл, выбираем osmmap.img, все нужные подгрузятся автоматом.&lt;/p&gt;
&lt;p&gt;Естественно всё это вручную делать утомительно, поэтому написал скрипт img2tdb:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#!/bin/sh
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;use&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat &lt;span class=&#34;s&#34;&gt;&amp;lt;&amp;lt; _EOF_
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;Use: $0 &amp;lt;out-dir&amp;gt; &amp;lt;1.img&amp;gt; ... [n.img]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;_EOF_&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; -z &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$2&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; -o &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;--help&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  use
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;OUT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;IMG&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;shift&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;cwd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;pwd&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir -p &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$OUT&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$OUT&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Work dir: `pwd`&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;while&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; -n &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nv&#34;&gt;st&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep &lt;span class=&#34;s1&#34;&gt;&amp;#39;^/&amp;#39;&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; -z &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$st&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;in_name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$cwd&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;in_name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nv&#34;&gt;int_name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;strings &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$in_name&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep &lt;span class=&#34;s1&#34;&gt;&amp;#39;RGN&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep -v &lt;span class=&#34;s1&#34;&gt;&amp;#39;GARMIN&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; head -1 &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; awk -F&lt;span class=&#34;s1&#34;&gt;&amp;#39;RGN&amp;#39;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;{print $1}&amp;#39;&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nv&#34;&gt;out_name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$int_name&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;.img&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;c1&#34;&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Copy &amp;#39;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$in_name&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#39; -&amp;gt; &amp;#39;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$out_name&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#39;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  cp &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$in_name&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$out_name&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nv&#34;&gt;IMG&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$IMG&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; --input-file=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$out_name&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nb&#34;&gt;shift&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Run &amp;#39;mkgmap&amp;#39; and prepare TDB map album&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkgmap &lt;span class=&#34;nv&#34;&gt;$IMG&lt;/span&gt; --tdbfile
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Done&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;После сохранение сделать скрипт выполняемым:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod +x img2tdb
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Пользоваться тоже просто:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;img2tdb &amp;lt;out dir&amp;gt; *.img ... &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;filen.img&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;первый параметр - директория в которой будут сохраняться результаты работы, дальше отдельные img-файлы, которые объединяются в альбом. Можно указывать и маску:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;img2tdb /tmp/map-out *.img
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Всё, пользуемся. В будущем положу этот скрипт в пакет ozi2geotiff&lt;/p&gt;
&lt;h2 id=&#34;геоинформация-треки-точки-маршруты&#34;&gt;Геоинформация: треки, точки, маршруты&lt;/h2&gt;
&lt;p&gt;Настала очередь и геоинформации. Выше я писал, что QLandKarte GT поддерживает не так много форматов, среди которых нет форматов OziExplorer, но есть открытый формат GPX, поэтому ставим задачу: преобразовать форматы Ozi в GPX.&lt;/p&gt;
&lt;p&gt;В отличии от карт, набор инструментов тут побогаче, начнем с программы gpsbabel, которая имеется в community репозитории ArchLinux (да, похоже единственная из этого обзора, которую не нужно собирать).&lt;/p&gt;
&lt;p&gt;GPSBabel (
&lt;a href=&#34;http://www.gpsbabel.org&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.gpsbabel.org&lt;/a&gt;) - программа для закачки треков, путевых точек и т.п. на GPS устройства, а так же для получения этой информации с устройства и конвертации данных в различных форматов друг в друга. Нам же сейчас главное, что программа поддерживает форматы файлов OziExplorer и GPX.&lt;/p&gt;
&lt;p&gt;Синтаксис команды получается очень простым:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gpsbabel -i ozi -f track.plt -o gpx -F track.gpx
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gpsbabel -i ozi -f dots.wpt  -o gpx -F dots.gpx
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;небольшие пояснения:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-i&lt;/code&gt; - задаёт формат входного файла&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-o&lt;/code&gt; - задаёт формат выходного файла&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-f&lt;/code&gt; - задаёт входной файл&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-F&lt;/code&gt; - задаёт выходной файл&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Остальные опции:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gpsbabel --help
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Что бы каждый раз не писать эти команды, я поместил простенький скрипт &lt;code&gt;ozi2gpx&lt;/code&gt; в пакет &lt;strong&gt;ozi2geotiff&lt;/strong&gt;, вызывается просто:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ozi2geotiff &amp;lt;OziExplorer file: plt, wpt&amp;gt; &amp;lt;out.gpx&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Всё просто и лаконично. Для данной программы в AUR есть графический фрон-энд, называется gebabbel (
&lt;a href=&#34;http://gebabbel.sourceforge.net&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://gebabbel.sourceforge.net&lt;/a&gt;), так что, если командная строка вас пугает - можете воспользоваться её возможностями.&lt;/p&gt;
&lt;p&gt;Вторая программа для тех же нужд называется RouteConverter (
&lt;a href=&#34;http://www.routeconverter.de/en%29&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.routeconverter.de/en)&lt;/a&gt;, требует для своей работы Java, имеет графический и консольные интерфейсы. Пакет для ArchLinux я подготовил и выложил в AUR.&lt;/p&gt;
&lt;p&gt;У этой программы есть одна, так называемая, киллер-фича: она подключается к GoogleMaps, и когда загружаешь трек или путевые точки - она рисует на карте оные, и, соответственно, позиционирует положение на карте в нужное время - крайне удобно может быть для быстрого разбора и сортировки треков.&lt;/p&gt;
&lt;p&gt;Как при помощи неё конвертировать? Достаточно просто:&lt;br /&gt;
File -&amp;gt; Open&amp;hellip;    - указываем формат и открываем файл&lt;br /&gt;
File -&amp;gt; Save as&amp;hellip; - указываем формат и сохраняем файл&lt;/p&gt;
&lt;p&gt;Вот внешний вид программы с загруженным треком:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2012/03/27/ischem_zamenu_oziexplorer_na_linux/routeconverter.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Есть и вариант программы с интерфейсом командной строки, в пакете для ArchLinux они вызываются соответственно:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;routeconverter
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;routeconverter-cli
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;что-в-итоге&#34;&gt;Что в итоге?&lt;/h2&gt;
&lt;p&gt;В итоге мы имеем базовый набор утилит для нормальной работы с картами под Linux, можем использовать привязки OziExplorer, его файлы с путевыми точками, треками с минимальными трудозатратами.&lt;/p&gt;
&lt;p&gt;Ниже несколько снимков экрана QLandKarte GT с загруженными данными для нашего предстоящего похода.&lt;/p&gt;
&lt;p&gt;Загруженные векторные карты Garmin и трек (нет деталей в данном масштабе):&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2012/03/27/ischem_zamenu_oziexplorer_na_linux/tr-00.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Загруженные векторные карты Garmin и трек (более крупный масштаб, отображаются детали):&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2012/03/27/ischem_zamenu_oziexplorer_na_linux/tr-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Загруженная растровая привязанная карта (GeoTiff) этого же района и трек:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2012/03/27/ischem_zamenu_oziexplorer_na_linux/tr-02.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2012/03/27/ischem_zamenu_oziexplorer_na_linux/tr-03.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;полезные-ссылки&#34;&gt;Полезные ссылки&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&amp;ldquo;Работа с Qlandkarte GT&amp;rdquo; (
&lt;a href=&#34;http://sites.google.com/site/osmbelarus/Home/manuals/qlandkarte-gt&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://sites.google.com/site/osmbelarus/Home/manuals/qlandkarte-gt&lt;/a&gt;) - общая страница для размещения информации, но с 2008 года новых источников не появилось, среди старых (но не потерявших актуальности):
&lt;ol&gt;
&lt;li&gt;&amp;ldquo;Обзор интерфейса&amp;rdquo; (
&lt;a href=&#34;http://sites.google.com/site/osmbelarus/Home/manuals/qlandkarte-gt/qlandkarte-main-window&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://sites.google.com/site/osmbelarus/Home/manuals/qlandkarte-gt/qlandkarte-main-window&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Привязка растровых материалов&amp;rdquo; (
&lt;a href=&#34;http://sites.google.com/site/osmbelarus/Home/manuals/qlandkarte-gt/qlandkarte-make-geotiff&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://sites.google.com/site/osmbelarus/Home/manuals/qlandkarte-gt/qlandkarte-make-geotiff&lt;/a&gt;) - так же смотрите первую ссылку, там тоже немного про привязку сказано.&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Создание коллекций&amp;rdquo; (
&lt;a href=&#34;http://sites.google.com/site/osmbelarus/Home/manuals/qlandkarte-gt/qlandkarte-make-collections&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://sites.google.com/site/osmbelarus/Home/manuals/qlandkarte-gt/qlandkarte-make-collections&lt;/a&gt;) - или, по другому, атласов, наглядное описание данного процесса.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Подготовка карты для qlandkarte&amp;rdquo; (
&lt;a href=&#34;http://takeoff.mipt.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%B4%D0%B3%D0%BE%D1%82%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BA%D0%B0%D1%80%D1%82%D1%8B_%D0%B4%D0%BB%D1%8F_qlandkarte&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://takeoff.mipt.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%B4%D0%B3%D0%BE%D1%82%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BA%D0%B0%D1%80%D1%82%D1%8B_%D0%B4%D0%BB%D1%8F_qlandkarte&lt;/a&gt;) - тут интересно обратить внимание на подключение карты высот, тем самым можно создавать 3D карты.&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Установка QLandkarte GT для работы с GPS Garmin EtrexVistaHCx&amp;rdquo; (
&lt;a href=&#34;http://community.livejournal.com/ru_nix/11337.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://community.livejournal.com/ru_nix/11337.html&lt;/a&gt;) - пример использования с реальным железом.&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Garmin GPSmap 60Cx: подключение и использование в Linux&amp;rdquo; (
&lt;a href=&#34;http://sovety.blogspot.com/2008/06/garmin-gpsmap-60cx-linux.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://sovety.blogspot.com/2008/06/garmin-gpsmap-60cx-linux.html&lt;/a&gt;)&lt;/li&gt;
&lt;/ol&gt;</description>
    </item>
    
    <item>
      <title>Свой домен и динамический DNS</title>
      <link>https://htrd.su/blog/2012/03/27/svoj_domen_i_dinamicheskij_dns/</link>
      <pubDate>Tue, 27 Mar 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/03/27/svoj_domen_i_dinamicheskij_dns/</guid>
      <description>&lt;p&gt;Как писал в 
&lt;a href=&#34;https://htrd.su/blog/2012/03/26/novyj_adres_bloga/&#34;&gt;позапрошлой заметке&lt;/a&gt; - у блога новый домен. Собственно сразу стал вопрос - а как его использовать с моим-то динамическим белым IP адресом?&lt;/p&gt;
&lt;p&gt;hatred.homelinux.net - предоставлен DynDNS.com, вот только незадача - они сделали чуть менее, чем всё у себя платным, даже если сейчас я освобожу этот хост - обратно в бесплатном аккаунте я его не выберу.&lt;/p&gt;
&lt;p&gt;Именно поэтому в качестве DNS хостера и динамического DNS был выбран 
&lt;a href=&#34;http://dnspark.net&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://dnspark.net&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Как делегировать туда свой домен, что делать на nic.ru или у других регистраторов - это за пределами этой статьи, в конце концов, там всё достаточно очевидно, если нет - в комментарии с вопросами :)&lt;/p&gt;
&lt;p&gt;Но и тут имеем ложку дегтя (не говорю что в бесплатном аккаунте можно сделать только 10 DNS записей и нельзя задать wildcard &lt;code&gt;*&lt;/code&gt;): ddclient распоследней версии работает со старым API, который постоянно пытается сбросить твой адрес в 127.0.0.1. Есть 
&lt;a href=&#34;http://sourceforge.net/apps/trac/ddclient/ticket/30&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;багрепорт&lt;/a&gt;, там же есть патчик, либой мой вариант:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-diff&#34; data-lang=&#34;diff&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;--- ddclient.orig	2012-03-27 10:07:44.000000000 +1100
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gi&#34;&gt;+++ ddclient	2012-03-27 10:20:46.000000000 +1100
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gu&#34;&gt;@@ -3257,12 +3257,13 @@
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;&lt;/span&gt; 	info(&amp;#34;setting IP address to %s for %s&amp;#34;, $ip, $hosts);
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; 	verbose(&amp;#34;UPDATE:&amp;#34;,&amp;#34;updating %s&amp;#34;, $hosts);
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-	#&amp;#39;http://www.dnspark.com:80/visitors/update.html?myip=10.20.30.40&amp;amp;hostname=test.burry.ca&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gi&#34;&gt;+	#old: &amp;#39;http://www.dnspark.com:80/visitors/update.html?myip=10.20.30.40&amp;amp;hostname=test.burry.ca&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+	#new: &amp;#39;https://www.dnspark.net:443/api/dynamic/update.php?hostname=my.hostname&amp;amp;ip=1.2.3.4&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; 	my $url;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-	$url   = &amp;#34;http://$config{$h}{&amp;#39;server&amp;#39;}/visitors/update.html&amp;#34;;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gi&#34;&gt;+	$url   = &amp;#34;https://$config{$h}{&amp;#39;server&amp;#39;}/api/dynamic/update.php&amp;#34;;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt; 	$url  .= &amp;#34;?hostname=$hosts&amp;#34;;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-	$url  .= &amp;#34;&amp;amp;myip=&amp;#34;;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gi&#34;&gt;+	$url  .= &amp;#34;&amp;amp;ip=&amp;#34;;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt; 	$url  .= $ip            if $ip;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; 	if ($config{$h}{&amp;#39;mx&amp;#39;}) {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;@@ -3293,7 +3294,7 @@
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;&lt;/span&gt; 		my $h = pop @hosts;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; 	    
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; 		$config{$h}{&amp;#39;status&amp;#39;} = $status;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-		if ($status eq &amp;#39;ok&amp;#39;) {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gi&#34;&gt;+		if (($status eq &amp;#39;ok&amp;#39;) || ($status eq &amp;#39;nochange&amp;#39;)) {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt; 		    $config{$h}{&amp;#39;ip&amp;#39;}     = $ip;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; 		    $config{$h}{&amp;#39;mtime&amp;#39;}  = $now;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; 		    success(&amp;#34;updating %s: %s: IP address set to %s&amp;#34;, $h, $status, $ip);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Но тут появляется и вторая ложка дегтя: при обращении по этому юрлу часто имеем ошибку 500 сервера. Продакшн. Ога :)&lt;/p&gt;
&lt;p&gt;Решил проблему своим скриптом, который засунул в cron выполняться каждые 5 минут, плюс он, в случае ошибки HTTP пытается повторить запрос несколько раз, часто это помогает с обновлением:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#!/bin/sh
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;host&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;YOUR_HOST_NAME_TO_UPDATE
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# переменная dns хранит сервер, при помощи которого резолвится доменное имя вашего хоста, что понять - поменялось оно или нет&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# можно оставить пустым, тогда будет использоваться сервер указанный в /etc/resolv.conf&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#dns=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;dns&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;8.8.8.8
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# пока используется получение IP адреса только с интерфейса&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;use&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;ppp999
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#use=web&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Логин и пароль для обновления DDNS (в случае dnspark.com логин к аккаунту и логин для обновления записей - разные сущности, второй заводится в админке)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;login&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;DDNS_UPDATE_LOGIN
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;password&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;DDNS_UPDATE_PASSWORD
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# вроде как не нужно уже :)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;libdir&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/var/lib/dnspark
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;prev_file&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$libdir&lt;/span&gt;/prev
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;prev_ip&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;cat &lt;span class=&#34;nv&#34;&gt;$prev_file&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;get_ip_if&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ifconfig &lt;span class=&#34;nv&#34;&gt;$if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep inet &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; awk &lt;span class=&#34;s1&#34;&gt;&amp;#39;{print($2)}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;get_ip_web&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# TODO: задел на будушее&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;get_prev_ip&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    host &lt;span class=&#34;nv&#34;&gt;$host&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$dns&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep &lt;span class=&#34;s2&#34;&gt;&amp;#34;^&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$host&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep &lt;span class=&#34;s1&#34;&gt;&amp;#39;has address&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; awk &lt;span class=&#34;s1&#34;&gt;&amp;#39;{print($4)}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;prev_ip&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;eval&lt;/span&gt; get_prev_ip&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;current_ip&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;eval&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;get_ip_&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$use&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Обновляем&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$prev_ip&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; !&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$current_ip&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Prev:    &amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$prev_ip&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Current: &amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$current_ip&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Updating...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;eval&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;curl --retry 10 &amp;#39;https://&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$login&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$password&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;@www.dnspark.net/api/dynamic/update.php?hostname=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$host&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;amp;ip=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$current_ip&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#39;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;ссылки&#34;&gt;Ссылки&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.dnspark.com/support/developers/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.dnspark.com/support/developers/&lt;/a&gt; - информация как тестировать свои клиенты обновления dnspark&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.dnspark.com/support/developers/updateSpecs.php&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.dnspark.com/support/developers/updateSpecs.php&lt;/a&gt; - строка запроса для обновления записей&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.dnspark.com/support/developers/resultCodes.php&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.dnspark.com/support/developers/resultCodes.php&lt;/a&gt; - возможные ответы сервера (у меня в скрипте не учитываются)&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Новый адрес блога</title>
      <link>https://htrd.su/blog/2012/03/26/novyj_adres_bloga/</link>
      <pubDate>Mon, 26 Mar 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/03/26/novyj_adres_bloga/</guid>
      <description>&lt;p&gt;Обзавёлся доменом второго уровня: 
&lt;a href=&#34;https://www.nic.ru/whois/?query=HTRD.SU&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;HTRD.SU&lt;/a&gt;. Как запомнить? А достаточно просто:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Из моего ника выбрасываем все гласные буквы: HaTReD =&amp;gt; HTRD&lt;/li&gt;
&lt;li&gt;Смотрим на клавиатуру: буквы образуют как бы трапецию, набираясь в одном направлении: H (влево вверх) T (влево) R (влево вниз) D&lt;/li&gt;
&lt;li&gt;Домен .SU просто запоминаем (да-да, я родился в Советском Союзе :)&lt;/li&gt;
&lt;li&gt;&amp;hellip;&lt;/li&gt;
&lt;li&gt;PROFIT!&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Посему новый адрес блога: 
&lt;a href=&#34;https://htrd.su&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;HTTPS://HTRD.SU&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Старый адрес будет доступен ещё неопределённое время. А может и вообще останется как fail-over. Или будет использоваться для доступа домой&amp;hellip; В общем не решил ещё :)&lt;/p&gt;
&lt;p&gt;Что ещё планируется в ближайшем будущем:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;переезд на более стабильную площадку&lt;/li&gt;
&lt;li&gt;небольшая заметка: как это всё использовать с Dynamic DNS?&lt;/li&gt;
&lt;/ol&gt;</description>
    </item>
    
    <item>
      <title>sdict - небольшой скрипт-оболочка для StarDict (qstardict и sdcv)</title>
      <link>https://htrd.su/blog/2012/03/24/sdict_-_nebolshoj_skript-obolochka_dlja_stardict/</link>
      <pubDate>Sat, 24 Mar 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/03/24/sdict_-_nebolshoj_skript-obolochka_dlja_stardict/</guid>
      <description>&lt;p&gt;Могу напугать некоторых, но в стародавние времена со словарями (имеется в виду - удобные программы-оболочки и сами словари) в Linux было, мягко сказать, не густо. В то время я настроил у себя дома словарный сервер &lt;a href=&#34;https://ru.wikipedia.org/wiki/dict%7cdictd&#34; target=&#34;_blank&#34;&gt;dict|dictd&lt;/a&gt;
 (боле подробно на английском: &lt;a href=&#34;https://en.wikipedia.org/wiki/dict&#34; target=&#34;_blank&#34;&gt;dict&lt;/a&gt;
), сначала просто на локальном хосте, потом, когда появилось ещё парочку компьютеров и достаточно дешёвый доступ в интернет сервер стал использоваться и на них, а так же с работы.&lt;/p&gt;
&lt;p&gt;Удобным было почти всё:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;приятная консольная программка &lt;code&gt;dict&lt;/code&gt; - для быстрых запросов&lt;/li&gt;
&lt;li&gt;возможность настроить словарную базу только в одном месте, а на остальных компьютерах указать только адрес сервера&lt;/li&gt;
&lt;li&gt;прекрасная графическая программка &lt;code&gt;kdict&lt;/code&gt;, которая, запускаясь, проверяла буфер обмена и если там что-то было - переводила его (программа проверяла запущенные копии, запускалась в одном экземпляре)&lt;/li&gt;
&lt;/ul&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;code&gt;kdict&lt;/code&gt; со своими удобными свойствами канула в лету (уже и не знаю - вообще она существует, но переводить из буфера обмена она как-то перестала)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Пришлось искать дополнительное, оффлайн решение, желательно не менее функциональное. Благо, что при этом и прогресс не стоял на метсе, появилась чудная программа StarDict, словари для которой на ура переделывались формата &lt;code&gt;dictd&lt;/code&gt; да и оболочки были разнообразны:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;stardict&lt;/strong&gt; - написана на Gtk+, каноническая версия&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;qstardict&lt;/strong&gt; - оболочка на Qt4, по своими возможностям оказалась очень похожа на полюбившийся мне &lt;code&gt;kdict&lt;/code&gt;, в частности возможности перевода содержимого буфера обмена, стоит ли говорить, что мой выбор остановился на ней? Плюс программа успешно управляется путём посылки DBus уведомлений, что и будет позже мной использовано.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;sdcv&lt;/strong&gt; - консольная программа для запроса перевода, по сути аналог &lt;code&gt;dict&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Теперь подробнее остановлюсь на &lt;code&gt;qstardict&lt;/code&gt;, особенно на работе на переводе содержимого буфера обмена.&lt;/p&gt;
&lt;p&gt;Тут достаточно всё просто, но специфично: в настройках говорится, следить за буфером - если там появляется новое значение, показывается всплывающее окно с переводом (или не показывается, если, допустим перевода не найдено и в настройках стоит соответствующий параметр). Можно задавать модификатор - что бы оно не реагировало на каждое выделение.&lt;/p&gt;
&lt;p&gt;Мне показался такой вариант не очень удобным. Но не беда - благо программа может управляться по DBus, в частности, для показа этого самого всплывающего окна с переводом. Тут же вспоминаем про удобную программу &lt;code&gt;xclip&lt;/code&gt; для работы с буфером обмена из состава Xorg, примешиваем немножно универсальности для работы из X11 или из консоли и получаем такой скрипт:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#!/bin/sh
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;check_prog&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt; res
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nv&#34;&gt;prog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;which &lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt; 2&amp;gt; /dev/null&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nv&#34;&gt;res&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$?&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$res&lt;/span&gt; -ne &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Can&amp;#39;t found program: &amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Try to install it via your package manager&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$prog&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;check_process&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pidof &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &amp;gt; /dev/null 2&amp;gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sdict_x11&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt; res
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nv&#34;&gt;qstardict&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;check_prog qstardict&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nv&#34;&gt;qdbus&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;check_prog qdbus&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  check_process &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$qstardict&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nv&#34;&gt;res&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$?&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$res&lt;/span&gt; -ne &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# for begin - start qstardict&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$qstardict&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &amp;gt; /dev/null 2&amp;gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    sleep &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$qdbus&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; org.qstardict.dbus /qstardict org.qstardict.dbus.showPopup &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$@&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$qdbus&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; org.qstardict.dbus /qstardict org.qstardict.dbus.showTranslation &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$@&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sdict_console&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nv&#34;&gt;sdcv&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;check_prog sdcv&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nv&#34;&gt;$sdcv&lt;/span&gt; -n &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$@&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# force no X11 version&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;no_x11&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;false&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;--no-x11&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nv&#34;&gt;no_x11&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;true&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nb&#34;&gt;shift&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# take word from commad line or from buffer&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;TRANSLATE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$@&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; -z &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nv&#34;&gt;xclip&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;check_prog xclip&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nv&#34;&gt;TRANSLATE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;`&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$xclip&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; -o`&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# run translation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; -z &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$DISPLAY&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; -o &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$no_x11&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;true&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  sdict_console &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$TRANSLATE&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$?&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  sdict_x11 &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$TRANSLATE&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$?&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Как она работает?&lt;/p&gt;
&lt;p&gt;Просто:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;при запуске проверяет, что установлена переменная DISPLAY и начинает работать с &lt;code&gt;qstardict&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;если переменная DISPLAY не задана, или первым аргументов в командной строке стоит &lt;code&gt;--no-x11&lt;/code&gt;, то работа начинается с консольной версией &lt;code&gt;sdcv&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;если в качестве аргументов &lt;code&gt;sdict&lt;/code&gt; передаются какие-то слова - пытается их перевести&lt;/li&gt;
&lt;li&gt;если список аргументов пуст - пытается получить содержимое буфера обмена при помощи &lt;code&gt;xclip&lt;/code&gt; и перевести его&lt;/li&gt;
&lt;li&gt;перед посылкой сообщения по DBus, проверяет, что &lt;code&gt;qstardict&lt;/code&gt; запущен, если нет - то запускает его, ждёт 2 секунды и пытается вызвать его для перевода (тут может быть скрыт подводный камень: у нас на работе есть терминальный сервер на Linux, и графических сессий там может быть много, соответственно у каждого пользователя может быть запущена своя версия qstardict, тут проверка запущенности qstardict может отработать некорретно - исправляется легко, но для себя пока не вижу необходимости, поэтому просто информирую)&lt;/li&gt;
&lt;li&gt;перед запросом команд &lt;code&gt;xclip&lt;/code&gt;, &lt;code&gt;qdbus&lt;/code&gt;, &lt;code&gt;qstardict&lt;/code&gt;, &lt;code&gt;sdcv&lt;/code&gt; производится проверка наличия их в пути поиска переменной окружения &lt;code&gt;$PATH&lt;/code&gt;, если не находится - программа выдаёт сообщение об их отсутствии на стандартный вывод и завершает свою работу со статусом 1. Обычно эти программы есть почти в каждом дистрибутиве Linux в одноимённом пакете, в случае ArchLinux:&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;^ Команда       ^ Пакет         ^ Команда для устрановки  ^ Примечание ^
| &lt;code&gt;xclip&lt;/code&gt;     | &lt;strong&gt;xclip&lt;/strong&gt;     | &lt;code&gt;pacman -S xclip&lt;/code&gt;     |            |
| &lt;code&gt;qdbus&lt;/code&gt;     | &lt;strong&gt;qt&lt;/strong&gt;        | &lt;code&gt;pacman -S qt&lt;/code&gt;        | поставится как зависимость при установке &lt;code&gt;qstardict&lt;/code&gt;   |
| &lt;code&gt;qstardict&lt;/code&gt; | &lt;strong&gt;qstardict&lt;/strong&gt; | &lt;code&gt;pacman -S qstardict&lt;/code&gt; |            |
| &lt;code&gt;sdcv&lt;/code&gt;      | &lt;strong&gt;sdcv&lt;/strong&gt;      | &lt;code&gt;pacman -S sdcv&lt;/code&gt;      |            |&lt;/p&gt;
&lt;p&gt;Собственно всё, после чего повесил у себя в XFCE4 вызов &lt;code&gt;sdict&lt;/code&gt; на горячую клавишу, когда надо, выделяю слово и жму её - смотрю перевод во всплывающем окошке.&lt;/p&gt;
&lt;p&gt;Пользуйтесь :)&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>TODO: Прикладная криптография</title>
      <link>https://htrd.su/blog/2012/03/23/todo_prikladnaja_kriptografija/</link>
      <pubDate>Fri, 23 Mar 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/03/23/todo_prikladnaja_kriptografija/</guid>
      <description>&lt;p&gt;Прочитать: 
&lt;a href=&#34;http://www.ssl.stu.neva.ru/psw/crypto/appl_rus/appl_cryp.htm&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.ssl.stu.neva.ru/psw/crypto/appl_rus/appl_cryp.htm&lt;/a&gt;&lt;br /&gt;
Одним файлом тут: 
&lt;a href=&#34;http://files.zipsites.ru/books/cryptoshn.pdf&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://files.zipsites.ru/books/cryptoshn.pdf&lt;/a&gt;&lt;br /&gt;
или у меня: 
&lt;a href=&#34;https://htrd.su/img//post/2012/03/23/todo_prikladnaja_kriptografija/cryptoshn.pdf&#34;&gt;cryptoshn.pdf&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;На ozon.ru: 
&lt;a href=&#34;http://www.ozon.ru/context/detail/id/1135241/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.ozon.ru/context/detail/id/1135241/&lt;/a&gt; (на момент публикации - нет в наличии)&lt;/p&gt;
&lt;p&gt;Обзор в &amp;ldquo;Компьютерре&amp;rdquo;: 
&lt;a href=&#34;http://www.computerra.ru/offline/2002/462/20458/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.computerra.ru/offline/2002/462/20458/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Так же, от того же автора: &amp;ldquo;Практическая криптография&amp;rdquo;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;DJVU: 
&lt;a href=&#34;http://www.kodges.ru/2007/12/15/prakticheskaja-kriptografija.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.kodges.ru/2007/12/15/prakticheskaja-kriptografija.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;OZON:
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.ozon.ru/context/detail/id/2153578/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.ozon.ru/context/detail/id/2153578/&lt;/a&gt; (нет в наличии)&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.ozon.ru/context/detail/id/4884079/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.ozon.ru/context/detail/id/4884079/&lt;/a&gt; (нет в наличии)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Интерактивный tclsh и readline</title>
      <link>https://htrd.su/blog/2012/03/22/interaktivnyj_tclsh_i_readline/</link>
      <pubDate>Thu, 22 Mar 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/03/22/interaktivnyj_tclsh_i_readline/</guid>
      <description>&lt;p&gt;Стандартная интерактивная оболочка tclsh обладает крайне неприятной особенностью по работе с пользовательским вводом.&lt;/p&gt;
&lt;p&gt;На данный момент нашёл такой пакет: 
&lt;a href=&#34;http://tclreadline.sourceforge.net/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;tclreadline&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Для пользователей ArchLinux в AUR лежит 
&lt;a href=&#34;https://aur.archlinux.org/packages.php?ID=2230&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;пакет&lt;/a&gt;, но он вряд ли соберётся на x86_64 архитектуре, да и другие недочёты есть. В общем, откорректировал немного: 
&lt;a href=&#34;http://dl.dropbox.com/u/14324405/tclsh/tclreadline-2.1.0-6.src.tar.gz&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://dl.dropbox.com/u/14324405/tclsh/tclreadline-2.1.0-6.src.tar.gz&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Теперь собираем, ставим, прописываем в &lt;code&gt;~/.tclshrc&lt;/code&gt; примерно следующее:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-tcl&#34; data-lang=&#34;tcl&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$tcl_interactive&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	  &lt;span class=&#34;nb&#34;&gt;package&lt;/span&gt; require tclreadline
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	    &lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;tclreadline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;Loop
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;За подробностями в man&amp;rsquo;ы и на сайта разработчика, к примеру, более увесистый конфиг: 
&lt;a href=&#34;http://tclreadline.sourceforge.net/sample.tclshrc&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://tclreadline.sourceforge.net/sample.tclshrc&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Так же следует не забывать пользоваться командой man:
man tclreadline&lt;/p&gt;
&lt;p&gt;Примерно так будет выглядеть tclsh после установки:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2012/03/22/interaktivnyj_tclsh_i_readline/tclreadline.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Пользуясь случаем, хочу так же упомянуть и графическую tcl-консоль: 
&lt;a href=&#34;http://tkcon.sourceforge.net/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;tkcon&lt;/a&gt;, для неё же есть и рабочий PKGBUILD в AUR: 
&lt;a href=&#34;https://aur.archlinux.org/packages.php?ID=6881&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://aur.archlinux.org/packages.php?ID=6881&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Quartz Scheduler</title>
      <link>https://htrd.su/blog/2012/03/21/quartz_scheduler/</link>
      <pubDate>Wed, 21 Mar 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/03/21/quartz_scheduler/</guid>
      <description>&lt;p&gt;Потребовалось использовать в одном проекте данный планировщик (
&lt;a href=&#34;http://quartz-scheduler.org/%29&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://quartz-scheduler.org/)&lt;/a&gt;. Запускается на ура в виде бина в JBoss&amp;hellip; Но вот тут с размаху врезался лбом в косяк:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;планировщик регистрируется в JNDI&lt;/li&gt;
&lt;li&gt;я успешно получаю инстанс планировщика&lt;/li&gt;
&lt;li&gt;добавляю свои задачу со своим воркером&lt;/li&gt;
&lt;li&gt;&amp;hellip;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;И кряк вам с хреном, а не профит:
ClassNotFoundException&amp;hellip;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Централизованный&amp;rdquo; инстанс планировщика не видит ваших классов-реализаций интерфейса Job. При ближайшем рассмотрении оно и понятно. При дальнейшем - не понятно зачем тогда нужно запускать Quartz как сервис, может кто объяснит?&lt;/p&gt;
&lt;p&gt;В результате сделал, что бы внутри приложения запускался свой инстанс Quartz.&lt;/p&gt;
&lt;p&gt;Для сих нужд уже есть два класса:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;QuartzInitializerListener&lt;/li&gt;
&lt;li&gt;QuartzInitializerServlet&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Как их использовать - есть в документации на API. Я немного расширил QuartzInitializerListener, сделав регистрацию полученного инстанса планировщика в JNDI, выглядит примерно так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;package&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;net.homelinux.hatred.quartz&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;javax.naming.InitialContext&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;javax.naming.Name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;javax.naming.NamingException&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;javax.servlet.ServletContext&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;javax.servlet.ServletContextEvent&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;org.jboss.naming.NonSerializableFactory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;org.quartz.Scheduler&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;org.quartz.SchedulerException&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;org.quartz.impl.StdSchedulerFactory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;org.slf4j.Logger&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;org.slf4j.LoggerFactory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;cm&#34;&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * Обёртка для стандартного QuartzInitializerListener, что бы зарегистрировать фабрику в том числе
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * за пределами Сервлет-контекстов
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * &amp;lt;p/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * Для подробностей смотреть параметры конфигурации org.quartz.ee.servlet.QuartzInitializerListener:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * http://quartz-scheduler.org/api/2.1.0/org/quartz/ee/servlet/QuartzInitializerListener.html
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; *
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * @author Alexander &amp;#39;hatred&amp;#39; Drozdov
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; *         &amp;lt;p/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; *         Date: 19.03.12
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; *         Time: 11:08
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; */&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;QuartzInitializerListener&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;extends&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;org&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;quartz&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;ee&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;servlet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;QuartzInitializerListener&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// Logger&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;private&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;static&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;final&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Logger&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LoggerFactory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getLogger&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;QuartzInitializerListener&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// TODO: хранить где-то в другом месте&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;static&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;final&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;JNDI_NAME&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;MyAppQuartzScheduler&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;@Override&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;contextInitialized&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ServletContextEvent&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sce&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;super&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;contextInitialized&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sce&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ServletContext&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ctx&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sce&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getServletContext&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;StdSchedulerFactory&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;factory&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;StdSchedulerFactory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ctx&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getAttribute&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;QuartzInitializerListener&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;QUARTZ_FACTORY_KEY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;try&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rebind&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;factory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;JNDI_NAME&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;catch&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;NamingException&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;printStackTrace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;catch&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SchedulerException&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;printStackTrace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;@Override&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;contextDestroyed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ServletContextEvent&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sce&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;unbind&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;JNDI_NAME&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;super&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;contextDestroyed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sce&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;///&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// Биндимся к JNDI&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;///&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;private&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;rebind&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;StdSchedulerFactory&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;factory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;throws&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;NamingException&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SchedulerException&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;InitialContext&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rootCtx&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;try&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rootCtx&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;InitialContext&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Name&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fullName&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rootCtx&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getNameParser&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;parse&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Scheduler&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;scheduler&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;factory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getScheduler&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;NonSerializableFactory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;rebind&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fullName&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;scheduler&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;finally&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rootCtx&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;try&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rootCtx&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;close&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;catch&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;NamingException&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ignore&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;private&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;unbind&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;InitialContext&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rootCtx&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;try&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rootCtx&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;InitialContext&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rootCtx&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;unbind&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;NonSerializableFactory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;unbind&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;catch&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;NamingException&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;warn&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Failed to unbind scheduler with jndiName: &amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;finally&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rootCtx&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;try&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rootCtx&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;close&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;catch&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;NamingException&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ignore&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;после чего получить доступ к фабрике можно по JNDI имени &amp;ldquo;MyAppQuartzScheduler&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Затем настройки самого Quatrz.&lt;/p&gt;
&lt;p&gt;В случае JBoss 6.0, я их сохранил в директории &lt;code&gt;./conf&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-properties&#34; data-lang=&#34;properties&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Default Properties file for use by StdSchedulerFactory&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# to create a Quartz Scheduler Instance, if a different&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# properties file is not explicitly specified.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#org.quartz.scheduler.classLoadHelper.class = org.quartz.simpl.CascadingClassLoadHelper&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#org.quartz.scheduler.classLoadHelper.class = org.quartz.simpl.LoadingLoaderClassLoadHelper&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;org.quartz.scheduler.instanceName&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;PodryadQuartzScheduler&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;org.quartz.scheduler.rmi.export&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;org.quartz.scheduler.rmi.proxy&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;org.quartz.scheduler.xaTransacted&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;org.quartz.scheduler.threadsInheritContextClassLoaderOfInitializer&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;org.quartz.threadPool.class&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;org.quartz.simpl.SimpleThreadPool&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;org.quartz.threadPool.threadCount&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;10&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;org.quartz.threadPool.threadPriority&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;org.quartz.jobStore.class&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;org.quartz.impl.jdbcjobstore.JobStoreCMT&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;org.quartz.jobStore.driverDelegateClass&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;  &lt;span class=&#34;s&#34;&gt;org.quartz.impl.jdbcjobstore.StdJDBCDelegate&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;org.quartz.jobStore.dataSource&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;QUARTZ&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;org.quartz.jobStore.nonManagedTXDataSource&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;QUARTZ_NO_TX&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;org.quartz.jobStore.tablePrefix&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;QRTZ_&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;org.quartz.dataSource.QUARTZ.jndiURL&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;java:jdbc/quartz_scheduler&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;org.quartz.dataSource.QUARTZ_NO_TX.jndiURL&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;java:jdbc/quartz_scheduler&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#org.quartz.jobStore.driverDelegateClass =  org.quartz.impl.jdbcjobstore.StdJDBCDelegate&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#org.quartz.jobStore.dataSource = QUARTZ&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#org.quartz.jobStore.tablePrefix = QRTZ_&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#org.quartz.dataSource.QUARTZ.jndiURL = java:jdbc/quartz_scheduler&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Отдельно стоит отметить и описание Datasource для подключения к базе.&lt;/p&gt;
&lt;p&gt;Если вы его объявите как &amp;rsquo;local-tx-datasource&amp;rsquo; получите небольшой обломс, поэтому нужно объявлять как &amp;lsquo;xa-datasource&amp;rsquo;, примерно следующим образом:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-xml&#34; data-lang=&#34;xml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&amp;lt;?xml version=&amp;#34;1.0&amp;#34; encoding=&amp;#34;UTF-8&amp;#34;?&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&amp;lt;!-- See http://www.jboss.org/community/wiki/Multiple1PC for information about local-tx-datasource --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&amp;lt;!-- $Id: mysql-ds.xml 97536 2009-12-08 14:05:07Z jesper.pedersen $ --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&amp;lt;!--  Datasource config for MySQL using 3.0.9 available from:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;http://www.mysql.com/downloads/api-jdbc-stable.html
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;--&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;datasources&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- Quartz datasource, must be &amp;#39;xa-datasource&amp;#39;, but no &amp;#39;local-tx-datasource&amp;#39; --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;xa-datasource&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;jndi-name&amp;gt;&lt;/span&gt;jdbc/quartz_scheduler&lt;span class=&#34;nt&#34;&gt;&amp;lt;/jndi-name&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;xa-datasource-class&amp;gt;&lt;/span&gt;com.mysql.jdbc.jdbc2.optional.MysqlXADataSource&lt;span class=&#34;nt&#34;&gt;&amp;lt;/xa-datasource-class&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;xa-datasource-property&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;URL&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;jdbc:mysql://127.0.0.1:3306/jboss_quartz?useEncoding=true&lt;span class=&#34;ni&#34;&gt;&amp;amp;amp;&lt;/span&gt;characterEncoding=UTF-8&lt;span class=&#34;nt&#34;&gt;&amp;lt;/xa-datasource-property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;xa-datasource-property&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;User&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;DB_USER&lt;span class=&#34;nt&#34;&gt;&amp;lt;/xa-datasource-property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;xa-datasource-property&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Password&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;DB_PASSWORD&lt;span class=&#34;nt&#34;&gt;&amp;lt;/xa-datasource-property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;min-pool-size&amp;gt;&lt;/span&gt;5&lt;span class=&#34;nt&#34;&gt;&amp;lt;/min-pool-size&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;max-pool-size&amp;gt;&lt;/span&gt;100&lt;span class=&#34;nt&#34;&gt;&amp;lt;/max-pool-size&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;exception-sorter-class-name&amp;gt;&lt;/span&gt;org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter&lt;span class=&#34;nt&#34;&gt;&amp;lt;/exception-sorter-class-name&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;valid-connection-checker-class-name&amp;gt;&lt;/span&gt;org.jboss.resource.adapter.jdbc.vendor.MySQLValidConnectionChecker&lt;span class=&#34;nt&#34;&gt;&amp;lt;/valid-connection-checker-class-name&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;new-connection-sql&amp;gt;&lt;/span&gt;SELECT 1&lt;span class=&#34;nt&#34;&gt;&amp;lt;/new-connection-sql&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;metadata&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;nt&#34;&gt;&amp;lt;type-mapping&amp;gt;&lt;/span&gt;mySQL&lt;span class=&#34;nt&#34;&gt;&amp;lt;/type-mapping&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;/metadata&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;/xa-datasource&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/datasources&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;PS если кто объяснит, для чего всё же нужен Quartz в виде сервиса в JBoss, буду премного благодарен.
PPS ещё, ориентировочно с версии Quartz 2.0, несколько инстансев оного могут использовать одну базу, нужно только, что бы имена инстансев различались, дабы не было конфликтов.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>RESTEasy, JAXB, XML, JSON и другие</title>
      <link>https://htrd.su/blog/2012/03/21/resteasy_jaxb_xml_json_i_drugie/</link>
      <pubDate>Wed, 21 Mar 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/03/21/resteasy_jaxb_xml_json_i_drugie/</guid>
      <description>&lt;p&gt;Столкнулся с непонятной проблемой в JBoss и RESTEasy:&lt;br/&gt;&lt;br/&gt;
Когда сервис принимает или отдаёт данные в JSON формате Jackson (сериализатор/десериализатор JSON) игнорирует JAXB аннотации &lt;code&gt;@XmlElement(name = &amp;quot;bla_bla&amp;quot;)&lt;/code&gt; вместо указанного имя поля всегда используется имя поля в классе, т.е. такое:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@XmlRootElement&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;SimpleJson&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;@XmlElement&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;my_name&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;megaName&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;сериализуется в это:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;megaName&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;а не, как ожидается, в это:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;my_name&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;А так же игнорируется &lt;code&gt;@XmlJavaTypeAdapter&lt;/code&gt;, что есть пичалька.&lt;/p&gt;
&lt;p&gt;Тут по ходу сочинения заметки пришло в голову, что Джексон не настроен использовать &lt;code&gt;JaxbAnnotationIntrospector&lt;/code&gt; - повод рассмотреть.&lt;/p&gt;
&lt;p&gt;Пока же использую work-around, в виде дополнительного навешивания Jackson-аннотаций вроде:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@XmlRootElement&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;SimpleJson&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;@XmlElement&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;my_name&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;@XmlJavaTypeAdapter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Iso8601DateAdapter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;@JsonProperty&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;my_name&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;@JsonSerialize&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;using&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;JsonIso8601DateSeializer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;@JsonDeserialize&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;using&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;JsonIso8601DateDeserializer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Date&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;megaName&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Подкатом, бонусом, классы &lt;code&gt;Iso8601DateAdapter&lt;/code&gt;, &lt;code&gt;JsonIso8601DateSeializer&lt;/code&gt;, &lt;code&gt;JsonIso8601DateDeserializer&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;package&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;net.homelinux.hatred.ws.common.data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;java.text.DateFormat&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;java.text.SimpleDateFormat&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;java.util.Date&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;java.util.logging.Level&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;javax.xml.bind.annotation.adapters.XmlAdapter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;org.slf4j.Logger&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;org.slf4j.LoggerFactory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Iso8601DateAdapter&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;extends&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;XmlAdapter&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Date&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// Logger&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;private&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;static&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;final&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Logger&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LoggerFactory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getLogger&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Iso8601DateAdapter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;private&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;final&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;static&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DateFormat&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_df&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SimpleDateFormat&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;yyyy-MM-dd&amp;#39;T&amp;#39;HH:mm:ssZ&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;@Override&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;marshal&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Date&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;date&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;result&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;try&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;result&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_df&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;format&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;date&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// Add &amp;#39;:&amp;#39; to TZ&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;result&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;result&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;substring&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;22&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;:&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;result&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;substring&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;22&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;result&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;length&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;info&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Convert date to string: {}&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;result&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;catch&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Exception&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Could not date to string &amp;#39;{}&amp;#39;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;date&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;toString&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;result&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;@Override&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Date&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;unmarshal&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Date&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;result&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;try&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// Strip &amp;#39;:&amp;#39; from TZ&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;substring&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;22&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;substring&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;23&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;length&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;result&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_df&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;parse&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;info&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Convert string to date: {}&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;result&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;catch&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Exception&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;format&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Could not parse date string &amp;#39;%s&amp;#39;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;result&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;package&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;net.homelinux.hatred.ws.common.data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;java.io.IOException&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;java.util.Date&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;org.codehaus.jackson.JsonGenerator&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;org.codehaus.jackson.JsonProcessingException&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;org.codehaus.jackson.map.JsonSerializer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;org.codehaus.jackson.map.SerializerProvider&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;cm&#34;&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * Jackson ISO8601 date serializer
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; *
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * @author Alexander &amp;#39;hatred&amp;#39; Drozdov
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; *         &amp;lt;p/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; *         Date: 20.03.12
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; *         Time: 15:15
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; */&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;JsonIso8601DateSeializer&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;extends&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;JsonSerializer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Date&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// Reuse exists adapter for JaxB&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;private&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;static&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;final&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Iso8601DateAdapter&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;adapter&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Iso8601DateAdapter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;@Override&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;serialize&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Date&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;date&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                          &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;JsonGenerator&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;jsonGenerator&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                          &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SerializerProvider&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;serializerProvider&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;throws&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;IOException&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;JsonProcessingException&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;serialized&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;adapter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;marshal&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;date&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;jsonGenerator&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;writeString&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;serialized&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;package&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;net.homelinux.hatred.ws.common.data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;java.io.IOException&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;java.util.Date&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;org.codehaus.jackson.JsonParser&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;org.codehaus.jackson.JsonProcessingException&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;org.codehaus.jackson.map.DeserializationContext&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;org.codehaus.jackson.map.JsonDeserializer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;cm&#34;&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * Jackson ISO8601 date deserializer
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; *
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * @author Alexander &amp;#39;hatred&amp;#39; Drozdov
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; *         &amp;lt;p/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; *         Date: 20.03.12
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; *         Time: 15:21
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; */&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;JsonIso8601DateDeserializer&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;extends&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;JsonDeserializer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Date&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// Reuse exists adapter for JaxB&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;private&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;static&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;final&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Iso8601DateAdapter&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;adapter&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Iso8601DateAdapter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;@Override&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Date&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;deserialize&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;JsonParser&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;jsonParser&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DeserializationContext&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;deserializationContext&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;throws&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;IOException&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;JsonProcessingException&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dateString&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;jsonParser&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getText&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Date&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;deserialized&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;adapter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;unmarshal&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dateString&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;deserialized&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Клавитурные сокращения в vimdiff</title>
      <link>https://htrd.su/blog/2012/03/21/klaviturnye_sokraschenija_v_vimdiff/</link>
      <pubDate>Wed, 21 Mar 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/03/21/klaviturnye_sokraschenija_v_vimdiff/</guid>
      <description>&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;strong&gt;ctrl+w ctrl+w&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Переключиться на другое окно.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;ctrl+w Up/Down/Left/Right&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Переключиться на другое окно.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;do&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Получить изменения из другого окна в текущее.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;dp&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Вставить изменения из текущего окна в другое.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;]c&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Перейти к следующему изменению.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;[c&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Перейти к предыдущему изменению.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;:diffupdate&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;diff update&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;:syntax off&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;выключить подсветку синтаксиса&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;zo&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;раскрыть свернутый кусок текста&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;zc&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;свернуть кусок текста&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;</description>
    </item>
    
    <item>
      <title>Закрытые репозитории в Gitorious</title>
      <link>https://htrd.su/blog/2012/03/13/zakrytye_repozitorii_v_gitorious/</link>
      <pubDate>Tue, 13 Mar 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/03/13/zakrytye_repozitorii_v_gitorious/</guid>
      <description>&lt;p&gt;На правах заметки:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://blog.gitorious.org/2012/02/29/private-repositories-2/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://blog.gitorious.org/2012/02/29/private-repositories-2/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://gitorious.org/gitorious/pages/PrivateRepositories&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://gitorious.org/gitorious/pages/PrivateRepositories&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Соревнования по технике спортивного туризма &#34;Вызов 2012&#34;</title>
      <link>https://htrd.su/blog/2012/02/27/sorevnovanija_po_texnike_sportivnogo_turizma_vyzov_2012/</link>
      <pubDate>Mon, 27 Feb 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/02/27/sorevnovanija_po_texnike_sportivnogo_turizma_vyzov_2012/</guid>
      <description>&lt;p&gt;В эти выходные на базе школы №53 г.Владивостока прошли зальные соревнования по технике спортивного туризма. Был в составе судейского корпуса, гудят ноги, но вцелом понравилось, особенно наведенение дистанции :)&lt;/p&gt;
&lt;p&gt;Фотографии можно поглядеть тут: 
&lt;a href=&#34;http://gfst-vl.ru/v12/v_photo2012.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://gfst-vl.ru/v12/v_photo2012.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Информация по соревнованиям: 
&lt;a href=&#34;http://gfst-vl.ru/v12/v12.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://gfst-vl.ru/v12/v12.html&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Набор для кросс-компиляции для Linux на ARM</title>
      <link>https://htrd.su/blog/2012/02/24/nabor_dlja_kross-kompiljacii_dlja_linux_na_arm/</link>
      <pubDate>Fri, 24 Feb 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/02/24/nabor_dlja_kross-kompiljacii_dlja_linux_na_arm/</guid>
      <description>&lt;p&gt;Потребовалось сделать окружение для отстройки приложений для системы Linux, запущенной на платформе с процессором ARM.&lt;/p&gt;
&lt;p&gt;Внутри есть eglibc, поэтому решено было попробовать сделать окружение с этой библиотекой Си, а не повсеместно используемой newlib.&lt;/p&gt;
&lt;p&gt;Процесс чтения манов, проб, нервов занял около двух дней. Помогли разобраться следующие документы:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.eglibc.org/cgi-bin/viewvc.cgi/trunk/libc/EGLIBC.cross-building?view=markup&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.eglibc.org/cgi-bin/viewvc.cgi/trunk/libc/EGLIBC.cross-building?view=markup&lt;/a&gt; - официальное руководство по кросс-компиляции eglibc&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.pgroup.com/userforum/viewtopic.php?t=1636&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.pgroup.com/userforum/viewtopic.php?t=1636&lt;/a&gt; - помогло разобраться в одной ошибке&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://gcc.gnu.org/install/configure.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://gcc.gnu.org/install/configure.html&lt;/a&gt; - изучение секции &lt;strong&gt;Cross-Compiler-Specific Options&lt;/strong&gt; в частности на предмет опций &lt;code&gt;--with-sysroot&lt;/code&gt; и &lt;code&gt;--with-build-sysroot&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Особо поразило мозг решение проблемы &amp;ldquo;кто первый: курица или яйцо?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;В результате получился набор правил для сборки окружение под ArchLinux (пакеты идут в порядке сборки):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://aur.archlinux.org/packages.php?ID=56960&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;arm-linux-gnueabi-binutils&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://aur.archlinux.org/packages.php?ID=56961&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;arm-linux-gnueabi-linux-api-headers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://aur.archlinux.org/packages.php?ID=56962&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;arm-linux-gnueabi-gcc-stage1&lt;/a&gt; - первый кросс-компилятор для отстройки базовых компонент стандартной библиотеки&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://aur.archlinux.org/packages.php?ID=56963&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;arm-linux-gnueabi-eglibc-headers&lt;/a&gt; - базовый набор стандартной библиотеки - только заголовочные файлы и несколько стабов. Ещё не пригодна для линковки.&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://aur.archlinux.org/packages.php?ID=56964&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;arm-linux-gnueabi-gcc-stage2&lt;/a&gt; - компилятор уже пригодный для отстройки стандартной библиотеки&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://aur.archlinux.org/packages.php?ID=56965&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;arm-linux-gnueabi-eglibc&lt;/a&gt; - готовая стандартная библиотека Си&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://aur.archlinux.org/packages.php?ID=56966&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;arm-linux-gnueabi-gcc&lt;/a&gt; - компиляторы Си и Си++&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ну и несколько библиотек сразу в придачу:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://aur.archlinux.org/packages.php?ID=56967&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;arm-linux-gnueabi-zlib-static&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://aur.archlinux.org/packages.php?ID=56968&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;arm-linux-gnueabi-bzlib-static&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://aur.archlinux.org/packages.php?ID=57078&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;arm-linux-gnueabi-boost&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Axis VAPIX (HTTP API)</title>
      <link>https://htrd.su/blog/2012/02/16/axis_vapix/</link>
      <pubDate>Thu, 16 Feb 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/02/16/axis_vapix/</guid>
      <description>&lt;p&gt;Набор HTTP API для управления камерами Axis: 
&lt;a href=&#34;http://www.axis.com/techsup/cam_servers/dev/cam_http_api_index.php&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.axis.com/techsup/cam_servers/dev/cam_http_api_index.php&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>ImageMagick: вырезание произвольной области изображения</title>
      <link>https://htrd.su/blog/2012/02/16/imagemagick_vyrezanie_proizvolnoj_oblasti_ozobrazhenija/</link>
      <pubDate>Thu, 16 Feb 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/02/16/imagemagick_vyrezanie_proizvolnoj_oblasti_ozobrazhenija/</guid>
      <description>&lt;p&gt;Изначально задача была: извлечь из изображения область ограниченную полигоном, при этом оставшаяся часть изображения должна залиться &amp;ldquo;прозрачным&amp;rdquo; цветом (сиречь размер в пикселях не поменяется). Но как оказалось, можно ещё более обобщить эту задачу - вытаскивать произвольные области изображения.&lt;/p&gt;
&lt;p&gt;Рассматриваемый инструмент - ImageMagick или GraphicsMagick.&lt;/p&gt;
&lt;p&gt;Решение нашлось тут: 
&lt;a href=&#34;http://studio.imagemagick.org/pipermail/magick-users/2006-March/017281.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://studio.imagemagick.org/pipermail/magick-users/2006-March/017281.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Коротко суть: на основе исходного изображения (по сути используется только, что бы задать размеры) создаётся временное изображение-маска и нарисованной фигурой/фигурами которые образуются, если их обрисовать полигоном. Остальные пиксели на маске - прозрачные. Далее маска накладывается на исходное изображение и извлекается только нужная его часть&amp;hellip;&lt;/p&gt;
&lt;p&gt;Теперь на примере.&lt;/p&gt;
&lt;p&gt;Есть изображение:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2012/02/16/imagemagick_vyrezanie_proizvolnoj_oblasti_ozobrazhenija/screenshot.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Нужно вырезать область, заданную полигоном (для простоты - треугольник) с координатами: (10,10)-(400,200)-(100,200)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Шаг 1.&lt;/strong&gt; Делаем маску:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;convert screenshot.png -matte -fill none -draw &lt;span class=&#34;s1&#34;&gt;&amp;#39;color 0,0 reset&amp;#39;&lt;/span&gt; -fill white -draw &lt;span class=&#34;s1&#34;&gt;&amp;#39;polygon 10,10,400,200,100,200&amp;#39;&lt;/span&gt; polygon.png
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Получаем следующее (картинка белая :simple_smile: ):&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2012/02/16/imagemagick_vyrezanie_proizvolnoj_oblasti_ozobrazhenija/polygon.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Шаг 2.&lt;/strong&gt; Вырезаем область:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;convert screenshot.png -matte polygon.png -compose DstIn -composite out.png
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Получаем чего желаем:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2012/02/16/imagemagick_vyrezanie_proizvolnoj_oblasti_ozobrazhenija/out.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Команды рисования можно посмотреть тут: 
&lt;a href=&#34;http://www.imagemagick.org/Usage/draw/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.imagemagick.org/Usage/draw/&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>C/C&#43;&#43; and JSON</title>
      <link>https://htrd.su/blog/2012/02/14/c_and_json/</link>
      <pubDate>Tue, 14 Feb 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/02/14/c_and_json/</guid>
      <description>&lt;p&gt;Библиотеки/рекомендации для работы с JSON.&lt;/p&gt;
&lt;h2 id=&#34;c&#34;&gt;C&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.digip.org/jansson/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.digip.org/jansson/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://oss.metaparadigm.com/json-c/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://oss.metaparadigm.com/json-c/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;c-1&#34;&gt;C++&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://jsoncpp.sourceforge.net/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://jsoncpp.sourceforge.net/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://sourceforge.net/projects/libjson/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://sourceforge.net/projects/libjson/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;boost&#34;&gt;BOOST&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://blog.plaincodesource.ws/2011/03/json-c-boost.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://blog.plaincodesource.ws/2011/03/json-c-boost.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;qt4&#34;&gt;Qt4&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://qjson.sourceforge.net/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://qjson.sourceforge.net/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Математик и чёрт</title>
      <link>https://htrd.su/blog/2012/02/08/matematik_i_chjort/</link>
      <pubDate>Wed, 08 Feb 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/02/08/matematik_i_chjort/</guid>
      <description>&lt;p&gt;Просто прекрасно:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;часть 1: 
&lt;a href=&#34;http://www.youtube.com/watch?v=fgVLe7CK-CA&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.youtube.com/watch?v=fgVLe7CK-CA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;часть 2: 
&lt;a href=&#34;http://www.youtube.com/watch?v=Ga94Sl6pbbE&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.youtube.com/watch?v=Ga94Sl6pbbE&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Почему сейчас таких фильмов нет?&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Amp, a layer3 player</title>
      <link>https://htrd.su/blog/2012/01/17/amp_a_layer3_player/</link>
      <pubDate>Tue, 17 Jan 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/01/17/amp_a_layer3_player/</guid>
      <description>&lt;p&gt;Накатило, решил найти исходники этой программки. Что делает? Да просто берёт и играет mp3 файл. Чем знаменита? :) А тем, что это мой первый проигрыватель mp3 на Linux, который попался мне случайно на купленном диске во Владивостоке, во времена, когда у меня не было интернета и в своём городе-посёлке я был единственным пингвиноводом.&lt;/p&gt;
&lt;p&gt;
&lt;a href=&#34;https://htrd.su/img/post/2012/01/17/amp_a_layer3_player/amp-0_7_6.tgz&#34;&gt;Source1&lt;/a&gt; (на этом сайте) | 
&lt;a href=&#34;http://www.mp3-tech.org/programmer/sources/amp-0_7_6.tgz&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Source2&lt;/a&gt; | 
&lt;a href=&#34;http://www.mp3-tech.org/programmer/decoding.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Где найдено&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Никаких внешних зависимостей, исходники на чистом Си, в распакованном виде - 290Кб.&lt;/p&gt;
&lt;p&gt;PS при сборке на современных системах нужно будет применить такой патч:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-diff&#34; data-lang=&#34;diff&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;--- /home/hatred/download/tmp/mp3/amp-0.7.6/guicontrol.c	1997-08-23 22:30:51.000000000 +1100
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gu&#34;&gt;@@ -375,7 +375,8 @@
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;&lt;/span&gt; 	break;	
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       case GETHDR_SYN: warn(&amp;#34;oops, we&amp;#39;re out of sync.&amp;lt;br/&amp;gt;n&amp;#34;);
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; 	break;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;1.      default: 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+      default:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+        ;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt;       }
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       break;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     }
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;по сути, после &lt;code&gt;default:&lt;/code&gt;, поставить точку с запятой :simple_smile:&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>DokuWiki, BlogTNG, плагин googleplusone и доработка шаблона</title>
      <link>https://htrd.su/blog/2012/01/12/dokuwiki_blogtng_plagin_googleplusone_i_dorabotka_shablona/</link>
      <pubDate>Thu, 12 Jan 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/01/12/dokuwiki_blogtng_plagin_googleplusone_i_dorabotka_shablona/</guid>
      <description>&lt;p&gt;Что бы при использовании плагина googleplusone совместно с BlogTNG при попытке &amp;ldquo;поделиться&amp;rdquo; постом в 
&lt;a href=&#34;https://plus.google.com&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Google+&lt;/a&gt; вставлялся не абы какой текст, а то, что вам нужно, следует внести некоторые модификации в используемый вами шаблон.&lt;/p&gt;
&lt;p&gt;Обычно, главный файл шаблона, отвечающий за формирование страницы имеет имя &lt;code&gt;main.php&lt;/code&gt;, но это может и не совсем соответствовать вашим реалиям. Тогда его вам придётся поискать самим.&lt;/p&gt;
&lt;p&gt;Для начала, согласно 
&lt;a href=&#34;http://www.google.com/webmasters/&amp;#43;1/button/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;рекомендациям самого гугла&lt;/a&gt; к открывающий `` следует модифицировать таким образом, что бы указывалась схема на 
&lt;a href=&#34;http://schema.org&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://schema.org&lt;/a&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;html&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;...&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;itemscope&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;itemtype&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;http://schema.org/Blog&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;У меня он принял такой вид:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;html&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;xmlns&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;http://www.w3.org/1999/xhtml&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;itemscope&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;itemtype&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;http://schema.org/Blog&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Далее нужно добавить meta-заголовки:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- Google Plus Ready --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;meta&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;itemprop&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;lt;?php tpl_pagetitle()?&amp;gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;meta&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;itemprop&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;lt;?php echo pageDescription()?&amp;gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;meta&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;itemprop&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;image&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;/img/logo.png&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- Google Plus Ready --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Все заголовки, которые могут быть можно посмотреть в описании схемы Blog: 
&lt;a href=&#34;http://schema.org/Blog&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://schema.org/Blog&lt;/a&gt;, основные, на которые можно обратить внимание:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;name&lt;/strong&gt; - заголовок поста&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;description&lt;/strong&gt; - собственно короткое описание поста, которые и используется при попытке поделиться постом в Google+&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;image&lt;/strong&gt; - картинка поста, пока не придумал как использовать кроме как жестко задать лого блога, но теоретически, можно парсить вывод странички поста и брать первую картинку.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Далее, непонятная функция &lt;code&gt;pageDescription()&lt;/code&gt;, пишем её сами, помещаем в начало файла шаблона или в отдельный php-файл и подключаем директивой include. Сама функция выглядит так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;pageDescription&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;global&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$ID&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;global&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$REV&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$title&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$ret&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;p_wiki_xhtml_summary&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$ID&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$REV&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// Заменаяем в результирующем html все &amp;#34; на &amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;nv&#34;&gt;$ret&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;str_replace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;br/&amp;gt;&amp;#34;&amp;#34;, &amp;#34;&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#34;, $ret);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;    // Удаляем первый заголовок - незачем его повторять
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;    $ret = preg_replace(&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;lt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;hH&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;.*&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;/&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;hH&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;U&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;, &amp;#39;&amp;#39;, $ret);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;    // Теперь удаляем все html-теги, иначе текст не будет использоваться
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;    $ret = strip_tags($ret);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;    // Убираем дублирующиеся переводы строк (теоретически можно заменить одним регулярным выражением, но на данный момент не заморачивался)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;    while (true)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;    {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;        $old = $ret;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;        $ret = preg_replace(&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;mU&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;br/&amp;gt;n&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$ret&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$ret&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$old&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$ret&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;По сути, создаёт короткое описание поста. Используется функция &lt;code&gt;p_wiki_xhtml_summary()&lt;/code&gt;, объявленная устаревшей (deprecated), поэтому, если в будущем её удалят, придётся использовать &lt;code&gt;p_wiki_xhtml()&lt;/code&gt; и трюки вида:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$length&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;256&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$ret&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;preg_replace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/&amp;lt;br/&amp;gt;s+?(&amp;lt;br/&amp;gt;S+)?$/&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;substr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$ret&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$length&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;перед &lt;code&gt;return&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;На этом всё пока.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>&#34;Известия&#34;: Минобороны вместо русского Warcraft создало &#34;Морской бой&#34; и &#34;Тетрис&#34;, потратив 36 миллионов</title>
      <link>https://htrd.su/blog/2012/01/11/izvestija_minoborony_vmesto_russkogo_warcraft_sozdalo_morskoj_boj_i_tetris_potrativ_36_millionov/</link>
      <pubDate>Wed, 11 Jan 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/01/11/izvestija_minoborony_vmesto_russkogo_warcraft_sozdalo_morskoj_boj_i_tetris_potrativ_36_millionov/</guid>
      <description>&lt;p&gt;Читаем: 
&lt;a href=&#34;http://newsru.com/russia/10jan2012/games.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://newsru.com/russia/10jan2012/games.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Пацреоты - фперёт!&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Панорамы сделанные с воздушных змеев</title>
      <link>https://htrd.su/blog/2012/01/11/panoramy_sdelannye_s_vozdushnyx_zmeev/</link>
      <pubDate>Wed, 11 Jan 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/01/11/panoramy_sdelannye_s_vozdushnyx_zmeev/</guid>
      <description>&lt;p&gt;
&lt;a href=&#34;http://kapano.ucoz.ru/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://kapano.ucoz.ru/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Просто слов нет. Круто. Красиво. В основном - Владивосток и его окрестности.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>The C&#43;&#43; Lands</title>
      <link>https://htrd.su/blog/2012/01/10/the_c_lands/</link>
      <pubDate>Tue, 10 Jan 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/01/10/the_c_lands/</guid>
      <description>&lt;p&gt;
&lt;a href=&#34;http://softwaremaniacs.org/Images/alenacpp/cppmap-2012.png&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://softwaremaniacs.org/Images/alenacpp/cppmap-2012.png&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>hypot</title>
      <link>https://htrd.su/blog/2012/01/09/hypot/</link>
      <pubDate>Mon, 09 Jan 2012 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2012/01/09/hypot/</guid>
      <description>&lt;p&gt;&lt;code&gt;hypot(x, y)&lt;/code&gt; создан, что бы не звать &lt;code&gt;sqrt(x*x + y*y)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Подробности:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;man 3 hypot&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://en.wikipedia.org/wiki/Hypot&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://en.wikipedia.org/wiki/Hypot&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Robust Design Techniques for C Programs - на заметку</title>
      <link>https://htrd.su/blog/2011/12/14/robust_design_techniques_for_c_programs_-_na_zametku/</link>
      <pubDate>Wed, 14 Dec 2011 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/12/14/robust_design_techniques_for_c_programs_-_na_zametku/</guid>
      <description>&lt;p&gt;
&lt;a href=&#34;http://freetype.sourceforge.net/david/reliable-c.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://freetype.sourceforge.net/david/reliable-c.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;UPD 2014-06-09: сменил ссылку, прошлая убилась&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Полезная ссылочка на документацию от IBM</title>
      <link>https://htrd.su/blog/2011/12/14/poleznaja_ssylochka_na_dokumentaciju_ot_ibm/</link>
      <pubDate>Wed, 14 Dec 2011 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/12/14/poleznaja_ssylochka_na_dokumentaciju_ot_ibm/</guid>
      <description>&lt;p&gt;
&lt;a href=&#34;http://publib.boulder.ibm.com/infocenter/iseries/v5r3/index.jsp?topic=%2Frzahg%2Frzahgicprog2.htm&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://publib.boulder.ibm.com/infocenter/iseries/v5r3/index.jsp?topic=%2Frzahg%2Frzahgicprog2.htm&lt;/a&gt; - &lt;strong&gt;iSeries Information Center, версия 5, выпуск 3&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;В разделе есть примеры кода, достаточно много про сокеты 
&lt;a href=&#34;http://publib.boulder.ibm.com/infocenter/iseries/v5r3/index.jsp?topic=%2Frzahg%2Frzahgicprog2.htm&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;написано&lt;/a&gt; (в том числе и 
&lt;a href=&#34;http://publib.boulder.ibm.com/infocenter/iseries/v5r3/topic/rzab6/rzab6xmulticast.htm&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;мультикаст&lt;/a&gt; и 
&lt;a href=&#34;http://publib.boulder.ibm.com/infocenter/iseries/v5r3/topic/rzab6/rzab6x1ssl.htm&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;SSL&lt;/a&gt;).&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Boost, CMake, кросскомпиляция</title>
      <link>https://htrd.su/blog/2011/12/13/boost_cmake_krosskompiljacija/</link>
      <pubDate>Tue, 13 Dec 2011 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/12/13/boost_cmake_krosskompiljacija/</guid>
      <description>&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Q:&lt;/strong&gt; Boost.Asio - что нужно указать в cmake среди компонентов при поиске библиотеки boost?&lt;br/&gt;
&lt;strong&gt;A:&lt;/strong&gt; только библиотеку &lt;strong&gt;system&lt;/strong&gt;:
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cmake&#34; data-lang=&#34;cmake&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;find_package&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Boost&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;REQUIRED&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;COMPONENTS&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;system&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Q:&lt;/strong&gt; Boost.Thread и кроскомпиляция - что делать, если получаем ошибку вида: &lt;strong&gt;&lt;code&gt;undefined reference to &#39;boost::tss_cleanup_implemented()&#39;&lt;/code&gt;&lt;/strong&gt;?&lt;br/&gt;
&lt;strong&gt;A:&lt;/strong&gt; для начала чуток обратно: в случае Linux, в качестве компонента при поиске библиотеки нужно указывать &lt;code&gt;thread&lt;/code&gt;, а в случае windows (и кроскомпиляции): &lt;code&gt;thread_win32&lt;/code&gt;, т.е. необходимо писать что-то вроде такого кода:
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cmake&#34; data-lang=&#34;cmake&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;BOOST_COMPONENTS&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s&#34;&gt;program_options&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s&#34;&gt;system&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Boost thread library is different on Win/Linux
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;WIN32&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;BOOST_COMPONENTS&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;BOOST_COMPONENTS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;thread_win32&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;else&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;BOOST_COMPONENTS&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;BOOST_COMPONENTS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;thread&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;endif&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;find_package&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Boost&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;COMPONENTS&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;BOOST_COMPONENTS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;REQUIRED&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;Подсказку увидел тут: 
&lt;a href=&#34;https://lists.gnu.org/archive/html/mingw-cross-env-list/2010-11/msg00063.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://lists.gnu.org/archive/html/mingw-cross-env-list/2010-11/msg00063.html&lt;/a&gt;. Так же следует добавить следующее (при статической линковке):
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cmake&#34; data-lang=&#34;cmake&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;add_definitions&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;-DBOOST_THREAD_USE_LIB=1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;Далее, собственно, относительно самого вопроса, предлагают в случае появления такой ошибки при компиляции, поместить в любой свой исходник следующее:
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;boost&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;tss_cleanup_implemented&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;чистой воды хак :) Дополнительно написано тут: 
&lt;a href=&#34;https://solarcore.blogspot.com/2010/10/boost-c-threads-mingw-mac-os-x.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://solarcore.blogspot.com/2010/10/boost-c-threads-mingw-mac-os-x.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>inet_aton для windows</title>
      <link>https://htrd.su/blog/2011/12/13/inet_aton_dlja_windows/</link>
      <pubDate>Tue, 13 Dec 2011 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/12/13/inet_aton_dlja_windows/</guid>
      <description>&lt;p&gt;Если коротко: функиця заполняет структуру типа &lt;code&gt;in_addr&lt;/code&gt;, преобразуя сведения о хосте из строкового представления.&lt;/p&gt;
&lt;p&gt;У winsock2 нет такой функции. Есть более продвинутый аналог inet_pton, в POSIX он тоже есть, да вот только mingw про неё в windows не знает. Пичалька.&lt;/p&gt;
&lt;p&gt;Поэтому делаем примерно следующее:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#ifdef WIN32
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;static&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;inet_aton&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;char&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;in_addr&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;inp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cp&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;inp&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;unsigned&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;long&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;addr&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;inet_addr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;addr&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;INADDR_NONE&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;addr&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;INADDR_ANY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;inp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s_addr&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;addr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#endif
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;не верх совершенства и корректности, но для моих целей работало.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>MinGW: кросс-отладка win32 приложений в Linux</title>
      <link>https://htrd.su/blog/2011/12/13/mingw_kross-otladka_win32_prilozhenij_v_linux/</link>
      <pubDate>Tue, 13 Dec 2011 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/12/13/mingw_kross-otladka_win32_prilozhenij_v_linux/</guid>
      <description>&lt;p&gt;По сути парочка дополнений для этой статьи: 
&lt;a href=&#34;http://mingw-cross.sourceforge.net/cross_debug.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://mingw-cross.sourceforge.net/cross_debug.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Задача:&lt;/strong&gt; есть win32 приложение, собранное путём кросс-компиляции при помощи cmake и mingw32, нужно запустить его в отладчике и поймать на чём оно падает.&lt;/p&gt;
&lt;p&gt;Необходимый инстументарий:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;установленный mingw32&lt;/li&gt;
&lt;li&gt;wine (winconsole)&lt;/li&gt;
&lt;li&gt;бинарная версия gdb для windows, брать тут:&lt;br/&gt;&lt;br/&gt;  
&lt;a href=&#34;http://sourceforge.net/projects/mingw/files/MinGW/Extension/gdb/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://sourceforge.net/projects/mingw/files/MinGW/Extension/gdb/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;версия gdb, собранная для Linux, знающая как подгружать win32 приложения, собранные mingw. Тут нужно искать сборку для вашего дистрибутива, для пользователей ArchLinux я сделал PKGBUILD и поместил его в AUR:&lt;br/&gt;&lt;br/&gt;  
&lt;a href=&#34;https://aur.archlinux.org/packages.php?ID=54802&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://aur.archlinux.org/packages.php?ID=54802&lt;/a&gt;&lt;br/&gt;&lt;br/&gt; продвинутые пользователи могут подглядывать в мои правила сборки и собирать самостоятельно :)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Бинарную версию нужно будет распаковать, например в ~/bin/mingw32-gdb-win32/. В директорию ~/bin/mingw32-gdb-win32/bin/ при этом следует сделать следующие симлинки:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; ~/bin/mingw32-gdb-win32/bin/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -s /usr/i486-mingw32/bin/libexpat-1.dll .
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -s /usr/i486-mingw32/bin/libiconv-2.dll .
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -s /usr/i486-mingw32/bin/libintl-8.dll .
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Всё. Впринципе всё готово для отладки.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Запускаем сервер:```bash
wineconsole cmd /K ~/bin/mingw32-gdb-win32/bin/gdbserver.exe localhost:6000 test-app.exe [аргументы для программы с которыми она должна запускаться]&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  1. Запускаем клиент gdb:```bash
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;i486-mingw32-gdb test-app.exe
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol&gt;
&lt;li&gt;В запущенной версии gdb выполняем следующую команду:```gdb
(gdb) target remote localhost:6000&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-mysql&#34; data-lang=&#34;mysql&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Ну&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;и&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;по&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;сути&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;всё&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;дальше&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;делаем&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;всё&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;как&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;при&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;обычной&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;отладке&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;при&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;помощи&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gdb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;устанавливаем&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;точки&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;останова&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;смотрим&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;данные&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;делаем&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;бектрейсы&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;и&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;т&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;д&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Единственная&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;разница&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;что&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;для&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;запуска&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;приложения&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;нужно&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;использовать&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;не&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;команду&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;а&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;команду&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;continue&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;но&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;собственно&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;если&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;забудете&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;или&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;перепутаете&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;отладчик&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;вам&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;подскажет&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Если&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;программа&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;что&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;то&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;выбрасывает&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;на&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;консоль&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;вы&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;увидете&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;это&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;в&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;окне&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;wineconsole&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Если&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;захочется&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;графической&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;отладки&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;смотреть&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;в&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;сторону&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ddd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;и&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;ссылку&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;что&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;я&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;давал&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;в&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;начале&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;поста&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>winsock2: неблокирующийся сокет</title>
      <link>https://htrd.su/blog/2011/12/13/winsock2_neblokirujuschijsja_soket/</link>
      <pubDate>Tue, 13 Dec 2011 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/12/13/winsock2_neblokirujuschijsja_soket/</guid>
      <description>&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;unsigned&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;long&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;arg&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;ioctlsocket&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sockfd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;FIONBIO&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;arg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;в Linux:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;arg&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fcntl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sockfd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F_GETFL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;NULL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;arg&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;O_NONBLOCK&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;fcntl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sockfd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F_SETFL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;arg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;или универсальная функция:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;setSockNonblock&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sockfd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#ifdef WIN32
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;kt&#34;&gt;unsigned&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;long&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;arg&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;ioctlsocket&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sockfd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;FIONBIO&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;arg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#else
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;arg&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fcntl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sockfd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F_GETFL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;NULL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;arg&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;O_NONBLOCK&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;fcntl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sockfd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;F_SETFL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;arg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#endif
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Альтернативная сборка MinGW</title>
      <link>https://htrd.su/blog/2011/12/13/alternativnaja_sborka_mingw32/</link>
      <pubDate>Tue, 13 Dec 2011 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/12/13/alternativnaja_sborka_mingw32/</guid>
      <description>&lt;p&gt;Занимаясь разработкой небольшой программы, использующей сокеты, потоки и не использующей фреймворков, типа Qt, столкнулся с необходимостью собрать это дело для Windows. Подводных камней оказалось много, как результат познакомился с такими милыми сущностями, как Boost.Thread и Boost.Asio.&lt;/p&gt;
&lt;p&gt;Но тут вспомнилось, как мне уже приходилось собирать под Windows окружение, для компиляции исходников, использующих Boost и стало грустно. Грустно настолько, что оказалось проще сделать бинарники путём кросс-компиляции. И вот, когда дело было сделано, натыкаюсь на этот ресурс:&lt;br/&gt;&lt;br/&gt;

&lt;a href=&#34;http://nuwen.net/mingw.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://nuwen.net/mingw.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Стефан (автор этого поделия) предоставляет сборку MinGW включающую сам компилятор, набор полезных библиотек (включая Boost 1.47.0!) и некоторых полезных утилит. Пакет не требует установки, просто распаковываем в c:&lt;br/&gt;mingw и пользуемся.&lt;/p&gt;
&lt;p&gt;Так что на будущее, буду пробовать.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Таймеры в Windows</title>
      <link>https://htrd.su/blog/2011/12/13/tajmery_v_windows/</link>
      <pubDate>Tue, 13 Dec 2011 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/12/13/tajmery_v_windows/</guid>
      <description>&lt;p&gt;Внезапно, правда? :)&lt;/p&gt;
&lt;p&gt;Но волей судеб нужно было портировать программку, в которой использовался 
&lt;a href=&#34;http://www.opennet.ru/man.shtml?topic=nanosleep&amp;amp;category=2&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;nanosleep(2)&lt;/a&gt;. И&amp;hellip;&lt;/p&gt;
&lt;p&gt;Для внезапно стало откровением: В WINDOWS НЕТ ТАЙМЕРОВ ВЫСОКОГО РАЗРЕШЕНИЯ. А есть только по сути хаки и вызов 
&lt;a href=&#34;http://msdn.microsoft.com/en-us/library/windows/desktop/ms686298%28v=vs.85%29.aspx&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Sleep&lt;/a&gt;, с минимальным промежутком в 10мс.&lt;/p&gt;
&lt;p&gt;Наиболее часто рекомендуемый вариант:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;sleep_nsec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int64_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;interval&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;int64_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;time1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;time2&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sysFreq&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;QueryPerformanceCounter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LARGE_INTEGER&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;time1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;QueryPerformanceFrequency&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LARGE_INTEGER&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sysFreq&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;QueryPerformanceCounter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LARGE_INTEGER&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;time2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;while&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(((&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;time2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;time1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;1000.0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;1000.0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;double&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sysFreq&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;interval&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Но тут мы упираем процессор в полку. Есть вариант с использованием select, но, по отзывам, он так же может ждать не менее 10мс.&lt;/p&gt;
&lt;p&gt;Т.е., по сути, это единственный вариант для Windows, да ещё и не лишённый глюков: почти все процессоры уже умеют автоматическое понижение частоты&amp;hellip; Чуете? Пока работает цикл, значение sysFreq может измениться (поправьте меня, если я не прав) и время потекло.&lt;/p&gt;
&lt;p&gt;Кроме того, наткнулся на статью:&lt;br/&gt;&lt;br/&gt;

&lt;a href=&#34;http://www.codeproject.com/KB/system/timers_intro.aspx&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.codeproject.com/KB/system/timers_intro.aspx&lt;/a&gt; - Timers Tutorial&lt;/p&gt;
&lt;p&gt;Описываются различные вариант таймеров: стандартные win32, мультимедийные, Waitable Timers (не знаю как лучше перевести на русский язык), Queue Timers. Но опять таки, все периоды - миллисекунды.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Qt Creator &amp; doxygen</title>
      <link>https://htrd.su/blog/2011/12/12/qt_creator_doxygen/</link>
      <pubDate>Mon, 12 Dec 2011 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/12/12/qt_creator_doxygen/</guid>
      <description>&lt;p&gt;Сегодня пролетело в рассылке:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;Qt Creator master has recently got a feature, which has been requested a
few times, for Doxygen blocks generation. If you type &lt;code&gt;/**&lt;/code&gt; or &lt;code&gt;/*!&lt;/code&gt; and
press enter/return before a declaration, you&amp;rsquo;ll get something like:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;/*!
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; *
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * &amp;lt;br/&amp;gt;param data
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * &amp;lt;br/&amp;gt;param options
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * &amp;lt;br/&amp;gt;return
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;QString&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;generate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Options&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;options&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You can also opt whether or not you want an additional &lt;code&gt;&amp;lt;br/&amp;gt;brief&lt;/code&gt; command
and leading asterisks for comment continuation (when breaking lines).
The options are in Text Editor-&amp;gt;Completion-&amp;gt;Documentation Comments.&lt;/p&gt;
&lt;p&gt;Notice that the style is identified from the comment beginning. If you
start it with &lt;code&gt;/*!&lt;/code&gt; then the Qt style is used. Otherwise, the Java style
with the &lt;code&gt;@&lt;/code&gt; prefix for the commands is picked.&lt;/p&gt;
&lt;p&gt;Cheers,
Leandro&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Проверил - работает, удобно :)&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Hibernate &#43; SQLite</title>
      <link>https://htrd.su/blog/2011/12/01/hibernate_sqlite/</link>
      <pubDate>Thu, 01 Dec 2011 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/12/01/hibernate_sqlite/</guid>
      <description>&lt;p&gt;&lt;strong&gt;Шаг 1.&lt;/strong&gt; Взять sqlite-jdbc отсюда: 
&lt;a href=&#34;http://www.xerial.org/trac/Xerial/wiki/SQLiteJDBC&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.xerial.org/trac/Xerial/wiki/SQLiteJDBC&lt;/a&gt; или при помощи Maven (описание по той же ссылке)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Шаг 2.&lt;/strong&gt; Положить у себя в проект класс SQLiteDialect, взятый отсюда: 
&lt;a href=&#34;http://arnoraps.tweakblogs.net/blog/3146/hibernate-with-sqlite.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://arnoraps.tweakblogs.net/blog/3146/hibernate-with-sqlite.html&lt;/a&gt; или из архива отсюда: 
&lt;a href=&#34;http://code.google.com/p/hibernate-sqlite/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://code.google.com/p/hibernate-sqlite/&lt;/a&gt; (HibernateSQLite.zip)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Шаг 3.&lt;/strong&gt; В конфигурацию Hibernate добавить примерно следующее: ```xml&lt;/p&gt;
  &lt;!-- SQLite settings --&gt;
&lt;p&gt;&lt;property name=&#34;hibernate.connection.driver_class&#34;&gt;org.sqlite.JDBC&lt;/property&gt;
&lt;property name=&#34;hibernate.connection.url&#34;&gt;jdbc:sqlite:./data.db&lt;/property&gt;
&lt;property name=&#34;hibernate.dialect&#34;&gt;ru.sincore.db.SQLiteDialect&lt;/property&gt;&lt;/p&gt;
&lt;p&gt;&amp;hellip;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Jetty, JSP и Maven</title>
      <link>https://htrd.su/blog/2011/11/17/jetty_jsp_i_maven/</link>
      <pubDate>Thu, 17 Nov 2011 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/11/17/jetty_jsp_i_maven/</guid>
      <description>&lt;p&gt;На правах заметки:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Список зависимостей для Maven, что бы получить последнюю (8.0.4) версию embedded Jetty и получить рабочий JSP.&lt;/li&gt;
&lt;li&gt;Конфиг для embedded Jetty, что бы завёлся JSP.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Подробности подкатом&lt;/p&gt;
&lt;h2 id=&#34;список-зависимостей-для-maven&#34;&gt;Список зависимостей для Maven&lt;/h2&gt;
&lt;p&gt;По сути полная версия Jetty, убирать зависимости, если какие не нужны.&lt;/p&gt;
&lt;p&gt;Сначала в начале POM файла прописать:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-xml&#34; data-lang=&#34;xml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;properties&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;jetty-version&amp;gt;&lt;/span&gt;8.0.4.v20111024&lt;span class=&#34;nt&#34;&gt;&amp;lt;/jetty-version&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;jetty-hightide-version&amp;gt;&lt;/span&gt;8.0.4.v20111024&lt;span class=&#34;nt&#34;&gt;&amp;lt;/jetty-hightide-version&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;/properties&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Далее в список зависимостей добавить:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-xml&#34; data-lang=&#34;xml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- Jetty Dependency           --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- exclude unneeded artifacts --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.eclipse.jetty&lt;span class=&#34;nt&#34;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;jetty-deploy&lt;span class=&#34;nt&#34;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;${jetty-version}&lt;span class=&#34;nt&#34;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.eclipse.jetty&lt;span class=&#34;nt&#34;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;jetty-rewrite&lt;span class=&#34;nt&#34;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;${jetty-version}&lt;span class=&#34;nt&#34;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.eclipse.jetty&lt;span class=&#34;nt&#34;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;jetty-ajp&lt;span class=&#34;nt&#34;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;${jetty-version}&lt;span class=&#34;nt&#34;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.eclipse.jetty&lt;span class=&#34;nt&#34;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;jetty-annotations&lt;span class=&#34;nt&#34;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;${jetty-version}&lt;span class=&#34;nt&#34;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.eclipse.jetty&lt;span class=&#34;nt&#34;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;test-jetty-webapp&lt;span class=&#34;nt&#34;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;war&lt;span class=&#34;nt&#34;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;${jetty-version}&lt;span class=&#34;nt&#34;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.eclipse.jetty&lt;span class=&#34;nt&#34;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;jetty-jmx&lt;span class=&#34;nt&#34;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;${jetty-version}&lt;span class=&#34;nt&#34;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.eclipse.jetty&lt;span class=&#34;nt&#34;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;jetty-jndi&lt;span class=&#34;nt&#34;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;${jetty-version}&lt;span class=&#34;nt&#34;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.eclipse.jetty&lt;span class=&#34;nt&#34;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;jetty-plus&lt;span class=&#34;nt&#34;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;${jetty-version}&lt;span class=&#34;nt&#34;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.eclipse.jetty&lt;span class=&#34;nt&#34;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;jetty-client&lt;span class=&#34;nt&#34;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;${jetty-version}&lt;span class=&#34;nt&#34;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.eclipse.jetty&lt;span class=&#34;nt&#34;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;jetty-continuation&lt;span class=&#34;nt&#34;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;${jetty-version}&lt;span class=&#34;nt&#34;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.eclipse.jetty&lt;span class=&#34;nt&#34;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;jetty-start&lt;span class=&#34;nt&#34;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;${jetty-version}&lt;span class=&#34;nt&#34;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.eclipse.jetty&lt;span class=&#34;nt&#34;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;jetty-policy&lt;span class=&#34;nt&#34;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;${jetty-version}&lt;span class=&#34;nt&#34;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.eclipse.jetty&lt;span class=&#34;nt&#34;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;jetty-websocket&lt;span class=&#34;nt&#34;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;${jetty-version}&lt;span class=&#34;nt&#34;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- JSP &amp;amp; JSTL &amp;amp; EL --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;javax.servlet.jsp&lt;span class=&#34;nt&#34;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;jsp-api&lt;span class=&#34;nt&#34;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;2.2&lt;span class=&#34;nt&#34;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.glassfish.web&lt;span class=&#34;nt&#34;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;jsp-impl&lt;span class=&#34;nt&#34;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;2.2&lt;span class=&#34;nt&#34;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;javax.servlet.jsp.jstl&lt;span class=&#34;nt&#34;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;jstl-api&lt;span class=&#34;nt&#34;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;jar&lt;span class=&#34;nt&#34;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;1.2&lt;span class=&#34;nt&#34;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.glassfish.web&lt;span class=&#34;nt&#34;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;jstl-impl&lt;span class=&#34;nt&#34;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;jar&lt;span class=&#34;nt&#34;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;exclusions&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nt&#34;&gt;&amp;lt;exclusion&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nt&#34;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;servlet-api&lt;span class=&#34;nt&#34;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nt&#34;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;javax.servlet&lt;span class=&#34;nt&#34;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nt&#34;&gt;&amp;lt;/exclusion&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;/exclusions&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;1.2&lt;span class=&#34;nt&#34;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;javax.el&lt;span class=&#34;nt&#34;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;el-api&lt;span class=&#34;nt&#34;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;jar&lt;span class=&#34;nt&#34;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;2.2&lt;span class=&#34;nt&#34;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.glassfish.web&lt;span class=&#34;nt&#34;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;el-impl&lt;span class=&#34;nt&#34;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;jar&lt;span class=&#34;nt&#34;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;2.2&lt;span class=&#34;nt&#34;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- From Jetty Hightide --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.mortbay.jetty&lt;span class=&#34;nt&#34;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;jetty-setuid-java&lt;span class=&#34;nt&#34;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;${jetty-hightide-version}&lt;span class=&#34;nt&#34;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.mortbay.jetty&lt;span class=&#34;nt&#34;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;jetty-spring&lt;span class=&#34;nt&#34;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;${jetty-hightide-version}&lt;span class=&#34;nt&#34;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.mortbay.jetty&lt;span class=&#34;nt&#34;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;libsetuid&lt;span class=&#34;nt&#34;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;${jetty-hightide-version}&lt;span class=&#34;nt&#34;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;so&lt;span class=&#34;nt&#34;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;конфиг-jetty&#34;&gt;Конфиг Jetty&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-xml&#34; data-lang=&#34;xml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&amp;lt;?xml version=&amp;#34;1.0&amp;#34;?&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&amp;lt;!DOCTYPE Configure PUBLIC &amp;#34;-*Jetty*Configure*EN&amp;#34; &amp;#34;http://www.eclipse.org/jetty/configure.dtd&amp;#34;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;Configure&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;WebManagementConsole&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;org.eclipse.jetty.server.Server&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- =========================================================== --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- Define some SystemProperties                                --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- =========================================================== --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;Call&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;java.lang.System&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;setProperty&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;Arg&amp;gt;&lt;/span&gt;jetty.home&lt;span class=&#34;nt&#34;&gt;&amp;lt;/Arg&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;Arg&amp;gt;&amp;lt;SystemProperty&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;jetty.home&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;default=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&amp;lt;/Arg&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Call&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;Call&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;java.lang.System&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;setProperty&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;Arg&amp;gt;&lt;/span&gt;derby.system.home&lt;span class=&#34;nt&#34;&gt;&amp;lt;/Arg&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;Arg&amp;gt;&amp;lt;SystemProperty&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;java.io.tmpdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&amp;lt;/Arg&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Call&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;&amp;lt;!--
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;    &amp;lt;Call class=&amp;#34;java.lang.System&amp;#34; name=&amp;#34;setProperty&amp;#34;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;        &amp;lt;Arg&amp;gt;org.eclipse.jetty.util.log.stderr.DEBUG&amp;lt;/Arg&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;        &amp;lt;Arg&amp;gt;false&amp;lt;/Arg&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;    &amp;lt;/Call&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;    &amp;lt;Call class=&amp;#34;java.lang.System&amp;#34; name=&amp;#34;setProperty&amp;#34;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;        &amp;lt;Arg&amp;gt;org.eclipse.jetty.util.log.stderr.SOURCE&amp;lt;/Arg&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;        &amp;lt;Arg&amp;gt;false&amp;lt;/Arg&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;    &amp;lt;/Call&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;    --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- disable internal JSP compiller --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;Call&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;java.lang.System&amp;#34;&lt;/span&gt;  &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;setProperty&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;Arg&amp;gt;&lt;/span&gt;org.apache.jasper.compiler.disablejsr199&lt;span class=&#34;nt&#34;&gt;&amp;lt;/Arg&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;Arg&amp;gt;&lt;/span&gt;true&lt;span class=&#34;nt&#34;&gt;&amp;lt;/Arg&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Call&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- =========================================================== --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- JMX                                                         --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- =========================================================== --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- =========================================================== --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- Initialize an mbean server                                  --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- =========================================================== --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;Call&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;MBeanServer&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;java.lang.management.ManagementFactory&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;getPlatformMBeanServer&amp;#34;&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- =========================================================== --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- Initialize the Jetty MBean container                        --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- =========================================================== --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;New&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;MBeanContainer&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;org.eclipse.jetty.jmx.MBeanContainer&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;Arg&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;Ref&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;MBeanServer&amp;#34;&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Arg&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;/New&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- Add to the Server to listen for object events --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;Get&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Container&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;container&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;Call&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;addEventListener&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;Arg&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nt&#34;&gt;&amp;lt;Ref&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;MBeanContainer&amp;#34;&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Arg&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Call&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Get&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- Add to the Server as a lifecycle --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- Only do this if you know you will only have a single jetty server --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;Call&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;addBean&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;Arg&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;Ref&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;MBeanContainer&amp;#34;&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Arg&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Call&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- Add the static log --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;Get&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Logger&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;org.eclipse.jetty.util.log.Log&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;log&amp;#34;&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;Ref&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;MBeanContainer&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;Call&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;addBean&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;Arg&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nt&#34;&gt;&amp;lt;Ref&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Logger&amp;#34;&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Arg&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Call&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Ref&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- =========================================================== --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- Set conntectors                                             --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- =========================================================== --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;Call&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;addConnector&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;Arg&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;New&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;org.eclipse.jetty.server.nio.SelectChannelConnector&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nt&#34;&gt;&amp;lt;Set&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;host&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&amp;lt;Property&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;jetty.host&amp;#34;&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;/&amp;gt;&amp;lt;/Set&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nt&#34;&gt;&amp;lt;Set&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;port&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&amp;lt;Property&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;jetty.port&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;default=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;8080&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&amp;lt;/Set&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;/New&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Arg&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Call&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;Set&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;handler&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;New&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Handlers&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;org.eclipse.jetty.server.handler.HandlerCollection&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;Set&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;handlers&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nt&#34;&gt;&amp;lt;Array&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;type=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;org.eclipse.jetty.server.Handler&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nt&#34;&gt;&amp;lt;Item&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;nt&#34;&gt;&amp;lt;New&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Contexts&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;org.eclipse.jetty.server.handler.ContextHandlerCollection&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Item&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nt&#34;&gt;&amp;lt;Item&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;nt&#34;&gt;&amp;lt;New&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;DefaultHandler&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;org.eclipse.jetty.server.handler.DefaultHandler&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Item&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Array&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Set&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;/New&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Set&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- Deploy Manager --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;Call&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;addBean&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;Arg&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;New&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;DeploymentManager&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;org.eclipse.jetty.deploy.DeploymentManager&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nt&#34;&gt;&amp;lt;Set&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;contexts&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nt&#34;&gt;&amp;lt;Ref&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Contexts&amp;#34;&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Set&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nt&#34;&gt;&amp;lt;Call&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;setContextAttribute&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nt&#34;&gt;&amp;lt;Arg&amp;gt;&lt;/span&gt;org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern&lt;span class=&#34;nt&#34;&gt;&amp;lt;/Arg&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nt&#34;&gt;&amp;lt;Arg&amp;gt;&lt;/span&gt;.*/servlet-api-[^/]*&lt;span class=&#34;nt&#34;&gt;&amp;lt;br/&amp;gt;&lt;/span&gt;.jar$&lt;span class=&#34;nt&#34;&gt;&amp;lt;/Arg&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Call&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;/New&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Arg&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Call&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- Add a WebAppProvider to the deployment manager                  --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;Ref&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;DeploymentManager&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;Call&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;webappprovider&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;addAppProvider&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;Arg&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nt&#34;&gt;&amp;lt;New&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;org.eclipse.jetty.deploy.providers.WebAppProvider&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nt&#34;&gt;&amp;lt;Set&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;monitoredDirName&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;nt&#34;&gt;&amp;lt;SystemProperty&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;jetty.home&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;/webapps
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Set&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nt&#34;&gt;&amp;lt;Set&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;defaultsDescriptor&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;nt&#34;&gt;&amp;lt;SystemProperty&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;jetty.home&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;/etc/webdefault.xml
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Set&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nt&#34;&gt;&amp;lt;Set&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;contextXmlDir&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;nt&#34;&gt;&amp;lt;SystemProperty&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;jetty.home&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;/contexts
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Set&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nt&#34;&gt;&amp;lt;Set&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;scanInterval&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;1&lt;span class=&#34;nt&#34;&gt;&amp;lt;/Set&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- UNCOMMENT if extracting needed --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nt&#34;&gt;&amp;lt;Set&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;extractWars&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;false&lt;span class=&#34;nt&#34;&gt;&amp;lt;/Set&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nt&#34;&gt;&amp;lt;/New&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Arg&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Call&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Ref&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- Add a ContextProvider to the deployment manager                 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;Ref&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;DeploymentManager&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;Call&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;addAppProvider&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;Arg&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nt&#34;&gt;&amp;lt;New&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;org.eclipse.jetty.deploy.providers.ContextProvider&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nt&#34;&gt;&amp;lt;Set&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;monitoredDir&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;nt&#34;&gt;&amp;lt;SystemProperty&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;jetty.home&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;/contexts
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Set&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nt&#34;&gt;&amp;lt;Set&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;scanInterval&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;1&lt;span class=&#34;nt&#34;&gt;&amp;lt;/Set&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nt&#34;&gt;&amp;lt;/New&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Arg&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Call&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Ref&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;Ref&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Handlers&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;Call&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;addHandler&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;Arg&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nt&#34;&gt;&amp;lt;New&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;RequestLog&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;org.eclipse.jetty.server.handler.RequestLogHandler&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nt&#34;&gt;&amp;lt;Set&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;requestLog&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;nt&#34;&gt;&amp;lt;New&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;RequestLogImpl&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;org.eclipse.jetty.server.NCSARequestLog&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;nt&#34;&gt;&amp;lt;Set&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;filename&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&amp;lt;Property&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;jetty.logs&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;default=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;./log&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;/web-console-yyyy-mm-dd.request.log&lt;span class=&#34;nt&#34;&gt;&amp;lt;/Set&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;nt&#34;&gt;&amp;lt;Set&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;filenameDateFormat&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;yyyy_MM_dd&lt;span class=&#34;nt&#34;&gt;&amp;lt;/Set&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;nt&#34;&gt;&amp;lt;Set&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;retainDays&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;90&lt;span class=&#34;nt&#34;&gt;&amp;lt;/Set&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;nt&#34;&gt;&amp;lt;Set&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;append&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;true&lt;span class=&#34;nt&#34;&gt;&amp;lt;/Set&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;nt&#34;&gt;&amp;lt;Set&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;extended&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;false&lt;span class=&#34;nt&#34;&gt;&amp;lt;/Set&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;nt&#34;&gt;&amp;lt;Set&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;logCookies&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;false&lt;span class=&#34;nt&#34;&gt;&amp;lt;/Set&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;nt&#34;&gt;&amp;lt;Set&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;LogTimeZone&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;GMT&lt;span class=&#34;nt&#34;&gt;&amp;lt;/Set&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;nt&#34;&gt;&amp;lt;/New&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Set&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nt&#34;&gt;&amp;lt;/New&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Arg&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Call&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;/Ref&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;&amp;lt;!--
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;    &amp;lt;New id=&amp;#34;ServerLog&amp;#34; class=&amp;#34;java.io.PrintStream&amp;#34;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;      &amp;lt;Arg&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;        &amp;lt;New class=&amp;#34;org.eclipse.jetty.util.RolloverFileOutputStream&amp;#34;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;          &amp;lt;Arg&amp;gt;&amp;lt;Property name=&amp;#34;jetty.logs&amp;#34; default=&amp;#34;./log&amp;#34;/&amp;gt;/web-console-yyyy-mm-dd.stderrout.log&amp;lt;/Arg&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;          &amp;lt;Arg type=&amp;#34;boolean&amp;#34;&amp;gt;false&amp;lt;/Arg&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;          &amp;lt;Arg type=&amp;#34;int&amp;#34;&amp;gt;90&amp;lt;/Arg&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;          &amp;lt;Arg&amp;gt;&amp;lt;Call class=&amp;#34;java.util.TimeZone&amp;#34; name=&amp;#34;getTimeZone&amp;#34;&amp;gt;&amp;lt;Arg&amp;gt;GMT&amp;lt;/Arg&amp;gt;&amp;lt;/Call&amp;gt;&amp;lt;/Arg&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;          &amp;lt;Get id=&amp;#34;ServerLogName&amp;#34; name=&amp;#34;datedFilename&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;        &amp;lt;/New&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;      &amp;lt;/Arg&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;    &amp;lt;/New&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;    &amp;lt;Call class=&amp;#34;org.eclipse.jetty.util.log.Log&amp;#34; name=&amp;#34;debug&amp;#34;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;        &amp;lt;Arg&amp;gt;Redirecting stderr/stdout to &amp;lt;Ref id=&amp;#34;ServerLogName&amp;#34;/&amp;gt;&amp;lt;/Arg&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;    &amp;lt;/Call&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;    &amp;lt;Call class=&amp;#34;java.lang.System&amp;#34; name=&amp;#34;setErr&amp;#34;&amp;gt;&amp;lt;Arg&amp;gt;&amp;lt;Ref id=&amp;#34;ServerLog&amp;#34;/&amp;gt;&amp;lt;/Arg&amp;gt;&amp;lt;/Call&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;    &amp;lt;Call class=&amp;#34;java.lang.System&amp;#34; name=&amp;#34;setOut&amp;#34;&amp;gt;&amp;lt;Arg&amp;gt;&amp;lt;Ref id=&amp;#34;ServerLog&amp;#34;/&amp;gt;&amp;lt;/Arg&amp;gt;&amp;lt;/Call&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;    --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;&amp;lt;!--
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;    &amp;lt;Get id=&amp;#34;oldhandler&amp;#34; name=&amp;#34;handler&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;    &amp;lt;Set name=&amp;#34;handler&amp;#34;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;      &amp;lt;New id=&amp;#34;DebugHandler&amp;#34; class=&amp;#34;org.eclipse.jetty.server.handler.DebugHandler&amp;#34;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;        &amp;lt;Set name=&amp;#34;handler&amp;#34;&amp;gt;&amp;lt;Ref id=&amp;#34;oldhandler&amp;#34;/&amp;gt;&amp;lt;/Set&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;        &amp;lt;Set name=&amp;#34;outputStream&amp;#34;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;          &amp;lt;New class=&amp;#34;org.eclipse.jetty.util.RolloverFileOutputStream&amp;#34;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;            &amp;lt;Arg type=&amp;#34;String&amp;#34;&amp;gt;&amp;lt;Property name=&amp;#34;jetty.logs&amp;#34; default=&amp;#34;./log&amp;#34;/&amp;gt;/web-console-yyyy-mm-dd.debug.log&amp;lt;/Arg&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;            &amp;lt;Arg type=&amp;#34;boolean&amp;#34;&amp;gt;true&amp;lt;/Arg&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;            &amp;lt;Arg type=&amp;#34;int&amp;#34;&amp;gt;90&amp;lt;/Arg&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;          &amp;lt;/New&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;        &amp;lt;/Set&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;      &amp;lt;/New&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;    &amp;lt;/Set&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;    --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/Configure&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ну а создавать сервер примерно так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;XmlConfiguration&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;configuration&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;XmlConfiguration&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;File&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;jetty-config.xml&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;toURI&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;().&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;toURL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Server&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;server&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Server&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;configuration&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;configure&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;server&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;server&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;start&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Hibernate Tutorial</title>
      <link>https://htrd.su/blog/2011/11/16/hibernate_tutorial/</link>
      <pubDate>Wed, 16 Nov 2011 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/11/16/hibernate_tutorial/</guid>
      <description>&lt;p&gt;Отличный, по моему мнению, туториал по Hibernate:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.vaannila.com/hibernate/hibernate-tutorial/hibernate-tutorial.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.vaannila.com/hibernate/hibernate-tutorial/hibernate-tutorial.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;особенно хорошо показаны построения отношений между таблицами.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Java Timezone</title>
      <link>https://htrd.su/blog/2011/11/16/java_timezone/</link>
      <pubDate>Wed, 16 Nov 2011 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/11/16/java_timezone/</guid>
      <description>&lt;p&gt;В последней Java6 не включена tzdata с информацией о том, что в России, сейчас нет перехода на зимнее время. Дальнейшие пояснения излишни.&lt;/p&gt;
&lt;p&gt;Как фиксить? Обновить tzdata при помощи предлагаемой ораклом утилиты:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.oracle.com/technetwork/java/javase/tzupdater-readme-136440.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Timezone Updater Tool&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.oracle.com/technetwork/java/javase/downloads/tzupdater-download-513681.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Java SE TZUpdater Downloads&lt;/a&gt; - что бы скачать, не лазя по дебрям, или прямая ссылка: 
&lt;a href=&#34;http://download.oracle.com/otn-pub/java/tzupdater/1.3.42/tzupdater-1_3_42-2011k.zip&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://download.oracle.com/otn-pub/java/tzupdater/1.3.42/tzupdater-1_3_42-2011k.zip&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Новый GTK&#43; и падение Opera</title>
      <link>https://htrd.su/blog/2011/11/10/novyj_gtk_i_padenie_opera/</link>
      <pubDate>Thu, 10 Nov 2011 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/11/10/novyj_gtk_i_padenie_opera/</guid>
      <description>&lt;p&gt;После очередного обновления, заметил, что Опера перестала стартовать. При запуске из терминала, вываливает следующее:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;opera&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;opera&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;13093&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Gtk&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;CRITICAL&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;IA__gtk_widget_unrealize&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;assertion&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;GTK_IS_WIDGET&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;widget&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39; failed&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;opera&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;13093&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Gtk&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;CRITICAL&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;IA__gtk_widget_is_toplevel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;assertion&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;GTK_IS_WIDGET&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;widget&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39; failed&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;opera&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;crash&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;logging&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;CRASH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!!&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;opera&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;opera&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;got&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;signal&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SIGSEGV&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;at&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;address&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;B6B26E77&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Log&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;was&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;created&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;here&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tmp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;crash20111110210615&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;txt&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;Убито&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Для столкнувшихся с этой же проблемой в ArchLinux:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;и раз: 
&lt;a href=&#34;https://bbs.archlinux.org/viewtopic.php?pid=1006655&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://bbs.archlinux.org/viewtopic.php?pid=1006655&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;и два (Opera 11.60): 
&lt;a href=&#34;https://aur.archlinux.org/packages.php?ID=53816&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://aur.archlinux.org/packages.php?ID=53816&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;и три (Opera Next 12.00): 
&lt;a href=&#34;https://aur.archlinux.org/packages.php?ID=48680&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://aur.archlinux.org/packages.php?ID=48680&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Переехал на BlogTNG</title>
      <link>https://htrd.su/blog/2011/11/02/pereexal_na_blogtng/</link>
      <pubDate>Wed, 02 Nov 2011 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/11/02/pereexal_na_blogtng/</guid>
      <description>&lt;p&gt;Переехал на 
&lt;a href=&#34;http://www.dokuwiki.org/plugin%3Ablogtng&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;BlogTNG&lt;/a&gt; вместо классической связки плагинов blog/tag/discussion. Разработчики, к слову, те же самые.&lt;/p&gt;
&lt;p&gt;Уже пришлось малость залезть в исходники, для корректировки работы с тегами, но в целом ощущения положительные.&lt;/p&gt;
&lt;p&gt;Теперь будем постепенно адаптировать другие части системы под новый блого-движок.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Библиотека</title>
      <link>https://htrd.su/blog/2011/10/31/biblioteka/</link>
      <pubDate>Mon, 31 Oct 2011 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/10/31/biblioteka/</guid>
      <description>&lt;p&gt;Как сказал один умный дядька (вот к своему позору запамятовал как его зовут, вроде Аристотель): &amp;ldquo;Дайте мне библиотеку и я в пустыне построю университет!&amp;rdquo;. Пусть у меня тут не университет, но&amp;hellip; полезных и интересных книг? есть их у меня! Посему начинаю проект по публикации своей домашней электронной библиотеки. И вот первые ласточки: 
&lt;a href=&#34;https://htrd.su/biblioteka/ucheba_v_dvgtu/&#34;&gt;материалы по учебе в ДВГТУ&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Поход на Туманную 1го апреля</title>
      <link>https://htrd.su/blog/2011/10/31/poxod_na_tumannuju_1go_aprelja/</link>
      <pubDate>Mon, 31 Oct 2011 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/10/31/poxod_na_tumannuju_1go_aprelja/</guid>
      <description>&lt;p&gt;Планирую сходить на Туманную в день шуток и приколов. Желающим присоединиться - в комменты.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Пять процентов</title>
      <link>https://htrd.su/blog/2011/10/31/pjat_procentov/</link>
      <pubDate>Mon, 31 Oct 2011 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/10/31/pjat_procentov/</guid>
      <description>&lt;p&gt;Подкинули ссылочку на интересную статью в компьютерее, называется 
&lt;a href=&#34;http://offline.computerra.ru/print/offline/2006/667/300821&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&amp;ldquo;Пять процентов&amp;rdquo;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Интересная нужно сказать теория. Тут вот думаю, к каким &amp;ldquo;пяти процентам&amp;rdquo; отношусь я?&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Шутки</title>
      <link>https://htrd.su/blog/2011/10/31/shutki/</link>
      <pubDate>Mon, 31 Oct 2011 00:00:00 +0000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/10/31/shutki/</guid>
      <description>&lt;p&gt;Вообще жизнь интересная штука: каждый день, новая шуточка, даже интересно, а что ж завтра то будет?&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>QLandkarteGT: Экспорт всей карты в растр, а не только видимой области</title>
      <link>https://htrd.su/blog/2011/10/18/2011-10-18_21.20_qlandkartegt_ehksport_vsej_karty_v_rastr_a_ne_tolko_vidimoj_oblasti/</link>
      <pubDate>Tue, 18 Oct 2011 21:20:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/10/18/2011-10-18_21.20_qlandkartegt_ehksport_vsej_karty_v_rastr_a_ne_tolko_vidimoj_oblasti/</guid>
      <description>&lt;p&gt;В QLandkarteGT есть удобная вещь - экспорт видимой области карты со всеми отображаемыми точками, треками, измерениями и т.п. в растровый (PNG) файл.&lt;/p&gt;
&lt;p&gt;Мне же потребовалось, что бы вся карта как есть была экспортирована. Пришлось полезть в исходники. Прямого пути сделать такое не нашлось, пришлось сделать несколько костыльно (имхо), но работоспособно (ибо нужно срочно - готовить карту к предстоящим соревнованиям).&lt;/p&gt;
&lt;p&gt;Патч подкатом.&lt;/p&gt;
&lt;h1 id=&#34;index-srccmainwindowcpp&#34;&gt;&lt;hidden&gt;```diff
Index: src/CMainWindow.cpp&lt;/h1&gt;
&lt;p&gt;&amp;mdash; src/CMainWindow.cpp	(revision 3010)
@@ -17,6 +17,8 @@&lt;/p&gt;
&lt;p&gt;**********************************************************************************************/&lt;/p&gt;
&lt;p&gt;+#include &lt;QtDebug&gt;
+
#include &amp;ldquo;CMainWindow.h&amp;rdquo;
#include &amp;ldquo;CMegaMenu.h&amp;rdquo;
#include &amp;ldquo;CCanvas.h&amp;rdquo;
@@ -557,6 +559,7 @@
menu-&amp;gt;addSeparator();
menu-&amp;gt;addAction(QIcon(&amp;quot;:/icons/iconScreenshot16x16.png&amp;quot;),tr(&amp;ldquo;Device Screenshot &amp;hellip;&amp;rdquo;),this,SLOT(slotScreenshot()));
menu-&amp;gt;addAction(QIcon(&amp;quot;:/icons/iconRaster16x16.png&amp;quot;),tr(&amp;ldquo;Save map as image &amp;hellip;&amp;rdquo;),this,SLOT(slotSaveImage()));&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;menu-&amp;gt;addAction(QIcon(&amp;quot;:/icons/iconRaster16x16.png&amp;quot;),tr(&amp;ldquo;Save full map as image &amp;hellip;&amp;rdquo;),this,SLOT(slotSaveImageFull()));
menu-&amp;gt;addAction(QIcon(&amp;quot;:/icons/iconPrint16x16.png&amp;quot;),tr(&amp;ldquo;Print Map &amp;hellip;&amp;rdquo;),this,SLOT(slotPrint()), Qt::CTRL + Qt::Key_P);
//menu-&amp;gt;addAction(QIcon(&amp;quot;:/icons/iconPrint16x16.png&amp;quot;),tr(&amp;ldquo;Print Diary &amp;hellip;&amp;rdquo;),this,SLOT(slotPrintPreview()));
menu-&amp;gt;addSeparator();
@@ -1222,7 +1225,19 @@&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;void CMainWindow::slotSaveImage()
{&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;saveImage(false);
+}&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;+void CMainWindow::slotSaveImageFull()
+{&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;saveImage(true);
+}&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;+void CMainWindow::saveImage(bool isFullImage)
+{
+
QSettings cfg;
QString pathData = cfg.value(&amp;ldquo;path/data&amp;rdquo;,&amp;quot;./&amp;quot;).toString();
QString filter   = cfg.value(&amp;ldquo;canvas/imagetype&amp;rdquo;,&amp;ldquo;Bitmap (*.png)&amp;rdquo;).toString();
@@ -1247,13 +1262,87 @@&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; if(map3d)
 {
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;   map3d-&amp;gt;slotSaveImage(filename);
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;   if (isFullImage == false)
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;   {
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;       map3d-&amp;gt;slotSaveImage(filename);
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;   }
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;   else
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;   {
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;       QMessageBox::warning(this, tr(&amp;quot;Map export&amp;quot;), tr(&amp;quot;Export for full 3D Map is not implemented yet.&amp;quot;));
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;   }
&lt;/code&gt;&lt;/pre&gt;
}
else
#endif
{&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;   QImage img(canvas-&amp;gt;size(), QImage::Format_ARGB32);
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;   canvas-&amp;gt;print(img);
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;   QImage img;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;   if (isFullImage == false)
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;   {
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;       img = QImage(canvas-&amp;gt;size(), QImage::Format_ARGB32);
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;       canvas-&amp;gt;print(img);
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;   }
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;   else
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;   {
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;       IMap&amp;amp; map = CMapDB::self().getMap();
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;       // Get map dimensions
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;       double lon1, lat1, lon2, lat2;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;       map.dimensions(lon1, lat1, lon2, lat2);
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;       // Convert dimensions to pixel coordinates
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;       double x1 = lon1, y1 = lat1, x2 = lon2, y2 = lat2;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;       map.convertRad2Pt(x1, y1);
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;       map.convertRad2Pt(x2, y2);
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;       // Create Rect
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;       QRectF mapRectF(QPointF(x1, y1), QPointF(x2, y2));
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;       QRect  mapRect(QPoint(round(x1), round(y1)), QPoint(round(x2), round(y2)));
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;       qDebug() &amp;lt;&amp;lt; &amp;quot;Dimensions: &amp;quot; &amp;lt;&amp;lt; lon1 * RAD_TO_DEG &amp;lt;&amp;lt; lat1 * RAD_TO_DEG &amp;lt;&amp;lt; lon2 * RAD_TO_DEG &amp;lt;&amp;lt; lat2 * RAD_TO_DEG;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;       qDebug() &amp;lt;&amp;lt; &amp;quot;Pixel sizes: &amp;quot; &amp;lt;&amp;lt; x1 &amp;lt;&amp;lt; y1 &amp;lt;&amp;lt; x2 &amp;lt;&amp;lt; y2;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;       qDebug() &amp;lt;&amp;lt; &amp;quot;Width: &amp;quot; &amp;lt;&amp;lt; mapRectF.width() &amp;lt;&amp;lt; &amp;quot;Height: &amp;quot; &amp;lt;&amp;lt; mapRectF.height();
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;       qDebug() &amp;lt;&amp;lt; &amp;quot;Viewport size: &amp;quot; &amp;lt;&amp;lt; map.getSize();
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;       QPainter p;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;       QRect imageRect(mapRect);
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;       img = QImage(mapRect.size(), QImage::Format_ARGB32);
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;       p.begin(&amp;amp;img);
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;       p.fillRect(imageRect, QBrush(Qt::transparent));
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;       // hack with full area-draw
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;       QSize oldSize = map.getSize();          // store viewport size
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;       qint32 zoomLevel = map.getZoomLevel();  // store zoom level
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;       // store local center point:
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;       double  xc = oldSize.width() / 2.0,
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;               yc = oldSize.height() / 2.0;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;       // convert it to global coordinates
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;       map.convertPt2Rad(xc, yc);
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;       // Resize viewport to full map size and zoom map to it
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;       // TODO: use current zoom level for new map viewport
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;       map.resize(mapRect.size());
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;       map.zoom(lon1, lat1, lon2, lat2);
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;       // Draw map and all geodata
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;       bool needsRedraw = true;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;       CMapDB::self().draw(p, imageRect, needsRedraw);
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;       CRouteDB::self().draw(p, imageRect, needsRedraw);
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;       CTrackDB::self().draw(p, imageRect, needsRedraw);
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;       COverlayDB::self().draw(p, imageRect, needsRedraw);
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;       CLiveLogDB::self().draw(p, imageRect, needsRedraw);
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;       CWptDB::self().draw(p, imageRect, needsRedraw);
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;       CSearchDB::self().draw(p, imageRect, needsRedraw);
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;       p.end();
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;       // set view port size, zoom level and center point back
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;       map.resize(oldSize);
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;       map.zoom(zoomLevel);
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;       map.convertRad2Pt(xc, yc);
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;       map.move(QPoint(xc, yc), QPoint(oldSize.width()/2.0, oldSize.height()/2.0));
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;   }
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;   img.save(filename);
&lt;/code&gt;&lt;/pre&gt;
}
pathData = fi.absolutePath();
Index: src/CMainWindow.h
===================================================================
&amp;mdash; src/CMainWindow.h	(revision 3010)
@@ -88,6 +88,7 @@
void slotSaveData();
void slotExportData();
void slotSaveImage();&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;   void slotSaveImageFull();
   void slotPrint();
   void slotModified();
   void slotDataChanged();
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;@@ -118,6 +119,8 @@
bool isGPSBabel();
QString getGeoDataFormats();&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;   void saveImage(bool isFullImage = false);
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code&gt;   QMenu *setupMenu;
   QMenu *groupProvidedMenu;
   /// horizontal main splitter holding the canvas and the tool view
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;В результате в меню File добавится новый пункт: &amp;#34;Save full map as image ...&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;**UPD:** Оливер (автор программы) объявил QLGT deprecated и сейчас активно пилит замену - [QMapShack](/blog/2016/02/11/qmapshack/). Так вот, там описанный функционал реализован куда более адекватно и функционально. Рекомендую!
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Поломанная привязка карт в QLandkarteGT</title>
      <link>https://htrd.su/blog/2011/10/16/2011-10-16_14.20_polomannaja_privjazka_v_qlandkartegt/</link>
      <pubDate>Sun, 16 Oct 2011 14:20:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/10/16/2011-10-16_14.20_polomannaja_privjazka_v_qlandkartegt/</guid>
      <description>&lt;p&gt;Сегодня столкнулся с тем, что привязывая карту в QLandkarteGT, получаю такую ошибку:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/usr/bin/gdal_translate -a_srs +proj=merc +a=6378245.0000 +b=6356863.0188 +towgs84=24,-123,-94,-0.02,0.25,0.13,1.1,0 +units=m  +no_defs -gcp 108 182 inf inf -gcp 3310 189 inf inf -gcp 3308 3126 inf inf -gcp 93 3119 inf inf -gcp 1704 1657 inf inf /home/hatred/maps/1/src/K-53-26-view-raw.tiff /tmp/qt_temp.B12852
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Input file size is 3402, 3428
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;0...10...20...30...40...50...60...70...80...90...100 - done.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/usr/bin/gdalwarp -order 1 -r cubic -dstnodata &amp;#34;255&amp;#34; /tmp/qt_temp.B12852 /tmp/qt_temp.u12852
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ERROR 1: Attempt to create -2147483648x-2147483648 dataset is illegal,sizes must be larger than zero.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Creating output file that is -2147483648P x -2147483648L.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Неудачно!￼￼
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Сначала было подумал, что поломано в SVN версии, однако, в релизной 1.2.4 ситуация точно такая же.&lt;/p&gt;
&lt;p&gt;Сразу и сходу смутили параметры &lt;code&gt;inf&lt;/code&gt; в опции &lt;code&gt;-gcp&lt;/code&gt;. Так что решил поглядеть в коде, благо собираю из SVN и он у меня всегда под рукой.&lt;/p&gt;
&lt;p&gt;Немного времени, расстановка логов, анализ привели к тому что обнаружилось двойное преобразование координат в функции&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;bool&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;GPS_Math_Str_To_LongLat&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;QString&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;float&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;lon&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;float&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;lat&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;QString&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;srcproj&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;QString&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tarproj&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;в файле &lt;code&gt;GeoMath.cpp&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Первое преобразование было в блоке кода:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-C++&#34; data-lang=&#34;C++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;GPS_Math_Str_To_Deg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;lon&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;lat&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pjTar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;n&#34;&gt;u&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;lon&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;DEG_TO_RAD&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;n&#34;&gt;v&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;lat&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;DEG_TO_RAD&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;pj_transform&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pjSrc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pjTar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;u&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;   
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;а второе преобразование в следующем блоке кода:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-C++&#34; data-lang=&#34;C++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pjTar&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pjSrc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;n&#34;&gt;pj_transform&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pjSrc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pjTar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;u&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Беглый анализ привёл к мысли, что производился редизайн кода, оптимизация и убирание дублирующихся блоков кода, в результате просто недосмотрели одно место.&lt;/p&gt;
&lt;p&gt;Сменил первый блок на такой:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-C++&#34; data-lang=&#34;C++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;GPS_Math_Str_To_Deg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;lon&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;lat&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;u&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;lon&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;DEG_TO_RAD&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;v&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;lat&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;DEG_TO_RAD&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;пересобрал и всё заработало отлично и замечательно.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;UPD:&lt;/strong&gt;&lt;/em&gt; а теперь всё то же самое, но в виде патча:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-diff&#34; data-lang=&#34;diff&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;Index: src/GeoMath.cpp
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;===================================================================
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gd&#34;&gt;--- src/GeoMath.cpp	(revision 3010)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gu&#34;&gt;@@ -392,12 +392,8 @@
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     if(GPS_Math_Str_To_Deg(str, lon, lat,true))
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-        if(pjTar)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-        {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-            u = lon * DEG_TO_RAD;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-            v = lat * DEG_TO_RAD;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-            pj_transform(pjSrc,pjTar,1,0,&amp;amp;u,&amp;amp;v,0);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-        }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gi&#34;&gt;+        u = lon * DEG_TO_RAD;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+        v = lat * DEG_TO_RAD;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt;     }
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     else
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     {
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;PS автору письмо отправлено&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>USB Typewriter</title>
      <link>https://htrd.su/blog/2011/10/14/2011-10-14_11.13_usb_typewriter/</link>
      <pubDate>Fri, 14 Oct 2011 11:13:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/10/14/2011-10-14_11.13_usb_typewriter/</guid>
      <description>&lt;p&gt;Это винрарно:&lt;/p&gt;
&lt;iframe width=&#34;640&#34; height=&#34;360&#34; src=&#34;http://www.youtube.com/embed/EozwYbMTtS0&#34; frameborder=&#34;0&#34; allowfullscreen&gt;&lt;/iframe&gt;</description>
    </item>
    
    <item>
      <title>Паттерны проектирования</title>
      <link>https://htrd.su/blog/2011/10/12/2011-10-12_09.42_patterny_proektirovanija/</link>
      <pubDate>Wed, 12 Oct 2011 09:42:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/10/12/2011-10-12_09.42_patterny_proektirovanija/</guid>
      <description>&lt;p&gt;Случайно наткнулся на сайт: 
&lt;a href=&#34;http://www.design-pattern.ru&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.design-pattern.ru&lt;/a&gt; - &amp;ldquo;Справочник &amp;ldquo;Паттерны проектирования&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Прицепом:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://citforum.ru/SE/project/pattern&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Обзор паттернов проектирования&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.javenue.info/themes/ood&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Объектно-ориентированное проектирование, паттерны проектирования (Шаблоны)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.rsdn.ru/summary/864.xml&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.rsdn.ru/summary/864.xml&lt;/a&gt; - отсылки к статьям в RSDN Magazine&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;PS а это планирую купить: 
&lt;a href=&#34;http://www.ozon.ru/context/detail/id/6108824&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.ozon.ru/context/detail/id/6108824&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Камчатка, сентябрь 2011. Кравченко &amp; Ко</title>
      <link>https://htrd.su/blog/2011/10/04/2011-10-04_18.26_kamchatka_sentjabr_2011._kravchenko_ko/</link>
      <pubDate>Tue, 04 Oct 2011 18:26:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/10/04/2011-10-04_18.26_kamchatka_sentjabr_2011._kravchenko_ko/</guid>
      <description>&lt;p&gt;Весь текст подкатом&lt;/p&gt;
&lt;h2 id=&#34;день-первый-заброска-на-авачинский-перевал&#34;&gt;День первый. Заброска на Авачинский перевал&lt;/h2&gt;
&lt;p&gt;Ехали не очень долго, несмотря на размытую дорогу по Сухой речке. Временами приходилось чуть помочь Владимиру с прорубкой поросли.&lt;/p&gt;
&lt;p&gt;На перевале пообщались с МЧС, позвонили на базу в П-К - зарегистрировали группу, указали контрольные сроки и получили номер. Телефон МЧС, с кодом П-К: 8-41524-10-3-95.&lt;/p&gt;
&lt;p&gt;После постановки лагеря и обеда с Димой сгоняли на г.Верблюд и прошли по окрестностям.&lt;/p&gt;
&lt;p&gt;Встретились со Светой и Сашенькой. За обедом и ужином разговоры о дома и еде - рано как-то :)&lt;/p&gt;
&lt;p&gt;Отбой в 22.15. Завтра с Катей дежурим и восхождение на Авачинский вулкан.&lt;/p&gt;
&lt;h2 id=&#34;день-второй-6-сен-2011-вулкан-авачинская-сопка&#34;&gt;День второй. 6 сен 2011. Вулкан Авачинская сопка&lt;/h2&gt;
&lt;p&gt;Встали в 5 утра. Сегодня восхождение на Авачинский вулкан. Вышли на маршрут с небольшим опозданием в 6.10, само восхождение начали, по сути, в 6.30.&lt;/p&gt;
&lt;p&gt;До самого купола пролетели достаточно быстро. Сложно было ползти на сам конус, особенно первую часть, по чёрному сыпучему вулканическому пеплу. Стало легче, грунт стал более плотным, красного оттенка, но всё равно, местами внезапно становился сыпучим. За 200-300 метров до вершины стало сильно пахнуть серой, опять стало идти сложно: трудно дышать, резало глаза. Нацепил бандану на лицо, вскоре стала влажной от дыхания и серные выбросы стали причинять меньше дискомфорта.&lt;/p&gt;
&lt;p&gt;На вершине были в 11.56. Погуляли по кромке кратера. Захватил с собой несколько кусков самородной серы.&lt;/p&gt;
&lt;p&gt;Пока шли беспокоил сильный ветер, из-за которого иногда даже идти было сложно. На вершине он был вообще шквальным, так что стоять было уже сложно. Благо дул не порывами, а ровно.&lt;/p&gt;
&lt;p&gt;Спускались с воротника чуть по другому маршруту, с выходом мимо Верблюда к базе МЧС и далее в лагерь. В этом месте грунт представляет собой сыпучий вулканический песок и пемзу, так что спускаться быстро очень даже ничего, а вот подниматься тут потребует значительно больших усилий.&lt;/p&gt;
&lt;p&gt;Итого, за день 15.63 км пройдено, общее время в пути около 9.5 часов, средняя скорость на маршруте 1.65 км/час (в движении: 2.7 км/час)&lt;/p&gt;
&lt;h2 id=&#34;день-третий-7-сен-2011-выход-в-налычевскую-долину&#34;&gt;День третий. 7 сен 2011. Выход в Налычевскую долину&lt;/h2&gt;
&lt;p&gt;Первый переход, поиск тропы. Прошли по последствиям или селя или лавины - зрелище внушающее трепет и уважение к силам природы: высота фронта с 4-5 этажный дом, основа скальная порода, булыжники не обхватить трём человекам и больше по размерам.&lt;/p&gt;
&lt;p&gt;На небольшом леднике сделали привал на обед. По приборам вышли на снегоходный трек. На полянах начала попадаться голубика.&lt;/p&gt;
&lt;p&gt;Около 18.00 спустился туман, видимость резко сократилась метров до 10-15. Пришлось в брод переходить Левую Налычевую, моя же попытка перейти по камням привела к промоканию, хоть и не значительному ботинок и самосбросов. В скором времени вышли на Корякские нарзаны, опились водой на них и стали на ночёвку.&lt;/p&gt;
&lt;p&gt;Итого, прошли 22.49 км, средняя скорость в движении 3.3 км/ч, время в пути 10 часов.&lt;/p&gt;
&lt;h2 id=&#34;день-четвёртый-8-сен-2011-кордон-центральный&#34;&gt;День четвёртый. 8 сен 2011. Кордон Центральный&lt;/h2&gt;
&lt;p&gt;Второй день перехода. Морось, мокро.&lt;/p&gt;
&lt;p&gt;По пути снижают скорость группы заросли голубики и шикши (похожие на маленькую ёлочку стебельки, чёрные ягоды с маленькими семечками, при раздавливании дают красный сок который высыхая даёт фиолетовый цвет). Пасёмся в общем больше :)&lt;/p&gt;
&lt;p&gt;Перед самой Шумной вышли на нарзан с богатым содержанием серы. Запах соответствующий, знакомый по Аваче.&lt;/p&gt;
&lt;p&gt;Переправа через Шумную по мостику через узкое, нависающее над стремительным потоком ущелье. Направляемся к водопаду, но на месте его обнаруживаем простой трёхметровый порог, как позже нам рассказали в Центральном - был сель, который, скорее всего и уничтожил водопад.&lt;/p&gt;
&lt;p&gt;Подъём от Шумной крайне скользкий, сказывается то, что слой гумуса крайне тонкий, а под ним скальные образования, вся вода от дождя, сходя со склонов подходит близко к поверхности, образуя тем самым эдакое болото с углом наклона под 40-45 градусов. В одном месте в прямом смысле ударил лицом в грязь, подскользнувшись на корнях. По пути встречаем следы медведя, а так же следы &amp;ldquo;медвежьей болезни&amp;rdquo;. Опять стало попадаться много голубики и шикши.&lt;/p&gt;
&lt;p&gt;На кордоне решаем располагаться в домике с нарами (300 руб/чел/сутки). Плюс погода начинает малость приходить в норму (хотя что есть для природы норма&amp;hellip; вопрос философский).&lt;/p&gt;
&lt;p&gt;Развешиваемся и сушимся. Сходили на третью лужу искупаться. По дороге, слева от тропы, на опушке леса наблюдаем медведя, уплетающего ягоду.&lt;/p&gt;
&lt;p&gt;После водных процедур словили полный расслабон и решили сходить к управляющему, поинтересоваться, можно ли организовать экскурсию по окрестностям кордона и узнать цену. Нам, как некомерческой группе, дошедшей без проводников и своими силами, в рамках экологического образования экскурсию пообещали бесплатно.&lt;/p&gt;
&lt;p&gt;Итого, пройдено 17.87 км, ходовое время около 7 часов.&lt;/p&gt;
&lt;h2 id=&#34;день-пятый-9-сен-2011-днёвка-на-центральном&#34;&gt;День пятый. 9 сен 2011. Днёвка на Центральном&lt;/h2&gt;
&lt;p&gt;С утра морось, но вскоре наметилось улучшение погоды.&lt;/p&gt;
&lt;p&gt;В 11.00, как вчера договорились, подходим к домику егеря, где нас уже ждёт экскурсовод ______________. Экскурсия началась с посещения грифона Иванова, геотермальной площадки &amp;ldquo;котёл&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Последовала история, как образовался грифон (причина - авария при бурении во время изыскательских работ в 1958-59гг), что вода богатая мышьяком, калием, железом и другими элементами начала выжигать тундру (что видно по большому безжизненному пятну вокруг грифона), и что бы предотвратить экологическое бедствие, ему сделали искусственное русло для сброса воды в реку Теплая (она же проходит рядом со всеми горячими лужами). За руслом нужно постоянно следить, т.к. отложения из воды цементируют его, уменьшают его пропускную способность и вода может пойти в тундру. Поэтому каждый год нужно изрядно попотеть работая ломиком.&lt;/p&gt;
&lt;p&gt;Не менее интересный рассказ последовал и про естественную термальную площадку &amp;ldquo;котёл&amp;rdquo;. Закончилась экскурсия в домике-музее, после чего отправились купаться на лужи (для англоговорящих туристов их обозначили как thermal pool, дабы не смущать :)), на вышку наблюдать за медведями, потреблять шикшу и голубику. Так и прошёл весь день, хотя пытался сагитировать народ сходить на Желтую речку, посмотреть на палаточную стоянку там, прогуляться до Бабьего озера.&lt;/p&gt;
&lt;p&gt;День закончился водными процедурами в купальне, что сделали на ручье, вытекающем из грифона.&lt;/p&gt;
&lt;h2 id=&#34;день-шестой-10-сен-2011-пинечевский-перевал&#34;&gt;День шестой. 10 сен 2011. Пинечевский перевал&lt;/h2&gt;
&lt;p&gt;Погода с утра располагала к дороге. К перевалу топим как оголделые. Привалы были короткие - заедали мокрец напару с белоножкой, а на ходу эта братия, как по мановению волшебной палочки, исчезала.&lt;/p&gt;
&lt;p&gt;Таким образом к, ориентировочно, 13 часам подошли к перевалу. Погода же портилась на глазах. Вершина перевала встретила нас шквальным ветром и дождём, который падал не только сверху, но и летел паралельно земле, а даже снизу вверх. Причём капли били с такой силой, что создавалось впечатление, что идёт град, а ветер почти валил с ног. Чуть было не оставили несколько цехлов для рюкзаков.&lt;/p&gt;
&lt;p&gt;Почти у всех сразу промокли ботинки - вода по штанам слилась в них. У меня с этим оказалось лучше, штаны хоть и намокли сами, но ручьём вода в ботинки не текли.&lt;/p&gt;
&lt;p&gt;Теперь дождь и ветер приняли эстафету погоняющих нас у мошки и гнали сначала к приюту Перевальному и, далее, к кордону Семёновскому.&lt;/p&gt;
&lt;p&gt;Приют перевальный представляет собой один барак с нарами и печкой человек на 6-7 и костровой навес.&lt;/p&gt;
&lt;p&gt;В 16.30 были уже на кордоне Семёновский (два домика, один закрыт). Заняли весь второй этаж, развесились, сушились. К вечеру выглянуло солнце.&lt;/p&gt;
&lt;p&gt;Итого, пролетели 22 км с копейками за 7.5 часов&lt;/p&gt;
&lt;h2 id=&#34;день-седьмой-11-сен-2011-выход-в-пиначево&#34;&gt;День седьмой. 11 сен 2011. Выход в Пиначево&lt;/h2&gt;
&lt;p&gt;Ночью, то затихая, то начинаясь вновь, лил дождь, но утро встретило спокойной погодой, хотя воды на кустах воды и так хватало, так что вымокнуть нам не составило труда.&lt;/p&gt;
&lt;p&gt;Собирались долго, вышли около 9.30 утра. Тропа отличная, топим шустро.&lt;/p&gt;
&lt;p&gt;Километрах в пяти от кордона, проскакиваем приют Промежуточный (точка GPS P_PROM), который представляет собой поляну и костровой навес. Ещё через 6-7 километров прошли кострище и хорошую поляну под лагень (рядом речка, точка GPS PRIJIM).&lt;/p&gt;
&lt;p&gt;Прошли &amp;ldquo;домик лесорубов&amp;rdquo;, которого уже нет, остались только воспоминания в виде точки GPS из одного из отчётов, по которому мы составляли маршрут.&lt;/p&gt;
&lt;p&gt;В 14.00 были уже на кордоне в Пиначево. Быстрый обед и выброска в П-К, где сняли квартиру, помылись, постирались и посушились.&lt;/p&gt;
&lt;p&gt;Итого, 18.2 км за 4.5 часа&lt;/p&gt;
&lt;h2 id=&#34;день-восьмой-12-сен-2011-начало-второго-кольца&#34;&gt;День восьмой. 12 сен 2011. Начало второго кольца&lt;/h2&gt;
&lt;p&gt;В 9.19 за нами приехал Анатолий. Отвезли хозяйке квартиры ключи и отправились в Елизово забирать Свету (Сашенька откололась, решила на второе кольцо не идти).&lt;/p&gt;
&lt;p&gt;На Вилючинском перевале малость закипели, постояли, остывая, да долили воды в систему охлаждения. Но все же, в скором времени были на начале пешей части маршрута. Всего потребовалось 4.5 часа, что бы добраться от П-К.&lt;/p&gt;
&lt;p&gt;Маршрут встретил нас сильнейшим ветром. Когда проходили мимо сухого озера, испытали на себе пылевую бурю в миниатюре: ветер почти сбивает с ног и метёт мелкий вулканический песок, который успешно забивался в каждую непрыкрытую щель.&lt;/p&gt;
&lt;p&gt;Кате песок попал в глаза, кое как проморгалась, но до самого лагеря песчинка мешала. По этой причине запаковались, как смогли: лицо закрыли платками, шапки на лоб, на глаза очки. Вообще постарались свести к минимуму количество открытых участков тела и щелей, через которые пыль могла бы попасть в глаза.&lt;/p&gt;
&lt;p&gt;Так, делая короткие привалы в складках лавовых потоков, протопали почти до намеченной ориентировочной точки постановки базового лагеря. Увидели табличку, говорящую, что мы входим в пределы Южнокамчатского природного парка. Нашли подходящую площадку для установки палаток, защищённую, по максимуму, от ветра, недалеко от воды. Но не понравилось, что грунт глинистый: в случае дождя месили бы грязь по лагерю, поэтому нашли более подходящее место, удалённое метров на 50.&lt;/p&gt;
&lt;p&gt;Пока ставили палатки, прилетели девчёнки, что на поляне собирали шикшу и голубику (Света, Настя, Таня) со сдавленными криками: &amp;ldquo;МЕДВЕДЬ!&amp;rdquo; И действительно, по тому месту, где мы изначально хотели ставить лагерь, ковыляет мишка - красавец, шерсть лоснится, весь такой упитанный&amp;hellip; У кого были фотоаппараты бросились снимать, а остальные улюлюканием и криками начали отпугивать его. Медведь оказался умным и воспитанным: смерил взглядом турьё и без суеты удалился.&lt;/p&gt;
&lt;p&gt;Потом ходили смотреть его следы на снежнике, по которому он прошёл. Здоровый оказался.&lt;/p&gt;
&lt;p&gt;Появление сего гостя заставило подумать о размещении прод-запасов в базовом лагере. Было решено, крупы оставлять в палатках, а всякую пахучую снедь, вроде колбасы, сыра, сала, сгущёнки носить с собой в радиальные выходы.&lt;/p&gt;
&lt;p&gt;Вечером, в рамках программы противодействия появлению медведя, было решено утилизировать одну банку сгущёнки в торт, который быстро и оперативно употребили с вечерним чаем.&lt;/p&gt;
&lt;p&gt;Итого, за день сделали 9.84 км за 3 часа.&lt;/p&gt;
&lt;h2 id=&#34;день-девятый-13-сен-2011-фумарольные-поля-на-влкмутновский-и-каньон-опасный&#34;&gt;День девятый. 13 сен 2011. Фумарольные поля на влк.Мутновский и каньон Опасный&lt;/h2&gt;
&lt;p&gt;Ветер, переменная облачность, Горелый и Мутновский в шапках из облаков. Решаем идти в район каньона Опасный смотреть водопад, а потом подняться по леднику до фумарольных полей на Мутновском.&lt;/p&gt;
&lt;p&gt;Дежурные утром приготовили сразу и кашу, которую в котле взяли с собой в выход, дабы в пути только разогреть её, не тратя много времени на обед. Как и решили в предыдущий день, взяли и колбасы и сыры.&lt;/p&gt;
&lt;p&gt;Выйдя из лагеря, решили поглядеть на наш &amp;ldquo;фонтан&amp;rdquo; - небольшой водопадик, часть падающей воды которого сильным ветром отбрасывало вверх и назад так, что из далека было позже, что извергается гейзер. Крайне красивое зрелище.&lt;/p&gt;
&lt;p&gt;В скором времени выходим на дорогу и очень быстро добираемся до водопада. Бродим вдоль каньона, наблюдаем шикарные виды, попутно поедая бруснику, в обилии здесь растущую. Чуть ниже по ушелью нашли ещё одно, подходящую к Опасному. Там тоже течёт ручей, который водопадом срывается в каньон. Ущелье назвали &amp;ldquo;Подходящим&amp;rdquo;, ручей - &amp;ldquo;Подходящим&amp;rdquo;, а водопад - &amp;ldquo;Подходящим&amp;rdquo;. А полное название водопада тогда будет звучать так: водопад Подходящий на ручье Подходящем в ущелье Подходящем :)&lt;/p&gt;
&lt;p&gt;От водопада неспешно отправляемся в кальдеру вулкана Мутновского, где надышались серой, побродили как ёжики в тумане, и чуть было не дошли до конечной намеченной точки - горячего источника и видовой площадки, но из-за ограниченной видимости и отсутствия тропы после фумарольных полей, решили оставить эту затею.&lt;/p&gt;
&lt;p&gt;Обратный путь по ущелью напоминал движение в аэродинамической трубе - настолько был силён встречный ветер. Создавалось впечатление,  что ещё чуть чуть и можно будет левитировать над поверхностью ледника, что устилает дно ущелья.&lt;/p&gt;
&lt;p&gt;Подходя к лагерю, наблюдаем красивую радугу. Природа как бы компенсирует непогоду над вулканами. Хотя создалось впечатление, что два вулкана в сговоре: Горелый создаёт облака своими выбросами, а Мутновский, как более высокий, собирает их у себя на вершине.&lt;/p&gt;
&lt;p&gt;По возвращению в лагерь обнаруживаем, что палатку трёхместную потрепало, пришлось укреплять. Кроме того, как позже оказалось, повредило дугу. К нам с Катей в палатку намело изрядное количество вулканической пыли. Так что сходу пришлось делать уборку, вытаскивать всё имущество, вытряхивать пыль.&lt;/p&gt;
&lt;p&gt;Следов Михайло Потапыча не наблюдаем, молодец мишка :)&lt;/p&gt;
&lt;p&gt;Итого, лёгким темпом прошли 19.6 км потратив на всё около 7 часов.&lt;/p&gt;
&lt;h2 id=&#34;день-десятый-14-сен-2011-днёвка&#34;&gt;День десятый. 14 сен 2011. Днёвка&lt;/h2&gt;
&lt;p&gt;Ветер заметно стих, дует с Мутновского, при этом облака в среднем слое несёт наоборот к нему, а в верхнем слое - снова от него.&lt;/p&gt;
&lt;p&gt;После завтрака с Женей идём на холм рядом с лагерем (назвали сопка Ягодная, из-за обилия на ней голубики, шикши, брусники) для оценки облачной обстановки над Горелым. Видим, что вершина в облаке, советуемся, решаем, что нужно делать днёвку, наблюдать за погодой, а на следующий день, по погоде, идти на вулкан или в сторону Мутновской ГеоТЭС на дачные горячие источники, если погода будет совсем нелётной.&lt;/p&gt;
&lt;p&gt;За день отъелись ягодой, плюс насобирали почти 2 литра голубки впрок: для варенья и компотов.&lt;/p&gt;
&lt;p&gt;Погода в течении дня становилась всё лучше, ветер почти стих, облачность крайне малая, давление стабильно, но без скачков, повышалось. Вулканы к вечеру полностью освободились от облачного покрова и сверкали своими снежными вершинами в лучах медленно заходящего солнца.&lt;/p&gt;
&lt;p&gt;Когда стемнело, облачность стала вообще нулевой, на небе высыпались крупные звёзды, а температура упала до минус 4 градусов. В такой обстановке с Катей умудрились состегнуть спальники: одеяло и кокон. Захочешь спать в тепле, не так раскорячишься :)&lt;/p&gt;
&lt;h2 id=&#34;день-одиннадцатый-15-сен-2011-дачные-источники&#34;&gt;День одиннадцатый. 15 сен 2011. Дачные источники&lt;/h2&gt;
&lt;p&gt;Погода испортилась. Температура поднялась до +4 градусов утром, но на небо всё сильнее затягивало тучами. Решаем выждать немного времени, но к 11.00 затянуло ещё сильнее. Идти но Горелый нет смысла, поэтому сворачиваем лагерь и выдвигаемся в сторону ГеоТЭС, на источники.&lt;/p&gt;
&lt;p&gt;Скорость сворачивания лагеря повысилась после того, как в 5 метрах от палаток нашли свежие медвежьи следы - так, просто мимо проходил.&lt;/p&gt;
&lt;p&gt;Выдвигаемся через перевал между сопкой Двугорбой и Мутновским. Путь пролегал по старой, размытой дороге, которая после перевала в скором времени потерялась, но зато мы почти сразу вышли в долину со следами изыскательских работ для ГеоТЭС: кучи труб, буров; заглушки, воткнутые в землю, через вентиля которых (а в некоторых и через пробоины) спускается часть пара (горяченного!). Но кроме этой &amp;ldquo;красоты&amp;rdquo; находим и две фумарольные площадки с выходом горячей воды и серы, с булькающими грязевыми ваннами. Красиво. Тут же находим и следы жизнедеятельности медведя, видать тоже ходит красотами любоваться :)&lt;/p&gt;
&lt;p&gt;Остальной путь проделываем по дороге, встречая на своём пути, то там, то сям торчащие из земли, шипящие паром трубы.&lt;/p&gt;
&lt;p&gt;Сами источники представляют собой большую фумарольную площадку с выходом пара и газа разной мощности. Вся эта красота, как конфорка, греет протекающую по лощине речку, причём вода нагревается до очень приличной температуры - на самой площадке долго руку не получается держать.&lt;/p&gt;
&lt;p&gt;Один газовый канал расположился прямо на дне речки и своим напором отбрасывает вверх натекающую на него воду, образуя таким образом некоторое подобие гейзера.&lt;/p&gt;
&lt;p&gt;Лагерь ставим на площадке с видом на фумаролы (её не спутать). Там же на поляне стоят уже сплавщики (лет за 40) из Нижнего Новгорода, идут с проводником из местных. Его мы огорчили тем, что водопада на Шумной больше нет (сам он давно там не был).&lt;/p&gt;
&lt;p&gt;Обедаем, греемся у костра у новгородцев&amp;hellip; Тут начинается дождь, подручными средствами придумываю как укрепить палатку с ослабшей дугой, вроде что-то получается. Ужин и спать.&lt;/p&gt;
&lt;p&gt;Итого пройдено около 14 с небольшим километров, время затрачено много, ибо весь путь больше был связан с осмотром достопримечательностей.&lt;/p&gt;
&lt;h2 id=&#34;день-12-16-сен-2011-выброска-в-п-к&#34;&gt;День 12. 16 сен 2011. Выброска в П-К&lt;/h2&gt;
&lt;p&gt;С утра гуляем по источникам, сходили вниз по реке к водопаду на ручье. Кто-то отправляется купаться в горячих водах ручья. Сборы, движение в сторону КПП электростанции, ожидание Анатолия и дорога в П-К, где Женя уже по телефону пробил квартиру (как оказалось - крайне хорошую и удобную) для ночёвки.&lt;/p&gt;
&lt;p&gt;На этом пешеходная часть маршрута закончилась. Далее только попытки увидеть сивучей, которые, как оказалось, прибывают на лежбище только в октябре, попытка попасть в музей вулканологии, который не работает в субботу, но удалось попасть в краеведческий, на который нужно побольше времени и фотоаппарат, и дорога домой.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Изменение версии в многомодульном Maven проекте</title>
      <link>https://htrd.su/blog/2011/09/23/2011-09-23_14.18_izmenenie_versii_v_mnogomodulnom_maven_proekte/</link>
      <pubDate>Fri, 23 Sep 2011 14:18:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/09/23/2011-09-23_14.18_izmenenie_versii_v_mnogomodulnom_maven_proekte/</guid>
      <description>&lt;p&gt;Что бы одним махом изменить версию в многомодульном проекте, достаточно использовать плагин versions, подключив его к корневому pom:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-xml&#34; data-lang=&#34;xml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;plugin&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nt&#34;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.codehaus.mojo&lt;span class=&#34;nt&#34;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nt&#34;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;versions-maven-plugin&lt;span class=&#34;nt&#34;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nt&#34;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;1.2&lt;span class=&#34;nt&#34;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;/plugin&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Установить версию после этого можно командой:
mvn versions:set -DnewVersion=1.0.0-SNAPSHOT&lt;/p&gt;
&lt;p&gt;или аналогичным образом.&lt;/p&gt;
&lt;p&gt;Подробнее:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://mojo.codehaus.org/versions-maven-plugin/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://mojo.codehaus.org/versions-maven-plugin/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://mojo.codehaus.org/versions-maven-plugin/examples/set.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://mojo.codehaus.org/versions-maven-plugin/examples/set.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>JavaMail: кодировка темы сообщения</title>
      <link>https://htrd.su/blog/2011/09/01/2011-09-01_10.43_javamail_kodirovka_temy_soobschenija/</link>
      <pubDate>Thu, 01 Sep 2011 10:43:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/09/01/2011-09-01_10.43_javamail_kodirovka_temy_soobschenija/</guid>
      <description>&lt;p&gt;Делается так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;MimeMessage&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MimeMessage&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mailSession&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;setSubject&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;subject&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;utf-8&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;сообщение в этом случае должно быть типа &lt;code&gt;MimeMessage&lt;/code&gt;, потому как в интерфейсе &lt;code&gt;Message&lt;/code&gt; нет метода &lt;code&gt;setSubject()&lt;/code&gt; с аргументом, указывающим кодировку.&lt;/p&gt;
&lt;p&gt;Но можно сделать и так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Message&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MimeMessage&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mailSession&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;setSubject&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MimeUtility&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;encodeText&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;subject&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;utf-8&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Q&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Для тела сообщения кодировка задаётся вместе с mime-типом:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;setContent&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bodyText&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;text/plain;charset=UTF-8&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Впервые в гонке</title>
      <link>https://htrd.su/blog/2011/07/17/2011-07-17_20.15_vpervye_v_gonke/</link>
      <pubDate>Sun, 17 Jul 2011 20:15:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/07/17/2011-07-17_20.15_vpervye_v_gonke/</guid>
      <description>&lt;p&gt;16 июля позвали сходить в 
&lt;a href=&#34;http://sfyc.ru/regatta/2011/263.htm&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;гонку&lt;/a&gt; на яхте &amp;ldquo;Аккорд&amp;rdquo; в качестве откренки :) Сходил, понравилось, но ничего не понял: пока идешь от поворота до поворота, всё тихо и спокойно и как будто бы ничего не происходит, но как только поворот или, не дай божа, постановка или снятие паруса - суета, мелькание конечностей, ругань и прочая эмоция на неправильные действия. Не совсем понял, как перебираться с борта на борт, так что бы никому не помешать при повороте.&lt;/p&gt;
&lt;img style=&#39;margin-left: auto; margin-right: auto; width: w=600px;&#39; src=&#39;http://sfyc.ru/files/gallery/20222.jpg&#39;&gt;
&lt;img style=&#39;margin-left: auto; margin-right: auto; width: w=600px;&#39; src=&#39;http://sfyc.ru/files/gallery/20167.jpg&#39;&gt;
&lt;p&gt;Не прошло и без аварии: сцепились с яхтой &amp;ldquo;Факт&amp;rdquo; из Славянки: проходили рядом, они свалились с волны, зацепили своим гиком, что-то порвали, произошло всё быстро, но даже если бы могли уйти влево - там тоже яхта шла.&lt;/p&gt;
&lt;p&gt;Малость сожалею, что не сходил сегодня с ними во вторую гонку, особенно в связи с тем, что планы несколько расстроились сегодня.&lt;/p&gt;
&lt;p&gt;Все фото: 
&lt;a href=&#34;http://sfyc.ru/photo/2011/kubok-sem-futov-2011/gonki-flota/?p=1&amp;amp;rpp=12&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://sfyc.ru/photo/2011/kubok-sem-futov-2011/gonki-flota/?p=1&amp;rpp=12&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>JBoss, JDBC: Closing a connection for you</title>
      <link>https://htrd.su/blog/2011/07/14/2011-07-14_17.25_jboss_jdbc_closing_a_connection_for_you/</link>
      <pubDate>Thu, 14 Jul 2011 17:25:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/07/14/2011-07-14_17.25_jboss_jdbc_closing_a_connection_for_you/</guid>
      <description>&lt;p&gt;Если узреете у себя такие исключения:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;2011-07-14 17:11:14,652 INFO  [org.jboss.resource.connectionmanager.CachedConnectionManager] (http-localhost%2F127.0.0.1-8080-1) Closing a connection for you.  Please close them yourself: org.jboss.resource.adapter.jdbc.jdk6.WrappedConne
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ctionJDK6@6ae0286d: java.lang.Throwable: STACKTRACE
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Или около того, обратите внимание на этот документ: 
&lt;a href=&#34;http://community.jboss.org/wiki/WhatDoesTheMessageDoYourOwnHousekeepingMean&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://community.jboss.org/wiki/WhatDoesTheMessageDoYourOwnHousekeepingMean&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;А так же ознакомьтесь со следующей темой на форуме: 
&lt;a href=&#34;http://community.jboss.org/thread/73267&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://community.jboss.org/thread/73267&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;А если коротко: если вы получаете подключение из пула, всегда обрамляйте работу с ним в конструкцию &lt;strong&gt;try&lt;/strong&gt;/&lt;strong&gt;catch&lt;/strong&gt;/&lt;strong&gt;finally&lt;/strong&gt; примерно следующего вида:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Connection&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;conn&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;try&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// работа с базой...&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;finally&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;try&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;conn&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;close&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;catch&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Throwable&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ignored&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Град и молния</title>
      <link>https://htrd.su/blog/2011/07/02/2011-07-02_16.43_grad_i_molnija/</link>
      <pubDate>Sat, 02 Jul 2011 16:43:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/07/02/2011-07-02_16.43_grad_i_molnija/</guid>
      <description>&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;Участники:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Александр Дроздов&lt;/li&gt;
&lt;li&gt;Екатерина Кравченко&lt;/li&gt;
&lt;li&gt;Дима Киртока&lt;/li&gt;
&lt;li&gt;Олег Галимов&lt;/li&gt;
&lt;li&gt;Иван Горбач&lt;/li&gt;
&lt;li&gt;Оксана Карнаух&lt;/li&gt;
&lt;li&gt;Александр Вишневский&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;На 18-19 июня запланировали поход, долго думали куда понести свои тушки вместе с рюкзаками - нужно перед Камчаткой группу малость схаживать. Первым
вариантом был Голец, но прикинули, что на общественном транспорте слишком мало нам времени даётся, можем не успеть. Следующим вариантом становится Читинза
(она же Скалистая) в Партизанском районе, на нём и останавливаемся. Кинули клич в рассылке, для желающих разбавить наш коллектив. В среду (15 числа) в клубе составляем раскладку,
смотрим что по палаткам, котлам, распределяем коллективное имущество.&lt;/p&gt;
&lt;p&gt;Выезд запланировали на пятничной партизанской электричке в 20.07. Сбор, как обычно, в третьем вагоне с конца.&lt;/p&gt;
&lt;h2 id=&#34;день-первый-красноармейский&#34;&gt;День первый. Красноармейский&lt;/h2&gt;
&lt;p&gt;В электричке выясняем, что Ваня ходит в походы без пенки и спальника&amp;hellip; Чешу затылок, но раз утверждает, что так всегда, решаю, что и пусть, тем более, что палатки малость переполнены и одной пенкой можем поделиться (тремя нормально получается застелить пол и спать четверым).&lt;/p&gt;
&lt;p&gt;Красноармейский. Прибыли почти ровно в 24.00. Посёлок встретил нас теплым воздухом, облачным, но не пасмурным небом, на котором, сквозь облака, проглядывала красная луна. Закидываем на спину рюкзаки, фонарики на лоб и шагом марш пару километров до речки, где находим место для лагеря и уходим на ночлег.&lt;/p&gt;
&lt;h2 id=&#34;день-второй-блуждание-по-горам-встреча-на-эльбе-град-и-молния&#34;&gt;День второй. Блуждание по горам, &amp;ldquo;встреча на Эльбе&amp;rdquo;, град и молния&lt;/h2&gt;
&lt;p&gt;Утро выдалось ясное, просыпаться не хотелось. Да было и не особо нужно: изначально было запланировано, что выход делаем часов в 10 утра.&lt;/p&gt;
&lt;p&gt;Первым из палатки вылез Дима, развёл костёр, насобирал дров. Я вылез следом, соорудил очаг для готовки, занялся приготовлением завтрака. Лагерь, тем временем, постепенно пробуждался. Когда еда была готова, все уже были на ногах. Завтрак и сборы, умудрились даже выйти вовремя.&lt;/p&gt;
&lt;p&gt;Когда мыл котёл, на реке встретил рыбака, перекинулись приветствиями, поделился куда идём, он не понял, сказал, чего, мол, сейчас туда ходить, ягоды нет, шишки нет&amp;hellip; Не наш человек.&lt;/p&gt;
&lt;p&gt;Выдвигаемся.&lt;/p&gt;
&lt;p&gt;Скоро вышли на дорогу, ещё через некоторое время прошли ручьи. Дальше умудрились проскочить нужный поворот налево. Когда намёков на тропу не стало, да ещё странный факт, что солнце всегда было слева (т.е. шли почти всё время на юг), попросил Олега включить шайтан-машинку (на научному - GPS), сориентироваться, т.к. сам карту забыл. Определяем, что вышли не в тот распадок, от нужного, нас отделяет гребень. Решаем, что идти обратно не интересно, поэтому переваливаем на нужную тропу непосредственно через хребет - так, потренироваться перед основным восхождением.&lt;/p&gt;
&lt;p&gt;Когда спустились и вышли на тропу, оказалось, что до начала подъёма не больше 200-300 метров. Сделали привал, искупались в речке - водичка прелесть! Еду решаем готовить уже на вершине, запасаемся водой и в путь.&lt;/p&gt;
&lt;p&gt;Почти сразу на тропе встретили барсука, который шел навстречу, но как только увидел меня, резко начал драпать в противоположную сторону, но, при этом, чётко придерживался тропы. Ну да, не токмо людям комфортно по тропкам да дорожкам ходить, живность чем хуже?&lt;/p&gt;
&lt;p&gt;На смотровой скалке сделали привал минут на 20-30, больно уж виды красивые были. Там же познакомились с выводком щитомордников, решили что друг друга беспокоить не будем, на том и разошлись. Такой же привал сделали перед самой вершинкой, на каменной осыпи, те же шикарные виды, но с другого ракурса. Жалко только, что дымка и облака скрывали дальние сопки, а так видно было бы и хр.Большой воробей и Фалазу и Пидан&amp;hellip; Да ещё начал гром греметь, подгоняя, давайте, мол, быстрее, добирайтесь, ставьте тент, а то получите от меня жару!&lt;/p&gt;
&lt;p&gt;Но вот и вершина. Около странной конструкции видно какую-то группу. Кричим, кто-то откликается. Спускаемся к месту запланированной стоянки в леску на плато. Тут, вполне ожидаемо, но как всегда не вовремя, падают первые крупные капли дождя&amp;hellip; Быстро и оперативно ставим (криво, но весь основной дождь он так и простоял, когда уже перетянули по уму, дождя не было) тент, стаскиваем под него рюкзаки, и&amp;hellip; и засияло солнце! Природа явно шутница, однако!&lt;/p&gt;
&lt;p&gt;Я, Саша Вишневский и Олег собираемся за водой, оставляем Ване и Диме заготовку дров, а девушкам постановку палаток.&lt;/p&gt;
&lt;p&gt;Когда подошли к непонятной металлической конструкции на восточном краю плато, встретили группу, которую видели, когда ещё вышли к триангулятору, оказалось ребята из Партизанска, на один день. Перекинулись приветствиями, расспросили о дороге до города. Около родника с ними распрощались, набрали воды и поползли вверх.&lt;/p&gt;
&lt;p&gt;Подъём дался что-то уже тяжко, поэтому пропустил ребят вперёд, а сам несколько приотстал. Пока поднимался, гром начал греметь всё чаще и громче, туча потихоньку начала закрывать солнце. А тут ещё на гребне, как на зло, попались заросли дикого чеснока, пока собирал его уголком глаз, слева, увидел вспышку и, в ту же секунду, оглушительный раскат грома! Оказалось - молния ударила в мой склон. Мысли начали бегать - на гребне нет высоких деревьев, самый высокий предмет - это я сам. Тут опять вспышка молнии, на этот раз она угодила в соседний хребет (там где вышка стоит) и опять оглушительный раскат грома.&lt;/p&gt;
&lt;p&gt;В тот же момент, становлюсь свидетелем завораживающей картины: дует ветер, несёт облако, и на фоне соседнего гребня вижу, как вместе с ним движется сплошная стена воды. Ещё мгновение и эта стена доходит до меня, мгновение - мокрая правая рука, мгновение и меня всего окатывает водой как из ведра&amp;hellip;&lt;/p&gt;
&lt;p&gt;Решаю, что передвигаться в такой обстановке опасно, ложусь на живот на тропе (всё равно уже мокрый) и жду окончания ливня. Ох&amp;hellip; Если бы был только он! Проходит меньше минуты и по ушам начинает больно колотить град, крупный и неправильной формы. Закрываю голову и уши руками - думаю, что остальные участки тела сами смогут выдержать побои. Свезло, более крупных градин, нежели с ноготь, не было, да и шел он не долго.&lt;/p&gt;
&lt;p&gt;Не знаю, сколько продолжалось буйство стихии, мне оно показалось вечностью, на деле, оно, небось, и пяти минут не продлилось. Возвращаюсь в лагерь с собранным чесноком и своей пятилитровкой воды.&lt;/p&gt;
&lt;p&gt;А там очередная новость: Квазик (Александр Чернавин) и Саша (?) как и обещали добрались до нас (это они нам отвечали, когда мы кричали у триангулятора). Только ехали она на утренней электричке и шли, по сути, следом за нами, так же проскочили нужный поворот, но решили не возвращаться на тропу, а идти так же по гребню, делая крюк, но проходя по новому маршруту. С ними ещё пополнение - собака, которую дружно назвали Найда - увязалась за ними от самого Красноармейского и достаточно уверенно дошла до вершины (как сказал потом её хозяин - она не редко так гуляет с туристами).&lt;/p&gt;
&lt;p&gt;Разжигаем костёр, готовим обед. Только все покушали, получаем очередную порцию ливня. На этот раз он шел значительно дольше, но  без града. Моя палатка, хоть уже и дама в летах, но в таких передрягах не бывала, но выдержала достойно - не дала ни единой течи. Умничка и молодец!.&lt;/p&gt;
&lt;p&gt;Пока дождь не кончился, малость подтянули тент и залезли в палатки. В нашей, вчетвером (Я, Катя, Оксана, Дима) играли в кошки-мышки, игру захватила с собой Оксана.&lt;/p&gt;
&lt;p&gt;Как только выглянуло солнце решаю перевешивать тент (хотя можно было бы этого и не делать, но лучше перестраховаться), ребята тем временем заново разжигают напрочь залитый костёр.&lt;/p&gt;
&lt;p&gt;Хорошее продолжение дня, но омрачают разброд и шатания некоторых участников, по поводу как идти обратно и во сколько вставать в воскресенье. Махнул рукой, в результате Саша Вишневский, Саша (?) и Оксана остаются дольше и возвращаются тем же маршрутом, что мы шли на подъем. Я, Катя, Дима и Олег идём на спуск в Партизанск (надеясь, что там тропа полегче - Диме с его рукой было бы идти проще), а Ваня и Квазик решаются оставаться до понедельника (с планами зайти на Смольную).&lt;/p&gt;
&lt;p&gt;Что бы немного развеяться отправляюсь за водой, компанию составляет мне Саша Вишневский. Когда вернулись обратно, ещё одна нехорошая новость: Дима, рубя дрова, рассёк левую руку, хорошо, что не глубоко и что с нами была Катя и её аптечка, обработала рану и наложила повязку (и меняла её после периодически).&lt;/p&gt;
&lt;p&gt;Отбой.&lt;/p&gt;
&lt;h2 id=&#34;день-третий-спуск&#34;&gt;День третий. Спуск&lt;/h2&gt;
&lt;p&gt;Ранний подъём, встреча рассвета, завтрак, сборы, фотосессия у триангулятора.&lt;/p&gt;
&lt;p&gt;Выходим в обратный путь около 10 часов утра. На роднике набираем воды и двигаемся вниз по тропе.&lt;/p&gt;
&lt;p&gt;Тропа в Партизанск крайне крутая, ступни и пальцы сильно напрягаются, хорошо по ней идти с трекинговыми палками или посохом. Почти в самом низу отдыхаем на брусничной поляне (брусника цветёт, наверно даже ягода будет). Ещё через некоторое время делаем остановку и купаемся на ручье. Когда вышли к началу грунтовой дороги, что ведёт в Каменку, на поляне, сделали привал на обед. Здесь нас нагнали Квазик и Ваня - отправились за продуктами на последующие дни. Скормили им остатки супа и чая (который приготовили из подручных средств, ибо Ваня, на завтрак, жахнул всю оставшуюся заварку в котёл, подручные же средства были: лист смородины, немного брусники и корень имбиря).&lt;/p&gt;
&lt;p&gt;Вместе добрались до Каменки, распрощались у магазинчика и отправились дальше к станции (решили не ждать автобуса). До станции топать около часа-часа с копейками, там купили билеты, у кого было во что, переоделись, загрузились и поехали, заняв места, тем, кто возвращался в Красноармейский и там уже подсаживался к нам.&lt;/p&gt;
&lt;h2 id=&#34;заключение&#34;&gt;Заключение&lt;/h2&gt;
&lt;p&gt;Разбродошающимся - самим поорганизовывать походы, кому мало сладостей в раскладке - самим посоставлять оную, тем кто умеет готовить - не стесняться предлагать свою помощь в готовке походных блюд. Собаку вернули хозяевам. Квазик так и не дошёл до Смольной. Фото будут как только так сразу. И, в общем, добротно вышло. До новых встреч и новых походов!&lt;/p&gt;
&lt;p&gt;PS У Димы с рукой всё нормально, заживёт, будет как новенькая! :)&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Готовим растровую карту для навигатора Garmin GPSMap 62s/64s</title>
      <link>https://htrd.su/blog/2011/06/26/2011-06-26_14.58_gotovim_rastrovuju_kartu_dlja_navigatora_garmin_gpsmap_62s/</link>
      <pubDate>Sun, 26 Jun 2011 14:58:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/06/26/2011-06-26_14.58_gotovim_rastrovuju_kartu_dlja_navigatora_garmin_gpsmap_62s/</guid>
      <description>&lt;p&gt;&lt;strong&gt;UPD 2013-11-16:&lt;/strong&gt; обновил список программ, добавил информацию об автоматической обрезке рамок, добавил информацию о создании многослойного JNX. Убрал текст помеченный как &lt;del&gt;удалённый&lt;/del&gt;. За остальными подробностями - в историю изменения страницы. Вики всё же :)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPD 2024-11-15&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;по растру ещё можно поглядеть цикл статей на этом блоге: 
&lt;a href=&#34;https://blog.lexa.ru/tags/jnx&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://blog.lexa.ru/tags/jnx&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;в частности референс на следующие тулы:
&lt;ul&gt;
&lt;li&gt;JNXCustomizer&lt;/li&gt;
&lt;li&gt;jnxmerge&lt;/li&gt;
&lt;li&gt;jnx2img&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://www.the-thorns.org.uk/mapping/help/jnx.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://www.the-thorns.org.uk/mapping/help/jnx.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://github.com/apr2504/jnxutil&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/apr2504/jnxutil&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;уточнил информацию по map2jnx&lt;/li&gt;
&lt;li&gt;поправил форматирование текста/блоков кода&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Задача: сделать растровую карту для навигатора Garmin GPSMap 62s.&lt;/p&gt;
&lt;p&gt;Инструменты:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GDAL 1.8.0. С версии 1.10.0 научился конвертировать привязки OZI Explorer в виде .map + растр (.png, .gif и т.п.) в geotiff, рекоменду обновляться.&lt;/li&gt;
&lt;li&gt;map2jnx 1.7.8. В последних версиях QLandkarteGT идёт в комплекте + уже с моими патчами для задания различного scale-factor для разных слоёв. Скачёк версии с 0.2.4 до 1.7 (или даже 1.6) случился как раз из-за включения в состав QLandkarteGT.
&lt;ul&gt;
&lt;li&gt;QLandkarteGT задепрекейчена в пользу новой программы от автора - 
&lt;a href=&#34;https://htrd.su/blog/2016/02/11/qmapshack/&#34;&gt;QMapShack&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;map2jnx, что бы не конфликтовать по имени, из комплекта QMapShack переименован в &lt;code&gt;qmt_map2jnx&lt;/code&gt; (QMT - QMapTool - внешний тул из комплекта QMapShack для привязки карт). Текущая версия - 1.17.1 (ноябрь 2024).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.qlandkarte.org&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;QLandKarteGT&lt;/a&gt; или 
&lt;a href=&#34;https://bitbucket.org/maproom/qmapshack/wiki/Home&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;QMapShack&lt;/a&gt; - нужны для просмотра.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NEW:&lt;/strong&gt; 
&lt;a href=&#34;https://htrd.su/blog/2012/06/22/dve_utility_dlja_raboty_s_kartami_ozi2map_i_geocrop/#geocrop.md&#34;&gt;geocrop&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NEW:&lt;/strong&gt; 
&lt;a href=&#34;https://htrd.su/blog/2012/06/22/dve_utility_dlja_raboty_s_kartami_ozi2map_i_geocrop/#ozi2map.md&#34;&gt;ozi2map&lt;/a&gt;, опционально, если у вас GDAL младше 1.10.x и есть куча растров привязанных в OZI Explorer (.gif, .png, .jpg и т.д.)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Исходные карты в формате OZFX3 (Ozi Explorer) с готовой привязкой. Если нет привязанных карт, можно 
&lt;a href=&#34;http://sites.google.com/site/osmbelarus/Home/manuals/qlandkarte-gt/qlandkarte-make-geotiff&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;почитать тут&lt;/a&gt; как это сделать самому. Теперь можно брать любые озиковские привязки (кроме OZFX2 и новых шифрованных OZFX3), но только если у вас версия gdal больше 1.10.0, иначе можно воспользоваться утилитой 
&lt;a href=&#34;https://htrd.su/blog/2012/06/22/dve_utility_dlja_raboty_s_kartami_ozi2map_i_geocrop/#ozi2map.md&#34;&gt;ozi2map&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;конвертируем-карту-из-ozfx3-в-geotiff&#34;&gt;Конвертируем карту из OZFX3 в GeoTIFF&lt;/h2&gt;
&lt;p&gt;Для простых привязок OZI Explorer почти всё аналогично. Про использование &lt;em&gt;ozi2map&lt;/em&gt; я писать не буду в виду простоты оной, а так же её неактуальности.&lt;/p&gt;
&lt;p&gt;Про это я уже упомянул в своей 
&lt;a href=&#34;https://htrd.su/blog/2011/06/25/2011-06-25_15.26_ozfx_v_geotiff/&#34;&gt;прошлой заметке&lt;/a&gt;, теперь немного развернём, в частности, как исправить что бы проекция стала корректной для всех остальных программ. Буду приводить на примере конкретных имен файлов.&lt;/p&gt;
&lt;p&gt;Конвертируем карту в GeoTIFF:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gdal_translate -of GTiff 200k--n57-21_ozf.map 200k--n57-21_ozf.tiff
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Карты внутри OZFX3 зачастую имеют индексированную палитру, поэтому сделаем из них RGB, что бы потом добиться прозрачности ненужных областей:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pct2rgb.py 200k--n57-21_ozf.tiff 200k--n57-21_ozf-rgb.tiff
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Теперь исправим систему координат в нужную (датум Пулково 1942, элепсоид Красовского, проекция Гаусса-Крюгера (разновидность поперечно-цилиндрической проекции (Transverse Mercator)) для нужной зоны), при преобразовании укажем какой цвет использовать в результирующем изображении как nodata:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gdalwarp -t_srs &lt;span class=&#34;s2&#34;&gt;&amp;#34;EPSG:28427&amp;#34;&lt;/span&gt; -dstnodata &lt;span class=&#34;s2&#34;&gt;&amp;#34;255&amp;#34;&lt;/span&gt; 200k--n57-21_ozf-rgb.tiff 200k--n57-21_ozf-rgb-fixed.tiff
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Дам немного пояснений: параметр EPSG, точнее номер, смотрится в базе EPSG, например 
&lt;a href=&#34;http://gisgeek.pdx.edu/webmapping/epsg.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;тут&lt;/a&gt; или 
&lt;a href=&#34;http://nautilus.baruch.sc.edu/resources/mapserver/epsg&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;тут&lt;/a&gt;, для простоты же можно принять, что последние две цифры в номере и есть номер зоны листа, т.е. &amp;ldquo;EPSG:284##&amp;rdquo;, где вместо &amp;ldquo;##&amp;rdquo; подставляется номер зоны, который, если нужно, дополняется лидирующим нулём (т.е. не &amp;ldquo;2&amp;rdquo;, а &amp;ldquo;02&amp;rdquo;). Значение EPSG можно полностью заменить описанием проекции, как её считать, можно посмотреть в вышеприведённой статье про привязке генштабовских карт, или брать из тех же базах EPSG((Например тут: 
&lt;a href=&#34;http://spatialreference.org/ref/epsg/284##/proj4/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://spatialreference.org/ref/epsg/284##/proj4/&lt;/a&gt;, где вместо ## ставим номер зоны - получаем параметры системы координат в виде набора параметров для proj4)). Отмечу только, что номер зоны так же легко узнаётся из номенклатурного листа, просто из номера вычитается 30, т.е. в нашем случае лист &amp;ldquo;n57&amp;rdquo;, значит номер зоны:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-scilab&#34; data-lang=&#34;scilab&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Nз&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;57&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;27&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Кроме того номер зоны легко узнаётся из километровой сетки: у полгого значения в километрах отбрасывается три последние цифты и остаётся номер зоны (на листе линии нумеруются двухзначным числом, но в левом верхнем углу, обычно, стоит небольшими цифрами что-то вроде 274, т.е. полное значение будет 27444, если на вертикальной линии стоит подпись 44, а номер зоны отсюда - 27). И всё-таки вынесу формулы расчёта центрального меридиана и номера зоны по прочим данным:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-scilab&#34; data-lang=&#34;scilab&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;lon_0&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Nз&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;            # центральный меридиан по известной зоне&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Nз&lt;/span&gt;    &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;floor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lon&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;    # номер зоны по любому значению долготы на листе&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;floor&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; взятие целой части от деления&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Nз&lt;/span&gt;    &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lon_0&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;       # номер зоны по центральному меридиану &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;частный случай&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x_0&lt;/span&gt;   &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Nз&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1000000&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;500000&lt;/span&gt; # мнимый восток &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;false&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;easting&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;А теперь сделаем всё пространство, которое стало после предыдущего преобразования nodata полупрозрачным:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gdalwarp -srcnodata &lt;span class=&#34;s2&#34;&gt;&amp;#34;255&amp;#34;&lt;/span&gt; -dstalpha 200k--n57-21_ozf-rgb-fixed.tiff 200k--n57-21_ozf-rgb-result.tiff
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Сразу сохраним (на будущее) геоданные из файла:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;listgeo -no_norm 200k--n57-21_ozf-rgb-result.tiff &amp;gt; 200k--n57-21_ozf-rgb-result.geo
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Все эти шаги объеденены в маленьком скрипте:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#!/bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;use&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Use: &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$0&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; &amp;lt;OziExplorer MAP file&amp;gt; [Gauss-Kruger Zone]&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; -z &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    use
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;inf&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;basename &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$inf&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; .map&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# convert ozfx to geotiff&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;tmp1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;mktemp&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gdal_translate -of GTiff &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$inf&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$tmp1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# convert pallete to RGB&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;tmp2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;mktemp&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pct2rgb.py &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$tmp1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$tmp2&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Check zone or calculate it&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; -z &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$2&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;central_meridian&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;gdalinfo &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$tmp2&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep &lt;span class=&#34;s2&#34;&gt;&amp;#34;central_meridian&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sed &lt;span class=&#34;s1&#34;&gt;&amp;#39;s|.*PARAMETER&amp;lt;br/&amp;gt;[&amp;#34;central_meridian&amp;#34;,&amp;lt;br/&amp;gt;([0-9.]&amp;lt;br/&amp;gt;+&amp;lt;br/&amp;gt;)&amp;lt;br/&amp;gt;].*|&amp;lt;br/&amp;gt;1|&amp;#39;&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;zone&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;expr &lt;span class=&#34;nv&#34;&gt;$central_meridian&lt;/span&gt; / &lt;span class=&#34;m&#34;&gt;6&lt;/span&gt; + 1&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;zone&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$2&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; -z &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$zone&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Gauss-Kruger Zone for map don&amp;#39;t set and I can&amp;#39;t take it from source map. Please point it manually and try again.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# format zone to two digit&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;zone&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;printf&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;%.2d&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$zone&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# EPSG data&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# See: http://gisgeek.pdx.edu/webmapping/epsg.html&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# See: http://nautilus.baruch.sc.edu/resources/mapserver/epsg&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;EPSG&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;EPSG:284&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$zone&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Fix projection and coordinate systems&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;tmp3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;mktemp&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gdalwarp -t_srs &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$EPSG&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; -dstnodata &lt;span class=&#34;s2&#34;&gt;&amp;#34;255&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$tmp2&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$tmp3&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Make transparency and produce map, also, save geodata to TXT&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gdalwarp -srcnodata &lt;span class=&#34;s2&#34;&gt;&amp;#34;255&amp;#34;&lt;/span&gt; -dstalpha &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$tmp3&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$name&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;.tiff&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;listgeo -no_norm &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$name&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;.tiff&amp;#34;&lt;/span&gt; &amp;gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$name&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;.geo&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm -f &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$tmp1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$tmp2&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$tmp3&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Использовать очень просто:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./genshtab-ozfx3-to-geotiff.sh 200k--n57-21_ozf.map
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;В результате работы в этом же каталоге появятся два новых файла:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;200k&amp;ndash;n57-21_ozf.tiff - привязанный GeoTIFF&lt;/li&gt;
&lt;li&gt;200k&amp;ndash;n57-21_ozf.geo  - геоданные из карты, для будущих преобразований.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Если же карту привязывали сами в QLandKarteGT, то для полученного в ней результата потребуется выполнить только шиги 4 и 5&lt;/p&gt;
&lt;h2 id=&#34;обрезка-рамки&#34;&gt;Обрезка рамки&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;ВНИМАНИЕ!&lt;/strong&gt; Ручная обрезка рамки. &lt;strong&gt;Только в ознакомительных целях&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;UPD 2013-11-16:&lt;/strong&gt; тест ниже оставлен только для ознакомительных целей. Сразу переходите к разделу &amp;ldquo;Автоматическая обрезка рамки&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;На этом этапе карта привязана, как нужно повернута, полупрозрачность добавлена, геоданные в отдельный файл сохранены. Теперь можно приступать к обрезке рамок.&lt;/p&gt;
&lt;p&gt;Тут небольшое лирическое отступление: все рассмотренные мной инструменты, которые работают напрямую с GeoTIFF не позволяют вырезать произвольные области, а с &lt;em&gt;gdalwarp&lt;/em&gt; и его опциями &lt;em&gt;-cutline&lt;/em&gt; и &lt;em&gt;-crop_to_cutline&lt;/em&gt; я пока так и не понял как работать: всё время получается пустой (полностью прозрачный) результирующий файл. По этой причине, Я решил, что нужно сохранить геоданные в файл, редактировать его в любом растровом редакторе (ГЛАВНОЕ НЕ МЕНЯТЬ РАЗМЕРА В ПИКСЕЛЯХ!!!) и потом копировать в результат сохраненные данные о привязке.&lt;/p&gt;
&lt;p&gt;Итак, растровый редактор - GIMP и его инструмент &amp;ldquo;Лассо&amp;rdquo; (для произвольного выделения). Выделяем нужную область, раставляя точки в углах (этого, по большей части, достаточно). Когда область выделения будет замкнута, нужно инвертировать выделение (Ctrl+I) и нажать Del. После чего экспортировать картинку в тот же файл, в параметрах экспорта выбрать сжатие LZW и обязательно снять галочку с параметра &amp;ldquo;Сохранять значения цвета прозрачных точек&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;После чего к сохранённому файлу (предполагаю, что перезаписан был тот же файл, что и открывался) добавляем данные привязки:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;geotifcp -g 200k--n57-21_ozf.geo 200k--n57-21_ozf.tiff 200k--n57-21_ozf-croped.tiff
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Всё, на этом шаге имеем привязанную карту с обрезанными полями.&lt;/p&gt;
&lt;h3 id=&#34;автоматическая-обрезка-рамки&#34;&gt;Автоматическая обрезка рамки&lt;/h3&gt;
&lt;p&gt;Да, меня достала ручная обрезка и около года назад (на момент обновления статьи), при подготовке картографического материала для предстоящего похода по Кодару я написал маленькую утилиту &lt;em&gt;geocrop&lt;/em&gt;, которая, используя номенклатурную информацию о листе карты, производит автоматическое определение нужной области и обрезку лишнего. Про саму программу можно почитать тут: 
&lt;a href=&#34;https://htrd.su/blog/2012/06/22/dve_utility_dlja_raboty_s_kartami_ozi2map_i_geocrop/#geocrop.md&#34;&gt;post/2012/06/22/dve_utility_dlja_raboty_s_kartami_ozi2map_i_geocrop#geocrop&lt;/a&gt;. Там же примеры использования.&lt;/p&gt;
&lt;h2 id=&#34;склейка-карт&#34;&gt;Склейка карт&lt;/h2&gt;
&lt;p&gt;Вышеприведённые шаги выполняем для нужного количества листов, дальше стоит, по логике, следующая задача: склейка карт.&lt;/p&gt;
&lt;p&gt;Интуитивно просится для этой операции программа &lt;em&gt;gdal_merge.py&lt;/em&gt;. Вот только в ходе своей работы она перезаписывает прозрачным цветом соседние изображения, как результат - слитые изображения разделены прозрачными полосами, причем, достаточно широкими. И тут приходят на помощь списки рассылок, достаточно добавить параметр &amp;ldquo;-n 0&amp;rdquo; и всё становится на свои места :) в результате команда для объединения выглядит примерно так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gdal_merge.py -n &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; -o kamchatka-elizovo-rgb.tiff -co &lt;span class=&#34;nv&#34;&gt;COMPRESS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;LZW -co &lt;span class=&#34;nv&#34;&gt;TILED&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;YES *-croped.tiff
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;В QLandKarteGT, при сборке атласа все карты тоже отлично сошлись, но с таким атласом можно работать только в самом QLandKarteGT (в можно прямо из него экспортировать в JNX, за подробностями - в документацию).&lt;/p&gt;
&lt;p&gt;Всё, на этом шаге мы получаем большой склеенный GeoTIFF.&lt;/p&gt;
&lt;h2 id=&#34;генерация-jnx&#34;&gt;Генерация JNX&lt;/h2&gt;
&lt;p&gt;Для использования в моём навигаторе, нужно будет прошить его патченной прошивкой, которая снимает ограничение на использованием формата JNX, ссылки по этой теме накидаю несколько позже, сейчас же считаю, что навигатор готов к перевариванию этого формата карт.&lt;/p&gt;
&lt;p&gt;У нас есть большой TIFF с привязкой, теперь его можно преобразовать в формат JNX, для этого потребуется утилита &lt;em&gt;map2jnx&lt;/em&gt;, до недавних пор она пряталась в svn проекта QLandkarteGT, не имела официальной странички. Теперь же её версия скаканула с 0.2.4 до 1.7.8 и поставляется вместе с QLandkarteGT. Пользователям современных дистрибутивов и пользователям Windows теперь даже собирать ничего не нужно.&lt;/p&gt;
&lt;p&gt;Собрается карта не просто, а очень просто:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;map2jnx -n &lt;span class=&#34;s2&#34;&gt;&amp;#34;Kamchatka. Elizovo&amp;#34;&lt;/span&gt; -m &lt;span class=&#34;s2&#34;&gt;&amp;#34;Kamchatka. Elizovo&amp;#34;&lt;/span&gt; -c &lt;span class=&#34;s2&#34;&gt;&amp;#34;Alexander Drozdov &amp;lt;hatred@inbox.ru&amp;gt;&amp;#34;&lt;/span&gt; kamchatka-elizovo-rgb.tiff kamchatka-elizovo.jnx
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;где:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;-n&amp;rdquo; задаёт имя карты&lt;/li&gt;
&lt;li&gt;&amp;ldquo;-m&amp;rdquo; имя продукта (будет выводится в навигаторе при выборе карты)&lt;/li&gt;
&lt;li&gt;&amp;ldquo;-c&amp;rdquo; данные о копирайте, предлагаю записывать сюда создателя карты, что бы иметь возможность к нему обратиться, вдруг если что.&lt;/li&gt;
&lt;li&gt;kamchatka-elizovo-rgb.tiff - мой склеенный GeoTIFF&lt;/li&gt;
&lt;li&gt;kamchatka-elizovo.jnx - результирующий файл. Скачать его 
&lt;a href=&#34;http://hatred.homelinux.net/~hatred/maps/kamchatka/elizovo/kamchatka-elizovo.jnx&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;можно тут&lt;/a&gt;((на 2013-11-16 ссылка битая, если кому срочно нужно: пишите на почту или в комментарии))&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Просмотреть карту на компе можно в программе QLandKarteGT, правда отображается она там малость убого, но для общего представления вполне себе сгодится. В приборе отображается корректно.&lt;/p&gt;
&lt;p&gt;Что бы карта увиделать в приборе, надо её забросить в каталог /Garmin/BirdsEye во внутренней памяти или на флешке.&lt;/p&gt;
&lt;h3 id=&#34;многослойный-jnx&#34;&gt;Многослойный JNX&lt;/h3&gt;
&lt;p&gt;Выше мы сделали однослойный JNX, который будет смотреться хорошо (будет читабельным) только при каком-то одном увеличении. Весь же цимус JNX кроется в его многослойности, возможности для каждого режима увеличения прибора выбирать какой-то свой слой.&lt;/p&gt;
&lt;p&gt;Логично, что для панорамного обзора лучше использовать карду 1:1 000 000, и делать масштам карты больше, по мере увеличения.&lt;/p&gt;
&lt;p&gt;map2jnx это позволяет. Но в первых версиях была проблема: коэффициенты увеличения выбирались автоматически по формуле, по сути, взятой с потолка. После некоторого количества проб и ошибок, подобрать алгоритм вычисления коэффициента увеличения в зависимости от номенклатурного масштаба листа не получилось. Поэтому был сделан ход конём: добавилась опция командной строки, через которую можно задать коэффициенты увеличения JNX через запятую, каждый из которых будет использован для соотвествующей входной карты.&lt;/p&gt;
&lt;p&gt;Итак, какие входные данные нам нужны? А нужно повторить все шаги до раздела (включительно) &amp;ldquo;Склейка карт&amp;rdquo; для карт разных масштабов, к примеру:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1:1 000 000&lt;/li&gt;
&lt;li&gt;1:500 000&lt;/li&gt;
&lt;li&gt;1:200 000&lt;/li&gt;
&lt;li&gt;1:100 000&lt;/li&gt;
&lt;li&gt;1:50 000&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;При наличии автоматической резалки границ карт, это не должно занять много времени (только время на обработку карт).&lt;/p&gt;
&lt;p&gt;Количество слоёв JNX ограничено 5, поэтому, возможно, придётся чем-то жертвовать.&lt;/p&gt;
&lt;p&gt;Далее нужно выдать примерно такую команду:
map2jnx -p 1 -c &amp;lsquo;Alexander Drozdov 
&lt;a href=&#34;mailto:hatred@inbox.ru&#34;&gt;hatred@inbox.ru&lt;/a&gt;&amp;rsquo; -m Kodar -n &amp;lsquo;Kodar 1M, 500k, 200k, 100k, 50k&amp;rsquo; -z 25 -x 78125,20834,7813,3125,1303 1M/merge/kodar-1M-pct.tif 500k/merge/kodar-500k-pct.tif 200k/merge/kodar-200k-pct.tif 100k/merge/kodar-100k-pct.tif 50k/merge/kodar-50k-pct.tif kodar-1M-50k.jnx&lt;/p&gt;
&lt;p&gt;Она нам создаст многослойный &lt;code&gt;kodar-1M-50k.jnx&lt;/code&gt;((если кому нужно - тоже могу поделиться)) из набора склееных карт для разных масштабов. Интересна опция &lt;code&gt;-x&lt;/code&gt; и цифры - это, собственно, и есть коэффициенты масштаба, выведены эмпирическим путём, хорошо подходят для прибора Garmin GPSMAP 62s. Более подробно в справке к &lt;em&gt;map2jnx&lt;/em&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -x Override levels scale. Default: autodetect
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Scale levels must be pass in same order as level files pointed.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Empty and zero values equal to autodetect. We can point only needed
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;levels, like:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -x 45356,,,75&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; -x ,,,,75
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Calculated levels table can be found:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  English: http://whiter.brinkster.net/en/JNX.shtml
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  Russian: http://whiter.brinkster.net/JNX.shtml
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Most common values &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; different map scales:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  JNX scale              Map scale
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -------------          ---------
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  78125-31250            1:1 &lt;span class=&#34;m&#34;&gt;000&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  20834-7813             1:500 &lt;span class=&#34;m&#34;&gt;000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  7813-3125              1:200 &lt;span class=&#34;m&#34;&gt;000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  3125-2084              1:100 &lt;span class=&#34;m&#34;&gt;000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  2084-782               1:50 &lt;span class=&#34;m&#34;&gt;000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  782-32                 1:25 &lt;span class=&#34;m&#34;&gt;000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  32-21                  1:10 &lt;span class=&#34;m&#34;&gt;000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  21-14                  1:5000, 1:2000
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Остальные опции описаны выше.&lt;/p&gt;
&lt;h2 id=&#34;выводы-и-результаты&#34;&gt;Выводы и результаты&lt;/h2&gt;
&lt;p&gt;Полтора дня мозгового штурма и приятный и вкусный результат.&lt;/p&gt;
&lt;p&gt;Кроме того, чувствуется необходимость в фронт-энде к этим утилитам для более комфортного проведения операций обрезки и склейки карт.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPD 2013-11-16:&lt;/strong&gt; больше 2х лет прошло с момента публикации статьи, графических утилит так и не появилось, но появились инструменты для автоматического кропа и, как следствие, для практически полного скриптинга процесса конвертации и получения готового рузультата. Теперь, при наличии хороших источников привязанных карт, подготовка пятислойного JNX практически для любого района занимает не больше 1 часа времени на достаточно слабом нетбуке EeePC.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>OZFX в GeoTIFF</title>
      <link>https://htrd.su/blog/2011/06/25/2011-06-25_15.26_ozfx_v_geotiff/</link>
      <pubDate>Sat, 25 Jun 2011 15:26:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/06/25/2011-06-25_15.26_ozfx_v_geotiff/</guid>
      <description>&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; Данный способ конвертации подходит только для карт старого, некриптованного формата OZFX3 и не подходит для карт формата OZFX, OZFX2 и для нового зашифрованного OZFX3.&lt;/p&gt;
&lt;p&gt;Оказывается сию процедуру в Linux можно сделать при помощи утилиты &lt;em&gt;gdal_translate&lt;/em&gt; из библиотеки GDAL:
gdal_translate -of GTiff 200k&amp;ndash;n57-01_ozf.map 200k&amp;ndash;n57-01.tiff&lt;/p&gt;
&lt;p&gt;Получается нормальный валидный tiff. Проблема, что геоданные о привязке не всегда перевариваются другими программами, хотя и сохраняются, вот, к примеру, фрагмент вывода &lt;em&gt;gdalinfo&lt;/em&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Coordinate System is `&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GCP Projection = 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;PROJCS[&amp;#34;unnamed&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    GEOGCS[&amp;#34;Pulkovo 1942&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        DATUM[&amp;#34;Pulkovo_1942&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            SPHEROID[&amp;#34;Krassowsky 1940&amp;#34;,6378245,298.2999999999998,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                AUTHORITY[&amp;#34;EPSG&amp;#34;,&amp;#34;7024&amp;#34;]],
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            AUTHORITY[&amp;#34;EPSG&amp;#34;,&amp;#34;6284&amp;#34;]],
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        PRIMEM[&amp;#34;Greenwich&amp;#34;,0],
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        UNIT[&amp;#34;degree&amp;#34;,0.0174532925199433],
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        AUTHORITY[&amp;#34;EPSG&amp;#34;,&amp;#34;4284&amp;#34;]],
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    PROJECTION[&amp;#34;Transverse_Mercator&amp;#34;],
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    PARAMETER[&amp;#34;latitude_of_origin&amp;#34;,0],
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    PARAMETER[&amp;#34;central_meridian&amp;#34;,159],
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    PARAMETER[&amp;#34;scale_factor&amp;#34;,1],
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    PARAMETER[&amp;#34;false_easting&amp;#34;,500000],
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    PARAMETER[&amp;#34;false_northing&amp;#34;,0],
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    UNIT[&amp;#34;metre&amp;#34;,1,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        AUTHORITY[&amp;#34;EPSG&amp;#34;,&amp;#34;9001&amp;#34;]]]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GCP[  0]: Id=1, Info=
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          (110,92) -&amp;gt; (312850.595383564,6212735.20674275,0)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GCP[  1]: Id=2, Info=
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          (1325,93) -&amp;gt; (344034.004166507,6211493.42884751,0)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GCP[  2]: Id=3, Info=
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          (2544,89) -&amp;gt; (375221.866305868,6210477.54231118,0)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GCP[  3]: Id=4, Info=
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          (100,1538) -&amp;gt; (311242.069242769,6175640.4309,0)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GCP[  4]: Id=5, Info=
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          (1326,1542) -&amp;gt; (342693.733518233,6174392.90643577,0)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GCP[  5]: Id=6, Info=
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          (2557,1535) -&amp;gt; (374149.759678358,6173372.32291538,0)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GCP[  6]: Id=7, Info=
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          (91,2985) -&amp;gt; (309639.985652898,6138547.1302834,0)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GCP[  7]: Id=8, Info=
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          (1328,2989) -&amp;gt; (341358.837088592,6137294.02823664,0)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GCP[  8]: Id=9, Info=
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          (2568,2983) -&amp;gt; (373081.95597641,6136268.88603608,0)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Задел на будущие думы.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPDATE 2013-11-18:&lt;/strong&gt; в статье 
&lt;a href=&#34;https://htrd.su/blog/2011/06/26/2011-06-26_14.58_gotovim_rastrovuju_kartu_dlja_navigatora_garmin_gpsmap_62s/&#34;&gt;post/2011-06-26_14.58_gotovim_rastrovuju_kartu_dlja_navigatora_garmin_gpsmap_62s&lt;/a&gt; рассматривается вариант конвертации с исправлением ошибки в формате геоданных.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>PhotoDocNG на SoftPedia</title>
      <link>https://htrd.su/blog/2011/06/23/2011-06-23_17.26_photodocng_na_softpedia/</link>
      <pubDate>Thu, 23 Jun 2011 17:26:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/06/23/2011-06-23_17.26_photodocng_na_softpedia/</guid>
      <description>&lt;p&gt;Как-то упустил сей момент, но программа PhotoDocNG, вышедшая из-под моего пера, внезапно оказалась востребованной и используемой и доброжелатель под ником Sincerely опубликовал её на софтпедии:&lt;br/&gt;&lt;br/&gt;

&lt;a href=&#34;http://www.softpedia.com/get/Multimedia/Graphic/Digital-Photo-Tools/PhotoDocNG.shtml&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.softpedia.com/get/Multimedia/Graphic/Digital-Photo-Tools/PhotoDocNG.shtml&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Можно и по шампанскому :)&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Qt Creator Plugins Docs</title>
      <link>https://htrd.su/blog/2011/06/02/2011-06-02_07.48_qt_creator_plugins_docs/</link>
      <pubDate>Thu, 02 Jun 2011 07:48:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/06/02/2011-06-02_07.48_qt_creator_plugins_docs/</guid>
      <description>&lt;p&gt;По мотивам рассылки 
&lt;a href=&#34;mailto:qt-creator@qt.nokia.com&#34;&gt;qt-creator@qt.nokia.com&lt;/a&gt;, подборка документации по написанию плагинов для Qt Creator&amp;rsquo;а:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.vcreatelogic.com/downloads/?file=Writing-Qt-Creator-Plugins&amp;amp;type=pdf&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Writing Qt Creator Plugins&lt;/a&gt; (PDF)&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://doc.qt.nokia.com/qtcreator-extending/index.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://doc.qt.nokia.com/qtcreator-extending/index.html&lt;/a&gt; - руководство по расширению Qt Creator:
&lt;ul&gt;
&lt;li&gt;Plugin interface:
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://doc.qt.nokia.com/qtcreator-extending/extensionsystem.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://doc.qt.nokia.com/qtcreator-extending/extensionsystem.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://doc.qt.nokia.com/qtcreator-extending/extensionsystem-iplugin.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://doc.qt.nokia.com/qtcreator-extending/extensionsystem-iplugin.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Core:
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://doc.qt.nokia.com/qtcreator-extending/core.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://doc.qt.nokia.com/qtcreator-extending/core.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://doc.qt.nokia.com/qtcreator-extending/core-actionmanager.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://doc.qt.nokia.com/qtcreator-extending/core-actionmanager.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;API reference:
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://doc.qt.nokia.com/qtcreator-extending/qtcreator-api.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://doc.qt.nokia.com/qtcreator-extending/qtcreator-api.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Для примера можно поглядеть различные плагины на гиториусе: 
&lt;a href=&#34;https://gitorious.org/search?q=qt&amp;#43;creator&amp;#43;plugins&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://gitorious.org/search?q=qt+creator+plugins&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Если будет появляться новая информация, буду дополнять пост.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>&#34;12 месяцев&#34; или все времена года за три дня</title>
      <link>https://htrd.su/blog/2011/05/18/2011-05-18_15.42_12_mesjacev_ili_vse_vremena_goda_za_tri_dnja/</link>
      <pubDate>Wed, 18 May 2011 15:42:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/05/18/2011-05-18_15.42_12_mesjacev_ili_vse_vremena_goda_za_tri_dnja/</guid>
      <description>&lt;p&gt;Давно давно был запланирован небольшой походик на майские праздники, близ девятого мая. Поход в рамках &amp;ldquo;Школы начальной туристической подготовки&amp;rdquo; - поделиться опытом, поглядеть на людей в реальной обстановке.&lt;/p&gt;
&lt;p&gt;Изначально маршрут захватывал г.Синюю и реку Правая Икрянка (с выходом в Ястребовку), но просчитав маршрут, оценив возможности группы, решил, что не успеем и скорректировал:&lt;br/&gt;&lt;br/&gt;
Ключ Еломовский-Первый водопад (&amp;ldquo;Звезда Приморья&amp;rdquo;)-г.Лысая-г.Белая-р.Малая Алексеевка-р.Алексеевка-первый мост.&lt;/p&gt;
&lt;p&gt;С выброской нам помог Руслан из Партизанска (если кому нужно будет его контакты - обращайтесь). Доставил нас до ЖД вокзала в Партизанске, где мы сели на электричку.&lt;/p&gt;
&lt;h2 id=&#34;подготовка&#34;&gt;Подготовка&lt;/h2&gt;
&lt;p&gt;Где-то за месяц до мероприятия сделал рассчёт маршрута, тогда же встала проблема - как выбрасываться с Алексеевки? Топать пешком по полям по дороге, по которой достаточно много ездят - удовольствие сомнительное. Кинул клич. Тут откликается Настя, и даёт телефон Руслана. Созвонился с ним за два недели, обговорил возможности выброски. За два дня до отправления сделал контрольную прозвонку, сделали последние уточнения, договорились выйти на связь в воскресенье 8го числа (по рассчётам, в это время мы должны добраться на г.Белая). Заброску на начало планируем на рейсовом автобусе, что идёт до Преображения (510 маршрут). Отправление планируем в пятницу вечером в 17:50.&lt;/p&gt;
&lt;p&gt;В среду, за две недели до начала, собираемся в клубе, что бы окончательно определиться с составом группы, распределить обязанности, распределиться по палаткам. В результате состав вышел следующий:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Александр Дроздов (Хатрид)&lt;/li&gt;
&lt;li&gt;Настя Курлаева&lt;/li&gt;
&lt;li&gt;Света Похожалова&lt;/li&gt;
&lt;li&gt;Дима Киртока&lt;/li&gt;
&lt;li&gt;Лёша Шабаев&lt;/li&gt;
&lt;li&gt;Наташа Сальникова&lt;/li&gt;
&lt;li&gt;Андрей Малюгин&lt;/li&gt;
&lt;li&gt;Аня Беляева&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Алексею доверили роль завхоза, Андрей у нас стал негласным навигатором, а Настя - казначеем.&lt;/p&gt;
&lt;p&gt;К выходным Леша составил меню и раскладку, которую лишь малость скорректировали по замечаниям Кати Кравченко.&lt;/p&gt;
&lt;p&gt;В последнюю среду (4 мая) перед отправкой сделали контрольный сбор. К тому времени Настя уже купила билеты на всю группу (брать билеты лучше заранее на подобные маршруты - очень мало автобусов и мала вероятность в последний момент успешно уехать). Лёша распределил продукты по участникам, в клубе взяли котлы и топор. Выдал последние наставления, что в пятницу быть заранее, хотя бы к 17:30, что бы поберечь свои и чужие нервы.&lt;/p&gt;
&lt;h2 id=&#34;отъезд&#34;&gt;Отъезд&lt;/h2&gt;
&lt;p&gt;Вот и пятница, день пролетает как фанера над Парижем вот и вечер. в 16:30 выруливаю с рюкзаком с работы. Погода не айс. В районе второй речки пробки, и, хотя есть запас по времени, малость нервничаю. На вокзале встречаю Андрея. Остальных не наблюдаю. Решаем передвигаться к платформе, от которой отходит наш автобус и там уже ждать народ.&lt;/p&gt;
&lt;p&gt;Естественно, в 17:30, как и было оговорено, были только единицы. Дима прибежал на автобус чуть ли не в последний момент&amp;hellip; Ох уж это вечернее пятничное движение в стольном граде Владивостоке. Но ничего, успеваем, пакуем рюкзаки в багажное отделение, сами прыгаем по местам.&lt;/p&gt;
&lt;p&gt;Поехали&amp;hellip;&lt;/p&gt;
&lt;p&gt;На удивление город нас легко отпустил: простояли в пробке только до развязки на второй речке, дальше полетели как на ракете (делая поправку на ремонт дороги :)).&lt;/p&gt;
&lt;p&gt;По пути коротали время кто как мог: кто-то спал, кто-то вёл разговоры. Так мал-по-малу добрались до Лазо, говорю Андрею включать его шайтан-машинку (GPS), что бы прикинуть где нам выходить и вовремя попросить водителя об остановке. Для не обладающих сим чудом буржуйской техники, остановку можно определить словесными координатами: дорожный знак &amp;ldquo;25км&amp;rdquo; у моста (можно добавить: у знака поворота).&lt;/p&gt;
&lt;p&gt;Высадка, на удивление, водитель крайне не ворчливо высадил нас посреди ночной трассы (а дорога ещё и грунтовая), даже поинтересовался, когда, мол, в обратный путь? Сказав спасибо, малость переложив вещи (отдал топор и дуги от палатки Диме, а у него забрал непоместившиеся ему в рюкзак котлы) решаем отправляться искать место под лагерь, подальше от дороги и поближе к ручью.&lt;/p&gt;
&lt;p&gt;На часах 12 ночи.&lt;/p&gt;
&lt;p&gt;Потихоньку дошли по грунтовке (сначала коллективно подумав по какой из нужно собственно идти) до Еломовского ключа, где и решили переночевать.&lt;/p&gt;
&lt;p&gt;Кто-то порывался готовить ужин, чай, но пока ставились палатки народ понял - что больше хочется спать. Единственно, что предусмотрительно собрали дров и сложили их под растянутым тентом - ночной дождик сделал бы утреннее разведение костра проблемным занятием.&lt;/p&gt;
&lt;p&gt;Отбой, на часах 2 ночи. Мне, Насте и Свете вставать в 6 утра - распаливать костёр, готовить завтрак.&lt;/p&gt;
&lt;h2 id=&#34;день-первый&#34;&gt;День первый&lt;/h2&gt;
&lt;p&gt;Звон будильника. Встаётся на удивление легко. Потихоньку, стараясь особо не тревожить сон Андрея и Димы, выползаю в мокроту (ночью прошёл небольшой дождь). Сразу мысль: &amp;ldquo;экие мы молодцы, что навесили тент, оттащили под него дрова и сделали запас сухой бересты&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Пока не бужу девушек - делаю кострище, развожу огонь: на мокрой земле сделал подстилку из сухих сучьев, разложил на них бересту, вокруг выложил небольшой колодец дровишек покрупнее, бересту присыпал сухой щепой, которую предварительно набил с сухого полешка. Костёр занялся с одной спички. Как только он разгорелся, отправился будить Настю и Свету: кашеварить. Пока они вылазили из палатки, занялся изготовлением подвеса для котлов. Они тем временем и воду сами умудрились принести, молодцы :)&lt;/p&gt;
&lt;p&gt;К семи часам начал будить народ. Не все просыпались крайне охотно и собирались оперативно, но&amp;hellip; это дело опыта, да и закладывал подобные задержки. Хотя на будущее нужно отрабатывать.&lt;/p&gt;
&lt;p&gt;В общем, сборы затянулись, вышли только около девяти часов. Вернулись около 500 метров назад по дороге от ручья к развилке, от которой идёт дорога к полянам, и от которых уже ведёт тропа к водопадам.&lt;/p&gt;
&lt;p&gt;К 11 часам (или около того) были на водопадах. Поддался на уговоры убрать обед, и только приготовить чай: не делайте так, после двух третей подъёма есть хотелось, до ужаса :)&lt;/p&gt;
&lt;p&gt;Чай, чаем, а костёр развести нужно: то и дело начинается небольшой дождик, зябко, сыро, мокро. Разбегаемся собирать дрова. Дима и Леша молодцы - до конца похода были выделяющимися дровозаготовителями :) Я тем временем облазил рядом стоящие останцы (точнее под ними), нашел смоляной пень, из которого вывернул корень, и немного бересты. Спустившись вниз, наблюдаю неудачные попытки распалить костёр. Натесав топором смоляной щепы, подложив бересты помогаю распаливать огонь. Как только заплясали язычки пламени, сообразили и подвес. Часть смоляной щепы, завернул в газету и положил в рюкзак - наверху, в седловине пригодилось.&lt;/p&gt;
&lt;p&gt;Но вот чаепитие закончено, часть неучтёнки, бравшееся в автобус, съедено, закидываем рюкзаки и начинаем карабкаться на водопад, от него поднимаемся по первому правому притоку и далее по курумнику, медленно, но верно, забирая влево начинаем выходить на хребтик, по которому после уже доскакали на саму вершину.&lt;/p&gt;
&lt;p&gt;Дождь тем временем прекратился, даже камни смогли подсохнуть, так что подъём давался достаточно легко. Аня время от времени оглашала окрестности своими вскриками. В один момент, она говорит, что рюкзак перевешивает, решаю навести ревизию по укладке&amp;hellip; Для чего читаются лекции? Правильно! Для того, что бы их сразу забывать! А материалы выкладваются, что бы их не читать :) В общем, потратили минут 20 на укладку и утяжку её рюкзака, попутно рассказывая почему это, почему так.&lt;/p&gt;
&lt;p&gt;В начале весь наш путь шел в тумане. Время от времени ветром его сдувало и открывались отличные виды на долину, на тот участок пути, что мы прошли, но пока доставались фотоаппараты, тем же ветром опять затягивало окрестности белым молоком. Когда вышли на хребет видимость несколько улучшилась. Там же сделали небольшой перекус сухофруктами и орехами.&lt;/p&gt;
&lt;p&gt;Несколько последних рывков и&amp;hellip; мы на вершине&amp;hellip; Сразу одолели двоякие ощущения: с одной стороны, радостно что дошли, с другой: &amp;ldquo;холодно, туман, ветер&amp;rdquo;. Сам себя начинаю бранить, что перчатки и шапку положил утром вглубь рюкзака. Пришлось покопаться, что бы немного приодется. Хотел разослать сообщения, что, мол, поднялись, но телефон упорно не видит ни одной базовой станции.&lt;/p&gt;
&lt;p&gt;После короткой фотосессии у триангулятора и небольшого пересуда куда спускаться: на стоянку, но тогда придётся сделать, на следующий день лишних пару километров, или спускаемся, как запланировано, в седловину и там ночуем. Решаем глянуть на стоянку, а потом, как масть пошлёт, если что, вернёмся назад: время хоть и поджимает, но есть.&lt;/p&gt;
&lt;p&gt;До стоянки не дошли, увидели что снега там море, и, скорее всего от её удобств мы ни получим никакой выгоды, предлагаю поворачивать и спускаться в седловину. Подспутно думаю, что делать, если и там будет ветер, решение только одно: сделать ветроотбойник из тентов, огородив ими лагерь. Но сбросив около 100 метров и войдя в лес, ветер, как мановению волшебной палочки прекратился. Зато оказалось много мокрого снега (до по-развилку и выше).&lt;/p&gt;
&lt;p&gt;Спускаемся, тропим, выбираем место и ставим лагерь. Палатки ставим на утрамбованный снег, расстелив под ними немного лапника, дыба талый снег не доставлял хлопот. Костёр решаем разводить на настиле из поленьев, которые нашли там же. Дима и Алексей и тут отметились как отличные дровосеки: спилили большую сушнину, сделав из неё два полена - организовали &amp;ldquo;лавочки&amp;rdquo; около костра. Костёр сделали таёжного типа, котлы ставили прямо на дрова.&lt;/p&gt;
&lt;p&gt;Разжечь огонь получилось не сразу: вокруг всё сыро и холодно, даже береста на рядом стоящей берёзе вымокла. Тут спасли запасённые (не помню кто дал: Дима или Лёша) тряпочки, пропитанные в воске и смоляная щепа, что я захватил снизу. Так или иначе, но огонь запылал, и запылал ярко и жарко. Даже, было всплакнувшая Аня, что холодно, мокро и голодно, быстро согрелась и повеселела. А после ужина, радости вообще прибавилось всем :)&lt;/p&gt;
&lt;p&gt;Палаток решили ставить две и разместиться в них по четыре человека: теплее и меньше лапника рубить на подстилку. Т.к. у Ани оказался спальник явно не по погоде предлагаю её к нам в палатку, расстелить тонкий спальник на пенку и накрыться моим. Предложение было принято и, как оказалось, не зря.&lt;/p&gt;
&lt;p&gt;Ужиная, и греясь у огня, на ум приходит сказка &amp;ldquo;12 месяцев&amp;rdquo;: костёр как в сказке, посреди леса, тут у нас снег, внизу же цветы цветут, прошли будто через несколько времён года.&lt;/p&gt;
&lt;p&gt;У огня долго никто не задерживался, скоро все отправились спать.&lt;/p&gt;
&lt;h2 id=&#34;день-второй&#34;&gt;День второй&lt;/h2&gt;
&lt;p&gt;Дежурство приняли Алексей, Наташа и Дима. По результатам первого дня был уверен, что и огонь они без проблем разожгут, и с дровами у них проблем не будет и как котлы повесить сообразят. Молодцы ребята (да, да, Дима, &amp;ldquo;Даёшь молодежь!&amp;rdquo; :)). Правда подъём они нам устроили в 8 утра, когда, по идее, хорошо бы было выходить.&lt;/p&gt;
&lt;p&gt;Костёр с вечера не тушили, за ночь дрова потихоньку прогорали, протапливая снег. У утру наш таёжный костёр на настиле превратился в полинезийский, только не в земляной яме, а в снежной :)&lt;/p&gt;
&lt;p&gt;Быстро завтракаем, приводим себя в порядок, собираемся. Мимоходом спрашиваю Аню как спалось, ответ короткий и ясный: &amp;ldquo;как у Бога за пазухой&amp;rdquo;. Шучу в ответ, что мол, не Бог, так&amp;hellip; божок.&lt;/p&gt;
&lt;p&gt;Выходим в начала десятого.&lt;/p&gt;
&lt;p&gt;В горку тропить оказывается несколько сложнее (и с чего бы!?), но все же постепенно продвигаемся к вершине Белой.&lt;/p&gt;
&lt;p&gt;Про Белую нас пугали, что можем увязнуть в кедровом стланнике, поэтому был морально готов к самому худшему. Однако, мы крайне ловко вырулили на опушку леса, и хотя его заросли были повсюду, мы вышли в том месте, где он стелился по земле, и идти прямо по нему было достаточно комфортно. Кроме того, была возможность его обходить, правда тогда приходилось делать тропу с снеге, что доставляло некоторые неудобства, хотя его и было значительно меньше (не выше колена), нежели в лесу.&lt;/p&gt;
&lt;p&gt;И вот вершина. Собираемся у обелиска девушки погибшей на сплаве, которую посвящали в туристы на этой вершине. Фотографируемся. Я включаю телефон: нужно попытаться прозвониться к Руслану, подтвердить, что мы идём, что за нами нужно приезжать. Связь ведёт себя капризно, но всё же получается сделать звонок и, через несколько попыток, отправить SMS сообщение.&lt;/p&gt;
&lt;p&gt;При помощи компаса, карты, Андрея с его шайтан-машинкой-навигатором, и чудо-прибором &amp;ldquo;что-то мне подсказывает&amp;rdquo; ориентируемся, куда нам начинать спуск, ведь Белая оставила впечатления схожие с Лысой: ветер, холодно, туман.&lt;/p&gt;
&lt;p&gt;Направление выбрали правильное, а вот место для спуска я запланировал не совсем удачное (то что сначала влезли в стланник не считается: сильно мало нам по нему пришлось лазить): после относительно пологого, но непродолжительного спуска последовал крайне крутой спуск по курумнику. Причем камни мелкие и неустойчивые. Решаем идти змейкой, собираясь на поворотах, дабы не послать камень идущему ниже по склону (хотя на подъём мы так же старались придерживаться этого правила, но там было значительно положе).&lt;/p&gt;
&lt;p&gt;Спуск затянулся: хоть и сброс высоты происходил быстро, но идти приходилось медленно и осторожно. Но всё же и это препятствие оказалось позади, а скоро вышли и к ручью, по которому планировали выйти к Малой Алексеевке. Слева от него, на пригорке замечаем следы былой вырубки. Лёша предлагает сгонять на разведку, проверить наличие дороги. Даю добро и скоро уже шагаем вниз &amp;ldquo;по асфальту&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Погода тем временем радует, после первого дождливого и промозглого дня, после туманного утра в седловине и на Белой, небо, к моменту нашего спуска внизу, очистилось от туч и солнце крепко стало пригревать. Спускаясь по дороге, немного проходим старый лесосклад, который приметили ещё на спуске, когда прикидывали своё расположение. Чуть ниже, на дороге, недалеко от речки решаем располагаться на обед. Место удачное: широкая обочина, огромные пиленные поленья, которые использовали как стулья и столы.&lt;/p&gt;
&lt;p&gt;Пока дежурные разводили огонь и готовили обед, расстелили на просушку тенты, палатки, свои вещи. С молчаливого моего согласия, просидели на обеде около трёх часов, получилась эдакая микро-полудневка. Зато бодрость духа значительно повысилась и настроение сильно улучшилось. Там же на обеде замечаю, что на моих ботинках разошлись почти все швы на заднике, и подошва уже держится на честном слове. &amp;ldquo;Отходили своё&amp;rdquo;,- подумал я: &amp;ldquo;Лишь бы продержались до выброски!&amp;rdquo; А всего два года, и в крутых походах не бывали.&lt;/p&gt;
&lt;p&gt;Последний на сегодня этап: дойти до р.Алексеевка. Забегая вперёд: недовыполнили план, как раз по причине лишнего часа на обед, но оно того стоило!&lt;/p&gt;
&lt;p&gt;Путь по дороге вдоль Малой Алексеевки особо ничем не выделялся, удивляло только огромное количество птичьх гнезд на деревьях вдоль дороги, создавалось впечатление птичьего поселения.&lt;/p&gt;
&lt;p&gt;Мосты все размыты, но почти везде были завалы на реке, по которым можно было перебраться на другой берег, не замочив ног. Это не помешало мне и Диме первую переправу сделать вброд&amp;hellip; водичка чудная! Да и мой внешний вид мог порадовать: расстёгнутые самосбросы, а что бы не мешались, прижаты подтяжками, которые пропущены между ног и опять нацеплены на плечи&amp;hellip; Хитрая конструкция, и, думается, крайне смешно выглядит со стороны. Жаль никто не догадался снять это на фотоаппарат.&lt;/p&gt;
&lt;p&gt;На жёсткой дороге часто сбиваются ноги, народ шёл нормально, но мои боты, будучи в крайне плачевном состоянии, стали натирать. Пришлось сделать остановку, заклеиться лейкопластырем. Правда помогло лишь частично, но всё же стало комфортнее.&lt;/p&gt;
&lt;p&gt;К девяти часам вечера были почти у самой пещеры &amp;ldquo;Белый дворец&amp;rdquo; (буквально чуть чуть не доходя). Расположились на большой поляне. Поставили палатки, развели костёр, поужинали. Долго решил не засиживаться, тем более, что на следующий день помогать дежурным.&lt;/p&gt;
&lt;h2 id=&#34;день-третий&#34;&gt;День третий&lt;/h2&gt;
&lt;p&gt;Спать было зябко. Разоспался только к утру, когда сообразил утянуть спальник&amp;hellip; и почти сразу звонит будильник. Неприятно, вылазить не хочется, но, собрав волю в кулак, расстёгиваю спальник и вылажу в утреннюю прохладу. Как оказалось, утром температура была ниже нуля (о чём говорил иней на траве, замерзшие влажные оттяжки у палатки и термометр Димы :)).&lt;/p&gt;
&lt;p&gt;На кострище остались угли, натесав щепы и вытащив спрятанные Андреем под полы палатки дрова, распаливаю костёр. Андрей скоро сам показывается из палатки, а следом и Дима, хоть сегодня и не его дежурство. Передаю бразды правления утренней готовкой и предлагаю поднимать Аню в помощь.&lt;/p&gt;
&lt;p&gt;Утренние сборы заняли значительно меньше времени чем в первые два дня, но всё равно вышли с задержкой, в 8:20. Через несколько сот метров Леша и Наташа показали отворот к пещере Белый дворец, сходили сфотографироваться у входа. Около пещеры явные следи, того, что она часто посещается людьми. И следы эти отнють не самые приятные. Странно, ведь большинство приезжает сюда на машинах, разве так трудно собраться мусор в мешки и увезти с собой?&lt;/p&gt;
&lt;p&gt;Меньше чем через час дошли до слияния Малой Алексеевки и Алексеевки, решили не делать привал, а остановиться чуть дальше, километра через 2-3 на втором мосту. После второго моста с небольшими перерывами дошли и до первого. Это была конечная точка пешего пути, на два часа дня здесь была договорена встреча с Русланом.&lt;/p&gt;
&lt;p&gt;Небо тем временем затянулось тучами, стали падать отдельные капли дождя. На стоянке быстры растянули тент, пока (не удивились да?) Дима, Леша и Андрей занимались заготовкой дров, и перетащили под него рюкзаки, оставив место и для людей (если потесниться, тента 3х3 для этих целей хватает). Сготовили обед и покушали. Когда уже ополаскивали посуду и почти собрали рюкзаки, подъехал Руслан (несколько задержался, ну для того запас по времени, хотя и излишний, как оказалось, и закладывался). Поздоровались, познакомились, показал фотографии. Ехали эскортом: в микрике - народ, в микрогрузовичке - оставшиеся два человека и рюкзаки.&lt;/p&gt;
&lt;p&gt;В скором времени были на вокзале в Партизанске. Руслан оставил свои координаты (второй телефон и адрес), мол если будут проблемы где переночевать - обращайтесь!&lt;/p&gt;
&lt;p&gt;На этой ноте распрощались с ним и отправились ожидать электричку и ехать домой.&lt;/p&gt;
&lt;p&gt;На этом и закончился наш переход через Партизанский хребет.&lt;/p&gt;
&lt;h2 id=&#34;приложения&#34;&gt;Приложения&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Фото, от меня, Алексея Шабаева и Андрея Малюгина: 
&lt;a href=&#34;https://picasaweb.google.com/adrozdoff/nYAIG&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://picasaweb.google.com/adrozdoff/nYAIG&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Maven trouble</title>
      <link>https://htrd.su/blog/2011/04/27/2011-04-27_13.15_maven_trouble/</link>
      <pubDate>Wed, 27 Apr 2011 13:15:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/04/27/2011-04-27_13.15_maven_trouble/</guid>
      <description>&lt;p&gt;Сегодня отхватили, что Maven отказался на отрез выкачивать пакеты с HTTPS репозитария JBoss, матерясь:
PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target&lt;/p&gt;
&lt;p&gt;Решение найдено было тут: 
&lt;a href=&#34;http://blogs.sun.com/andreas/entry/no_more_unable_to_find&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://blogs.sun.com/andreas/entry/no_more_unable_to_find&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Если коротко:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Качаем класс: 
&lt;a href=&#34;http://blogs.sun.com/andreas/resource/InstallCert.java&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://blogs.sun.com/andreas/resource/InstallCert.java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Компиляем его:&lt;code&gt;javac InstallCert.java&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Запускаем рраз:&lt;code&gt;java InstallCert repository.jboss.org&lt;/code&gt; жмахаем 1 и &lt;RETURN&gt;&lt;/li&gt;
&lt;li&gt;Запускаем два:&lt;code&gt;java InstallCert repository.jboss.org&lt;/code&gt; видим что сертификат теперь trusted.&lt;/li&gt;
&lt;li&gt;Копируем файл jssecacerts в $JAVA_HOME/jre/lib/security&lt;/li&gt;
&lt;li&gt;Удаляем кеш Maven:&lt;code&gt;rm -rf ~/.m2/repository&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Всё, после этого должно всё работать.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Начальник обоза</title>
      <link>https://htrd.su/blog/2011/04/26/2011-04-26_17.07_nachalnik_oboza/</link>
      <pubDate>Tue, 26 Apr 2011 17:07:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/04/26/2011-04-26_17.07_nachalnik_oboza/</guid>
      <description>&lt;p&gt;Даааа&amp;hellip; люблю себя насяльника называть :laughing:&lt;/p&gt;
&lt;p&gt;Так случилось, что я не совсем спортсмен, но на всякие активные мероприятия меня тянет :) Именно по этой причине в этом году
вызвался ехать с ребятами с нашего клуба на 
&lt;a href=&#34;http://green.bdk.com.ru/index.php?id=396&amp;amp;doc=kavalerovskaia_petlia&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Кавалеровскую петлю&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Зелёный, не долго думая, определил, что быть мне обозником, сиречь: обеспечить провизией записавшихся в обоз, встречать на пит-стопе с
хлебом-солью спортсменов, а главное теплом и радушием, обеспечить ужин, завтрак и тёплым приёмом на велофинише. Помимо этого, помогать, где можно и нужно, судьям (так в обоз затесался удлинитель для генератора, стол, скамейки, которые, правда пригодились самим, растяжка Приморской Федерации Спортивного Туризма).&lt;/p&gt;
&lt;p&gt;Итак, запугали меня обязанностями, озадачили хитрыми вопросами, но не на того напали - наша нигде не пропадала, а раз взялся, буду делать, чего юлить-то!?&lt;/p&gt;
&lt;h2 id=&#34;неделя-до-петли&#34;&gt;Неделя до петли&lt;/h2&gt;
&lt;p&gt;Определил конечную дату приёма в обоз - пятница (нет, не тринадцатого) 15 апреля. Ню-ню, хорошо, что по опыту сборов предыдущих лет
знал, что время растянется, но строгости малость придаст - последние записавшиеся были аж во вторник (не обижайтесь на моё ворчание).&lt;/p&gt;
&lt;p&gt;На выходных (16-17 апреля) прикидывал раскладку, сочинял меню. Коля (Live) так же вызвался быть в обозе и помочь с закупкой продовольствия
(его машина тут очень пригодилась). Сначала примерно прикинул меню, учёл замечания Кати по нему, составил раскладку, пользуясь материалами
лекции по питанию в Школе начальной турподготовки и, в какой-то степени, своим опытом организации ПВД.&lt;/p&gt;
&lt;p&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;&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;/td&gt;
          &lt;td&gt;Завтрак в столовой&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Обед&lt;/td&gt;
          &lt;td&gt;Суп сайровый&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;:::&lt;/td&gt;
          &lt;td&gt;Чай&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;:::&lt;/td&gt;
          &lt;td&gt;Печенье-1&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;:::&lt;/td&gt;
          &lt;td&gt;Хлеб&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;:::&lt;/td&gt;
          &lt;td&gt;Сало&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Ужин&lt;/td&gt;
          &lt;td&gt;Картофель с тушёнкой&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;:::&lt;/td&gt;
          &lt;td&gt;Хлеб&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;:::&lt;/td&gt;
          &lt;td&gt;Чай&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;:::&lt;/td&gt;
          &lt;td&gt;Колбаса&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;:::&lt;/td&gt;
          &lt;td&gt;Сыр&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;:::&lt;/td&gt;
          &lt;td&gt;Сгущенное молоко&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&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;/td&gt;
          &lt;td&gt;Гречка с тушёнкой&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;:::&lt;/td&gt;
          &lt;td&gt;Хлеб&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;:::&lt;/td&gt;
          &lt;td&gt;Чай&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;:::&lt;/td&gt;
          &lt;td&gt;Печенье-2&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;:::&lt;/td&gt;
          &lt;td&gt;Шоколад&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Обедо-перекус&lt;/td&gt;
          &lt;td&gt;Сыр&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;:::&lt;/td&gt;
          &lt;td&gt;Колбаса&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;:::&lt;/td&gt;
          &lt;td&gt;Сыр&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;:::&lt;/td&gt;
          &lt;td&gt;Хлеб&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;:::&lt;/td&gt;
          &lt;td&gt;Чай (пакетированный)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;:::&lt;/td&gt;
          &lt;td&gt;Кипяток в термосах&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&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;Продуктов на 22 человека (вышло даже с запасом, так что можно запитать ещё человека 2-3 или получить добавки :))&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;Картофель сырой&lt;/td&gt;
          &lt;td&gt;9 кг&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Морковь сырая&lt;/td&gt;
          &lt;td&gt;6 шт.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Сушёная смесь зелени&lt;/td&gt;
          &lt;td&gt;1 пачка&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Лук&lt;/td&gt;
          &lt;td&gt;6 луковицы&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Честнок&lt;/td&gt;
          &lt;td&gt;5 шт.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Лавровый лист&lt;/td&gt;
          &lt;td&gt;минимальная тара&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Горбуша (консервы)&lt;/td&gt;
          &lt;td&gt;6 банок&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Рис&lt;/td&gt;
          &lt;td&gt;200 гр&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Тушеная говядина&lt;/td&gt;
          &lt;td&gt;9 банок&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Масло растительное&lt;/td&gt;
          &lt;td&gt;0,5 л бутылка&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Чёрный перец, горошек&lt;/td&gt;
          &lt;td&gt;минимальная тара&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Гречка&lt;/td&gt;
          &lt;td&gt;1,8 кг&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Сало&lt;/td&gt;
          &lt;td&gt;650 гр&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Колбаса сырокопчёная&lt;/td&gt;
          &lt;td&gt;1500 гр&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Сыр «Российский»&lt;/td&gt;
          &lt;td&gt;750 гр&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Сыр копчёный (колбасный)&lt;/td&gt;
          &lt;td&gt;750 гр&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Хлеб чёрный («Бородинский»)&lt;/td&gt;
          &lt;td&gt;8 булок&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Чай чёрный&lt;/td&gt;
          &lt;td&gt;200 гр&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Чай чёрный, пакетированный&lt;/td&gt;
          &lt;td&gt;1 упаковка&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Сгущённое молоко&lt;/td&gt;
          &lt;td&gt;3 банки/тубы&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Шоколад&lt;/td&gt;
          &lt;td&gt;600 гр&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Конфеты шоколадные&lt;/td&gt;
          &lt;td&gt;200 гр&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Печенье-1&lt;/td&gt;
          &lt;td&gt;1,5 кг&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Печенье-2&lt;/td&gt;
          &lt;td&gt;1,5 кг&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;/td&gt;
          &lt;td&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Сахар&lt;/td&gt;
          &lt;td&gt;1,5 кг&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Соль&lt;/td&gt;
          &lt;td&gt;150-200 гр&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;По деньгам вышло около 200 руб с человека&lt;/p&gt;
&lt;p&gt;Котлов на такую ораву нужно штуки 4 с такими ТТХ:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;12 литров - для питания&lt;/li&gt;
&lt;li&gt;10 литров - для чая&lt;/li&gt;
&lt;li&gt;5-7 литров - для хознужд&lt;/li&gt;
&lt;li&gt;3 литра - для тушения (тушил тушёнку, морковь, лук), или глубокая сковородка (но она, обычно, тяжелее)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Во вторник Коля делает основную массу закупок и отвозит всё это добро в клуб в одной коробке.&lt;/p&gt;
&lt;h2 id=&#34;среда-последний-сбор&#34;&gt;Среда, последний сбор&lt;/h2&gt;
&lt;p&gt;В среду притащил свой 110л рюкзак в клуб для загрузки группового снаряжения: котлов, топора, пилы, сам захватил 4м полиэтиленовой плёнки
(легче китайского тента, более компактна и более прочна, если применять для технических нужд, типа закрыть дрова на ночь, от возможного дождя/снега/тайфуна),
получил плакаты, мегафон для судей, стол, скамейки.&lt;/p&gt;
&lt;p&gt;Как всё было получено, замотано, заложено, сгрузили всё в одно место для погрузки на фуру.&lt;/p&gt;
&lt;p&gt;А в клубе тем временем суета: народ разбирает, проверяет и упаковывает велосипеды, каты&amp;hellip;&lt;/p&gt;
&lt;p&gt;Когда уже вышли из клуба, позвонил Коля, предложил озадачится газовой плиткой (с 5л пропановым баллоном), решили, что по такой погоде сия затея более чем
здравая! Правда, как в последствии выяснилось - не без оговорок :)&lt;/p&gt;
&lt;h2 id=&#34;отъезд&#34;&gt;Отъезд&lt;/h2&gt;
&lt;p&gt;Пятница (и снова не тринадцатое!), на работу притопал уже собранным, опять мелкие подколки от коллег, но и мы не лыком шиты! :)&lt;/p&gt;
&lt;p&gt;День прошёл как в тумане и вот вечер, быстро собираюсь и дую к покровскому парку, там уже стоит автобус, народ потихоньку грузится. Я быстро
сгонял в ближайший магазин, купил бонусов для ребят - четыре банки ананасов.&lt;/p&gt;
&lt;p&gt;Выехали почти по хронометру в 19.00 и&amp;hellip; сразу же встали в пробку, выбирались до 19 КП (после которого движение стало чуть живее) около 6-7 часов, за всю последующую
дорогу сделали только одну остановку в Уссурийске и всё равно, добрались до Кавалерово, к интернату, только к 8 утра. Народ кое как подремал, но отдыхом это трудно было
назвать.&lt;/p&gt;
&lt;h2 id=&#34;старт&#34;&gt;Старт&lt;/h2&gt;
&lt;p&gt;С небольшой задержкой покушали в столовой (макароны, сарделька, хлеб, масло, печенье) и, практически сразу, отправились к месту старта. Там разгрузили фуру, народ
разобрал свои рюкзаки, проходили регистрацию, собирали катамараны, готовились к старту.&lt;/p&gt;
&lt;p&gt;Я выдал Игорю мегафон, растянул с Колей плакаты старта и ПФСТ, где-то помогал нашим гринтуровским что-то подтащить, что-то помочь. Благодаря Маше, договорились о доставке нас
на пит-стоп.&lt;/p&gt;
&lt;p&gt;Готовились долго, несколько не вложились в регламент мероприятия, так что сразу пошла задержка. Но вот построение, приветственные речи, Кате с Марсиком под звуки гимна
предоставляют честь поднять флаг, чем ознаменовать открытие соревнований. Ещё немного речей и участники отправляются на старт.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;На старт!&lt;/li&gt;
&lt;li&gt;Внимание!&lt;/li&gt;
&lt;li&gt;Марш!&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;И, несмотря на непогоду и штормовое предупреждение, экстремальная гонка началась!&lt;/p&gt;
&lt;h2 id=&#34;пит-стоп&#34;&gt;Пит-стоп&lt;/h2&gt;
&lt;p&gt;Через некоторое время мы с Женей, Колей и Машей отправляемся на пит-стоп, по дороге прибываем указатели направления, куда ехать.&lt;/p&gt;
&lt;p&gt;Хорошей идеей от дядьки Live было купать разовой посуды - реально пригодилось, а так же частично пользовалось и в лагере, на ночёвке, и даже на финише.&lt;/p&gt;
&lt;p&gt;На точке без лишних слов распределяем обязанности: Женя выдаёт нам тенты, мы на пару с Николаем расстилаем один, выгружаем рюкзаки,
которые потребуются участникам для следующего этапа, закрываем их. Женя же тем временем занимается костром, а мы переключаемся на развеску тентов,
организации укрытия от дождя и готовкой.&lt;/p&gt;
&lt;p&gt;Тут стоит оговориться о газовой плитке - штука хорошая, но на ней бы мы ничего не успели приготовить. Причина проста: нужны крышки на котлы и ветрозащита для печки,
нужно в будущем это учитывать.&lt;/p&gt;
&lt;p&gt;Готовлю суп (плюс навернулся когда спускался к реке), грею чай, головой отвечаю за Марсика. Маше предоставилась возможность немного покимарить в машине. К моменту первого
финиша (Зелёный и Ко) уже готово всё для питания, успели буквально впритык, но успели :) Встречаем наших, гоним на кормежку и обогрев, правда кто-то сразу начинает заниматься
сборкой катов. С Марсиком встречаем экипаж Кати и Олега, отдаю её свою мембранку, что бы хоть чуточку теплее было.&lt;/p&gt;
&lt;p&gt;Тем временем приходят сначала слухи, а потом и подтверждение: на Острой до полутора метров мокрого снега, поэтому горно-пеший этап отменяется. Озадачили и вызвонили водителя
автобуса, что бы доставить народ от пит-стопа до места ночлега на поляне у реки Мирная у подножия высоты 408 метров.&lt;/p&gt;
&lt;p&gt;Реакция участников не однозначна - кто-то радуется такому обороту событий, кто-то ворчит (на самом деле, я думаю, они тоже рады были :))&lt;/p&gt;
&lt;p&gt;Потихоньку все собираются, мы последними упаковываем котлы, снимаем тенты, тушим костёр. Закидываю рюкзак и почти галопом несусь к трассе на автобус.&lt;/p&gt;
&lt;h2 id=&#34;вечер&#34;&gt;Вечер&lt;/h2&gt;
&lt;p&gt;Добрались до поляне, оказалось, что куча вещей выгружена у дороги, в том числе и наша продбаза, так как добраться до самого лагеря транспорту было не под силу.&lt;/p&gt;
&lt;p&gt;Присоседились к костру к ребятам из Партизанска (команда &amp;ldquo;Сучан&amp;rdquo;, а в народе, за их каски - &amp;ldquo;Англичане&amp;rdquo;), перетащили продукты, стол, лавки, выдал удлинитель
организаторам, выдал рекомендации по подготовке продуктов (чистка картофеля, нарезка лука, моркови), с Колей малость попилили дров (потом меня
заменили). Дальше занялся готовкой ужина - картофеля с мясом (получился правда больше картофельный суп, да и мясом тушняк можно назвать с большой натяжкой :))&lt;/p&gt;
&lt;p&gt;Спасибо Кате и Олегу, что тем временем поставили палатку, от меня потребовалось только закинуть свои спальные вещи во внутрь.&lt;/p&gt;
&lt;p&gt;На ужин открыл заготовленную заначку из ананасов, умяли всё, надеюсь радости немного прибавило :)&lt;/p&gt;
&lt;p&gt;Организаторы тем временем готовили небольшой вечерний концерт и оглашение итогов первого дня, были песни под гитару, забавные демонстрации и тому подобное.
В общем, полезное дело, расслабится после трудного дня.&lt;/p&gt;
&lt;p&gt;После ужина сгрузили продукты в ящик, поставили около дров, туда же разместили котлы, закрыли это дело плёнкой (пригодилась таки). И не зря: ночью шло что-то
непонятное, толи дождь, толи мокрый снег. Выдал рекомендации любителям посидеть до допоздна у костра: не будет дров, не будет завтрака :)&lt;/p&gt;
&lt;p&gt;Но засиживаться никто не стал, многие предпочли залезть в уютные спальники: сказывалась усталость и бессонная ночь перед началом соревнований.&lt;/p&gt;
&lt;p&gt;Утром подъём в 5.30, что бы успеть приготовить ребятам завтрак, а то старт в 8.00.&lt;/p&gt;
&lt;h2 id=&#34;утро&#34;&gt;Утро&lt;/h2&gt;
&lt;p&gt;Проснулся несколько раньше будильника, дождался его сигнала и выбрался в утреннюю промозглость.&lt;/p&gt;
&lt;p&gt;Ботинки мокрые&amp;hellip; благо взял две пары шерстяных носок - пока пропитались ноги уже расходились и согрели ботинок.&lt;/p&gt;
&lt;p&gt;Утром опасался, что станет проблемой развести костёр, но нет: сохранились горячие угли под слоем золы. Топориком натесал щепы и стружек, аккуратно размёл золу,
выложил колодец, оставил немного прогреться дровишкам. Тем временем нарубил ещё немного полешек. Когда костёр начала дымить, поработал чуть хобочкой и, почти сразу,
огонь вспыхнул. Но этой ноте потопал будить Николая. Ему передались бразды правления костром, а сам занялся готовкой: гречка с тушёнкой, чай.&lt;/p&gt;
&lt;p&gt;А лагерь тем временем просыпался, просыпались и судьи. К моменту объявления: &amp;ldquo;старт первой команды на троллей через сорок минут&amp;rdquo;, завтрак был почти готов.&lt;/p&gt;
&lt;p&gt;Народ выдал мне термоса на заполнение кипятком - рекомендую в дальнейшем придерживаться той же практики, горячий чай и бутерброды на финише оказались полезной составляющей
хорошего настроения!&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Шаг, последний, больше шагов не осталось&lt;br/&gt;
Сердце похолодело - держись!&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Старт первой команды. Маша помогает и моет котлы. Пока идут команды успеваем накипятить воды и разлить по термосам (хороший жаркий костёр - залог успеха, а так же спасибо
соседям за костровую решётку!). Упаковываемся и собираем лагерь, обожжённые банки закапываем в землю - так они значительно быстрее разложатся, да и не будет кострище глаз
мозолить грудой железяк.&lt;/p&gt;
&lt;p&gt;Упаковываемся сами, ходим перекладываем коробки для велосипедов, готовим их к погрузке на транспорт. В лагере помогаем судьям снять тенты, сбухтовать верёвки, загрузить
рюкзаки по машинам и распределить народ по оным (спелики - скромность не всегда полезное свойство!) для доставки на финиш.&lt;/p&gt;
&lt;p&gt;На одной машине Коля заменил сильно уставшего с вечера водителя :)&lt;/p&gt;
&lt;p&gt;Так потихоньку и выбрались, у трассы только загрузили коробки и вперёд, в Кавалерово, к финишу команд.&lt;/p&gt;
&lt;p&gt;На небе тем временем пыталось выглядывать солнце&amp;hellip;&lt;/p&gt;
&lt;h2 id=&#34;финиш&#34;&gt;Финиш&lt;/h2&gt;
&lt;p&gt;Финиш устроили на центральной площади (или нет?). Помогли расстелить тенты, выгрузить на них рюкзаки, прикрыть их от дождя - солнце так и не смогло побороть густые облака.
Вытащили столик, термоса, сделали нарезку колбасы, сыра, в общем, достали всё, что можно быстро приготовить и умять за обе щёки. Растянули плакаты соревнований и ПФСТ.&lt;/p&gt;
&lt;p&gt;Пока ждали финиширующих погода выделывала какую-то адскую пляску: солнце, дождь, солнце, дождь, град, дождь, сильный дождь, временное затишье и всё по новому.&lt;/p&gt;
&lt;p&gt;Горячий чай, бутерброды действовали несколько живительно на прибывающих, я встречал их с разу отправлял к столу: тепло, пища, переодеваться, и только потом уже разбираться с
велосипедами, своими вещами. В довесок купили в местном магазине различного сока, для желающих сладенького.&lt;/p&gt;
&lt;p&gt;Постепенно финишировали все команды, небольшое время на подведение итогов, общее построение, слова благодарности, награждение участников.&lt;/p&gt;
&lt;p&gt;Сборы, погрузка, обратный путь.&lt;/p&gt;
&lt;p&gt;А у меня отлегло - свою задачу я, вроде, выполнил :)&lt;/p&gt;
&lt;h2 id=&#34;как-итог&#34;&gt;Как итог&lt;/h2&gt;
&lt;p&gt;Надеюсь, птенцы мои, на кого ворчал при подготовке, не сильно на меня обижаются. Надеюсь, что всем хватило питания, и никто не остался голодным :)&lt;/p&gt;
&lt;p&gt;Обоз на подобных соревнованиях крайне нужная и полезная штука. Далее на уровне тезисов:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;На 10 человек должно быть два обозника, причем обязательно, что бы у них был свой транспорт, дабы не зависеть сильно от судейского для забросок на питстопы, на базу.&lt;/li&gt;
&lt;li&gt;Готовить питание в нужные сроки получается даже без сильной спешки.&lt;/li&gt;
&lt;li&gt;Хорошо бы иметь свой транспорт и для заброски снаряжения (например катов на старт водного этапа), вещей к месту ночёвки (хотя бы просто как можно ближе, если нет возможности проехать).&lt;/li&gt;
&lt;li&gt;Газовая печка штука хорошая, но нужна ветро-защита.&lt;/li&gt;
&lt;li&gt;На котлы нужны крышки!&lt;/li&gt;
&lt;li&gt;Не забывайте половники!&lt;/li&gt;
&lt;li&gt;Разовую посуду (глубокая миска, большая ложка, стаканчики) стоит брать всегда, в количестве N*1.5, где N - число участников обоза.&lt;/li&gt;
&lt;li&gt;Утром второго дня делать плотный завтрак - народ на финиш приехал поголовно голодным.&lt;/li&gt;
&lt;li&gt;На финиш планировать кипяток в термосах (и озадачивать народ что бы отдавали термоса), бутерброды с колбасой, сыром, сладкое. Хлеб на финиш можно не планировать - купить можно в местных магазинах.&lt;/li&gt;
&lt;li&gt;Что вспомню - допишу :)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Фото 1: 
&lt;a href=&#34;http://ua0ljj.bdk.com.ru/travel/2011/kavalerovo_2011/index.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://ua0ljj.bdk.com.ru/travel/2011/kavalerovo_2011/index.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Фото 2: 
&lt;a href=&#34;http://spider.bdk.com.ru/2011/2011-04-24-petlya/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://spider.bdk.com.ru/2011/2011-04-24-petlya/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Статья на примамедиа: 
&lt;a href=&#34;http://primamedia.ru/news/25.04.2011/153337/sorevnovaniya-po-sportivnomu-turizmu-proshli-v-primore-v-ekstremalnih-pogodnih-u.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://primamedia.ru/news/25.04.2011/153337/sorevnovaniya-po-sportivnomu-turizmu-proshli-v-primore-v-ekstremalnih-pogodnih-u.html&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Samsung GT-B2710</title>
      <link>https://htrd.su/blog/2011/04/26/2011-04-26_13.11_samsung_gt-b2710/</link>
      <pubDate>Tue, 26 Apr 2011 13:11:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/04/26/2011-04-26_13.11_samsung_gt-b2710/</guid>
      <description>&lt;p&gt;Стал обладателем данного аппарата. Критерием покупки стало:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ЗвонИт (так же работает в UMTS сетях)&lt;/li&gt;
&lt;li&gt;SMS отправляет&lt;/li&gt;
&lt;li&gt;Пыле-влаго-ударо-защищённый корпус (в походах полезные свойства)&lt;/li&gt;
&lt;li&gt;GPS на борту&lt;/li&gt;
&lt;li&gt;Цифровой компас (не зависит от GPS)&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Автономный&amp;rdquo; режим (мне полезно в горах, экономить батарею, не выключая аппарат вцелом)&lt;/li&gt;
&lt;li&gt;Стоимость в пределах 5000 руб.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Из дополнительных бонусов:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GPRS/EDGE&lt;/li&gt;
&lt;li&gt;Браузер&lt;/li&gt;
&lt;li&gt;E-mail клиент, умеющий IMAP4&lt;/li&gt;
&lt;li&gt;Синхронизация контактов, календаря, задач по SyncML (можно скрестить с адресной книгой Google Mail)&lt;/li&gt;
&lt;li&gt;Секундомер&lt;/li&gt;
&lt;li&gt;Java приложения (для того же GPS пригодится)&lt;/li&gt;
&lt;li&gt;Шагомер (хотя больше игрушка)&lt;/li&gt;
&lt;li&gt;Bluetooth&lt;/li&gt;
&lt;li&gt;Сигнал SOS&lt;/li&gt;
&lt;li&gt;Оповещение заданных номеров о смене SIM карты (эдакий противоугон, но ещё не проверял)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Из почти стандартного:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Календарь&lt;/li&gt;
&lt;li&gt;Будильник (автоповтор 5 минут, и, кажется, не настраивается)&lt;/li&gt;
&lt;li&gt;Калькулятор&lt;/li&gt;
&lt;li&gt;Заметки&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Из прочего, крайне не обязательного&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Поиск - удобно искать по слову в контактах, заметках, SMS сообщениях&lt;/li&gt;
&lt;li&gt;FM-radio&lt;/li&gt;
&lt;li&gt;Аудиопроигрыватель&lt;/li&gt;
&lt;li&gt;Мировое время - показывает время в разных часовых поясах&lt;/li&gt;
&lt;li&gt;Конвертер длинн, валют и пр.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;gps&#34;&gt;GPS&lt;/h2&gt;
&lt;p&gt;В комплекте есть только тестовое приложение, которые выдаёт в цифровом виде текущую координату и высоту. Для целей навигации этого мало. Поставил программку MapNav: 
&lt;a href=&#34;http://mapnav.spb.ru&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://mapnav.spb.ru&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Умеет карты Google/Yandex/куча всего другого, кроме того, умеет локальные карты, на сайте есть рекомендации и программки для подготовки. К примеру, можно привязать генштабовские, перегнать их в GeoTiff и создать карту для заливки в телефон. Пока это ещё не реализовывал.&lt;/p&gt;
&lt;p&gt;По поводу программки есть один нюанс: при вводе имени точки и ещё в некоторых случаях становится непонятно как переключать язык и как удалять введённые символы. Это недоработка (или фича?), в таких случаях нажмите и удерживайте клавишу #, откроется полноценный редактор для данного поля.&lt;/p&gt;
&lt;p&gt;GPS ещё особо в бою не проверялся, но, в машине достаточно точно определял скорость движения, а у подножия г.Острой (пос.Кавалерово) говорил, что высота 211 метров, что, впринципе, соответствует действительности.&lt;/p&gt;
&lt;h2 id=&#34;синхронизация-syncml&#34;&gt;Синхронизация SyncML&lt;/h2&gt;
&lt;p&gt;Тут особо рассказывать от себя не буду, сразу ссылка: 
&lt;a href=&#34;http://digital-activity.org/2010/12/10/%D1%81%D0%B8%D0%BD%D1%85%D1%80%D0%BE%D0%BD%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F-%D0%B0%D0%B4%D1%80%D0%B5%D1%81%D0%BD%D0%BE%D0%B9-%D0%BA%D0%BD%D0%B8%D0%B3%D0%B8-samsung-xcover-271-b2710-c-google/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://digital-activity.org/2010/12/10/%D1%81%D0%B8%D0%BD%D1%85%D1%80%D0%BE%D0%BD%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F-%D0%B0%D0%B4%D1%80%D0%B5%D1%81%D0%BD%D0%BE%D0%B9-%D0%BA%D0%BD%D0%B8%D0%B3%D0%B8-samsung-xcover-271-b2710-c-google/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Копипаста самой операции:
&lt;quote&gt;
Menu -&amp;gt; Apps -&amp;gt; Synchronise -&amp;gt; Options -&amp;gt; New sync profile.&lt;br/&gt;&lt;br/&gt;
Profile Name: Google&lt;br/&gt;&lt;br/&gt;
Sync Category -&amp;gt; Contacts -&amp;gt;&lt;br/&gt;&lt;br/&gt;
Contacts: Activate&lt;br/&gt;&lt;br/&gt;
Remote contacts: contacts&lt;br/&gt;&lt;br/&gt;
User ID: ваш.логин@gmail.com&lt;br/&gt;&lt;br/&gt;
Password: ваш.пароль.от.этой.записи&lt;br/&gt;&lt;br/&gt;
Save -&amp;gt; Back&lt;br/&gt;&lt;br/&gt;
Sync type: Full sync&lt;br/&gt;&lt;br/&gt;
Sync server: 
&lt;a href=&#34;https://m.google.com/syncml&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://m.google.com/syncml&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;
Network profile: ну какой там у вас профиль чтобы в инет ходить&lt;br/&gt;&lt;br/&gt;
Save&lt;br/&gt;&lt;br/&gt;
Start
&lt;/quote&gt;&lt;/p&gt;
&lt;p&gt;Отдельно дополню: в настройках Sync server так же укажите ваши логин и пароль от Google Mail.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>ImageMagic/GraphicsMagic и водяные знаки</title>
      <link>https://htrd.su/blog/2011/04/22/graphicsmagic_i_vodjanye_znaki/</link>
      <pubDate>Fri, 22 Apr 2011 12:03:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/04/22/graphicsmagic_i_vodjanye_znaki/</guid>
      <description>&lt;p&gt;На правах мемориза: 
&lt;a href=&#34;http://www.imagemagick.org/Usage/annotating/#watermarking&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.imagemagick.org/Usage/annotating/#watermarking&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;в статье не только про водяные знаки, можно найти интересного и полезного.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Image Ruler 0.98.1</title>
      <link>https://htrd.su/blog/2011/04/10/2011-04-10_01.40_image_ruler_0.98.1/</link>
      <pubDate>Sun, 10 Apr 2011 01:40:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/04/10/2011-04-10_01.40_image_ruler_0.98.1/</guid>
      <description>&lt;p&gt;Выпустил версию 0.98.1 программы 
&lt;a href=&#34;https://htrd.su/proekty/image_ruler/start/&#34;&gt;Image Ruler&lt;/a&gt; для измерения на растровых изображениях.&lt;/p&gt;
&lt;p&gt;Изменений минимум:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Добавлен вывод суммирующей длинны при измерении ломанной линией (столкнулся с расчётом маршрута по карте)&lt;/li&gt;
&lt;li&gt;В win32 сборку добавлены плагины графических форматов: теперь из коробки открываются jpeg/gif и иже с ними, иначе работал только png.&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Eclipse, русский и проверка орфографии</title>
      <link>https://htrd.su/blog/2011/04/07/2011-04-07_09.52_eclipse_russkij_i_proverka_orfografii/</link>
      <pubDate>Thu, 07 Apr 2011 09:52:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/04/07/2011-04-07_09.52_eclipse_russkij_i_proverka_orfografii/</guid>
      <description>&lt;p&gt;Нужно:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;установленный Eclipse&lt;/li&gt;
&lt;li&gt;установленный aspell русский (е+ё, хотя тут на выбор) и английский словари.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Пишем скрипт, примерно такого содержимого (или выполняем команды вручную)&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#!/usr/bin/env bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;aspell dump master en      &amp;gt;  /tmp/ru-en.dictionary
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;aspell dump master ru-yeyo &amp;gt;&amp;gt; /tmp/ru-en.dictionary
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;получившийся файл (/tmp/ru-en.dictinary) кладём в какое-то постоянное место, например в ~/documents:
mv /tmp/ru-en.dictionary ~/documents&lt;/p&gt;
&lt;p&gt;В запущенном Eclipse идём в &lt;strong&gt;Window -&amp;gt; Preferences -&amp;gt; General -&amp;gt; Editor -&amp;gt; Text Editor -&amp;gt; Spelling&lt;/strong&gt; (или в поиске вводим Spell, само найдётся). В секции &lt;strong&gt;Dictionaries&lt;/strong&gt; параметр &lt;strong&gt;Platform dictionary&lt;/strong&gt; выставляем в &lt;em&gt;none&lt;/em&gt;, а в &lt;strong&gt;User defined dictionary&lt;/strong&gt; прописываем наш получившийся словарик:
~/documents/ru-en.dictionary&lt;/p&gt;
&lt;p&gt;Сохраняемся, закрываем настройки, пользуемся.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Про термобельё</title>
      <link>https://htrd.su/blog/2011/04/04/2011-04-04_10.37_pro_termobeljo/</link>
      <pubDate>Mon, 04 Apr 2011 10:37:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/04/04/2011-04-04_10.37_pro_termobeljo/</guid>
      <description>&lt;p&gt;Пара ссылок, отбрасываем фирмы получается более-менее внятно:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://termuha.ru/stati/materialyi-termonoskov.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Материалы&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://termuha.ru/stati/vidi-termobelya.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Виды термобелья&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://termuha.ru/stati/kak-pravilno-vyibrat-termobele.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Выбор термобелья&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Пост со временем будет дополняться.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Цикл статей про источники питания</title>
      <link>https://htrd.su/blog/2011/04/02/2011-04-02_16.07_cikl_statej_pro_istochniki_pitanija/</link>
      <pubDate>Sat, 02 Apr 2011 16:07:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/04/02/2011-04-02_16.07_cikl_statej_pro_istochniki_pitanija/</guid>
      <description>&lt;p&gt;Цикл статей про источники питания: 
&lt;a href=&#34;http://naf-st.ru/articles/ip/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://naf-st.ru/articles/ip/&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Общие положения: 
&lt;a href=&#34;http://naf-st.ru/articles/ip/aboutip/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://naf-st.ru/articles/ip/aboutip/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Неуправляемые выпрямители: 
&lt;a href=&#34;http://naf-st.ru/articles/ip/neupv/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://naf-st.ru/articles/ip/neupv/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Управляемые выпрямители: 
&lt;a href=&#34;http://naf-st.ru/articles/ip/upv/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://naf-st.ru/articles/ip/upv/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Умножители напряжения: 
&lt;a href=&#34;http://naf-st.ru/articles/ip/umn/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://naf-st.ru/articles/ip/umn/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Сглаживающие фильтры: 
&lt;a href=&#34;http://naf-st.ru/articles/ip/sf/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://naf-st.ru/articles/ip/sf/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Стабилизаторы напряжения: 
&lt;a href=&#34;http://naf-st.ru/articles/ip/stn/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://naf-st.ru/articles/ip/stn/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Стабилизаторы в интегральном исполнении: 
&lt;a href=&#34;http://naf-st.ru/articles/ip/kren&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://naf-st.ru/articles/ip/kren&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Перенос строки по заданной границе без разбивки слов (word-wrap) в Java</title>
      <link>https://htrd.su/blog/2011/04/01/2011-04-01_10.58_perenos_stroki_po_zadannoj_granice_bez_razbivki_slov_word-wrap_v_java/</link>
      <pubDate>Fri, 01 Apr 2011 10:58:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/04/01/2011-04-01_10.58_perenos_stroki_po_zadannoj_granice_bez_razbivki_slov_word-wrap_v_java/</guid>
      <description>&lt;p&gt;В составе 
&lt;a href=&#34;http://commons.apache.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Apache Commons&lt;/a&gt; есть чудная библиотечка 
&lt;a href=&#34;http://commons.apache.org/lang/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Lang&lt;/a&gt; в которой есть класс 
&lt;a href=&#34;http://commons.apache.org/lang/api-2.3/org/apache/commons/lang/WordUtils.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;WordUtils&lt;/a&gt; который и поможет нам решить поставленную задачу, примерно следующим образом:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;package&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;test&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;java.io.IOException&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;org.apache.commons.lang.WordUtils&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;WordWrap&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;static&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;throws&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;IOException&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;This is a sentence that we&amp;#39;re using to test the wrap method&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;System&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;println&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Original String 1:&amp;lt;br/&amp;gt;n&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;System&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;println&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;lt;br/&amp;gt;nWrap length of 10:&amp;lt;br/&amp;gt;n&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;WordUtils&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;wrap&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;System&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;println&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;lt;br/&amp;gt;nWrap length of 20:&amp;lt;br/&amp;gt;n&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;WordUtils&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;wrap&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;System&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;println&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;lt;br/&amp;gt;nWrap length of 30:&amp;lt;br/&amp;gt;n&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;WordUtils&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;wrap&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;str2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;This is a sentence that we&amp;#39;re using to test the wrap method and hereisaveryveryveryverylongword&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;System&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;println&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;lt;br/&amp;gt;nOriginal String 2:&amp;lt;br/&amp;gt;n&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;str2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;System&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;println&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;lt;br/&amp;gt;nWrap length of 10, &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;n newline, wrap long words:&amp;lt;br/&amp;gt;n&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;			&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;WordUtils&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;wrap&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;str2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;n&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;System&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;println&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;lt;br/&amp;gt;nWrap length of 20, &amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;n newline, don&amp;#39;t wrap long words:&amp;lt;br/&amp;gt;n&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;			&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;WordUtils&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;wrap&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;str2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;lt;br/&amp;gt;n&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Сортировка &#34;цифровых&#34; строк в Java</title>
      <link>https://htrd.su/blog/2011/03/25/2011-03-25_11.18_sortirovka_cifrovyx_strok_v_java/</link>
      <pubDate>Fri, 25 Mar 2011 11:18:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/03/25/2011-03-25_11.18_sortirovka_cifrovyx_strok_v_java/</guid>
      <description>&lt;p&gt;Для сортировки массивов в Java есть &lt;code&gt;Arrays.sort(array)&lt;/code&gt;. Есть так же форма с указанием своего компаратора.&lt;/p&gt;
&lt;p&gt;Задача: нужно отсортировать строки, в которых содержатся цифровые значения, вроде:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bg1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bg3
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bg20
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bg10
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;После классический сортировки получим такой результат:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bg1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bg10
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bg20
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bg3
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Не всегда это нужно, и не всегда есть возможность выравнивать нулями до формы bg01,bg03,bg30&lt;/p&gt;
&lt;p&gt;По ссылке ниже вариант компаратора, выполняющего данную задачу: 
&lt;a href=&#34;http://sanjaal.com/java/206/java-data-structure/alphanumeric-string-sorting-in-java-implementation/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://sanjaal.com/java/206/java-data-structure/alphanumeric-string-sorting-in-java-implementation/&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Qt Creator и CMake - продолжение</title>
      <link>https://htrd.su/blog/2011/03/24/2011-03-24_14.49_qt_creator_i_cmake_-_prodolzhenie/</link>
      <pubDate>Thu, 24 Mar 2011 14:49:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/03/24/2011-03-24_14.49_qt_creator_i_cmake_-_prodolzhenie/</guid>
      <description>&lt;p&gt;Некоторое время я поднимал тему связки 
&lt;a href=&#34;https://htrd.su/blog/2011/03/15/2011-03-15_15.08_qt_creator_i_cmake/&#34;&gt;Qt Creator и CMake&lt;/a&gt;, тогда всё показалось не очень хорошо.&lt;/p&gt;
&lt;p&gt;В общем, собрался и сделал несколько лучше: малость допилил плагин CMakeProjectManager, реализовав следующие фичи:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Дерево проекта берётся не из .cbp файла, а сканированием дерева проекта. Как вариант может оказаться медленно на больших проектах, с другой стороны, релоадинг дерева происходит не каждый раз, а при смене CMakeLists.txt или при добавлении, удалении, переименовывании файлов (этого, кстати, в базовом плагине нет)&lt;/li&gt;
&lt;li&gt;Теперь можно создавать новые файлы в дереве проектов непосредственно из Qt Creator&amp;rsquo;а&lt;/li&gt;
&lt;li&gt;Появилась возможность переименовывать файлы&lt;/li&gt;
&lt;li&gt;Появилась возможность удалять файлы с диска&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Изменения оформлены в виде отдельного плагина (основано на GIT версии Qt Creator, 2.2.81) - CMakeProjectManager2 доступного на Gitorious: 
&lt;a href=&#34;http://gitorious.org/hatred-qt-creator-plugins/cmakeprojectmanager2&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://gitorious.org/hatred-qt-creator-plugins/cmakeprojectmanager2&lt;/a&gt;, как устанавливать - читать README.txt, написано моим дряным английским, но, в общем, должно быть понятно.&lt;/p&gt;
&lt;p&gt;Кроме того, в основное дерево Qt Creator я подал мёрж-реквест: 
&lt;a href=&#34;http://qt.gitorious.org/qt-creator/qt-creator/merge_requests/280&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://qt.gitorious.org/qt-creator/qt-creator/merge_requests/280&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Кроме того, случайно наткнулся мастера новых проектов на CMake: 
&lt;a href=&#34;http://apachelog.wordpress.com/2010/09/27/qt-creator-cmake-wizards/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://apachelog.wordpress.com/2010/09/27/qt-creator-cmake-wizards/&lt;/a&gt; устанавливаются просто.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Примитивный SMTP клиент</title>
      <link>https://htrd.su/blog/2011/03/18/2011-03-18_10.53_primitivnyj_smtp_klient/</link>
      <pubDate>Fri, 18 Mar 2011 10:53:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/03/18/2011-03-18_10.53_primitivnyj_smtp_klient/</guid>
      <description>&lt;p&gt;Про SMTP протокол знают все: текстовый, простой, можно почту отослать и при помощи telnet. Собственно, при помощи оного и сделан скрипт ниже.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;smtpHost&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Сервер&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;smtpPort&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;25&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;smtpLogin&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Логин&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;smtpPass&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Пароль&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;smtpConnectTime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;3&amp;#34;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# -- таймаут перед началом посылки команд&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;smtpDelay&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;1&amp;#34;&lt;/span&gt;       &lt;span class=&#34;c1&#34;&gt;# -- таймаут между посылками команд&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Простой SMTP клиент для отправки почты через удалённый сервер&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;simpleMailClient&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;nv&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;subject&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; subjectLine in &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; -n &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$2&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; /usr/bin/env base64&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; x&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$subject&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; x&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;nv&#34;&gt;subject&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;=?UTF-8?B?&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$subjectLine&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;?=&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;nv&#34;&gt;subject&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$subject&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;lt;br/&amp;gt;n =?UTF-8?B?&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$subjectLine&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;?=&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;nv&#34;&gt;subject&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; -e &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$subject&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;nv&#34;&gt;plainLoginString&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; -e -n &lt;span class=&#34;s2&#34;&gt;&amp;#34;dc&amp;lt;br/&amp;gt;0&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$smtpLogin&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;lt;br/&amp;gt;0&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$smtpPass&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; /usr/bin/env base64&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      sleep &lt;span class=&#34;nv&#34;&gt;$smtpConnectTime&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;EHLO localhost.localdomain&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      sleep &lt;span class=&#34;nv&#34;&gt;$smtpDelay&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;AUTH PLAIN &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$plainLoginString&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      sleep &lt;span class=&#34;nv&#34;&gt;$smtpDelay&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;MAIL FROM:&amp;lt;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$smtpLogin&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      sleep &lt;span class=&#34;nv&#34;&gt;$smtpDelay&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;RCPT TO:&amp;lt;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$to&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      sleep &lt;span class=&#34;nv&#34;&gt;$smtpDelay&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;DATA&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      sleep &lt;span class=&#34;nv&#34;&gt;$smtpDelay&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Date:&amp;#34;&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LANG&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;C date -R&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;From: &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$smtpLogin&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;To: &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$to&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Subject: &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$subject&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;MIME-Version: 1.0&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Content-Type: text/plain; charset=UTF-8&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Content-Transfer-Encoding: base64&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      cat &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; /usr/bin/env base64
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      sleep &lt;span class=&#34;nv&#34;&gt;$smtpDelay&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; telnet &lt;span class=&#34;nv&#34;&gt;$smtpHost&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$smtpPort&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;По сути даже не скрипт, а только bash-функция. Пример использования:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;ТЕЛО ПИСЬМА В UTF-8&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; simpleMailClient кому@куда &lt;span class=&#34;s2&#34;&gt;&amp;#34;Тема письма в UTF-8&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Игра идёт в одни ворота, т.е. ответы от сервера не обрабатываются, что вынуждает подтачивать скрипт под каждый конкретный. Но, обычно это нужно когда не целесообразно настраивать локальный MTA и сделать можно быстро.&lt;/p&gt;
&lt;p&gt;Для работы нужна утилита base64.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Консоль, скрипты, XML и XPath</title>
      <link>https://htrd.su/blog/2011/03/16/2011-03-16_17.20_konsol_xml_i_xpath/</link>
      <pubDate>Wed, 16 Mar 2011 17:20:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/03/16/2011-03-16_17.20_konsol_xml_i_xpath/</guid>
      <description>&lt;p&gt;Иногда в скриптах нужно мало-мало добраться до внутрянки XML файлов &amp;ndash; к тегам или свойствам тегов. Для сих целей бывает удобно использовать &lt;a href=&#34;https://ru.wikipedia.org/wiki/XPath&#34; target=&#34;_blank&#34;&gt;XPath&lt;/a&gt;
. Вопрос: а как это делать-то из скриптов?&lt;/p&gt;
&lt;p&gt;На помощь приходит утилитка xmllint из состава libxml2. Начиная с версии 2.7.7 или 2.7.8 там появилась опция &lt;code&gt;--xpath&lt;/code&gt; которая задаёт выражение для выборки. В более ранних версиях (2.7.6, к примеру) этой опции нет, но есть (в последних тоже) возможность вызова &amp;ldquo;консоли&amp;rdquo; и интерактивного разбора XML.&lt;/p&gt;
&lt;p&gt;В общем два варианта:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;xmllint --xpath &lt;span class=&#34;s1&#34;&gt;&amp;#39;//File/@Name&amp;#39;&lt;/span&gt; test.xml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;и&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;cat //File/@Name&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xmllint --shell test.xml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Остальное - фантазия.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Qt Creator и CMake</title>
      <link>https://htrd.su/blog/2011/03/15/2011-03-15_15.08_qt_creator_i_cmake/</link>
      <pubDate>Tue, 15 Mar 2011 15:08:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/03/15/2011-03-15_15.08_qt_creator_i_cmake/</guid>
      <description>&lt;p&gt;&lt;strong&gt;Пакость:&lt;/strong&gt; Qt Creator умеет импортировать CMake проекты, проблема в том, что в дереве далеко не все файлы отображаются.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Причина:&lt;/strong&gt; делается этот импорт через откровенную задницу: вызывает cmake с генератором &amp;ldquo;-G&amp;rsquo;CodeBlocks - Unix Makefiles&amp;rsquo;&amp;rdquo;, генерируя тем самым XML-файл проекта формата CodeBlocks. Но тут накладывается вторая задница: сам генератор обрабатывает файлы только для таргетов: executable, static_library, shared_library, module_library, всё остальное он забывает запихнуть в результирующий &amp;lsquo;.cbp&amp;rsquo;.&lt;/p&gt;
&lt;h2 id=&#34;решение&#34;&gt;Решение&lt;/h2&gt;
&lt;p&gt;Для начала накладываем патч на CMake и пересобираем его:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-diff&#34; data-lang=&#34;diff&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;--- cmExtraCodeBlocksGenerator.cxx.orig 2011-03-15 14:28:30.692010962 +1000
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gu&#34;&gt;@@ -410,12 +410,14 @@
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;&lt;/span&gt;     for (cmTargets::iterator ti = targets.begin();
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          ti != targets.end(); ti++)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+      //std::cout &amp;lt;&amp;lt; &amp;#34;Type: &amp;#34; &amp;lt;&amp;lt; ti-&amp;gt;second.GetType() &amp;lt;&amp;lt; std::endl;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt;       switch(ti-&amp;gt;second.GetType())
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         case cmTarget::EXECUTABLE:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         case cmTarget::STATIC_LIBRARY:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         case cmTarget::SHARED_LIBRARY:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         case cmTarget::MODULE_LIBRARY:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+        case cmTarget::UTILITY:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt;           {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           const std::vector&amp;lt;cmSourceFile*&amp;gt;&amp;amp;sources=ti-&amp;gt;second.GetSourceFiles();
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           for (std::vector&amp;lt;cmSourceFile*&amp;gt;::const_iterator si=sources.begin();
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Потом, для тех файлов, которые хотим видеть в дереве создаём фейковый таргет, примерно так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cmake&#34; data-lang=&#34;cmake&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;script-files&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s&#34;&gt;process-filelist.sh&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# hack for display in Qt Creator (with patch for CMake)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;add_custom_target&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;scripts&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;true&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;SOURCES&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;script-files&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Всё, после регенерации файлы появятся в списке.&lt;/p&gt;
&lt;p&gt;Решение костыльное, но время переписывать импортёр CMake в Qt Creator просто нет, будем надеяться, что разработчики обратят на это внимание.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Исследование блоков кода в Emacs</title>
      <link>https://htrd.su/blog/2011/03/06/2011-03-06_21.39_issledovanie_blokov_koda_v_emacs/</link>
      <pubDate>Sun, 06 Mar 2011 21:39:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/03/06/2011-03-06_21.39_issledovanie_blokov_koda_v_emacs/</guid>
      <description>&lt;p&gt;Всегда мучался вопросом: как сделать так, что бы блок между фигурными скобками в сишном файле с исходным кодом оставался подсвеченным пока я делаю скролинг - визуально посмотреть его границы размеры и прочее. Проблем в том, что курсор в Emacs может находиться только в видимой части, соответственно, если блок большой, он никак на экран поместиться не может, значит курсор перескочит с начал/конца блока и подсветка исчезнет.&lt;/p&gt;
&lt;p&gt;Сегодня случайно нашел небольшой хак, частично решающий эту проблему: 
&lt;a href=&#34;http://www.physics.utah.edu/~detar/lessons/emacs/emacs/node7.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.physics.utah.edu/~detar/lessons/emacs/emacs/node7.html&lt;/a&gt;, процитирую:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Parenthesis checking can also be done with the mouse. Double left click on any parenthesis, brace, or bracket. Emacs then shows the matching symbol and highlights the code between them.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Краткий перевод: двойным щелчком мыши по скобке - блок между ней и парной подсветится, выделение будет динамическим от скобки до второй парной или до курсора на экране. Мышкой можно скролить, выделение останется.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Поиск от Google</title>
      <link>https://htrd.su/blog/2011/03/05/2011-03-05_18.45_poisk_ot_google/</link>
      <pubDate>Sat, 05 Mar 2011 18:45:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/03/05/2011-03-05_18.45_poisk_ot_google/</guid>
      <description>&lt;p&gt;Добавил поиск от Google, а то встроенный в DokuWiki не всегда отрабатывает должным образом, а, судя по логам, робот гугла почти не покидает мой сайт :)&lt;/p&gt;
&lt;p&gt;Для поиска сделал кастомный: 
&lt;a href=&#34;http://www.google.com/cse/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.google.com/cse/&lt;/a&gt;. С рекламой даётся бесплатно.&lt;/p&gt;
&lt;p&gt;Что бы разделить запрос и результаты, пользовался этим хинтом: 
&lt;a href=&#34;http://googleajaxsearchapi.blogspot.com/2010/03/search-form-and-results-on-two.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://googleajaxsearchapi.blogspot.com/2010/03/search-form-and-results-on-two.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Для поиска нужен JavaScript, поэтому пользователям NoScript, хотя бы временно, его нужно отключить для сайта.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Emacs Muse</title>
      <link>https://htrd.su/blog/2011/03/05/2011-03-05_16.46_emacs_muse/</link>
      <pubDate>Sat, 05 Mar 2011 16:46:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/03/05/2011-03-05_16.46_emacs_muse/</guid>
      <description>&lt;p&gt;Наконец нашёл удобное средство для html/pdf публикации без излишней навороченности.&lt;/p&gt;
&lt;p&gt;Вести сайт при помощи него я не собираюсь, но вот использовать как инструмент для создания отдельных HTML или PDF документов - вполне (первым, наверное, станет перевод документации для crowns на muse).&lt;/p&gt;
&lt;p&gt;Что такое Muse и с чем его едят есть даже в русских интернетах:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;У Алекса Отта (ну ещё бы! он на нём сайт ведёт): 
&lt;a href=&#34;http://alexott.net/ru/writings/EmacsMuseMyPage.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://alexott.net/ru/writings/EmacsMuseMyPage.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;С упором на публикацию в WordPress: 
&lt;a href=&#34;http://oramezo.org/ru/man/muse-howto&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://oramezo.org/ru/man/muse-howto&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Аналогично, но с упором на Хабр: 
&lt;a href=&#34;http://habrahabr.ru/blogs/soft/60215/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://habrahabr.ru/blogs/soft/60215/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ну и официальные источники:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Официальный сайт: 
&lt;a href=&#34;http://mwolson.org/projects/EmacsMuse.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://mwolson.org/projects/EmacsMuse.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Страница на EmacsWiki: 
&lt;a href=&#34;http://www.emacswiki.org/cgi-bin/wiki/EmacsMuse&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.emacswiki.org/cgi-bin/wiki/EmacsMuse&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Быстрый старт: 
&lt;a href=&#34;http://mwolson.org/projects/MuseQuickStart.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://mwolson.org/projects/MuseQuickStart.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Мануал: 
&lt;a href=&#34;http://mwolson.org/static/doc/muse.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://mwolson.org/static/doc/muse.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;За основу своих настроек взял оные из статьи Алекса Отта. Единственно, из коробки взял только его шаблоны для генерации PDF (да и то, наверное, пересмотрю со временем). Для генерации html использую дефолтный шаблон xhtml1.1 &amp;ndash; пока не определюсь со своими собственными, так как, по сути, собираюсь только использовать для статей, которые нужно куда-то отправить после.&lt;/p&gt;
&lt;p&gt;Ну и для затравки сделал небольшой документ-шпаргалку по muse при помощи самого muse:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;muse-файл: 
&lt;a href=&#34;https://htrd.su/img//post/2011-03-05_16.46_emacs_muse/muse-card.muse&#34;&gt;muse-card.muse&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;pdf-файл: 
&lt;a href=&#34;https://htrd.su/img//post/2011-03-05_16.46_emacs_muse/muse-card.pdf&#34;&gt;muse-card.pdf&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2011-03-05_16.46_emacs_muse/screen_shoot-20110305-171846.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Так же стоит обратить внимание на режим org-mode, подробно рассписывать не буду, ограничусь ссылками:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Организация информации — Emacs Org Mode: 
&lt;a href=&#34;http://habrahabr.ru/blogs/soft/28098/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://habrahabr.ru/blogs/soft/28098/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Введение в org-mode emacs: 
&lt;a href=&#34;http://habrahabr.ru/blogs/soft/105300/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://habrahabr.ru/blogs/soft/105300/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;На последок: muse есть как в основных репозиториях ArchLinux (кстати, разработчик оного - арчевод :)), так и в AUR (
&lt;a href=&#34;http://aur.archlinux.org/packages.php?ID=42735&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;emacs-muse-git&lt;/a&gt;); режим org-mode есть только в AUR: 
&lt;a href=&#34;http://aur.archlinux.org/packages.php?ID=18206&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;emacs-org-mode&lt;/a&gt; (если не хотите стареньким, идущим вместе с Emacs, пользоваться).&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Hightide</title>
      <link>https://htrd.su/blog/2011/03/02/2011-03-02_14.37_hightide/</link>
      <pubDate>Wed, 02 Mar 2011 14:37:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/03/02/2011-03-02_14.37_hightide/</guid>
      <description>&lt;p&gt;Hightide (High Tide - большая вода) - сборка Jetty с включенными дополнительными библиотеками и сервисами JavaEE (эдакий не совсем JavaEE Application Server). Решили попробовать его для своих нужд, пока возможностей JBoss нам не нужно.&lt;/p&gt;
&lt;p&gt;Последняя стабильная версия - 7.3.0 (поддерживается Java5), нестабильная - 8.0.0.M2 (нумерация по версии Jetty, поддерживает Java6).&lt;/p&gt;
&lt;p&gt;Скачать можно отсюда: 
&lt;a href=&#34;http://dist.codehaus.org/jetty/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://dist.codehaus.org/jetty/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Для удобной работы потребуется адаптер для WTP, который поддерживает Jetty 7 и 8: 
&lt;a href=&#34;http://wiki.eclipse.org/Jetty_WTP_Plugin/Jetty_WTP_Install&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://wiki.eclipse.org/Jetty_WTP_Plugin/Jetty_WTP_Install&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Единственный нюанс: адаптер рассчитан чисто на Jetty, поэтому в дефолтной конфигурации просто не запустится - не будет хватать jar-ников. Пока выход нашёл ровным счётом один: по двойному клику на вкладке Servers по Jetty открываем диалог конфигурации, там идём в &amp;ldquo;Open launch configuration&amp;rdquo; и далее двигаемся на вкладку Classpath и в категории User Entries добавляем External JARs, которые ищем в lib директории и поддиректориях в jetty.home.&lt;/p&gt;
&lt;p&gt;Если есть другие пожелания - в каментах жду ответов.&lt;/p&gt;
&lt;p&gt;При работе с Maven поможет эта статья: 
&lt;a href=&#34;http://docs.codehaus.org/display/JETTY/Fast&amp;#43;WebApps&amp;#43;with&amp;#43;Hightide&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://docs.codehaus.org/display/JETTY/Fast+WebApps+with+Hightide&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;А про мой &amp;ldquo;любимый&amp;rdquo; JAAS почитать можно тут: 
&lt;a href=&#34;http://docs.codehaus.org/display/JETTY/JAAS&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://docs.codehaus.org/display/JETTY/JAAS&lt;/a&gt;, а вообще по документации:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://communitymapbuilder.org/display/JETTY/Jetty&amp;#43;Documentation&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://communitymapbuilder.org/display/JETTY/Jetty+Documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;По вопросам горячего деплоя можно почитать тут: 
&lt;a href=&#34;http://phishbouncer.com/trac/browser/trunk/jetty/demo/webapps/jetty/faq/HotDeploy.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://phishbouncer.com/trac/browser/trunk/jetty/demo/webapps/jetty/faq/HotDeploy.html&lt;/a&gt;, где сказано, цитирую:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Q&lt;/strong&gt;: Can Jetty Hot Deploy?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A&lt;/strong&gt;: Jetty is fully hot deployable, but does not have any native hot deployers.
What this means is that Jetty contexts, servlets and filters may be added, stopped,
started and reloaded dynamically, but that Jetty does not have any services that
trigger these events.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Далее по тексту идут причины такого поведения. Ну и полезным по этой теме будет:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://docs.codehaus.org/display/JETTY/Hot&amp;#43;Deployment&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://docs.codehaus.org/display/JETTY/Hot+Deployment&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.jroller.com/larrywilliams/entry/jetty_hot_deploy&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.jroller.com/larrywilliams/entry/jetty_hot_deploy&lt;/a&gt;
Пока реализовывать не пробовал. Будут результаты - будет отчёт.&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Прикосновение к частичке военной истории</title>
      <link>https://htrd.su/blog/2011/02/26/2011-02-26_16.56_prikosnovenie_k_chastichke_voennoj_istorii/</link>
      <pubDate>Sat, 26 Feb 2011 16:56:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/02/26/2011-02-26_16.56_prikosnovenie_k_chastichke_voennoj_istorii/</guid>
      <description>&lt;p&gt;&amp;hellip;или как мы отметили 23 февраля.&lt;/p&gt;
&lt;p&gt;23 февраля, официальный праздник и выходной - День защитника Отечества, или, ранее: &amp;ldquo;День советской армии и военно-морского флота&amp;rdquo;. Хотя в последнее время его и стараются превратить в так называемый &amp;ldquo;день мужчин&amp;rdquo;, вроде &amp;ldquo;нашего ответа&amp;rdquo; на Восьмое марта.&lt;/p&gt;
&lt;p&gt;Дабы не потакать таким тенденциям, решил, что нужно организоваться и провести тематическое мероприятие, благо, что военная сущность и история Владивостока этому крайне способствует. Поэтому выбор был не особенно трудным: организовать экскурсию на один из фортов, познакомить незнающих (а самому освежить в памяти) историю Владивостокской крепости, показать, на конкретном примере, устройство форта, пройтись по его потернам и галереям.&lt;/p&gt;
&lt;p&gt;Продумано, высказано, сделано: выбрал 3й Форт - Форт Императрицы Екатерины Великой, так как сам там давно не был, да и не все внутренние части в нем прошёл. Написал в клубную рассылку Гринтура, мол айда! Позже продублировал и на форуме.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;strong&gt;Краткий экскурс в историю&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Форт №3 - один из фортов главной линии обороны, строившейся по проекту 1910 года. До этого, Русско-Японская война показала несостоятельность текущих фортификационных сооружений. Так, к примеру, по проектам фортов до 1910 года, фланкирующие сооружений, типа капониров или кофров, сооружались во рву, в виде отдельных огневых точек, к ним, в случае опасности, нельзя было оперативно и безопасно перебросить подкрепление. В результате, японцы подавляли их огнём, и овладевали рвом, который становился для них отличным укрытием и плацдармом. На новых проектах же, подобные сооружения соединялись потернами с основными укреплениями. Проект 1910 года включал не только сооружение Владивостокской крепости (хотя условия мира с Японией делали её крайне актуальной: на ТОФ разрешалось иметь всего два крейсера и все оставшиеся на тот момент миноносцы), данный проект включал возведение и крепостей на всей территории России. Но уникальность нашей крепости в том, что она крайне удалена от Москвы и Петербурга того времени, что давало большой простор для деятельности, в частности, при строительстве крепости широко использовался механизированный труд: были возведены канатные дороги для доставки грузов, проложены узкоколейные железные дороги по долинам первой и второй речки, закуплены электрические перфораторы, для выемки грунта использовалась взрывчатка, у каждого форта строилась своя электростанция и временный бетонный завод, использование прожекторов и освещения позволяло вести работы в три смены, был использован только наёмный труд, оплату труда производили вовремя, но деньги, во избежании соблазнов, на руки не давали, а переводили родным и близким работников, поощрялось создание творческих коллективов (не редкостью были ансамбли балалаечников), ведение народных промыслов. Кроме того, удалённость от центра, повлияло и на структуру и проекты фортов: они очень сильно ушли от типового проекта, дабы более полно использовать существующий рельеф местности, как результат, каждый форт - уникальное и, зачастую, блестящее творение инженерной мысли, сочетающие отличный обстрел и малую заметность со стороны. В результате механизации труда и прочим новаторским решениям, к началу Первой Мировой войны, к 1914 году все форты были готовы, примерно на 2/3, и это, всего за 4 года! Стоит и отметить этапность строительства: оно было организовано так, что с начала первых земляных работ, форты можно было уже использовать как оборонительные сооружения!&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;По отзывам, планировалось человек 5-7, на деле собралось (вместо со мной), аж 15 заинтересованных лиц:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ваш покорный слуга (Саша, он же hatred)&lt;/li&gt;
&lt;li&gt;Рита&lt;/li&gt;
&lt;li&gt;Саня (Квазик)&lt;/li&gt;
&lt;li&gt;Коля (live)&lt;/li&gt;
&lt;li&gt;Катя Кравченко&lt;/li&gt;
&lt;li&gt;Артём (Тёма, не знаю как тебя дополнительно идентифицировать, поэтому будешь - Sepp :simple_smile:)&lt;/li&gt;
&lt;li&gt;Саня Вишневский&lt;/li&gt;
&lt;li&gt;Дмитрий&lt;/li&gt;
&lt;li&gt;Тоня (сестрёнка Квазика)&lt;/li&gt;
&lt;li&gt;Серёга (муж Тони)&lt;/li&gt;
&lt;li&gt;Алёна (девушка, над формой одежды которой все посмеялись)&lt;/li&gt;
&lt;li&gt;Света Похожалова&lt;/li&gt;
&lt;li&gt;Валентин&lt;/li&gt;
&lt;li&gt;Таня (именинница!)&lt;/li&gt;
&lt;li&gt;Слава&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Кто-то уже знаком, кого-то видел впервые, но, всё оказалось дружно и слаженно.&lt;/p&gt;
&lt;h2 id=&#34;сбор&#34;&gt;Сбор&lt;/h2&gt;
&lt;p&gt;Решил, что будем собираться в 10.00 на Дальхимпроме, тем, кто мне звонил, интересовался маршрутами, сказал и про промежуточную точку сбора: 9.15 на Некрасовской, на остановке 9го маршрута. Непосредственно там встретился с Ритой, по дороге в автобус забрались Дима и Саня Вишневский. По дороге получаю SMS от Кати, мол задержится, просила подождать - сразу мысль: &amp;ldquo;О! Значит таки нас будет больше!&amp;rdquo;, ибо с этим сообщением и узнал что она будет. В дальнейшем предположение подтвердилось.&lt;/p&gt;
&lt;p&gt;На ДХП почти в обязательном порядке посетили магазин, и взяли немного разного перекуса, выйдя, обнаружили ожидающего Артёма.&lt;/p&gt;
&lt;p&gt;Хитом стало появление Алёны, Тони и Серёги, особенно Алёны, которую Квазик явно дезинформировал о виде нашей вылазки, о чём красноречиво говорила её одежда: сапожки, колготки, юбка, обычная городская куртка, отсутствие перчаток и наличие дамской сумочки. Вполне естественно, что это вызвало у всех смешки и улыбки. Но! Первый зачёт Алёнке: Она не повернула! Да ещё и уверенно заявила, что будет в итоге чище всех! Ладно, над этим тоже поулыбались, но хотя бы уговорили купать пару рабочих перчаток - что бы руки не гробить, и не морозить.&lt;/p&gt;
&lt;p&gt;Вторым хитом стал приезд Квазика и Кати: в маршрутке, на которой они ехали, заклинило дверь, по дороге пассажиры вылазили через окно! На конечной же, всё таки открыли заднюю дверь и высаживались как из БТРа :)&lt;/p&gt;
&lt;p&gt;Последним (если не изменяет память) участником, оказалась Таня. Сразу при её появлении послышались радостные возгласы, ибо даже те, кто её не знал, заметили в её руках торт! А пару мгновений спустя узнали и причину: у неё сегодня День рождения! Так и совместили приятное с полезным.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2011-02-26_16.56_prikosnovenie_k_chastichke_voennoj_istorii/p1140728.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;На фон картинки не обращать внимания! :)&lt;/p&gt;
&lt;h2 id=&#34;подъём&#34;&gt;Подъём&lt;/h2&gt;
&lt;p&gt;Все в сборе, даю отмашку и начинаем движение. Поднимаемся там же, где я всегда поднимался, хотя, случайно, вечером 22 узнаю, что там идёт строительство дороги и всё изрядно перекопано так, что старые дороги стали несколько неактуальными. Но что нам кабанам - если что, то пойдем по азимуту, тем более, что у Коли с собой GPS с отмеченной координатой форта.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2011-02-26_16.56_prikosnovenie_k_chastichke_voennoj_istorii/p1140731.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Ближе к вершине г.Попова (высота №200, на которой и расположен форт) попали в облако. Деревья сказочно преобразились: ветер и влажность облачили их в белый сверкающий наряд.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2011-02-26_16.56_prikosnovenie_k_chastichke_voennoj_istorii/p1140735.jpg&#34; alt=&#34;&#34;&gt;&lt;br/&gt;&lt;br/&gt;
&lt;img src=&#34;https://htrd.su/img//post/2011-02-26_16.56_prikosnovenie_k_chastichke_voennoj_istorii/p1140741.jpg&#34; alt=&#34;&#34;&gt;&lt;br/&gt;&lt;br/&gt;
&lt;img src=&#34;https://htrd.su/img//post/2011-02-26_16.56_prikosnovenie_k_chastichke_voennoj_istorii/p1140743.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;По пути, показал остовы старой канатной дороги (собственно, именно поэтому мы и сошли с дороги в один момент). Ещё буквально несколько метров и, внезапно, мы натыкаемся на строительство.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2011-02-26_16.56_prikosnovenie_k_chastichke_voennoj_istorii/p1140737.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Ну и куда идтить? :) Не долго думая, отговаривая Колю делать рискованные кадры (точнее делать их с рискованного места, обрыв-то вниз ой ёй ёй!), проходим дальше, спускаемся на дрогу, рядом, как настоящее чудовище, мелькая в тумане, ворочает грунт экскаватор. Вопросов сразу много: что за дорога, куда ведёт, приведёт ли куда нужно? Ответов нет, поэтому принимаем простое и верное решение: поднимаемся в лоб! Таким образом уже вскоре мы на старой рокадной дороге, с которой, в скором времени (по идее) есть сворот на форт, а ещё через некоторое количество времени, мы уже на дороге, ведущей от главного укрепления к правому редуту.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2011-02-26_16.56_prikosnovenie_k_chastichke_voennoj_istorii/p1140744.jpg&#34; alt=&#34;&#34;&gt;&lt;br/&gt;&lt;br/&gt;
&lt;img src=&#34;https://htrd.su/img//post/2011-02-26_16.56_prikosnovenie_k_chastichke_voennoj_istorii/p1140745.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;форт&#34;&gt;Форт&lt;/h2&gt;
&lt;p&gt;И вот мы уже на правом редуте, отсюда и планирую начинать рассказ о самом форте, его устройстве.&lt;/p&gt;
&lt;p&gt;&amp;lt;WRAP center round box 80%&amp;gt;&lt;strong&gt;Об устройстве форта&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Форт №3 представляет собой форт расчленённой конструкции, состоит из трёх частей: главного укрепления, правого редута и левого люнета.&lt;/p&gt;
&lt;p&gt;Редут недостроен, часть стрелкового бруствера не залито бетоном, таким образом образуется своего рода разрез, по которому можно оценить масштабы строительства. От редута идёт потерна, соединяющая его с кофром, из которого осуществляется прострел рва. С правой стороны построен барите для выкатного противоштурмового орудия.&lt;/p&gt;
&lt;p&gt;Люнет построен полностью, с правой стороны устроен барбет для выкатного противоштурмового орудия. Из укрепления ведут две потерны, которые выше соединяются. Первая потерна, которая находится сразу у левого входа в подбрустверную галерею частично затоплена. Вторая же сухая, из неё идёт ответвление, ведущее на нижний двойной кофр (собственно туда, не имея снаряжения, только по этому ходу и можно попасть, но об это далее), далее она соединяется с первой потерной (можно спуститься вниз к началу затопа), после идёт ответвление на верхний полукапонир (в нормальном состоянии, только через эти ходы, в капонир бы и можно было войти, но сейчас там выломан кусок стены, так есть вход и сверху), затем галерея ведёт выше, где разветвляется на два тупиковых отрезка: левый ведёт к главному укреплению, в нем расположены минные колодцы (для подрыва ходов, если враг ворвался в укрепление), завален у самого входа (уже, видать, в советское время); правый, по замыслу, должен выходить к дороге, соединяющей главное укрепление и правый редут, так же завален у самого входа.&lt;/p&gt;
&lt;p&gt;Главное укрепление так же было в основном готово, по сути были не достроены только горжевые казармы, от которых и так было решено отказаться в пользу тоннельных, как более безопасных. Главное укрепление должно было соединяться с казармой посредством двух потерн, в настоящее время доступна только одна, и то, наполовину заложена кирпичной кладкой. Колпак броневого наблюдательного поста отсутствует, вместо него зияет дырка.&lt;/p&gt;
&lt;p&gt;Из люнета можно по подземному ходу попасть в нижний двойной кофр. В него имеется и вход со стороны рва, но все лестницы демонтированы, поэтому без риска и без сноровки снизу вверх и сверху вниз попасть проблематично. Вход в противоминные галереи свободен.&lt;/p&gt;
&lt;p&gt;В верхний полукапонир, как уже выше писал, можно попасть из люнета или через дырку в стене, через ров (есть тропа от главного укрепления). Лестницы все на месте, но перил нет нигде, отверстия в полу не огорожены, так что нужно быть внимательным и осторожным!
&lt;/WRAP&gt;&lt;/p&gt;
&lt;p&gt;Первым делом мы собрались на поляне возле стрелкового бруствера правого редута, рассказал кратко про этапы строительства владивостокской крепости, про форт, на котором мы находимся.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2011-02-26_16.56_prikosnovenie_k_chastichke_voennoj_istorii/p1140750.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;После чего прошли внутрь в подбрустверную галерею: кто через недозалитый бетоном вырез, кто через сквозник. Спустились так же к ходу, ведущему к кофру, желающие прогулялись и туда.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2011-02-26_16.56_prikosnovenie_k_chastichke_voennoj_istorii/p1140759.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Далее поднялись на поверхность и рассмотрели все это дело сверху, обращаясь к плану форта, на какие вопросы мог - на те отвечал.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2011-02-26_16.56_prikosnovenie_k_chastichke_voennoj_istorii/p1140760.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Следующим нашим пунктом стало главное укрепление. Хотя изначально была мысль пройтись по рву от кофра правого редута до нижнего двойного кофра, но очертания рва стали (за 100 лет-то!) крайне нечёткими и обильно поросли деревьями, плюс туман&amp;hellip; в общем гремучая смесь для блужданий.&lt;/p&gt;
&lt;p&gt;На главное укрепление ведёт хорошая тропа: хоть и круто, но быстро забегаем.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2011-02-26_16.56_prikosnovenie_k_chastichke_voennoj_istorii/p1140775.jpg&#34; alt=&#34;&#34;&gt;&lt;br/&gt;&lt;br/&gt;
&lt;img src=&#34;https://htrd.su/img//post/2011-02-26_16.56_prikosnovenie_k_chastichke_voennoj_istorii/p1140778.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Бегло осматриваем (ветер, влажно, зябко) броневой наблюдательный пост и двигаемся к казармам, где показываю начало хода от казарм в подбрустверную галерею: стенка на месте, на полу лед, скользко, в общем - мечта суицидника :)&lt;/p&gt;
&lt;p&gt;Спускаемся к брустверу, входим в галерею, на местах показываю выемки в стенах для керосиновых лам, ниши для размещения печек-буржуек, для обогрева, осматриваем сквозники, объясняю их назначение (если кто был вне досягаемости: спрашиваем в комментах!).&lt;/p&gt;
&lt;p&gt;Осматриваем наблюдательный пост изнутри, находим засыпанный правый вход и начало засыпанной потерны до казарм.&lt;/p&gt;
&lt;p&gt;От главного укрепления топаем к левому люнету. Из-за тумана самую малость блуждаем, но скоро выходим к левому входу в галерею. Сразу показываю затопленное начало первой потерны, рассказываю про забавные случаи с ней: вода там очень прозрачная, бывало, что люди туда спускаться начинали и не сразу соображали, что тут вода! Как результат - промокшие ноги, но улыбающиеся лица (&amp;ldquo;пострадавшего&amp;rdquo; в том числе). Сейчас же там лёд.&lt;/p&gt;
&lt;p&gt;Проходим до начала второй потерны и отправляемся к верхнему полукапониру, на развилках коридора (надо сказать, при строительстве фортов не стоит задача запутать подземные ходы, а наоборот - сделать их проще и понятнее, ведь, когда сверху бомбят, соображать, куда тебе бежать - крайне трудно) показываю траверсы, объясняю их назначение. Спустились немного в первую потерну, к началу затопа. Что удивительно - лёд там поломан, как будто кто-то специально этим занимался.&lt;/p&gt;
&lt;p&gt;Возвращаемся назад к развилке. Через некоторое время выходим к полукапониру и поднимаемся наверх, к свету и свежему воздуху. Тут решаем сделать привал, перекусить, уничтожить тортик и поднять рюмки чая за день рождение Тани и 23 февраля (и да! это не только мужской праздник, посмотрите сколько женщин трудится на оборону нашей страны: их чуткие пальцы держат паяльники и паяют платы для РЛС, а сколько их среди контрактников, на узлах связи, коммутаторах и так далее&amp;hellip;).&lt;/p&gt;
&lt;p&gt;Тортик умудрились честно разделить на 15 частей, по количеству людей и&amp;hellip; остались лишние куски! &amp;ldquo;Кто скромный - тот голодный!&amp;rdquo;, - и оставшиеся части скармливаются Квазику. Мусор упаковываем в пакеты и трамбуем мне в рюкзак, туда же добавляется сумочка Алёны&amp;hellip; Теперь я знаю, самую неудобную вещь для паковки в рюкзак, так-то! :)&lt;/p&gt;
&lt;p&gt;С новыми силами спускаемся обратно в катакомбы. План такой: посетить две тупиковые ветки ходов и спускаться в нижний двойной кофр, пройтись по противоминным галереям, выходить обратно в левый люнет и собираться в обратный путь.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2011-02-26_16.56_prikosnovenie_k_chastichke_voennoj_istorii/p1140783.jpg&#34; alt=&#34;&#34;&gt;&lt;br/&gt;&lt;br/&gt;
&lt;img src=&#34;https://htrd.su/img//post/2011-02-26_16.56_prikosnovenie_k_chastichke_voennoj_istorii/p1140791.jpg&#34; alt=&#34;&#34;&gt;
&lt;WRAP centeralign&gt;
&lt;em&gt;в потернах&lt;/em&gt;
&lt;/WRAP&gt;&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2011-02-26_16.56_prikosnovenie_k_chastichke_voennoj_istorii/p1140784.jpg&#34; alt=&#34;&#34;&gt;
&lt;WRAP centeralign&gt;
&lt;em&gt;баян! :)&lt;/em&gt;
&lt;/WRAP&gt;&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;Далее по ходу сообщения встречаем ряд дырок в полу - это не что иное как минные колодцы. Нужны что бы подорвать проход, дабы пресечь попытки атак под землёй со стороны захваченного левого люнета, при этом не прервать свою связь с водой (далее) и горжевым выходом.&lt;/p&gt;
&lt;p&gt;Квазик тут отметился :) на обратном пути обогнал всех, залез в одну из них, и эмитировал хитрое эхо. Подробнее он сам напишет в комментариях, а оконцовка была такой:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Эхо?&lt;/li&gt;
&lt;li&gt;Даааааа&amp;hellip;&lt;/li&gt;
&lt;li&gt;Скажи что нибудь по английски!&lt;/li&gt;
&lt;li&gt;Я не умеююююю&amp;hellip;.&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;
&lt;p&gt;На развилке, от которой один тоннель ведёт к казарме, а другой к горжевому выходу (для выхода в открытых ход сообщения с правым редутом, там сейчас дорога, для выхода в тыл и для подпитки обороняющихся с тыла) расположен колодец (я только точно не уверен в его назначении: снабжение водой или часть дренажной системы).&lt;/p&gt;
&lt;p&gt;Оба хода сейчас тупиковые, по коридору, идущему к казармам встречаются большие булыжники - последствия завала входа, а, в ведущем в тыловому выходу, мы встретили местных жителей.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2011-02-26_16.56_prikosnovenie_k_chastichke_voennoj_istorii/p1140785.jpg&#34; alt=&#34;&#34;&gt;&lt;br/&gt;&lt;br/&gt;
&lt;img src=&#34;https://htrd.su/img//post/2011-02-26_16.56_prikosnovenie_k_chastichke_voennoj_istorii/p1140786.jpg&#34; alt=&#34;&#34;&gt;
&lt;WRAP centeralign&gt;
&lt;em&gt;местные жители&lt;/em&gt;
&lt;/WRAP&gt;&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;Таким образом, главный ход сообщения пронизывает гору Попова насквозь! Подъемы и спуски достаточно крутые - можно судить о выносливости и подготовке того поколения, так и всплывают в голове слова Лермонтова из стихотворения &amp;ldquo;Бородино&amp;rdquo;:&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Да, были люди в наше время,
Не то, что нынешнее племя:
Богатыри - не вы!&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;
&lt;p&gt;Полы уложены плиткой на которой, даже мокрой, и мои сверхскользкие ботинки держат мертвой хваткой! Вот как нужно делать, а не ту брусчатку, что утрамбовали по улицам Владивостока.&lt;/p&gt;
&lt;p&gt;Возвращаемся назад и спускаемся в двойной кофр левого люнета, лестниц там нет, поэтому наружу не выходим и не поднимаемся на верхний ярус, да и люди уже малость притомились. Кофр двухэтажный: верхний этаж боевой, там находились 6 орудий для обстрела рва, нижний этаж использовался как укрытие артиллеристов и склад боеприпасов. От первого этажа веером расходятся контр-минные галереи, то что они в основании соединены поперечной галереей улучало естественную вентиляцию, а так же улучшало их контр-минные свойства (более гибче и функциональнее становились).&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2011-02-26_16.56_prikosnovenie_k_chastichke_voennoj_istorii/p1140798.jpg&#34; alt=&#34;&#34;&gt;
&lt;WRAP centeralign&gt;
&lt;em&gt;Так решали вопрос отсутствия лестниц в кофре&lt;/em&gt;
&lt;/WRAP&gt;&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;Поднявшись обратно в люнет, вышли на бетонный барбет для выкатных противоштурмовых орудий, убежище для которых  было в сквознике правого выхода из подбрустверной галереи.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2011-02-26_16.56_prikosnovenie_k_chastichke_voennoj_istorii/p1140801.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Собираться особо было не нужно, поэтому сразу двинулись в обратный путь. Дошли до редута, от туда спустились по дороге до рокадной, далее парой зигзагов и мы уже на пути к ДХП.&lt;/p&gt;
&lt;p&gt;Тут стоит отметить опять Алёну: она действительно оказалась самой чистой! Второй зачёт :)&lt;/p&gt;
&lt;p&gt;Фотографии: Коля aka Live, по мере поступления будут все остальные выложены в галереи, здесь размещены ссылки.&lt;/p&gt;
&lt;h2 id=&#34;заключение&#34;&gt;Заключение&lt;/h2&gt;
&lt;p&gt;Надеюсь многим понравилось и вылазка оказалась познавательной и интересной. По отдельным отзывам понял - нужно и по другим фортам такое устроить.&lt;/p&gt;
&lt;p&gt;Случайно нашел e-mail одного из авторов книги &amp;ldquo;Владивостокская крепость&amp;rdquo;, списался и через него приобрёл два экземпляра книги (получилось 500 руб за книгу, говорит что ещё экземпляров 30 осталось), жаль, что из-за недостатка времени не получилось пораспрашивать об истории материалов, узнал только, что первые материалы и чертежи, которые они собирали, датируются 1977 годом, планы перечерчивались на кальку, т.е. труд по её формированию поистине колоссальный. В интернете есть книга издательства 2001 года, у авторов можно купить 2006 года - значительно переработано и дополнено.&lt;/p&gt;
&lt;p&gt;Так же полезным источником является альманах &amp;ldquo;Крепость Россия&amp;rdquo;, выпуск 1, издательства Дальнаука, Владивосток, 2003 год. В интернете есть электронная версия.&lt;/p&gt;
&lt;p&gt;Немного материалов есть и на сайте &amp;ldquo;Владивостокская крепость&amp;rdquo;: 
&lt;a href=&#34;http://www.vlad-fort.ru/articles/index.php&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.vlad-fort.ru/articles/index.php&lt;/a&gt; и на сайте &amp;ldquo;Крепость Владивосток&amp;rdquo;: 
&lt;a href=&#34;http://fortress.bosfor.ru/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://fortress.bosfor.ru/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Можно почитать краткий исторический очерк &amp;ldquo;Владивостокская крепость&amp;rdquo;: 
&lt;a href=&#34;http://fortress.wl.dvgu.ru/histiry.htm&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://fortress.wl.dvgu.ru/histiry.htm&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Крайне полезным источником является &amp;ldquo;Фортификационный словарь&amp;rdquo; полковника Шперка (издательство ВИА, 1946 год), его электронная версия: 
&lt;a href=&#34;http://www.szst.ru/library/shperk_s/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.szst.ru/library/shperk_s/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Из других полезных сайтов:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ребята собрали малость материалов - 
&lt;a href=&#34;http://vrkd.ru/maps.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://vrkd.ru/maps.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Путешествие Сергея Гуляева по фортам северной линии обороны (1-7) - 
&lt;a href=&#34;http://www.skitalets.ru/trips/2009/vladivostok_gulyaev/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.skitalets.ru/trips/2009/vladivostok_gulyaev/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Серия очерков Игоря Заводовского &amp;ldquo;Крепость Владивосток&amp;rdquo;:
&lt;ul&gt;
&lt;li&gt;Крепость Владивосток. очерк I. Сапёрный редут 4 - 
&lt;a href=&#34;http://www.proza.ru/2009/02/28/656&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.proza.ru/2009/02/28/656&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Крепость Владивосток. очерк II. Форт Русских - 
&lt;a href=&#34;http://www.proza.ru/2009/02/28/684&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.proza.ru/2009/02/28/684&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Крепость Владивосток. очерк III. Форт 7 - 
&lt;a href=&#34;http://www.proza.ru/2009/04/04/920&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.proza.ru/2009/04/04/920&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Серия статей &amp;ldquo;ВЛАДИВОСТОКСКАЯ КРЕПОСТЬ: ИСТОРИЯ И СОВРЕМЕННОСТЬ&amp;rdquo;:
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://vladivostok.com/archive/10/03/vlad_krepost1.asp&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://vladivostok.com/archive/10/03/vlad_krepost1.asp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://vladivostok.com/archive/10/03/vlad_krepost2.asp&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://vladivostok.com/archive/10/03/vlad_krepost2.asp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://vladivostok.com/archive/10/04/krepost.asp&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://vladivostok.com/archive/10/04/krepost.asp&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Си, прекрасное</title>
      <link>https://htrd.su/blog/2011/02/20/2011-02-20_10.08_si_prekrasnoe/</link>
      <pubDate>Sun, 20 Feb 2011 10:08:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/02/20/2011-02-20_10.08_si_prekrasnoe/</guid>
      <description>&lt;p&gt;
&lt;a href=&#34;http://eli.thegreenplace.net/2011/02/15/array-initialization-with-enum-indices-in-c-but-not-c/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://eli.thegreenplace.net/2011/02/15/array-initialization-with-enum-indices-in-c-but-not-c/&lt;/a&gt; - это воистину прекрасно! Использовать enum для именованной инициализации массива. Можно делать в C99, не работает в C++&lt;/p&gt;
&lt;p&gt;Ну и ссылки, на правах мемориза:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.advancedlinuxprogramming.com/alp-folder&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.advancedlinuxprogramming.com/alp-folder&lt;/a&gt; - по названию сайта уже понятно, что это такое :) книжка &amp;ldquo;Advanced Linux Programming&amp;rdquo; в сободном доступе. На просторах интернета встречается русский перевод, можно поискать.&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://mij.oltrelinux.com/devel/unixprg/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://mij.oltrelinux.com/devel/unixprg/&lt;/a&gt; - &amp;ldquo;UNIX programming examples&amp;rdquo; - примеры кода на Си для unix, в частности - сокеты, IPC, потоки.&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Dokuwiki Bookmark и Firefox</title>
      <link>https://htrd.su/blog/2011/02/18/2011-02-18_22.37_dokuwiki_bookmark_i_firefox/</link>
      <pubDate>Fri, 18 Feb 2011 22:37:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/02/18/2011-02-18_22.37_dokuwiki_bookmark_i_firefox/</guid>
      <description>&lt;p&gt;&lt;strong&gt;Внимание: статья полностью неактуальна ввиду переезда на статику в 2019 году.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Какое-то время назад я поднял у себя на wiki 
&lt;a href=&#34;https://htrd.su/blog/2010/05/23/2010-05-23_02.48_dokuwiki_i_web-zakladki/&#34;&gt;систему веб-закладок&lt;/a&gt;. Из браузеров подобные закладки добавляются при помощи так называемых bookmarklets - javascript вводящихся через адресную строку.&lt;/p&gt;
&lt;p&gt;Естественно что, по сути, единственная удобная возможность использования веб-закладок - это создать на панели закладок (каламбууур!) закладку с URL с текстом букмарклета.&lt;/p&gt;
&lt;p&gt;Но мне что-то не понравилось: держать открытую панель закладок ради этого, тратить драгоценное экранное место моего EeePC 1000HA&amp;hellip; Решил покурить тему.&lt;/p&gt;
&lt;p&gt;Задачу сформулировал так: создать кнопку, которую можно поместить на любую активную панель, и вызывать диалог сохраненя веб-закладки по нажатию на неё.&lt;/p&gt;
&lt;p&gt;Приступил к поиску. Результат не заставил себя долго ждать: почти сразу нашел расширение 
&lt;a href=&#34;https://addons.mozilla.org/en-US/firefox/addon/custom-buttons/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Custom Buttons&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Следующим шагом - придумать код кнопки. Атака &amp;ldquo;в лоб&amp;rdquo;, то есть подстановкой кода букмарклета в команду &lt;code&gt;openURI&lt;/code&gt; не увенчалась успехом. Но, благодаря этим документам:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://custombuttons.mozdev.org/drupal/content/custom-buttons-documentation&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Custom Buttons Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://developer.mozilla.org/en/Code_snippets/Tabbed_browser&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Tabbed browser&lt;/a&gt; (особенно про получение объекта document для текущей открытой вкладки)&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://developer.mozilla.org/Special:Tags?tag=DOM&amp;amp;language=en&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Pages tagged with &amp;ldquo;DOM&amp;rdquo;&lt;/a&gt; (тут вообще читать не перечитать, но оставим это любителям ваять расширения для FF)
был составлен следующий код (помещается во вкладке Code (Код) редактора новой кнопки):&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;/*CODE*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;host&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;http://hatred.homelinux.net/wiki&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;doc&lt;/span&gt;   &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;title&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;doc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;url&lt;/span&gt;   &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;doc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;location&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;sel&lt;/span&gt;   &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;doc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;selection&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;?&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;doc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;selection&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;createRange&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;().&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;text&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;doc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;getSelection&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;target_url&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;host&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;/doku.php?do=dokubookmark&amp;amp;te=&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;encodeURI&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;amp;ur=&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;encodeURI&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;amp;ti=&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;encodeURI&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// Open in new Window
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;window&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;open&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;target_url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;dokuwikiadd&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s1&#34;&gt;&amp;#39;scrollbars=yes,resizable=yes,toolbars=yes,width=680,height=520,left=210,top=150,status=yes&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// Open in new Tab
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//gBrowser.selectedTab = gBrowser.addTab(target_url);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Адрес сайта, естественно, исправляете на свой. Так же можете выбрать способ открытия окна сохранения: по умолчанию - новое окно, а можно - в новой вкладке.&lt;/p&gt;
&lt;p&gt;На скриншоте процесс редактирования выглядит так:
&lt;img src=&#34;https://htrd.su/img//post/2011-02-18_22.37_dokuwiki_bookmark_i_firefox/screen_shoot-20110218-225022.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Кнопку после создания помещаем на любую открытую панель и пользуемся.&lt;/p&gt;
&lt;p&gt;Из замеченных косяков: при включенном No script при открытии окна сохранения ругается на возможную XSS атаку и малость коверкает выделение при вставке, приходится перечитывать.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Apache Maven 2</title>
      <link>https://htrd.su/blog/2011/02/18/2011-02-18_12.37_apache_maven_2/</link>
      <pubDate>Fri, 18 Feb 2011 12:37:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/02/18/2011-02-18_12.37_apache_maven_2/</guid>
      <description>&lt;p&gt;На правах мемориза:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.ibm.com/developerworks/ru/edu/j-mavenv2/index.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.ibm.com/developerworks/ru/edu/j-mavenv2/index.html&lt;/a&gt; - Введение в Apache Maven 2&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://docs.codehaus.org/display/MAVEN/Maven&amp;#43;Plugin&amp;#43;Matrix&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://docs.codehaus.org/display/MAVEN/Maven+Plugin+Matrix&lt;/a&gt; - таблица плагинов Maven 2&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Maven и WTP</title>
      <link>https://htrd.su/blog/2011/02/14/2011-02-14_11.39_maven_i_wtp/</link>
      <pubDate>Mon, 14 Feb 2011 11:39:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/02/14/2011-02-14_11.39_maven_i_wtp/</guid>
      <description>&lt;p&gt;WTP - Eclipse Web Tools Platform. Набор расширений для удобной работы с WEB проектами. Деплой на различные серверы приложений, отладка, профилирование и много всего другого вкусного.&lt;/p&gt;
&lt;p&gt;Про Maven не пишу, многим понятно. В последних версиях плагина для Eclipse в extra есть модули для j2ee проектов различных версий соглашений (j2ee 5/6 и младше). Но статья по ссылке:&lt;br/&gt;&lt;br/&gt;

&lt;a href=&#34;http://www.devx.com/Java/Article/36785&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.devx.com/Java/Article/36785&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;будет полезна как инструкция по переводу существующего проекта, созданного средсвами Eclipse и WTP на сборку maven&amp;rsquo;ом.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Java и LDAP. Малость заметок</title>
      <link>https://htrd.su/blog/2011/02/14/2011-02-14_11.33_java_i_ldap._malost_zametok/</link>
      <pubDate>Mon, 14 Feb 2011 11:33:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/02/14/2011-02-14_11.33_java_i_ldap._malost_zametok/</guid>
      <description>&lt;p&gt;Помаленьку, понемножку, на уровне ссылок.&lt;/p&gt;
&lt;h2 id=&#34;заметка-первая-ldap-как-jndi-ресурс-в-contextxml&#34;&gt;Заметка первая: LDAP как JNDI ресурс в context.xml&lt;/h2&gt;
&lt;p&gt;Читать тут: 
&lt;a href=&#34;http://old.nabble.com/LDAP-as-resource-in-context.xml-td14204908.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://old.nabble.com/LDAP-as-resource-in-context.xml-td14204908.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Из бяк: при использовании пула подключений, само подключение создаётся в момент
new InitialDirContext(env);
или первого обращения поиска атрибутов. Для подключения создаётся поток, который не завершается при редеплое. Tomcat ругается при этом на потенциальную утечку памяти. Раздражает.&lt;/p&gt;
&lt;h2 id=&#34;заметка-вторая-использование-dn-в-фильтрах&#34;&gt;Заметка вторая: использование DN в фильтрах&lt;/h2&gt;
&lt;p&gt;Не сразу прокурил как, вот статейка на русском языка, поясняющая - как это нужно делать: 
&lt;a href=&#34;http://sysadminblog.ru/ldap/2011/01/18/tipichnye-primery-ispolzovaniya-entrydn-v-ldap-filtrah.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://sysadminblog.ru/ldap/2011/01/18/tipichnye-primery-ispolzovaniya-entrydn-v-ldap-filtrah.html&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>ThreadLocal Memory Leak</title>
      <link>https://htrd.su/blog/2011/02/08/2011-02-08_16.21_threadlocal_memory_leak/</link>
      <pubDate>Tue, 08 Feb 2011 16:21:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/02/08/2011-02-08_16.21_threadlocal_memory_leak/</guid>
      <description>&lt;p&gt;Использовать ThreadLocal переменные удобно, для расшаривания данных между разными частями одного потока (допустим достучаться из POJO объекта к HTTP сессии и т.п.). Другое дело, что чревато в контексте использования сервера приложений: тут треды не уничтожаются, а возвращаются в пул потоков, как следствие: GC не собирает их, они остаются в памяти, а тут, помимо явной утечки, есть ещё и потенциальная дырка в безопасности.&lt;/p&gt;
&lt;p&gt;По 
&lt;a href=&#34;http://blog.codecentric.de/en/2008/09/a-threadlocal-memory-leak/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;ссылке&lt;/a&gt; статья на английском на эту тематику. Как решить теперь буду думать.&lt;/p&gt;
&lt;p&gt;По этой ссылке:&lt;br/&gt;&lt;br/&gt;

&lt;a href=&#34;http://wiki.apache.org/tomcat/MemoryLeakProtection&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://wiki.apache.org/tomcat/MemoryLeakProtection&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;
Можно почитать про разные MemLeaks в веб-приложениях (точнее про технологию защиты от оных в Tomcat)&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;UPD:&lt;/strong&gt;&lt;/em&gt; подкатом решение (???)&lt;/p&gt;
&lt;h2 id=&#34;решение&#34;&gt;Решение&lt;/h2&gt;
&lt;p&gt;Найдено тут: 
&lt;a href=&#34;http://weblogs.java.net/blog/jjviana/archive/2010/06/09/dealing-glassfish-301-memory-leak-or-threadlocal-thread-pool-bad-ide&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://weblogs.java.net/blog/jjviana/archive/2010/06/09/dealing-glassfish-301-memory-leak-or-threadlocal-thread-pool-bad-ide&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;какое выбирать, решать вам, я выбрал второй вариант с наследованием класса. Скопирую его тут с форматированием:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;java.lang.ref.SoftReference&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;abstract&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;SoftThreadLocal&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;extends&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ThreadLocal&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// Encapsulation required because Generics is stupid about references, and there is no interface for ThreadLocal, &lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//so I can&amp;#39;t simply extend a single ThreadLocal, grr! Java has so many brittle design mistakes in it.&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;private&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;final&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ThreadLocal&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SoftReference&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ThreadLocal&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SoftReference&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;@Override&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SoftReference&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ref&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;result&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ref&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;result&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ref&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;result&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;result&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;initialValue&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ref&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SoftReference&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;result&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ref&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;result&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;@Override&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;remove&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SoftReference&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;@Override&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;remove&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;remove&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Далее работа классическая, к примеру, как у меня через ThreadLocal Singleton:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;java.util.HashMap&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;cm&#34;&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * Небольшой вспомогательный статический класс
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * для расшариванить локальных для треда переменных. Значение будет для каждого треда своё.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * Допустим, получая в методе doPost()/doGet() сервлета значение сессии и для проброса во все дочерние
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * классы, без необходимости передачи оных параметром, что, собственно говоря, не всегда возможно.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; *
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * @author hatred
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * 2011-01-27
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; */&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;ThreadContext&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;private&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;cm&#34;&gt;/*static*/&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;final&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SoftThreadLocal&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;HashMap&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Object&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Object&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_context&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SoftThreadLocal&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;HashMap&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Object&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Object&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;protected&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;HashMap&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Object&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Object&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;initialValue&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;HashMap&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Object&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Object&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;private&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;static&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ThreadContext&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_instance&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;synchronized&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;static&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ThreadContext&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;getContext&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_instance&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_instance&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ThreadContext&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_instance&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;synchronized&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;static&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;releaseContext&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_instance&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_instance&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;clear&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_instance&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;contextRemove&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_instance&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;put&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Object&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Object&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_context&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;().&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;put&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Object&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Object&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_context&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;().&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;remove&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Object&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_context&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;().&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;remove&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;clear&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_context&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;().&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;clear&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;protected&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;contextRemove&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_context&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;remove&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Кстати, не могу понять, насколько правильно делать getContext() и releaseContext() &lt;strong&gt;synchronized&lt;/strong&gt;?&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Ударим троплением по отсутствию снегоуборочной техники!</title>
      <link>https://htrd.su/blog/2011/01/31/2011-01-31_11.31_udarim_tropleniem_po_otsutstviju_snegouborochnoj_texniki/</link>
      <pubDate>Mon, 31 Jan 2011 11:31:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/01/31/2011-01-31_11.31_udarim_tropleniem_po_otsutstviju_snegouborochnoj_texniki/</guid>
      <description>&lt;p&gt;31-е января, были вылазки, а вот по отчётам как-то у меня слабо, поэтому выкладываю небольшим дайджестом.&lt;/p&gt;
&lt;p&gt;Подкатом краткие ремарки&amp;hellip;&lt;/p&gt;
&lt;h2 id=&#34;новая-2011-года---года-великий-воробей&#34;&gt;Новая 2011 года - года Великий Воробей&lt;/h2&gt;
&lt;p&gt;Слово &amp;ldquo;насяльника&amp;rdquo; не дописываю, хотя рука поднимается :) Но по сути: так, только так и никак иначе!&lt;/p&gt;
&lt;p&gt;Новый год встретили на хребте Большой Воробей (в распадке между непосредственно вершиной г.Туманная и безымянной вершинкой, на которой располагается бывшая метеостанция). Банда подобралась изумительная: сразу куча новых знакомых, и, главное - отличных ребят: Саня (Квазик или Квазикака), Димка (МРО), Олеся (Рыжая), ещё один Дима, Коля (Live), Оля, её парень - Андрей (обобщенно: альпинюги!), Саня Вишневский (местный &amp;ldquo;любимчик&amp;rdquo;). Не могу не упомянуть и о нашем &amp;ldquo;новогоднем чуде&amp;rdquo; - Антохе, который теперь даже пьяный будет туриков за версту обходить =-)&lt;/p&gt;
&lt;p&gt;Вместе пересеклись на форуме у Зелёного, большая часть ребят оказалась из Гринтура, туда же и меня начала затягивать трясина :)&lt;/p&gt;
&lt;p&gt;Подробно не буду описывать, ибо это в прекрасной юмористической форме изложила Рыжая в 
&lt;a href=&#34;http://turizm.primkray.ru/index.php?id=365&amp;amp;doc=k_podnozhiiu_vorobia&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;своём отчёте&lt;/a&gt;, ссылку на который я уже давал в одном из своих 
&lt;a href=&#34;https://htrd.su/blog/2011/01/16/2011-01-16_00.06_novyj_god_na_tumannoj/&#34;&gt;прошлых постов&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Небольшим дополнением: это образование интересных и забавных мемов (устойчивых выражений): новогоднее чудо - как окрестили Антоху, МРО - Молодой Растущий Организм - эт про Димку, ибо вечно голоден (хотя и тощ) :)&lt;/p&gt;
&lt;p&gt;Кроме того, произошол и мини-обмен опытом: мне объяснили как правильно тропить, а я показал свой способ организации очага из верёвки и палок (что бы не таскать лишнего, если отправляемся в лес). В остальном - болтали, вязали узлы, травили байки и просто прекрасно проводили время.&lt;/p&gt;
&lt;h2 id=&#34;январские-обгонялки-догонялки&#34;&gt;Январские &lt;del&gt;обгонялки&lt;/del&gt; догонялки&lt;/h2&gt;
&lt;p&gt;Ешё празднуя НГ на Великая Воробья, Квазик начал агитировать меня на участие в сим мероприятии. И таки сбил с бухты барахты: мол там никто не побежит, все пойдут, тусовка, всё такое&amp;hellip; Ну я и повёлся :)&lt;/p&gt;
&lt;p&gt;А мероприятие проходило 15 января, за неделю до это отпраздновал свой ДР - стукнуло 27, почесал затылок и решил: еду!&lt;/p&gt;
&lt;p&gt;Утро. 7.10. Жду электричку на перроне. Прохладно, однако.&lt;/p&gt;
&lt;p&gt;По, как мне сказали, традиции, прыгаю в 3й вагон с конца электрички и&amp;hellip; обана: вижу Колю (Live) и Вишневского. А ведь Коля собирался в тайгу, на мой вопрос отвечает коротко, но ёмко: холодно!&lt;/p&gt;
&lt;p&gt;В Артем-ГРЭС нашу компанию разбавляет Олеся с горными лыжами - собирается на л.б.Грибановка кататься. В таком составе и катимся дальше (Квазик тем временем едет туда же, но на машине, а Оля уже на трассе &amp;ldquo;траверс&amp;rdquo;: так и собрался опять почти весь новогодний состав!).&lt;/p&gt;
&lt;p&gt;Приехали в Анисимовку: морозец -25 (кто-то говорил и про -27, но не сильно суть), ветра нет, но кто сказал, что его на верху не будет. Ещё и Фалаза кажется в два раза выше - от жеж у страха глазики велики, нннно - хоть и на 4WD, но доползу! :) Кто-то делает робкие заявления - мол может скинуться и на машине, но смело отметаем эти малодушные заявления и топаем до базы своими двумя.&lt;/p&gt;
&lt;p&gt;По дороге изымаю у Олеси лыжи, после того как она навернулась на скользком накате. Какие же они тяжеленные! Тем временем то мы обгоняем, то нас обгоняют группы и группки таких же отморозков, в поисках зимней свежести. На самом подходе к нашей цели, добрая женщина на чём-то джипо-паркетно-подобном говорит мне (ну а кому же ещё: лыжи на плечах!) мол, а в Грибановке подъемник не работает. Овечаю, в духе: эта типа, а мы этого, не того, не кататься, мы - бегать. Интересно, что у неё творилось в голове после такого ответа? :) Саня Вишневский ворчит по дороге: &amp;ldquo;не честно, мы тут лишние 5-6 км накручивает, а кто-то там с вечера/на машине&amp;rdquo;. Оправдываю это &amp;ldquo;безобразие&amp;rdquo; разминкой, а чем не похоже?&lt;/p&gt;
&lt;p&gt;По дороге вспоминаю о Наде Юровой: из-под сознания всплывает, что она что-то там говорила про обгонялки, и нужно бы было её позвать&amp;hellip; А мысль оказывается материальна, только добрались, начали регистрироваться (заполучил себе 13й номер) и, опппа, кого я вижу - Надя! :) Там же встретили Квазика, ткнул носом где регистрироваться - записался на кольцо: я по северо-западному ребру не поднимался, только спускался, решил восполнить этот недостаток.&lt;/p&gt;
&lt;p&gt;Далее всё быстро: новые знакомства, перекус, старт.&lt;/p&gt;
&lt;p&gt;В 12.20-12.25 стартанули&amp;hellip; Ога как же, пошли все - ЛОМАНУЛИСЬ как лоси, ну и я, в лучших традициях классики (вспоминая &amp;ldquo;Джентльменов удачи&amp;rdquo;): все побежали и я побежал! Но с моей дыхалочкой долго это не продолжалось: перешёл на шаг, да и на подъёме было тяжко, но ничего, я сюда за впечатлениями, по дороге фотографировал пейзажи (особенно красиво стало когда вышел на гребень, хотя там был и сильнейший ветерок и конкретный минусок) и обгоняющих меня девчат (разнесён старт на 10 минут был).&lt;/p&gt;
&lt;p&gt;Но мы как трактора, медленно, но верно дотелепался: сначала до хребтика, потом, как казалось, обдуваемый всем ветрами, до главной вершины Фалазы, а там&amp;hellip; Как только увидел крест, вдруг что-то внутри как-то резко оборвалось и таааааааааааак захотелось есть, что хоть стой, хоть падай. Сразу всплыли мысли о мороженных бутербродах и термосе с чаем в рюкзачке, и что-то как-то более резво получилось добраться до Креста, там и потратил часть времени на перемалывание бутерброда и шлифовку его чаем.&lt;/p&gt;
&lt;p&gt;Тут и началась самая интересная часть маршрута: жопогорки или Фалаза Бобслей-2011. Поясню: спуск по северо-восточному (да ровно как и подъем) - достаточно крутой&amp;hellip; И меня сразу удивила форма тропы: ровный такой полукруг. Пытался сначала бежать по нему, хватаясь за деревья, но в один момент упал на пятую точку и&amp;hellip; тут я ВСЁ понял: и почему форма тропы такая, и как по ней нужно спускаться! :) В общем, никогда я так быстро с Фалазы не спускался.&lt;/p&gt;
&lt;p&gt;Вторым открытием было наличие борозд в желобе, но это тоже быстро стало понятным: когда тропа, в своём крутом спуске упиралась в дерево, я инстинктивно выкинул ногу и она как раз попала в этот самый желоб - так и тормозил я, и тормозили до меня.&lt;/p&gt;
&lt;p&gt;Пару последних рывков и я, абсолютно первый с конца, на финише: чуть не умерший, с, как примороженной, улыбкой на морде лица и, в общем, довольный как слон.&lt;/p&gt;
&lt;p&gt;Зелёный (к моменту моего прибытия) уже прибежал с траверса, и вообще они там молодцы, слоны: за 7 часов с минутами уделали маршрут от Лукьяновки (ж/д платформы, если быть точнее) до Пидана, по Ливадийскому хребту на Фалазу и вниз на Грибановку. Скоро прибежала и Оля (&amp;ldquo;альпинюги!&amp;rdquo;), заморозила себе палец на ноге: ехала потом в электричке (мама?) отогревала. Но, вроде, всё нормальное уже.&lt;/p&gt;
&lt;p&gt;Подождали последних, завершающих кольцо, девушек, чай, награждения, вручения, поздравления. Пообщался с Надей: заполучила 3е место, 1е и 2е - её подруги Настя (1) и Саша (2, ориентировщица).&lt;/p&gt;
&lt;p&gt;Вовка (с кем Квазик ехал на машине) подбросил на машине до станции, там отогревались в магазине, из которого нас любезно не выгоняла продавщица, даже спрашивала что где как, когда искали куда выбросить мусор, предложила ведро, в общем - хорошим людям вива!&lt;/p&gt;
&lt;p&gt;Время электрички, подходим на перрон, а там Надю с подругами, уже, как и обещали - довезли, залезли в один вагон, ехали, болтали, уничтожали запасы провизии, взятых с собой (самый ништяк, это блинчики, лайт версия, со сгущенкой :)) Так и добрались до Угольной, где я и покинул эту теплую компанию.&lt;/p&gt;
&lt;h2 id=&#34;зимняя-коврижка&#34;&gt;Зимняя Коврижка&lt;/h2&gt;
&lt;p&gt;&amp;lt;WRAP center round box 80%&amp;gt;
&lt;strong&gt;Краткий исторический очерк&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Остров Скребцова, в народе - Коврижка, небольшой островок в Амурском заливе, километрах в 2х от берега. Назван в 1863 году в честь М.Л.Скребцова, учавствовавшего в гидрографических исследованиях залива Петра Великого. В 1890 на острове был лагерный пункт для Сахалинских каторжников, отправляемых в приморье для ударной работы, но вскоре был ликвидирован, как экономически не выгодный и транспортно неудобный. Во время ВОВ на острове были огороды (думаю правда что один большой). В 1961 в ходе раскопок на острове были найдены следы стоянки древних людей. Сейчас остров необитаем, кроме забегающих туристов. Коренное население: два дерева, геодезический пункт и мыши-полевки (весь островок изрезан ихними ходами).
&lt;/WRAP&gt;&lt;/p&gt;
&lt;p&gt;Сагитировала Надя Юрова, кто-то собирался ещё идти, но в результате стойких оказалось двое (плюс один дезинформированный&amp;hellip; каюсь, Чайки во Владивостоке две).&lt;/p&gt;
&lt;p&gt;В рюкзачках термос, бутерброды. Протопали по льду минут за 30-40 от Чайки и были уже на островке. Фотоаппарат забыл.&lt;/p&gt;
&lt;p&gt;Погода теплая. С островка симпатичный вид на Владивосток со стороны: весь укутан в синей дымке выхлопов и влажности.&lt;/p&gt;
&lt;p&gt;В яме на острове оставили рюкзачки, разложили бутерброды, достали термосы. Поднялись на насыпь&amp;hellip; Тут, отхлебывая чай, краем глаза замечаю первого коренного жителя острова - полевка, шухерно, но верно продвигается к нашим бутербродам, а за ней и вторая показалась. Э неееет! Без проса есть нельзя! Спускаемся, рюкзаки оставшиеся внизу забираем, мышам оставляем бутерброд.&lt;/p&gt;
&lt;p&gt;Потом забавно: отхлебываешь чай - мышь пробегает. Я уж было подумал - что же я такого там заварил? :) Но в скором времени сыр был, как им казалось, сворован и утащен в нору. Ещё немного постояли и отправились обратно на электричку.&lt;/p&gt;
&lt;p&gt;А &amp;ldquo;пингвинов&amp;rdquo; в заливе&amp;hellip; тьма тараканья!&lt;/p&gt;
&lt;h2 id=&#34;в-январе-в-тайгу-что-бы-принять-ванну&#34;&gt;В январе, в тайгу, что бы принять ванну!?&lt;/h2&gt;
&lt;p&gt;Да-да-да, именно так :) Это мы на прошедших выходных сгоняли на термальные источники на ключе Горячий, что в Лозовском районе, нашего родного приморья.&lt;/p&gt;
&lt;p&gt;Предыстория: Зелёному нужно по работе в Лазо, в радиусе 20км он может сделать заброску. В среду, в клубе, по принципу: один сказал, остальные не возражали, выбрали конечной целью - термальный источник. Назначили завпродом, начпоха, распределили кому тащить палатку, кому печку для неё, пилы и т.п., прикинули меню и раскладку. Прозевал электричку, остался ночевать в клубе, как и Олеся.&lt;/p&gt;
&lt;p&gt;В общем, опять суббота, договорились, что меня подберут на Подгородинке в 7.20 (получилось позже, но замерзнуть не успел). В машине старые и новые лица (помимо тех, что планировались изначально): Саня Коломеец с Зелёным едет по делам, с нами - Настя (ориентировщица, как сказал Квазик: &amp;ldquo;Её беречь! Она в будет в моей команде на Ковалеровской!&amp;rdquo;). В районе Арем-ГРЭС тем же образом подбираем Олесю и двигаем дальше, до следующей, главной цели: ШПЦ (Шкотовский Пирожковый Центр), дабы восполнить потраченные калории на ржач в машине.&lt;/p&gt;
&lt;p&gt;Но вот, ШПЦ оставлен позади, наглому барбосу скормлена соска в тесте, едем, болтаем, смеёмся. Так и миновали Новую Москву, перевал Серебряный, Сергеевку, Монакино, Лазовский перевал, Лазо, Беневское и&amp;hellip; вот посёлок Свободный: десантируемся, рюкзаки, как обычно, с мерзким хихиканием запрыгивают нам на спины, идём&amp;hellip; По дороге, переодеваясь (снял куртку), чуть не оставил какому-то счастливцу в подарок фотоаппарат, пришлось немножко пробежаться за ним и обратно.&lt;/p&gt;
&lt;p&gt;До места дошли быстро, ориентиры (проталины на снегу) не подвели, плюс, к ключу первая же дорога, что идет на подъем и ведёт. Жилое помещение уже занято, поздоровались, решили поставить свою палатку в одной из соседних комнат, где пол почище. Оставили ставящих, отправились за дровами. Зелёный пугал, что всё вокруг выпилено, сушняка нет - сушняк есть, много, если правильный подход найти :)&lt;/p&gt;
&lt;p&gt;Нарубали дров, Квазик нашёл шикарную сушнину, одной которой хватило на всю ночь топления перчки, да ещё и в подарок местным оставили (дрова, к слову сказать, горели как порох, печка почти всегда была алая, и в палатке было чертовски комфортно).&lt;/p&gt;
&lt;p&gt;Я потом помог девчатам раскопать место для костра (для готовки), домыслил костровые прибамбасы, соорудил костерок, ибо жрать уже начинало хотеться.&lt;/p&gt;
&lt;p&gt;Потом скопом и посменно пилили-кололи-таскали дрова для печки. Саня всё твердил, что мало, но на постой дров оказалось больше, чем на Новый год, на две ночи! =-) Правда, как выше писал, и горели они как порох.&lt;/p&gt;
&lt;p&gt;Интересно получилось с едой: завтрак, обед и ужин у нас сместились к вечеру и слились воедино: каши быстро-заваривающиеся, пельмени, суп горбуше-сайровый. Сил на последний у меня не хватило :)&lt;/p&gt;
&lt;p&gt;В ванну в первый день залезла только Олеся.&lt;/p&gt;
&lt;p&gt;Но вот и отбой (около 22.40). Вызвался дежурить первым (остальные в порядке лежки по местам). Глаза крайне стремились сомкнуться, но печку держал в полной боевой. Потихоньку заправлялся чаем.&lt;/p&gt;
&lt;p&gt;Пока дежурил стал свидетелем забавной сонной ситуации: Саня заливается храпом, рядом Олеся спит. Тут он поворачивается к ней, и так, ласково начинает ей нахрапывать на ушко. Ну, она явно такого не выдержала и таки пнула его в бок. Квазик, как истинный боец сразу подрывается с вопросом мне: &amp;ldquo;А!? Что случилось!?&amp;rdquo;. Пришлось ласковым голосом успокаивать, что всё нормально, просто страшный сон, спи :)&lt;/p&gt;
&lt;p&gt;Около 00.00 разбудил Димку (МРО), забрался в спальник, который, к слову сказать, оказался не тем, кем представлялся: на чехле High Peak и экстрим до -23, а оказался NovaTour model 450 (экстрим -5, комфорт +10). Но, к слову сказать, было не холодно.&lt;/p&gt;
&lt;p&gt;Следующая смена у меня было на утро (7.00). Принял вахту у Сани, расположился. Разогрел и навернул супа, оставшегося с вечера - типа завтрак, немного шлифанул чаем. А у печки тем временем наблюдаю сдувшиеся тюбики от сгущенки, наверное полёвки прокрались и, пока дежурные отвернулись, высосали всё до капли! :laughing:&lt;/p&gt;
&lt;p&gt;По окончании, решил уже не ложиться. Опять сдал вахту Димке (МРО), отправился готовить дрова, и распаливать огонь под ванной. Тем временем Дима (№2) так же покинул палатку, занялся разведением огня для готовки, чистку котлов и заправку оных снегом для растопки. Такое мирное трудовое утро.&lt;/p&gt;
&lt;p&gt;В том же составе приняли банные процедуры&amp;hellip; Это вообще песня: вода сама теплая (27-29 градусов), плюс подогрета (картина: человек сидит в чане, под ним горит костёр&amp;hellip; постановка скоро будет :)), а вокруг елки, снег, тайга! =-) В общем, сплошной и безоговорочный кайф.&lt;/p&gt;
&lt;p&gt;Постепенно и весь лагерь пробудился, все так же прошли через банные процедуры.&lt;/p&gt;
&lt;p&gt;А котлы тем временем всё не хотели закипать, хоть сильно, обильно и усердно парили. Вообще котлы без крышек, особенно зимой - злое зло! Ннно, где наша не пропадала: примерился к одной фанерке - опппа, вот и крышка :) Закипело сразу и мигом. Забабахали борщ &amp;ldquo;Воробей&amp;rdquo;, после перекинули &amp;ldquo;крышку&amp;rdquo; на котелок под чай. С чаем вышло не без приключений: таки не выдержала фанерка: решилась загореться, но мы на неё не в обиде: дело она своё сделала и нам помогла.&lt;/p&gt;
&lt;p&gt;На одном из сеансов связи откликнулся Зелёный: оказывается они уже почти добрались, малость забуксовали, пока спускались на помощь - выбрались. К тому моменту были уже почти все наетые и собранные, для насяльника раскочегарили огонь под ванной с присказкой: Зелёный, давай в ванну, зелени не хватает!&lt;/p&gt;
&lt;p&gt;После был обратный путь&amp;hellip; Анн нет! Есть такое место на дороге, которое моз мозг ввело в смятение: идёт наезженная колея, а тут ба! переходит в ОДНУ! Ну прям как в фильме в &amp;ldquo;Зоне особого внимания&amp;rdquo; (или как-то так):&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Тут, бабушка, танки пройдут&lt;br/&gt;&lt;br/&gt;&lt;/li&gt;
&lt;li&gt;Да как же милок, тут же узко!&lt;br/&gt;&lt;br/&gt;&lt;/li&gt;
&lt;li&gt;Да это новые, на одно гусенице!&lt;br/&gt;&lt;br/&gt;&lt;/li&gt;
&lt;li&gt;До чего же техника дошла&amp;hellip;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;В этом месте нужно было откренивать машину. Зелёный сказал откуда цепляться, я потопал с Саней на это место&amp;hellip; Вот только, как оказалось, останавливаться он при этом не собирался. Саня с криком &amp;ldquo;На абордаж!&amp;rdquo; пригнул и зацепился, но я, глядя как опасно машина при этом отклонилась по направлению к опрокидыванию, не решился последовать его примеру&amp;hellip; А то, дрова есть, ещё бы ночевали =-)&lt;/p&gt;
&lt;p&gt;А вот уже дальше уже был обратный путь, легкая грусть на сердце и слипающиеся глаза. А сегодня что-то руки отваливаются, от всех эти дровозаготовительных работ =-)&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>JAAS in Action</title>
      <link>https://htrd.su/blog/2011/01/25/2011-01-25_22.20_jaas_in_action/</link>
      <pubDate>Tue, 25 Jan 2011 22:20:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/01/25/2011-01-25_22.20_jaas_in_action/</guid>
      <description>&lt;p&gt;Довелось повозиться с JAAS, для организации управления доступом внутри XML-RPC сервиса (реализованного в виде сервлета, крутящегося внутри Tomcat). В результате поиска хорошей, систематизированной информации, наткнулся на книжку: &lt;strong&gt;JAAS in Action&lt;/strong&gt; (
&lt;a href=&#34;http://jaasbook.wordpress.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://jaasbook.wordpress.com/&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Книжка доступна для свободного скачивания в формате PDF, лицензия - CC.&lt;/p&gt;
&lt;p&gt;Как результат, я её крайне &lt;strong&gt;рекомендую&lt;/strong&gt;: содержит всё необходимое для вникание в работу с JAAS, содержит практические примеры, среди которых, к примеру, использование нескольких Policy-источников, показаны примеры для хранения настроек JAAS, аутентификационной (имя пользователь и пароль, группы пользователя) и авторизационной (политики, разрешения) информации в базе (легко разворачивается до использования других хранилищ, к примеру - LDAP). Язык английский, но читается крайне легко.&lt;/p&gt;
&lt;p&gt;Другие ссылки, касательно JAAS, можно поглядеть 
&lt;a href=&#34;https://htrd.su/j2ee/jaas/&#34;&gt;тут&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;P.S. эпопею с сервлетом и авторизацией, я ещё опубликую, как только полностью закончу.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Ejabberd и LDAP</title>
      <link>https://htrd.su/blog/2011/01/19/2011-01-19_10.48_ejabberd_i_ldap/</link>
      <pubDate>Wed, 19 Jan 2011 10:48:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/01/19/2011-01-19_10.48_ejabberd_i_ldap/</guid>
      <description>&lt;p&gt;На правах закладки: 
&lt;a href=&#34;http://www.mail-archive.com/sysadmins@lists.altlinux.org/msg13920.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;ejabberd - группы из LDAP на о снове OU&lt;/a&gt; - пример реализации. Но без документации даже не начинать читать. Модуль mod_shared_roster_ldap появился только в комплекте ejabberd 2.1.6, если версия младше, как, например, в Debian Squeeze (2.1.5), то качать отсюда: 
&lt;a href=&#34;https://alioth.debian.org/projects/ejabberd-msrl&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://alioth.debian.org/projects/ejabberd-msrl&lt;/a&gt;, читать документацию, компилять и настраивать.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Новый год на Туманной</title>
      <link>https://htrd.su/blog/2011/01/16/2011-01-16_00.06_novyj_god_na_tumannoj/</link>
      <pubDate>Sun, 16 Jan 2011 00:06:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/01/16/2011-01-16_00.06_novyj_god_na_tumannoj/</guid>
      <description>&lt;p&gt;Отчёт от Олеси aka Рыжей: 
&lt;a href=&#34;http://turizm.primkray.ru/index.php?id=365&amp;amp;doc=k_podnozhiiu_vorobia&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://turizm.primkray.ru/index.php?id=365&amp;doc=k_podnozhiiu_vorobia&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;PS форма изложения - доставляёт, стилизовано под реальный туристический отчёт :)&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Новый программерский жаргон</title>
      <link>https://htrd.su/blog/2011/01/14/2011-01-14_09.58_novyj_programmerskij_zhargon/</link>
      <pubDate>Fri, 14 Jan 2011 09:58:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/01/14/2011-01-14_09.58_novyj_programmerskij_zhargon/</guid>
      <description>&lt;p&gt;Запостил камрад &lt;a href=&#34;http://juick.com/AlexVK&#34; target=&#34;_blank&#34;&gt;AlexVK&lt;/a&gt;
 (&lt;a href=&#34;http://juick.com/1161371&#34; target=&#34;_blank&#34;&gt;1161371&lt;/a&gt;
):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Программистский жаргон. Раз: 
&lt;a href=&#34;http://habrahabr.ru/blogs/habraquotes/111432/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://habrahabr.ru/blogs/habraquotes/111432/&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;
И далее, по ссылке два 
&lt;a href=&#34;http://habrahabr.ru/blogs/development/96978/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://habrahabr.ru/blogs/development/96978/&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;
И первоисточник три 
&lt;a href=&#34;http://stackoverflow.com/questions/2349378/new-programming-jargon-you-coined&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://stackoverflow.com/questions/2349378/new-programming-jargon-you-coined&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;</description>
    </item>
    
    <item>
      <title>Epoch &amp; Unix Timestamp Conversion Tools</title>
      <link>https://htrd.su/blog/2011/01/11/2011-01-11_10.07_epoch_unix_timestamp_conversion_tools/</link>
      <pubDate>Tue, 11 Jan 2011 10:07:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/01/11/2011-01-11_10.07_epoch_unix_timestamp_conversion_tools/</guid>
      <description>&lt;p&gt;Epoch &amp;amp; Unix Timestamp Conversion Tools: 
&lt;a href=&#34;http://www.epochconverter.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.epochconverter.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;удобно и быстро, когда нужно прикинуть.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Генератор анимационных индикаторов ожидания</title>
      <link>https://htrd.su/blog/2011/01/11/2011-01-11_09.25_generator_animacionnyx_indikatorov_ozhidanija/</link>
      <pubDate>Tue, 11 Jan 2011 09:25:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2011/01/11/2011-01-11_09.25_generator_animacionnyx_indikatorov_ozhidanija/</guid>
      <description>&lt;p&gt;Для всякого непотребства, свазанного с ожиданием:&lt;br/&gt;&lt;br/&gt;

&lt;a href=&#34;http://ajaxload.info/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://ajaxload.info/&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Astxx: action для команды QueueStatus (&#43;пример)</title>
      <link>https://htrd.su/blog/2010/12/30/2010-12-30_10.13_astxx_action_dlja_komandy_queuestatus/</link>
      <pubDate>Thu, 30 Dec 2010 10:13:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/12/30/2010-12-30_10.13_astxx_action_dlja_komandy_queuestatus/</guid>
      <description>&lt;p&gt;Логическое продолжение для 
&lt;a href=&#34;https://htrd.su/blog/2010/12/25/2010-12-25_17.43_astxx_action_dlja_komandy_queuepause/&#34;&gt;этой статьи&lt;/a&gt;, команда для получения состояния очереди.&lt;/p&gt;
&lt;p&gt;Подкатом реализация и пример использования команд QueuePause и QueueStatus, какие эвенты получаются смотрите в документации((
&lt;a href=&#34;http://voip.rus.net/tiki-index.php?page=Asterisk&amp;#43;Manager&amp;#43;API&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;тут&lt;/a&gt; или 
&lt;a href=&#34;http://astbook.asteriskdocs.org/en/2nd_Edition/asterisk-book-html-chunk/asterisk-APP-F.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;тут&lt;/a&gt;, вторая ссылка более полная, но на буржуйском, хотя кого это пугает? :wink:))&lt;/p&gt;
&lt;h2 id=&#34;реализацяи-queuestatus&#34;&gt;Реализацяи QueueStatus&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;/* 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * Additonal actions for Astxx
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * Copyright (C) 2010  Alexander Drozdov &amp;lt;hatred@inbox.ru&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * This library is free software; you can redistribute it and/or
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * modify it under the terms of the GNU Lesser General Public
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * License version 2.1 as published by the Free Software Foundation.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * This library is distributed in the hope that it will be useful,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * but WITHOUT ANY WARRANTY; without even the implied warranty of
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * Lesser General Public License for more details.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * You should have received a copy of the GNU Lesser General Public
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * License along with this library; if not, write to the Free Software
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;/** @file
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; *
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * Include this file to use the QueueStatus action. You should include it by hands.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; *
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#ifndef ASTXX_MANAGER_ACTION_QUEUE_STATUS_H
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#define ASTXX_MANAGER_ACTION_QUEUE_STATUS_H
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;astxx/manager/basic_action.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;astxx/manager/message.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;astxx/manager/error.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;astxx&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;manager&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;action&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;cm&#34;&gt;/** Ask Queue Status
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;          */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;queue_status&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;basic_action&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;               &lt;span class=&#34;cm&#34;&gt;/** Construct a QueueStatus action.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;                * @param queue          - concretize queue [optional]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;                * @param member         - select member [optional]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;                * @param action_id      - add optional action Id to all responses [optional]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;                */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;               &lt;span class=&#34;n&#34;&gt;queue_status&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;member&lt;/span&gt;    &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;queue&lt;/span&gt;     &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;action_id&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                &lt;span class=&#34;n&#34;&gt;member&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;member&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                &lt;span class=&#34;n&#34;&gt;queue&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;queue&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                &lt;span class=&#34;n&#34;&gt;action_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;action_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;               &lt;span class=&#34;cm&#34;&gt;/** Format this action as a message::action.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;                * @return this message as a message::action
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;                */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;               &lt;span class=&#34;n&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;action&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;action&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                  &lt;span class=&#34;n&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;action&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;action&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;QueueStatus&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                  &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;queue&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;empty&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                  &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;n&#34;&gt;action&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Queue&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;queue&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                  &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;member&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;empty&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                  &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;n&#34;&gt;action&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Member&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;member&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                  &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;action_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;empty&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                  &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;n&#34;&gt;action&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;ActionID&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;action_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                  &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;action&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;               &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;private&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;               &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;queue&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;               &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;member&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;               &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;action_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#endif &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// QUEUESTATUS_H
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;пример&#34;&gt;Пример&lt;/h2&gt;
&lt;p&gt;Пример основан на event-test.cc, что идёт вместе с astxx.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;astxx/manager.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;vector&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;string&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;#34;queue_status.h&amp;#34;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;#34;queue_pause.h&amp;#34;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;print_event&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;astxx&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;manager&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;event&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;c1&#34;&gt;//std::cout &amp;lt;&amp;lt; e.format();
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;   &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Paused&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;lt;br/&amp;gt;n&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;argc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;char&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;**&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;argv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;vector&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;argv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;argv&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;argc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cerr&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Usage: &amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34; [host] [username] [secret]&amp;lt;br/&amp;gt;n&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;try&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;manager&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;astxx&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;manager&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;action&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;astxx&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;manager&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;action&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;n&#34;&gt;manager&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;connection&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;connection&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Connected to &amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;connection&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34; v&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;connection&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;endl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;n&#34;&gt;boost&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;signals&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;scoped_connection&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;c1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;connection&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;register_event&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;QueueMember&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;print_event&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;c1&#34;&gt;//boost::signals::scoped_connection c2 = connection.register_event(&amp;#34;Queue&amp;#34;, print_event);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;n&#34;&gt;action&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;login&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;login&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;n&#34;&gt;login&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;connection&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;n&#34;&gt;action&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;queue_pause&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;qpause&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;SIP/3008&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;n&#34;&gt;manager&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;response&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;resp&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;qpause&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;connection&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;resp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;format&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;n&#34;&gt;action&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;queue_status&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;qstatus&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;SIP/3008&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;n&#34;&gt;resp&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;qstatus&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;connection&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;resp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;format&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;n&#34;&gt;action&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;queue_pause&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;qpause2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;SIP/3008&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;n&#34;&gt;resp&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;qpause2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;connection&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;resp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;format&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;n&#34;&gt;action&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;queue_status&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;qstatus2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;SIP/3008&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;n&#34;&gt;resp&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;qstatus2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;connection&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;resp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;format&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(;;)&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;n&#34;&gt;connection&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;wait_event&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;n&#34;&gt;connection&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pump_messages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;n&#34;&gt;connection&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;process_events&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;catch&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;exception&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cerr&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Exception: &amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;what&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;endl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Собственно что тут происходит:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;создаём подключение&lt;/li&gt;
&lt;li&gt;регистрируем обработчик для эвента QueueMember (смотрим токи на AMI)&lt;/li&gt;
&lt;li&gt;логинимся&lt;/li&gt;
&lt;li&gt;ставим мембера в паузу и спрашиваем его состояние&lt;/li&gt;
&lt;li&gt;убираем паузу и опять спрашиваем его состояние&lt;/li&gt;
&lt;li&gt;в цикле обрабатываем приходящие эвенты&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>ArchLinux: geda-gaf в community</title>
      <link>https://htrd.su/blog/2010/12/29/2010-12-29_07.05_archlinux_geda-gaf_v_community/</link>
      <pubDate>Wed, 29 Dec 2010 07:05:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/12/29/2010-12-29_07.05_archlinux_geda-gaf_v_community/</guid>
      <description>&lt;p&gt;Собственно - радость! :)&lt;/p&gt;
&lt;p&gt;Там же теперь и разводчик 
&lt;a href=&#34;http://pcb.gpleda.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;pcb&lt;/a&gt;. Двойная радость!&lt;/p&gt;
&lt;p&gt;К сожалению, утилита 
&lt;a href=&#34;http://aur.archlinux.org/packages.php?ID=17402&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;xgsch2pcb&lt;/a&gt; (менеджер проектов-интегратор gschem и pcb) до community ещё не добралась, но уже не плохо.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Astxx: action для команды QueuePause</title>
      <link>https://htrd.su/blog/2010/12/25/2010-12-25_17.43_astxx_action_dlja_komandy_queuepause/</link>
      <pubDate>Sat, 25 Dec 2010 17:43:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/12/25/2010-12-25_17.43_astxx_action_dlja_komandy_queuepause/</guid>
      <description>&lt;p&gt;Парой слов, что такое 
&lt;a href=&#34;http://matt-land.com/astxx/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Astxx&lt;/a&gt; небольшая библиотечка для работы с Asterisk через 
&lt;a href=&#34;http://voip.rus.net/tiki-index.php?page=Asterisk&amp;#43;Manager&amp;#43;API&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;AMI&lt;/a&gt; протокол из C++. Написана с использование STL и Boost.&lt;/p&gt;
&lt;p&gt;В 
&lt;a href=&#34;https://htrd.su/blog/2010/12/13/2010-12-13_14.38_boost.signals_i_qt4/&#34;&gt;одной из прошлых заметок&lt;/a&gt; упоминал про дружбу Qt4 и Boost.Signal - для дружбы этой библиотечки и Qt4 это и было нужно :)&lt;/p&gt;
&lt;p&gt;Для чего нужна команда, например для организации софтовой DnD кнопки: если интерфейс будет в паузе, из очереди на него не будут переводиться звонки.&lt;/p&gt;
&lt;p&gt;Сами классы подкатом.&lt;/p&gt;
&lt;h1&gt;&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;UPD&lt;/strong&gt; Переоформил в стиле Astxx&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;/* 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * Additonal actions for Astxx
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * Copyright (C) 2010  Alexander Drozdov &amp;lt;hatred@inbox.ru&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * This library is free software; you can redistribute it and/or
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * modify it under the terms of the GNU Lesser General Public
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * License version 2.1 as published by the Free Software Foundation.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * This library is distributed in the hope that it will be useful,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * but WITHOUT ANY WARRANTY; without even the implied warranty of
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * Lesser General Public License for more details.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * You should have received a copy of the GNU Lesser General Public
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * License along with this library; if not, write to the Free Software
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;/** @file
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; *
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * Include this file to use the QueuePause action. You should include it by hands.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; *
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#ifndef QUEUE_PAUSE_H
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#define QUEUE_PAUSE_H
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;astxx/manager/basic_action.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;astxx/manager/message.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;astxx/manager/error.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;vector&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;string&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;astxx&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;manager&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;                                                                                                                                                                                                                                        
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;action&lt;/span&gt;                                                                                                                                                                                                                     
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;                                                                                                                                                                                                                                    
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;cm&#34;&gt;/** Set Queue Pause state                                                                                                                                                                                                        
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;            */&lt;/span&gt;                                                                                                                                                                                                                               
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;queue_pause&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;basic_action&lt;/span&gt;                                                                                                                                                                                          
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;                                                                                                                                                                                                                                
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;                                                                                                                                                                                                                          
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;error&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;manager&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;error&lt;/span&gt;                                                                                                                                                                                          
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;                                                                                                                                                                                                                            
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;                                                                                                                                                                                                                      
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;k&#34;&gt;explicit&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;desc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;throw&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;manager&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;desc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;                                                                                                                                               
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;                                                                                                                                                                                                                           
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                                                                                                                                                                                                                             
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;                                                                                                                                                                                                                          
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;cm&#34;&gt;/** Construct a QueuePause action.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;                * @param interface      - member
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;                * @param is_on          - pause state
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;                * @param queue          - queue for process, if omited - all queues is used
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;                */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;queue_pause&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;interface&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;bool&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;is_on&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;queue&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;n&#34;&gt;_interface&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;interface&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;n&#34;&gt;_queue&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;queue&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;n&#34;&gt;_is_on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;is_on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;               &lt;span class=&#34;cm&#34;&gt;/** Format this action as a message::action.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;                * @return this message as a message::action
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;                */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;action&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;action&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;n&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;action&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;action&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;QueuePause&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_queue&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;empty&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;n&#34;&gt;action&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Queue&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;_queue&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;n&#34;&gt;action&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Interface&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;_interface&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on_off_str&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;false&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_is_on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;n&#34;&gt;on_off_str&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;true&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;n&#34;&gt;action&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Paused&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on_off_str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;action&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;response&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;handle_response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;response&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;n&#34;&gt;basic_action&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;handle_response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Success&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;k&#34;&gt;throw&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;queue_pause&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Message&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;private&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;_interface&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;std&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;_queue&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;kt&#34;&gt;bool&lt;/span&gt;        &lt;span class=&#34;n&#34;&gt;_is_on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#endif &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// QUEUE_PAUSE_H
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Qt4: поместить окно на все рабочие столы</title>
      <link>https://htrd.su/blog/2010/12/25/2010-12-25_17.15_qt4_pomestit_okno_na_vse_rabochie_stoly/</link>
      <pubDate>Sat, 25 Dec 2010 17:15:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/12/25/2010-12-25_17.15_qt4_pomestit_okno_na_vse_rabochie_stoly/</guid>
      <description>&lt;p&gt;Встроенного функционала нет, для X11 можно записпользовать такой код (юзается XLib):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#ifdef Q_WS_X11
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#  include &amp;lt;X11/Xlib.h&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#  include &amp;lt;X11/Xatom.h&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#endif
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nf&#34;&gt;toAllDesktops&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#ifdef Q_WS_X11
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;n&#34;&gt;Atom&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;atom&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;XInternAtom&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;x11Info&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;().&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;_NET_WM_DESKTOP&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;atom&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kt&#34;&gt;uint32_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;0xFFFFFFFF&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nf&#34;&gt;XChangeProperty&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;x11Info&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;().&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt;                &lt;span class=&#34;c1&#34;&gt;// Display
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;                        &lt;span class=&#34;nf&#34;&gt;winId&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt;                            &lt;span class=&#34;c1&#34;&gt;// Window
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;                        &lt;span class=&#34;n&#34;&gt;atom&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;                               &lt;span class=&#34;c1&#34;&gt;// Property
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;                        &lt;span class=&#34;n&#34;&gt;XA_CARDINAL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;                        &lt;span class=&#34;c1&#34;&gt;// Property type
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;                        &lt;span class=&#34;mi&#34;&gt;32&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;                                 &lt;span class=&#34;c1&#34;&gt;// Data format: 8, 16 or 32 bit
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;                        &lt;span class=&#34;n&#34;&gt;PropModeReplace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;                    &lt;span class=&#34;c1&#34;&gt;// Property change mode
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;                        &lt;span class=&#34;n&#34;&gt;reinterpret_cast&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;uint8_t&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;// Property data
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;                        &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;                                 &lt;span class=&#34;c1&#34;&gt;// Data elements count
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#endif
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;тут предполагается, что эта функцейка будет медотом класса окна, иначе нужно будет передавать Display и Window. Специальное значение 0xFFFFFFFF как раз и говорит - разместить на всех рабочих столах, иначе воспринимается как номер стола, куда нужно поместить окно. В случае Windows этот функционал бесмесленен, поэтому портабельность не сильно пострадает, при использовании директив препроцессора.&lt;/p&gt;
&lt;p&gt;Подробности:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.linux.org.ru/wiki/en/NETWM&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;NETWM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://standards.freedesktop.org/wm-spec/1.3/ar01s05.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Application Window Properties&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>Boost.Signals и Qt4</title>
      <link>https://htrd.su/blog/2010/12/13/2010-12-13_14.38_boost.signals_i_qt4/</link>
      <pubDate>Mon, 13 Dec 2010 14:38:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/12/13/2010-12-13_14.38_boost.signals_i_qt4/</guid>
      <description>&lt;p&gt;Использую библиотечку astxx, которая использует Boost.Signals, использую в программе на Qt, сразу словил ошибку компиляции:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;m64&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pipe&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Wall&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;W&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D_REENTRANT&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DQT_CORE_LIB&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DQT_SHARED&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;I&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;share&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;qt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mkspecs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;linux&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;64&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;I&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;../&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;queue&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;test&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;I&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;include&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;QtCore&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;I&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;include&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;I&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;I&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;../&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;queue&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;test&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;I&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;o&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;o&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;../&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;queue&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;test&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cpp&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;included&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;include&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;boost&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;signals&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;connection&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hpp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;13&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                 &lt;span class=&#34;n&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;include&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;boost&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;signals&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;signal_template&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hpp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                 &lt;span class=&#34;n&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;include&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;boost&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;signals&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;signal0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hpp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;24&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                 &lt;span class=&#34;n&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;include&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;boost&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;signal&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hpp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;19&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                 &lt;span class=&#34;n&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;include&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;astxx&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;manager&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;connection&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;h&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;40&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                 &lt;span class=&#34;n&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;include&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;astxx&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;manager&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;h&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;32&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                 &lt;span class=&#34;n&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;../&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;queue&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;test&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cpp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;include&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;boost&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;signals&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;detail&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;signals_common&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hpp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;26&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;13&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;expected&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;identifier&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;before&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;‘&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;protected&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;’&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;include&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;boost&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;signals&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;detail&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;signals_common&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hpp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;26&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;13&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;expected&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;unqualified&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;id&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;before&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;‘&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;protected&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;’&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;../&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;queue&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;test&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cpp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;75&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;expected&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;‘&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;’&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;at&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;end&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;of&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;make&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;***&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;o&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Error&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Описания способов решения нашел тут:&lt;br/&gt;&lt;br/&gt;

&lt;a href=&#34;http://www.boost.org/doc/libs/1_45_0/doc/html/signals/s04.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.boost.org/doc/libs/1_45_0/doc/html/signals/s04.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;del&gt;Пока же, временно, определил макрос:&lt;/del&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#define BOOST_SIGNALS_NAMESPACE boost_signals
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;em&gt;Upd:&lt;/em&gt;&lt;br/&gt;&lt;br/&gt;
В .pro файле добавил:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;CONFIG += no_keywords
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;После чего такие конструкции перестанут компилироваться:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;signals&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;private&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;slots&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;slots&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Заменить на:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Q_SIGNALS:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;private Q_SLOTS:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;public Q_SLOTS:
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Немного разного про Git</title>
      <link>https://htrd.su/blog/2010/12/08/2010-12-08_19.02_nemnogo_raznogo_pro_git/</link>
      <pubDate>Wed, 08 Dec 2010 19:02:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/12/08/2010-12-08_19.02_nemnogo_raznogo_pro_git/</guid>
      <description>&lt;p&gt;Несколько вопросов про Git внутри компании, такие как:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;миграция с mercurial (hg)&lt;/li&gt;
&lt;li&gt;организация совместного доступа, управление правами&lt;/li&gt;
&lt;li&gt;прикручивание к redmine&lt;/li&gt;
&lt;li&gt;организация анонимного ReadOnly доступа к отдельным репозиториям&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;миграция-с-mercurial&#34;&gt;Миграция с Mercurial&lt;/h2&gt;
&lt;p&gt;Тут не буду вдаваться в особые подробности, воспользовался этой статьёй: 
&lt;a href=&#34;http://hedonismbot.wordpress.com/2008/10/16/hg-fast-export-convert-mercurial-repositories-to-git-repositories/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://hedonismbot.wordpress.com/2008/10/16/hg-fast-export-convert-mercurial-repositories-to-git-repositories/&lt;/a&gt;, отработало, историю правок сохранила. Единственно, на ArchLinux пришлось пробежаться и заменить вызовы python на python2.&lt;/p&gt;
&lt;h2 id=&#34;организация-совместного-доступа&#34;&gt;Организация совместного доступа&lt;/h2&gt;
&lt;p&gt;Вот тут интереснее, можно это делать на основе пользователей и групп в системе, но мне захотелось что бы был один аккаунт и там уже разруливалось кому что и где можно.&lt;/p&gt;
&lt;p&gt;Нашел статью: 
&lt;a href=&#34;http://scie.nti.st/2007/11/14/hosting-git-repositories-the-easy-and-secure-way&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://scie.nti.st/2007/11/14/hosting-git-repositories-the-easy-and-secure-way&lt;/a&gt;. Где собственно описывается решение на основе 
&lt;a href=&#34;http://eagain.net/gitweb/?p=gitosis.git&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;gitosis&lt;/a&gt;. Можно на просторах рунета найти перевод этой статьи на русский.&lt;/p&gt;
&lt;p&gt;Из всего, что хотелось бы добавить: пользователей нужно в конфиге указывать как USER@HOST, иначе получите великий отлуп. Я на этом обжёгся. Решение мне не очень нравится, поэтому попробую раскурить как обойтись просто указанием USER.&lt;/p&gt;
&lt;p&gt;Ну и как справка, сгенерировать ключик:
ssh-keygen -f .ssh/$USER@$HOSTNAME&lt;/p&gt;
&lt;p&gt;pub-часть отдать админу, что бы залил (кстати, так же через git) и прописал права. Private часть прописать для хоста с git, как - man ssh_config&lt;/p&gt;
&lt;h2 id=&#34;прикручивание-к-redmine&#34;&gt;Прикручивание к redmine&lt;/h2&gt;
&lt;p&gt;По умолчанию (у нас сервер с Debian) http сервер запущен с указанием группы www-data, тогда как репозитории git доступны на чтение/запись пользователю git и на чтение группе git. Вариант - добавить пользователя www-data в группу git, но не очень гибко. Я сделал следующим образом.&lt;/p&gt;
&lt;p&gt;В корень домашней директории (/home/git) поместил следующий скрипт:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#!/bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; /home/git
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt; .web-access.conf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; repositories
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 1. pass&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chown &lt;span class=&#34;nv&#34;&gt;$git_user&lt;/span&gt;:&lt;span class=&#34;nv&#34;&gt;$git_group&lt;/span&gt; *
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 2. pass&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; repo in &lt;span class=&#34;nv&#34;&gt;$repos&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  chown &lt;span class=&#34;nv&#34;&gt;$git_user&lt;/span&gt;:&lt;span class=&#34;nv&#34;&gt;$web_group&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$repo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;В /etc/sudoers добавил следующую строчку:
git   ALL=NOPASSWD: /home/git/allow-web-access.sh&lt;/p&gt;
&lt;p&gt;В хук /home/git/repositories/gitosis-admin.git/hooks/post-update добавил следующую строчку:
sudo -u root /home/git/allow-web-access.sh&lt;/p&gt;
&lt;p&gt;Сделал симлинк:
ln -s /home/git/repositories/gitosis-admin.git/gitosis-export/web-access.conf /home/git/.web-access.conf&lt;/p&gt;
&lt;p&gt;Создал в рабочей копии конфигурации гитозиса файл:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;repos&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;repo1.git repo2.git&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;git_user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;git&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;git_group&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;git&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;web_group&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;www-data&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;в repos указываются репозитории к которым разрешён доступ web-серверу. После чего, как обычно:
git commit -a
git push&lt;/p&gt;
&lt;p&gt;Все нужные действия выполнятся автоматом.&lt;/p&gt;
&lt;p&gt;В самом redmine указываем полные пути к репозиториям, типа:
/home/git/repositories/repo1.git&lt;/p&gt;
&lt;h2 id=&#34;анонимный-readonly-доступ-к-некоторым-репозиториям&#34;&gt;Анонимный ReadOnly доступ к некоторым репозиториям&lt;/h2&gt;
&lt;p&gt;В статье про гитозис про это есть, там правда использована опция &lt;code&gt;--export-all&lt;/code&gt;, убираем её. Внутри директории репы, к которой нужен анонимный доступ, делаем файл git-daemon-export-ok:
touch git-daemon-export-ok&lt;/p&gt;
&lt;p&gt;На будущее - автоматизировать эту операцию через конфигурацию гитозиса.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Java Enums</title>
      <link>https://htrd.su/blog/2010/12/02/2010-12-02_11.47_java_enums/</link>
      <pubDate>Thu, 02 Dec 2010 11:47:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/12/02/2010-12-02_11.47_java_enums/</guid>
      <description>&lt;p&gt;Для тех случаев когда &lt;code&gt;enum&lt;/code&gt; нету, к примеру, при использовании BeanShell:&lt;br/&gt;&lt;br/&gt;

&lt;a href=&#34;http://alumnus.caltech.edu/~leif/OO/Enum.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://alumnus.caltech.edu/~leif/OO/Enum.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Подкатом небольшое дополнение и пример.&lt;/p&gt;
&lt;h1&gt;&lt;/h1&gt;
&lt;p&gt;Небольшая ремарка, для BeanShell придется разносить класс и сами создания констант, к примеру так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// Не обязательно&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;java.util.ArrayList&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;java.util.Collection&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;java.util.Iterator&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;cm&#34;&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; Хранит описание одной записи в дополнительных действиях, а так же собирает их в перечисление
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; дабы можно было использовать интерфейс коллекций для перебора при формировании списка
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;*/&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;AdditionalActionId&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;private&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;static&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Collection&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;all_ids&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ArrayList&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;private&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;private&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;description&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;cm&#34;&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;     Конструктор, принимает ID дополнительного действия и описание (что будет в меню отображаться)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;    */&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;AdditionalActionId&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;description&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;description&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;description&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;all_ids&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;add&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;cm&#34;&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;     Возвращает Id действия
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;    */&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;toInt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;cm&#34;&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;     Возвращает описание действия
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;    */&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;toString&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;description&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;cm&#34;&gt;/**********************************************************************************************/&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;cm&#34;&gt;/* Statics methods (class wide methods) ------------------------------------------------------*/&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;cm&#34;&gt;/**********************************************************************************************/&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;cm&#34;&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;     Получаем итератор для перебора всех ранее созданных действий
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;    */&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;static&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Iterator&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;getIterator&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;all_ids&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;iterator&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;cm&#34;&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;     Получаем количество дополнительных действий
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;    */&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;static&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;getSize&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;all_ids&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;cm&#34;&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; Класс-обертка, для реализации некоторого подобия Enum (который не работает в BeanShell)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;*/&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;AdditionalActionIds&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;private&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;static&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;action&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// Перечисляем наши действия&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//public static final AdditionalActionId TARIFF_ADD_COMMON1 = new AdditionalActionId(action++, &amp;#34;TEST&amp;#34;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//public static final AdditionalActionId TARIFF_ADD_COMMON2 = new AdditionalActionId(action++, &amp;#34;TEST&amp;#34;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//public static final AdditionalActionId TARIFF_ADD_COMMON3 = new AdditionalActionId(action++, &amp;#34;TEST&amp;#34;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//public static final AdditionalActionId TARIFF_ADD_COMMON4 = new AdditionalActionId(action++, &amp;#34;TEST&amp;#34;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// Must be LAST&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;static&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;final&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;AdditionalActionId&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ABON_RECALC_ALL&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;AdditionalActionId&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;1000000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Дополнительное действие&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// Пример перебора всех значений&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;cm&#34;&gt;/*Iterator it = AdditionalActionId.getIterator();
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;while (it.hasNext())
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;    action = (AdditionalActionId)it.next();
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;    print(&amp;#34;ID: &amp;#34; + action.toInt() + &amp;#34;, desc: &amp;#34; + action.toString());
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;*/&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// Пример обращения к конкретному элементу&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;cm&#34;&gt;/*AdditionalActionId action = AdditionalActionIds.TARIFF_ADD_COMMON3;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;print(&amp;#34;ID: &amp;#34; + action.toInt() + &amp;#34;, desc: &amp;#34; + action.toString());*/&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Иначе имеем проблемы. Не знаю, бага или фича, но факт.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Шрифты для кода</title>
      <link>https://htrd.su/blog/2010/11/27/2010-11-27_13.25_shrifty_dlja_koda/</link>
      <pubDate>Sat, 27 Nov 2010 13:25:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/11/27/2010-11-27_13.25_shrifty_dlja_koda/</guid>
      <description>&lt;p&gt;Хороший шрифт, который не ломает глаза, не вносит неоднозначности (банальная проверка на визуальную отличимость &lt;code&gt;O&lt;/code&gt; от &lt;code&gt;0&lt;/code&gt; (тут, к примеру, многими любимый Droid сливает), &lt;code&gt;1&lt;/code&gt; от &lt;code&gt;I&lt;/code&gt; и от &lt;code&gt;l&lt;/code&gt; (единица/i-большая/L-маленькая), &lt;code&gt;5&lt;/code&gt; от &lt;code&gt;S&lt;/code&gt;, по крайней мере это первое, на что я внимание обращаю) бережёт нервы и зрение при правке и чтении/анализе кода.&lt;/p&gt;
&lt;p&gt;В Linux неплохим выбором будут шрифты &lt;strong&gt;Bitstream Vera Sans Mono&lt;/strong&gt;  или &lt;strong&gt;DejaVu Sans Mono&lt;/strong&gt;&lt;del&gt;, тем более, что в моём любимом ArchLinux они есть в репозитории extra&lt;/del&gt;. Но не всем они подходят, или иногда хочется чего-то новенького :)&lt;/p&gt;
&lt;p&gt;В общем, конкретики давать не буду, дам ссылочки, по которым стоит посмотреть и подобрать себе подходящий (ещё ссылки приветствуются, в т.ч. и на отдельные шрифты, которые, по вашему мнению, удобны для кода).&lt;/p&gt;
&lt;p&gt;Напомню, что в Linux TTF шрифты достаточно поместить в каталог &lt;strong&gt;~/.fonts/&lt;/strong&gt; и выполнить команду &lt;strong&gt;fc-cache&lt;/strong&gt; в терминале (не от root&amp;rsquo;а)&lt;/p&gt;
&lt;p&gt;Итак, коллекции конкретно программерских шрифтов:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;a href=&#34;https://github.com/chrissimpkins/codeface&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/chrissimpkins/codeface&lt;/a&gt; - богатая коллекция + каталог шрифтов для кода. Естественно доступны все инструменты гитхаба, типа форкнуть, подправить и подать свой мерж-реквест (ссылку подкинули в одном из обсуждений на просторах рунета).&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.lowing.org/fonts/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.lowing.org/fonts/&lt;/a&gt; - Monospace/Fixed Width Programmer&amp;rsquo;s Fonts&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.proggyfonts.net/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.proggyfonts.net/&lt;/a&gt; - Monospaced Bitmap Programming Fonts (альтернативные ссылки: 
&lt;a href=&#34;http://en.wikipedia.org/wiki/Proggy_programming_fonts&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;раз&lt;/a&gt;, 
&lt;a href=&#34;http://web.archive.org/web/20130728163056/http://www.proggyfonts.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;два&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;del&gt;
&lt;a href=&#34;http://keithdevens.com/wiki/ProgrammerFonts&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://keithdevens.com/wiki/ProgrammerFonts&lt;/a&gt;&lt;/del&gt; - Programming Fonts. Ссылка мертва, в веб-архиве: 
&lt;a href=&#34;http://web.archive.org/web/20130121081638/http://keithdevens.com/wiki/ProgrammerFonts&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://web.archive.org/web/20130121081638/http://keithdevens.com/wiki/ProgrammerFonts&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Отдельные шрифты:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Inconsolata&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://levien.com/type/myfonts/inconsolata.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://levien.com/type/myfonts/inconsolata.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;шрифт, как заявлено, для нормального отображения как на экране, так и на печати, схож с &lt;strong&gt;TheSansMono&lt;/strong&gt; (в общем смотрите на сайте)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Inconsolata LGC&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://github.com/DeLaGuardo/Inconsolata-LGC&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/DeLaGuardo/Inconsolata-LGC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Добавлена поддержка кириллицы&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Anonymous Pro&lt;/strong&gt; и &lt;strong&gt;Anonymous&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.ms-studio.com/FontSales/anonymouspro.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.ms-studio.com/FontSales/anonymouspro.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.ms-studio.com/FontSales/anonymous.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.ms-studio.com/FontSales/anonymous.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;download here: 
&lt;a href=&#34;https://htrd.su/img/post/2010-11-27_13.25_shrifty_dlja_koda/anonymouspro-1.002.zip&#34;&gt;Anonymous Pro&lt;/a&gt;, 
&lt;a href=&#34;https://htrd.su/img/post/2010-11-27_13.25_shrifty_dlja_koda/anonymousprominus-1.002.zip&#34;&gt;Anonymous Pro Minus&lt;/a&gt; (without embedded bitmaps for small sizes)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Monaco&lt;/strong&gt; с русскими глифами
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.gringod.com/wp-upload/software/Fonts/Monaco_5.1.ttf&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.gringod.com/wp-upload/software/Fonts/Monaco_5.1.ttf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://htrd.su/img/post/2010-11-27_13.25_shrifty_dlja_koda/monaco_5.1.ttf&#34;&gt;Monaco 5.1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Anka/Coder&lt;/strong&gt;, автор русский, можно пожелания на родном языке писать, шрифт нуждается в доводке, хорошее отображение удалось получить только в Linux (в первую очередь ориентирован на печать)
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://code.google.com/p/anka-coder-fonts/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://code.google.com/p/anka-coder-fonts/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Meslo LG&lt;/strong&gt; (кириллица есть)
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://github.com/andreberg/Meslo-Font&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/andreberg/Meslo-Font&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://vstarkov.ru/meslo/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://vstarkov.ru/meslo/&lt;/a&gt; - неплохой обзор&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fira Sans&lt;/strong&gt;, включая &lt;strong&gt;Fira Mono&lt;/strong&gt; (кириллица есть)
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.carrois.com/fira-3-1/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.carrois.com/fira-3-1/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;понравился своей большей жирностью, ноль с точкой;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hack&lt;/strong&gt; (кириллица есть, ноль с вертикальной чертой)
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://github.com/chrissimpkins/Hack&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/chrissimpkins/Hack&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;[-]&lt;/strong&gt; - символы справа от знака подчёркивания &amp;ldquo;висят&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Input Mono&lt;/strong&gt; (посоветовали в комментах)
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://input.fontbureau.com/preview/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://input.fontbureau.com/preview/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://habrahabr.ru/post/237179/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://habrahabr.ru/post/237179/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Можно подстроить отдельные символы под себя, но как-то не зацепил.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ну а кому нужны шрифты с программерскими лигатурами (составные символы типа &lt;code&gt;==&lt;/code&gt;, &lt;code&gt;===&lt;/code&gt;, &lt;code&gt;!=&lt;/code&gt; и т.д., скрины с начертанием есть по ссылкам):&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Fira Code&lt;/strong&gt;, основан на Fira Sans:
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://github.com/tonsky/FiraCode/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/tonsky/FiraCode/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hasklig&lt;/strong&gt;, основан на Source Code Pro (больше подходит для хаскеля и прочей функциональщины)
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://github.com/i-tu/Hasklig&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/i-tu/Hasklig&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;А это просто коллекция свободных шрифтов:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;a href=&#34;http://eknp.com/fonts/b4.php&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://eknp.com/fonts/b4.php&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Статьи и обзоры:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;a href=&#34;http://habrahabr.ru/post/120316/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Статья на хабре&lt;/a&gt;, с примерами начертания (и, судя по всему, 
&lt;a href=&#34;http://hivelogic.com/articles/top-10-programming-fonts/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;англоязычный оригинал&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.codeproject.com/KB/work/FontSurvey.aspx&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Обзор разных шрифтов&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://habrahabr.ru/post/243005/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Моноширинные шрифты с программистскими лигатурами&lt;/a&gt;. Лично я против подобных модификаций, есть куча нюансов в последующем чтении кода, но там, по ходу пьесы, пролетели ссылки на интересные шрифты (выше список пополнился).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Мой выбор:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;del&gt;&lt;strong&gt;Anka/Coder&lt;/strong&gt;&lt;/del&gt; - юзал бы его, если не косяки. А так - нравится&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Meslo LG&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fira Mono&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Anonymous Pro&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;UPD:&lt;/strong&gt; убрал все прочие UPD и переформатировал статью&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Crowns 0.6.0</title>
      <link>https://htrd.su/blog/2010/11/19/2010-11-19_03.41_crowns_0.6.0/</link>
      <pubDate>Fri, 19 Nov 2010 03:41:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/11/19/2010-11-19_03.41_crowns_0.6.0/</guid>
      <description>&lt;p&gt;Выпустил версию 0.6.0 программы 
&lt;a href=&#34;https://htrd.su/proekty/crowns/start/&#34;&gt;Crowns&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Из основных изменений:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Добавлена возможность задавать ограничение на отображение деревьев по возрасту (кстати это поле, как я понял, в основном используется не для возраста, а для задания года &amp;ldquo;рождения&amp;rdquo; дерева)&lt;/li&gt;
&lt;li&gt;Исправлен диалог редактирования данных: в нем невозможно было задать возраст дерева&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>MountTray</title>
      <link>https://htrd.su/blog/2010/11/13/2010-11-13_01.44_mounttray/</link>
      <pubDate>Sat, 13 Nov 2010 01:44:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/11/13/2010-11-13_01.44_mounttray/</guid>
      <description>&lt;p&gt;Написал небольшую программу для подключения, отключения сменных дисков в Linux, использует udisks для монтирования (в планах сделать бакенд и для простых mount/unmount через sudo, класс для использования которого уже написан, для полных минималистов), udev для детекта новых дисков и изъятия существующих (опять таки, готов и бакед для использования inotify, можно будет альтернативно прикрутить его, кстати, а на други unix системах как с inotify?) и в минимальном плане DBus для возможности получать сообщения: а вдруг кто-то там снаружи примонтировал/отмонтировал диск.&lt;/p&gt;
&lt;p&gt;Пожелания - мне на мыло&lt;/p&gt;
&lt;p&gt;&lt;del&gt;Проект разместил на Gitorius: 
&lt;a href=&#34;http://gitorious.org/h4tr3d-utils/pages/MountTray&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://gitorious.org/h4tr3d-utils/pages/MountTray&lt;/a&gt;&lt;/del&gt;&lt;br/&gt;&lt;br/&gt;
Новый адрес: 
&lt;a href=&#34;https://github.com/h4tr3d/mount-tray&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/h4tr3d/mount-tray&lt;/a&gt;, проект не разрабатывается уже несколько лет.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Планировали одно, а получилось как получилось...</title>
      <link>https://htrd.su/blog/2010/11/11/2010-11-11_04.10_planirovali_odno_a_poluchilos_kak_poluchilos/</link>
      <pubDate>Thu, 11 Nov 2010 04:10:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/11/11/2010-11-11_04.10_planirovali_odno_a_poluchilos_kak_poluchilos/</guid>
      <description>&lt;p&gt;В составе трех человек:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Быстрый (Серёга)&lt;/li&gt;
&lt;li&gt;Медленный (Я)&lt;/li&gt;
&lt;li&gt;Новичёк (Настя)
планировали на длинный ноябрьских праздниках сгонять траверс Фалаза-Пидан, и даже собрались и даже выехали&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;&lt;/h1&gt;
&lt;p&gt;&amp;hellip;Но сходили, категорически не так как ожидали  Но не это главное, а главное осюсения  (коих, в отличии от почти диванного похода на Облачную, про который даже написать то нечего в голову не лезет, значительно больше)&lt;/p&gt;
&lt;p&gt;В общем, маршрут не прошли, причина проста: &amp;ldquo;Русские на войне своих не бросают&amp;hellip;&amp;rdquo; А если проще: Настя конкретно натерла (до крови) ноги уже к тому моменту как дошли до ушуисткой базы (да, решили идти по Смольному). Поэтому сделали привал, стали держать военный совет: одну домой её не отправим и одному продолжать маршрут тоже не есть гуд. Поэтому пошли на компромисс: в первый день пробатонились чуть дальше по ручью - разбили лагерь, дышали воздухом, гоняли чаи. На следующий день Я и Серёга сгоняли в радиалку на Фалазу&amp;hellip;&lt;/p&gt;
&lt;p&gt;Тут тоже весело получилось: планировали топать по тропе (ну вроде как она там есть), хотя я в тех районах уже на Фалазу забирался, но поднимался по осыпям. В общем&amp;hellip; девиз радиалки стал: &amp;ldquo;тропа!? какая тропа! идём по приборам!&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Прибора было три: распечатка карты, компас и &amp;ldquo;что-то мне подсказывает&amp;rdquo;. Последним пользовался чаще :laughing:&lt;/p&gt;
&lt;p&gt;Тропу даже искать, в общем, не стали: планировалось выйти на седловинку и там подниматься - проверить состояние и что там вообще за условия, но обходя заросли актинидии пополам с малиновым вар&amp;hellip; в смысле с элеутерококком, опять выбрались на осыпь, ну уже и решили по ней и забираться. Так и доползли, встречая, изредка, творения рук человеческих в виде туров (
&lt;a href=&#34;http://picasaweb.google.com/skoulik/yZvOXG#5536649695455909314%29&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://picasaweb.google.com/skoulik/yZvOXG#5536649695455909314)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Немного почалившись на вершине, вдыхая воздух, решаем таки на обратном пути свалиться в седловинку и дальше по ручью. Ну что, сказано, сделано - на седловинку попали как снайперы (склон с осыпями и голый лес помогают ориентироваться), про тропы уже не думали (ибо нефиг), проходим немного и начинаем спускаться к ручью&amp;hellip; От тут начинается красоты: толстенные поваленные деревья обросшие мхом, валуны в таком же состоянии, актинидия, которая, цепляясь за ноги, как бы намекает на слова из песенки (хоть там и морская тематика): &amp;ldquo;&amp;hellip;оставайся мальчик с нами, будешь нашим королём&amp;hellip;&amp;rdquo;, ну и конечно - элеутерококк :simple_smile: Скоро и сам ручей появился валуны стали более красивыми, а мы, как горные козлы, устроили горно-лесной паркур - скакали по камням (без рюкзаков, чего бы это не поскакать-то)&lt;/p&gt;
&lt;p&gt;В лагере нас ждал обедс, покушали, собрались и обратно на электричку. Иголки от элеутерококка доставал до вчерашнего дня&lt;/p&gt;
&lt;p&gt;И нужно будет опять выбрать время, маршрут таки сходить.&lt;/p&gt;
&lt;p&gt;Малость фото (в художественном оформлении, ну уж какова фантазия художника):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://picasaweb.google.com/skoulik/yZvOXG#&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://picasaweb.google.com/skoulik/yZvOXG#&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>В гостях у зимы. Или Облачная оправдывает своё название</title>
      <link>https://htrd.su/blog/2010/11/11/2010-11-11_03.57_v_gostjax_u_zimy._ili_oblachnaja_opravdyvaet_svojo_nazvanie/</link>
      <pubDate>Thu, 11 Nov 2010 03:57:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/11/11/2010-11-11_03.57_v_gostjax_u_zimy._ili_oblachnaja_opravdyvaet_svojo_nazvanie/</guid>
      <description>&lt;p&gt;15-16-17 октября побывали наконец на Облачной. Всеми красотами насладиться не получилось, ибо сопка
в точности до каждой буквы оправдала своё название: вершина порадовала плотным туманом-облаком, хотя
на высоте 1000 метров было ясно. Пока добирались до кордона Уссури встретили первый снег&amp;hellip; За три
километра до шлагбаума размытый мост и крайне неудачный объезд остановил наш автобус, но не наши ноги.
Из-за этой мелочи, было накручено в каждую сторону лишних 13-14 км (на обратном пути я что-то вообще
чуть не помер, но дополз, ибо нефиг).&lt;/p&gt;
&lt;h1&gt;&lt;/h1&gt;
&lt;p&gt;Итак, наш путь начался с мокрого снега переходящего в дождь: не пожалел, что взял с собой пончо.
Добравшись до кордона руководитель всего этого мероприятия (упали на хвоста мегафоновцам, они
заказывали автобус, разрешение на въезд на территорию парка &amp;ldquo;Зов тигра&amp;rdquo;) быстро уладил дела с
егерями и мы двинулись дальше.&lt;/p&gt;
&lt;p&gt;Так потихоньку продвигаясь добрались сначала к свороту с дороги к подножию, а пока шли, познакомились
с двумя парнишками - аукнулась поездка в Бастак, там с нами была девушка - Полина, это оказались
её знакомые (видели меня на фотографиях). Воистину планета квадратная, а туристические тропы - тесные :)&lt;/p&gt;
&lt;p&gt;Добравшись до стоянки у, фактически, самого подножия, сделали небольшой привал на чай, сугрев и
перекус. Накормили и обогрели отставших от основной группы (мы, в составе: я, Серега, Настя, её
матушка, Ярослава, Лиза и Леха, шли отдельной бандой со своими продуктами и целями). Ну а дальше
был последний рывок, подъем по старой лесовозной дороге до высоты около 1000 метров, где были
около семи часов вечера субботы, разбили лагерь, организовали ужин, а во круг снег лежит: привет
Зима!&lt;/p&gt;
&lt;p&gt;На стоянке проблемы с водой - или далеко вниз спускаться или далеко вверх до родника подниматься.
Ситуацию спас снег и огромное количество сушняка для дров.&lt;/p&gt;
&lt;p&gt;Ужин, сон (да, летняя палатка, с поднятыми пологами оказалась уже не совсем для этого времени года).&lt;/p&gt;
&lt;p&gt;Утром ранний подъем, завтрак и подъем на легке до вершины.&lt;/p&gt;
&lt;p&gt;Подъем до плато занял около часа или полутора&amp;hellip; Ещё на подъеме ясная погода сменилась туманом. На
плато, если бы не туры, было бы очень сложно ориентироваться. Хотя даже они не помогли в один момент
как и не помог GPS, зато спасли сфотографированная карта и компас :)&lt;/p&gt;
&lt;p&gt;Ветренно&amp;hellip; Холодно&amp;hellip; &amp;ldquo;Горка&amp;rdquo; не продувается, это спасает, хотя длительные остановки чреваты.
Ярослава тем временем начинает подмерзать, отдаю ей свои перчатки, ибо теплее в них. На последнем
перешейке отдаю ей возвращающейся первой партии, как оказалось - правильно.&lt;/p&gt;
&lt;p&gt;После последнего перешейка, рывок, ещё один&amp;hellip; На последнем пожъеме встречаю спускающихся Лизу и
Леху, забираю у них термос с остатками чая. Тихо и мирно добираюсь до самой макушки&amp;hellip; Уххххху!
Ветер такой, что даже мою тушку в 90 кг порывается положить к земле, видимость - метров 20, не больше.
В общем - зашибись и отлично :)&lt;/p&gt;
&lt;p&gt;Посидели за каменной кладкой, перекусили, попили чая, я дождался замыкающих, сфотографировались и
тронулись в обратный путь.&lt;/p&gt;
&lt;p&gt;Спустившись вниз ждал уже чай кофе сиг&amp;hellip; ну вы поняли. Правда передохнуть почти не получилось - быстрые
сборы и обратный путь до автобуса&amp;hellip;&lt;/p&gt;
&lt;p&gt;Что-то он дался мне крайне тяжко, были мысли бросить всё и остаться ещё на одну ночевку&amp;hellip; Но ничего
отделавшись шикарнейшими мозолями, в темноте при свете луны таки добрались до автобуса. Хотя остаться
ещё было бы более прикольно :)&lt;/p&gt;
&lt;p&gt;Дома были около пяти утра понедельника, уставшие, но довольные.&lt;/p&gt;
&lt;p&gt;В общем как-то так. Получилось довольно диванно, впечатлений не так много. По ссылкам ниже немного фото:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;От Серёги: 
&lt;a href=&#34;http://picasaweb.google.com/skoulik/bpohnB#&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://picasaweb.google.com/skoulik/bpohnB#&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;От меня: 
&lt;a href=&#34;https://goo.gl/photos/NrWRYV1AjrRviEvm6&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://goo.gl/photos/NrWRYV1AjrRviEvm6&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;От Вовки: 
&lt;a href=&#34;https://get.google.com/albumarchive/100936080201681877193/album/AF1QipNVD0mW92iVQzwdQ9fQoNIU9F_tGMnezKDLzSqr&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://get.google.com/albumarchive/100936080201681877193/album/AF1QipNVD0mW92iVQzwdQ9fQoNIU9F_tGMnezKDLzSqr&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>bgrep - binary grep</title>
      <link>https://htrd.su/blog/2010/11/09/2010-11-09_13.39_bgrep_-_binary_grep/</link>
      <pubDate>Tue, 09 Nov 2010 13:39:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/11/09/2010-11-09_13.39_bgrep_-_binary_grep/</guid>
      <description>&lt;p&gt;Уже решил было сам писать, но оказалось, что уже сделано: 
&lt;a href=&#34;http://debugmo.de/2009/04/bgrep-a-binary-grep/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://debugmo.de/2009/04/bgrep-a-binary-grep/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Выкачиваем с git-hub:
git clone 
&lt;a href=&#34;https://github.com/tmbinc/bgrep.git&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://github.com/tmbinc/bgrep.git&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Строим:
gcc -o bgrep bgrep.c&lt;/p&gt;
&lt;p&gt;Далее копируем &lt;strong&gt;bgrep&lt;/strong&gt; куда нибудь, где она будет доступен при поиске в PATH (у меня это ~/bin) и пользуемся примерно так:
find . -name &amp;lsquo;*.bin&amp;rsquo; | xargs bgrep FFFE003454&lt;/p&gt;
&lt;p&gt;или так:
bgrep FFFE file.bin&lt;/p&gt;
&lt;p&gt;Вывод на экран:
имя файла: смещение&lt;/p&gt;
&lt;p&gt;Смещение - относительно начала файла в HEX виде. Далее mcview, biew или любой HEX редактор-просмотровщик в помощь.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Автомонтирование udev&#43;udisks</title>
      <link>https://htrd.su/blog/2010/11/03/2010-11-03_00.15_avtomontirovanie_udev_udisks/</link>
      <pubDate>Wed, 03 Nov 2010 00:15:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/11/03/2010-11-03_00.15_avtomontirovanie_udev_udisks/</guid>
      <description>&lt;p&gt;Повторять весь текст не буду, авторство и так моё: 
&lt;a href=&#34;http://groups.google.com/group/archlinux-ru/browse_thread/thread/33c0d288bd05823d&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://groups.google.com/group/archlinux-ru/browse_thread/thread/33c0d288bd05823d&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Тут как реминдер&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>QFileDialog с Image Preview: метод хакера</title>
      <link>https://htrd.su/blog/2010/11/01/2010-11-01_21.40_qfiledialog_s_image_preview_metod_xakera/</link>
      <pubDate>Mon, 01 Nov 2010 21:40:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/11/01/2010-11-01_21.40_qfiledialog_s_image_preview_metod_xakera/</guid>
      <description>&lt;p&gt;В Qt3 была чудная возможность в диалоге открытия интегрировать виджет в котором осуществлять предпросмотра содержимого файла, в частность делать предпросмотр изображений. В Qt4 такую возможность убрали. Да, можно приделать при помощи ItemDelegate кастомное отображение для иконок, и тем самым осуществлять предпросмотр, но не всегда это бывает удобным. Следующий вариант: писать свою реализацию класса для диалога открытия/сохранения. Я же решил попробовать хитрый способ&amp;hellip;&lt;/p&gt;
&lt;p&gt;Я никоим образом не претендую на правду в последней инстанции и не рекомендую относить данный метод к рекомендуемым практикам программирования, но как вариант решения с минимальными затратами он очень хорошо себя показывает.&lt;/p&gt;
&lt;p&gt;Итак смыл: наследовать свой класс от &lt;strong&gt;QFileDialog&lt;/strong&gt;, в конструкторе при помощи &lt;code&gt;findChild()&lt;/code&gt; по имени искать контейнер в котором располагается виджеты для отображения иконок и быстрых ссылок, приводить его к нужному типу, создавать виджет для предпросмотра, добавлять его в контейнер, при смене файла обновлять содержимое.&lt;/p&gt;
&lt;p&gt;Для того, что бы узнать какой контейнер используется (что бы произвести приведение типа) и его имя, нам потребуются исходники Qt, которые скачиваем с сайта Nokia: 
&lt;a href=&#34;http://qt.nokia.com&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://qt.nokia.com&lt;/a&gt;, распаковываем, находим файл *qfiledialog.ui// и загружаем его в Qt Designer. После пары минут изучения находим, что контейнер это компонент типа &lt;strong&gt;QSplitter&lt;/strong&gt; и имя у него - &lt;code&gt;splitter&lt;/code&gt;. Всё просто и лаконично.&lt;/p&gt;
&lt;p&gt;Теперь создаём свой класс, наследуем его от &lt;strong&gt;QFileDialog&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;class MFileDialog : public QFileDialog
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;В теле класса обязательно ставим
Q_OBJECT&lt;/p&gt;
&lt;p&gt;в секции &lt;code&gt;private:&lt;/code&gt; создаем прототип функции &lt;code&gt;init()&lt;/code&gt; - её будем вызвать из конструктора (если вы решитесь объявить их несколько), и указатель на экземпляр класса &lt;strong&gt;QLabel&lt;/strong&gt; - его будем использовать для вывода миниатюры изображения:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;private:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    void init();
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    QLabel *_preview;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Да, я обычно использую для методов класса одну секцию &lt;code&gt;private/public/etc&lt;/code&gt;, а для переменных - другую. Так получается нагляднее.&lt;/p&gt;
&lt;p&gt;Далее, сразу вспоминаем, что нам нужно обновлять предпросмотр при смене файла, для этого создадим слот - обработчик сигнала &lt;code&gt;currentChanged(**QString**)&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;slots&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fileChanged&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;QString&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Реализации методов &lt;code&gt;init()&lt;/code&gt; и &lt;code&gt;fileChanged(**QString** &amp;amp;file)&lt;/code&gt; в листинге ниже:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MFileDialog&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;init&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;_preview&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;//&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HACK&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;original&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dialog&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Qt4&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;does&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;have&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;preview&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;functinality&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;//&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Work&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;well&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;4.7&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;QSplitter&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;splitter&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;findChild&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;QSplitter&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;splitter&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;splitter&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;_preview&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;QLabel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;QRect&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;geomerty&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;_preview&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;geometry&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;geomerty&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;setWidth&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;160&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;//&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;Настройки&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;геометрии&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;можно&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;так&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;же&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;сделать&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;что&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;бы&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;рамочка&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;отображалась&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;или&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;что&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;то&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;вроде&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;_preview&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;setGeometry&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;geomerty&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;splitter&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;addWidget&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_preview&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;//&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;Собсвенно&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;добавляем&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;наш&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;виджет&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;в&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;контейнер&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;//&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;подключаем&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;обработчик&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;сигнала&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;currentChanged&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;connect&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SIGNAL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;currentChanged&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;QString&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SLOT&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fileChanged&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;QString&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MFileDialog&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fileChanged&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;QString&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_preview&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;QPixmap&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pix&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pix&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;isNull&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;_preview&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;setPixmap&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;QPixmap&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;//&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;Не&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;зыбываем&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;масштабировать&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;изображение&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;к&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;размеру&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;нашей&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;области&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;просмотра&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;QSize&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;size&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;_preview&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;pix&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pix&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;scaled&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Qt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;KeepAspectRatio&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;_preview&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;setPixmap&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pix&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Не забываем в конструкторе вызвать &lt;code&gt;init()&lt;/code&gt;, а в деструктор поместить &lt;code&gt;delete _preview&lt;/code&gt;. И всё, примерно так это выглядит:
&lt;img src=&#34;https://htrd.su/img//post/2010-11-01_21.40_qfiledialog_s_image_preview_metod_xakera/screen_shoot-20101101-220802.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;При этом, если даже не будет найдет разделитель с таким именем, диалог не поломается - просто не будет отображаться окошко предпросмотра.&lt;/p&gt;
&lt;p&gt;Какие улучшения тут можно сделать? Я думаю как минимум такие:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Установление ограничение на размер файла для которого будет автоматически делаться предпросмотр, ибо загрузка занимает время, а файлы могут быть оооочень большими (у меня, к примеру, есть такие которые не отрываются по причине нехватки памяти).&lt;/li&gt;
&lt;li&gt;Вместо &lt;strong&gt;QLabel&lt;/strong&gt; использовать &lt;strong&gt;QToolButton&lt;/strong&gt; и если файл слишком большой отрабатывать нажатие и делать принудительный предпросмотр, либо какие-то другие действия.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;PS Кому нужны исходники, пишите на мыло.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Qt4 и Custom Types</title>
      <link>https://htrd.su/blog/2010/10/23/2010-10-23_23.12_qt4_i_custom_types/</link>
      <pubDate>Sat, 23 Oct 2010 23:12:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/10/23/2010-10-23_23.12_qt4_i_custom_types/</guid>
      <description>&lt;p&gt;Известно, что, без преувеличения, основа Qt это moc и их система метатипов. В базе метатипов зарегистрированы все простые C/C++ типы и все сложные Qt типы, часто этого бывает с головой достаточно для написания программ: при использовании QVariant и QSettings или при организации вызовов типа сигнал-слот&amp;hellip;&lt;/p&gt;
&lt;p&gt;Но бывает, что в качестве параметра сигнала нужно передавать свою структуру или класс, или преобразовывать свой тип в QVariant. Для этого нужно зарегистрировать свой тип перед первым использованием (можно в функции main()), примерно так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;qRegisterMetaType&amp;lt;PhotoFormat&amp;gt;(&amp;#34;PhotoFormat&amp;#34;);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;После этого его можно использовать в качестве параметра в механизме сигнал-слот.&lt;/p&gt;
&lt;p&gt;Следующим полезным шагом - приведение нашего типа к QVariant, для этого, в дополнение к предыдущему, в заголовочном файла где располагается объявление нашего типа (на самом деле - в любом месте, но так будет логичнее) нужно разместить такую конструкцию:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Q_DECLARE_METATYPE(PhotoFormat);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Всё, после этого можно использовать подобные конструкции:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;QVariant&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;qVariantFromValue&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PhotoFotmat&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Name&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;23&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;PhotoFormat&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;format&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;qVariantValue&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PhotoFormat&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ну и последнее, сохранение и восстановление нашего класса при помощи QSettings. Для этого нужно, для начала, зарегистрировать потоковые операторы:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;qRegisterMetaTypeStreamOperators&amp;lt;PhotoFormat&amp;gt;(&amp;#34;PhotoFormat&amp;#34;);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Далее, обычно в заголовочном файле, где объявлен класс, объявляются операторы &lt;code&gt;&amp;lt;&amp;lt;&lt;/code&gt; и &lt;code&gt;&amp;gt;&amp;gt;&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;QDataStream&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;operator&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;QDataStream&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;PhotoFormat&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;obj&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;QDataStream&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;operator&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;QDataStream&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;PhotoFormat&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;obj&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Обращаю внимание - за пределами &lt;code&gt;class {};&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;А реализация примерно такая:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;QDataStream&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;operator&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;QDataStream&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;PhotoFormat&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;obj&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;QString&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;obj&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;getFormatName&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;QSizeF&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;size&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;obj&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;getSize&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;qreal&lt;/span&gt;   &lt;span class=&#34;n&#34;&gt;dst1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;obj&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;getTopPateDistance&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;qreal&lt;/span&gt;   &lt;span class=&#34;n&#34;&gt;dst2&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;obj&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;getNoseChinDistance&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;out&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;size&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dst1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dst2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;QDataStream&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;operator&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;QDataStream&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;PhotoFormat&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;obj&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;QString&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;QSizeF&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;qreal&lt;/span&gt;   &lt;span class=&#34;n&#34;&gt;dst1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;qreal&lt;/span&gt;   &lt;span class=&#34;n&#34;&gt;dst2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;size&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dst1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dst2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;obj&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;setFormanName&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;obj&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;setSize&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;obj&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;setTopPateDistance&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dst1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;obj&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;setNoseChinDistance&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dst2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;По сути, сериализация класса. Более подробная информация - на странице справки по классу QMetaType, и можно глянуть тут: 
&lt;a href=&#34;http://www.crossplatform.ru/?q=node/281&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.crossplatform.ru/?q=node/281&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Qt4 on Mac OS X</title>
      <link>https://htrd.su/blog/2010/10/23/2010-10-23_22.46_qt4_on_mac_os_x/</link>
      <pubDate>Sat, 23 Oct 2010 22:46:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/10/23/2010-10-23_22.46_qt4_on_mac_os_x/</guid>
      <description>&lt;p&gt;Делал тут небольшую работку, писал программку, которая позволяла таскать линии по холсту и формировать по его данным потом xml файл в заданном формате, который потом превращался в уровень для игры. Заказчик просил ObjectivC и целевая платформа Mac OS X, на мой вопрос о критичности ObjectvC ответил - не суть, предложил написать на Qt4, тем самым покроем, одним махом, три платформы: Linux/Windows/Mac, но будет нуанс - я только примерно знаю как собирать под Mac, в общем, подумав - согласились.&lt;/p&gt;
&lt;p&gt;Работу, естественно, я делал под Linux, проверил сборку для Windows (опять таки - кросскомпиляция). Показал результаты (сборку под Win32 и скапченый видеоролик работы в Linux), заказчику понравилось, дальше пошла очередь запуска на Mac OS X&amp;hellip;&lt;/p&gt;
&lt;p&gt;Первым делом был скачан Qt SDK 2010.05 - бронебойно, но зато всё сразу есть. Собрать получилось без проблем (были ворнинги у линковщика на лишние пути, указанные через атрибут -L, которые реально не существуют, но тут камень в огород создателям SDK). А вот дальше встал вопрос - а как запускать приложение на машинах где нет Qt4? Под windows/linux, в случае распространения бинарников, можно просто положить необходимые dll/so рядом и исполняемым файлов, но в Mac OS X они распространяются в виде бандла (директория с определённой структурой и суффиксом .app). Так вот, что бы собрать всё нужные библиотеки в бандл, разработчики Qt сделали утилиту &lt;strong&gt;macdeployqt&lt;/strong&gt;, которую, после сборки, достаточно натравить на полученное приложение так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;macdeployqt helloworld.app
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;
&lt;a href=&#34;http://blog.ayoy.net/2009/5/10/deploying-qt-based-frameworks-made-simple&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Тут&lt;/a&gt; человек с ником Ayoy, тоже озадачивался подобными вопросами, и рассмотрел более подробно. Так же, он столкнулся с тем, что если используются библиотеки/фреймворки которые используют Qt, после обработки macdeployqt они будут продолжать ссылаться на системные, а не те, что в бандле. Что бы это исправить он написал скрипт на перл, которые позволяет это исправлять: 
&lt;a href=&#34;http://gist.github.com/109674&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://gist.github.com/109674&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Чуть позже поставлю в виртуалку Mac OS X, посмотрю, может на будущее буду сам делать бандлы, а ещё заинтересовала кросс-компиляция для макоси :)&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Пара замечаний</title>
      <link>https://htrd.su/blog/2010/10/13/2010-10-13_21.35_para_zamechanij/</link>
      <pubDate>Wed, 13 Oct 2010 21:35:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/10/13/2010-10-13_21.35_para_zamechanij/</guid>
      <description>&lt;p&gt;&lt;strong&gt;Замечание 1:&lt;/strong&gt; Qt Creator (одна из последних git сборок)&lt;br/&gt;&lt;br/&gt;
При включенном отображении Outline в левой панели, при работе появляются значительные тормоза даже на небольших проектах (при моих 1024Мб RAM и Atom 1.6Гц). Решение: выбрать другой режим, тем более что в значительный промежуток времени эта панель вообще не нужна (убирается и вновь показывается при помощи Alt-0), да и есть мощный инструмент Locate (Ctrl-K)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Замечание 2:&lt;/strong&gt; sshfs и не уходим в sleep&lt;br/&gt;&lt;br/&gt;
Я активно пользуюсь sshfs для подключения удалённых ресурсов, удобно, быстро, не нужно дополнительных плясок. Недавно стал наблюдать, что система при каких-то условиях перестала засыпать на нетбуке. Опытным путем выяснилось условие: ресурс, примонтированный при помощи sshfs, был отлючен с использованием опции lazy у fusermount (иначе ругался на Resource busy). При этом продолжал висеть процесс sshfs, его убийство после, опять позволяло уводить систему в sleep.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Crowns 0.5.0</title>
      <link>https://htrd.su/blog/2010/10/11/2010-10-11_01.17_crowns_0.5.0/</link>
      <pubDate>Mon, 11 Oct 2010 01:17:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/10/11/2010-10-11_01.17_crowns_0.5.0/</guid>
      <description>&lt;p&gt;Вышла версия 0.5.0 программы Crowns для построения проекций крон деревьев. Скачать можно 
&lt;a href=&#34;https://htrd.su/proekty/crowns/download/&#34;&gt;тут&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;В этой версии, основные изменения, касающиеся функционала в целом:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Добавлена возможность удалять подложку из проекта.&lt;/li&gt;
&lt;li&gt;Добавлена возможность экспорта параметров крон деревьев в формат, пригодный для обработки в математических программах типа Octave (100% проверено), Scilab (проверено частично), Mathlab (теоретически должно работать). Т.к. проекции теперь строятся при помощи кривых Безье, то при экспорта с точностью 0.1 выдаются и промежуточные точки для построения полной проекции, теоретически, после обработки данные будут пригодны для загрузки в GIS.&lt;/li&gt;
&lt;li&gt;Исправлена ошибка, при которой подложка не удалялась при открытии проекта без оной или создании нового проекта.&lt;/li&gt;
&lt;li&gt;Исправлена ошибка, при которой случайное нажатие клавиши Esc приводило к закрытию окна программы.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Другие изменения, касающиеся технических аспектов разработки:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Исправлены вспомогательный скрипты для отстройки и паковки win32 версии из среды Linux.&lt;/li&gt;
&lt;li&gt;Был осуществлен переход на систему сборки CMake.&lt;/li&gt;
&lt;li&gt;Исправлено не критическое поведение с float типами при сохранении проекта: значения сохранялись как @Variant(..).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Полный список изменений: 
&lt;a href=&#34;https://htrd.su/proekty/crowns/changelog/&#34;&gt;ChageLog&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Документация по GCC</title>
      <link>https://htrd.su/blog/2010/10/09/2010-10-09_00.30_dokumentacija_po_gcc/</link>
      <pubDate>Sat, 09 Oct 2010 00:30:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/10/09/2010-10-09_00.30_dokumentacija_po_gcc/</guid>
      <description>&lt;p&gt;На правах мемориза.&lt;/p&gt;
&lt;p&gt;Тут лежит полная и последняя: 
&lt;a href=&#34;http://gcc.gnu.org/onlinedocs/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://gcc.gnu.org/onlinedocs/&lt;/a&gt; в различных форматах, берём то, что нужно, а в системе пользуемся 
&lt;a href=&#34;https://htrd.su/blog/2010/02/19/2010-02-19_10.27_info_s_chelovecheskim_licom/&#34;&gt;инфо&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;А здесь полезная информация от гентоводов: 
&lt;a href=&#34;http://en.gentoo-wiki.com/wiki/Safe_Cflags&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://en.gentoo-wiki.com/wiki/Safe_Cflags&lt;/a&gt; - безопасные флаги оптимизация для различных процессоров (далее по тексту - ссылки)&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Цветовое пространство YUV</title>
      <link>https://htrd.su/blog/2010/10/02/2010-10-02_01.23_cvetovoe_prostranstvo_yuv/</link>
      <pubDate>Sat, 02 Oct 2010 01:23:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/10/02/2010-10-02_01.23_cvetovoe_prostranstvo_yuv/</guid>
      <description>&lt;p&gt;Многим знакомо цветовое пространство RGB (Red/Green/Blue), мне потребовалось же работать с входными данными пространства YUV, которое широко используется в семействе кодеков MPEG.&lt;/p&gt;
&lt;h2 id=&#34;кратко-о&#34;&gt;Кратко о&amp;hellip;&lt;/h2&gt;
&lt;p&gt;Составляющие пространства:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Y - яркостная компонента, если оставить только её получим изображение в оттенках серого, компонента получается из исходного RGB сигнала, каждая составляющая множится на свой вес (сумма весов - 1)&lt;/li&gt;
&lt;li&gt;U - разностная компонента для голубого цвета (B&amp;rsquo; - Y&#39;)&lt;/li&gt;
&lt;li&gt;V - разностная компонента для красного цвета (R&amp;rsquo; - Y&#39;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;В общем подробности можно почитать тут: 
&lt;a href=&#34;http://en.wikipedia.org/wiki/YUV&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://en.wikipedia.org/wiki/YUV&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Основная прелесть этого пространства в том, что для телевизионщиков можно использовать ЧБ инфраструктуру, а кроме того, для хранения информации о цвете для одного пикселя требуется меньший объем памяти (при различных организациях хранения, коих множество).&lt;/p&gt;
&lt;p&gt;Беда в том, что существует много алгоритмов, обработки изображения, которые ориентированы на RGB, стоит вопрос преобразования. Но с преобразованием тоже не всё гладно: RGB-to-YUV и YUV-to-RGB приводит к потере и искажению информации о цвете, так что стоит свести оные к минимуму.&lt;/p&gt;
&lt;p&gt;Кроме того, существует множество способов паковки YUV информации (стоит сказать и у RGB тоже не мало), о коих можно почитать тут: 
&lt;a href=&#34;http://www.fourcc.org/yuv.php&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.fourcc.org/yuv.php&lt;/a&gt;,  там же можно найти формулы преобразования: 
&lt;a href=&#34;http://www.fourcc.org/fccyvrgb.php&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.fourcc.org/fccyvrgb.php&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;yuv--rgb-на-java&#34;&gt;YUV ↔ RGB на Java&lt;/h2&gt;
&lt;p&gt;У меня задача обработки стояла на Java, там Я словил одну особенность: формулы предполагают работу с unsigned char, тогда как в Java unsigned типов нет. В результате у меня получился примерно такой алгоритм для YUV420p (планарный формат, составляющие YUV в кадре идут полосами, друг за другом, причем на 4 составляющие Y приходится по 1 UV, чем достигается компрессия по сравнению с RGB в 1.5 раза):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;static&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;processBufferYUV420P&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;byte&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;in_buffer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;byte&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;out_buffer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;w&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;h&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y_size&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;w&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;h&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// Размер блока Y&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uv_size&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y_size&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// Размер блоков U и V&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Ri&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Gi&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Bi&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Ro&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Go&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Bo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Yi&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Ui&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Vi&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Yo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Uo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Vo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rgb&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;yuv&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;w&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;h&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// Считаем индексы&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y_idx&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;w&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;u_idx&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;w&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y_size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// Составляющая U идет сразу за Y&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;v_idx&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;w&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y_size&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uv_size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// Составляющая V идет сразу за U&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// Читаем компоненты цвета, делаем преобразование к &amp;#34;беззнаковому&amp;#34; виду, функции ниже&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Yi&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;byte2unsigned&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;in_buffer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y_idx&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Ui&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;byte2unsigned&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;in_buffer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;u_idx&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Vi&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;byte2unsigned&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;in_buffer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;v_idx&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// Тут преобразование в RGB, по cути, выше, мы преобразовали YUV420p в YUV444&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;yuv2rgb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Yi&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Ui&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Vi&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rgb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Ri&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rgb&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Gi&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rgb&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Bi&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rgb&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// Обработка&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//совершаем работу над Ri/Gi/Bi получаем на выходе Ro/Go/Bo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// Обратное преобразование в YUV&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rgb2yuv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Ro&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Go&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Bo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;yuv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Yo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;yuv&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Uo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;yuv&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Vo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;yuv&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// Запись, тут мы возвращаем &amp;#34;знаковость&amp;#34; компонентам&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;out_buffer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y_idx&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;byte2signed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Yo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;out_buffer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;u_idx&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;byte2signed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Uo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;out_buffer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;v_idx&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;byte2signed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Vo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;cm&#34;&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * Обрезает значение до [0..255]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * @param value
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * @return
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; */&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;static&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;clip&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;return_value&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;return_value&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;return_value&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;return_value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;cm&#34;&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * Конвертирует yuv2rgb
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * @param y [0..255]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * @param u [0..255]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * @param v [0..255]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * @param rgb массив трех элементов RGB [0..255]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; */&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;static&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;yuv2rgb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;u&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rgb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// Я умножал на 1024, округлял, а в конце делал смещение вправо на 10, потеря точности не большая&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// с целыми числами работа быстрее&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;1441&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;128&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// R&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;354&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;u&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;128&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;734&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;128&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// G&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;1822&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;u&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;128&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// B&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rgb&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;clip&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rgb&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;clip&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rgb&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;clip&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;cm&#34;&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * Конвертирует RGB и YUV
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * @param r [0..255]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * @param g [0..255]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * @param b [0..255]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * @param yuv массив результатов YUV [0..255]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; */&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;static&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;rgb2yuv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;yuv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;u&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// аналогично со смещениями и целыми числами&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)((&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;39191&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;76939&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;14942&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;u&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)(((&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;22117&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;43419&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;65536&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;128&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)(((&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;65536&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;54878&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;10658&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;128&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;yuv&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;yuv&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;u&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;yuv&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;cm&#34;&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * В Java нет unsigned типов, поэтому обходим так
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * Преобразует signed byte в unsigned форму, повышая битность до int
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * @param b
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * @return
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; */&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;static&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;byte2unsigned&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;byte&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;0xFF&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;cm&#34;&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * В Java нет unsigned типов, поэтому обходим так
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * Преобразуем unsigned форму байта (в виде int) в signed форму
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * @param b
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; * @return
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; */&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;static&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;byte&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;byte2signed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//return (b &amp;gt; 127) ? (byte)(b - 0x100) : (byte)(b);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;byte&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;В общем, это на память, и ссылки по теме:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.erazer.org/how-to-convert-rgb-to-yuv420p/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.erazer.org/how-to-convert-rgb-to-yuv420p/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.gamedev.ru/code/forum/?id=84700&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.gamedev.ru/code/forum/?id=84700&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.fourcc.org/yuv.php&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.fourcc.org/yuv.php&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.fourcc.org/fccyvrgb.php&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.fourcc.org/fccyvrgb.php&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.f4.fhtw-berlin.de/~barthel/ImageJ/ColorInspector&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.f4.fhtw-berlin.de/~barthel/ImageJ/ColorInspector&lt;/a&gt;*HTMLHelp/farbraumJava.htm&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://en.wikipedia.org/wiki/YUV&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://en.wikipedia.org/wiki/YUV&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.mikekohn.net/file_formats/yuv_rgb_converter.php&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.mikekohn.net/file_formats/yuv_rgb_converter.php&lt;/a&gt; - удобный конвертер для проверки себя&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.equasys.de/colorconversion.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.equasys.de/colorconversion.html&lt;/a&gt; - матричные формулы&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.javamex.com/java_equivalents/unsigned.shtml&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.javamex.com/java_equivalents/unsigned.shtml&lt;/a&gt; - про unsigned в Java&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;rgb--yuv-в-octave&#34;&gt;RGB ↔ YUV в Octave&lt;/h2&gt;
&lt;p&gt;И в довесок функции для Octave для выполнения данных преобразований:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-scilab&#34; data-lang=&#34;scilab&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ret &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;clip3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;value, min_range, max_range&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;	&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ret&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;	&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;value&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;min_range&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;		&lt;span class=&#34;n&#34;&gt;ret&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;min_range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;	&lt;span class=&#34;k&#34;&gt;endif&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;	&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;	&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;value&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;max_range&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;		&lt;span class=&#34;n&#34;&gt;ret&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;max_range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;	&lt;span class=&#34;k&#34;&gt;endif&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;endfunction&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;YUV &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;rgb2yuv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;R, G, B&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;	&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Wu&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;0.436&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;	&lt;span class=&#34;n&#34;&gt;Wv&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;0.615&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;	&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;	&lt;span class=&#34;n&#34;&gt;KOEF&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;0.299&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;0.587&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;0.114&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;	             &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;0.147&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;0.289&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;0.436&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;	             &lt;span class=&#34;mf&#34;&gt;0.615&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;0.515&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;0.100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;	&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;	&lt;span class=&#34;n&#34;&gt;RGB&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;R&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;G&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;B&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;./&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; # &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;0.&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;form&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;	&lt;span class=&#34;n&#34;&gt;YUV&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;KOEF&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;RGB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;	&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;	&lt;span class=&#34;n&#34;&gt;Y&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;YUV&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;	&lt;span class=&#34;n&#34;&gt;U&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;YUV&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;	&lt;span class=&#34;n&#34;&gt;V&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;YUV&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;	&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;	&lt;span class=&#34;n&#34;&gt;Y&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;floor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Y&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;	&lt;span class=&#34;n&#34;&gt;U&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;floor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;U&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Wu&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Wu&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;	&lt;span class=&#34;n&#34;&gt;V&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;floor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;V&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Wv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Wv&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;	&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;	&lt;span class=&#34;n&#34;&gt;YUV&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Y&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;U&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;V&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;endfunction&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;RGB &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;yuv2rgb &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;Y, U, V&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;	&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Wu&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;0.436&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;	&lt;span class=&#34;n&#34;&gt;Wv&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;0.615&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;	&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;	&lt;span class=&#34;n&#34;&gt;Y&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Y&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;	&lt;span class=&#34;n&#34;&gt;U&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;U&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Wu&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Wu&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;	&lt;span class=&#34;n&#34;&gt;V&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;V&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Wv&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Wv&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;	&lt;span class=&#34;n&#34;&gt;YUV&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;U&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;V&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;	&lt;span class=&#34;n&#34;&gt;KOEF&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;1.14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;	              &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;0.395&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;0.581&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;	              &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;2.032&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;	&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;	&lt;span class=&#34;n&#34;&gt;RGB&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;KOEF&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;YUV&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;.*&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;	&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;	&lt;span class=&#34;n&#34;&gt;RGB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;clip3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;RGB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;	&lt;span class=&#34;n&#34;&gt;RGB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;clip3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;RGB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;	&lt;span class=&#34;n&#34;&gt;RGB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;clip3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;RGB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;	&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;endfunction&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Использовать можно примерно так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-scilab&#34; data-lang=&#34;scilab&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;T&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;rgb2yuv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;156&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;T&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;yuv2rgb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;варианты-паковки-в-картинках&#34;&gt;Варианты паковки в картинках&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;YUV444&lt;/strong&gt; - один пиксель - 24 бит, т.е. на каждый пиксель приходится одна составляющая Y, U и V. Самый неэкономный, но самый простой для манипуляций, к примеру, для изменения размеров. Поэтому иногда к нему переходят.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/yuv444-422-420-411.gif&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;В виде данных может представляться в двух видах: packed и planar (обычно если это planar после полного названия ставится буква p: YUV444p, YUV420p).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Packed&lt;/strong&gt; - байты яркости (чёрно-белая картинка, Y) и цветоразности (UV) - идут вперемешку.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Planar&lt;/strong&gt; - в памяти идёт сначала Y компонента (одним сплошным куском), затем отдельно U и V.&lt;/p&gt;
&lt;p&gt;Обращу внимание, последовательно U и V может меняться у разных подформатов (см: 
&lt;a href=&#34;http://www.fourcc.org/yuv.php&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.fourcc.org/yuv.php&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;YUV444 packed&lt;/strong&gt;:&lt;br /&gt;
&lt;img src=&#34;https://htrd.su/img//post/yuv444-packed.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;YUV422&lt;/strong&gt; - на один пиксель, в среднем - 16 бит. Из-за того, что на два яркостных пикселя (YY) используется по одному цветоразностных пикселя: UV. Т.е. на два пикселя: p2_bits = 2*8 + 8 + 8 = 32 бит ⇒ на один пиксель p_bits = p2_bits/2 = 32/2 = 16. На первой картинке в этом разделе видно как объединяются пиксели. Так же может существовать в двух видах: packed и planar.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;YUV422 packed&lt;/strong&gt;:&lt;br/&gt;&lt;br/&gt;
&lt;img src=&#34;https://htrd.su/img//post/yuv422-packed.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;YUV420&lt;/strong&gt; - на один пиксель, в среднем - 12 бит: на 4 смежные яркостных пикселя:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;YY
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;YY
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;используется по одному цветоразностному UV. Т.е. p4_bits = 4*8 + 8 + 8 = 48 ⇒ p_bits = p4_bits/4 = 48/4 = 12. Информацию об использовании этого формата в packed виде я никогда не видел. Кроме того, в некоторых источниках говорят, что букву p (planar) часто опускают, и говорят, что YUV420 == YUV420p.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;YUV420p - planar:&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;
&lt;img src=&#34;https://htrd.su/img//post/yuv420-planar.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Схожая схема паковки и у других форматов в планарном представлении.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;YUV411&lt;/strong&gt; - на один пиксель, в среднем - 12 бит. Отличие от YUV420 только в том, общие цветоразностные пиксели (UV) не для четёрых смежных яркостных (Y), а для четырёх последовательных. На первой картинке раздела это очень хорошо показано. Может быть представлен как в планарном, так и в пакованном виде.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;YUV411 - packed:&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;
&lt;img src=&#34;https://htrd.su/img//post/yuv411-packed.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;planar-или-packed&#34;&gt;Planar или packed?&lt;/h2&gt;
&lt;p&gt;В случае пакованных форматов, мы читаем пиксели последовательно, меньше прыгаем по памяти, уменьшаем количество cache-miss процессора, а следовательно, повышаем производительность при обработке.&lt;/p&gt;
&lt;p&gt;С другой стороны, у нас есть много вариантов YUV форматов, в которых отличаются последовательности YUV (UYV, UVY и т.п.) и когда возникает необходимость в конвертировании приходится пробегать для каждого пикселя, что бы установить нужный порядок (к примеру: некоторое оборудование может работать ну только с этим конкретным форматом, к примеру YV12, а у вас YUV420p). В случае с планарами мы просто перенастраиваем три указателя на нужные области.&lt;/p&gt;
&lt;p&gt;Более того, YUV420p очень популярен в телевидении (это, имхо, и причина, почему его в пакованном виде вообще нет), и его особенность, что сначала идёт полный яркостный кадр (читай - полная ЧБ картинка), а потом цветоразностные, использовалась на заре появления цветного телевидения: старые телевизоры игнорировали расширенные цветоразностные данные (они как-то хитро там посылались, интернет в помощь) и могли нормально показывать ЧБ картинку. Новые цветные телевизоры уже могли читать полную картинку и показывать уже цветное изображение. И всё - для одного сигнала!&lt;/p&gt;
&lt;h2 id=&#34;переходы-между-yuv&#34;&gt;Переходы между YUV&lt;/h2&gt;
&lt;p&gt;Как уменьшается количество цветоразностных компонент? На самом деле есть много более хитрых алгоритмов, но для собственных потребностей часто хватает двух:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;считаем среднее&lt;/li&gt;
&lt;li&gt;или находим медиану&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Всё основано на том, что человеческий глаз слабо замечает переходы цветов на смежных пикселях, на чём и основана игра.&lt;/p&gt;
&lt;p&gt;Выше для понижения битности. Для повышения битности просто делаем дублирование уже существующих UV для смежных пикселей.&lt;/p&gt;
&lt;p&gt;Пример:
YUV444 -&amp;gt; YUV422&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Y0 U0 V0   Y1 U1 V1          Y0 U0` V0`   Y1 ... ...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                      --&amp;gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Y2 U2 V2   Y3 U3 V3          Y2 U1` V1`   Y3 ... ...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Расчёт:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;U0` = (U0 + U1) / 2       V0` = (V0 + V1) / 2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;U1` = (U2 + U3) / 2       V1` = (V2 + V3) / 2
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;При обратном переходе (YUV422 -&amp;gt; YUV444):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;U0 = U0`     V0 = V0`
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;U1 = U0`     V1 = V0`
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Видел алгоритмы, в которых при понижении битности брали просто первый элемент UV, не считая медиану или среднего. Тоже вариант, плюс ускорение, но потеря информации больше.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>На правах заметки Using Visual C&#43;&#43; DLLs with C&#43;&#43;Builder</title>
      <link>https://htrd.su/blog/2010/09/30/2010-09-30_15.00_na_pravax_zametki_using_visual_c_dlls_with_c_builder/</link>
      <pubDate>Thu, 30 Sep 2010 15:00:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/09/30/2010-09-30_15.00_na_pravax_zametki_using_visual_c_dlls_with_c_builder/</guid>
      <description>&lt;p&gt;Потребовалось тут собрать для C++Builder DLL, наткнулся походу на такой мануал:&lt;br/&gt;&lt;br/&gt;

&lt;a href=&#34;http://bcbjournal.org/articles/vol4/0012/Using_Visual_C_DLLs_with_CBuilder.htm&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://bcbjournal.org/articles/vol4/0012/Using_Visual_C_DLLs_with_CBuilder.htm&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;В мемориз, хотя, надеюсь, оно мне никогда не пригодится, собирать под винду, это ужас&amp;hellip;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>FlashBlock в Opera</title>
      <link>https://htrd.su/blog/2010/09/28/2010-09-28_13.15_flashblock_v_opera/</link>
      <pubDate>Tue, 28 Sep 2010 13:15:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/09/28/2010-09-28_13.15_flashblock_v_opera/</guid>
      <description>&lt;p&gt;Полезная ссылка: 
&lt;a href=&#34;http://my.opera.com/Lex1/blog/flashblock-for-opera-9/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://my.opera.com/Lex1/blog/flashblock-for-opera-9/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;даны различные рецепты, в том числе очень удобный для Opera 10.5+: просто включить опцию EnableOnDemandPlugin, для чего нужно открыть настройки: opera:config#UserPrefs|EnableOnDemandPlugin, опция автоматически добавится, и можно её включить. Да, это будет работать для любых плагинов.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Старый новый локальный эксплоит для x86_64 ядер</title>
      <link>https://htrd.su/blog/2010/09/17/2010-09-17_14.43_staryj_novyj_lokalnyj_ehksploit_dlja_x86_64_jader/</link>
      <pubDate>Fri, 17 Sep 2010 14:43:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/09/17/2010-09-17_14.43_staryj_novyj_lokalnyj_ehksploit_dlja_x86_64_jader/</guid>
      <description>&lt;p&gt;Сама новость на OpenNet: 
&lt;a href=&#34;http://www.opennet.ru/opennews/art.shtml?num=27979&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.opennet.ru/opennews/art.shtml?num=27979&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Рабочий эксплоит: 
&lt;a href=&#34;http://sota.gen.nz/compat2/robert_you_suck.c&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://sota.gen.nz/compat2/robert_you_suck.c&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;PS рабочий, в смысле, что у меня сработал отлично :)&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>OpenSource #068</title>
      <link>https://htrd.su/blog/2010/09/16/2010-09-16_14.54_opensource_068/</link>
      <pubDate>Thu, 16 Sep 2010 14:54:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/09/16/2010-09-16_14.54_opensource_068/</guid>
      <description>&lt;p&gt;А в нем и моя очередная статья &amp;ldquo;QLandKarte GT как замена OziExplorer в GNU/Linux&amp;rdquo; (название откорректировано редактором, но не суть). Рассматривается вопрос использования данных, подготовленных для использования  в OziExplorer (или созданных ими), коих на просторах интернетов премножество, в среде Linux, на примере QLandKarte GT.&lt;/p&gt;
&lt;p&gt;Скачать: 
&lt;a href=&#34;http://osa.samag.ru/get/OpenSource068.zip&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://osa.samag.ru/get/OpenSource068.zip&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>WebMoney и Альфа Банк</title>
      <link>https://htrd.su/blog/2010/09/15/2010-09-15_01.33_webmoney_i_alfa_bank/</link>
      <pubDate>Wed, 15 Sep 2010 01:33:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/09/15/2010-09-15_01.33_webmoney_i_alfa_bank/</guid>
      <description>&lt;p&gt;Стоимость (полная) перевода WM -&amp;gt; Alfa-click - 2.8%, обратно - 1%&lt;/p&gt;
&lt;p&gt;Привязка осуществляется через Альфа-Клик, предварительно в WM нужно получить формальный аттестат (
&lt;a href=&#34;http://passport.webmoney.ru&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://passport.webmoney.ru&lt;/a&gt;), после чего нужно в секции &amp;ldquo;Мои документы&amp;rdquo; закачать сканы или снимки:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;разворота паспорта с фотографией&lt;/li&gt;
&lt;li&gt;разворота паспорта с пропиской&lt;/li&gt;
&lt;li&gt;ИНН&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Дождаться, когда рядом с ними появятся зелёные значки, до тех пор Альфа-Клик будет ругаться на то, что вам нужно иметь формальный сертификат с подтвержденными паспортными данными.&lt;/p&gt;
&lt;p&gt;Если возникнут проблемы, можно спросить в этой теме: 
&lt;a href=&#34;https://forum.webmoney.ru/default.aspx?g=posts&amp;amp;m=146072&amp;amp;&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Привязка к Альфа-банку&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Из вышеуказанной темы, уверяют, что для сверки используется информация о номере паспорта и ФИО, так что следите, что бы они были корректными (я, при заполнении анкеты в банке, нашел несколько, в т.ч. в имени, так что будьте бдительны).&lt;/p&gt;
&lt;p&gt;Несколько ссылок:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://webmoney.ru&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://webmoney.ru&lt;/a&gt; - сами вебмани&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://click.alfabank.ru&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://click.alfabank.ru&lt;/a&gt; - интернет банк Альфа-Клик&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://banks.webmoney.ru&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://banks.webmoney.ru&lt;/a&gt; - отсюда, собственно производится операция по выводу денег в банки, после оформления, в Кипере получите счет, который оплатите (с комиссией 0.8%) и получите деньги на карточку.&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://passport.webmoney.ru&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://passport.webmoney.ru&lt;/a&gt; - тут управляете своим сертификатом, получаете новый&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://forum.webmoney.ru&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://forum.webmoney.ru&lt;/a&gt; - форумы, задаём вопросы.&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://alfabank.ru/retail/internet/webmoney/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://alfabank.ru/retail/internet/webmoney/&lt;/a&gt; - информация из первых рук о переводах WM-Alfa&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Те же самые операции с Яндекс.Деньгами прошли менее болезненно, при условии, что паспортные данные в системе ЯД уже предоставлены (там только ничего никуда не нужно сканировать и выкладывать)&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>256</title>
      <link>https://htrd.su/blog/2010/09/13/2010-09-13_08.59_256/</link>
      <pubDate>Mon, 13 Sep 2010 08:59:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/09/13/2010-09-13_08.59_256/</guid>
      <description>&lt;p&gt;Ну чтос, с праздничком!&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Unix man pages в Qt Assistant</title>
      <link>https://htrd.su/blog/2010/09/08/2010-09-08_03.55_unix_man_pages_v_qt_assistant/</link>
      <pubDate>Wed, 08 Sep 2010 03:55:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/09/08/2010-09-08_03.55_unix_man_pages_v_qt_assistant/</guid>
      <description>&lt;p&gt;В продолжении темы, поднятой мною тут: &lt;a href=&#34;http://juick.com/906984&#34; target=&#34;_blank&#34;&gt;906984&lt;/a&gt;
, таки решил озадачится, результатом озадачивания стало два скрипта.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;https://htrd.su/img//post/2010-09-08_03.55_unix_man_pages_v_qt_assistant/gen-man2html.sh&#34;&gt;gen-man2html.sh&lt;/a&gt; - пробегает по указанным секциям man-страниц (где они лежат и какие секции - внутри файла, лениво было опциями делать), и конвертирует их в HTML, заодно, по некоторым патернам создаёт ссылки (типа printf(3) или ссылкки в секцию 0, для &amp;lt;header.h&amp;gt;)&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;https://htrd.su/img/post/2010-09-08_03.55_unix_man_pages_v_qt_assistant/gen-html2assistant.sh&#34;&gt;gen-html2assistant.sh&lt;/a&gt; - собственно уже пробегает по этим, сгенерированным, страницам, делает файл проекта справки Qt Assistan и, по завершении, вызывает *qhelpgenerator// для создания файла справки (на самом деле это SQLite база). После чего этот файл можно подключить в Qt Assistant:&lt;br/&gt;&lt;br/&gt;
&lt;img src=&#34;https://htrd.su/img/post/2010-09-08_03.55_unix_man_pages_v_qt_assistant/screen_shoot-20100908-040124.png&#34; alt=&#34;&#34;&gt;&lt;img src=&#34;https://htrd.su/img/post/2010-09-08_03.55_unix_man_pages_v_qt_assistant/screen_shoot-20100908-040202.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Для того, что бы к работал поиск в &amp;ldquo;Указателе&amp;rdquo;, нужно указывать ключевые слова, в данный момент, в качестве оных, используется имя самой страницы. Полнотекстовый поиск будет доступен в соответствуем месте в Qt Assistant после окончания генерации индекса. В &amp;ldquo;Содержании&amp;rdquo; добавится новый пункт &amp;ldquo;Unix man pages&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Вот так вот примерно это дело выглядит:
&lt;img src=&#34;https://htrd.su/img//post/2010-09-08_03.55_unix_man_pages_v_qt_assistant/screen_shoot-20100908-042132.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Сразу вопрос: подскажите инструмент для генерации ключевых слов для документа, интересует, на данный момент, только английский язык.&lt;/p&gt;
&lt;p&gt;Бонусом нам это добавляет контекстную справку по всем функциям glibc и установленных библиотек (для которых есть man-page) в Qt Creator.&lt;/p&gt;
&lt;p&gt;Сгенерированный мною файл справки можно взять тут: 
&lt;a href=&#34;http://hatred.homelinux.net/~hatred/unixman.qch.gz&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://hatred.homelinux.net/~hatred/unixman.qch.gz&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPD:&lt;/strong&gt;&lt;br /&gt;
буквально сегодня в списке рассылки Qt Creator проскользнула статья: 
&lt;a href=&#34;http://shinnok.com/rants/2011/07/19/linux-man-pages-integration-with-qt-creator/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Linux Man Pages integration with Qt Creator&lt;/a&gt; со схожим механизмом получения справочного файла. Отличие в том, что он брал готовые man-страницы в html с 
&lt;a href=&#34;http://www.kernel.org/doc/man-pages/online_pages.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.kernel.org/doc/man-pages/online_pages.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPD2:&lt;/strong&gt;&lt;br /&gt;
Там же в рассылке всплыла ссылка на галерею документации для Qt Creator: 
&lt;a href=&#34;https://wiki.qt.io/Qt_Creator_Documentation_Gallery&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://wiki.qt.io/Qt_Creator_Documentation_Gallery&lt;/a&gt; (или поиском по &amp;ldquo;Qt_Creator_Documentation_Gallery&amp;rdquo;, так как они уже несколько раз домены тосовали).&lt;/p&gt;
&lt;p&gt;В текущем состоянии не густо, но есть C++ Reference и убогенькая, сгенерированная doxygen документация по STL, а так же рекомендацию, как при помощи Doxygen генерировать документацию для Assistant.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Слоны идут на север</title>
      <link>https://htrd.su/blog/2010/08/31/2010-08-31_22.05_slony_idut_na_sever/</link>
      <pubDate>Tue, 31 Aug 2010 22:05:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/08/31/2010-08-31_22.05_slony_idut_na_sever/</guid>
      <description>&lt;p&gt;Ещё когда топали на Ольховую, Ярослава кинула идею, что надо бы съездить на север Приморья, посетить водопад Чёрный Шаман (Большой Амгинский, высота около 30-35 метров - видимая часть и около 10-15 метров невидимая). Тогда дата была определена крайне расплывчато: а вот как нибудь в августе.&lt;/p&gt;
&lt;p&gt;Время шло, народ на поездку набирался, да и у меня планы так выстроились, что появилась возможность принять участие в этом маленьком путешествии. В результате дата: 20 августа.&lt;/p&gt;
&lt;p&gt;Но, как обычно, ближе к старту, выясняется что у большей части народа ехать не получается, с машиной непонятки и вообще, вместо пяти дней вырисовывается только два выходных + день дороги. Решаем ехать с Ярославой на её Subaru R2 до Тернея, где мы должны встретиться с местными ребятами (я тогда их имен не знал: Женя и Саша), и на их транспорте уже ехать дальше на севера.&lt;/p&gt;
&lt;p&gt;Итак, нам нужно быть в Тернее в 17.00 в пятницу, по слухам дорога до туда занимает 14 часов, поэтому выдвигаемся в 3 ночи, запасаемся заваренным кофием в термосе.&lt;/p&gt;
&lt;p&gt;Приключения начались почти сразу, начиная с того, что нас остановили и проверили документы на всех постах ДПС, на которых не спали доблестные служители закона :) Ну а первое плутание началось после поворота на Хороль, далее на трассе М-60, где дорожные работы ведутся - плутали в поисках поворота на А-181 (на Дальнегорск) - свернули на грунтовку какую-то, малость разули глаза и вернулись :)&lt;/p&gt;
&lt;p&gt;С небольшими остановка на попить кофе, вставить новые спички в глаза, а под утро любуясь на движущийся прямо на нас рассвет, багровые переливы солнца в облаках, добрались до Рудной Пристани, там на повороте подобрали пожилую женщину - Шуру, попросила добросить до Каменки. Там же скоро закончился асфальт на дороге. Пока ехали разговорились, получили приглашение в гости на борщ и чай, а так как втечение 100 километров мы пытались заставить себя остановиться, перекусить, то даже не пытались препираться. Послушали разные рассказы о жизни местных поселков, чем живут. В Каменке, покушав, и поблагодарив, поехали дальше и&amp;hellip; только выехав, обнаружили что оставили сумку с документами на машину, пришлось возвращаться. Проблема стала в том, что дома её не оказалось, посидев немного, подумав, Ярослава предлагает: Я остаюсь караулить у дома, а она на машине отправляется кататься по поселку - вдруг встретит&amp;hellip; Через минут 20 - возвращается, встретились, забрав документы, ещё раз поблагодарив за гостеприимство, обменявшись телефонами, и получив приглашение на будущее - заезжать в гости, оправляемся дальше в путь. Действительно - будьте проще и доброжелательнее и люди к вам потянутся.&lt;/p&gt;
&lt;p&gt;Дальше началась трясучка по грунтовке до самого Пластуна, бедный R2 (по прозвищу &amp;ldquo;Лунтик&amp;rdquo;, за специфичную форму зеркал, похожих на уши одноименного мульт-персонажа) с достоинством выдержал весь путь, ни разу не чихнув, за что ему объявляется благодарность.&lt;/p&gt;
&lt;p&gt;Кстати, на моё удивление, почему это перед Дальнегорском перевал не закатан в асфальта, Шура поведала простой и логичный ответ: &amp;ldquo;Зимой на асфальте сильно скользко, так хоть как-то, а летом почти любой дождь просто смывает асфальт&amp;rdquo;. Вот такие пироги - век живи, век учись, дураком помрешь.&lt;/p&gt;
&lt;p&gt;После Пластуна, до самого Тернея идет асфальт, временно исчезая только на одном перевале, и дорога пустая и хорошая (по крайней мере много лучше чем некоторые дворовые дороги во Владивостоке, и много лучше трассы М-60 после Уссурийска), благодаря этому здорово настигли по времени и в 16.45 были уже в центре Тернея.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2010-08-31_22.05_slony_idut_na_sever/plastun-ternej.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2010-08-31_22.05_slony_idut_na_sever/luntik.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Вышли на связь с Женей (должен был с нами ехать), он отвечает, что сам не едет, даёт связь с Сашей (да на всей дороге одни Саши :)), с которым, собственно, на его же машине и должны были ехать дальше на север. Встречаемся, знакомимся, оказывается с ним едет ещё его девушка - Лена, и матёрый собак - Кекс :) Ну а сам пепелац - вообше зверь! Старенький SURF дизельный, да ещё за всю поездку посчитали - 8 литров на 100 км! Это зачёт, я считаю.&lt;/p&gt;
&lt;p&gt;В общем, попили чаю, загрузились в машину иииии&amp;hellip; в путь! В Сурфе грунтовую дорогу вообще не чувствовалось, шел мягко, Саша сразу сказал, как тут местных от приезжих на дороге можно отличить: местные едут тихо, колеса берегут, а приезжие летят, до первого острого камня. Подтверждая его слова, нас обогнали жигули, километров через пять - они уже стояли ремонтировались :)&lt;/p&gt;
&lt;p&gt;В пути решили уточниться с нашим маршрутом, пришли к такому: Сначала едем в Амгу, там Саша быстро делает работу, далее заправляемся, покупаем, что нужно, едем обратно, заезжаем на теплые ключи в районе &amp;ldquo;Теплых ключей&amp;rdquo; (извиняюсь за каламбур :)), далее сам водопад Большой Амгинский, и последним пунктом - ищем источник Святой Елены (было только словесное описание где он).&lt;/p&gt;
&lt;p&gt;Таким образом перевалили через перевал Берёзовый (на картах обозначен как Таёжный), и забрались на вершину перевала Таёжный (который на карте никак не обозначен, там развилка на Амгу и Малую Кему, что примечательно, километраж до Амгу - не проставлен, мол, &amp;ldquo;а вы думаете доедете?&amp;rdquo; :)). Так вот, по местным приметам, на вершине перевала нужно остановиться и походить немного - иначе проблемы в пути будут, так что, будущие путешественники, мотайте на ус.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2010-08-31_22.05_slony_idut_na_sever/amgu-small-kema.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;В первый день мы только успели спуститься с перевала Таёжный к Кеме, полюбоваться на красивые пороги и бурную реку, какие я раньше видел, пожалуй, только на фотографиях и видео. Недалеко от дороги, в небольшом закутке разбили лагерь, Я и Ярослава спали в палатке (наконец-то я её обновил самостоятельно! Оказалась компактной но вполне комфортной, индивидуальные входы вполне вмещают личный рюкзак литров в 100). Саша, Лена и Кекс спали в машине.&lt;/p&gt;
&lt;p&gt;Распалили костер с подручных средств (жердины свежие) - дрова в ближайшем окружении уже были разобраны и на дворе уже темень и, как на зло, в фонарик не поставил свежие батарейки, и, он не мудрствуя лукаво, решил по-быстрому сесть&amp;hellip; Пока с усилием распаливали костер, на газовой горелке сделал гречку с сервелатом, перекусили, пропустили пару (ну а кто и побольше) рюмочек водки, за дорогу, за встречу, за знакомство, за успех нашего безнадежного дела. Меня быстро начало рубить в сон - вторые сутки без сна, это не хухры мухры, полез в палатку&amp;hellip; Проснулся только когда в палатку залазила Ярослава, точнее заползал её коврик, тыкаясь мне в лицо, моё лицо, этого терпеть не стало, и дало команду: проснись, положи коврик, спи дальше. Что было почти на полном автопилоте и проведено :)&lt;/p&gt;
&lt;p&gt;Утром повылазили, наскреб немного дров по округе, заправились чаем, попрыгали в машину и двинулись дальше, вдоль Кемы, дальше через перевал в долину реки Большая Луговая, через Максимовку через перевал в Амгу. Там Саша закончил работу по позиционированию спутниковой тарелки, сгоняли в сам посёлок, с грустью посмотрели на &amp;ldquo;кладбище леса&amp;rdquo; (очень символично, что рядом кладбище человеческое), и отправились в обратный путь.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2010-08-31_22.05_slony_idut_na_sever/banda.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2010-08-31_22.05_slony_idut_na_sever/pereval.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2010-08-31_22.05_slony_idut_na_sever/kladbishe-lesa.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Первой остановкой были теплые ключи недалеко от Амгу, там особо не стали останавливаться - очередь была. Просто поснимали, и тронулись дальше. Да вода действительно теплая :)&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2010-08-31_22.05_slony_idut_na_sever/teplie-kluchi-1.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2010-08-31_22.05_slony_idut_na_sever/teplie-kluchi-2.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Далее был самая главная цель нашего автопутешествия - водопад Черный Шаман, народное название, или Большой Амгинский. После Теплых ключей, перевал и после него, в скором времени отворот налево, дальше не очень хорошая, с бродами и узкая дорожка до полянки перед спуском в шикарнейший каньон. К сожалению, горе-турЫсты, которые в большинстве своём добираются туда на машинах, удосужились чертовски попортить виды выброшенным мусором - трудно на машине увезти? Или банки закопать? Ладно, боги им судьи.&lt;/p&gt;
&lt;p&gt;С полянки достаточно крутой спуск в самый низ каньона, по спуску валяются крупные куски известняка, взял один камушек на память. В самом низу дерево, на которое вяжут ленточки и верёвочки, видать что бы вернуться, ну&amp;hellip; мы тоже повязали :) Далее незабываемая прогулка по каньону вверх по течению: шея затекала от того что голову держал запрокинутой, обзора объектива фотоаппарата не хватало, что передать все красоты и краски&amp;hellip; А внизу шумит прохладный ручей. В одном месте даже пришлось малость воспользоваться натянутыми веревками, дабы продвинуться ближе к Шаману, не замочив ноги, в общем даже такая малая прогулка вышла очень колоритной и впечатляющей.&lt;/p&gt;
&lt;p&gt;Апофеозом становится неожиданное появление и самого красавца - водопада Чёрный Шаман, я даже не смог сдержать эмоций крикнув: &amp;ldquo;Дядька, ты ШИКАРЕН&amp;rdquo;!&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2010-08-31_22.05_slony_idut_na_sever/shaman.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Естественно пофотографировались, я залез под сам водопад, а после и Ярослава последовала моему примеру, вода крайне бодрящая :)&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2010-08-31_22.05_slony_idut_na_sever/shaman-i.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Долго задерживаться не получилось и, попрощавшись с местом, тронулись на подъем, который, как и ожидалось, оказался много легче чем спуск. Наверху нас ждал уже приготовленный рыбный суп, который быстро умяли за обе щёки и тронулись (а время уже около 21.00) на поиски дороги на источник св.Елены. В указанном месте (после моста через Максимовку) свернули налево на большую трассу, дальше, по описанию, 16 км и отворот налево&amp;hellip; Ехали-ехали, ехали-ехали, ехали-ехали, вот уже и 16 км, поворота не видно, тут видим силуэт УАЗика (микрик), думаем, неужели на вахту лесорубов приехали. Выходим, здороваемся, задаём гениальный вопрос в тайге: &amp;ldquo;а как сопсно называется это место&amp;rdquo;. Ответ нас тоже поразил: &amp;ldquo;Источник св.Елены&amp;rdquo;. Вот так: нас не сбить с пути, нам пофигу куда идти :laughing: Как потом выяснилось поворот налево был, не такой, не совсем явный, но был, и мы по наитию в него и свернули, удача, девушка капризная, но крайне желанная :)&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2010-08-31_22.05_slony_idut_na_sever/keks.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Решаем продвинуться дальше по дороге, и разбить лагерь, а на источник уже отправляться на следующий день и, после него, в обратный путь. Чуть только проехали местные лагеря, наблюдаем поворот налево, решаем не изменять традиции (всю дорогу самые удачные и правильные повороты у нас были налево :)) и поворачиваем туда, дорога быстро портится, а слева от нас, даже в темноте заметная, унылая картина выпиленного леса&amp;hellip; очень удручающе действует, место так и излучает боль&amp;hellip; Решаем не ночевать в таком месте, а возвращаться, и, опять поворачивая налево, ехать дальше, искать ручей и разбивать лагерь. Так и сделали, быстро добрались до старого лесо-склада, там же и ручей рядом и дров достаточно, поставили палатки, доели остатки супа, приготовили чаю, и долго вели беседы, любуясь полохами языков огня, журчанием ручья и тихим шорохом ночной тайги, а вокруг все в серебряном свете, ещё не полной луны&amp;hellip;&lt;/p&gt;
&lt;p&gt;Утром со сборами особо не мешкали, сделали чаю, подкрепились и двинулись на источник. Минут через 15 были на нем, а там уже очередь, то есть понежиться не получилось (время, время). Чуть позже стала и известна причина задержки: под колодой гадючка отложила яйца и вылупились змеёныши, мужики вытащили от туда около 8 штук, правда обращались варварски, не думаю что большая часть их выжила. Но программу максимум на это путешествие мы выполнили, и довольные отправляемся в обратный путь.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2010-08-31_22.05_slony_idut_na_sever/gadyuka.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2010-08-31_22.05_slony_idut_na_sever/sv_elena.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Да, ремарка, на этой стоянке о нашем присутствии напоминала примятая трава, сделанные из местных брёвнышек сидушки и кострище: весь мусор, мы вытащили с собой, банки обожгли и закопали.&lt;/p&gt;
&lt;p&gt;На обратном пути ехали тихо, все-таки накатывала грусть, не хотелось покидать места, хотелось побыть ещё. Дабы её несколько развеять на дороге нас встретил шикарный полоз, который даже не думал уступать нам дорогу, поснимав его и аккуратно объехав - двинулись дальше.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2010-08-31_22.05_slony_idut_na_sever/poloz.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Около одно из притоков Кемы, сделали привал на чай, я окунулся в глубокой заводи - шикарнейшие ощущения и красивые места.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2010-08-31_22.05_slony_idut_na_sever/kupanie.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Возле Кемы остановились на порогах, поснимали их при дневном свете.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2010-08-31_22.05_slony_idut_na_sever/porog-1.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2010-08-31_22.05_slony_idut_na_sever/porog-2.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;На перевале Таёжный опять остановились, там встретили очередных туристов из Находки, подсказали им с дорогой, отдал им свои планы с наметками маршрута, пожелали доброго пути (а он такой у них и будет, ведь сами того не ведая они остановились на перевале, погуляли :)).&lt;/p&gt;
&lt;p&gt;В скором времени были в Тернее, с Ярославой поехали в центр - только там ловил её телефон с Мегафоном (мой акос тихо молчал до самого Дальнегорска :)), прозвонились, предупредили, что ночуем в Тернее. Дальше сгоняли на местную лодочную пристань, которая выглядит крайне колоритно.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2010-08-31_22.05_slony_idut_na_sever/pristan.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Когда вернулись к Саше и Лене, там уже была почти готова банька. Переложили вещи, почистили от пыли рюкзаки, после помылись, поужинали и без задних ног отвалились на боковую.&lt;/p&gt;
&lt;p&gt;На следующий день привели себя в порядок, обменялись контактами с Сашей, и в 12 часов начали наш обратный путь. Обратная дорога далась легче и быстрее, и без каких либо приключений, только изредка останавливались снимать виды. Таким темпом в 23.00 были уже на угольной, а в 00.00 Ярослава скинула, что тоже добралась до дома&amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2010-08-31_22.05_slony_idut_na_sever/vid-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2010-08-31_22.05_slony_idut_na_sever/vid-02.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img/post/2010-08-31_22.05_slony_idut_na_sever/zakat.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Вот такое получилось автопутешествие, впечатлений море, но уже хочется ещё и подольше, прогуляться выше водопада по течению, забраться на г.Курортная, &lt;del&gt;пока это только планы, но кто знает&amp;hellip;&lt;/del&gt; :)&lt;/p&gt;
&lt;p&gt;UPD: а тем временем 
&lt;a href=&#34;https://htrd.su/blog/2015/09/22/slony_idut_na_sever_2._ili_dazhe_korabli_ne_vyxodjat_v_more_v_ponedelnik/&#34;&gt;Слоны идут на север 2&amp;hellip;&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Новая система нотификаций в файловой системе</title>
      <link>https://htrd.su/blog/2010/08/31/2010-08-31_16.28_novaja_sistema_notifikacij_v_fajlovoj_sisteme/</link>
      <pubDate>Tue, 31 Aug 2010 16:28:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/08/31/2010-08-31_16.28_novaja_sistema_notifikacij_v_fajlovoj_sisteme/</guid>
      <description>&lt;p&gt;Узнал из 
&lt;a href=&#34;http://www.opennet.ru/opennews/art.shtml?num=27783&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;новости&lt;/a&gt; про очередной RC ядра Linux. А вот и пользовательская утилита: 
&lt;a href=&#34;http://pavlinux.ru/fanotify.tar.bz2&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://pavlinux.ru/fanotify.tar.bz2&lt;/a&gt;, ну последней ссылкой, описание на LWN с небольшим примером на Си в конце: 
&lt;a href=&#34;http://lwn.net/Articles/339253/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://lwn.net/Articles/339253/&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Psi&#43; - редактирование контактов в ростере</title>
      <link>https://htrd.su/blog/2010/08/29/2010-08-29_12.04_psi_redaktirovanie_kontaktov_v_rostere/</link>
      <pubDate>Sun, 29 Aug 2010 12:04:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/08/29/2010-08-29_12.04_psi_redaktirovanie_kontaktov_v_rostere/</guid>
      <description>&lt;p&gt;Столкнулся с проблемой - никоим образом не получалось отредактировать контакт в ростере, хотя горячая клавиша была назначена. В конференции 
&lt;a href=&#34;mailto:psi-dev@conference.jabber.ru&#34;&gt;psi-dev@conference.jabber.ru&lt;/a&gt; подсказали, посмотреть, а не залочен-ли ростер, оказалось - залочен, исправлять:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Настройки -&amp;gt; Дополнительно&lt;/li&gt;
&lt;li&gt;далее находим опцию: &lt;strong&gt;options.ui.contactlist.lockdown-roster&lt;/strong&gt; и ставим в true&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Всё!&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Гоняем структуры по сети, часть вторая</title>
      <link>https://htrd.su/blog/2010/08/28/2010-08-28_23.21_gonjaem_struktury_po_seti_chast_vtoraja/</link>
      <pubDate>Sat, 28 Aug 2010 23:21:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/08/28/2010-08-28_23.21_gonjaem_struktury_po_seti_chast_vtoraja/</guid>
      <description>&lt;p&gt;
&lt;a href=&#34;https://htrd.su/blog/2010/08/09/2010-08-09_21.19_gonjaem_struktury_po_seti/&#34;&gt;Тут&lt;/a&gt; уже писал про проблему пересылки/приёмки структурированных данных по сети.&lt;/p&gt;
&lt;p&gt;На нашей целевой платформе нельзя применять сторонние библиотеки (типа libpack, как в предыдущей статье), и, так вышло (лучи ненависти), что #pragma pack() то работает, то не работает, да ещё стоит условие, что данные должны быть преобразованы к сетевому виду (ntohs(), ntohl(), htons(), htonl()), поэтому я сделал на макросах такой фит ушами:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;/**************************************************************************************************/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;/* Паковка и распаковка данных, для передачи по сети ---------------------------------------------*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;/**************************************************************************************************/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// Распаковка массива в структуры
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;cm&#34;&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; Начало блока распаковки массива данных, на которые указывает &amp;lt;br/&amp;gt;c ptr и размера &amp;lt;br/&amp;gt;c size
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#define unpack_begin(ptr, size) { &amp;lt;br/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;            &lt;span class=&#34;kt&#34;&gt;size_t&lt;/span&gt;   &lt;span class=&#34;n&#34;&gt;__addr&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;kt&#34;&gt;size_t&lt;/span&gt;   &lt;span class=&#34;n&#34;&gt;__size&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;size_t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;kt&#34;&gt;uint8_t&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;__ptr&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;uint8_t&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ptr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;union&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;kt&#34;&gt;uint8_t&lt;/span&gt;        &lt;span class=&#34;n&#34;&gt;cc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;kt&#34;&gt;uint16_t&lt;/span&gt;       &lt;span class=&#34;n&#34;&gt;ii&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;kt&#34;&gt;uint32_t&lt;/span&gt;       &lt;span class=&#34;n&#34;&gt;ll&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;kt&#34;&gt;float&lt;/span&gt;          &lt;span class=&#34;n&#34;&gt;ff&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;kt&#34;&gt;double&lt;/span&gt;         &lt;span class=&#34;n&#34;&gt;dd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;__swapd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;__swapd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; Распаковка очередной порции данных в &amp;lt;br/&amp;gt;c target
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#define unpack_next(target) &amp;lt;br/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;            &lt;span class=&#34;nf&#34;&gt;pack_printf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Unpack &amp;lt;br/&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;... Size: %d, current offset: %d, current size: %d&amp;lt;br/&amp;gt;n&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;target&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;__size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;__addr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;sizeof&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;target&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;__addr&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;sizeof&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;target&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;__size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nf&#34;&gt;memcpy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;target&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;__ptr&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;__addr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;sizeof&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;target&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;__addr&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;sizeof&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;target&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; Распаковка очередной порции данных в &amp;lt;br/&amp;gt;c target, с преобразованием из сетевого вида
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; Сетевое преобразование работает для простых типов размерос 2 (short), 4 (int, float)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; и 8 (lint32_tlint32_t double) байтint16_t остальных данных
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#define unpack_net_next(target) &amp;lt;br/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;            &lt;span class=&#34;nf&#34;&gt;unpack_next&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;target&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;switch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;sizeof&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;target&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nf&#34;&gt;memcpy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;__swapd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ii&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;target&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;n&#34;&gt;__swapd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ii&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;ntohs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;__swapd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ii&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nf&#34;&gt;memcpy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;target&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;__swapd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ii&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;k&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nf&#34;&gt;memcpy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;__swapd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ll&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;target&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;n&#34;&gt;__swapd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ll&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;ntohl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;__swapd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ll&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nf&#34;&gt;memcpy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;target&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;__swapd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ll&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;k&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nf&#34;&gt;memcpy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;__swapd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;target&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;n&#34;&gt;__swapd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ll&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;ntohl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;__swapd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ll&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;n&#34;&gt;__swapd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ll&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;ntohl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;__swapd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ll&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nf&#34;&gt;memcpy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;target&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;__swapd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;k&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; Конец блока распаковки
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#define unpack_end() } (void)(0)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// Паковка данных из элементов струтуры в массив данных
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;cm&#34;&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; Начало блока паковки данных в &amp;lt;br/&amp;gt;c ptr размером &amp;lt;br/&amp;gt;c size
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#define pack_begin(ptr, size) unpack_begin(ptr, size)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// Внутренний вспомогательный макрос, как общая часть для pack_next()/pack_net_next()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;#define _pack_next_intr(source, data) &amp;lt;br/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;            &lt;span class=&#34;nf&#34;&gt;printf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Pack &amp;lt;br/&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;... Size: %d, current offset: %d, current size: %d&amp;lt;br/&amp;gt;n&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;__size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;__addr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;sizeof&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;__addr&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;sizeof&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;__size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nf&#34;&gt;memcpy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;__ptr&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;__addr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;sizeof&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;__addr&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;sizeof&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; Пакует очередной элемент
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#define pack_next(source) &amp;lt;br/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;            &lt;span class=&#34;nf&#34;&gt;_pack_next_intr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; Пакует очередной элемент, преобразовывая его в сетевой вид
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#define pack_net_next(source) &amp;lt;br/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;            &lt;span class=&#34;k&#34;&gt;switch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;sizeof&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nf&#34;&gt;memcpy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;__swapd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ii&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;n&#34;&gt;__swapd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ii&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;htons&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;__swapd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ii&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nf&#34;&gt;_pack_next_intr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;__swapd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ii&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;k&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nf&#34;&gt;memcpy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;__swapd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ll&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;n&#34;&gt;__swapd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ll&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;htonl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;__swapd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ll&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nf&#34;&gt;_pack_next_intr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;__swapd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ll&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;k&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nf&#34;&gt;memcpy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;__swapd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;n&#34;&gt;__swapd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ll&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;htonl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;__swapd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ll&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;n&#34;&gt;__swapd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ll&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;htonl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;__swapd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ll&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nf&#34;&gt;_pack_next_intr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;__swapd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;k&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nf&#34;&gt;pack_next&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;k&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; Конец блока паковки данных
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#define pack_end()            unpack_end()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Можно ещё оптимизировать, тут оверхед с переменными вспомогательными, можно без них в большинстве случаев. Ну и, кажется, не совсем корректная работа с величинами больше 4 байт (&lt;strong&gt;double&lt;/strong&gt;), но на серверной машине, по-моему, вообще залепа сделана, посмотрим как работать будет :)&lt;/p&gt;
&lt;p&gt;Пример использования для отсылки данных:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Data&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;kt&#34;&gt;short&lt;/span&gt;     &lt;span class=&#34;n&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;kt&#34;&gt;float&lt;/span&gt;      &lt;span class=&#34;n&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;kt&#34;&gt;long&lt;/span&gt;      &lt;span class=&#34;n&#34;&gt;tm&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;id&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;73.3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tm&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;0xFEFD&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;size_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data_size&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// sizeof(short) + sizeof(float) + sizeof(long) - поля структуры
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;char&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data_ptr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;data_ptr&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;calloc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data_size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;sizeof&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;char&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nf&#34;&gt;pack_begin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data_ptr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data_size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nf&#34;&gt;pack_net_next&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nf&#34;&gt;pack_net_next&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nf&#34;&gt;pack_net_next&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tm&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nf&#34;&gt;pack_end&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;send&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sock&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data_ptr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data_size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Пример получения данных:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Data&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;kt&#34;&gt;short&lt;/span&gt;     &lt;span class=&#34;n&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;kt&#34;&gt;float&lt;/span&gt;      &lt;span class=&#34;n&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;kt&#34;&gt;long&lt;/span&gt;      &lt;span class=&#34;n&#34;&gt;tm&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;size_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data_size&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// sizeof(short) + sizeof(float) + sizeof(long) - сколько данных получить нужно
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;char&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data_ptr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;data_ptr&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;calloc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data_size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;sizeof&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;char&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;recv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sock&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data_ptr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data_size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nf&#34;&gt;unpack_begin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data_ptr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data_size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nf&#34;&gt;unpack_net_next&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nf&#34;&gt;unpack_net_next&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nf&#34;&gt;unpack_net_next&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tm&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nf&#34;&gt;unpack_end&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// Тут структура заполнена распакованными данными
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Если преобразование в сетевой вид не нужно, используйте &lt;em&gt;pack/unpack_next()&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Пустые директории в GIT</title>
      <link>https://htrd.su/blog/2010/08/27/2010-08-27_20.42_pustye_direktorii_v_git/</link>
      <pubDate>Fri, 27 Aug 2010 20:42:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/08/27/2010-08-27_20.42_pustye_direktorii_v_git/</guid>
      <description>&lt;p&gt;На заметку, 
&lt;a href=&#34;http://juick.com/muhas/897253&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;отсюда&lt;/a&gt; и 
&lt;a href=&#34;http://stackoverflow.com/questions/115983/how-do-i-add-an-empty-directory-to-a-git-repository&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;отсюда&lt;/a&gt;, делается пустая директория &lt;em&gt;/tmp&lt;/em&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ mkdir tmp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ touch tmp/.gitignore
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ git add tmp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;*&amp;#39;&lt;/span&gt; &amp;gt; tmp/.gitignore
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ git commit -m &lt;span class=&#34;s1&#34;&gt;&amp;#39;Empty directory&amp;#39;&lt;/span&gt; tmp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Основной нюанс: добавить &lt;em&gt;.gitignore&lt;/em&gt; раньше, чем вписать туда игнорировать ВСЕ файлы&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>OpenSource #067</title>
      <link>https://htrd.su/blog/2010/08/27/2010-08-27_04.49_opensource_067/</link>
      <pubDate>Fri, 27 Aug 2010 04:49:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/08/27/2010-08-27_04.49_opensource_067/</guid>
      <description>&lt;p&gt;Очередной выпуск, в котором опубликована четвертая, заключительная статья из цикла &amp;ldquo;Схемотехника в Linux с помощью gEDA&amp;rdquo;: &amp;ldquo;Создание паттерна в PCB&amp;rdquo;, рассказывается как делать паттерны (футпринты) для компонентов, как обычно - в примерах.&lt;/p&gt;
&lt;p&gt;Скачать выпуск: 
&lt;a href=&#34;http://osa.samag.ru/get/OpenSource067.zip&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://osa.samag.ru/get/OpenSource067.zip&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Linux, с днем рождения!</title>
      <link>https://htrd.su/blog/2010/08/25/2010-08-25_18.04_linux_s_dnem_rozhdenija/</link>
      <pubDate>Wed, 25 Aug 2010 18:04:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/08/25/2010-08-25_18.04_linux_s_dnem_rozhdenija/</guid>
      <description>&lt;p&gt;19 годков стукнуло.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>OpenSource #066</title>
      <link>https://htrd.su/blog/2010/08/19/2010-08-19_02.51_opensource_066/</link>
      <pubDate>Thu, 19 Aug 2010 02:51:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/08/19/2010-08-19_02.51_opensource_066/</guid>
      <description>&lt;p&gt;Вышел 66 выпуск электронного приложения к журналу &amp;ldquo;Системный администратор&amp;rdquo;, а в нем и моя третья статья из цикла &amp;ldquo;Схемотехника в Linux с помощью gEDA&amp;rdquo;, в которой рассмотрено создание условного обозначения компонент для gschem. Так же сделано небольшое отступление и рассказано о интеграции gschem и pcb при помощи менеджера проектов xgschm2pcb. В общем качаем и читаем: 
&lt;a href=&#34;http://osa.samag.ru/get/OpenSource066.zip&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://osa.samag.ru/get/OpenSource066.zip&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Гоняем структуры по сети</title>
      <link>https://htrd.su/blog/2010/08/09/2010-08-09_21.19_gonjaem_struktury_po_seti/</link>
      <pubDate>Mon, 09 Aug 2010 21:19:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/08/09/2010-08-09_21.19_gonjaem_struktury_po_seti/</guid>
      <description>&lt;p&gt;Вспоминаем о выравнивании (не говорю о том, что числовые поля нужно привести в сетевой вид, дабы на удаленной стороне была уже произведена корректная распаковка данных: man 3 htons/ntohs, man 3 htonl/htohl, man 3 endian), чешем репу - а если приёмная сторона использует другое выравнивание, нежели у нас при сборке бинарника?((по рабоче-крестьянски: на типичной 32бит машине все переменные выравнены по 32битной длинне))&lt;/p&gt;
&lt;p&gt;Вижу варианты:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;пихать все в char-буффер - некрасиво&lt;/li&gt;
&lt;li&gt;поэлементно отправлять - неудобно и некрасиво&lt;/li&gt;
&lt;li&gt;использовать #pragma pack() - удобно, красиво, но не супер переносимо&lt;/li&gt;
&lt;li&gt;использовать систему атрибутов GCC - не переносимо&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Посмотрим на использование #pragma pack(), конкретно посмотреть подробности на официальной странице: 
&lt;a href=&#34;http://gcc.gnu.org/onlinedocs/gcc/Structure_002dPacking-Pragmas.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://gcc.gnu.org/onlinedocs/gcc/Structure_002dPacking-Pragmas.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;При объявлении структуры, которая будет гоняться по сети рекомендуется отключить выравнивание:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-C&#34; data-lang=&#34;C&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#pragma pack(push,1)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;....&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#pragma pack(pop)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Простой пример:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-C&#34; data-lang=&#34;C&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#pragma pack(push,1)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;test_packed&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;kt&#34;&gt;char&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;kt&#34;&gt;long&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#pragma pack(pop)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;test_unpacked&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;kt&#34;&gt;char&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;kt&#34;&gt;long&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nf&#34;&gt;printf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Packed size: %d, Unpacked size: %d&amp;lt;br/&amp;gt;n&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;k&#34;&gt;sizeof&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;test_packed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;k&#34;&gt;sizeof&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;test_unpacked&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Компилируем и выполняем:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ gcc -o main main.c &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; ./main
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Packed size: 5, Unpacked size: &lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Всё наглядно :)&lt;/p&gt;
&lt;p&gt;Не рекомендуется использовать для обычной работы: в размерах выигрыша почти не получится, а в скорости доступа проиграете.&lt;/p&gt;
&lt;p&gt;UPD: тут &lt;a href=&#34;http://juick.com/864110%7c#864110&#34; target=&#34;_blank&#34;&gt;864110|#864110&lt;/a&gt;
 подкинули ещё ссылку: 
&lt;a href=&#34;http://www.leonerd.org.uk/code/libpack/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.leonerd.org.uk/code/libpack/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;PS по слухам появилось в 2.95.2 или около того.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Мой &#34;C/C&#43;&#43; Coding Style&#34; версия 1.1 &#43; Astyle</title>
      <link>https://htrd.su/blog/2010/08/09/c_coding_style_versija_1.1/</link>
      <pubDate>Mon, 09 Aug 2010 00:08:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/08/09/c_coding_style_versija_1.1/</guid>
      <description>&lt;p&gt;Подправил малость 
&lt;a href=&#34;https://htrd.su/c_c_coding_style/&#34;&gt;стандарт кодирования&lt;/a&gt; для своих проектов, из изменений:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Для функций, в которых производятся действия по инициализации допускается использовать префикс init (сокращенный вариант initialize)&lt;/li&gt;
&lt;li&gt;Убрана жесткая рекомендация по использованию 0 вместо NULL в C++&lt;/li&gt;
&lt;li&gt;Добавлена рекомендация использовать calloc вместо malloc в C&lt;/li&gt;
&lt;li&gt;Добавлена рекомендация добавлять пробел после ключевого слова языка и открывающей скобкой&lt;/li&gt;
&lt;li&gt;Рекомендация не использовать одиночные блоки if, while, for и т.п.&lt;/li&gt;
&lt;li&gt;Добавлена рекомендация по использованию astyle с учетом стандартов перечисленных здесь.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Более подробно про Astyle.&lt;/p&gt;
&lt;p&gt;Сама программа является достаточно мощным форматировщиком кода, причем с приятной документацией (для почти всегда достаточно простого astyle &amp;ndash;help).&lt;/p&gt;
&lt;p&gt;Моя команда astyle выглядит так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;astyle --style&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;ansi --indent&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;spaces&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt; &amp;lt;br/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          --indent-classes --indent-switches --indent-preprocessor --indent-col1-comments &amp;lt;br/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          --max-instatement-indent&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;24&lt;/span&gt; --min-conditional-indent&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt; &amp;lt;br/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          --pad-oper --pad-header --unpad-paren --add-brackets &amp;lt;br/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          --convert-tabs --align-pointer&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;name &amp;lt;br/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &amp;lt;source_file_name&amp;gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;По опциям пробежимся (за подробностями в &lt;code&gt;astyle --help&lt;/code&gt;):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;--style=ansi&lt;/code&gt; - базовый стиль форматирования, что бы на каждый чих установки не делать&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--indent=spaces=4&lt;/code&gt; - выравнивание пробелами, использовать 4 оных&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--indent-classes&lt;/code&gt; - делать отступ для protected:, private: и т.д.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--indent-switches&lt;/code&gt; - делать отступ у case внутри switch&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--indent-preprocessor&lt;/code&gt; - отступ у многострочных макроопределений&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--indent-col1-comments&lt;/code&gt; - делать отступ однострочным комментариям (???)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--max-instatement-indent=24&lt;/code&gt; - при разбивке выражения на строки, следующая строка обычно выравнивается по предыдущей, в частности, по открывающей скобке. Это опция ограничивает максимальный отступ в 24 символа&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--min-conditional-indent=4&lt;/code&gt; - ??? задал по аналогии :)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--pad-oper&lt;/code&gt; - делает отступы вокруг операторов, после запятых, точек с запятой, если просто -  делает более удобочитаемыми математические выражения&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--pad-header&lt;/code&gt; - делает отступы после ключевых слов языка и перед открывающимися скобками (у if, while, for и т.д.)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--unpad-paren&lt;/code&gt; - а вот ненужые удаляет (типа после функции), можно использовать только когда нужно&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--add-brackets&lt;/code&gt; - обрамляет однострочные блоки в фигурные скобки&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--convert-tabs&lt;/code&gt; - преобразует табуляцию в пробелы (эквивалентное количество, задано выше)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--align-pointer=name&lt;/code&gt; сдвигает *, &amp;amp; в определении к имени переменной, т.е. преобразует &lt;code&gt;char* ptr&lt;/code&gt; или &lt;code&gt;char * ptr&lt;/code&gt; -&amp;gt; &lt;code&gt;char *ptr&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>OpenOffice: не получается отредактировать содержимое (Readonly content cannot be changed)</title>
      <link>https://htrd.su/blog/2010/08/08/2010-08-08_18.45_openoffice_nepoluchaetsja_otredaktirovat_soderzhimoe_readonly_content_cannot_be_changed/</link>
      <pubDate>Sun, 08 Aug 2010 18:45:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/08/08/2010-08-08_18.45_openoffice_nepoluchaetsja_otredaktirovat_soderzhimoe_readonly_content_cannot_be_changed/</guid>
      <description>&lt;p&gt;В случае когда включен режим редактирования файла (кнопка на панели &amp;ldquo;Edit file&amp;rdquo; нажата), права доступа к файлу разрешают доступ и в директории можно создавать/удалять файлы, всяких ACL и selinux при этом не используется. В свойствах файла пароля на редактирования не стояло.&lt;/p&gt;
&lt;p&gt;При всех этих условиях, меня ввело в замешательство сообщение, при попытке отредактировать файл:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2010-08-08_18.45_openoffice_nepoluchaetsja_otredaktirovat_soderzhimoe_readonly_content_cannot_be_changed/screen_shoot-20100808-185524.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Оказалось (для меня): в OpenOffice можно блокировать отдельные секции для редактирования, поэтому бредем в Format -&amp;gt; Sections и наблюдаем такую картину:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2010-08-08_18.45_openoffice_nepoluchaetsja_otredaktirovat_soderzhimoe_readonly_content_cannot_be_changed/screen_shoot-20100808-185440.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Обращаем внимание на раздел &amp;ldquo;Write protection&amp;rdquo; и снимаем отметку &amp;ldquo;Protected&amp;rdquo; для всех нужных нам секций.&lt;/p&gt;
&lt;p&gt;PS для русской версии OpenOffice, я думаю, сами разберетесь.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Дачи президента не будет на п-ове Гамова?</title>
      <link>https://htrd.su/blog/2010/08/07/2010-08-07_12.40_dachi_prezidenta_ne_budet_na_p-ov_gamova/</link>
      <pubDate>Sat, 07 Aug 2010 12:40:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/08/07/2010-08-07_12.40_dachi_prezidenta_ne_budet_na_p-ov_gamova/</guid>
      <description>&lt;p&gt;По радио (Приморское радио) сообщили, что строительства резиденции президента на п-ове Гамова ни сейчас ни когда либо в будущем не будет (в т.ч. таки запросили экспертную оценку у ДВО РАН).&lt;/p&gt;
&lt;p&gt;В интернетах подтверждения найти не могу пока, видать такие новости &amp;ldquo;неформат&amp;rdquo;, но если это так, то мне очень приятно.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Конкурс &#34;Системный администратор 2010&#34;</title>
      <link>https://htrd.su/blog/2010/08/04/2010-08-04_02.38_konkurs_sistemnyj_administrator_2010/</link>
      <pubDate>Wed, 04 Aug 2010 02:38:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/08/04/2010-08-04_02.38_konkurs_sistemnyj_administrator_2010/</guid>
      <description>&lt;p&gt;Заполучил статус &amp;ldquo;ГУРУ&amp;rdquo;, но&amp;hellip; с моей удачей, в розыгрыш не попал, не получил ни кружки ни футболки, только сертификат&amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;http://admin2010.ru/cert/get/d96699d66bd5aacfdcb80109de2bd600&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;По странице 
&lt;a href=&#34;http://admin2010.ru/answers&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;правильных ответов&lt;/a&gt; у меня все 19 ответов верные (про творческие вопросы 20 и 21 там ничего нет, если только они в оценке как-то учавствовали, но я хз)&lt;/p&gt;
&lt;p&gt;В общем, такие дела :) хотя конкурс туфтовый конечно.&lt;/p&gt;
&lt;p&gt;UPD: картинка недоступна, как вернуть и получить - хз. Пост чисто для хронологии&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Вот приехали мы на Путятин... (с)</title>
      <link>https://htrd.su/blog/2010/08/04/2010-08-04_01.07_vot_priexali_my_na_putjatin..._s/</link>
      <pubDate>Wed, 04 Aug 2010 01:07:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/08/04/2010-08-04_01.07_vot_priexali_my_na_putjatin..._s/</guid>
      <description>&lt;p&gt;Кто в теме, по поводу заголовка, - бурные продолжительные аплодисменты стоя :)&lt;/p&gt;
&lt;p&gt;На конец июня - начало августа (07.30&amp;mdash;08.1,2) сестренка провела агитационную работу: нужно ехать на о.Путятина, какая бы погода не была. Зная, что у меня наступила, малость, черная полоса во всяких начинаниях, до последнего никому не сообщал об окончательной идее поездки, не смотрел на прогноз погоды: дабы не сглазить.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;strong&gt;о.Путятина, краткая историческая и географическая справка&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Этот остров получил своё название в честь адмирала Путятина Е.В., возглавившего в октябре 1852 года первую русскую экспедицию из Кронштадта к берегам Японии. В состав экспедиции вошли фрегат &amp;ldquo;Паллада&amp;rdquo; и шхуна &amp;ldquo;Восток&amp;rdquo;, а целью похода было заключение дипломатических и торговых отношений России с Японией.&lt;/p&gt;
&lt;p&gt;Остров Путятина расположен южнее города Фокино, недалеко от поселка Дунай. От материка остров отделяет четырехкилометровый пролив с постоянным прибрежным течением. Протяженность острова составляет 14 км при максимальной ширине 5 км и минимальной 1 км. В самой низменной, заболоченной области острова, почти на километровом пространстве, раскинулось озеро Гусиное.&lt;/p&gt;
&lt;p&gt;Морское побережье отличается значительной изрезанностью береговой линии и многочисленными бухтами с прекрасными пляжами. Полное отсутствие подлеска, отличные газоны, аккуратно &amp;ldquo;подстриженные&amp;rdquo; небольшими стадами пятнистого оленя, создают превосходные условия для его рекреационного использования.&lt;/p&gt;
&lt;p&gt;На берегу бухты Назимова расположен поселок Путятин, основанный русским предпринимателем Старцевым, именем которого названа самая высокая гора острова. Его усилиями на острове были заложены обширные фруктовые сады, построен кирпичный завод, проложена железная дорога на конной тяге, велось активное строительство. Благодаря обширным торговым связям не только на внутреннем, но и на внешнем рынке, остров за несколько лет несказанно преобразился. До наших дней сохранились постройки тех лет, одичавшие потомки его фруктовых деревьев и добрая память в устных преданиях &amp;ldquo;аборигенов&amp;rdquo;. С чувством глубокой признательности неутомимому труженику на живописной сопке, неподалеку от поселка, был установлен бюст этому замечательному человеку.&lt;/p&gt;
&lt;p&gt;На острове Путятина и вблизи него находятся 3 из 5 памятников природы. В первую очередь - это озеро Гусиное — естественный обширный водоем с пресной водой и несколькими плантациями чудесного лотоса, высоко чтимого в восточных странах.&lt;/p&gt;
&lt;p&gt;Между островом Аскольд и островом Путятина находится уникальная природная достопримечательность - камни Унковского. Небольшой скалистый остров, являющийся единственным в этом районе местом гнездовья тихоокеанской чайки, в конце весны превращается в шумный птичий базар.&lt;/p&gt;
&lt;p&gt;На острове Путятина и вблизи него существует большое количество необычных объектов: скала Ирецкого, подводный грот у мыса Шулепникова, пещера, скалы Петух и Слон т.д. Развитие рекреационного комплекса городского округа позволит обеспечивать потребности российских и иностранных граждан в разнообразных туристических услугах.&lt;/p&gt;
&lt;p&gt;На территории городского округа выявлено 3 месторождения полезных ископаемых с эксплуатационными запасами 6212,57 тыс.м3: «Морское» - производственная мощность по добыче строительного камня – 24,0 тыс.м3/год, диоритовых порфиритов – от 6 до 40 тыс.м3/год. «Тихоокеанское» - производственная мощность по добыче алевролитов 3,0 тыс.м3, аргиллитов – 3,0 тыс.м3; «Прибойное» – производственная мощность по добыче песка – 1,0 тыс.м3.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;И вот четверг, дальше уже тянуть нельзя. Звоню Серёге, сообщаю, что едем на три дня, в не зависимости от погоды. Есть машина и 1 свободное место (не совсем, но при желании - впихнулись бы :)), но отъезд с угольной в 5 утра (дабы успеть на 9ти часовой паром и не терять полностью первый день), так что приезжай с ночевой в пятницу вечером&amp;hellip; Пауза, решили окончательно созвониться в пятницу, где в итоге и получилось, что едем на двух машинах в количестве 6ти человек: Я, сестренка (Надя), Катя, Серёга, Таня, Жанна.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2010-08-04_01.07_vot_priexali_my_na_putjatin..._s/dsc00606.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Первый экипаж, в составе: Серёга, Таня, Жанна, запланировал ехать в пятницу вечером, узнать о проблемах в пути (типа разрешения и т.п.((К слову сказать, теперь никаких разрешений не нужно (узнали в кассе парома), стоимость машины 1875 рублей с водителем, за пассажиров по 75 рублей с верху, для туристов проезд 75 рублей, дети до 7 лет бесплатно, ходят дополнительные коммерческие рейсы для машин, стоимость, вроде, 7500, раскидывается по количеству машин. Основное расписание будет в фотографиях, хотя оно и не поменялось с прошлого года))).&lt;/p&gt;
&lt;p&gt;Ранним субботним утром произошла &amp;ldquo;встреча на Эльбе&amp;rdquo;: перезнакомились, кто не был знаком друг с другом, Надя с Серёгой поехали ставить машины на единственную стоянку в Дунае (после автостанции смотрим по левой стороне, почти перед самым съездом на грунтовку в сторону переправы). Я тем временем разогрел воды на кофей - устроить подобие завтрака. После произвели ревизию возможностей рюкзаков Тани и Жанны (ну&amp;hellip; несколько они не соответствовали туристским понятиям :)), в результате, по крайней мере палатка (при помощи веревки и такой-то матери) была прикреплена к рюкзаку.&lt;/p&gt;
&lt;p&gt;Пока завтракали, да ждали плашкоут начал накрапывать, обещанный на субботу синоптиками, дождь. Решили перебираться под крышу в зал ожидания около касс. Там, у кого были, натянули чехлы на рюкзаки, достали в куртки, я замотался в пончо (наверное внушая страх и ужас в лица окружающих :)).&lt;/p&gt;
&lt;p&gt;И вот долгожданная баржа, неторопясь грузимся, по обычаю залазим на корму, хоть и крапает дождик. 20 минут пути и мы на острове. На подходе дождь почти прекращается, что не могло не порадовать.&lt;/p&gt;
&lt;p&gt;Быстро набрасываем рюкзаки и топаем в сторону магазина, где закупаем остатки продуктов, таких как хлеб, огурцы и печеньки. Следующая остановка - водокачка, где заполнили емкости с водой (шли на пляж, на котором пресной воды нет: или второй-пятый или третий-пятый, не помню точно). После одевания, явно потяжелевших, рюкзаков поневоле вспомнилось: &amp;ldquo;По туристам&amp;rdquo;, - скомандовали рюкзаки и мерзко захихикали.&lt;/p&gt;
&lt;p&gt;По дороге топаем, болтаем, я напеваю известный мне репертуар песенок, получается как обычно, но и оперные певцы на ходу, с рюкзаком за спиной, обычно не поют :) В результате ловко и незаметно пролетает почти вся дорога, и становится ребром финальный вопрос: идем на песчаный пляж или на каменный, мнения разделяются на две равные части, но в результате приходим к консенсусу - не понравится на каменном пляже, идем на песчаный&amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2010-08-04_01.07_vot_priexali_my_na_putjatin..._s/dsc00609.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;И тут оказалось, что я просто плохой дипломат, достаточно было сказать - идем на пляж с крупным песком :) Хотя я пляжи по дну обычно оцениваю, ну да ладно, мотаем на ус, не пугаем человеков в следующий раз. Радость всех поднял и тот факт, что на пляже больше никого не было! Однако досталось и немного огорчения: ладно мусор намытый прибоем (хотя тоже дикость), но на стоянках же за собой убрать можно, не так тяжело тащить упакованный в мешки мусор, все равно он весит много легче того, что вы тащили сюда&amp;hellip; Но это так, крик в пустоту, оставленные литровые бутылки водки много объясняют.&lt;/p&gt;
&lt;p&gt;Итак первый день на пляже начался около 12 часов дня, выбрали место, поставили палатки, укрепив их изрядно крупными камнями - колья тут не помощь. Мы с Серегой решили опробовать и искупались. Я этим открыл морской сезон в этом году (до этого были только речные и ручьиные :)).&lt;/p&gt;
&lt;p&gt;Но тут сказался ранний утренний подъем (а кто и вообще не спал - Я, например): есть никто не изъявил желания разбрелись по палаткам, Я малость поспал. Когда проснулся и вылез, оказалось, что сестренка уже почти приготовила суп, вроде как кушать уже начало хотеться :)&lt;/p&gt;
&lt;p&gt;Пока она его доделывала, с Серёгой натаскали ещё камней покрупнее, одно бревнышко, поставили колья и натянули тент - импровизированная кухня-столовая-укрытие от солнца, а ещё и место ночлега для особо оторванных (Меня в первую ночь и меня и Тани во вторую), получилось на славу.&lt;/p&gt;
&lt;p&gt;А время уже постепенно близилось к ночеру. Медленно и размеренно поглотили обедо-ужин, настал черед вечерних бесед. После чего было принято единогласное решение о вскрытии вина, но, как обычно, наши воспаленные умы не решились употреблять его как есть, а сделали глинтвейн-лайт, в который из всего, что только туда нужно, ложилась только корица и сахар :) Его достоинств это не отменило, а теплая компания с лихвой зашлифовала и недостатки.&lt;/p&gt;
&lt;p&gt;Тем временем меня чего-то опять начало малость тянуть в сон, это моё желание совпало с общественным: &amp;ldquo;Залезть в одну палатку, болтать и играть в игры&amp;rdquo;, я решил не поддерживать сообщество и забраться поспать. Сна как такового не вышло, поэтому выдавал через стенку свои комментарии по поводу игры &amp;ldquo;Контакт&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Когда же игровой запал стал сходить на нет, туда же стал сходить и мой сон. Решил выбраться подышать воздухом&amp;hellip; И сразу схватил такую зуботряску, какой давно не помню, тем не менее, малость одевшись, быстро пришёл в себя, решил вытаскивать пенку и спальник - спать под тентом. Народ тем временем расползался по своим спальным местам. Я же сходил помочил ноги в море, в большую кружку залил воды и засыпал туда полуспелого шиповника, устроить себе ночное (уже) чаепитие. Пока отвар готовился сон опять решил посетить мою голову, в результате, дождавшись полной готовности, отрубил газ и залег спать&amp;hellip;&lt;/p&gt;
&lt;p&gt;А дождик то пытался идти, то прекращал&amp;hellip;&lt;/p&gt;
&lt;p&gt;А комаров оказалось уйма и злющие все, как некормленые&amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2010-08-04_01.07_vot_priexali_my_na_putjatin..._s/dsc00618.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Проснулся, думал уже утро: вокруг светло, на небе облака, а можно различить даже крупные песчинки и свет такой загадочные, вообще красота. На часах оказалось 3 ночи, решил что луна пробивается по мере сил сквозь, уже неплотную, завесу облаков. Полежал, послушал шум прибоя, поглядел на моргающий глазок маяка на о.Аскольд, потом опять провалился в сон.&lt;/p&gt;
&lt;p&gt;&amp;lt;WRAP center round box 80%&amp;gt;
&lt;strong&gt;о.Аскольд, краткая историческая и георгафическая справка&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Остров Аскольд административно относиться к городскому округу ЗАТО город Фокино. Отделен от материка и от соседнего острова Путятина одноименным проливом.Остров был известен еще морякам государства Бохай. Позднее его посещали китайские золотоискатели и добытчики морской капусты. В 1859 году остров исследовали и описали моряки клипера «Стрелок», давшие ему имя Маячный. В 1862 году полковником Бабкиным, остров был переименован в Аскольд, в честь одного из первых русских винтовых фрегатов «Аскольд».Постоянного населения нет, кроме смотрителей маяков и работников метеостанции.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;История&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Остров был известен еще морякам государства Бохай. Много раз суда с бохайскими послами проплывали мимо него в Японию. Его прекрасно знали китайские золотоискатели и добытчики морской капусты. У первых он носил называние Лефу, что можно перевести как Добычливый, вторые называли его Циндао, что означает — Зелёный остров. В 1859 г. моряки русского клипера «Стрелок», первыми начавшие описывать эти берега, назвали его Маячный, считая, что остров самой природой создан для этого. Соседний, расположенный севернее, получил имя графа Путятина.&lt;/p&gt;
&lt;p&gt;Проливу, разделяющему острова, дали имя одного из первых русских винтовых фрегатов «Аскольд». Почти посредине пролива расположился островок из подводных и надводных скал. Самая высокая достигает 40 м. Они носят название камни Унковского. Скалы представляют большую навигационную опасность, и потому об их существовании моряков предупреждают два светящих навигационных знака.&lt;/p&gt;
&lt;p&gt;Проводившая в 1862—63 гг. более подробное гидрографическое описание залива экспедиция подполковника Бабкина, посчитав, что название острова Маячный может ввести мореплавателей в заблуждение, дала ему название по проливу. С того времени он и носит имя варяжского князя Аскольда. В 1892 г. командование крепости Владивосток решило создать на острове постоянный наблюдательный пост, связав его со штабом телеграфной линией. Но главной задачей, которую поставил штаб крепости перед аскольдовцами, было наблюдение за попытками японцев поставить перед проливом Босфор Восточный минные заграждения.&lt;/p&gt;
&lt;p&gt;Туманы, постоянно закрывающие подходы к нему, закрывали видимость наблюдателям крепости. Своей выгнутой стороной остров обращен к северу, а южная сторона, обращенная к морю, образует бухту которая носит имя клипера «Наездник». На ее берегу расположен приисковый поселок, построенный еще в 1876 г. золотопромышленником Кустером. Позднее, на сопке появилась метеостанция. И девушкам-гидронаблюдателям приходилось четыре раза в день совершать прогулки по лестнице. Триста метров вниз, триста метров вверх. Для защиты острова от высадки десанта было сооружено несколько дотов. Но это считалось маловероятным, так как все водное пространство перед ним обстреливала «Ворошиловская батарея».&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Природа&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;В конце 19 века на должность управляющего прииском на острове Аскольд владелец пригласил польского ссыльнопоселенца Михаила Янковского. Кроме выполнения прямых обязанностей Янковский занялся разведением на острове пятнистых оленей. Стадо прекрасно акклиматизировалось и быстро увеличилось. В 1888 г. право на охоту на них было передано Владивостокскому обществу любителей охоты, с обязанностью заботы о воспроизведении стада. За 10 лет количество оленей выросло с 800 до 3000 голов, и очень долго Аскольд оставался единственным в мире питомником пятнистых оленей.
&lt;/WRAP&gt;&lt;/p&gt;
&lt;p&gt;Проснулся, как обычно, рано, но вставать желания не было, валялся. Первой пташкой оказалась Таня, поставил разогреваться приготовленный с вечера отвар шиповника: он оказывается такой насыщенный цвет дает. Постепенно проснулись и вылезли все остальные.&lt;/p&gt;
&lt;p&gt;А небо тем временем становилось всё яснее и яснее, а море все более располагало залезть в него&amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2010-08-04_01.07_vot_priexali_my_na_putjatin..._s/dsc00624.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Так медленно и размеренно тянулось время: поджаривались на солнышке бултыхались в море, я сходил по пляжу, притащил немного дровишек на вечерний костер и глинтвейн. Но для оно не хватало самого главного ингредиента: вина, поэтому в полдень в деревню за водой, хлебом и ингредиентами для глинтвейна отправляется небольшая экспедиция из меня, Тани и Жанны. Дорога получилась короткой и душевной: разговоры, малость поддувает ветерок. На водокачке малость охладились холодной водой, дошли до магазина, закупили все заказы. На обратном пути мой рюкзак потяжелел на 15 литров воды. Всё таки неудобно когда весь груз лежит внизу рюкзака: приходится идти сильно нагнувшись вперед, прямо как столетний дед :)&lt;/p&gt;
&lt;p&gt;После последнего подъема на полянке сделали привальчик, далее последний аккорд и мы в лагере. А там нас уже поджидает приготовленный сайровый супчик и чай, а Серёга ещё дровишек подтянул. Дальше такая же размеренная пляжная жизнь, единственно, Надя пособирала мусор по пляжу, да снесла в одно место.&lt;/p&gt;
&lt;p&gt;Часов в семь вечера всем лагерем направились в сторону маяка: там покуражиться, сходить на арку, полюбоваться закатом. Все девчата, кто хотел, забрались на маяк, поизображали перед фотокамерами, кто что мог и что хотел :)&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2010-08-04_01.07_vot_priexali_my_na_putjatin..._s/dsc00648.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;А кто-то просто любовался видами и светился от счастья.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2010-08-04_01.07_vot_priexali_my_na_putjatin..._s/dsc00638.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Со временем все же малость промазали - взяли большой запас, день сейчас ещё длинный, так что, как начало холодать, остались трое самых стойких: Я, Таня, Жанна.&lt;/p&gt;
&lt;p&gt;Пока сидели ждали, болтали, на небе начала закручиваться странная, со всех сторон подозрительная туча: черная, крайне похожая на грозовую и металась по небу взад-вперед и слева-направо как чумная. Решили, что тоже прилетела провожать солнце на ночь.&lt;/p&gt;
&lt;p&gt;С последним бликом солнца отправились в обратный путь. И опять лишний раз подтвердили (дальше поток умных слов и мыслей, кому нужно запасаемся гуголем и википедией :laughing:) - болтология есть наука релятивистская, ибо в процессе разговора (акта болтологии) пространство и время изменяются, а главная задача оной науки состоит в том, что бы определить что именно и как подвержено изменению: а) время ускоряет свой бег, б) материя сжимается, поэтому расстояния становятся меньше и в) все вместе и сразу. По простому: за доброй беседой время летит быстрее, а дорога кажется короче :)&lt;/p&gt;
&lt;p&gt;По приходу в лагерь наблюдаем приготовленный ужин (хотя я согласился только на чай, есть не очень хотелось), сложенный очаг и костер (спасибо Наде, Кате и Серёге).&lt;/p&gt;
&lt;p&gt;Я не долго думая, начал сооружать приспособу для удержания котелка (как громко-то звучит), дабы готовить вкусный напиток :) Тем временем кухня плавно переехала к костру, весь лагерь расположился там же, Я, как главный шаман, корпел над своим варевом, думаю выглядело все достаточно колоритно :)&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://htrd.su/img//post/2010-08-04_01.07_vot_priexali_my_na_putjatin..._s/dsc00676.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;А вокруг уже была ночь.&lt;/p&gt;
&lt;p&gt;Глинтвейн получился (по заверениям окружающих) на славу, на тоже самое и разошелся :) опять душевные беседы, любованием звездным небом, поиском знакомых созвездий (к слову сказать, мне известны только Большая и Малая медведицы, но для направления на север этого обычно достаточно в наших широтах :)), лениво пытались ловить падающие звезды и загадывать желания.&lt;/p&gt;
&lt;p&gt;Сидели так и мирно пока не кончился глинтвейн и не прогорели все дрова, ещё немного полюбовались на тлеющие угли, Катя и Серёга уже к тому времени отправились на боковую. Таня решилась тоже ночевать на свежем воздухе, для чего достала надувной матрас и спальник, я малость прибрался под тентом - сложил посуду, освободил место. А тент (да и палатки и забытые вещи) был весь мокрый от обильно выпавшей росы, что говорило только о &amp;ldquo;убирайте вовремя вещи&amp;rdquo; и &amp;ldquo;ночь будет без дождя&amp;rdquo; :) Наученный опытом прошлой ночи, таки задымил китайскую вонючку, дабы малость оградить себя от ночных кровососов (кстати и оградило, хоть и не полностью).&lt;/p&gt;
&lt;p&gt;Пока укладывались вели разговоры, хоть и спать хотелось, но как-то слово за слово цеплялось, пока усилием воли не завершили сей процесс :) Ночью несколько раз просыпался поправить вонючку, посмотреть на луну (один раз для этого разбудила Таня, вроде как-то смешно вышло, но видать на автомате и помню плохо =-)). Очень сожалел, что не взял каких-то дополнительных вещей - засунуть в чехол от спальника и сделать подушку (хотя гальки под голову нагреб, но малость не то).&lt;/p&gt;
&lt;p&gt;А утро было сонное: проснулся достаточно рано, но вот открывать глаза и, тем более, вылазить из-под спальника организм крайне не хотел. Он даже на 100% не смог уговориться на это когда проснулась и вылезла из палатки Жанна. Но усилием воли таки поднял :) Ну и весь остальной лагерь начал показывать носы из палаток. Серёга, как самый морж, начал день с заплыва, я побрел собирать и мыть посуду, каждый занялся своим кемпинговым делом (загорать и вялится тоже дело на кемпинге, пока оно не причиняет никому неудобств :)).&lt;/p&gt;
&lt;p&gt;Солнышко уже начинало кочегарить (хорошая смена кочегаров попалась, да) вовсю&amp;hellip;&lt;/p&gt;
&lt;p&gt;Не выдержав накала, почти всей бандой решаемся на заплыв, но осиливают его только четверо: и вправду, за ночь море малость перемешало и около берега образовалась целая полоса достаточно прохладной воды, а в метрах 50 уже достаточно теплая. Но вода спокойная, в общем - красота и благодать.&lt;/p&gt;
&lt;p&gt;Собранный в прошлый день мусор решаем спалить (может кого шокирует, диоксины там, но, во первых, сами мы его весь вынести были не в состоянии, а во вторых, на острове он и так скорее всего был бы спален), и тут меня, как кто-то под руку вел: не стал бросать пакеты в костер (разложенный специально для этого). В одном из пакетов оказался почти полный баллон полироли для мебели, вот бы бахнуло под ухом&amp;hellip; Немного поиспользовав его как огнемет, протыкаю (с большим пшшшшшшшшшш) и утилизирую обгорать в костер. Единственно, что не сделали, нужно было стекло и железо выгрести из кострища и закопать, но надеемся, кто будет на том пляже после нас, не сильно на нас будет ругаться и соберет остальной мусор.&lt;/p&gt;
&lt;p&gt;А время близится к моменту когда нужно собираться и топать на плашкоут&amp;hellip; А так не хочется!&lt;/p&gt;
&lt;p&gt;Тем не менее собираемся, отправление намечаем на 15.30 (время до переправы 2 часа, так, с запасиком). Оставляю до последнего тент, но когда одно из креплений срывает несильным порывом ветра (а простоял без приключений с первого дня), решаем что это знак и окончательно сворачиваемся.&lt;/p&gt;
&lt;p&gt;На лагерь приятно посмотреть - не оставили ни одной соринки, люди человеки, поступайте так же!&lt;/p&gt;
&lt;p&gt;Обратный путь проходит малость в грустном настроении, может у каждого причина была своя, но думаю не ошибусь, если буду утверждать, что толика этой грусти была о том, что покидаем это место.&lt;/p&gt;
&lt;p&gt;Дальше был паром, погрузка на машины и обратный путь, а за спиной три дня в чудном месте в хорошей компании и поджаренное на солнышке тело :)&lt;/p&gt;
&lt;p&gt;PS правки и дополнения по ходу всплытия в воспоминаниях, первая пачка фото (в том числе и низкого качества): 
&lt;a href=&#34;http://hatred.homelinux.net/~hatred/foto/2010.07.30-08.1,2_Putyatin.rar&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://hatred.homelinux.net/~hatred/foto/2010.07.30-08.1,2_Putyatin.rar&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;PPS фото от Серёги: 
&lt;a href=&#34;http://picasaweb.google.com/skoulik/iccwLF02&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://picasaweb.google.com/skoulik/iccwLF02&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Jabber в Vkontakte</title>
      <link>https://htrd.su/blog/2010/07/14/2010-07-14_01.34_jabber_v_vkontakte/</link>
      <pubDate>Wed, 14 Jul 2010 01:34:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/07/14/2010-07-14_01.34_jabber_v_vkontakte/</guid>
      <description>&lt;p&gt;Кому интересно: 
&lt;a href=&#34;http://vk.com/help.php?page=jabber&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://vk.com/help.php?page=jabber&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;В ростере отображает список друзей, в онлайне тех, кто в онлайне на сайте (или самом жабер-клиенте), отправленные сообщения через клиент доступны как отправленные личные сообщения на сайте. Через редактирование профиля можно подправить аватару, остальное - ниа (или не все, я сайт попробовал указать - обломс). Статусы и муды пока, вроде, не поддерживаются.&lt;/p&gt;
&lt;p&gt;При добавлении учетной записи обязательно включить &amp;ldquo;Аутентификацию открытым текстом&amp;rdquo;, не супер секурно, но&amp;hellip;&lt;/p&gt;
&lt;p&gt;И ещё, постоянно в почту летят уведомления о новых сообщениях, нужно выключать.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>QAvr - графический интерфейс для работы с avrdude</title>
      <link>https://htrd.su/blog/2010/07/12/2010-07-12_18.24_qavr_-_graficheskij_interfejs_dlja_raboty_s_avrdude/</link>
      <pubDate>Mon, 12 Jul 2010 18:24:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/07/12/2010-07-12_18.24_qavr_-_graficheskij_interfejs_dlja_raboty_s_avrdude/</guid>
      <description>&lt;p&gt;Подготовил и выложил пилотную версию 0.1&lt;/p&gt;
&lt;p&gt;Подробности: 
&lt;a href=&#34;https://htrd.su/proekty/qavr/start/&#34;&gt;QAvr&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;В будущем планируется довести до состояние менеджера проекта для совместной работы с geany.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Arduino как программатор для контроллеров Atmel и сопутствующий софт</title>
      <link>https://htrd.su/blog/2010/06/27/2010-06-27_18.48_arduino_kak_programmator_dlja_kontrollerov_atmel_i_soputstvujuschij_soft/</link>
      <pubDate>Sun, 27 Jun 2010 18:48:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/06/27/2010-06-27_18.48_arduino_kak_programmator_dlja_kontrollerov_atmel_i_soputstvujuschij_soft/</guid>
      <description>&lt;p&gt;За последние дни окончательно убедился, что Arduino не просто игрушка, а настроящие ворота для начинающих постигать мир программирования микроконтроллеров Atmel.&lt;/p&gt;
&lt;p&gt;К чему это я, а к тому, что плата Arduino может выступить в роли программатора для самостоятельных конструкций на контроллерах. Как минимум существует два варианта, про которые можно прочитать на сайте 
&lt;a href=&#34;http://freeduino.ru&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://freeduino.ru&lt;/a&gt;: 
&lt;a href=&#34;http://freeduino.ru/arduino/isp.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://freeduino.ru/arduino/isp.html&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Меня больше заинтересовал вариант BitBang программатора, т.к. не нужно каждый раз заливать прошивку в Arduino, когда нужно прошить внешний контроллер. Кроме того, можно прошить сам контроллер в кроватке (допустим если вышел из строя, количество же циклов перезаписи ограничено или залить обновленный boot loader).&lt;/p&gt;
&lt;p&gt;В статье выше сказано, что подходят не все платы, это верно, но главное, что бы это была USB плата и на ней был чип FT232R/FT232RL, а вот разьём X3 можно распаять и самому (как это сделал Я - при помощи олово-отсоса очистил отверстия, поставил планочку и пропаял).&lt;/p&gt;
&lt;p&gt;Но на этом наши приключения не заканчиваются. Возникает вопрос - чем шить? Ведь BitBang (&amp;ldquo;ножкодрыгание&amp;rdquo;) это достаточно не стандартная для общепринятых API процедура. Соответственно этим нужно заниматься через специализированные библиотеки, коих под Linux я раскопал две для чипов от FTDI:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;libftd2xx&lt;/strong&gt; - закрытая (проприетарная) библиотека от производителя, есть в вариантах для i686 и x86_64 (и естественно для Windows), скачать можно тут: 
&lt;a href=&#34;http://www.ftdichip.com/Drivers/D2XX.htm&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.ftdichip.com/Drivers/D2XX.htm&lt;/a&gt;, там в же в архиве есть заголовочные файлы, а на сайте можно скачать 
&lt;a href=&#34;http://www.ftdichip.com/Documents/ProgramGuides/D2XX_Programmer%27s_Guide%28FT_000071%29.pdf&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;PDF с руководтством программиста&lt;/a&gt;. Вообще, там же рекомендую скачать и документацию на саму микросхему 
&lt;a href=&#34;http://www.ftdichip.com/Documents/DataSheets/DS_FT232R.pdf&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;FT232R/FT232RL&lt;/a&gt; и информацию про работу в 
&lt;a href=&#34;http://ftdichip.com/Documents/AppNotes/AN232R-01_FT232RBitBangModes.pdf&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;BitBang режиме&lt;/a&gt; (дальше потребуется). Библиотека доступна в ArchLinux через AUR.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;libftdi&lt;/strong&gt; - библиотека с открытыми исходными кодами, из зависимостей только libusb, а так как последняя может быть собрана и для Windows, теоретически и данная библиотека тоже. Домашняя страница: 
&lt;a href=&#34;http://www.intra2net.com/en/developer/libftdi/download.php&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.intra2net.com/en/developer/libftdi/download.php&lt;/a&gt;, имеется так же в репозитории extra в ArchLinux.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Для первой библиотеки (&lt;strong&gt;libftd2xx&lt;/strong&gt;), есть 
&lt;a href=&#34;http://savannah.nongnu.org/patch/?6886&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;набор патчей&lt;/a&gt; для  
&lt;a href=&#34;http://www.nongnu.org/avrdude/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;avrdude&lt;/a&gt;. На сайте FreeDuino есть ссылка на сборку для Windows. Я выложил в AUR правила для сборки последней версии avrdude с этими патчами: 
&lt;a href=&#34;http://aur.archlinux.org/packages.php?ID=38481&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;avrdude-serjtag&lt;/a&gt; (потому как патчи изначально родились в недрах проекта serjtag).&lt;/p&gt;
&lt;p&gt;На сайте &lt;strong&gt;libftdi&lt;/strong&gt; лежит патч для древней версии uisp, поэтому подумав, и потратив 1.5 дня сделал на основе патчей serjtag свой патч 
&lt;a href=&#34;http://aur.archlinux.org/packages/avrdude-ftdi/avrdude-ftdi/ftdi-bitbang-5.10-1.patch&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;ftdi-bitbang-5.10-1.patch&lt;/a&gt;, который использует эту библиотеку. Проверил прошивая и устанавливая fuse-биты на ATTiny2313. Естественно сделал правила для сборки и поместил в AUR: 
&lt;a href=&#34;http://aur.archlinux.org/packages.php?ID=38481&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;avrdude-ftdi&lt;/a&gt;. Вариант, если нужно отстроить на архитектуру отличную от x86/x86_64 или если бинарная версия проприетарной библиотеки рушится на вашей системе (тем более, что обновлялась она с 2008 года).&lt;/p&gt;
&lt;p&gt;Вот 
&lt;a href=&#34;http://easyelectronics.ru/skorostnoj-avr-usb-programmator-na-ft232rl-bez-vspomogatelnogo-kontrollera.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;тут&lt;/a&gt; товарищ Di Halt более подробно рассказывает про программатор на такой же микросхеме, которая стоит на Arduino. Там он говорит об одной неприятной особенности: после прошивки не отпускается линия RESET и решает проблему аппаратно. Можете поступить так же, но оказалось что, что в исходных кодах avrdude достаточно добавить одну строчку - выставление высокого уровня на линии RESET перед закрытием порта и выходом. Патч делающий это для использования с &lt;strong&gt;libftd2xx&lt;/strong&gt; и набором патчей serjtag можно поглядеть тут: 
&lt;a href=&#34;http://aur.archlinux.org/packages/avrdude-serjtag/avrdude-serjtag/clean-reset-pin.diff&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://aur.archlinux.org/packages/avrdude-serjtag/avrdude-serjtag/clean-reset-pin.diff&lt;/a&gt;. При сборке пакетов avrdude-serjtag и avrdude-ftdi изменения отраженные в этом патче уже применены, так что, счастливым обладателям ArchLinux достаточно просто собрать и поставить пакет :)&lt;/p&gt;
&lt;p&gt;Немножно хотел бы остановиться на описании программатора в конфигурационном файле avrdude.conf, особенно назначение цифр для задания линий. Выглядит это примерно так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#arduino duemilanove
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;programmer
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  id    = &amp;#34;duemilanove&amp;#34;;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  desc  = &amp;#34;FT232R Synchronous BitBang&amp;#34;;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  type  = ft245r;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  miso  = 3;  # CTS X3(1)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  sck   = 5;  # DSR X3(2)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  mosi  = 6;  # DCD X3(3)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  reset = 7;  # RI X3(4)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;programmer
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  id    = &amp;#34;ft245r&amp;#34;;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  desc  = &amp;#34;FT245R Synchronous BitBang&amp;#34;;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  type  = ft245r;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  miso  = 1; # D1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  sck   = 0; # D0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  mosi  = 2; # D2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  reset = 4; # D4
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Не мог понять, пока не почитал внимательно приложение к даташиту FT232R подробно рассказывающее про Bit Bang режимы этой микросхемы. Если коротко: для программатора нужно 4 линии, микросхема предоставляет 8 линий, на которых можно играться уровнями. Естественно в каждом конкретном программаторе могут использоваться любые 4 из этих 8ми линий.&lt;/p&gt;
&lt;p&gt;Каждая линия отражает бит с номером от 0 до 7. На Arduino на разъем X3 выведены контакты микросхемы с номерами 11, 9, 10, 6, подключаемых по следущей схеме:
11 - MISO
9 - SCK
10 - MOSI
6 - RESET
В документации находим табличку, в которой представлены номера выводов и какой бит они предоставляют, и получаем такую таблицу соответствий:
^ Имя линии ^ Номер вывода микросхемы ^ Имя вывода ^ Номер вывода разъема X3 ^ Номер/Имя бита (согласно таблицы) ^
| MISO      | 11                      | CTS        | 1                       | D3                                |
| SCK       | 9                       | DSR        | 2                       | D5                                |
| MOSI      | 10                      | DCD        | 3                       | D6                                |
| RESET     | 6                       | RI         | 4                       | D7                                |&lt;/p&gt;
&lt;p&gt;Смотрим на последнюю колонку: вот они откуда и берутся эти самые 3, 5, 6, 7 в описании программатора в avrdude.conf. Т.е. эти номера - это номера битов. С остальными программаторами дело обстоит схожим образом. Одного я не понял, почему этого нет в документации? Или плохо искал?&lt;/p&gt;
&lt;p&gt;На этом пока все, сейчас обощаю идеи о среде разработки (на данный момент на базе Makefile) и опубликую заметку.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>pacman 3.4.0</title>
      <link>https://htrd.su/blog/2010/06/26/2010-06-26_12.52_pacman_3.4.0/</link>
      <pubDate>Sat, 26 Jun 2010 12:52:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/06/26/2010-06-26_12.52_pacman_3.4.0/</guid>
      <description>&lt;p&gt;Все подробности тут:  
&lt;a href=&#34;http://www.archlinux.org/news/503/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.archlinux.org/news/503/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;От себя, на что стоит обратить внимание:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;-U&lt;/strong&gt; теперь в большинстве случаев работает как -S, а точнее:
* обработка зависимостей
* обработка конфликтов (если пакет заменяет какой-то пакет, раньше нужно было сначала удалить установленный, потом ставить локальный новый)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;makepkg&lt;/strong&gt; теперь завершает свою работу с ошибкой, если какая-то вызываемая программа завершается не с нулевым кодом возврата. Таким образом не нужно больше писать &amp;ldquo;&lt;code&gt;|| return 1&lt;/code&gt;&amp;rdquo; после команды, если дальнейшая сборка при ошибке не имеет смысла. С другой стороны, когда завершение программы с не нулевым кодом возврата это нормальное поведение (предположим наложение патчей с опцией -N, когда патч был уже наложен), нужно будет после команды поставить &amp;ldquo;&lt;code&gt;|| true&lt;/code&gt;&amp;rdquo; что бы сборка не завершилась с ошибкой.&lt;/li&gt;
&lt;/ol&gt;</description>
    </item>
    
    <item>
      <title>Долго запускаются Xlib/Xt приложения</title>
      <link>https://htrd.su/blog/2010/06/22/xt_prilozhenija/</link>
      <pubDate>Tue, 22 Jun 2010 01:53:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/06/22/xt_prilozhenija/</guid>
      <description>&lt;p&gt;Столкнулся давно с проблемой: приложения написанные с использованием только Xlib и Xt, например,&lt;strong&gt;xclock&lt;/strong&gt;, &lt;strong&gt;xfontsel&lt;/strong&gt;, или удобная тюнинговалка &lt;strong&gt;xvidtune&lt;/strong&gt;, или мелкая оповещалка &lt;strong&gt;xmessage&lt;/strong&gt;, очень долго запускаются, до 15-20 секунд, при этом давая значительную нагрузку на процессор. Если запускать в терминале, то обычно получаем, среди прочего, такую строку:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Warning: Missing charsets in String to FontSet conversion
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Так как эти приложения использовал достаточно редко, то не обращал внимание, но сегодня что-то достало, решил разобраться. Беглый поиск привел на эту страницу: 
&lt;a href=&#34;http://www.holoweb.net/~liam/fonts/common-linux-font-problems.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.holoweb.net/~liam/fonts/common-linux-font-problems.html&lt;/a&gt; (искать по фразе &amp;ldquo;Everything starts up really slowly&amp;rdquo;). Информация старая, ещё для XFree86, ориентировочно 2002 года, но, с небольшими поправками, не потерявшая актуальность и сегодня.&lt;/p&gt;
&lt;p&gt;В общих чертах: проблема в fontconfig и локалях Xorg, где указаны кодировки для шрифтов, которых нет в системе. Путей решения получается три:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Запускать через приведенный там скрипт &lt;strong&gt;nolocale&lt;/strong&gt;, добавив туда ещё сточку:&lt;code&gt;bashexport LANG=&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Поставить шрифты со всеми нужными кодировками&lt;/li&gt;
&lt;li&gt;Отредактировать файл локали, убрав (закоментировав) использование несуществующих кодировок&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Так как первый способ неудобен, а второй накладен, решил сделать по последнему варианту. Итак, рецепт для ArchLinux (с небольшой адаптацией последнего пункта подходит и для любого другого дистрибутива)&lt;/p&gt;
&lt;h1&gt;&lt;/h1&gt;
&lt;p&gt;Для начала нужно понять шрифтов в каких кодировках у нас нет.&lt;/p&gt;
&lt;p&gt;Для этого бредём в директорию &lt;strong&gt;/usr/share/X11/locale/&amp;lt;ВАША_ЛОКАЛЬ&amp;gt;&lt;/strong&gt;. У меня локаль &lt;code&gt;ru_RU.UTF-8&lt;/code&gt;, поэтому директория: &lt;strong&gt;/usr/share/X11/locale/ru_RU.UTF-8&lt;/strong&gt; и выполним там команду:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat XLC_LOCALE &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep name &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep -v &lt;span class=&#34;s1&#34;&gt;&amp;#39;object_name&amp;lt;br/&amp;gt;|encoding_name&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;В результате получим примерно такой вывод:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		name	ISO8859-1:GL
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		name	ISO8859-1:GR
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		name	KOI8-R:GR
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		name	MICROSOFT-CP1251:GR
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		name	ISO8859-5:GR
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		name	JISX0208.1983-0:GL
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		name	KSC5601.1987-0:GL
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		name	GB2312.1980-0:GL
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		name	JISX0201.1976-0:GR
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		name	ISO10646-1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;На то, что после двоеточия не обращаем внимания, итого, кодировка состоит из двух частей, разделенных &amp;ldquo;-&amp;rdquo;: CHARSET_REGISTRY и CHARSET_ENCODING (за подробностями сюда: 
&lt;a href=&#34;http://lesstif.sourceforge.net/doc/super-ux/g1ae04e/chap5.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://lesstif.sourceforge.net/doc/super-ux/g1ae04e/chap5.html&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Теперь запускаем программку &lt;strong&gt;xfontsel&lt;/strong&gt;, придется подождать малость (с чем собственно мы сейчас и боремся).&lt;/p&gt;
&lt;p&gt;Итак, шрифты в X11 издревле задавались хитрой строчкой, поля в которой были разделены знаком &amp;ldquo;-&amp;rdquo;, последние два элемента как раз и есть CHARSET_REGISTRY и CHARSET_ENCODING (в терминах xfontsel: rgstry и encdng соответственно). Теперь просто проверяем по последним двум полям, что есть все комбинации из вышеполученных rgstry-encdng (на регистр внимания не обращаем), те, которые не находим помечаем.&lt;/p&gt;
&lt;p&gt;Теперь возвращаемся в каталог с локалью, открываем файл &lt;strong&gt;XLC_LOCALE&lt;/strong&gt; на редактирование находим секцию с несуществующей кодировкой и комментируем её.&lt;/p&gt;
&lt;p&gt;У себя я не нашел шрифтов в кодировке &lt;code&gt;microsoft-cp1251&lt;/code&gt; (есть только cp1252), поэтому полностью закомментированная секция выглядит теперь так:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#	fs3 class (MICROSOFT-CP1251)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#fs3	{
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#	charset	{
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#		name	MICROSOFT-CP1251:GR
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#	}
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#	font	{
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#		primary	MICROSOFT-CP1251:GR
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#	}
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Все, сохраняемся и выходим. Проверяем, приложения должны стартовать практически мгновенно.&lt;/p&gt;
&lt;p&gt;Ну и последний штрих для ArhLinux. Дабы уберечь от перезаписывания этого файла при обновлениях пакета &lt;strong&gt;libx11&lt;/strong&gt; (а именно ему принадлежат эти файлы локали), его нужно &amp;ldquo;замаскировать&amp;rdquo;. Для чего открываем на редактирование файл /etc/pacman.conf,
находим параметр &lt;em&gt;NoUpgrade&lt;/em&gt; и приводим его примерно к такому виду:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;NoUpgrade    =  usr/share/X11/locale/ru_RU.UTF-8/XLC_LOCALE
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Теперь при обновлениях, если файл в пакете изменился, он будет ставиться под именем XLC_LOCALE.pacnew и соответствующим предупреждением на экране и в логе. Дальнейшие шаги по поддержанию в актуальном состоянии зависят от вас.&lt;/p&gt;
&lt;p&gt;Ну и последнее замечание, описанной процедурой можно и просто найти шрифтов в каких кодировках нет в системе и просто поставить их, если они у вас имеются :)&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Xorg 1.8 в extra</title>
      <link>https://htrd.su/blog/2010/06/21/2010-06-21_14.14_xorg_1.8_v_extra/</link>
      <pubDate>Mon, 21 Jun 2010 14:14:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/06/21/2010-06-21_14.14_xorg_1.8_v_extra/</guid>
      <description>&lt;p&gt;Собственно сабж, подробности: 
&lt;a href=&#34;http://www.archlinux.org/news/502/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.archlinux.org/news/502/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Для пользователей старых карт nVidia небольшая засада.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>DigiKam 1.3.0</title>
      <link>https://htrd.su/blog/2010/06/19/2010-06-19_00.30_digikam_1.3.0/</link>
      <pubDate>Sat, 19 Jun 2010 00:30:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/06/19/2010-06-19_00.30_digikam_1.3.0/</guid>
      <description>&lt;p&gt;Несколько версий назад поломали они там поворот JPEG&amp;rsquo;ов, хотя как поломали, переход на новую версию libjpeg был, вот малость API и несогласовалось. И вот, матерясь на версию 1.2 во вторник, подготавливая фото к выкладыванию, сегодня накатываю обновления системы и вижу версию 1.3.0, первым делом опробовал - РАБОТАЕТ :) Сейчас ещё нужно покумекать, как там дела обстоят с PicasaWeb и логинами отличными от вида ИМЯ@gmail.com (ведь мыло то может быть любое).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPD&lt;/strong&gt;: Да и экспорт в PicasaWeb с логинами отличными от ИМЯ@gmail.com тоже заработал, ну чтож, вкусно :)&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>г. Ольховая, 2010.06.12-14</title>
      <link>https://htrd.su/blog/2010/06/15/2010-06-15_17.05_g._olxovaja_2010.06.12-14/</link>
      <pubDate>Tue, 15 Jun 2010 17:05:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/06/15/2010-06-15_17.05_g._olxovaja_2010.06.12-14/</guid>
      <description>&lt;p&gt;В этом году опять повезло, 12 июня выпало на субботу, а, как следствие, сразу образуются три выходных подряд.&lt;/p&gt;
&lt;p&gt;Не долго думая, решил собрать народ, и сходить на Ольховую, а то уже засиделся дома, да и вершин повыше захотелось. Народ собирался вяло, расшевелить получалось слабо. К четвергу собрал только троих: Я, Настя, Серёга. Судьба ещё четверых (одна моя знакомая и трое ею позванных людей, мне не знакомых на тот момент: Аня (знакомая), Ярослава, Лиза и Антон) должна была решиться в пятницу, поэтому распределяя продукты, сделал так, что бы эти две подгруппы были независимы. Просто подводили уже не раз, когда только в транспорте оказывалось, что кто-то проспал, а так получается относительная независимость, при возможности готовки в одном котле :)&lt;/p&gt;
&lt;p&gt;В пятницу покупаю билеты на автобус, идущий на Преображение (отходит в 10.00 от автовокзала, с учетом багажа и предварительной продажи, на троих получается 1000 руб, билеты брал до Монакино), смотрю на места: 37, 38, 41, смутно понимаю, что остальным врядли судьба боготворит ехать одной бандой с нами&amp;hellip;&lt;/p&gt;
&lt;p&gt;В общем так и случилось, они добирались на электричке до Партизанска (да, а Аня проспала), и от туда на перекладных (благо Ярослава гоняла автостопом, но без дорожного атласа в незнакомых местах, трудно бывает)&amp;hellip; В результате по выезду из Сергеевки наш же автобус их и подобрал :)&lt;/p&gt;
&lt;p&gt;И тут оказалось, что они малость не туристы: палатка в руках, спальник в руках, всю экипировку собирали смиру по нитке. Ладно, примерно на такие случаи 20 метров бельевой веревки вожу :laughing:&lt;/p&gt;
&lt;p&gt;Высадили нас перед знаком въезда в Монакино, огляделись, закинули рюкзаки и отправились в путь.&lt;/p&gt;
&lt;p&gt;Дорога сразу не понравилась: видно, что она довольно езженная, широкая и пыльная. А сверху жарит как не в себя. Но буквально через несколько метров рядом с нами останавливается пикапчик, оказался местный егерь (жалко имени не спросил), отличный мужик, малость интересностей рассказал. Забросили ему в кузов рюкзаки и умудрились вшестером впихнуться во внутрь :)&lt;/p&gt;
&lt;p&gt;Добросил он нас не далеко, но как раз провез самый жуткий этап: поля. Сам он поворачивал на базу.&lt;/p&gt;
&lt;p&gt;Скинув рюкзаки занялись делом: примотали всё что можно примотать к рюкзакам веревкой, что бы освободить руки. А мой рюкзак потяжелел на килограмм гречки с рисом :( На речке рядом, запаслись водой (как оказалось - не зря). И шагом марш.&lt;/p&gt;
&lt;p&gt;По дороге ничего особо хорошего рассказать не могу: пылища, машин много (правда больше встречных было, а отставшие Лиза и Ярослава, даже смогли уазик застопить, который до речки их подбросил, после чего сворачивал на боковую, еле видную дорогу вдоль ручья), жирило и с низу (пыль раскаленная была) и сверху. В одном только месте порадовал полоз: проходим, смотрим, из коряги торчит хвост, и буквально сразу вжик, и втянулся, а сантиметров 10 ниже из коряги показалась любопытная морда, что уставилась на нас и как палка стояла, отошли, он малость втянулся, а когда подходили: снова вылазил, мол, что это за создания такие интересные? :)&lt;/p&gt;
&lt;p&gt;Из-за жары снял футболку, повесил на спину и под лямки, что бы рюкзак не натирал, пока дошел до речки (примерно где впадает ключ Карненков (нечетко пропечатано)) - стал похож на африканца. Там мы были в 18.00 (за спиной 3 часа пути). Сделали передышку, искупались (кто хотел) приготовили суп&amp;hellip; А тут вторая новость: вкусовые предпочтения. Я когда сочинял меню и раскладку, всех кто точно едет спросил, кто, что, как. Про новичков не знал, а оказалось: Антон не ест мясо, Ярослава - сало (правда я его, как оказалось, забыл в холодильнике :)), Лиза - лук в супе. Как результат, на вершине варили такой же суп, но уже из расчета на троих (вторая подгруппа решила возвращаться на второй день и на вершине не ночевала), получилось значительно вкуснее (в поход тушенку не брали, использовали сервелат, получилось крайне вполне себе).&lt;/p&gt;
&lt;p&gt;На привал ушло около 2х часов, решили, что по дороге ищем подходящее место и ставим лагерь. Через 30 минут вышли к развилке - прямо дорога к подножию, направо - к пещерам вдоль р.Малая Алексеевка, там же на берегу и поставили лагерь. Буквально рядом есть замечательная заводь в которой милое дело купаться, над заводью нависает скала - красивое место.&lt;/p&gt;
&lt;p&gt;А вот вечерние посиделки, до 2х ночи и вино, как показал следующий день, были явно лишними. Кроме того, пока сидели, я по глупости у тента оставил мешки с едой, так мышки помогли попробовать одну картофелину (прогрызли пакет) и одну пачку гречки. Эту часть продуктов пришлось утилизовать. И вообще, если ночуете под тентом - не трудно подвязать мешок под конек на веревку, благо, обычно, место позволяет.&lt;/p&gt;
&lt;p&gt;Кроме того, утром я и настя нормально встали в 6.30, приготовили завтрак, к семи часам разбудили лагерь, правда встал только Серёга, вторую палатку смогли растолкать только к 8.30-9.00 часам. Как результат смогли выйти только в 10 часов, вместо намеченых 8.00-8.30.&lt;/p&gt;
&lt;p&gt;Где-то через час были у последнего моста, у которого переходили реку вброд, малость отдохнули и ещё через час были у начала маршрута. После выхода на хребтик, остановились, так как начали решать как лучше быть тем, кто сегодня хочет добраться домой. В результате Антон и Ярослава, спрятали свои рюкзаки и решили налегке подняться на вершину, осмотреться и спуститься вниз. Лиза же остается внизу (трудно оказалось её и на хребтик зайти), ждет их до 16.30-17.00, если они не возвращаются, сама отправляется домой. Я такие вещи не люблю, основной подход: или все идем, или все возвращаемся. Но в любом случае, люди должны быть парой - если что случится, что бы хоть один мог найти помощь.&lt;/p&gt;
&lt;p&gt;У начала маршрута, как я думаю, следовало бы сделать привал, но мы сразу пошли на подъем, а недостаток воды, не позволил на переходе сделать привал и приготовить обед, поэтому шел на запасах орехов и изюма в карманах.&lt;/p&gt;
&lt;p&gt;Подъем дался очень тяжко, хотя погода очень способствовала - солнышко выглянуло только под вечер, а так небо было затянуто и поддувал ветерок. Несмотря на всё это сердечко заходилось, а ближе к вершине, после каменистого хребтика, малость недоходя до родников, после прыжка с камушка, уже дали знать и ноги - подкосились, подумал и присел передохнуть, прикрыл глаза и вырубился. Судя по всему, в отключке был около 30 минут, потом проснулся и продолжил путь. В общей сложности подъем у меня занял почти ровно 7 часов, по дороге было два или три 30 минутных передыха. Местами хотелось очень есть, но когда доставал еду, кусок в рот не лез. Сдается мне, что сказалось то (помимо вообще физ подготовки), что мало спали и вино - знакомые признаки интоксикации, хотя вроде и не пили почти, в общем, алкоголь если и принимать, то строго наркомовские 100 грамм, не больше :)&lt;/p&gt;
&lt;p&gt;Уже после каменного хребтика (или как я её назвал &amp;ldquo;каменная грядка&amp;rdquo;), порадовала и живность: дорогу перебежал любопытный бурундук, который не торопился убегать далеко, туристы для него, видать, уже обыденность. Через несколько шагов, буквально из под ног, выскочила полевка и юркнула между камней, но так, что спинка осталась видна, почти сразу развернулась и секунд десять смотрела на меня своими бусинками глаз, после чего скрылась окончательно. Действительно, зверье там уже прикормлено и людей особо не пугается :) Клещей почти не снимали, было похоже на то, что спускающиеся навстречу туристы уже их всех собрали :laughing:&lt;/p&gt;
&lt;p&gt;Когда дошел до родника, счастию не было предела, ведь как приятно вдоволь напиться ледяной, ломящей зубы, сладкой воды (или только мне она показалась сладкой?). Небольшой передых и дорога дальше: сто шажков и отдышаться, сто шажков и отдышаться, пятьсот шажков - присесть и передохнуть пару минут. Но ничего, Я упорный: язык три раза вокруг шеи обмотаю, но до цели доползу, назад не поверну! И дополз же :) Что бы несколько себя оправдать на передышках делал фотографии.&lt;/p&gt;
&lt;p&gt;На подъёме обогнала ещё одна группа туристов: они тащили с собой баню, однин человек - печку и один саму баню и веники, остальные - прочее имущество.&lt;/p&gt;
&lt;p&gt;Пока поднимался, начал задумываться, а чего это я обратно не вижу Антона с Ярословой, ведь они должны были по крайней мере около 2-3 часов назад мне встретится. На вершине все стало на свои места: у костра сидит Антон, Ярославы нет, говорит, пошли вместе на вершину, но возращались не вместе. Как оказалось Ярослава заплутала, но у меня сразу полезли нехорошие мысли. Решили - сейчас малость передохну и пойдем искать. Но Антоха, молодец, сорвался раньше, хорошо, что ничего не случилось, и, буквально тут же, нашлась. Стал вопрос как им возвращаться: уже скоро закат, а в сумерках, достаточно сложно спускаться. Но все же, они решили отправляться. Подробности их обратного пути узнал только на следующий день (все это время было малость не по себе).&lt;/p&gt;
&lt;p&gt;Через час после завершения пути был приготовлен обедо-ужин: вкуснющий рисовый суп (т.к. супы отличались только заправкой: рис, перловка, макароны и т.п., соответственно названия я им давал и этому признаку) =-) Перекус, и уже бодро прыгали по камням смотреть закат. Пока прыгали, прошли мимо стоянки семейной пары и их детей, бросилось в глаза их убежище: четыре кола, высоток около 40-50 см, и сверху натянут полиэтилен, с образованием стенок, получается эдакая коробочка, напротив входа которой горит костер. На обротном пути в наш лагерь присел у них поболтать: дочка у них походница с 1 года и 4 месяцев - носили в детском рюкзаке-люльке на Туманную. Вообще - молодцы, что сказать.&lt;/p&gt;
&lt;p&gt;Там же на камнях, удалось поймать связь, предупредил родных, что таким темпом есть веротяность, что останемся на третью ночевку, посему не волноваться. Кстати про связь, после каменной градки был промежуток в котором было замечено: как начинает дуть ветер - появляется связь, как только он прекращается - исчезает (у меня телефон мерзко пикает, когда ловит и теряет связь), объяснимо, но забавно :)&lt;/p&gt;
&lt;p&gt;Вечером долго не сидели, в 11 часов начало клонить в сон, посему, не стал издеваться над собой, собрал продукты, подвесил на крючек на веревку, на которой был растянут тент, котелок с остатками супа - закрыл и повесил на сук. Сам упаковал себя в спальник и буквально сразу заснул, предварительно завел будильник на 6.30. Спал без задних ног - так сказалась усталость, но проснулся за десять минут до будильника.&lt;/p&gt;
&lt;p&gt;Утром сразу поднялись и побежали на вершину смотреть восход, к сожалению, малость промазали со временем, но красоту это не отменило. Восход бы и так не увидели, ибо на востоке было облачно, но пробивающиеся лучи солнца&amp;hellip; Почти как на библейских картинах :) Вокруг шикарная видимость, хотя и ближние и дальние сопки укутаны голубой дымкой (приморская влажность под 100%) В общем - красота.&lt;/p&gt;
&lt;p&gt;Побродив по вершине, пофотографировавшись, возвратились в лагерь - готовить завтрак и собираться в обратный путь. Стало несколько грустно, но что делать - время поджимает.&lt;/p&gt;
&lt;p&gt;Позавтракали, помыли котелки, запаковали рюкзаки и тронулись.&lt;/p&gt;
&lt;p&gt;И вот спуск, решили идти по тому же маршруту, что и поднимались - другие маршруты оставим на следующие разы :)&lt;/p&gt;
&lt;p&gt;На роднике заправились водой, на каменной грядке отлично ловит Акос, Настя предупредила свою родню о возможной внеплановой ночевки. Буквально после каменной градки встретили двух ребят - Сергея и Николая, они на легке в быстром темпе забирались на гору, сказали им, что скоро родники (они были рады, ибо водичка кончилась) и идти не больше получаса в их темпе. Они же сказали, что внизу, у брода встретили наших, как я понял - Антона и Ярославу, они собирались, следовательно они успешно спустились, дошли до переправы и разбили там лагерь на ночь - не получилось им вернуться в тот же день, но неплохо, главное что все нормально. Поблагодарили их за добрую весть и потопали дальше.&lt;/p&gt;
&lt;p&gt;Спуск дался достаточно легко, занял около 3.5 часов времени, и то, лишние пол-часа из-за меня - под конец отказались держать ноги на спуске, пришлось семенить. Крутые участки, которые можно было легко просмотреть, не мучался и пробегал - так оказалось легче, даже с рюкзаком. Внизу у ручья сделали небольшой передых, залиль два литра воды, бандану на голову смочил и отправились дальше. Примерно через час были на переправе, опять малость привалились, переправились. И буквально сразу видим ребят, которых встретили у каменной грядки - у ни на все про все забег занял около 3-3.5 часов. Молодцы, шустро. Нужно будет попробовать в следующий раз тоже забраться на легке.&lt;/p&gt;
&lt;p&gt;Они окунулись прямо на переправе, я не смог удеражаться и последовал их примеру :) После, они сами предложили подбросить нас до трассы (сами направлялись в Партизанск), мы переглянулись, и без лишних обсуждений согласились. По дороге малость болтали, поделились впечателениями, кто где был, дал ссылку где можно варианты маршрутов посмотреть (на сайте Зеленого). Они рассказали, что на подъеме видели тигриный след - большой и малый, видать тигрица с тигренком, но т.к. по отзывам егеря, зверье тут есть, не думаю, что они будут агрессивны по отношению к человеку, не рыси же все таки.&lt;/p&gt;
&lt;p&gt;Около 17 часов были на федеральной трассе. Распрощались, пожелали доброго пути и новых встреч на тропах.&lt;/p&gt;
&lt;p&gt;Тут я начал вспоминать свои навыки автостопа, скоро остановили машину, водитель правда сказал, я не далеко, подброшу вас до перекрестка на Углекаменск, а то много машин туда едет, что бы вы и вас не вводили в заблуждение, там уже поймаете машину. Спасибо ему за участие, как оказалось, сам он работал в Лозовском заповеднике, так что с такими как мы уже сталкивался, и понимает :)&lt;/p&gt;
&lt;p&gt;Там мы выбрали место наверху пригорка - лучшее место для стопа, обычно у машин там скорость меньше, и где-то около 17.50 поймали машину, за рулём на пассажирском сидении настоящие горцы, а буквально пятью минутами раньше Настя напомнила, как прозвала её сестра меня на прошлогоднем походе на Туманную (я тогда бороду носил) - чечен. А у Сереги в роду тоже чеченцы были, и профиль соответствующий, может это помогло? :))&lt;/p&gt;
&lt;p&gt;Ребята ехали в Уссурийск, согласились нас подбросить сколько смогут по пути&amp;hellip; Ага, подбросить, как мы ехали, я вспомнил слоган: лучше нету самолета, чем любимая тойота, ибо средняя скорость на спидометре была 130 км/час, местами до 150. Таким образом долетели до Шкотово, где по прикидкам через 30-40 минут должна быть электричка, попросили там высадить, поблагодарили и потопали на станцию. Купили билеты, на лавочке перекусили в ожидании элекрички&amp;hellip; А дальше был дом, душ и сон :)&lt;/p&gt;
&lt;p&gt;По приезду домой сразу прозвонился нашим попутчикам: Ярославе и Лизе, оказалось, что добрались отлично, Лизу довезли спелеологи, чуть ли не до самого дома, Ярославу и Антона на следующий день так же на попутке, подобрали в километре от нашей первой ночевки. Все добрались, все здоровы, и я спокойно лег спать.&lt;/p&gt;
&lt;p&gt;Как финал: я в восторге, спать под тентом было не холодно, и даже комфортно, Настя отличный кашевар и всем спасибо за компанию!&lt;/p&gt;
&lt;p&gt;UPD, фото: 
&lt;a href=&#34;http://picasaweb.google.ru/adrozdoff/2010061214&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://picasaweb.google.ru/adrozdoff/2010061214&lt;/a&gt;, а тут одним архивом (в исходном качестве): 
&lt;a href=&#34;http://hatred.homelinux.net/~hatred/foto/tourism/2010.06.12-14_Olhovaya.tar&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://hatred.homelinux.net/~hatred/foto/tourism/2010.06.12-14_Olhovaya.tar&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>epssplit &amp; jpeg2ps</title>
      <link>https://htrd.su/blog/2010/06/09/2010-06-09_04.46_epssplit_jpeg2ps/</link>
      <pubDate>Wed, 09 Jun 2010 04:46:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/06/09/2010-06-09_04.46_epssplit_jpeg2ps/</guid>
      <description>&lt;p&gt;Про эти утилиты писал года три назад в статье: 
&lt;a href=&#34;https://htrd.su/rezka_bolsheformatnyx_izobrazhenij_na_listy_formata_a4_dlja_posledujuschego_skleivanija/&#34;&gt;Резка большеформатных изображений на листы формата А4 для последующего склеивания&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Сейчас дошли руки приготовить пакеты для AUR: 
&lt;a href=&#34;http://aur.archlinux.org/packages.php?ID=37929&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;epssplit&lt;/a&gt;, 
&lt;a href=&#34;http://aur.archlinux.org/packages.php?ID=37930&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;jpeg2ps&lt;/a&gt;, так что, в ArchLinux с установкой стало проще :)&lt;/p&gt;
&lt;p&gt;По поводу преобразование растра в PS/EPS можно почитать в статье Евгения Балдина в &amp;ldquo;Linux Format&amp;rdquo;: 
&lt;a href=&#34;http://wiki.linuxformat.ru/index.php/LXF86:LaTeX#.D0.9A.D0.B0.D0.BA_.D1.81.D0.B4.D0.B5.D0.BB.D0.B0.D1.82.D1.8C_EPS_.D0.B8.D0.B7_.D1.80.D0.B0.D1.81.D1.82.D1.80.D0.B0&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;LaTeX. Часть 4: Графика&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Image Ruler 0.98</title>
      <link>https://htrd.su/blog/2010/06/05/2010-06-05_20.56_image_ruler_0.98/</link>
      <pubDate>Sat, 05 Jun 2010 20:56:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/06/05/2010-06-05_20.56_image_ruler_0.98/</guid>
      <description>&lt;p&gt;&lt;strong&gt;
&lt;a href=&#34;https://htrd.su/proekty/image_ruler/start/&#34;&gt;Image Ruler&lt;/a&gt;&lt;/strong&gt; - небольшой приложение для измерений на сканированных изображениях, например картах.&lt;/p&gt;
&lt;p&gt;По сути анонс, хотя версии были уже выложены.&lt;/p&gt;
&lt;p&gt;Оформил 
&lt;a href=&#34;https://htrd.su/proekty/image_ruler/start/&#34;&gt;страницу проекта&lt;/a&gt; и выложил в для скачивания версию 
&lt;a href=&#34;https://htrd.su/proekty/image_ruler/start/&#34;&gt;0.98&lt;/a&gt;, по сравнению с 0.0.3 изменения:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;исправлена ошибка с расчетом DPI и получением его из изображения (невозможно было активировать)&lt;/li&gt;
&lt;li&gt;косметика интерфейса, приведен к финальному виду.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;К версии 1.00 думаю будет сделано следующее:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;краткое руководство&lt;/li&gt;
&lt;li&gt;измерение в единицах отличных от миллиметров&lt;/li&gt;
&lt;li&gt;оптимизация получения мета-информации из изображения&lt;/li&gt;
&lt;li&gt;перевод на CMake и добавление правил для установки (make install)&lt;/li&gt;
&lt;li&gt;иконку :simple_smile: кстати, кто предложит, должна отображать суть - измерения.&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>В этой стране все для детей</title>
      <link>https://htrd.su/blog/2010/06/04/2010-06-04_12.48_v_ehtoj_strane_vse_dlja_detej/</link>
      <pubDate>Fri, 04 Jun 2010 12:48:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/06/04/2010-06-04_12.48_v_ehtoj_strane_vse_dlja_detej/</guid>
      <description>&lt;p&gt;В 
&lt;a href=&#34;http://lurkmore.ru/%D0%AD%D1%82%D0%B0_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B0&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Этой сране&lt;/a&gt; всегда все для детей, даже отъем помещения у Хореографического училища ДВГУ. Правильно, дети будут здоровее, занимаясь на улице, на свежем воздухе. Или&amp;hellip; будут беречь силы, что бы кричать &amp;ldquo;Россея вперде!&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Пруф: 
&lt;a href=&#34;http://news.vl.ru/vlad/2010/06/03/horeograf/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://news.vl.ru/vlad/2010/06/03/horeograf/&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Документация для проектов</title>
      <link>https://htrd.su/blog/2010/06/03/2010-06-03_17.52_dokumentacija_dlja_proektov/</link>
      <pubDate>Thu, 03 Jun 2010 17:52:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/06/03/2010-06-03_17.52_dokumentacija_dlja_proektov/</guid>
      <description>&lt;p&gt;Как жаль, что очень многие сейчас забыли про проект 
&lt;a href=&#34;http://linuxgazette.net/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;LinuxGazette&lt;/a&gt;, а ведь он живет и здравствует по сей день.&lt;/p&gt;
&lt;p&gt;Как жаль что очень многие современные разработчики в сфере FOSS не читали статью от туда:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://linuxgazette.net/issue71/arndt.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;A Need for Documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;И не знают про цикл статей &amp;ldquo;Writing Documentation&amp;rdquo; в этой самой LinuxGazette:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://linuxgazette.net/issue73/spiel.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Writing Documentation - Part 1: POD&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://linuxgazette.net/issue74/spiel.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Writing Documentation, Part II: LaTeX with latex2html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://linuxgazette.net/issue75/spiel.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Writing Documentation, Part III: DocBook/XML&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://linuxgazette.net/issue76/spiel.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Writing Documentation, Part IV: Texinfo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;В частности, POD оказался достаточно простым и ненакладным способом писать документации в виде страниц руководств (man-pages).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Люди, разработчики, программисты! Пишите документацию! Хорошая документация очень привлекает внимание к проекту, помогает разобраться в нем, легче написать какие-то модификации, патчи и, в конечном итоге, помочь ему и вам.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Примеры отвратительного документирования? Да пожалуй почти все творения FreeDesktop.org (по моему мнению, так их деятельность, это диверсия в рядах FOSS), к примеру HAL, для которого сначала написали реализацию, и, по-моему, до сих пор не существует спецификации, как результат - им показалось что HAL тяжел, разделили его на отдельные демоны-сервисы, а кто был завязан на него получили головную боль (особенно кто пользовался монтированием флешек/дисков, или тот же Xorg, которому пришлось придумывать свою систему для настроек подключенных на горячую устройств ввода).&lt;/p&gt;
&lt;p&gt;Или xdg-utils&amp;hellip; посмотрите man xdg-open (навеяно дискуссией в #archlinux-ru@FreeNode), вроде и есть, ну никакой ясности не вносит - кто, что будет открывать, какие браузеры или переменные окружения будут использоваться, какие окружения рабочего стола поддерживаются.&lt;/p&gt;
&lt;p&gt;Ну и последнее, вы что нибудь можете сказать о загадочной утилите &lt;strong&gt;ck-launch-session&lt;/strong&gt; из комплекта PolKit? Нет? Да она даже на &lt;em&gt;&amp;ndash;help&lt;/em&gt; или &lt;em&gt;-h&lt;/em&gt; подсказки не выдает, кто она и что делает. А ведь применяется много кем, кто не использует gdm/kdm/etcdm, в знакомой мантре в &lt;strong&gt;.xinitrc&lt;/strong&gt;:
exec ck-launch-session startkde&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Странная проблема с WiFi на EeePC 1000HA</title>
      <link>https://htrd.su/blog/2010/06/03/2010-06-03_17.28_strannaja_problema_s_wifi_na_eeepc_1000ha/</link>
      <pubDate>Thu, 03 Jun 2010 17:28:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/06/03/2010-06-03_17.28_strannaja_problema_s_wifi_na_eeepc_1000ha/</guid>
      <description>&lt;p&gt;Проблема сводится к тому, что при запуске Xorg связь начинает умирать. Для восстановления достаточно переключиться в консоль. Причины и связи мне не понятны, и вообще фантастически выглядит решение проблемы: перепрошивка точки доступа. Вот где тут связь???&lt;/p&gt;
&lt;p&gt;Пока разбирался, научился запускать драйвер ath5k - просто для его включения нужно активизировать 2 rfkill устройсва:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;сначала eeepc-wlan (см вывод &lt;strong&gt;rfkill list&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;после появится ещё одно - phy0, и активировать его&lt;/li&gt;
&lt;li&gt;затем, в обязательном порядке - &lt;strong&gt;ifconfig wlan0 up&lt;/strong&gt;
после чего можно начинать работать.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Точка доступа (DWL-G700AP) же, была последним шагом - нет нормальной связи, так хоть поэксперементирую. Прошивку туда залил Wive-ng, она на базе ядра Linux 2.4, и очень значительно расширяет возможности точки, превращая её в полноценный маленький сервер с управлением по ssh/telnet:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;pppoe-client&lt;/li&gt;
&lt;li&gt;pptp-client&lt;/li&gt;
&lt;li&gt;dhcp&lt;/li&gt;
&lt;li&gt;iptables/nat&lt;/li&gt;
&lt;li&gt;балансировка трафика&lt;/li&gt;
&lt;li&gt;роуминг (прозрачный переход от точки доступа к точке доступа)&lt;/li&gt;
&lt;li&gt;vlan&lt;/li&gt;
&lt;li&gt;широкий диапазон регулировки мощности (больше чем в базовой поставке, но для значений больше 20, следует применять принудительное охлаждение)&lt;/li&gt;
&lt;li&gt;smbclient (но&amp;hellip; не могу представить для чего :) если бы было память побольше, можно было бы туда запихнуть rtorrent с веб-интерфейсом (или даже без оного), а так&amp;hellip;)&lt;/li&gt;
&lt;li&gt;и ещё всего и вся по мелочи&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;В результате и связь при запущенных Xorg поднялась. Хитрая уличная магия.&lt;/p&gt;
&lt;p&gt;По прошивке и вообще точке доступа:&lt;/p&gt;
&lt;p&gt;General:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.lan23.ru/wifi/DWLG700/UpgradeG700.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.lan23.ru/wifi/DWLG700/UpgradeG700.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://www.g700ap.narod.ru&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://www.g700ap.narod.ru&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Wive:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://wive.sf.net&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://wive.sf.net&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&#34;http://voituk.kiev.ua/2008/09/16/dlink-dwl-g700ap/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://voituk.kiev.ua/2008/09/16/dlink-dwl-g700ap/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Wive-ng:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href=&#34;http://wive-ng.sf.net&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://wive-ng.sf.net&lt;/a&gt; - тут и документация и внятно по русски&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>OpenID</title>
      <link>https://htrd.su/blog/2010/05/27/2010-05-27_14.25_openid/</link>
      <pubDate>Thu, 27 May 2010 14:25:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/05/27/2010-05-27_14.25_openid/</guid>
      <description>&lt;p&gt;Всё, снова работает на сайте. Под формой ввода логина/пароля ссылка для входа при помощи OpenID&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Cmake, Qt4 и кросс-компиляция</title>
      <link>https://htrd.su/blog/2010/05/26/2010-05-26_16.32_cmake_qt4_i_kross-kompiljacija/</link>
      <pubDate>Wed, 26 May 2010 16:32:00 +1000</pubDate>
      <author>adrozdoff@gmail.com (Alexander Drozdov)</author>
      <guid>https://htrd.su/blog/2010/05/26/2010-05-26_16.32_cmake_qt4_i_kross-kompiljacija/</guid>
      <description>&lt;p&gt;Есть у меня проектик, он как тестовый полигон, хоть код и достаточно в большом количестве поддается только одной характеристике: исторически сложилось. 