<?xml version="1.0" encoding="UTF-8"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" >

  <channel>
    <title><![CDATA[Статьи]]></title>
    <link>https://habr.com/ru/users/reformat/publications/articles/</link>
    <description><![CDATA[Хабр: статьи пользователя reformat]]></description>
    <language>ru</language>
    <managingEditor>editor@habr.com</managingEditor>
    <generator>habr.com</generator>
    <pubDate>Fri, 01 May 2026 17:43:01 GMT</pubDate>
    
    
      <image>
        <link>https://habr.com/ru/</link>
        <url>https://habrastorage.org/webt/ym/el/wk/ymelwk3zy1gawz4nkejl_-ammtc.png</url>
        <title>Хабр</title>
      </image>
    

    
      
        
    
    <item>
      <title><![CDATA[Распознаем числа в тексте]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/586466/</guid>
      <link>https://habr.com/ru/articles/586466/?utm_campaign=586466&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<p>Кому может быть полезна эта статья? <br><br>Извращенцам делающим ML на Java? Или может быть для обучения? <br><br>Хотя зачем эти оправдания? Весь код был написан <em>because we can.</em>Под катом мы рассмотрим как превращать числа вида <em>"Двенадцать тысяч шестьсот пятьдесят девять целых четыре миллионных" </em>в форму вроде <em>12 659, 000 004.</em></p> <a href="https://habr.com/ru/articles/586466/?utm_campaign=586466&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Погрузиться в Kotlin</a>]]></description>
      
      <pubDate>Sat, 30 Oct 2021 11:21:54 GMT</pubDate>
      <dc:creator><![CDATA[Reformat]]></dc:creator>
      <category><![CDATA[Ненормальное программирование]]></category><category><![CDATA[Программирование]]></category><category><![CDATA[Java]]></category><category><![CDATA[Алгоритмы]]></category><category><![CDATA[Kotlin]]></category>
      <category><![CDATA[kotlin]]></category><category><![CDATA[числа из прописи]]></category><category><![CDATA[числа из текста]]></category><category><![CDATA[текст в числа]]></category><category><![CDATA[java]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Тайные знания: библиотеки для С++]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/581228/</guid>
      <link>https://habr.com/ru/articles/581228/?utm_campaign=581228&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<p><em>Рун не должен резать<br>Тот, кто в них не смыслит.<br>В непонятных знаках<br>Всякий может сбиться.<br>Десять знаков тайных<br>Я прочел и знаю...(Сага об Эгиле)</em></p><p>Многие начинающие программисты, уже освоив синтаксис C++, обнаруживают, что нет простого способа, как подключить библиотеку, так и собрать программу для другой ОС, или чего хуже, под другим компьютером с той же ОС. Эта проблема отчасти порождается спорной практикой обучения, когда код учат писать и запускать лишь средствами IDE, таких как Visual Studio, Code::Blocks, и других. <br>Поначалу такой подход работает, но лишь до первой реальной задачи сделать что-то, что запустится не только на вашей машине. Тут-то новички и сталкиваются с отсутствием стандартной системы сборки и менеджера зависимостей. После осознания этой сложности, большинство студентов, как правило, переходят на другие языки, попутно тиражируя в индустрии миф о том, что C++ де не кроссплатформенный язык, а вот мой Python/Java/C# - да. <br>Между тем нас окружает множество замечательных кроссплатформенных программ написанных на C++. Если вы обучаетесь C++ и хотите понять как создавать такое ПО, то эта статья для вас.</p> <a href="https://habr.com/ru/articles/581228/?utm_campaign=581228&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Узнать заклинания кроссплатформености</a>]]></description>
      
      <pubDate>Sun, 03 Oct 2021 10:33:54 GMT</pubDate>
      <dc:creator><![CDATA[Reformat]]></dc:creator>
      <category><![CDATA[Программирование]]></category><category><![CDATA[C++]]></category><category><![CDATA[Терминология IT]]></category><category><![CDATA[Системы сборки]]></category><category><![CDATA[Учебный процесс в IT]]></category>
      <category><![CDATA[С++]]></category><category><![CDATA[кроссплатформенность]]></category><category><![CDATA[cmake]]></category><category><![CDATA[как подключить библиотеку C++]]></category><category><![CDATA[как пользоваться cmake]]></category><category><![CDATA[cmake инструкция]]></category><category><![CDATA[как пользоваться conan]]></category><category><![CDATA[conan инструкция]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Обработка русского языка на Java]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/578826/</guid>
      <link>https://habr.com/ru/articles/578826/?utm_campaign=578826&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/467/7b9/752/4677b97522a3826675725230b7085bd5.png" /><p>Рассказ пойдет об одной новой, общедоступной Java/Kotlin библиотеке, для работы с русским языком. Она позволяет получить исходные формы + морфологическую информацию для большинства слов русского языка. Статья предназначена для тех, кто создает ботов, обрабатывает сообщения и занимается поиском. Для справки, ключевое отличие лемматизации от стеммизации (урезания до нормализованной формы) состоит в том, что лемма удовлятворяет правилам языка, например для слова "яблоками" леммой будет "яблоко", а не просто урезанный корень. Лемма может быть и более сложной, например для слова люди, начальная форма  – человек.  В этой статье мы рассмотрим способ быстрого извлечения такой информации из морфологического словаря.</p> <a href="https://habr.com/ru/articles/578826/?utm_campaign=578826&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Запустить процесс</a>]]></description>
      
      <pubDate>Sun, 19 Sep 2021 14:45:02 GMT</pubDate>
      <dc:creator><![CDATA[Reformat]]></dc:creator>
      <category><![CDATA[Поисковые технологии]]></category><category><![CDATA[Программирование]]></category><category><![CDATA[Java]]></category><category><![CDATA[Kotlin]]></category><category><![CDATA[Natural Language Processing]]></category>
      <category><![CDATA[java]]></category><category><![CDATA[kotlin]]></category><category><![CDATA[aot]]></category><category><![CDATA[lemmatization]]></category><category><![CDATA[лемматизация]]></category><category><![CDATA[обработка текстов]]></category><category><![CDATA[русский язык]]></category><category><![CDATA[морфология]]></category><category><![CDATA[морфологический анализ]]></category><category><![CDATA[морфологический словарь]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Kq: продолжаем обрабатывать JSON]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/566012/</guid>
      <link>https://habr.com/ru/articles/566012/?utm_campaign=566012&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/c7c/0cb/256/c7c0cb256b32c9dba2c77ca1064bc867.png" /><p>...на Kotlin разумеется. В комментариях к <a href="https://habr.com/ru/post/565576/" rel="noopener noreferrer nofollow">предыдущей статье</a> было задано несколько вопросов, как сделать конвертацию в tsv, почему утилита собрана в Docker образ и предложение использовать <a href="https://www.graalvm.org/reference-manual/native-image/" rel="noopener noreferrer nofollow">нативный образ GraalVM</a>. </p><p>В этой статье содержится ответ на них и заодно рассказывается о последнем обновлении функций утилиты. Кто по работе часто занимается процессингом JSON - добро пожаловать под кат.</p> <a href="https://habr.com/ru/articles/566012/?utm_campaign=566012&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Sat, 03 Jul 2021 23:25:19 GMT</pubDate>
      <dc:creator><![CDATA[Reformat]]></dc:creator>
      <category><![CDATA[Программирование]]></category><category><![CDATA[Функциональное программирование]]></category><category><![CDATA[Визуализация данных]]></category><category><![CDATA[Kotlin]]></category><category><![CDATA[Linux]]></category>
      <category><![CDATA[kotlin]]></category><category><![CDATA[jvm]]></category><category><![CDATA[json]]></category><category><![CDATA[jq]]></category><category><![CDATA[ndjson]]></category><category><![CDATA[bash]]></category><category><![CDATA[shell]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Современный JSON процессор]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/565576/</guid>
      <link>https://habr.com/ru/articles/565576/?utm_campaign=565576&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/c25/733/41d/c2573341d37124a93dbbe674364bac0c.png" /><p>Вместо тысячи слов... Хотели бы вы обрабатывать json в терминале таким образом?</p> <a href="https://habr.com/ru/articles/565576/?utm_campaign=565576&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Если да, то вам под кат.</a>]]></description>
      
      <pubDate>Thu, 01 Jul 2021 01:15:40 GMT</pubDate>
      <dc:creator><![CDATA[Reformat]]></dc:creator>
      <category><![CDATA[Программирование]]></category><category><![CDATA[Java]]></category><category><![CDATA[Функциональное программирование]]></category><category><![CDATA[Kotlin]]></category><category><![CDATA[Linux]]></category>
      <category><![CDATA[kotlin]]></category><category><![CDATA[jq]]></category><category><![CDATA[analyze]]></category><category><![CDATA[json]]></category><category><![CDATA[ndjson]]></category><category><![CDATA[docker]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Мультивселенная и задачи о переправе]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/562956/</guid>
      <link>https://habr.com/ru/articles/562956/?utm_campaign=562956&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/cf8/bd1/a5f/cf8bd1a5f6c8711cba454b6a8dce9078.png" /><p>Как-то прочел на Хабре статью <a href="https://habr.com/ru/post/513464/" rel="noopener noreferrer nofollow">«Перевозим волка, козу и капусту через реку с эффектами на Haskell»</a>, которая так понравилась, что решил написать фреймворк для всего <a href="https://en.wikipedia.org/wiki/River_crossing_puzzle" rel="noopener noreferrer nofollow">класса задач о переправах</a>, используя мультипарадигменное проектирование. Наконец удалось найти время, и вот, спустя почти год, фреймворк готов. Теперь персонажи, их взаимодействия и описание искомого результата задаются через <em>domain-specific language</em>, который позволяет решать любые головоломки подобного рода с пошаговым выводом. Ниже приводится поэтапный разбор реализации DSL. Статья подойдет тем кто изучает язык Kotlin или просто интересуется примерами его использования. Некоторые малозначимые детали (вроде импортов и вывода) для кратости опущены.</p> <a href="https://habr.com/ru/articles/562956/?utm_campaign=562956&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Начнем писать код</a>]]></description>
      
      <pubDate>Tue, 15 Jun 2021 23:46:15 GMT</pubDate>
      <dc:creator><![CDATA[Reformat]]></dc:creator>
      <category><![CDATA[Ненормальное программирование]]></category><category><![CDATA[Программирование]]></category><category><![CDATA[ООП]]></category><category><![CDATA[Функциональное программирование]]></category><category><![CDATA[Kotlin]]></category>
      <category><![CDATA[kotlin]]></category><category><![CDATA[dsl]]></category><category><![CDATA[фп]]></category><category><![CDATA[ооп]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Распознавание команд]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/560914/</guid>
      <link>https://habr.com/ru/articles/560914/?utm_campaign=560914&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<p>При разработке ботов для Telegram и других месенджеров, периодически  возникает задача  распознавания и выполнения запросов, высказанных  человеческим языком. Именно эта "фишка", по некоторому мнению, и  является главным отличием ботов от приложений командной строки. Под  катом описан собственный фреймворк для исполнения произвольных речевых  команд. Описания ключевых концепций сопровождены примерами на языке  Kotlin.</p> <a href="https://habr.com/ru/articles/560914/?utm_campaign=560914&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Thu, 03 Jun 2021 16:32:25 GMT</pubDate>
      <dc:creator><![CDATA[Reformat]]></dc:creator>
      <category><![CDATA[Мессенджеры]]></category><category><![CDATA[ООП]]></category><category><![CDATA[Функциональное программирование]]></category><category><![CDATA[Kotlin]]></category><category><![CDATA[Natural Language Processing]]></category>
      <category><![CDATA[kotlin]]></category><category><![CDATA[java]]></category><category><![CDATA[telegram]]></category><category><![CDATA[bot]]></category><category><![CDATA[распознавание речи]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Telegram bot provides time-based currency]]></title>
      <guid isPermaLink="true">https://habr.com/en/articles/556474/</guid>
      <link>https://habr.com/en/articles/556474/?utm_campaign=556474&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/32d/2d5/661/32d2d56616855028d1b1986f8d12eb8c.jpg" /><p>Many of us spend time in specialized telegram groups. The power over communication here belongs to random people with their own shortcomings. Conflict and abuse occurs regularly. Is there another way to keep order so that scam spam doesn't flourish and no one has total control over group members? </p><p>In my case, these thoughts led to the development and testing of a system that can be connected to your Telegram today.</p> <a href="https://habr.com/ru/articles/556474/?utm_campaign=556474&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">How it works?</a>]]></description>
      
      <pubDate>Sun, 09 May 2021 08:03:33 GMT</pubDate>
      <dc:creator><![CDATA[Reformat]]></dc:creator>
      <category><![CDATA[Программирование]]></category><category><![CDATA[IT-стандарты]]></category><category><![CDATA[Kotlin]]></category><category><![CDATA[Управление сообществом]]></category><category><![CDATA[Социальные сети]]></category>
      <category><![CDATA[kotlin]]></category><category><![CDATA[telegram]]></category><category><![CDATA[redis]]></category><category><![CDATA[jvm]]></category><category><![CDATA[bot]]></category><category><![CDATA[timecobot]]></category><category><![CDATA[democracy]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Валюта основанная на времени]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/556292/</guid>
      <link>https://habr.com/ru/articles/556292/?utm_campaign=556292&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/471/540/7c3/4715407c365dc3e9c238b3a9fd46800e.jpg" /><p>Многие из нас проводят время в профильных телеграм-группах. Власть над общением здесь принадлежит случайным людям со своими недостатками. Нередко встречаются конфликты и злоупотребления. Это побуждает задуматься, а можно ли поддерживать порядок иначе, так, чтобы не расцветал мошеннический спам и одновременно ни у кого не было абсолютной власти над адекватным собеседником? </p><p>И в моем случае эти размышления вылились в разработанную и протестированную систему которую уже сегодня можно подключить в ваш Telegram.</p> <a href="https://habr.com/ru/articles/556292/?utm_campaign=556292&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Как это работает?</a>]]></description>
      
      <pubDate>Fri, 07 May 2021 10:41:02 GMT</pubDate>
      <dc:creator><![CDATA[Reformat]]></dc:creator>
      <category><![CDATA[Программирование]]></category><category><![CDATA[IT-стандарты]]></category><category><![CDATA[Kotlin]]></category><category><![CDATA[Управление сообществом]]></category><category><![CDATA[Социальные сети]]></category>
      <category><![CDATA[демократия]]></category><category><![CDATA[валюта]]></category><category><![CDATA[kotlin]]></category><category><![CDATA[jvm]]></category><category><![CDATA[redis]]></category><category><![CDATA[timecobot]]></category><category><![CDATA[telegram]]></category><category><![CDATA[банхаммер]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[C++ с кроссплатформенностью и зависимостями]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/549788/</guid>
      <link>https://habr.com/ru/articles/549788/?utm_campaign=549788&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/bb9/1cf/023/bb91cf023ca09e38cab940634a54012f.png" /><p>C++ по прежнему используется не только для написания ОС, игр и драйверов, но и для неприхотливых к ресурсам утилит командной строки. Между тем конкуренты на этом поприще, например Rust, предлагают систему сборки c менеджером зависимостей по умолчанию. Для C++ де-факто тоже есть стандартная система сборки CMake, но как подключать внешние библиотеки без боли? Вспомним, что для многих развитых технологий есть нечто вроде странички <em>https://start.yourtechnology.io</em>, создающих базовый стандартный проект, чтобы не тратить время на&nbsp;boilerplate конфигурацию. В этой статье рассматривается именно такой шаблон для создания C++ проектов с менеджером зависимостей vcpkg.</p> <a href="https://habr.com/ru/articles/549788/?utm_campaign=549788&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 30 Mar 2021 14:38:13 GMT</pubDate>
      <dc:creator><![CDATA[Reformat]]></dc:creator>
      <category><![CDATA[C++]]></category><category><![CDATA[Системы сборки]]></category><category><![CDATA[Программирование]]></category>
      <category><![CDATA[c++]]></category><category><![CDATA[cmake]]></category><category><![CDATA[vcpkg]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Шаблон Kotlin микросервисов]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/544538/</guid>
      <link>https://habr.com/ru/articles/544538/?utm_campaign=544538&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/c6b/099/586/c6b099586afa9994642a5ccc2b4347fd.png" /><p>Для разработчиков не секрет, что создание нового сервиса влечет за собой немало рутиной настройки: билд скрипты, зависимости, тесты, docker, k8s дескрипторы. Раз мы выполняем эту работу, значит текущих шаблонов IDE недосточно. Под катом мои попытки автоматизировать все до одной кроссплатформенной кнопки "сделать хорошо" сопровождаемые кодом, примерами и финальным результатом. </p><p>Если перспективы создания сервисов в один клик с последующим автоматическим деплоем в Digital Ocean звучат заманчиво, значит эта статья для вас.<br></p> <a href="https://habr.com/ru/articles/544538/?utm_campaign=544538&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Sat, 27 Feb 2021 16:54:58 GMT</pubDate>
      <dc:creator><![CDATA[Reformat]]></dc:creator>
      <category><![CDATA[Программирование]]></category><category><![CDATA[Java]]></category><category><![CDATA[Kotlin]]></category><category><![CDATA[Gradle]]></category><category><![CDATA[Микросервисы]]></category>
      <category><![CDATA[java]]></category><category><![CDATA[kotllin]]></category><category><![CDATA[docker]]></category><category><![CDATA[docker-compose]]></category><category><![CDATA[digitalocean]]></category><category><![CDATA[ktor]]></category><category><![CDATA[microservice]]></category><category><![CDATA[gradle]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Сохраняем музыку на C#]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/525346/</guid>
      <link>https://habr.com/ru/articles/525346/?utm_campaign=525346&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/webt/b-/p2/kk/b-p2kks4_junzf457vx_hdx5ero.png" alt="image"><br>
В 2020ом мы пользуемся разными музыкальными сервисами, но как реликт ушедшей эпохи, в забытом профиле ВК, у многих хранится музыка. Функции для загрузки нет, но что если позарез нужно спасти аудиозапись?<br>
Поскольку такого софта в открытом доступе не обнаружилось, кроме парочки веб-сервисов требующих авторизацию через ВК (что не очень то и безопасно), под катом мы рассмотрим процесс создания self-hosted утилиты на современном C# для загрузки своих аудио, не сливающей данные профиля сторонним сервисам.<br> <a href="https://habr.com/ru/articles/525346/?utm_campaign=525346&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Wed, 28 Oct 2020 02:22:08 GMT</pubDate>
      <dc:creator><![CDATA[Reformat]]></dc:creator>
      <category><![CDATA[.NET]]></category><category><![CDATA[C#]]></category><category><![CDATA[VK API]]></category><category><![CDATA[Программирование]]></category>
      <category><![CDATA[c#]]></category><category><![CDATA[.net]]></category><category><![CDATA[msbuild]]></category><category><![CDATA[вконтакте]]></category>
    </item>
  

  

  

	
  

  

  

      

      

      

    
  </channel>
</rss>
