<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>M.A. Hakim</title><subtitle>Живу на Бали с 2012, без нарушений пищевого поведения и тантры. Пропагандирую здравый смысл и благополучие. Чистота - залог здоровья!</subtitle><author><name>M.A. Hakim</name></author><id>https://teletype.in/atom/ind_ex-51282</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/ind_ex-51282?offset=0"></link><link rel="alternate" type="text/html" href="https://teletype.in/@ind_ex-51282?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=ind_ex-51282"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/ind_ex-51282?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-04-07T07:51:50.429Z</updated><entry><id>ind_ex-51282:module-web-components</id><link rel="alternate" type="text/html" href="https://teletype.in/@ind_ex-51282/module-web-components?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=ind_ex-51282"></link><title>Модульные веб-компоненты</title><published>2025-12-15T11:33:37.295Z</published><updated>2025-12-15T11:33:37.295Z</updated><summary type="html">Вложение (один веб-компонент внутри другого через &lt;slot&gt;) — это стандартный и очень мощный способ построения интерфейсов. Он отлично работает и является основой модульного дизайна веб-компонентов.</summary><content type="html">
  &lt;section style=&quot;background-color:hsl(hsl(199, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;MyDA&quot;&gt;Вложение (один веб-компонент внутри другого через &lt;code&gt;&amp;lt;slot&amp;gt;&lt;/code&gt;) — это стандартный и очень мощный способ построения интерфейсов. Он отлично работает и является основой модульного дизайна веб-компонентов.&lt;/p&gt;
    &lt;p id=&quot;JUzb&quot;&gt;Вот как это будет работать.&lt;/p&gt;
  &lt;/section&gt;
  &lt;h2 id=&quot;NJXK&quot;&gt;Как элементы будут адресоваться в DOM.&lt;/h2&gt;
  &lt;h3 id=&quot;EFMC&quot;&gt;1. Как будет выглядеть HTML-структура&lt;/h3&gt;
  &lt;p id=&quot;Gjvm&quot;&gt;Представим два компонента: &lt;code&gt;ui-card&lt;/code&gt; (карточка-контейнер) и &lt;code&gt;user-avatar&lt;/code&gt; (аватарка пользователя).&lt;/p&gt;
  &lt;p id=&quot;HOYw&quot;&gt;&lt;strong&gt;Разметка на странице (Light DOM):&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;D07s&quot;&gt;html&lt;/p&gt;
  &lt;pre id=&quot;TJ8l&quot; data-lang=&quot;html&quot;&gt;&amp;lt;ui-card&amp;gt;
    &amp;lt;h2&amp;gt;Профиль пользователя&amp;lt;/h2&amp;gt;
    &amp;lt;!-- Вложенный веб-компонент, который станет содержимым слота --&amp;gt;
    &amp;lt;user-avatar user-id=&amp;quot;123&amp;quot;&amp;gt;&amp;lt;/user-avatar&amp;gt;
&amp;lt;/ui-card&amp;gt;
&lt;/pre&gt;
  &lt;p id=&quot;GaCD&quot;&gt;Use code with caution.&lt;/p&gt;
  &lt;h3 id=&quot;H6xD&quot;&gt;2. Как это работает с точки зрения Shadow DOM и слотов&lt;/h3&gt;
  &lt;p id=&quot;wwJN&quot;&gt;Когда браузер рендерит &lt;code&gt;ui-card&lt;/code&gt;, он берет содержимое (включая &lt;code&gt;user-avatar&lt;/code&gt;) и &lt;em&gt;перенаправляет&lt;/em&gt; его туда, где находится &lt;code&gt;&amp;lt;slot&amp;gt;&lt;/code&gt; внутри Shadow DOM компонента &lt;code&gt;ui-card&lt;/code&gt;.&lt;/p&gt;
  &lt;p id=&quot;PnCp&quot;&gt;&lt;strong&gt;Внутреннее устройство &lt;code&gt;ui-card&lt;/code&gt; (Shadow DOM):&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;YIHH&quot;&gt;html&lt;/p&gt;
  &lt;pre id=&quot;DEpN&quot; data-lang=&quot;html&quot;&gt;&amp;lt;!-- Это Shadow DOM компонента ui-card --&amp;gt;
&amp;lt;div class=&amp;quot;card-wrapper&amp;quot;&amp;gt;
    &amp;lt;slot name=&amp;quot;header&amp;quot;&amp;gt;&amp;lt;/slot&amp;gt; &amp;lt;!-- Сюда пойдет h2, если задать ему slot=&amp;quot;header&amp;quot; --&amp;gt;
    &amp;lt;div class=&amp;quot;body&amp;quot;&amp;gt;
        &amp;lt;!-- А сюда пойдет все остальное содержимое, включая user-avatar --&amp;gt;
        &amp;lt;slot&amp;gt;&amp;lt;/slot&amp;gt; 
    &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/pre&gt;
  &lt;p id=&quot;3VGU&quot;&gt;Use code with caution.&lt;/p&gt;
  &lt;p id=&quot;1sqk&quot;&gt;&lt;strong&gt;Визуальный результат в браузере:&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;9c2Y&quot;&gt;В конечном счете, компонент &lt;code&gt;user-avatar&lt;/code&gt; отображается &lt;em&gt;внутри&lt;/em&gt; визуальной области компонента &lt;code&gt;ui-card&lt;/code&gt;, но он сохраняет свой &lt;strong&gt;собственный контекст DOM&lt;/strong&gt; и свою &lt;strong&gt;собственную функциональность веб-компонента&lt;/strong&gt;.&lt;/p&gt;
  &lt;h3 id=&quot;ayNs&quot;&gt;3. Адресация и доступ через DOM&lt;/h3&gt;
  &lt;p id=&quot;fUx5&quot;&gt;Это ключевой момент. Вложенный веб-компонент (&lt;code&gt;user-avatar&lt;/code&gt;) сохраняет свое место в &lt;strong&gt;Light DOM&lt;/strong&gt; родительской страницы, а не перемещается физически в Shadow DOM. Слот — это лишь точка вставки (placeholder).&lt;/p&gt;
  &lt;h2 id=&quot;xSrx&quot;&gt;Доступ из родительской страницы (Light DOM)&lt;/h2&gt;
  &lt;p id=&quot;3nPN&quot;&gt;Вы обращаетесь к вложенному компоненту как обычному элементу на странице:&lt;/p&gt;
  &lt;p id=&quot;GIac&quot;&gt;javascript&lt;/p&gt;
  &lt;pre id=&quot;DmkW&quot; data-lang=&quot;tsx&quot;&gt;// Отлично работает, так как элемент находится в основном DOM
const avatar = document.querySelector(&amp;#x27;user-avatar&amp;#x27;);
avatar.setUserId(456); 
&lt;/pre&gt;
  &lt;h3 id=&quot;kVVL&quot;&gt;Доступ из родительского компонента (&lt;code&gt;ui-card&lt;/code&gt;)&lt;/h3&gt;
  &lt;p id=&quot;pzBa&quot;&gt;Доступ к элементам, которые вставлены через слоты, требует использования специального API:&lt;/p&gt;
  &lt;p id=&quot;PFaQ&quot;&gt;javascript&lt;/p&gt;
  &lt;pre id=&quot;nFhN&quot; data-lang=&quot;jsx&quot;&gt;// В JavaScript компонента ui-card:
const slot = this.shadowRoot.querySelector(&amp;#x27;slot&amp;#x27;);

// Получаем массив всех &amp;quot;вставленных&amp;quot; элементов
const assignedElements = slot.assignedElements(); 

// Ищем конкретно наш вложенный компонент в этом массиве
const userAvatarComponent = assignedElements.find(el =&amp;gt; el.tagName === &amp;#x27;USER-AVATAR&amp;#x27;);

if (userAvatarComponent) {
    userAvatarComponent.setUserId(789);
}
&lt;/pre&gt;
  &lt;p id=&quot;BKSX&quot;&gt;Use code with caution.&lt;/p&gt;
  &lt;h3 id=&quot;wkjo&quot;&gt;Доступ из вложенного компонента (&lt;code&gt;user-avatar&lt;/code&gt;)&lt;/h3&gt;
  &lt;p id=&quot;yQhI&quot;&gt;Вложенный компонент не знает, что он находится внутри слота. Он просто работает как обычно:&lt;/p&gt;
  &lt;p id=&quot;KGEy&quot;&gt;javascript&lt;/p&gt;
  &lt;pre id=&quot;EION&quot; data-lang=&quot;javascript&quot;&gt;// В JavaScript компонента user-avatar
this.addEventListener(&amp;#x27;click&amp;#x27;, () =&amp;gt; {
    console.log(&amp;#x27;Клик по аватару!&amp;#x27;);
    // Он может найти своего непосредственного родителя в Light DOM (это будет &amp;lt;ui-card&amp;gt;)
    console.log(this.parentElement); 
});
&lt;/pre&gt;
  &lt;p id=&quot;OmrO&quot;&gt;Use code with caution.&lt;/p&gt;
  &lt;h2 id=&quot;1WbN&quot;&gt;Резюме&lt;/h2&gt;
  &lt;ul id=&quot;yHVe&quot;&gt;
    &lt;li id=&quot;Tuvl&quot;&gt;&lt;strong&gt;Работает:&lt;/strong&gt; Да, отлично работает.&lt;/li&gt;
    &lt;li id=&quot;FhQR&quot;&gt;&lt;strong&gt;Инкапсуляция:&lt;/strong&gt; Каждый компонент полностью инкапсулирован своим Shadow DOM и логикой.&lt;/li&gt;
    &lt;li id=&quot;uFF9&quot;&gt;&lt;strong&gt;Адресация:&lt;/strong&gt; Вложенный компонент остается в &lt;strong&gt;Light DOM&lt;/strong&gt;, и к нему можно получить доступ как из основного скрипта страницы, так и из родительского компонента через API слотов (&lt;code&gt;assignedElements()&lt;/code&gt;).&lt;/li&gt;
  &lt;/ul&gt;

</content></entry><entry><id>ind_ex-51282:villa-bali-canggu</id><link rel="alternate" type="text/html" href="https://teletype.in/@ind_ex-51282/villa-bali-canggu?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=ind_ex-51282"></link><title>Покупка виллы на Бали</title><published>2025-12-07T18:49:16.778Z</published><updated>2025-12-07T19:16:53.810Z</updated><summary type="html">Посмотрите что говорит ИИ поисковик от гугла, как будто ничего и не произошло, а на рынке просто скандал и разруха - цены летят вниз, время покупать!</summary><content type="html">
  &lt;p id=&quot;2F3f&quot;&gt;Посмотрите что говорит ИИ поисковик от гугла, как будто ничего и не произошло, а на рынке просто скандал и разруха - цены летят вниз, время покупать!&lt;/p&gt;
  &lt;p id=&quot;ckGj&quot;&gt;С Гугл ИИ поисковик по запросу «купить виллу бали чангу»&lt;/p&gt;
  &lt;p id=&quot;WlKI&quot;&gt;Купить виллу в районе Чангу на Бали возможно, при этом цены могут значительно варьироваться в зависимости от размера, расположения и удобств.&lt;/p&gt;
  &lt;h2 id=&quot;OFzd&quot;&gt;Обзор рынка и цен&lt;/h2&gt;
  &lt;ul id=&quot;44qS&quot;&gt;
    &lt;li id=&quot;8dak&quot;&gt;&lt;strong&gt;Диапазон цен:&lt;/strong&gt; Цены на виллы в Чангу начинаются примерно от &lt;strong&gt;$150 000 – $200 000&lt;/strong&gt; за небольшие объекты и могут достигать &lt;strong&gt;$500 000 – $600 000&lt;/strong&gt; и выше за более просторные и роскошные виллы.&lt;/li&gt;
    &lt;li id=&quot;4RWC&quot;&gt;&lt;strong&gt;Средняя стоимость:&lt;/strong&gt; Медианная стоимость виллы в Чангу составляет около &lt;strong&gt;314 749 €&lt;/strong&gt; (примерно $340 000 USD), при средней цене около &lt;strong&gt;2 443 € за м²&lt;/strong&gt;.&lt;/li&gt;
    &lt;li id=&quot;dhn3&quot;&gt;&lt;strong&gt;Типы недвижимости:&lt;/strong&gt; В основном предлагаются традиционные балийские виллы, но также есть и современные варианты.&lt;/li&gt;
    &lt;li id=&quot;Jtx1&quot;&gt;&lt;strong&gt;Популярные локации:&lt;/strong&gt; Востребованы виллы в таких районах, как Умалас, которые быстро развиваются и предлагают двухэтажные дома площадью около 186 м² за $590 000.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;WtUG&quot;&gt;Что учитывать при покупке&lt;/p&gt;
  &lt;ul id=&quot;nux4&quot;&gt;
    &lt;li id=&quot;B7x1&quot;&gt;&lt;strong&gt;Право собственности для иностранцев:&lt;/strong&gt; Иностранные граждане обычно не могут владеть землей в Индонезии напрямую (форма собственности &lt;em&gt;Freehold&lt;/em&gt;), но могут приобрести недвижимость через специальные схемы, например, используя договор аренды (форма собственности &lt;em&gt;Leasehold&lt;/em&gt;) на длительный срок (до 25-30 лет с возможностью продления) или через индонезийскую компанию (PT PMA).&lt;/li&gt;
    &lt;li id=&quot;taX1&quot;&gt;&lt;strong&gt;Расположение:&lt;/strong&gt; Чангу известен своими пляжами (Нелаян, Бату-Болонг), рисовыми полями, кафе и школами серфинга. Выбор конкретного места зависит от ваших предпочтений: близость к пляжу, уединение или доступ к инфраструктуре.&lt;/li&gt;
    &lt;li id=&quot;tQTk&quot;&gt;&lt;strong&gt;Инфраструктура:&lt;/strong&gt; Многие виллы предлагают частные бассейны, полностью оборудованные кухни, кондиционеры и высокоскоростной Wi-Fi.&lt;/li&gt;
    &lt;li id=&quot;Tx36&quot;&gt;&lt;strong&gt;Специалисты:&lt;/strong&gt; Для безопасного проведения сделки рекомендуется обратиться к местным агентствам недвижимости или юристам, которые специализируются на сделках с недвижимостью для иностранцев и обеспечивают полное сопровождение.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;iDde&quot;&gt;Чтобы получить актуальные предложения, рекомендуется связаться с агентствами недвижимости, работающими в этом районе.&lt;/p&gt;
  &lt;p id=&quot;H82I&quot;&gt;ИИ может ошибаться. Советуем проверять его ответы.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;Mhxc&quot;&gt;какие сайты продают и наиболее надежны, дай список ссылок&lt;/p&gt;
  &lt;p id=&quot;W2Ej&quot;&gt;Для поиска и покупки виллы в Чангу рекомендуется использовать как крупные международные порталы по недвижимости, так и специализированные местные балийские агентства, которые предлагают экспертную помощь, в том числе юридическую поддержку для иностранцев.&lt;/p&gt;
  &lt;p id=&quot;srH4&quot;&gt;Надежные сайты и агентства недвижимости на Бали&lt;/p&gt;
  &lt;p id=&quot;NTux&quot;&gt;Вот список надежных ресурсов, где можно найти актуальные предложения по продаже вилл:&lt;/p&gt;
  &lt;ul id=&quot;Upaj&quot;&gt;
    &lt;li id=&quot;EvVB&quot;&gt;&lt;strong&gt;Prian.ru&lt;/strong&gt; (https://prian.ru/indonesia/bali/canggu/) — крупный международный портал с объявлениями от различных агентств и застройщиков, в том числе на русском языке.&lt;/li&gt;
    &lt;li id=&quot;tu7m&quot;&gt;&lt;strong&gt;Tranio&lt;/strong&gt; (https://tranio.ru/indonesia/bali/canggu/) — еще один известный международный агрегатор недвижимости, предлагающий широкий выбор объектов в Чангу.&lt;/li&gt;
    &lt;li id=&quot;xOMv&quot;&gt;&lt;strong&gt;Indonesia-Real.Estate&lt;/strong&gt; (https://indonesia-real.estate/ru/property/bali/canggu/villas/) — специализированный портал, сфокусированный на рынке Индонезии, предлагает виллы напрямую от застройщиков и агентств.&lt;/li&gt;
    &lt;li id=&quot;flzR&quot;&gt;&lt;strong&gt;Bali Home Immo&lt;/strong&gt; (bali-home-immo.com) — лицензированное местное агентство, базирующееся в Чангу. Специализируется на продаже и аренде, предоставляет юридическую помощь и консультации.&lt;/li&gt;
    &lt;li id=&quot;m3jV&quot;&gt;&lt;strong&gt;Bali Exception&lt;/strong&gt; (baliexception.com) — местное агентство, предлагающее эксклюзивные и проверенные объекты недвижимости, включая виллы в Чангу.&lt;/li&gt;
    &lt;li id=&quot;BKSf&quot;&gt;&lt;strong&gt;Mata Property Bali&lt;/strong&gt; (https://matapropertybali.com/) — агентство, специализирующееся на элитной недвижимости (freehold и leasehold), предлагает объекты с полной юридической проверкой.&lt;/li&gt;
    &lt;li id=&quot;sjE2&quot;&gt;&lt;strong&gt;Villas of Bali&lt;/strong&gt; (https://www.balivillasales.com/ru/category/canggu/) — специализированный сайт сфокусированный на продаже вилл на Бали.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;420H&quot;&gt;Рекомендации по надежности&lt;/p&gt;
  &lt;ul id=&quot;miWR&quot;&gt;
    &lt;li id=&quot;XgYq&quot;&gt;&lt;strong&gt;Работа с агентом:&lt;/strong&gt; В связи с особенностями индонезийского законодательства для иностранцев (ограничения на владение землей Freehold), &lt;strong&gt;наиболее надежный подход&lt;/strong&gt; — это работа через проверенное местное агентство или юриста. Агентства, перечисленные выше (например, Bali Home Immo, Mata Property, Bali Exception), имеют опыт сопровождения сделок для иностранных покупателей и помогут провести юридическую проверку объекта (Due Diligence).&lt;/li&gt;
    &lt;li id=&quot;W6hR&quot;&gt;&lt;strong&gt;Проверка документов:&lt;/strong&gt; Убедитесь, что все документы на недвижимость легальны, особенно если вы рассматриваете схему &lt;strong&gt;Leasehold&lt;/strong&gt; (долгосрочная аренда) или покупку через индонезийскую компанию &lt;strong&gt;PT PMA&lt;/strong&gt;.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;muQ5&quot;&gt;Задаю вопрос: А что со скэмом? Ответ:&lt;/h3&gt;
  &lt;p id=&quot;qnxO&quot;&gt;На рынке недвижимости Бали, к сожалению, регулярно происходят скандалы и мошенничества (так называемые &amp;quot;скэмы&amp;quot;), в том числе с участием иностранных покупателей, включая граждан России и других стран СНГ.&lt;/p&gt;
  &lt;p id=&quot;BQic&quot;&gt;Проблема существует из-за сочетания нескольких факторов: сложного местного законодательства, высокого спроса на недвижимость, недостаточной осведомленности иностранцев о рисках и иногда участия недобросовестных посредников.&lt;/p&gt;
  &lt;p id=&quot;KQdq&quot;&gt;Основные типы скандалов и мошенничества:&lt;/p&gt;
  &lt;ul id=&quot;Hmzo&quot;&gt;
    &lt;li id=&quot;gkRb&quot;&gt;&lt;strong&gt;&amp;quot;Виллы-призраки&amp;quot; (Phantom Projects):&lt;/strong&gt; Самый распространенный вид мошенничества, когда инвесторы вкладывают деньги в проекты &amp;quot;на бумаге&amp;quot; или по красивым рендерам, но строительство вилл либо не начинается, либо бросается на полпути, а застройщик исчезает с деньгами.&lt;/li&gt;
    &lt;li id=&quot;qJF8&quot;&gt;&lt;strong&gt;Нелегальные застройки и проблемы с разрешительной документацией :&lt;/strong&gt; Известный недавний случай, связанный с крупным русскоязычным жилым комплексом .. Ubud, который был временно закрыт властями из-за нарушений разрешений на строительство и нецелевого использования земли. Это привело к проблемам для множества инвесторов и резидентов.&lt;/li&gt;
    &lt;li id=&quot;CZNo&quot;&gt;&lt;strong&gt;Мошенничество с участием инфлюенсеров :&lt;/strong&gt; Широко освещался в СМИ скандал, когда известный русскоязычный блогер и инфлюенсер **** был обвинен десятками иностранных инвесторов в хищении миллионов долларов США через свои компании, предлагавшие несуществующие или проблемные проекты вилл.&lt;/li&gt;
    &lt;li id=&quot;Aejp&quot;&gt;&lt;strong&gt;Продажа одной виллы нескольким покупателям (Double Selling):&lt;/strong&gt; Недобросовестные продавцы или агенты продают один и тот же объект нескольким людям, пользуясь пробелами в юридическом оформлении или отсутствием должной проверки через нотариуса.&lt;/li&gt;
    &lt;li id=&quot;nqxg&quot;&gt;&lt;strong&gt;Поддельные документы и фальшивые агенты:&lt;/strong&gt; Использование поддельных сертификатов на землю, измененных договоров аренды или выдача себя за реального владельца/агента с целью получения депозита и исчезновения.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;DfkE&quot;&gt;Как обезопасить себя:&lt;/p&gt;
  &lt;p id=&quot;A3zK&quot;&gt;Для минимизации рисков при покупке недвижимости на Бали крайне важно соблюдать следующие меры предосторожности:&lt;/p&gt;
  &lt;ul id=&quot;CPO2&quot;&gt;
    &lt;li id=&quot;queN&quot;&gt;&lt;strong&gt;Обязательная юридическая проверка (Due Diligence):&lt;/strong&gt; Никогда не пренебрегайте этим шагом. Профессиональный юрист или нотариус должен проверить все документы на землю, статус собственности (Freehold или Leasehold), отсутствие залогов и судебных споров.&lt;/li&gt;
    &lt;li id=&quot;EVMt&quot;&gt;&lt;strong&gt;Работа с проверенными агентствами:&lt;/strong&gt; Обращайтесь к агентствам с хорошей репутацией и лицензией, которые работают на рынке много лет (список надежных сайтов был предоставлен ранее).&lt;/li&gt;
    &lt;li id=&quot;Vk3V&quot;&gt;&lt;strong&gt;Не доверяйте &amp;quot;слишком хорошим&amp;quot; предложениям:&lt;/strong&gt; Если цена значительно ниже рыночной, это серьезный повод для подозрений.&lt;/li&gt;
    &lt;li id=&quot;wA1f&quot;&gt;&lt;strong&gt;Проверяйте застройщика:&lt;/strong&gt; Если покупаете строящуюся виллу (off-plan), тщательно изучите историю застройщика, его завершенные проекты и наличие всех разрешений.&lt;/li&gt;
    &lt;li id=&quot;avzx&quot;&gt;&lt;strong&gt;Избегайте &amp;quot;серых&amp;quot; схем:&lt;/strong&gt; Не используйте сомнительные схемы владения, например, оформление земли на имя местного жителя (номинальный договор), так как это очень рискованно.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;CcX9&quot;&gt;Скандалы случаются, но они подчеркивают важность тщательного и профессионального подхода к инвестициям в недвижимость на Бали.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;fgyB&quot;&gt;Короче - уточняйте детали.&lt;/p&gt;

</content></entry><entry><id>ind_ex-51282:arenda-villa-bali-biznes</id><link rel="alternate" type="text/html" href="https://teletype.in/@ind_ex-51282/arenda-villa-bali-biznes?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=ind_ex-51282"></link><title>Реальные данные - рынок аренды вилл на Бали</title><published>2025-08-12T15:56:15.331Z</published><updated>2025-08-12T15:56:15.331Z</updated><summary type="html">Оч важная Инфа для тех, кто собирается вложиться в апартаменты или виллу под аренду!!! Сохраняйте и отправляйте тем, кто собирается инвестировать в Балийскую недвижку!</summary><content type="html">
  &lt;figure id=&quot;7Fw9&quot;&gt;
    &lt;iframe src=&quot;https://www.instagram.com/p/DMcCd0sSyQg/embed/captioned/&quot;&gt;&lt;/iframe&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;JgGm&quot;&gt;Что пишет автор?&lt;/h3&gt;
  &lt;h3 id=&quot;Y4Y0&quot;&gt;БИЗНЕС НА БАЛИ?! Ожидание и реальность&lt;/h3&gt;
  &lt;p id=&quot;wpJo&quot;&gt;Оч важная Инфа для тех, кто собирается вложиться в апартаменты или виллу под аренду!!! Сохраняйте и отправляйте тем, кто собирается инвестировать в Балийскую недвижку!&lt;/p&gt;
  &lt;p id=&quot;lcwD&quot;&gt;Сейчас со всех сторон сыпется реклама: стройте, вкладывайтесь, рынок растёт, туристов всё больше, всё сдаётся, всё отбивается.&lt;br /&gt;Да…по данным 2023-24гг. А сейчас ситуация немножко другая…&lt;/p&gt;
  &lt;p id=&quot;IgB7&quot;&gt;Рассказываю как есть в реале не только, как сторонний наблюдатель, но и как участница этой девелоперского бума.&lt;/p&gt;
  &lt;p id=&quot;EqZw&quot;&gt;Я тоже переделала тут виллу под ежедневную аренду.&lt;br /&gt;Вложила всё: свои деньги, занятые, нервы, время, расчёты, надежду. И сейчас я в полном а..уе.&lt;/p&gt;
  &lt;p id=&quot;4Nks&quot;&gt;Если ещё год назад рынок действительно дышал — сейчас он уже задыхается от перенасыщения.&lt;br /&gt;А стройка не прекращается!! 😣&lt;/p&gt;
  &lt;p id=&quot;BanC&quot;&gt;Застраивается все до такой степени, что скоро весь остров будет закатан в бетон!!!&lt;/p&gt;
  &lt;p id=&quot;zSyj&quot;&gt;Это какое то помешательство. И причем всё красивое, всё как в Pinterest все “под сдачу”.&lt;/p&gt;
  &lt;p id=&quot;l72w&quot;&gt;И таких объектов уже В РАЗЫ больше, чем клиентов.&lt;/p&gt;
  &lt;p id=&quot;XOGd&quot;&gt;Сейчас высокий сезон и где эти туристы?&lt;br /&gt;Которых нам всем обещали?&lt;br /&gt;Которые должны были снимать эти дома по $300-500 в сутки?&lt;br /&gt;Они с нами в одной комнате?&lt;/p&gt;
  &lt;p id=&quot;Cpnt&quot;&gt;Airbnb перегружен огромными роскошными домами по 100 (!!!) евро в сутки.&lt;br /&gt;И они пустуют.&lt;br /&gt;Никакой высокий сезон их не спасает.&lt;/p&gt;
  &lt;p id=&quot;0jaX&quot;&gt;Потому что туристы не размножаются в том же темпе, как виллы!!!&lt;/p&gt;
  &lt;p id=&quot;ps3c&quot;&gt;Да, Бали — прекрасное место для жизни.&lt;br /&gt;Если вы хотите жить в тепле, среди природы, заниматься своим делом — приезжайте, это правда классное место.&lt;/p&gt;
  &lt;p id=&quot;4uLN&quot;&gt;Но если вы думаете куда вложить свои кровные и заходите сюда ради бизнеса и прибыли — пожалуйста, откройте глаза.&lt;/p&gt;
  &lt;p id=&quot;tOyF&quot;&gt;Посмотрите Airbnb. Сравните. Прикиньте цифры.&lt;br /&gt;Я не говорю «не делайте».&lt;br /&gt;Я говорю — посмотрите внимательно.&lt;/p&gt;
  &lt;p id=&quot;5JbI&quot;&gt;НО!!!! если вы как раз собираетесь приехать в отпуск — добро пожаловать.&lt;br /&gt;Сейчас для туристов начинается золотое время.&lt;/p&gt;
  &lt;p id=&quot;INLc&quot;&gt;Вы будете жить по-королевски - за цену простого гостиничного номера.&lt;br /&gt;Фантазия стала реальностью. Наслаждайтесь.&lt;/p&gt;
  &lt;p id=&quot;sgfj&quot;&gt;P.S. Если приедете — выберите мою виллу, пожалуйста. Она самая классная конечно же&lt;/p&gt;

</content></entry><entry><id>ind_ex-51282:python-hosting</id><link rel="alternate" type="text/html" href="https://teletype.in/@ind_ex-51282/python-hosting?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=ind_ex-51282"></link><title>Хостинги c Python</title><published>2025-04-16T02:00:53.361Z</published><updated>2025-04-16T02:00:53.361Z</updated><summary type="html">подборка бесплатных хостингов с доступом к терминалу (SSH) и Python — всё отобрано по настоящей поддержке CLI, а не по рекламным лозунгам:</summary><content type="html">
  &lt;p id=&quot;Ytxl&quot;&gt;&lt;strong&gt;подборка бесплатных хостингов с доступом к терминалу (SSH) и Python&lt;/strong&gt; — всё отобрано по настоящей поддержке &lt;strong&gt;CLI&lt;/strong&gt;, а не по рекламным лозунгам:&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;RlOu&quot;&gt;&lt;strong&gt;1. &lt;a href=&quot;https://replit.com/&quot; target=&quot;_blank&quot;&gt;Replit&lt;/a&gt;&lt;/strong&gt;&lt;/h2&gt;
  &lt;p id=&quot;gWmG&quot;&gt;Возможность Есть?     &lt;br /&gt;✅ SSH через веб &lt;br /&gt;✅ (встроенный)   &lt;br /&gt;✅ Python Да, любой   &lt;br /&gt;✅ Файловая система Да   &lt;br /&gt;✅ Web-сервер Да (preview + публичный URL)   &lt;br /&gt;📦 Поддержка Markdown → HTML? Да, можно всё самописно или через Flask&lt;/p&gt;
  &lt;p id=&quot;bVHv&quot;&gt;💡 Отлично подойдёт для Markdown → HTML генератора на Flask + веб-интерфейс + файлы.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;bnA7&quot;&gt;&lt;strong&gt;2. &lt;a href=&quot;https://glitch.com/&quot; target=&quot;_blank&quot;&gt;Glitch&lt;/a&gt;&lt;/strong&gt;&lt;/h2&gt;
  &lt;p id=&quot;rW7R&quot;&gt;Возможность Есть?     &lt;br /&gt;❗ Pseudo-shell Да, но ограничено   &lt;br /&gt;✅ Python/Node.js Да (ограниченный runtime)   &lt;br /&gt;✅ Web-просмотр Да (auto-refresh на каждый файл)&lt;/p&gt;
  &lt;p id=&quot;Uyt0&quot;&gt;📦 Прекрасен для микро-сервисов, API или frontend+backend шаблонов.&lt;br /&gt; SSH формально нет, но CLI есть (через консоль в браузере).&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;lSbq&quot;&gt;✅ &lt;strong&gt;3. &lt;a href=&quot;https://render.com/&quot; target=&quot;_blank&quot;&gt;Render Free Web Services&lt;/a&gt;&lt;/strong&gt;&lt;/h2&gt;
  &lt;p id=&quot;EhLQ&quot;&gt;Возможность Есть?     &lt;br /&gt;✅ Python Да (WSGI: Flask, FastAPI)   &lt;br /&gt;❌ SSH Только логирование   &lt;br /&gt;✅ Markdown-проекты Да (через генератор, Flask, Hugo, и т.п.)&lt;/p&gt;
  &lt;p id=&quot;OCLj&quot;&gt;💡 Можно деплоить с GitHub, Markdown → HTML через Python/Flask — удобно.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;hjyT&quot;&gt;✅ &lt;strong&gt;4. &lt;a href=&quot;https://github.com/features/codespaces&quot; target=&quot;_blank&quot;&gt;GitHub Codespaces&lt;/a&gt;&lt;/strong&gt;&lt;/h2&gt;
  &lt;p id=&quot;0zkP&quot;&gt;Возможность Есть?     &lt;br /&gt;✅ Full SSH Да (через VSCode)   &lt;br /&gt;✅ Python Да, любой   &lt;br /&gt;✅ Term + pip + git Да&lt;/p&gt;
  &lt;p id=&quot;Xeoz&quot;&gt;📦 Подходит для всего: Markdown обработка, Flask, Pandoc, Hugo и т.д.&lt;br /&gt; 💥 Бесплатно 60 часов/мес.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;yY1P&quot;&gt;✅ &lt;strong&gt;5. &lt;a href=&quot;https://www.oracle.com/cloud/free/&quot; target=&quot;_blank&quot;&gt;Oracle Cloud Free Tier&lt;/a&gt;&lt;/strong&gt;&lt;/h2&gt;
  &lt;p id=&quot;cT5m&quot;&gt;Возможность Есть?     &lt;br /&gt;✅ Полный SSH Да (VPS, ARM + AMD)   &lt;br /&gt;✅ Python Да, что хочешь   &lt;br /&gt;✅ Всё root-доступ Полный сервер&lt;/p&gt;
  &lt;p id=&quot;AhFa&quot;&gt;📦 Идеально если хочешь стабильную машину 24/7, но нужно настраивать вручную.&lt;br /&gt; 💥 Бесплатно навсегда: 1–2 инстанса, 4 ядра, 24 ГБ RAM на ARM.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;3gIp&quot;&gt;❌ &lt;strong&gt;Кого избегать&lt;/strong&gt; (нет SSH/Python):&lt;/h2&gt;
  &lt;p id=&quot;cXIg&quot;&gt;Хостинг Причина     InfinityFree &lt;br /&gt;❌ только PHP   GoogieHost &lt;br /&gt;❌ нет SSH/Python   000WebHost &lt;br /&gt;❌ максимум — PHP   AwardSpace &lt;br /&gt;❌ жёсткие лимиты&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;OVaN&quot;&gt;Markdown генератор на Flask &lt;/h2&gt;
  &lt;p id=&quot;LOu4&quot;&gt;📁 &lt;code&gt;app.py&lt;/code&gt;:&lt;/p&gt;
  &lt;pre id=&quot;JOds&quot; data-lang=&quot;python&quot;&gt;from flask import Flask, request
import markdown
app = Flask(__name__)

@app.route(&amp;#x27;/&amp;#x27;, methods=[&amp;#x27;GET&amp;#x27;, &amp;#x27;POST&amp;#x27;])
def index():
    if request.method == &amp;#x27;POST&amp;#x27;:
        md = request.form[&amp;#x27;markdown&amp;#x27;]
        html = markdown.markdown(md)
        return f&amp;#x27;&amp;lt;h1&amp;gt;Preview:&amp;lt;/h1&amp;gt;&amp;lt;div&amp;gt;{html}&amp;lt;/div&amp;gt;&amp;#x27;
    return &amp;#x27;&amp;lt;form method=&amp;quot;post&amp;quot;&amp;gt;&amp;lt;textarea name=&amp;quot;markdown&amp;quot;&amp;gt;
&amp;lt;/textarea&amp;gt;&amp;lt;button&amp;gt;Render&amp;lt;/button&amp;gt;&amp;lt;/form&amp;gt;&amp;#x27;

app.run()
&lt;/pre&gt;
  &lt;p id=&quot;HmtF&quot;&gt;Можно деплоить на Replit, Glitch, Codespaces или Render.&lt;/p&gt;

</content></entry><entry><id>ind_ex-51282:ispolzuem-curl</id><link rel="alternate" type="text/html" href="https://teletype.in/@ind_ex-51282/ispolzuem-curl?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=ind_ex-51282"></link><title>Использование CURL</title><published>2025-04-16T01:47:00.992Z</published><updated>2025-04-16T01:47:00.992Z</updated><category term="linux-amp-tools" label="Linux &amp;amp; Tools"></category><summary type="html">Применение CURL для оценки состояния сервера.</summary><content type="html">
  &lt;p id=&quot;6PX1&quot;&gt;Применение CURL для оценки состояния сервера.&lt;/p&gt;
  &lt;h3 id=&quot;2P3l&quot;&gt;Ключи  для CURL&lt;/h3&gt;
  &lt;ul id=&quot;WvBp&quot;&gt;
    &lt;li id=&quot;6gBL&quot;&gt;&lt;strong&gt;&lt;code&gt;curl -I&lt;/code&gt;&lt;/strong&gt; для получения только заголовков ответа.&lt;/li&gt;
    &lt;li id=&quot;iuyb&quot;&gt;&lt;strong&gt;&lt;code&gt;curl -IL&lt;/code&gt;&lt;/strong&gt; для проверки редиректов.&lt;/li&gt;
    &lt;li id=&quot;iYm1&quot;&gt;&lt;strong&gt;&lt;code&gt;curl -v&lt;/code&gt;&lt;/strong&gt; для подробной информации о запросах и ответах.&lt;/li&gt;
    &lt;li id=&quot;6KxE&quot;&gt;&lt;strong&gt;&lt;code&gt;curl -w&lt;/code&gt;&lt;/strong&gt; для замера времени отклика.&lt;/li&gt;
    &lt;li id=&quot;2A58&quot;&gt;&lt;strong&gt;&lt;code&gt;curl -vI&lt;/code&gt;&lt;/strong&gt; для получения данных о сертификате SSL.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;AS03&quot;&gt;Использование команды &lt;strong&gt;&lt;code&gt;curl&lt;/code&gt;&lt;/strong&gt; — отличный способ быстро получить информацию о статусе сервера, без необходимости заходить в браузер или использовать онлайн-инструменты. Вы можете использовать &lt;strong&gt;&lt;code&gt;curl&lt;/code&gt;&lt;/strong&gt; для проверки доступности веб-сервера, статуса ответа HTTP, а также для получения некоторых подробных данных о сервере.&lt;/p&gt;
  &lt;h3 id=&quot;G7y4&quot;&gt;Основные способы использования &lt;strong&gt;&lt;code&gt;curl&lt;/code&gt;&lt;/strong&gt; для получения информации о статусе сервера:&lt;/h3&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;rDYy&quot;&gt;&lt;strong&gt;1. Проверка доступности сервера (HTTP статус-код)&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;Url1&quot;&gt;Чтобы проверить статус вашего сервера и узнать, какой HTTP статус-код вернул сервер (например, 200 OK, 404 Not Found, 500 Internal Server Error), используйте следующую команду:&lt;/p&gt;
  &lt;pre id=&quot;taxr&quot;&gt;curl -I http://fit.whf.bz
&lt;/pre&gt;
  &lt;ul id=&quot;SyvW&quot;&gt;
    &lt;li id=&quot;EUx6&quot;&gt;&lt;strong&gt;&lt;code&gt;-I&lt;/code&gt;&lt;/strong&gt; (или &lt;code&gt;--head&lt;/code&gt;) отправляет &lt;strong&gt;только HTTP-заголовки&lt;/strong&gt;, не загружая весь контент страницы.&lt;/li&gt;
    &lt;li id=&quot;Tdzf&quot;&gt;Это даст вам краткую информацию, например: &lt;code&gt;HTTP/1.1 200 OK Date: Mon, 15 Apr 2025 00:00:00 GMT Server: Apache X-Powered-By: PHP/7.4.3 Content-Type: text/html; charset=UTF-8 &lt;/code&gt; Это позволяет вам увидеть статус ответа от сервера (например, &lt;code&gt;200 OK&lt;/code&gt;), тип содержимого, сервер и другие метаданные.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;bGPu&quot;&gt;&lt;strong&gt;2. Проверка редиректа (следование редиректам)&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;LtVV&quot;&gt;Если ваш сайт перенаправляет с HTTP на HTTPS, например, вы можете увидеть, что происходит с помощью опции &lt;strong&gt;&lt;code&gt;-L&lt;/code&gt;&lt;/strong&gt; (следовать за редиректами):&lt;/p&gt;
  &lt;pre id=&quot;pVsk&quot;&gt;curl -IL http://fit.whf.bz
&lt;/pre&gt;
  &lt;ul id=&quot;oGYu&quot;&gt;
    &lt;li id=&quot;LjLY&quot;&gt;&lt;strong&gt;&lt;code&gt;-L&lt;/code&gt;&lt;/strong&gt; позволяет &lt;code&gt;curl&lt;/code&gt; следовать за редиректами.&lt;/li&gt;
    &lt;li id=&quot;Eyug&quot;&gt;&lt;strong&gt;&lt;code&gt;-I&lt;/code&gt;&lt;/strong&gt; по-прежнему выводит только заголовки.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;ukrW&quot;&gt;Это позволит увидеть, если сайт редиректит на &lt;code&gt;https://&lt;/code&gt; и какие ответы сервер отправляет.&lt;/p&gt;
  &lt;p id=&quot;QBZK&quot;&gt;Пример вывода:&lt;/p&gt;
  &lt;pre id=&quot;CYMW&quot;&gt;HTTP/1.1 301 Moved Permanently
Location: https://fit.whf.bz/
HTTP/2 200 
&lt;/pre&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;g3ju&quot;&gt;&lt;strong&gt;3. Проверка заголовков HTTP с подробной информацией о запросе&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;IHLe&quot;&gt;Если вы хотите увидеть больше подробностей, например, о том, как сервер обрабатывает ваш запрос, можно использовать команду с &lt;strong&gt;&lt;code&gt;-v&lt;/code&gt;&lt;/strong&gt; (verbose), чтобы получить подробную информацию о запросе и ответе:&lt;/p&gt;
  &lt;pre id=&quot;E5Ek&quot;&gt;curl -v http://fit.whf.bz&lt;/pre&gt;
  &lt;p id=&quot;LXMU&quot;&gt;Пример вывода:&lt;/p&gt;
  &lt;pre id=&quot;QBwH&quot;&gt;*   Trying 123.45.67.89...
* Connected to fit.whf.bz (123.45.67.89) port 80 (#0)
&amp;gt; GET / HTTP/1.1
&amp;gt; Host: fit.whf.bz
&amp;gt; User-Agent: curl/7.68.0
&amp;gt; Accept: */*
&amp;gt; 
&amp;lt; HTTP/1.1 200 OK
&amp;lt; Date: Mon, 15 Apr 2025 00:00:00 GMT
&amp;lt; Server: Apache
&amp;lt; X-Powered-By: PHP/7.4.3
&amp;lt; Content-Type: text/html; charset=UTF-8
&amp;lt; 
...
&lt;/pre&gt;
  &lt;p id=&quot;5waa&quot;&gt;Здесь вы видите всю информацию о запросе (например, что ваш запрос был на порт 80), а также заголовки ответа от сервера.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;xrzw&quot;&gt;&lt;strong&gt;4. Проверка времени отклика сервера&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;SjG8&quot;&gt;Если вы хотите узнать, сколько времени занимает соединение с сервером, вы можете использовать опцию &lt;strong&gt;&lt;code&gt;-w&lt;/code&gt;&lt;/strong&gt; с форматированием:&lt;/p&gt;
  &lt;pre id=&quot;HV76&quot;&gt;curl -w &amp;quot;@curl-format.txt&amp;quot; -o /dev/null -s http://fit.whf.bz
&lt;/pre&gt;
  &lt;p id=&quot;RNzE&quot;&gt;Создайте файл &lt;code&gt;curl-format.txt&lt;/code&gt; с таким содержимым:&lt;/p&gt;
  &lt;pre id=&quot;PSv4&quot; data-lang=&quot;arduino&quot;&gt;time_namelookup:  %{time_namelookup}\n
time_connect:  %{time_connect}\n
time_appconnect:  %{time_appconnect}\n
time_pretransfer:  %{time_pretransfer}\n
time_redirect:  %{time_redirect}\n
time_starttransfer:  %{time_starttransfer}\n
------------------------
time_total:  %{time_total}\n
&lt;/pre&gt;
  &lt;p id=&quot;XsoI&quot;&gt;Это покажет, сколько времени тратится на каждый этап подключения, включая время на разрешение доменного имени, подключение к серверу, ожидание начала передачи данных и общее время.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;R3d7&quot;&gt;&lt;strong&gt;5. Проверка сертификата SSL (если сайт использует HTTPS)&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;0FDX&quot;&gt;Если сайт работает через HTTPS, вы можете использовать &lt;strong&gt;&lt;code&gt;curl&lt;/code&gt;&lt;/strong&gt; для получения информации о сертификате SSL:&lt;/p&gt;
  &lt;pre id=&quot;Dp9g&quot;&gt;curl -vI https://fit.whf.bz
&lt;/pre&gt;
  &lt;p id=&quot;knVx&quot;&gt;В выводе будет отображена информация о сертификате, включая его дату истечения и информацию о шифровании.&lt;/p&gt;
  &lt;p id=&quot;rWFl&quot;&gt;Пример:&lt;/p&gt;
  &lt;pre id=&quot;GuWf&quot; data-lang=&quot;atom&quot;&gt;* Server certificate:
*  subject: CN=fit.whf.bz
*  start date: Jan  1 00:00:00 2025 GMT
*  expire date: Jan  1 23:59:59 2026 GMT
*  subjectAltName: fit.whf.bz
*  issuer: C=US; O=Let&amp;#x27;s Encrypt; CN=R3
&lt;/pre&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;BcEZ&quot;&gt;Резюме:&lt;/h3&gt;
  &lt;ul id=&quot;VvOx&quot;&gt;
    &lt;li id=&quot;1Zco&quot;&gt;&lt;strong&gt;&lt;code&gt;curl -I&lt;/code&gt;&lt;/strong&gt; для получения только заголовков ответа.&lt;/li&gt;
    &lt;li id=&quot;FgvY&quot;&gt;&lt;strong&gt;&lt;code&gt;curl -IL&lt;/code&gt;&lt;/strong&gt; для проверки редиректов.&lt;/li&gt;
    &lt;li id=&quot;WuwW&quot;&gt;&lt;strong&gt;&lt;code&gt;curl -v&lt;/code&gt;&lt;/strong&gt; для подробной информации о запросах и ответах.&lt;/li&gt;
    &lt;li id=&quot;Xz8S&quot;&gt;&lt;strong&gt;&lt;code&gt;curl -w&lt;/code&gt;&lt;/strong&gt; для замера времени отклика.&lt;/li&gt;
    &lt;li id=&quot;VxJ9&quot;&gt;&lt;strong&gt;&lt;code&gt;curl -vI&lt;/code&gt;&lt;/strong&gt; для получения данных о сертификате SSL.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;ObaQ&quot;&gt;Эти команды позволяют быстро и эффективно проверять статус вашего сервера и получать необходимую информацию о его работе. Если у вас будут дополнительные вопросы, не стесняйтесь спрашивать!&lt;/p&gt;

</content></entry><entry><id>ind_ex-51282:teletype-rastet</id><link rel="alternate" type="text/html" href="https://teletype.in/@ind_ex-51282/teletype-rastet?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=ind_ex-51282"></link><title>Телетайп растёт</title><published>2025-04-08T06:48:53.502Z</published><updated>2025-04-13T05:18:54.571Z</updated><summary type="html">Техподдержка отвечает что Маркдаун поддерживать по разным причинам в планах нет. А было бы круто!</summary><content type="html">
  &lt;p id=&quot;oM48&quot;&gt;Техподдержка отвечает что Маркдаун поддерживать по разным причинам в планах нет. А было бы круто!&lt;/p&gt;
  &lt;h3 id=&quot;K2jG&quot;&gt;Такие конструкции было бы хорошо преобразовывать в виджет из 3-х карточек&lt;/h3&gt;
  &lt;p id=&quot;cwAv&quot;&gt;| &lt;a href=&quot;https://teletype.in/@ind_ex/Bali_1day&quot; target=&quot;_blank&quot;&gt;https://teletype.in/@ind_ex/Bali_1day&lt;/a&gt; | &lt;a href=&quot;https://teletype.in/@ind_ex/mango&quot; target=&quot;_blank&quot;&gt;https://teletype.in/@ind_ex/mango&lt;/a&gt; | &lt;a href=&quot;https://teletype.in/@ind_ex/otravlenie-ifeksia-na-bali&quot; target=&quot;_blank&quot;&gt;https://teletype.in/@ind_ex/otravlenie-ifeksia-na-bali&lt;/a&gt; |&lt;br /&gt;|-------|-------|-------|&lt;/p&gt;
  &lt;h3 id=&quot;9HMQ&quot;&gt;А такие - в таблицу&lt;/h3&gt;
  &lt;p id=&quot;TFAI&quot;&gt;| колонка 1 | колонка 2 | колонка 3 |&lt;br /&gt;|-------|------|--------|&lt;br /&gt;| контент 1 | контент 2 | контент 3 |&lt;/p&gt;
  &lt;h2 id=&quot;FgeT&quot;&gt;Еще сказали что можно в iframe писать любой код. &lt;/h2&gt;
  &lt;h3 id=&quot;x4ZW&quot;&gt;Проверяем.&lt;/h3&gt;
  &lt;pre id=&quot;sdzg&quot; data-lang=&quot;html&quot;&gt;&amp;lt;embed
  src=&amp;quot;https://2aea3deb-34b4-404d-91f1-9cf5bfb5dca7.selstorage.ru
      /mp4%2FVID-20250412-WA0002.mp4&amp;quot;
  type=&amp;quot;video/mp4&amp;quot;
  width=&amp;quot;100%&amp;quot;
  height=&amp;quot;480&amp;quot;
  style=&amp;quot;display: block; margin: 0 auto;&amp;quot;
/&amp;gt;&lt;/pre&gt;
  &lt;figure id=&quot;34XT&quot; class=&quot;m_custom&quot;&gt;
    &lt;iframe srcdoc=&quot;&lt;embed
  src=&amp;quot;https://2aea3deb-34b4-404d-91f1-9cf5bfb5dca7.selstorage.ru/mp4%2FVID-20250412-WA0002.mp4&amp;quot;
  type=&amp;quot;video/mp4&amp;quot;
  width=&amp;quot;100%&amp;quot;
  height=&amp;quot;480&amp;quot;
  style=&amp;quot;display: block; margin: 0 auto;&amp;quot;
/&gt;&quot;&gt;&lt;/iframe&gt;
  &lt;/figure&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;cBup&quot;&gt;работает !&lt;/h3&gt;

</content></entry><entry><id>ind_ex-51282:rOrCkcWgrf</id><link rel="alternate" type="text/html" href="https://teletype.in/@ind_ex-51282/rOrCkcWgrf?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=ind_ex-51282"></link><title>Постим из телеги через бота</title><published>2025-04-07T02:37:00.211Z</published><updated>2025-04-13T05:20:55.489Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img2.teletype.in/files/94/25/942544cc-a2bb-4f34-9df2-5f45af7b5d1f.png"></media:thumbnail><category term="a-znaete-li-vy" label="А знаете ли Вы?…"></category><summary type="html">&lt;img src=&quot;https://img4.teletype.in/files/b5/d0/b5d02809-869f-4f84-8acf-c4e97e3f3292.png&quot;&gt;Попробую запостить что-то из телеграма с использованием Телетайп-бота
Итоги - всё получилось красиво, каждое сообщение в бот после открытия режима создания нового поста - превращается в параграф текста в посте. Разметка от телеграм удаляется, только элементы маркдауна работают, такие как «**bold*, _italic_, ~strikethrough~,  `code`» и так далее.  Удобно, когда нужно сформировать с телефона короткую заметку, с голоса в том числе. Картинки вставляет без проблем, отправкой картинки в бот. Выделение контейнера цветом и формирование h2, h3 заголовков в инструкции к боту не охвачено - непонятно как работает, если и работает вообще.</summary><content type="html">
  &lt;p id=&quot;P6QD&quot;&gt;Попробую запостить что-то из телеграма с использованием &lt;code&gt;Телетайп-бота&lt;/code&gt;&lt;strong&gt;Итоги&lt;/strong&gt; - всё получилось красиво, каждое сообщение в бот после открытия режима создания нового поста - превращается в параграф текста в посте. Разметка от телеграм удаляется, только элементы маркдауна работают, такие как «**bold*, _italic_, ~strikethrough~,  &amp;#x60;code&amp;#x60;» и так далее.  Удобно, когда нужно сформировать с телефона короткую заметку, с голоса в том числе. Картинки вставляет без проблем, отправкой картинки в бот. Выделение контейнера цветом и формирование h2, h3 заголовков в инструкции к боту не охвачено - непонятно как работает, если и работает вообще.&lt;/p&gt;
  &lt;figure id=&quot;YLeC&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/b5/d0/b5d02809-869f-4f84-8acf-c4e97e3f3292.png&quot; width=&quot;959&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;hlhv&quot;&gt;пишу с телефона, картинка для красоты.&lt;/p&gt;
  &lt;p id=&quot;a7HG&quot;&gt;Всё пока что нормально получается, сейчас проверю как публикуется.&lt;/p&gt;
  &lt;p id=&quot;XFcv&quot;&gt;Спасибо большое&lt;/p&gt;

</content></entry><entry><id>ind_ex-51282:ofcTaJONbNG</id><link rel="alternate" type="text/html" href="https://teletype.in/@ind_ex-51282/ofcTaJONbNG?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=ind_ex-51282"></link><title>Размеры заголовков в Teletype</title><published>2025-03-11T20:27:15.745Z</published><updated>2025-04-09T00:12:48.120Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img3.teletype.in/files/a1/53/a153d1cb-9806-4c47-b09e-c0aa66ddea88.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img1.teletype.in/files/44/c6/44c67c8f-36ff-4fb7-b64f-71c0b68db493.png&quot;&gt;{ h1: 38 - h2: 28 - h3: 20 - p: 17px } берем на вооружение</summary><content type="html">
  &lt;h2 id=&quot;bw0J&quot;&gt;font-size:&lt;/h2&gt;
  &lt;h3 id=&quot;nmTV&quot;&gt;Десктопы&lt;/h3&gt;
  &lt;pre id=&quot;fjdr&quot; data-lang=&quot;css&quot;&gt;{ h1: 38 - h2: 28 - h3: 20 - p: 17px } /* размеры в точках */&lt;/pre&gt;
  &lt;h3 id=&quot;bDZ6&quot;&gt;Мобильные&lt;/h3&gt;
  &lt;pre id=&quot;shQO&quot; data-lang=&quot;css&quot;&gt;{ h1: 27 - h2: 24 - h3: 20 - p: 17px } &lt;/pre&gt;
  &lt;h2 id=&quot;dIWn&quot;&gt;margin:&lt;/h2&gt;
  &lt;h3 id=&quot;tZrF&quot;&gt;мобильные&lt;/h3&gt;
  &lt;pre id=&quot;PKcO&quot; data-lang=&quot;css&quot;&gt;h1, h2 { margin-bottom: 0; margin-top: 0;}&lt;/pre&gt;
  &lt;pre id=&quot;YM6V&quot; data-lang=&quot;css&quot;&gt;@media screen and (max-width: 720px) {
    .text h3, .text h4, .text h5, .text h6 {
        margin-top: .75em;
        margin-bottom: .25em;
        font-size: 1.17647059em;
    }
}

@media screen and (max-width: 720px) {
    .text h1, .text h2 {
        font-size: 1.41176471em;
    }
}&lt;/pre&gt;
  &lt;h3 id=&quot;patJ&quot;&gt;десктопы :&lt;/h3&gt;
  &lt;pre id=&quot;KchA&quot; data-lang=&quot;css&quot;&gt;h1 {margin-bottom: .78947368em;} 
h1, h2{margin: .53571429em auto .17857143em;} 
.text h3, .text h4, .text h5, .text h6 { margin: .75em auto .25em; }&lt;/pre&gt;
  &lt;p id=&quot;kAYH&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;qRrP&quot;&gt;H1&lt;br /&gt;font-size 38px /*computed */&lt;br /&gt;font-size: 3.8rem; /.article__header_title */&lt;br /&gt;font-size: 10px; /* html */&lt;br /&gt;&lt;br /&gt;для 1rem= 16px : 2.375rem&lt;/p&gt;
  &lt;h2 id=&quot;uxvF&quot;&gt;Заголовок h2&lt;/h2&gt;
  &lt;p id=&quot;FBXf&quot;&gt;H2&lt;br /&gt;28px /* computed */&lt;br /&gt;1.64705882em /* .text h1,.text h2 */&lt;br /&gt;font-size: 1.7rem; /* .article__content */&lt;br /&gt;&lt;br /&gt;для 1rem= 16px : 1.75rem&lt;/p&gt;
  &lt;h3 id=&quot;iLmj&quot;&gt;Заголовок h3&lt;/h3&gt;
  &lt;p id=&quot;YWUg&quot;&gt;H3&lt;br /&gt;20px&lt;br /&gt;font-size: 1.17647059em;&lt;/p&gt;
  &lt;p id=&quot;bE0C&quot;&gt;для 1rem= 16px : 1.25rem&lt;/p&gt;
  &lt;p id=&quot;JLF0&quot;&gt;обычный&lt;br /&gt;17px&lt;/p&gt;
  &lt;p id=&quot;RWQG&quot;&gt;16px : 1.0625rem &lt;/p&gt;
  &lt;hr /&gt;
  &lt;figure id=&quot;4evC&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/44/c6/44c67c8f-36ff-4fb7-b64f-71c0b68db493.png&quot; width=&quot;240&quot; /&gt;
  &lt;/figure&gt;

</content></entry><entry><id>ind_ex-51282:GPU-AMD-in-UNIX-node-role</id><link rel="alternate" type="text/html" href="https://teletype.in/@ind_ex-51282/GPU-AMD-in-UNIX-node-role?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=ind_ex-51282"></link><title>Думаем про : GPU карта в роли полноценного UNIX-node. </title><published>2025-03-08T14:56:37.716Z</published><updated>2025-03-08T14:56:37.716Z</updated><summary type="html">Можно ли запустить embedded Unix на видеокарте AMD как автономное устройство, без CPU, с поддержкой MPI и TCP/IP?</summary><content type="html">
  &lt;section style=&quot;background-color:hsl(hsl(323, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;h2 id=&quot;gyKh&quot;&gt;&lt;strong&gt;Гипотеза&lt;/strong&gt;&lt;/h2&gt;
    &lt;blockquote id=&quot;U3OH&quot;&gt;&lt;strong&gt;Можно ли запустить embedded Unix на видеокарте AMD как автономное устройство, без CPU, с поддержкой MPI и TCP/IP?&lt;/strong&gt;&lt;/blockquote&gt;
  &lt;/section&gt;
  &lt;hr /&gt;
  &lt;h4 id=&quot;tQjv&quot;&gt;&lt;strong&gt;Основные положения гипотезы:&lt;/strong&gt;&lt;/h4&gt;
  &lt;ul id=&quot;Qzxp&quot;&gt;
    &lt;li id=&quot;oaiT&quot;&gt;&lt;strong&gt;Видеокарта AMD содержит процессор MP1 (Management Processor), который управляет GPU и может выполнять код.&lt;/strong&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;hr /&gt;
  &lt;ul id=&quot;a4nr&quot;&gt;
    &lt;li id=&quot;sQMF&quot;&gt; &lt;strong&gt;Если заменить или модифицировать прошивку MP1&lt;/strong&gt;, можно использовать его как основной CPU для запуска &lt;strong&gt;компактного Unix-ядра&lt;/strong&gt;.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;hr /&gt;
  &lt;ul id=&quot;LEBL&quot;&gt;
    &lt;li id=&quot;FGky&quot;&gt;&lt;strong&gt;VRAM можно использовать как RAM&lt;/strong&gt;, чтобы загружать и выполнять код.&lt;br /&gt; &lt;strong&gt;PCIe можно использовать как транспорт для TCP/IP&lt;/strong&gt;, реализовав сетевой стек через DMA.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;hr /&gt;
  &lt;ul id=&quot;xk4h&quot;&gt;
    &lt;li id=&quot;q6Zx&quot;&gt;&lt;strong&gt;MPI можно запустить на этом стеке&lt;/strong&gt;, чтобы использовать видеокарты в распределённых вычислениях без традиционного CPU.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;hr /&gt;
  &lt;h4 id=&quot;xIyB&quot;&gt;&lt;strong&gt;Технические :&lt;/strong&gt;&lt;/h4&gt;
  &lt;ul id=&quot;TPoj&quot;&gt;
    &lt;li id=&quot;oyqL&quot;&gt; MP1 загружает &lt;strong&gt;подписанную AMD-прошивку&lt;/strong&gt; → надо обойти Secure Boot.&lt;/li&gt;
    &lt;li id=&quot;SATL&quot;&gt; &lt;strong&gt;Отсутствие стандартного сетевого интерфейса&lt;/strong&gt; → нужно использовать PCIe-DMA как транспорт.&lt;/li&gt;
    &lt;li id=&quot;4d1z&quot;&gt; &lt;strong&gt;VRAM не предназначена для работы как RAM&lt;/strong&gt; → нужно модифицировать MMU MP1.&lt;/li&gt;
    &lt;li id=&quot;FCsy&quot;&gt; &lt;strong&gt;Неизвестно, поддерживает ли MP1 полный Linux-стек&lt;/strong&gt; → нужно реверсить микрокод.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h4 id=&quot;kkqt&quot;&gt;&lt;strong&gt;Как можно проверить гипотезу?&lt;/strong&gt;&lt;/h4&gt;
  &lt;ul id=&quot;K2D2&quot;&gt;
    &lt;li id=&quot;prvu&quot;&gt; &lt;strong&gt;Сделать дамп SPI Flash&lt;/strong&gt; с MP1 и попытаться разобрать бинарник. Дизассемблинг - классика. &lt;/li&gt;
    &lt;li id=&quot;f6mw&quot;&gt; &lt;strong&gt;Найти способ отключить Secure Boot&lt;/strong&gt; (например, через уязвимость в загрузчике).&lt;/li&gt;
    &lt;li id=&quot;FsPE&quot;&gt; &lt;strong&gt;Попробовать загрузить кастомный код в MP1 и выполнить его&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;pQAF&quot;&gt; &lt;strong&gt;Реализовать TCP/IP поверх PCIe-DMA и протестировать передачу данных.&lt;/strong&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h4 id=&quot;EvdO&quot;&gt;&lt;strong&gt;Вывод:&lt;/strong&gt;&lt;/h4&gt;
  &lt;p id=&quot;E5qN&quot;&gt;&lt;strong&gt;Если удастся взломать MP1 и заставить его загружать Unix, то видеокарта AMD сможет работать как автономный вычислительный узел без CPU.&lt;/strong&gt; &lt;/p&gt;
  &lt;h2 id=&quot;9cdy&quot;&gt;&lt;strong&gt;Резюме по AI - справке.&lt;/strong&gt;&lt;/h2&gt;
  &lt;h3 id=&quot;9PRZ&quot;&gt;&lt;strong&gt;1. Архитектура GPU AMD применительно к запуску embedded Unix&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;PEcx&quot;&gt;🔹 &lt;strong&gt;Главный процессор&lt;/strong&gt; на видеокарте — это &lt;strong&gt;MP1 (Management Processor)&lt;/strong&gt;, который представляет собой ARM-микроконтроллер.&lt;br /&gt; 🔹 MP1 отвечает за &lt;strong&gt;инициализацию GPU&lt;/strong&gt;, загрузку VBIOS и управление питанием.&lt;br /&gt; 🔹 GPU подключается к системе через &lt;strong&gt;PCIe и работает как PCIe Endpoint&lt;/strong&gt;, не обладая автономным загрузчиком ОС.&lt;br /&gt; 🔹 VRAM (видеопамять) можно использовать как RAM, но без CPU доступ к ней ограничен.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;B9Tn&quot;&gt;&lt;strong&gt;2. Технология старта embedded Unix на GPU AMD с MPI и TCP/IP&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;GozI&quot;&gt;🔹 &lt;strong&gt;Основная проблема&lt;/strong&gt; — GPU &lt;strong&gt;не может сам инициировать загрузку ОС&lt;/strong&gt;, так как он ожидает управляющие команды по PCIe.&lt;br /&gt; 🔹 &lt;strong&gt;Возможные способы запуска Unix&lt;/strong&gt;:&lt;br /&gt; ✅ &lt;strong&gt;Загрузка кастомного кода в MP1&lt;/strong&gt; (требуется обход Secure Boot).&lt;br /&gt; ✅ &lt;strong&gt;Использование VRAM как RAM&lt;/strong&gt; для хранения минимального ядра Unix.&lt;br /&gt; ✅ &lt;strong&gt;Организация сетевого стека через PCIe&lt;/strong&gt; (например, DMA-доступ для передачи TCP/IP пакетов).&lt;br /&gt; ✅ &lt;strong&gt;Использование MPI для распределенных вычислений&lt;/strong&gt;, если удастся сделать TCP/IP поверх PCIe.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;IbaN&quot;&gt;&lt;strong&gt;3. Ограничения производителя&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;GSVh&quot;&gt;🔹 &lt;strong&gt;Secure Boot в MP1&lt;/strong&gt; не позволяет загружать неподписанные прошивки.&lt;br /&gt; 🔹 Прошивка MP1 загружается из &lt;strong&gt;SPI Flash / ROM&lt;/strong&gt;, и её изменение без взлома Secure Boot невозможно.&lt;br /&gt; 🔹 GPU работает &lt;strong&gt;как ведомое устройство&lt;/strong&gt; (PCIe Endpoint) и не поддерживает автономную загрузку ОС.&lt;br /&gt; 🔹 &lt;strong&gt;Нет встроенного Ethernet&lt;/strong&gt;, а PCIe требует драйвера TCP/IP.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;rGfQ&quot;&gt;&lt;strong&gt;4. Вопросы легальности&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;6Rd7&quot;&gt;✅ В США действует закон &lt;strong&gt;&amp;quot;Право на ремонт&amp;quot; (Right to Repair Act)&lt;/strong&gt;, который запрещает блокировку пользовательских модификаций.&lt;br /&gt; ✅ &lt;strong&gt;FTC (Федеральная торговая комиссия США) может рассматривать такие ограничения как антимонопольные.&lt;/strong&gt;&lt;br /&gt; ❌ Однако, производители могут аргументировать запреты необходимостью &lt;strong&gt;защиты интеллектуальной собственности и безопасности устройств&lt;/strong&gt;.&lt;br /&gt; ✅ Возможен &lt;strong&gt;коллективный иск против AMD / NVIDIA&lt;/strong&gt;, если можно доказать, что блокировки &lt;strong&gt;искусственно мешают использованию оборудования&lt;/strong&gt;.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;D06y&quot;&gt;&lt;strong&gt;5. Как можно разблокировать MP1 и обойти Secure Boot?&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;1F3z&quot;&gt;🔹 &lt;strong&gt;Обход проверки подписи&lt;/strong&gt; (Secure Boot bypass) через DMA-атаку или эксплойты в драйверах.&lt;br /&gt; 🔹 &lt;strong&gt;Физическая перезапись SPI Flash&lt;/strong&gt; (например, через выпайку и программирование чипа).&lt;br /&gt; 🔹 &lt;strong&gt;Удаление Secure Boot ключей&lt;/strong&gt;, если EEPROM позволяет это сделать.&lt;br /&gt; 🔹 &lt;strong&gt;Подмена кода в RAM после загрузки&lt;/strong&gt;, если удастся внедрить exploit перед проверкой подписи.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;T4ST&quot;&gt;&lt;strong&gt;Вывод&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;nnju&quot;&gt;🔹 &lt;strong&gt;Теоретически&lt;/strong&gt; можно запустить embedded Unix на GPU AMD, но нужно &lt;strong&gt;обойти Secure Boot и модифицировать MP1&lt;/strong&gt;.&lt;br /&gt; 🔹 &lt;strong&gt;Практически&lt;/strong&gt; без серьезного реверс-инжиниринга это сложно, так как архитектура GPU &lt;strong&gt;не предполагает автономную работу&lt;/strong&gt;.&lt;br /&gt; 🔹 &lt;strong&gt;Ограничения прошивки могут быть незаконными&lt;/strong&gt;, но их обход требует либо эксплойтов, либо аппаратных модификаций.&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(323, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;blockquote id=&quot;mULQ&quot;&gt;&lt;strong&gt;&amp;quot;Серьёзный реверс-инжиниринг&amp;quot; &lt;/strong&gt;&lt;/blockquote&gt;
    &lt;p id=&quot;kgCz&quot;&gt;в данном контексте — это не просто &lt;strong&gt;залить кастомную прошивку в EEPROM&lt;/strong&gt; (что само по себе возможно), а &lt;strong&gt;разобраться в защите Secure Boot и механизмах работы MP1&lt;/strong&gt;, чтобы заставить видеокарту загружать &lt;strong&gt;любой код без ограничений&lt;/strong&gt;.&lt;/p&gt;
  &lt;/section&gt;
  &lt;h3 id=&quot;C68C&quot;&gt;&lt;strong&gt;Что именно нужно сделать для кастомной прошивки MP1?&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;lzFE&quot;&gt;1️⃣ &lt;strong&gt;Изучить текущую прошивку MP1&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;YlKA&quot;&gt;
    &lt;li id=&quot;KMPd&quot;&gt;Дампить содержимое SPI Flash (EEPROM) видеокарты.&lt;/li&gt;
    &lt;li id=&quot;Wc7g&quot;&gt;Декодировать бинарник (анализ формата, структуры, сигнатуры AMD).&lt;/li&gt;
    &lt;li id=&quot;LLV4&quot;&gt;Найти точки проверки Secure Boot.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;BKSv&quot;&gt;2️⃣ &lt;strong&gt;Обойти проверку подписи Secure Boot&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;r7dz&quot;&gt;
    &lt;li id=&quot;D23C&quot;&gt;Найти и использовать уязвимости (stack overflow, buffer overflow, bypass механизмы).&lt;/li&gt;
    &lt;li id=&quot;9RtR&quot;&gt;Использовать аппаратные атаки (glitching, fault injection) для отключения защиты.&lt;/li&gt;
    &lt;li id=&quot;a82I&quot;&gt;Анализировать и модифицировать коды RSA-проверки (если возможно).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;85ZB&quot;&gt;3️⃣ &lt;strong&gt;Разработать и протестировать кастомную прошивку MP1&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;WqoL&quot;&gt;
    &lt;li id=&quot;vICr&quot;&gt;Написать минимальный загрузчик Unix и засунуть его в MP1.&lt;/li&gt;
    &lt;li id=&quot;qZhP&quot;&gt;Подготовить поддержку работы с VRAM как RAM.&lt;/li&gt;
    &lt;li id=&quot;Spa3&quot;&gt;Реализовать TCP/IP-стек через PCIe для взаимодействия с сетью.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;EhiR&quot;&gt;4️⃣ &lt;strong&gt;Записать прошивку в EEPROM и проверить запуск&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;Buv2&quot;&gt;
    &lt;li id=&quot;7BXa&quot;&gt;Если Secure Boot отключён → записываем через SPI-программатор.&lt;/li&gt;
    &lt;li id=&quot;ZgII&quot;&gt;Если Secure Boot активен → ищем способ его отключения.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;Y6fY&quot;&gt;&lt;strong&gt;Можно ли сделать это в гараже?&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;uoSe&quot;&gt;✅ &lt;strong&gt;Теоретически — да&lt;/strong&gt;, если у тебя есть программатор EEPROM, хороший дизассемблер, и ты умеешь реверсить бинарники.&lt;br /&gt; ❌ &lt;strong&gt;Практически — сложно&lt;/strong&gt;, потому что Secure Boot защищает MP1, и без эксплойтов или аппаратных атак прошивка просто &lt;strong&gt;не запустится&lt;/strong&gt;.&lt;/p&gt;
  &lt;blockquote id=&quot;eZi7&quot;&gt;&lt;strong&gt;Итог&lt;/strong&gt;: Да, можно &lt;strong&gt;залить свою прошивку в EEPROM&lt;/strong&gt;, но если не отключить Secure Boot &lt;strong&gt;MP1 просто её не примет&lt;/strong&gt;.&lt;/blockquote&gt;

</content></entry><entry><id>ind_ex-51282:app_v_KDE_Plasma_servis_systray_system_settings</id><link rel="alternate" type="text/html" href="https://teletype.in/@ind_ex-51282/app_v_KDE_Plasma_servis_systray_system_settings?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=ind_ex-51282"></link><title>Интеграция приложения в KDE Plasma и его запуск в качестве системного сервиса</title><published>2025-02-20T16:15:26.202Z</published><updated>2025-02-20T16:15:26.202Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img4.teletype.in/files/b1/80/b180d981-cca4-49fb-83c8-d2c29d0d2151.png"></media:thumbnail><category term="linux-amp-tools" label="Linux &amp;amp; Tools"></category><summary type="html">&lt;img src=&quot;https://img1.teletype.in/files/82/9e/829e2172-4357-4576-9477-5fb5238541c8.png&quot;&gt;Для полной интеграции приложения в системе KDE Plasma и его запуска в качестве системного сервиса, нужно создать systemd-сервис, организовать StatusNotifierItem для systray, т.е. значок в системном трее, добавить в системные настройки KDE (скомпилировать KCModule) и радоваться сидеть точить печеньки.</summary><content type="html">
  &lt;p id=&quot;AeQD&quot;&gt;Для полной интеграции приложения в системе &lt;strong&gt;KDE Plasma&lt;/strong&gt; и его запуска в качестве &lt;strong&gt;системного сервиса&lt;/strong&gt;, нужно создать systemd-сервис, организовать StatusNotifierItem для systray, т.е. значок в системном трее, добавить в системные настройки KDE (скомпилировать KCModule) и радоваться сидеть точить печеньки.&lt;/p&gt;
  &lt;figure id=&quot;g0eR&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/82/9e/829e2172-4357-4576-9477-5fb5238541c8.png&quot; width=&quot;1060&quot; /&gt;
    &lt;figcaption&gt;Интеграция приложения в KDE Plasma&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;PiDs&quot;&gt;&lt;strong&gt;1. Создать systemd-сервис&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;KxzE&quot;&gt;Если приложение должно работать в качестве фонового сервиса, нужно создать unit-файл для &lt;strong&gt;systemd&lt;/strong&gt;.&lt;/p&gt;
  &lt;h4 id=&quot;UNLv&quot;&gt;&lt;strong&gt;Шаги:&lt;/strong&gt;&lt;/h4&gt;
  &lt;ol id=&quot;p1xU&quot;&gt;
    &lt;li id=&quot;bAIB&quot;&gt;Открыть терминал и создать файл службы: &lt;code&gt;sudo nano /etc/systemd/system/myapp.service &lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;YXqX&quot;&gt;Добавить следующее содержимое, заменив &lt;code&gt;myapp&lt;/code&gt; на реальное имя приложения: &lt;/li&gt;
  &lt;/ol&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;pre id=&quot;O3z0&quot; data-lang=&quot;graphql&quot;&gt;[Unit] Description=My Custom App 
After=network.target 
[Service] 
ExecStart=/usr/bin/myapp 
Restart=always 
User=myuser Group=mygroup 
[Install] WantedBy=multi-user.target &lt;/pre&gt;
  &lt;/section&gt;
  &lt;ol id=&quot;NGSq&quot;&gt;
    &lt;ul id=&quot;lx27&quot;&gt;
      &lt;li id=&quot;fFlt&quot;&gt;&lt;strong&gt;ExecStart&lt;/strong&gt; — путь к исполняемому файлу приложения.&lt;/li&gt;
      &lt;li id=&quot;kkZQ&quot;&gt;&lt;strong&gt;User&lt;/strong&gt;/&lt;strong&gt;Group&lt;/strong&gt; — пользователь и группа, от имени которых запускается процесс.&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;yhRX&quot;&gt;Сохранить (&lt;code&gt;CTRL+X&lt;/code&gt;, затем &lt;code&gt;Y&lt;/code&gt; и &lt;code&gt;Enter&lt;/code&gt;).&lt;/li&gt;
    &lt;li id=&quot;4IUH&quot;&gt;Перезапустить &lt;code&gt;systemd&lt;/code&gt;, чтобы загрузить новый сервис: &lt;code&gt;sudo systemctl daemon-reload &lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;fgx5&quot;&gt;Включить сервис для автозапуска: &lt;code&gt;sudo systemctl enable myapp &lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;ggp3&quot;&gt;Запустить сервис: &lt;code&gt;sudo systemctl start myapp &lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;l6ad&quot;&gt;Проверить статус работы: &lt;code&gt;sudo systemctl status myapp &lt;/code&gt;&lt;/li&gt;
  &lt;/ol&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;81nN&quot;&gt;&lt;strong&gt;2. Добавить в автозагрузку KDE (для GUI-приложений)&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;TNKl&quot;&gt;Если приложение имеет графический интерфейс и должно запускаться при входе пользователя, то лучше использовать &lt;strong&gt;автозапуск KDE&lt;/strong&gt;.&lt;/p&gt;
  &lt;h4 id=&quot;BQAb&quot;&gt;&lt;strong&gt;Способ 1: Добавление через GUI&lt;/strong&gt;&lt;/h4&gt;
  &lt;ol id=&quot;dVFY&quot;&gt;
    &lt;li id=&quot;Q3VQ&quot;&gt;&lt;strong&gt;&amp;quot;Параметры системы&amp;quot; → &amp;quot;Автозапуск&amp;quot;&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;laT1&quot;&gt;Нажать &lt;strong&gt;&amp;quot;Добавить программу&amp;quot;&lt;/strong&gt;, выбрать исполняемый файл.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;h4 id=&quot;6ajW&quot;&gt;&lt;strong&gt;Способ 2: Создать &lt;code&gt;.desktop&lt;/code&gt;-файл&lt;/strong&gt;&lt;/h4&gt;
  &lt;ol id=&quot;sG4n&quot;&gt;
    &lt;li id=&quot;2kRY&quot;&gt;Создать файл в &lt;code&gt;~/.config/autostart/&lt;/code&gt;: &lt;code&gt;nano ~/.config/autostart/myapp.desktop &lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;ODvv&quot;&gt;Добавить содержимое: &lt;/li&gt;
  &lt;/ol&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;pre id=&quot;3uTd&quot; data-lang=&quot;graphql&quot;&gt;[Desktop Entry] 
Type=Application 
Exec=/usr/bin/myapp 
Hidden=false 
NoDisplay=false 
X-GNOME-Autostart-enabled=true 
Name=MyApp 
Comment=Запуск моего приложения &lt;/pre&gt;
  &lt;/section&gt;
  &lt;ol id=&quot;WmtU&quot;&gt;
    &lt;li id=&quot;HYop&quot;&gt;Сохранить (&lt;code&gt;CTRL+X&lt;/code&gt;, затем &lt;code&gt;Y&lt;/code&gt; и &lt;code&gt;Enter&lt;/code&gt;).&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;2wXZ&quot;&gt;После выхода из системы и повторного входа приложение автоматически запустится.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;ReTy&quot;&gt;&lt;strong&gt;Выбор метода&lt;/strong&gt;&lt;/h3&gt;
  &lt;ul id=&quot;5LM0&quot;&gt;
    &lt;li id=&quot;GHJ4&quot;&gt;&lt;strong&gt;Если это серверное/фоновое приложение&lt;/strong&gt; → использовать &lt;code&gt;systemd&lt;/code&gt;.&lt;/li&gt;
    &lt;li id=&quot;dUh5&quot;&gt;&lt;strong&gt;Если это GUI-приложение&lt;/strong&gt; → добавить в автозапуск KDE через &lt;code&gt;~/.config/autostart/&lt;/code&gt;.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;E4Gx&quot;&gt;Если нужно запускать GUI-приложение через &lt;strong&gt;systemd&lt;/strong&gt;, то &lt;code&gt;ExecStart&lt;/code&gt; в &lt;code&gt;.service&lt;/code&gt;-файле нужно изменить на:&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;pre id=&quot;ECkK&quot; data-lang=&quot;shell&quot;&gt;ExecStart=/usr/bin/env DISPLAY=:0 /usr/bin/myapp&lt;/pre&gt;
  &lt;/section&gt;
  &lt;p id=&quot;E4qp&quot;&gt;Это укажет, что приложение должно работать в графической среде.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;6b9w&quot;&gt;Чтобы приложение на &lt;strong&gt;C&lt;/strong&gt; интегрировалось в &lt;strong&gt;системный трей KDE Plasma&lt;/strong&gt; и его настройки можно было управлять через &lt;strong&gt;системные параметры&lt;/strong&gt;, нужно использовать &lt;strong&gt;StatusNotifierItem (SNI)&lt;/strong&gt; и &lt;strong&gt;KConfig&lt;/strong&gt;.&lt;/p&gt;
  &lt;h3 id=&quot;NdQ6&quot;&gt;&lt;strong&gt;1. Добавление значка в системный трей (StatusNotifierItem)&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;iFxO&quot;&gt;KDE Plasma больше не поддерживает старый &lt;code&gt;XEmbed&lt;/code&gt;, поэтому нужно использовать &lt;strong&gt;DBus интерфейс SNI&lt;/strong&gt;. Для этого можно использовать &lt;strong&gt;Qt&lt;/strong&gt; или писать вручную через &lt;code&gt;DBus&lt;/code&gt;.&lt;/p&gt;
  &lt;h4 id=&quot;5zWw&quot;&gt;&lt;strong&gt;Способ 1: Использование Qt и QSystemTrayIcon&lt;/strong&gt;&lt;/h4&gt;
  &lt;p id=&quot;uUGF&quot;&gt;Если приложение уже использует &lt;strong&gt;Qt&lt;/strong&gt;, то можно просто использовать &lt;code&gt;QSystemTrayIcon&lt;/code&gt;:&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;pre id=&quot;ebR7&quot; data-lang=&quot;cpp&quot;&gt;#include &amp;lt;QApplication&amp;gt;
#include &amp;lt;QSystemTrayIcon&amp;gt;
#include &amp;lt;QMenu&amp;gt;
#include &amp;lt;QAction&amp;gt;

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    QSystemTrayIcon trayIcon;
    trayIcon.setIcon(QIcon(
    &amp;quot;/usr/share/icons/hicolor/48x48/apps/myapp.png&amp;quot;));
    
    QMenu menu;
    QAction exitAction(&amp;quot;Выход&amp;quot;, &amp;amp;app);
    QObject::connect(
    &amp;amp;exitAction, &amp;amp;QAction::triggered, &amp;amp;app, &amp;amp;QApplication::quit);
    menu.addAction(&amp;amp;exitAction);

    trayIcon.setContextMenu(&amp;amp;menu);
    trayIcon.show();

    return app.exec();
}
&lt;/pre&gt;
  &lt;/section&gt;
  &lt;p id=&quot;6Xv7&quot;&gt;🔹 &lt;strong&gt;Этот код&lt;/strong&gt; создаст значок в трее с контекстным меню.&lt;/p&gt;
  &lt;p id=&quot;xnMw&quot;&gt;⚠️ &lt;strong&gt;Важно:&lt;/strong&gt; Если значок не отображается, установите пакет &lt;strong&gt;&lt;code&gt;libappindicator&lt;/code&gt;&lt;/strong&gt;:&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;pre id=&quot;XWad&quot; data-lang=&quot;shell&quot;&gt;sudo apt install libappindicator3-1&lt;/pre&gt;
  &lt;/section&gt;
  &lt;hr /&gt;
  &lt;h4 id=&quot;L54R&quot;&gt;&lt;strong&gt;Способ 2: Реализация SNI через DBus&lt;/strong&gt;&lt;/h4&gt;
  &lt;p id=&quot;USPO&quot;&gt;Если приложение &lt;strong&gt;не использует Qt&lt;/strong&gt;, можно зарегистрировать значок вручную через &lt;strong&gt;DBus&lt;/strong&gt;. Вот пример на &lt;strong&gt;C&lt;/strong&gt;:&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;pre id=&quot;gLXZ&quot; data-lang=&quot;cpp&quot;&gt;#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;
#include &amp;lt;gio/gio.h&amp;gt;

int main() {
    GDBusConnection *connection;
    GError *error = NULL;

    // Подключаемся к DBus
    connection = g_bus_get_sync(G_BUS_TYPE_SESSION, NULL, &amp;amp;error);
    if (error) {
        g_printerr(&amp;quot;Ошибка подключения к DBus: %s\n&amp;quot;, error-&amp;gt;message);
        g_error_free(error);
        return 1;
    }

    // Регистрируем значок в трее
    g_dbus_connection_call_sync
    (connection,
                &amp;quot;org.kde.StatusNotifierWatcher&amp;quot;,
                &amp;quot;/StatusNotifierWatcher&amp;quot;,
                &amp;quot;org.kde.StatusNotifierWatcher&amp;quot;,
                &amp;quot;RegisterStatusNotifierItem&amp;quot;,
                g_variant_new
                (&amp;quot;(s)&amp;quot;, &amp;quot;/org/myapp/StatusNotifierItem&amp;quot;),
                NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, &amp;amp;error);

    if (error) {
        g_printerr(&amp;quot;Ошибка регистрации SNI: %s\n&amp;quot;, error-&amp;gt;message);
        g_error_free(error);
        return 1;
    }

    printf(&amp;quot;Значок добавлен в трей!\n&amp;quot;);

    return 0;
}
&lt;/pre&gt;
  &lt;/section&gt;
  &lt;p id=&quot;6wsj&quot;&gt;Этот код регистрирует &lt;strong&gt;StatusNotifierItem&lt;/strong&gt; в Plasma через &lt;strong&gt;DBus&lt;/strong&gt;.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;13tj&quot;&gt;&lt;strong&gt;2. Интеграция в системные настройки (KConfig)&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;g4yJ&quot;&gt;Чтобы приложение сохраняло настройки в &lt;strong&gt;системных параметрах KDE&lt;/strong&gt;, можно использовать &lt;strong&gt;KConfig&lt;/strong&gt;.&lt;/p&gt;
  &lt;ol id=&quot;rC66&quot;&gt;
    &lt;li id=&quot;nDus&quot;&gt;&lt;strong&gt;Установить библиотеку KDE Frameworks 5:&lt;/strong&gt; &lt;code&gt;sudo apt install libkf5config-dev &lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;hhoa&quot;&gt;&lt;strong&gt;Использовать KConfig в коде:&lt;/strong&gt;&lt;/li&gt;
  &lt;/ol&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;pre id=&quot;gfOa&quot; data-lang=&quot;cpp&quot;&gt;#include &amp;lt;KConfig&amp;gt;
#include &amp;lt;KConfigGroup&amp;gt;
#include &amp;lt;QString&amp;gt;
#include &amp;lt;QDebug&amp;gt;

void saveSettings() {
    KConfig config(&amp;quot;myappsettingsrc&amp;quot;);
    KConfigGroup group(&amp;amp;config, &amp;quot;General&amp;quot;);
    group.writeEntry(&amp;quot;showTrayIcon&amp;quot;, true);
    config.sync();
}

void loadSettings() {
    KConfig config(&amp;quot;myappsettingsrc&amp;quot;);
    KConfigGroup group(&amp;amp;config, &amp;quot;General&amp;quot;);
    bool showTray = group.readEntry(&amp;quot;showTrayIcon&amp;quot;, true);
    qDebug() &amp;lt;&amp;lt; &amp;quot;Значок в трее:&amp;quot; &amp;lt;&amp;lt; showTray;
}

int main() {
    saveSettings();
    loadSettings();
    return 0;
}
&lt;/pre&gt;
  &lt;/section&gt;
  &lt;p id=&quot;z3Mr&quot;&gt;🔹 Файл конфигурации сохранится в &lt;code&gt;~/.config/myappsettingsrc&lt;/code&gt;.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;OfkO&quot;&gt;&lt;strong&gt;3. Добавление в системные настройки KDE (KCModule)&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;uEBb&quot;&gt;Если нужно, чтобы приложение имело &lt;strong&gt;свой пункт в &amp;quot;Параметры системы&amp;quot;&lt;/strong&gt;, то создаётся &lt;strong&gt;KCM (KDE Configuration Module)&lt;/strong&gt;.&lt;/p&gt;
  &lt;ol id=&quot;6OYa&quot;&gt;
    &lt;li id=&quot;fVVd&quot;&gt;&lt;strong&gt;Создаём .desktop-файл модуля KDE:&lt;/strong&gt; &lt;/li&gt;
  &lt;/ol&gt;
  &lt;section style=&quot;background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;pre id=&quot;PE5i&quot; data-lang=&quot;shell&quot;&gt;sudo nano /usr/share/kservices5/myapp.desktop  
Содержимое: 
[Desktop Entry] 
Type=Service 
X-KDE-ServiceTypes=KCModule 
X-KDE-Library=myappconfig 
X-KDE-PluginInfo-Name=myapp 
X-KDE-PluginInfo-Category=Settings 
Name=Настройки MyApp 
Comment=Конфигурация приложения MyApp &lt;/pre&gt;
  &lt;/section&gt;
  &lt;ol id=&quot;ZPFi&quot;&gt;
    &lt;li id=&quot;QlxE&quot;&gt;&lt;strong&gt;Создаём KCM-файл на C++:&lt;/strong&gt; &lt;/li&gt;
  &lt;/ol&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;K6sy&quot;&gt;&lt;code&gt;#include &amp;lt;KCModule&amp;gt; #include &amp;lt;KAboutData&amp;gt; #include &amp;lt;KPluginFactory&amp;gt; #include &amp;lt;QVBoxLayout&amp;gt; #include &amp;lt;QCheckBox&amp;gt; class MyAppConfig : public KCModule { Q_OBJECT public: MyAppConfig(QWidget *parent, const QVariantList &amp;amp;) : KCModule(parent) { auto *layout = new QVBoxLayout(this); auto *checkbox = new QCheckBox(&amp;quot;Показывать значок в трее&amp;quot;, this); layout-&amp;gt;addWidget(checkbox); } }; K_PLUGIN_FACTORY(MyAppConfigFactory, registerPlugin&amp;lt;MyAppConfig&amp;gt;();) K_EXPORT_PLUGIN(MyAppConfigFactory(&amp;quot;myappconfig&amp;quot;)) &lt;/code&gt;&lt;/p&gt;
  &lt;/section&gt;
  &lt;ol id=&quot;5jOC&quot;&gt;
    &lt;li id=&quot;dB4F&quot;&gt;&lt;strong&gt;Компиляция KCM:&lt;/strong&gt;&lt;/li&gt;
  &lt;/ol&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;cZ76&quot;&gt; &lt;code&gt;g++ -o myappconfig.so myappconfig.cpp $(pkg-config --cflags --libs KF5ConfigWidgets) -shared -fPIC sudo mv myappconfig.so /usr/lib/qt/plugins/ &lt;/code&gt;&lt;/p&gt;
  &lt;/section&gt;
  &lt;p id=&quot;UdVn&quot;&gt;Теперь &lt;strong&gt;настройки&lt;/strong&gt; появятся в &lt;strong&gt;системных параметрах&lt;/strong&gt; KDE!&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;nZS6&quot;&gt;&lt;strong&gt;Заключение&lt;/strong&gt;&lt;/h3&gt;
  &lt;ol id=&quot;Ptz6&quot;&gt;
    &lt;li id=&quot;SGas&quot;&gt;&lt;strong&gt;Добавить значок в трей:&lt;/strong&gt;&lt;/li&gt;
    &lt;ul id=&quot;sMrY&quot;&gt;
      &lt;li id=&quot;Z62R&quot;&gt;Через &lt;code&gt;QSystemTrayIcon&lt;/code&gt; (если &lt;strong&gt;Qt&lt;/strong&gt;)&lt;/li&gt;
      &lt;li id=&quot;lAdl&quot;&gt;Через &lt;strong&gt;DBus SNI&lt;/strong&gt; (если &lt;strong&gt;C без Qt&lt;/strong&gt;)&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;ENSO&quot;&gt;&lt;strong&gt;Сохранение настроек:&lt;/strong&gt;&lt;/li&gt;
    &lt;ul id=&quot;xNWD&quot;&gt;
      &lt;li id=&quot;qbVL&quot;&gt;Использовать &lt;code&gt;KConfig&lt;/code&gt;&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;BwUU&quot;&gt;&lt;strong&gt;Добавление в &amp;quot;Параметры системы&amp;quot; KDE:&lt;/strong&gt;&lt;/li&gt;
    &lt;ul id=&quot;dRKL&quot;&gt;
      &lt;li id=&quot;Hftt&quot;&gt;Создать &lt;strong&gt;KCModule&lt;/strong&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/ol&gt;
  &lt;hr /&gt;

</content></entry></feed>