<?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>@smbvk</title><author><name>@smbvk</name></author><id>https://teletype.in/atom/smbvk</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/smbvk?offset=0"></link><link rel="alternate" type="text/html" href="https://teletype.in/@smbvk?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=smbvk"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/smbvk?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-06-19T04:06:41.296Z</updated><entry><id>smbvk:rdkMF_z5fcW</id><link rel="alternate" type="text/html" href="https://teletype.in/@smbvk/rdkMF_z5fcW?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=smbvk"></link><title>Что такое kPHP и с чем его едят</title><published>2022-12-19T12:09:59.043Z</published><updated>2022-12-19T12:36:45.690Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img1.teletype.in/files/88/62/88628f10-d28f-4a4a-b2a4-206ed1c5f3bf.png"></media:thumbnail><summary type="html">kPHP – это:</summary><content type="html">
  &lt;p id=&quot;Mssi&quot;&gt;&lt;strong&gt;kPHP – это:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;BZpf&quot;&gt;
    &lt;li id=&quot;u11q&quot;&gt;общее ускорение работы кода за счет перегонки всей кодовой базы в плюсы;&lt;/li&gt;
    &lt;li id=&quot;ypBk&quot;&gt;кастомный компилятор и транслятор кода, который перегоняет php &lt;br /&gt;в C++ современная версия kphp позволяет писать на php очень близкому к современным стандартам и делает код понятным, предсказуемым и отлаживаемым;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;ul id=&quot;kwWx&quot;&gt;
    &lt;li id=&quot;p0CL&quot;&gt;kPHP уже 2 года в OpenSource и получил тысячи звёзд &lt;a href=&quot;https://github.com/VKCOM/kphp&quot; target=&quot;_blank&quot;&gt;на GitHub.&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;cEdn&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;xrIz&quot;&gt;&lt;strong&gt;Какие возможности дает kPHP нашей команде?&lt;/strong&gt;&lt;br /&gt;1. Мы получаем строго типизированный php = снижение потенциальных рисков написать код с ошибкой;&lt;br /&gt;&lt;br /&gt;2. В php нет полноценного параллелизма, а в kPHP – есть: сам механизм реализован на основе джоб-воркеров и сейчас полноценно работает из коробки. Это дает возможности к кратному росту скорости исполнения кода. Например, при переводе одного из основных методов API на этот подход нам удалось сократить время исполнения кода на несколько сотен миллисекунд;&lt;br /&gt;&lt;br /&gt;3. Общее ускорение работы кода за счет перегонки всей кодовой базы в плюсы.&lt;/p&gt;
  &lt;p id=&quot;niP2&quot;&gt;&lt;strong&gt;Но, как говорится, есть нюанс: &lt;/strong&gt;&lt;br /&gt;PHP и C++ – это хоть и близкие языки, но в ряде случаев их внутрянка сильно отличается. Самый яркий пример – это массивы, которые имеют отличие в реализации. Обычно, в такие моменты kPHP довольно демократичен к разработчику: есть полифилы, которые позволяют сохранить привычные методы с их сигнатурой. Но все же kPHP не даст использовать то, что не вписывается в концепт перегонки в плюсы.&lt;/p&gt;

</content></entry><entry><id>smbvk:qI5DnFuhNjw</id><link rel="alternate" type="text/html" href="https://teletype.in/@smbvk/qI5DnFuhNjw?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=smbvk"></link><title>is_predicted_as_business - как мы создали классификатор бизнес-сообществ</title><published>2022-10-12T11:37:29.444Z</published><updated>2022-10-12T12:30:53.168Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img4.teletype.in/files/38/cd/38cdbef0-9f25-4f99-ad69-946c8213512f.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img1.teletype.in/files/84/2d/842dae94-4bc8-4b28-a4e6-2223416e5418.jpeg&quot;&gt;
Действительно, сообществ внутри ВКонтакте очень много – больше 200 млн. Помочь сообществам развиваться, а пользователям находить нужное помогают технологии machine learning. Так команда разработки фичей для бизнеса и покупателей может предложить инструменты поиска, рекомендаций, мессенджер для бизнеса, формирование корзины и оплаты заказов и сделать это точно под запрос конкретного бизнеса или пользователя.

