<?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/firsofmaxim/publications/articles/</link>
    <description><![CDATA[Хабр: статьи пользователя firsofmaxim]]></description>
    <language>ru</language>
    <managingEditor>editor@habr.com</managingEditor>
    <generator>habr.com</generator>
    <pubDate>Sun, 03 May 2026 17:24:18 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[[Перевод] Graceful Shutdown в Go на практике]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/908344/</guid>
      <link>https://habr.com/ru/articles/908344/?utm_campaign=908344&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/790/758/6b0/7907586b03f8ded0ee29fdf00d480213.png" /><p>Разберемся с сигналами от ОС, поработаем с таймаутами и контекстом в нашем HTTP сервере и  шаг за шагом сделаем Graceful Shutdown в Go приложении. </p> <a href="https://habr.com/ru/articles/908344/?utm_campaign=908344&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 16 May 2025 09:35:13 GMT</pubDate>
      <dc:creator><![CDATA[FirsofMaxim]]></dc:creator>
      <category><![CDATA[Go]]></category><category><![CDATA[Программирование]]></category>
      <category>golang</category><category>go</category><category>graceful shutdown</category><category>practice</category>
    </item>
  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] Почему исключения в Kotlin Coroutines это сложно и как с этим жить?]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/689256/</guid>
      <link>https://habr.com/ru/articles/689256/?utm_campaign=689256&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/68d/14d/82b/68d14d82b35bc9d2e8eb864e357a2d45.png" /><p>Обработка исключений, вероятно одна из самых сложных частей, когда вы изучаете корутины в Kotlin. В этой статье, я расскажу о причинах такой сложности и объясню некоторые ключевые моменты для хорошего понимания темы. После этого вы сможете реализовать правильную инфраструктуру для обработки ошибок в своем собственном приложении.</p> <a href="https://habr.com/ru/articles/689256/?utm_campaign=689256&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 20 Sep 2022 11:45:31 GMT</pubDate>
      <dc:creator><![CDATA[FirsofMaxim]]></dc:creator>
      <category><![CDATA[Разработка мобильных приложений]]></category><category><![CDATA[Android]]></category><category><![CDATA[Kotlin]]></category>
      <category>android</category><category>kotlin</category><category>coro</category><category>error handling</category><category>exception</category>
    </item>
  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] Kotlin, обрабатываем исключения в корутинах правильно]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/664444/</guid>
      <link>https://habr.com/ru/articles/664444/?utm_campaign=664444&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/300/52c/76e/30052c76e70543b10347f7589f85f915.jpeg" /><p>Возможно вы думаете обработка таких исключений происходит как обычно в Kotlin/Java коде. К сожалению, при использовании вложенных корутин, все может работать не так как ожидается.</p><p>В этой статье я попробую показать ситуации, в которых требуется осторожность и расскажу про лучшие практики в обработке ошибок.</p><p></p> <a href="https://habr.com/ru/articles/664444/?utm_campaign=664444&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Thu, 05 May 2022 10:44:43 GMT</pubDate>
      <dc:creator><![CDATA[FirsofMaxim]]></dc:creator>
      <category><![CDATA[Разработка мобильных приложений]]></category><category><![CDATA[Android]]></category><category><![CDATA[Kotlin]]></category>
      <category>android</category><category>coro</category><category>kotlin</category><category>error</category><category>exception handling</category>
    </item>
  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] Kotlin, как работает suspend под капотом]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/659699/</guid>
      <link>https://habr.com/ru/articles/659699/?utm_campaign=659699&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/642/046/69e/64204669e4018fb95643cb0a0703a27f.png" /><p>Как компилятор Kotlin преобразует&nbsp;<em>suspend</em>&nbsp;код? Что получается в итоге? Разбираемся в машине состояний suspend кода.</p><p></p> <a href="https://habr.com/ru/articles/659699/?utm_campaign=659699&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Thu, 07 Apr 2022 16:39:23 GMT</pubDate>
      <dc:creator><![CDATA[FirsofMaxim]]></dc:creator>
      <category><![CDATA[Разработка мобильных приложений]]></category><category><![CDATA[Android]]></category><category><![CDATA[Kotlin]]></category>
      <category>Android</category><category>kotlin</category><category>suspend</category><category>function</category><category>asynchronous</category>
    </item>
  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] Android, Kotlin Flow во ViewModel — все сложно]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/581914/</guid>
      <link>https://habr.com/ru/articles/581914/?utm_campaign=581914&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/3de/a4d/720/3dea4d72029f51afff6cca023003f118.jpg" /><p>Сравним Kotlin-Flow и ViewModel в Android приложении, посмотрим в чем отличия и узнаем сильные стороны каждого подхода.</p><p></p> <a href="https://habr.com/ru/articles/581914/?utm_campaign=581914&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Wed, 06 Oct 2021 12:14:22 GMT</pubDate>
      <dc:creator><![CDATA[FirsofMaxim]]></dc:creator>
      <category><![CDATA[Разработка мобильных приложений]]></category><category><![CDATA[Android]]></category>
      <category>android</category><category>kotlin</category><category>flow</category><category>viewmodel</category>
    </item>
  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] Android, жизненый цикл Jetpack компонентов]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/577482/</guid>
      <link>https://habr.com/ru/articles/577482/?utm_campaign=577482&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/916/233/4f1/9162334f1b6b8aaee87046607ab12e39.png" /><p>Руководство по работе с жизненным циклом Android компонентов, рассмотрим базовые понятия, что такое LifecycleObserver, события и состояния жизненного цикла, кастомные LifecycleOwner.</p><p>Перевод статьи <a href="https://www.raywenderlich.com/22025947-lifecycle-aware-components-using-android-jetpack" rel="noopener noreferrer nofollow">Lifecycle-Aware Components Using Android Jetpack</a>.</p> <a href="https://habr.com/ru/articles/577482/?utm_campaign=577482&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Sun, 12 Sep 2021 12:14:40 GMT</pubDate>
      <dc:creator><![CDATA[FirsofMaxim]]></dc:creator>
      <category><![CDATA[Разработка мобильных приложений]]></category><category><![CDATA[Android]]></category><category><![CDATA[Тестирование мобильных приложений]]></category>
      <category>android</category><category>jetpack</category><category>lifecycleobserver</category><category>lifecycle</category><category>lifecycleowner</category><category>raywenderlich</category>
    </item>
  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] Android Bluetooth Low Energy (BLE) – готовим правильно, часть #4 (bonding)]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/539740/</guid>
      <link>https://habr.com/ru/articles/539740/?utm_campaign=539740&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/4ed/b3b/245/4edb3b24577d2ed8231a4c55d950e116.jpeg" /><p><strong>Содержание</strong></p><p><a href="https://habr.com/ru/post/536392/" rel="noopener noreferrer nofollow">Часть #1 (scanning)</a></p><p><a href="https://habr.com/ru/post/537526/" rel="noopener noreferrer nofollow">Часть #2 (connecting/disconnecting)</a></p><p><a href="https://habr.com/ru/post/538768/" rel="noopener noreferrer nofollow">Часть #3 (read/write)</a></p><p>Часть #4 (bonding), вы здесь</p><p>В&nbsp;<a href="https://habr.com/ru/post/538768/" rel="noopener noreferrer nofollow">предыдущей статье</a>&nbsp;мы разобрались с операциями чтения/записи, включения/выключения нотификаций и организации очереди команд. В этой статье мы поговорим о&nbsp;<strong>сопряжении устройств</strong>&nbsp;(<em>Прим. переводчика – далее я буду использовать термин «bonding»</em>).</p> <a href="https://habr.com/ru/articles/539740/?utm_campaign=539740&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Thu, 28 Jan 2021 13:36:21 GMT</pubDate>
      <dc:creator><![CDATA[FirsofMaxim]]></dc:creator>
      <category><![CDATA[Java]]></category><category><![CDATA[Разработка мобильных приложений]]></category><category><![CDATA[Android]]></category>
      <category>android</category><category>bluetooth</category><category>ble</category><category>bluetooth low energy</category>
    </item>
  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] Android Bluetooth Low Energy (BLE) – готовим правильно, часть #3 (read/write)]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/538768/</guid>
      <link>https://habr.com/ru/articles/538768/?utm_campaign=538768&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/3e8/514/c4b/3e8514c4b9b5217443d88ede5bb58b69.jpeg" /><p><a href="https://habr.com/ru/post/536392/" rel="noopener noreferrer nofollow">Часть #1 (scanning)</a></p><p><a href="https://habr.com/ru/post/537526/" rel="noopener noreferrer nofollow">Часть #2 (connecting/disconnecting)</a></p><p>Часть #3 (read/write), вы здесь</p><p>В&nbsp;<a href="https://fmaxx.github.io/android/ble/bluetoothlowenergy/2020/01/10/android-ble-part-2.html" rel="noopener noreferrer nofollow">предыдущей статье</a>&nbsp;мы подробно поговорили о подключении/отключении BLE устройств. Эта статья о&nbsp;<strong>чтении</strong>&nbsp;и&nbsp;<strong>записи</strong>&nbsp;характеристик, а также&nbsp;о <strong>включении-выключении уведомлений</strong>.</p> <a href="https://habr.com/ru/articles/538768/?utm_campaign=538768&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 22 Jan 2021 15:28:09 GMT</pubDate>
      <dc:creator><![CDATA[FirsofMaxim]]></dc:creator>
      <category><![CDATA[Java]]></category><category><![CDATA[Разработка мобильных приложений]]></category><category><![CDATA[Android]]></category>
      <category>Android</category><category>Bluetooth</category><category>ble</category><category>low energy</category><category>bluetooth low energy</category>
    </item>
  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] Android Bluetooth Low Energy (BLE) — готовим правильно, часть #2 (connecting/disconnecting)]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/537526/</guid>
      <link>https://habr.com/ru/articles/537526/?utm_campaign=537526&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/webt/ov/5_/6m/ov5_6mp_dtv73j_qwab6ilwn5f4.jpeg" /><p>Подключение, отключение и обнаружение BLE сервисов.</p> <a href="https://habr.com/ru/articles/537526/?utm_campaign=537526&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 15 Jan 2021 15:36:36 GMT</pubDate>
      <dc:creator><![CDATA[FirsofMaxim]]></dc:creator>
      <category><![CDATA[Java]]></category><category><![CDATA[Разработка мобильных приложений]]></category><category><![CDATA[Android]]></category>
      <category>Android</category><category>bluetooth</category><category>bluetooth le</category><category>bluetooth low energy</category>
    </item>
  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] Android Bluetooth Low Energy (BLE) — готовим правильно, часть #1 (scanning)]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/536392/</guid>
      <link>https://habr.com/ru/articles/536392/?utm_campaign=536392&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/4cd/75a/9ea/4cd75a9ea278132e547ebbf03181f2fd.jpeg" /><p>Scanning.</p> <a href="https://habr.com/ru/articles/536392/?utm_campaign=536392&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Thu, 07 Jan 2021 16:33:44 GMT</pubDate>
      <dc:creator><![CDATA[FirsofMaxim]]></dc:creator>
      <category><![CDATA[Java]]></category><category><![CDATA[Разработка мобильных приложений]]></category><category><![CDATA[Android]]></category>
      <category>bluetooth</category><category>ble</category><category>android</category><category>bluetooth low energy</category>
    </item>
  

  

      

      

      

    
  </channel>
</rss>