Первая моделька идентификации сообществ появилась в социальной сети больше 8 лет назад. С тех пор мы не раз оценивали качество и эффективность ML-модели, а этим летом пошли еще дальше и создали новую модель, которую обучили и постепенно обновляем.</summary><content type="html">
  &lt;p id=&quot;ezWB&quot;&gt;&lt;br /&gt;Действительно, сообществ внутри ВКонтакте очень много – больше 200 млн. Помочь сообществам развиваться, а пользователям находить нужное помогают технологии machine learning. Так команда разработки фичей для бизнеса и покупателей может предложить инструменты поиска, рекомендаций, мессенджер для бизнеса, формирование корзины и оплаты заказов и сделать это точно под запрос конкретного бизнеса или пользователя.&lt;br /&gt;Первая моделька идентификации сообществ появилась в социальной сети больше 8 лет назад. С тех пор мы не раз оценивали качество и эффективность ML-модели, а этим летом пошли еще дальше и создали новую модель, которую обучили и постепенно обновляем.&lt;/p&gt;
  &lt;h3 id=&quot;50Qu&quot;&gt;&lt;strong&gt;По каким критериям мы определяем качество новой ML-модели:&lt;/strong&gt;&lt;/h3&gt;
  &lt;ol id=&quot;0aUC&quot;&gt;
    &lt;li id=&quot;DptG&quot;&gt;recall – насколько точно модель не упускает из виду сообщества. Здесь мы получили +4 п.п. от точности предыдущей модели;&lt;/li&gt;
    &lt;li id=&quot;xNb5&quot;&gt;precision – надежность оценки: прирост +12 п.п. среди тех, кого модель считает бизнесами, реально являются бизнесами;&lt;/li&gt;
    &lt;li id=&quot;A1MU&quot;&gt;accuracy – новая модель модель на 9% чаще правильно определяет бизнес-сообщество.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;figure id=&quot;3IVQ&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/84/2d/842dae94-4bc8-4b28-a4e6-2223416e5418.jpeg&quot; width=&quot;688&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;egTC&quot;&gt;Чтобы модель использовалась на проде, мы создали собственное хранилище. Признак сообщества можно брать напрямую из кода, что упрощает исследования и эксперименты, разработку и выкатку новых фичей.&lt;/p&gt;

</content></entry><entry><id>smbvk:n26IHflTvE1</id><link rel="alternate" type="text/html" href="https://teletype.in/@smbvk/n26IHflTvE1?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=smbvk"></link><title>Рефакторинг карточки товара</title><published>2022-10-06T11:05:26.021Z</published><updated>2022-10-06T11:05:26.021Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img4.teletype.in/files/b8/9a/b89a0526-472d-444e-b78d-52131dcdf0bb.png"></media:thumbnail><summary type="html">Как мы решали задачу обновления карточки? </summary><content type="html">
  &lt;p id=&quot;yI9O&quot;&gt;&lt;strong&gt;Как мы решали задачу обновления карточки? &lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;c0or&quot;&gt;Мы условились, что новая карточка товара в Маркете должна выглядеть для клиента точно также, как и прежняя. Также нашей задачей было сохранить весь доступный функционал.&lt;/p&gt;
  &lt;p id=&quot;ttAY&quot;&gt;&lt;strong&gt;Какие особенности разработки мы учли?&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;vO9x&quot;&gt;Основная сложность при разработке была в том, что мы не знали всех кейсов: когда и какой функционал карточки должен демонстрироваться. При рефакторинге мы параллельно написали документацию, описав все состояния компонента.&lt;/p&gt;
  &lt;p id=&quot;a9xr&quot;&gt;&lt;strong&gt;Что получилось?&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;aa8F&quot;&gt;В результате рефакторинга скорость разработки новых фичей в карточке товара увеличилась в ~3 раза. После тщательного тестирования, мы убедились, что весь функционал сохранен. Теперь все карточки написаны на React – маленький шаг для человечества, но большой для социальной сети с огромной историей и количеством пользователей.&lt;/p&gt;

</content></entry><entry><id>smbvk:MVpF3tiSRZj</id><link rel="alternate" type="text/html" href="https://teletype.in/@smbvk/MVpF3tiSRZj?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=smbvk"></link><title>Как звучит твоя квартира?</title><published>2022-09-09T13:21:55.600Z</published><updated>2022-09-09T13:21:55.600Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img2.teletype.in/files/99/79/9979bdfe-cd73-4d3b-9fe3-f5a1e32d098b.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img3.teletype.in/files/af/92/af92b585-a432-4bd1-b517-c07b66d445d2.jpeg&quot;&gt;Вчера на мансарде офиса Rambler&amp;Co вместе с мобильными разработчиками из Okko, СберЗдоровье и VK для бизнеса +Юла (это кстати мы 😄) обсудили как сохранить непрерывность процессов: реально ли запустить приложение за 3 дня, можно ли подружиться с техподдержкой Apple TV и как повелевать пространственным звуком Spatial Audio.</summary><content type="html">
  &lt;p id=&quot;vpId&quot;&gt;Вчера на мансарде офиса Rambler&amp;amp;Co вместе с мобильными разработчиками из Okko, СберЗдоровье и VK для бизнеса +Юла (это кстати мы 😄) обсудили как сохранить непрерывность процессов: реально ли запустить приложение за 3 дня, можно ли подружиться с техподдержкой Apple TV и как повелевать пространственным звуком Spatial Audio.&lt;/p&gt;
  &lt;p id=&quot;abyv&quot;&gt;iOS-разработчик из команды VK для бизнеса и Юлы, Фамил Гаджиев, эффектно завершил митап: мы не только услышали музыку Стравинского и посмеялись над фламинго, но и вручили подарок за лучший вопрос. Какой? Можно ли встроить звук в приложение выбора недвижимости – спросили Фамила из зала. Одному из участников пришла в голову идея будущего стартапа и, кто знает, возможно совсем скоро мы сможем ещё до аренды или покупки «услышать свою будущую квартиру» (актуально, для тех, кого беспокоят активные соседи и шумные улицы).&lt;/p&gt;
  &lt;p id=&quot;z3FT&quot;&gt;А ещё, мы пригласили ребят на экскурсию в офис VK и вдохновились идеей провести собственный лайв-стриминг для мобильных разработчиков.&lt;/p&gt;
  &lt;p id=&quot;EaiK&quot;&gt;Для тех, кто не добрался вчера до митапа, &lt;a href=&quot;https://www.youtube.com/watch?v=ZkQ2YXZ2DT0&quot; target=&quot;_blank&quot;&gt;доступна  запись выступления&lt;/a&gt;.&lt;/p&gt;
  &lt;p id=&quot;4wug&quot;&gt;А какие сайд-проекты есть у вас?&lt;/p&gt;
  &lt;figure id=&quot;9fia&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/af/92/af92b585-a432-4bd1-b517-c07b66d445d2.jpeg&quot; width=&quot;1280&quot; /&gt;
  &lt;/figure&gt;

</content></entry><entry><id>smbvk:qTDuUgU3kBT</id><link rel="alternate" type="text/html" href="https://teletype.in/@smbvk/qTDuUgU3kBT?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=smbvk"></link><title>Как мы тестируем уведомления в мобильном приложении Юлы</title><published>2022-09-06T12:56:39.963Z</published><updated>2022-09-06T12:57:12.803Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img4.teletype.in/files/30/2b/302b7257-5658-4617-8606-6420330d0f67.png"></media:thumbnail><summary type="html">Команда качества проверяет различные сценарии с учётом статуса авторизации пользователя (авторизован или неавторизован). Примеры сценариев, которые мы берем в тестирование:</summary><content type="html">
  &lt;p id=&quot;W37v&quot;&gt;Команда качества проверяет различные сценарии с учётом статуса авторизации пользователя (авторизован или неавторизован). Примеры сценариев, которые мы берем в тестирование:&lt;/p&gt;
  &lt;ul id=&quot;BXIs&quot;&gt;
    &lt;li id=&quot;Fogu&quot;&gt;не приходят уведомления;&lt;/li&gt;
    &lt;li id=&quot;i32c&quot;&gt;переходы по push-уведомлению – с заблокированного экрана, из «шторки», из открытого или свернутого приложения;&lt;/li&gt;
    &lt;li id=&quot;vSoz&quot;&gt;переход из состояния разлогина после получения push;&lt;/li&gt;
    &lt;li id=&quot;tIxd&quot;&gt;переход по push-уведомлению с включенным «Don&amp;#x27;t keep Activities» (характерно для Android-приложений).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;CMkb&quot;&gt;Отдельно мы проверяем переход по push на определенный экран с выбором определенных фильтров. Если это был поисковой запрос, то задача тестировщика убедиться, что текст поискового запроса отображается в строке поиска и выдача товаров соответствует поиску.&lt;/p&gt;
  &lt;p id=&quot;OyBN&quot;&gt;Если push-уведомление ведет на WebView, то надо обратить внимание, что WebView открывается корректно на обеих платформах, и что в push зашит корректный URL.&lt;/p&gt;
  &lt;p id=&quot;VvFs&quot;&gt;На что стоит обратить внимание при тестировании уведомлений:&lt;/p&gt;
  &lt;ol id=&quot;XiMY&quot;&gt;
    &lt;li id=&quot;PkqT&quot;&gt;устаревший токен;&lt;/li&gt;
    &lt;li id=&quot;LL29&quot;&gt;очередь со стороны Apple;&lt;/li&gt;
    &lt;li id=&quot;eTm5&quot;&gt;максимальное и минимальное количества отображаемых символов;&lt;/li&gt;
    &lt;li id=&quot;p8s4&quot;&gt;звуковое сопровождение нотификации и встроенные изображения;&lt;/li&gt;
    &lt;li id=&quot;dsFx&quot;&gt;проблемы на серверной стороне.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;gHk9&quot;&gt;Подробнее о тестировании push-уведомлений можно почитать здесь:&lt;br /&gt;&lt;a href=&quot;https://habr.com/ru/company/youla/blog/553762/&quot; target=&quot;_blank&quot;&gt;https://habr.com/ru/company/youla/blog/553762/&lt;/a&gt;&lt;/p&gt;

</content></entry><entry><id>smbvk:Opyt-perehoda-na-mvi-08-03</id><link rel="alternate" type="text/html" href="https://teletype.in/@smbvk/Opyt-perehoda-na-mvi-08-03?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=smbvk"></link><title>Опыт перехода на mvi </title><published>2022-09-05T09:33:34.935Z</published><updated>2022-09-05T09:33:34.935Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img4.teletype.in/files/72/80/7280118b-2bfc-42c5-a86d-8ea618c31c73.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img3.teletype.in/files/a2/62/a2623613-4862-41ed-8856-7e00716c301c.png&quot;&gt;Эта статья из Telegram канала «Разработка Юлы». Хотите больше полезных материалов и новостей разработки под Android и iOS, описания схем реализации, ссылки на библиотеки и приглашения на митапы команды - подпишитесь на канал.</summary><content type="html">
  &lt;p id=&quot;xr3c&quot;&gt;&lt;em&gt;Эта статья из Telegram канала &lt;a href=&quot;https://t.me/youlatech&quot; target=&quot;_blank&quot;&gt;«Разработка Юлы».&lt;/a&gt; Хотите больше полезных материалов и новостей разработки под Android и iOS, описания схем реализации, ссылки на библиотеки и приглашения на митапы команды - &lt;a href=&quot;https://t.me/youlatech&quot; target=&quot;_blank&quot;&gt;подпишитесь на канал&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
  &lt;p id=&quot;2D0b&quot;&gt;&lt;strong&gt;Что такое MVI?&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;QwfD&quot;&gt;MVI (Model-View-Intent) – это архитектурный паттерн, &lt;strong&gt;Unidirectional Data Flow &lt;/strong&gt;подход проектирования системы, в которой все представляется в виде однонаправленного потока действий и управления состояния.&lt;/p&gt;
  &lt;p id=&quot;h3Wp&quot;&gt;&lt;strong&gt;Как это работает?&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;Fh3r&quot;&gt;Мы создаем интерфейс-маркер, который будет отвечать за какое-либо событие, состояние экрана и при этом не влиять на состояние экрана.&lt;/p&gt;
  &lt;p id=&quot;ciYw&quot;&gt;При таком подходе состояние представления &lt;strong&gt;(View)&lt;/strong&gt; описывается моделью &lt;strong&gt;(Model)&lt;/strong&gt;, которая сохранена в объекте &lt;strong&gt;ViewModel&lt;/strong&gt;.&lt;/p&gt;
  &lt;p id=&quot;gdhj&quot;&gt;View подписывается на изменения модели – в нашем случае путем RxJava– и делает изменения в себе в соответствии с новым состоянием.&lt;/p&gt;
  &lt;p id=&quot;pkLJ&quot;&gt;View может взаимодействовать с ViewModel путем простого вызова методов, или, как у нас было реализовано, путем реактивной подписки ViewModel на новые события, которые отправляет View.&lt;/p&gt;
  &lt;p id=&quot;2jFy&quot;&gt;&lt;strong&gt;Как и почему мы реализовали свой MVI-фреймворк на Android?&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;cERN&quot;&gt;Изначально в проекте у нас не было никаких ограничений на реализацию бизнес-логики и взаимодействия с стейтом, поскольку мы описывали только контракт взаимодействия представления и модели.&lt;/p&gt;
  &lt;p id=&quot;EWRk&quot;&gt;&lt;strong&gt;С какими проблемами мы столкнулись в результате?&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;1cWZ&quot;&gt;&lt;strong&gt; 1. код на больших и сложных экранах становился трудным в поддержке и расширении;&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;hSrl&quot;&gt;&lt;strong&gt;2. из-за ошибок проектирования мы сталкивались с неконсистентностью системы,&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;dsKv&quot;&gt;&lt;strong&gt;3. отсутствие логирования приводило к долгому поиску багов.&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;T3aS&quot;&gt;Решение, которое позволило избежать этих проблем, – создать единую формализованную и надежную систему обработки событий, исходящих извне, и реакции на эти события в виде  потокобезопасного изменения стейта. Все наши архитектурные хотелки должна была решить MVI-библиотека.&lt;/p&gt;
  &lt;figure id=&quot;4FeL&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/a2/62/a2623613-4862-41ed-8856-7e00716c301c.png&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;2vKG&quot;&gt;MVI строится на основе трех компонентов – модели, намерения (действия) и состояния экрана. Логика приложения диктуется пользователем: например, он хочет загрузить картинку в высоком разрешении, и различными внешними эффектами (далее – side-effects), например, внезапной потерей соединения.&lt;/p&gt;
  &lt;p id=&quot;Zbqi&quot;&gt;MVI подход решают задачу реализовать механизм, который будет обрабатывать намерения пользователя и их следствия (например, ответ от api).&lt;/p&gt;
  &lt;p id=&quot;rTV3&quot;&gt;&lt;strong&gt;Наш опыт внедрения MVI-фреймворка.&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;MgW7&quot;&gt;Мы начали искать готовые opensource решения, чтобы встроить их в наш проект. Однако ресерч привел нас к тому, что ни одно из готовых решений не удовлетворяло нашим требованиям. В нашем случае код, написанный на mvi решении, должен был отвечать следующим критериям:&lt;/p&gt;
  &lt;ul id=&quot;np6c&quot;&gt;
    &lt;li id=&quot;neon&quot;&gt;&lt;strong&gt;Масштабируемость и независимость от платформы и внешних библиотек.&lt;/strong&gt; Архитектура должна быть в крайней степени гибкой и расширяемой.&lt;/li&gt;
    &lt;li id=&quot;UWMN&quot;&gt;Сейчас у нас в проекте используется RxJava, при этом мы планируем перейти на compose и использовать coroutines в будущем. &lt;br /&gt;Отсюда требование: фреймворк не должен зависеть на сторонние библиотеки.&lt;/li&gt;
    &lt;li id=&quot;qgVs&quot;&gt;&lt;strong&gt;Сопровождаемость.&lt;/strong&gt; &lt;br /&gt;Чем проще исправлять ошибки и управлять  проектом после передачи в эксплуатацию, тем легче новым разработчикам поддерживать проект;&lt;/li&gt;
    &lt;li id=&quot;uEhN&quot;&gt;&lt;strong&gt;Надежность.&lt;/strong&gt; &lt;br /&gt;Внутри реализации системы исключены проблемы многопоточной среды. Единый контракт должен обеспечивать безопасность интерфейсов;&lt;/li&gt;
    &lt;li id=&quot;oCtJ&quot;&gt;&lt;strong&gt;Тестируемость;&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;E8Iz&quot;&gt;&lt;strong&gt;Возможность переиспользования;&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;njZF&quot;&gt;&lt;strong&gt;Легкая встраиваемость в проект;&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;eibe&quot;&gt;&lt;strong&gt;Детальные и хорошо читаемые логи.&lt;/strong&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;J45G&quot;&gt;Дополнительные критерий – активное комьюнити, поскольку библиотека должна сохранять  актуальность, ее должны обновлять, ревьюить и поддерживать в порядке.&lt;/p&gt;
  &lt;p id=&quot;BzrD&quot;&gt;В момент, когда мы изучали opensource решения, и не нашли нужного, помог наш активный круг общения и дружная команда :)&lt;/p&gt;
  &lt;p id=&quot;znqc&quot;&gt;Собственное решение реализовал наш бывший коллега Георгий Ипполитов – reduktor. Мы совместно посмотрели предложенный Гошей вариант, после чего он внес  значительные доработки и довел либу до идеального состояния, отвечающего всем нашим критериям.&lt;/p&gt;
  &lt;p id=&quot;eAdp&quot;&gt;Библиотека прошла 2 волны улучшений: от первой версии мы довели ее до второй и окончательной, изменив основу либы &lt;strong&gt;(Store)&lt;/strong&gt;. В результате мы получили:&lt;/p&gt;
  &lt;ul id=&quot;yE2L&quot;&gt;
    &lt;li id=&quot;CocD&quot;&gt;уход от жесткой привязки к RxJava. Появилась возможность использовать в качестве межпотокового взаимодействия любой из общеизвестных способов;&lt;/li&gt;
    &lt;li id=&quot;2BGj&quot;&gt;новые плюшки для удобства написания кода в sideEffect-ах.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;oFLC&quot;&gt;&lt;strong&gt;А вот и вики либы:&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;zI8E&quot;&gt;&lt;a href=&quot;https://github.com/g000sha256/reduktor/tree/wiki&quot; target=&quot;_blank&quot;&gt;https://github.com/g000sha256/reduktor/tree/wiki&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;HgpM&quot;&gt;Всё взаимодействие происходит через объект Store. У него есть одно публичное поле – &lt;strong&gt;states&lt;/strong&gt;. При подписке на эту цепочку сразу будет отдано актуальное состояние в текущем потоке. Однако дальнейшие обновления могут приходить в других потоках. Внутри есть проверка состояний на эквивалентность.&lt;/p&gt;
  &lt;p id=&quot;p0nm&quot;&gt;&lt;strong&gt;Принцип работы:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;sUgH&quot;&gt;
    &lt;li id=&quot;pgDN&quot;&gt;Действие может попасть в систему через &lt;strong&gt;Initializer&lt;/strong&gt;. Это может быть событие от взаимодействия с пользователем или любое другое внешнее событие (например, новое сообщение из сокета).&lt;/li&gt;
    &lt;li id=&quot;GDiS&quot;&gt;Далее действие проходит через &lt;strong&gt;Reducer&lt;/strong&gt;. Тут действие может повлиять на изменение состояния. Если состояние изменилось,  информация об этом будет отправлена тем, кто на него подписался.&lt;/li&gt;
    &lt;li id=&quot;MHhM&quot;&gt;После этого действие и новое (либо не изменившееся) состояние попадают в &lt;strong&gt;SideEffect.&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;UGA6&quot;&gt;Оттуда возвращаются новые цепочки с действиями. Подписываемся на них и ожидаем событий.&lt;/li&gt;
    &lt;li id=&quot;GiWl&quot;&gt;Новые действия будут снова отправлены в &lt;strong&gt;Reducer.&lt;/strong&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;figure id=&quot;uZ3c&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/48/e7/48e745fa-29c4-45a9-81bd-f3a82e276e40.png&quot; /&gt;
  &lt;/figure&gt;

</content></entry><entry><id>smbvk:Dostupnye-veb-interfejsy-07-18</id><link rel="alternate" type="text/html" href="https://teletype.in/@smbvk/Dostupnye-veb-interfejsy-07-18?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=smbvk"></link><title>Доступные веб-интерфейсы</title><published>2022-09-05T09:34:58.949Z</published><updated>2022-09-05T09:34:58.949Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img2.teletype.in/files/9a/75/9a75f714-82c0-4eb1-b0de-10f77b18e9df.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/51/c4/51c4b341-1358-4e7d-9680-4dc2a2fbb784.png&quot;&gt;Что такое доступность и зачем она нужна?</summary><content type="html">
  &lt;p id=&quot;9p7Z&quot;&gt;&lt;strong&gt;Что такое доступность и зачем она нужна?&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;HsDl&quot;&gt;Прежде всего, это это обеспечение возможности использования сайтов как можно большим числом людей, включая тех, чьи способности как-либо ограничены.&lt;/p&gt;
  &lt;p id=&quot;oltg&quot;&gt;Когда мы говорим про доступный интерфейс – важно упоминать не только про помощь и эмпатию, но и про помощь всем пользователям.&lt;/p&gt;
  &lt;p id=&quot;T01u&quot;&gt;&lt;strong&gt;На какой набор факторов обратить внимание при внедрении доступности в сервис / продукт?&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;ZGrc&quot;&gt;- Семантичная вёрстка;&lt;/p&gt;
  &lt;p id=&quot;x1s1&quot;&gt;- Доступность элементов с клавиатуры;&lt;/p&gt;
  &lt;p id=&quot;Sd4M&quot;&gt;- Подписи и aria-лейблы;&lt;/p&gt;
  &lt;p id=&quot;uEGM&quot;&gt;- Правильный атрибут lang.&lt;/p&gt;
  &lt;p id=&quot;nfZq&quot;&gt;&lt;strong&gt;Но, как бы радостно не было – это ещё не всё. Важно упомянуть и про библиотеки компонентов:&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;6gjm&quot;&gt;- Angular Material, Material UI, Chakra UI;&lt;/p&gt;
  &lt;p id=&quot;wae5&quot;&gt;- angular-eslint, eslint-plugin-jsx-a11y.&lt;/p&gt;
  &lt;p id=&quot;sewW&quot;&gt;&lt;strong&gt;На какие процессы можно обратить внимание тимлиду?&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;PgmG&quot;&gt;- Формулирование требований к доступности в сервисе;&lt;/p&gt;
  &lt;p id=&quot;l7nD&quot;&gt;- Мотивация команды на обучение;&lt;/p&gt;
  &lt;p id=&quot;qnfe&quot;&gt;- Адаптация процессов внедрения.&lt;/p&gt;
  &lt;p id=&quot;2Lbu&quot;&gt;&lt;strong&gt;Хотите научиться? &lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;I7Si&quot;&gt;&lt;strong&gt;Как и обещали, делимся полезными ресурсами для изучения темы от нашей команды:&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;Lnlq&quot;&gt;📌&lt;a href=&quot;https://www.w3.org/Translations/WCAG20-ru/&quot; target=&quot;_blank&quot;&gt;Web Content Accessibility Guidelines (WCAG)&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;djGj&quot;&gt;📌&lt;a href=&quot;https://www.youtube.com/playlist?list=PLNYkxOF6rcICWx0C9LVWWVqvHlYJyqw7g&quot; target=&quot;_blank&quot;&gt;A11ycast with Rob Dodson&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;Ia7C&quot;&gt;📌&lt;a href=&quot;https://weblind.ru/&quot; target=&quot;_blank&quot;&gt;Веблайнд &lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;Cb43&quot;&gt;📌&lt;a href=&quot;https://kurmak.info/&quot; target=&quot;_blank&quot;&gt;Курс по цифровой доступности &lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;6plP&quot;&gt;📌&lt;a href=&quot;https://www.sberbank.ru/ru/person/specialbank/digitalguide&quot; target=&quot;_blank&quot;&gt;Гайд по цифровой доступности&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;bvOx&quot;&gt;📌&lt;a href=&quot;https://www.digitala11y.com/digital-accessibility-courses-roundup/&quot; target=&quot;_blank&quot;&gt;Список платных и бесплатных курсов&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;kpyg&quot;&gt;📌&lt;a href=&quot;https://css-live.ru/articles/versiya-dlya-slabovidyashhix-a-mozhno-ne-nado-rasshifrovka-doklada.html&quot; target=&quot;_blank&quot;&gt;Расшифровка доклада Лены Райан о версиях для слабовидящих&lt;/a&gt;&lt;/p&gt;
  &lt;figure id=&quot;EqZ1&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/51/c4/51c4b341-1358-4e7d-9680-4dc2a2fbb784.png&quot; /&gt;
  &lt;/figure&gt;

</content></entry><entry><id>smbvk:Intervyu-s-komandoj-07-11</id><link rel="alternate" type="text/html" href="https://teletype.in/@smbvk/Intervyu-s-komandoj-07-11?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=smbvk"></link><title>Интервью с командой</title><published>2022-09-05T09:36:55.318Z</published><updated>2022-09-05T09:36:55.318Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img2.teletype.in/files/1c/0e/1c0e8160-6d0d-48d0-8e62-a40bc0e41d26.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img3.teletype.in/files/63/b5/63b56360-c88f-4a19-9a06-107475631a74.gif&quot;&gt;Расскажите об образовательных проектах VK. Как считаете – насколько полезен ваш опыт, когда работаете со студентами не первый год?</summary><content type="html">
  &lt;p id=&quot;sVco&quot;&gt;&lt;strong&gt;Расскажите об образовательных проектах VK. Как считаете – насколько полезен ваш опыт, когда работаете со студентами не первый год?&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;CVhn&quot;&gt;Мы вместе с командой образовательных проектов помогаем VK найти и развивать талантливых ребят, даем возможность разобраться в профессии и понять, что действительно важно знать и уметь, когда приходишь в мобильную разработку.&lt;/p&gt;
  &lt;p id=&quot;WSnf&quot;&gt;Когда мы начали работать со студентами, нас очень поддерживал собственный опыт обучения, ведь большинство из нас – выпускники МГТУ им.Баумана. Можно сказать «отдаем дань технопарку» (*так раньше назывался образовательный центр VK в МГТУ им.Баумана) (смеются). А еще, опыт преподавания нереально прокачивает наши собственные soft skills.&lt;/p&gt;
  &lt;p id=&quot;RjOP&quot;&gt;Мы помогаем формировать комьюнити, которое аккумулирует в себе опыт разработчиков. Кроме того, получаем невероятный кайф, когда человек без опыта в iOS-разработке буквально через полгода находит работу и записывает тебе благодарность – это очень ценно. Ещё, мы можем набрать себе отличных молодых специалистов в VK. Огромный плюс здесь в том, что мы уже хорошо знаем ребят, знаем их сильные и слабые стороны. Не секрет, что один из самых сложных и ответственных периодов – онбординг, интеграция в команду. Благодаря курсу, этот период частично проходит в условиях обучения, ребятам проще выходить в реальный проект, ведь они знают, что рядом весь преподавательский состав, готовый тебя поддержать на все 100% :)&lt;/p&gt;
  &lt;p id=&quot;CvG7&quot;&gt;Для наших студентов такие образовательные проекты – это отличная возможность получить уверенный карьерный старт в IT и возможность устроиться в реальный проект.&lt;/p&gt;
  &lt;p id=&quot;dOos&quot;&gt;&lt;strong&gt;Легко стать преподавателем и какой план подготовки к этой роли?&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;yrJ3&quot;&gt;Мы сами прошли через учебу в образовательном проекте компании в МГТУ им.Баумана), поэтому хотели обучать студентов, чтобы они становились крутыми разработчиками. Чтобы стать преподавателем  главное – найти желание и время, ведь каждому студенту нужен по-настоящему конструктивный фидбек. Преподавание – точно наше дело :) Нашей команде всегда интересно делиться знаниями. Как-то раз мы задались вопросом «А чему мы могли бы научить себя «молодых» (смеются), если бы у нас была машина времени?» Вот тут, в ответе на этот вопрос, и кроется источник вдохновения :)&lt;/p&gt;
  &lt;p id=&quot;4qdZ&quot;&gt;&lt;strong&gt;Много ли сил и времени уходит на работу со студентами?&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;Y9ou&quot;&gt;Первый раз – да, но когда курс проходит повторно – уже нет. Первым делом, мы готовим лекцию, на подготовку одной лекции уходит около недели. Дальше эту лекцию проводим несколько раз для разных потоков. Подготовка к уже готовой лекции занимает 1-2 дня. Работа со студентами у нас выстроена с помощью менторов, это такие люди, которые служат связующим звеном между преподавателем и командой студентов. Ментор – это выпускник курса, который берет одну команду, сопровождает ее в процессе обучения и помогает ей своим опытом. Плюс ко всему, конкретно на нашем курсе нет домашних заданий, так как все полученные знания студенты сразу же применяют в своих командных проектах.&lt;/p&gt;
  &lt;p id=&quot;4uTn&quot;&gt;&lt;strong&gt;Как удалось собрать общую преподавательскую команду курса и разработать такую глубокую программу?&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;iwU6&quot;&gt;Всё получилось довольно легко, основная часть преподавательского состава – из Юлы, где собралась классная инициативная группа. Программа курса уже была спроектирована командой образовательных проектов VK. Мы что-то доработали, добавили что-то новое и актуальное в лекции, используем максимум практических примеров и заданий из реального опыта разработки.&lt;/p&gt;
  &lt;p id=&quot;9YCy&quot;&gt;&lt;strong&gt;Сколько раз уже собирали группы, сколько у вас выпускников?&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;y5x7&quot;&gt;Очень много, где-то &amp;gt; 5 потоков, около 200 выпускников. Сейчас мы провели уже 4 курса, а это целых два года. Время летит!&lt;/p&gt;
  &lt;p id=&quot;Imhu&quot;&gt;&lt;strong&gt;Были ли забавные случаи или что-то запоминающееся?&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;Gtk5&quot;&gt;Да, в основном забавные случаи связаны с дистанционным обучением во время пандемии. К примеру,  как-то раз студент забыл выключить камеру и оказался  во время лекции, буквально, без штанов, поскольку параллельно лекции переодевался :) В принципе, такие случаи наверняка бывали у многих, когда случился локдаун.&lt;/p&gt;
  &lt;p id=&quot;o23x&quot;&gt;&lt;strong&gt;Как обычно проходит защита? Как вы выбираете проект-победитель?&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;HJsT&quot;&gt;Защита проходит либо онлайн, либо в нашем офисе, либо в Бауманке.  Мы любим проводить защиты в офисе, приглашать в гости и устраивать праздник завершения курса. Студенты показывают презентацию и свой проект, который сделали за время курса, далее мы ставим баллы по специальной шкале.  Проект-победитель определяется по сумме баллов. Все справедливо, механика простая!&lt;/p&gt;
  &lt;p id=&quot;cO7C&quot;&gt;&lt;strong&gt;Что происходит после курса? Следите ли за судьбой своих выпускников?    &lt;/strong&gt;&lt;br /&gt;Конечно! Периодически мы встречаем наших выпускников-коллег у нас в компании, да и в целом – мы поддерживаем наших студентов. Иногда встречаемся  просто пообщаться в барах, обсуждаем дела, даем рекомендации, если они нужны, продолжаем списываться в чатиках. Наши бывшие студенты работают везде: есть ребята, которые работают и в известных компаниях, и в небольших стартапах. Классно, что курс стал полезным стартом в профессии и все продолжают начатое, развиваясь дальше.&lt;/p&gt;
  &lt;p id=&quot;SMw2&quot;&gt;&lt;strong&gt;Чему вас научили студенты?&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;9Wja&quot;&gt;Совершенно точно прокачали наши soft skills и усилили базовые знания, ну и конечно, подарили нам потрясающее окружение, комьюнити, которое сложилось благодаря программе, VK и Образовательному центру VK в МГТУ им. Н.Э. Баумана.&lt;/p&gt;
  &lt;p id=&quot;XNuP&quot;&gt;&lt;strong&gt;Какие у вас планы на ближайшее время? Будет новый курс?&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;X2BF&quot;&gt;Конечно! Наш курс проходит каждые полгода. Сейчас мы работаем над тем, чтобы немного адаптировать его с учетом изменений в платформе и разработке. А еще, с нетерпением ждем &lt;a href=&quot;https://education.vk.company/curriculum/program/discipline/1402/&quot; target=&quot;_blank&quot;&gt;летний буткемп по мобильной разработке&lt;/a&gt;, в который приедут студенты со всей России: с 8 по 25 августа на базе Университета «Сириус» пройдёт бесплатная летняя образовательная программа. На буткемпе будет возможность освоить как iOS-разработку, так и Android-разработку: мы вместе с коллегами из других юнитов готовим интересный материал и будем делиться опытом с начинающими разработчиками.&lt;/p&gt;
  &lt;p id=&quot;4PVl&quot;&gt;&lt;strong&gt;Ещё немного фото с защиты проектов в офисе VK:&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;92To&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/63/b5/63b56360-c88f-4a19-9a06-107475631a74.gif&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;OkEY&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/cb/4b/cb4be2cf-959b-4f89-aacd-ebba94ada32a.jpeg&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;DIKv&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/33/70/33707473-aa23-4cba-a5b7-f8d375281ae6.gif&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;A1QB&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/a0/5d/a05d3f43-bfa7-43a3-b3c1-ea90b7785e3d.jpeg&quot; /&gt;
  &lt;/figure&gt;

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