Случается, ты просыпаешься и осознаешь: так больше продолжаться не может и нужно что‑то менять. Разные кодовые базы, избыточное легаси и нестабильность мешают пользователям получать удовольствие от общения в твоем приложении. И эта мысль подводит тебя к развилке: один путь ведет к сложному и долгому рефакторингу легаси за почти 10 лет, второй к не менее долгому, а, порой, более сложному процессу переписывания с 0. Но какой бы путь ты ни выбрал, в любом случае начинаешь испытывать азарт — предстоит большая Задача (именно с большой буквы).
Привет Хабр, меня зовут Федор Неживой, я ведущий программист‑разработчик в команде VK Мессенджера и сегодня расскажу вам, как мы перестраивали и обновляли один из крупнейших проектов в рунете. В статье будет боль, пот, реальный код и детали, как мы шаг за шагом пришли к масштабному обновлению, а потом внедряли то, что получилось.
Что такое VK Мессенджер
VK Мессенджер по своей сути — сервис внутри еще большего сервиса. Он тесно связан со множеством других разделов ВКонтакте: Музыка, Фотографии, Видео, Лента — да практически со всеми. Для наглядности визуализируем.
При этом веб-мессенджер как платформа состоит из 4 продуктов:
веб-версия vk.com;
fast-чаты (всплывающие чаты);
мобильная версия m.vk.com;
десктопный мессенджер ВКонтакте.
Мало того, что все эти части имели раньше разные кодовые базы (даже мессенджер внутри vk.com), так и у них был разный приоритет. Самый высокий был у vk.com с его мобильными клиентами. Далее шел m.vk.com, для которого что‑то могли уже не делать ради экономии времени и трудозатрат. На третьем месте по важности была десктопная версия. Этот проект моей команде достался уже готовым. Его когда‑то написал на Electron один разработчик, который потом ушёл из компании. У команды не было знания кодобазы, а спросить было не у кого, поэтому что даже CI пришлось настраивать самим с 0 за пару месяцев. А fast‑чаты мы поддерживали по остаточному принципу.
С чем мы подошли к развилке
Как уже сказал, изначально VK Мессенджер состоял из 4 независимых кодовых баз. Все они были написаны давно, и с тех пор в них внесли много изменений. Технологии развивались, что‑то стали делать проще, что‑то — иначе. Например, во многих языках начали активно использовать типизацию. Если же код легаси, то не всегда можно найти автора и расспросить о его устройстве. Поэтому каждый раз опасаешься вносить изменения, потому что неизвестно, как это аукнется.
В те времена после каждого релиза мы всей командой с замиранием сердца следили за графиками. И при любой проблеме приходилось долго искать причину: «Что и где отвалится, если я удалю этот кусок кода и заменю на другой?». С учетом размеров и устройства кодовых баз даже инструменты в IDE не особо помогали справиться с задачей. Часто приходилось пользоваться обычным поиском (всякими креативными способами), чтобы понять заденешь что‑то или нет.
Примеры старого кода скринами, потому что такого больше в кодобазах нет
Кроме того, всё взаимодействие вэба с бэкэндом было построено на актах. Это такой устаревший формат взаимодействия клиент‑сервер, который использовался только на вэбе. Их нам приходилось писать и поддерживать самостоятельно, потому что команда бэкенда работала с API. Это создавало особые ошибки и иногда отнимало ресурсы, необходимые для внедрения новых фич на серверной стороне.
Третья сложность была в том, что не было никакой унификации: в каждой кодовой базе использовались свои технологии и подходы. Одна из моих первых задач в компании — отметка чата непрочитанным. Наверное, ребята хотели, чтобы у меня создалось представление обо всех наших проектах, поэтому предложили заниматься этой задачей везде, даже акты для бэкенда я писал сам.
Фича очень простая и не требует глубоких знаний в предметной области. Однако у меня ушло около месяца работы, потому что каждый раз я фактически начинал «с нуля», понимание того, как фича работает в vk.com, никак не помогало реализовать ее в m.vk.com и т. д. Чтобы погрузиться во всё, требовалось много времени. Я сам более‑менее уверенно стал ориентироваться в коде только через полгода.
Как мы выбирали, по какому пути пойдем
Нужно было что‑то менять. Но мнения команды разделились: либо серьёзно рефакторить код, либо всё переписывать с нуля. Много обсуждали и спорили, что‑то по‑мелочи меняли, но долгое время ситуация в целом оставалась прежней. В тот момент проблема была в том, что оба пути были страшными и полными неопределенности. И нельзя было ничего быстро апробировать. Именно поэтому наши дискуссии оставались умозрительными.
Переписывание — это страшно, много ответственности и всегда есть ненулевая вероятность сфейлиться. Но и рефакторинг в нашем случае не снижал рисков. В процессе масштабных рефакторингов код становится временно сложнее — поскольку меняется только часть, в коде должны сочетаться новые красивые интерфейсы и интеграция со старыми частями. В случае переписывания такие сочетания сдвигаются на границы системы, оставляя новое «ядро» в сохранности. Было понятно, что такой рефакторинг может занять годы, а значит как минимум до середины пути мы бы оставались с еще усложнившейся системой.
Для себя я выделял несколько аргументов в пользу переписывания с 0. Возможно, какой‑то из них я рационализировал, когда писал этот текст ):
Рефакторинг никак не решал проблему гетерогенности кодовых баз. А «выдрать» одну и переиспользовать в других местах было невозможно.
К команде могут присоединиться новые инженеры. Погружать их одновременно в старые и новые части рефакторинга и нюансы их сочетания будет невероятно сложно и дорого. В нашем же случае мы просто подключали новичков только в новую кодобазу.
Мы (как и многие другие команды в мире) видели будущее в типизации и очень хотели использовать TypeScript. Кроме того у меня был крайне позитивный опыт использования типов для моделирования предметной области, что помогает избавляться от невозможных состояний в системе. Это распространенная практика в сообществах других ЯП, которыми я интересуюсь (Haskell, Elm, Rust). Для того, чтобы получить максимум от TypeScript, нам нужно было бы включить максимально жесткие ограничения настройки, но из‑за существующего кода это было просто невозможно. Сначала я даже пытался как‑то изменить ситуацию — ходил по всей монорепе vk.com и правил код разных команд. Но таким образом мне удалось «ужесточить» конфиг TypeScript лишь на одну настройку, а потом я просто сдался.
Мы уже пробовали рефакторинг отдельных частей, но это не приводило к значимым результатам. Существующие подходы в кодовых базах загоняли нас в некоторые рамки. Всё заканчивалось больше косметическими изменениями.
А еще в случае с переписыванием у нас все же был понятный путь того как получать выгоду от него сразу, а не через годы. Во‑первых мы достаточно быстро могли заменить и оживить fast‑чаты, которые отображаются на каждой странице и помогают вовлечь в мессенджер больше пользователей. Во‑вторых, одной из важных целей новой кодовой базы с архитектурной точки зрения была «встраиваемость». Поэтому достаточно быстро появилась идея встраивать отдельные значимые кусочки в старый код, которые бы работали на новом состоянии и UI.
Но спорили мы не только о том, рефакторить или переписывать, но и о том, как организовывать код, как описывать модели, бизнес‑логику и все остальное. Однажды споры надоели мне настолько, что я решил в свое свободное время попробовать написать новый прототип десктопного мессенджера. Подумал, что обосновывать плюсы своих идей будет куда проще на примерах реального работающего кода. Потратил на это примерно три недели один, а потом подключил еще одного старейшего члена команды (привет Тиму Чаптыкову!), который помог отполировать его еще пару недель. Прототип умел делать не более 10% того, что было реализовано в текущих клиентах, в то же время не во всех из них поддерживались некоторые фичи из прототипа. Кроме того там были примеры реализации ключевых частей мессенджера — работы со списками чатов и получение и обработки событий с сервера. Потом этот прототип мы показали сначала всей команде веб‑мессенджера, а потом на очередном демо и всем остальным командам мессенджера. Фидбек оказался очень позитивным, к тому же прототип был хорошим пруфом нашему руководству, что мы сможем и начать, и закончить. А чтобы не брать паузу на несколько лет, договорились переписывать по частям. Это заняло немало времени — сказывалась разнородность кодовых баз и используемых в них технологий.
Какие шаги мы предприняли
Итак, мы определились с тем, по какому пути пойти, но впереди оставалось еще много проблем. Например огромное, количество точек интеграции — несколько десятков.
К примеру, если пользователь запускает во вкладке мессенджера музыку, она должна продолжать играть и при переходе в другие вкладки, и при сворачивании браузера. Такую координацию уже умел делать встроенный плеер ВКонтакте, поэтому с ним также нужно было провести интеграцию. Или, скажем, чтобы входящий вызов в мессенджере приходил именно в текущую вкладку, а не во все остальные.
Все эти точки интеграции были отчасти легаси: ни документации, ни описаний типов. Приходилось заниматься настоящей археологией, разбираясь в работе кода.
При этом нужно было сохранять всю ту функциональность, что уже была. Представьте, что у вас в переписках вдруг пропала бы возможность прикреплять какие‑то типы файлов, которые раньше поддерживались. Из‑за этих нюансов у нас и уходит больше всего времени на саму интеграцию компонентов друг с другом.
Хотя мы пошли по пути переписывания с нуля, но часть компонентов мы решили брать или существующие в мессенджере, или у коллег.Например, после интеграции fast‑чатов само поле ввода текста мы позаимствовали из vk.com. Правда в итоге свой мы всё равно написали, потому что нужна была интеграция с виджетами и десктопной версией.
В vk.com есть эффективный механизм определения мастер‑вкладок на основе алгоритма нахождения консенсуса. Благодаря ему мы снижаем количество обращение фронтенда к серверам. Допустим, у вас открыто десять вкладок ВКонтакте, которые могут обращаться к сети за обновлениями от сервера, и чтобы не перегружать бэкенд, лишь одна из открытых вкладок стучится в сеть, получает данные на всех, а потом «раздаёт» остальным вкладкам.
Не могу сказать, что какие‑то фичи дались нам особенно тяжело, но были задачи, на которые мы потратили очень много времени. Например, ВКонтакте поддерживает несметное количество видов вложений: картинки, видео, аудиозаписи, трансляции, плейлисты, артисты, подкасты, документы, ссылки, ссылки на вступление, товары, альбомы, подарки и так далее. Ушла уйма сил на то, чтобы разобраться во всех нюансах работы этих вложений: выяснить в других командах, какие данные нужно получать и как их отображать, как всё это интегрировано, а потом переписать с нуля.
Сложностей и ошибок добавляло и то, что VK Мессенджер — очень оживлённая и интерактивная часть ВКонтакте. Здесь всё время что‑то обновляется, одни действия инициируют новые. Поэтому, чтобы повысить общую производительность, мы много времени потратили на оптимизацию.
Чего мы добились
Благодаря переезду в отдельный репозиторий VK Мессенджер теперь — своего рода пакет SDK, который мы устанавливаем и используем в разных частях ВКонтакте с небольшими доработками. Берём фрагмент кода с новыми фичами и с небольшими адаптациями добавляем во все 4 версии. Встраиваемость была одним из ключевых требований к новой кодобазе и нам удалось здорово с этим справиться благодаря тщательно спроектированным интерфейсам DI. А пятым проектом, который был сделан на основе нового SDK стал виджет мессенджера, который сейчас можно найти, например, в почте Mail.ru. Мы планируем заменить им старый виджет сообщений сообществ, который ранее могли себе встраивать сторонние сайты.
Ошибаться нам теперь сложнее: сейчас у мессенджера один из самых низких уровней ошибок в коде. Причина в том, что мы изменили подход к ним. При переписывании кодовых баз мы стали придерживаться другого подхода: избегаем значений по умолчанию, регистрируем все ошибки и подробно разбираем их причины.
Одной из важных целей для нас было серьезно улучшить DX. Поскольку мы изменили подход к обработке ошибок и серьезно вложились в моделирование нашей предметной области типами TypeScript, понимать особенности продукта стало проще, а совершать ошибки по недосмотру куда тяжелее. Отличным доказательством этому служит онбординг новых людей в команду. Если в момент моего прихода в команду выкатывать какие‑то серьезные доработки получалось только спустя несколько месяцев, то в последние годы ребята могут катить даже достаточно крупные задачи уже в свой первый месяц.
Раньше мессенджер умел рендериться дважды — в kPHP для server‑side rendering и на клиенте для интерактивных частей. Где‑то мы умели шарить «шаблоны» между kPHP и JavaScript, а где‑то нам приходилось дублировать логику разметки. В новой кодовой базе мы с одной стороны не могли позволить себе server‑side rendering (для этого надо было использовать Node.js, а инфраструктурно этого не хотелось), а с другой хотели ускорить холодный старт вкладки мессенджера. Поэтому мы сделали промежуточный вариант — «транслируем» наши запросы начальных данных в PHP и переиспользуем при загрузке страницы для создания кэша. Благодаря возможности стримить ответ с сервера, которую недавно внедрил KPHP, мы можем параллельно готовить данные и отдавать HTML и статику.
Ещё мы на основании схемы API бэкенда стали генерировать типизацию к этому API. Это помогает избегать ошибок вроде неправильной передачи аргумента. Сейчас типы для API используют все команды на вебе, но когда‑то именно мессенджер был early‑адоптером, приносил фидбек и идеи в реализацию. В этом нам помогает и очень развитая инфраструктура ВКонтакте: мы используем систему тестирования, подгружаем данные напрямую с бэкенда, чтобы у пользователей быстрее открывались страницы.
Также из любопытных изменений — механизм парсинга текстов. Каждое сообщение разбивается на фрагменты (чанки). Раньше для поиска по ним использовали регулярные выражения. Работало специфически, обновлять было тяжело. А сейчас мы парсим массив смысловых чанков, из которых потом можем собирать единый текст так, как нам нужно.
Мы полностью поменяли работу с языковыми ключами в коде. Раньше для этого использовали много функций в разных комбинациях. Можно было легко ошибиться в названии ключа, и тогда у пользователя появлялись бы нечитаемые сообщения. Это невозможно было проверять. Мы воспользовались «капитальным ремонтом» и написали библиотеку, которая тоже строго типизирует все ключи языковых переводов. Она тоже защищает от ошибок и позволяет очень легко отслеживать использование конкретных ключей и удалять их при необходимости. При этом мы используем только один метод с понятным алгоритмом работы.
История одного факапа
Чтобы никто не думал, что всё всегда было идеально, расскажу историю небольшого факапа. Собственного факапа.
Вместе с запросом на отправку нового сообщения мы подкладываем уникальное число, назовем его ID сообщения. Это нужно, чтобы потом сопоставлять оптимистичное состояние с результатом работы сервера. Так вот, я решил, что неплохим способом формировать такое число будет текущая дата. При этом укладываться наш уникальный ID должен в int32, а значит текущую дату нужно ужать до этих размеров. Абсолютно логичным будет взять ее остаток от деления на желаемый диапазон и дело с концом. Не буду вдаваться в детали, но я почему‑то решил перемудрить с математикой и брать по модулю определенного временного промежутка, который оказался больше половинки int32 (мы берем только отрицательный диапазон).
В результате в какой‑то момент отправка сообщений в fast‑чатах просто перестала работать из‑за переполнения int32. А это обновление уже было в «проде», хоть и на небольшую часть аудитории. К счастью, это было в момент минимальной нагрузки, и мы быстро исправили проблему.
О команде
Команда мессенджера ВКонтакте — лучшая, в которой я когда‑либо работал. Как по профессионализму, так и по отношению к делу. Когда команда была маленькая, у нас даже не было никаких планирований, никто никому не назначал задачи: просто у всех была огромная инициативность. Закончив какую‑нибудь задачу, каждый самостоятельно сразу брал себе новую: сделать фичу, исправить ошибки и т. д. И не просто старались закрыть тикет, а искренне думали — и думают! — о том, как сделать лучше для пользователя. Наверное, такие встречаются везде, но у нас — каждый. И когда тебя окружают такие товарищи, это дополнительно мотивирует, придаёт энергии. Для меня это невероятный опыт.
Комментарии (58)
unreal_undead2
24.09.2024 13:45+5Ok, теперь понятно, почему оно у меня на планшете перестало грузиться...
dmitry_dvm
24.09.2024 13:45+33Внезапно то, что пилили олимпиадники, знающие все алгоритмы мира наизусть, оказалось неподдерживаемым говном. Никогда такого не было и вот опять.
А мобильной версией вк пользоваться абсолютно невозможно. Такое ощущение, что с каждым днем становится хуже, хотя казалось бы куда уж.
supercat1337
24.09.2024 13:45+1Справедливости ради, 10 лет назад js был вообще другим. Устаревает все - и это норм. И может не было красивой архитектуры, проверки типов и прочих фич, но сайт VK же работал, причем довольно шустро.
Что сейчас взяли на вооружение во фронт, пока не понял, но надеюсь, что итоговый результат будет весить меньше.
Format-X22
24.09.2024 13:4510 лет назад да, а вот 9 уже нет. ES6 сильно язык протюнил. Но если не пользоваться классами, а нынче во фронтенде они не популярны - уже не так заметно. Ещё от async/await некоторые отказываются. Остаются стрелочные функции, вот они да, популярны. Правда без классов, опять же, там просто длиннее объявление, не фатальное различие. Можно ещё for of взять… но популярность map и прочего такого сводит оное на нет. Вот рест-параметры сложнозаменяемы, сильно менее удобнее, но на этом и всё. Так что тут вопрос с нюансами.
supercat1337
24.09.2024 13:45Честно говоря, удивлен такому утверждению. Знаю, что классы больше всего критикуют при работе с react, и то в случае создания компонент. Иной критики, которая вышла в тренды, не видел. Есть ребята, которые при работе с асинхронщиной отказываются от async/await (видимо в пользу генераторов). Но это прям поискать надо такие экзотические команды.
Да и вопрос не в том, как написать код без фич языка, которые появились за эти 10 лет. Такой код уже есть и он нуждается в переписывании, потому что хотя бы esm-модули завезли и новые средства разработки появились.
Любой код становится легаси рано или поздно. Частенько бизнес требует новую архитектуру приложения, чтобы легко внедрялись фичи. Также язык программирования, который развивается и меняется, тоже может подтолкнуть к переписыванию кода. А тут видимо и то, и другое.
Format-X22
24.09.2024 13:45+1(видимо в пользу генераторов)
В пользу промисов. Если у тебя функции которые просто что-то делают, то then и catch - вполне кейсы. Не то чтобы я это поддерживаю, но я такое вижу. Также ещё встречаю RxJS и обсервабл вместо асинка.
А легаси это больше про зарастание функциями, на которые изначально не была рассчитана архитектура. Быстрыми фичами, которые внесли, а потом ещё и ещё и на какой-то из разов добавить три строки делают файл уже на 800 строк. Также компетенция теряется с уходом людей и новые люди иногда строят код поверх, не трогая то что уже работает, хотя можно было бы пофиксить внутри, а не оберткой. И вот уже легаси. Конечно технологии тоже меняются и иногда так что апдейт превращается в переписывание тысячи строк. Но это одна из причин, не все.
MultiGramen
24.09.2024 13:45+8Заранее извиняюсь за свои слова, но моё мнение таково, что ВКонтакте сейчас переживает не лучшие времена. У меня фотографии стали грузиться на половину (далее — белый лист).
Приложение "VK знакомства" выдаёт ошибку при загрузке в определённом браузере.После того, как я пообщался месяц назад с поддержкой, скинув им логи и описав проблему — её так и не решили, а всё что я получил в ответ — "мы передадим разработчикам проблему".
Видимо у вас слишком большая нагрузка на разработчиков, если выскакивает разом так много проблем.
UnknownUser
24.09.2024 13:45+4Попробуйте что то придумать с облегчением фронта и мобильного приложения. Я на телефоне пользуюсь сторонним приложением, а когда нужно зайти с ПК, то я ещё пять раз подумаю - ибо грузится это все нечеловечески долго
hMartin
24.09.2024 13:45+15Захотелось оппонировать одному заплюсованному комменту про олимпиадников.
Раньше мессенджер умел рендериться дважды - в kPHP для server-side rendering и на клиенте для интерактивных частей
Выходит, деды умели решать задачи доступными технологиями, а на нынешнем стеке не нашлось даже альтернативы завозу node.js для SSR? Подозреваю, что варианты имплементации имеются, хоть и не тривиальные, чего же не хватило? Экспертизы? Возможности "продать это бизнесу"?
Насчет сложной и запутанной кодовой базы. Во времена Дурова, поправьте если я ошибаюсь, количество разработчиков было около 30+-. Когда продукт перешел на рельсы Мейлру, ресурсов разработки туда отгрузили порядочно, как я понимаю.
Я не испытываю иллюзий, что так называемые "олимпиадники", писали чистый и поддерживаемый код, но ошибусь ли я, предположив, что ситуацию драматически ухудшил прилив новой крови? Все мы знаем, что если гнать разработчиков улучшать продукт любой ценой, повышая метрики, то любая кодовая база в процессе превращается в болото.
p.s. Иронично, что в такой теме у меня на хабре в поле коммента совершенно отказывается вставляться кусок текста из буфера обмена)
DaneSoul
24.09.2024 13:45+1p.s. Иронично, что в такой теме у меня на хабре в поле коммента совершенно отказывается вставляться кусок текста из буфера обмена)
Такая же проблема была. Попробуйте переключить в режим markdown (буква М в правом нижнем углу блока отправки комментария), мне помогло.
Elebro42
24.09.2024 13:45+9Я, конечно, тот ещё критик, потому что мало что понимаю в написании кода и вызовах, которые стоят перед командой. Меня смущает в этом всём следующее. После того как зарубежные компании сошли с ума и стали в нашей стране токсичными, образовательным учреждениям предписали перейти на отечественные мессенджеры. Основной системой стал Сферум, который работает через VK Мессенджер.
Я работаю в школе с дистанционным обучением. И поначалу мы уклонялись от использования Сферум, использовали Агент Mail.ru, который по основным функциям был схож со Skype и нам подходил. Но в августе Агент канул в небытие, а чуть ранее и ICQ.
В итоге нам не оставили выбора и вынудили перейти на VK Мессенджер. При этом, нам требуется работа именно в десктопной версии, которая "десктопная версия. Этот проект моей команде достался уже готовым. Его когда‑то написал на Electron один разработчик, который потом ушёл из компании. У команды не было знания кодобазы, а спросить было не у кого, поэтому что даже CI пришлось настраивать самим с 0 за пару месяцев. А fast‑чаты мы поддерживали по остаточному принципу."
То есть вот так. На уровне правительства нас обязали перейти на такой вот продукт. И никуда с подводной лодки не денешься.
Ну и, естественно, уже пара месяцев опыта использования этого продукта - страдание, ибо баг верхом на глюках. У кого по неизвестным причинам нет уведомления о входящем звонке, у кого презентация при демонстрации экрана зависает. Вчера столкнулся с тем, что ученика, который есть в списке контактов невозможно через поиск найти, чтоб добавить в чат. Если прокрутить список руками, то он в нём есть, а если вводить имя или фамилию - не ищет. А в списке сотни человек (((.
Надеюсь, что-то в скором времени изменится в лучшую сторону. Одно радует, что тут живая техподдержка. В Скайпе поддержка для русскоязычных была нулевая, в Агенте она игнорила, а тут отвечают пока что.
supercat1337
24.09.2024 13:45+9По поводу Сферума полностью поддерживаю. Добавлю. Обязали учеников переходить на Сферум, он, разумеется, требует регистрации на ВК. Причем на ВК можно регистрироваться лицам старше 14 лет. А детей обязывают иметь регистрацию на сайте ещё с младшей школы. Регаю дочь, сразу видимо боты начинают писать "Давай знакомиться". Про UI/UX накидывать не буду.
gudvinr
24.09.2024 13:45Конкретно в этом случае вы не правы. Вход, как в Сферум, так и во ВКонтакте (соцсеть) происходит через VK ID (провайдер аутентификации).
Даже в справке VK ID написано, что профиль ВК, не нужен для VK ID.Т.е. если есть профиль ВК, то и VK ID будет, но наоборот - не обязательно.
supercat1337
24.09.2024 13:45+5Вполне возможно, что Вы правы на 100%. Но большинству родителей такие нюансы неизвестны, потому что если написано войти через VK / VK ID, то у все бегут и регаются в VK, чтобы получить этот ID. Учителя также о таких нюансах не знают. Более того, я, человек из сферы айти, даже не задумывался, а надо ли гуглить что такое VK ID, отличается ли он от кнопки "Войти с помощью ВКонтакте". И я даже сейчас не вспомню, почему вообще пришлось на VK регаться, на каком этапе это потребовалось или был сделан вывод, что это необходимо.
И еще было такое, что при участии во всероссийской олимпиаде "Большая перемена" также требовалось/рекомендовалось писать посты в VK. Очень не хочу ошибиться, потому что пишу по памяти. Это я к тому, что встречаются случаи, когда необходима активность школьников в соцсетях.
А так, спасибо за информацию, передам остальным.
Surrogate
24.09.2024 13:45+1Даже в справке VK ID написано, что профиль ВК, не нужен для VK ID.
Это конечно хорошо, что не надо писать имя и фамилию ребёнка, школу и т.п.
Но номер мобилки сливать приходится! А это печаль…
gudvinr
24.09.2024 13:45Ученики начальной школы могут зарегистрироваться в Сферуме по ссылке-приглашению от администратора или классного руководителя с помощью электронной почты.
Также если в вашем регионе доступна работа с ЭЖД, то вы сможете зарегистрировать учебный профиль Сферума для ребёнка младше 14 лет с помощью почты в процессе связки учебного профиля с ЭЖД.
Surrogate
24.09.2024 13:45Спасибо
Ученики начальной школы могут зарегистрироваться в Сферуме по ссылке-приглашению от администратора или классного руководителя
Бегу на родительское собрание, спрошу у классной руководительницы может она прислать ссылку? Знает ли вообще об этом!
И главное нужен ли Сферум в началке...
supercat1337
24.09.2024 13:45+2Ни в одной школе, знакомой мне, никто не отправлял ссылки-приглашения. Классные руководители не в курсе. Просто в канал мессенджеров писали, что срочно нужно всем регистрироваться в Сферуме. Такая ситуация была и 2 года назад, и в этом году. Может быть на бумаге все красиво и работает, на практике немного не так.
Surrogate
24.09.2024 13:45главное нужен ли Сферум в началке...
Слава Б-гу нам в 4 классе Сферум не нужен!
Учительница не в курсе, что может присылать кому-то приглашения. По ходу родители не знают всех нюансов, тупо делают регистрацию в VK. А хорошо ли это?
Zorrina
24.09.2024 13:45"Зарубежные компании сошли с ума..." - можно подробнее? А точно именно они сошли с ума?
Panzerschrek
24.09.2024 13:45Не понял, каким образом удалось использовать единую кодовую базу на всех платформах.
Под Web-версию, насколько я понимаю, можно Typescript в JS транслировать. А под десктоп и мобильное приложение как? Или, как это нынче модно, это не нативные приложения, а всё тот же браузер с тем же самым JS кодом (Electron)?
TimsTims
24.09.2024 13:45+4Когда мессенджер сможет работать в оффлайн режиме?
Когда можно будеь подгрузить себе переписки, чтобы их почитать пока нет связи/пока ВК 100500 лет грузится?
Когда можно написать человеку сообщение и быть уверенным, что оно отправится, даже если связь сейчас лагает? Сейчас если отправляешь сообщение, но вдруг ты попал вне зоны действия сети, то высокий шанс что оно так и не будет никогда отправлено.
Всё это в сумме делает из "мессенджера" очень ненадежную штуку для коммуникации.
Stanislavvv
24.09.2024 13:45Когда мессенджер сможет работать в оффлайн режиме?
Подозреваю, что таких мессенджеров в живых уже не осталось...
VADemon
24.09.2024 13:45Conversations (XMPP) для Android себя исправно ведет. Только при загрузке файлов нужно ручное подтверждение при ошибке
Stanislavvv
24.09.2024 13:45Ну да, про jabber я как-то забыл. Под него было достаточно мессенджеров с приличным поведением. Впрочем, понятно, почему забыл — conversation единственный приличный (т.е. имеющий достаточно фич и при этом поддерживаемый) современный клиент под андроид. С времён, когда jabber был популярен, прошло слишком много времени...
TimsTims
24.09.2024 13:45+2Подозреваю, что таких мессенджеров в живых уже не осталось...
Telegram, Whatsapp,
Viber- вполне себе работают там где нет связи - можно открыть историю чатов, почитать, посмотреть фотки/файлы, написать и отправить (в т.ч. отложенные) сообщения, чтобы они отправились когда появится связь.Ничего этого нет в VK Messenger. Хочешь открыть переписку - жди когда появится (очень) стабильная связь. А если связь нестабильная - то ты об этом никак не узнаешь, у тебя будет просто бесконечно крутиться кружочек. И сиди догадывайся - он крутится потому-что связь такая медленная, либо это на стороне VK так долго всё, или же связь оборвалась, и само ничего не восстановится, нужно перезагружать прогу?
Stanislavvv
24.09.2024 13:45написать и отправить (в т.ч. отложенные) сообщения, чтобы они отправились когда появится связь.
Тогда whatsapp тут зря — при отсутствии связи он как-то хреново справляется.
Ну и оффлайн для меня — когда устройство выключено и включается при отсутствии сети. Не помню, чтобы, как минимум, на десктопе телега так могла поработать хотя бы с архивом. Впрочем, запускал её в таком виде довольно давно. Да и уже запущенная может не показать более ранние сообщения — слишком полагается на то, что история хранится на сервере и может почистить по каким-либо причинам.
TimsTims
24.09.2024 13:45+1оффлайн для меня — когда устройство выключено и включается при отсутствии сети
Это как?
Stanislavvv
24.09.2024 13:45+2Комп без сети (поехал с ноутом на поезде и не раздаю инет), телефон там, где работает только голосовая симка (опять же на поезде по свердловской области). То есть, интернета нет сразу при включении.
А то, что иногда разрывается связь - это связь есть, просто хреновая. И этот случай тоже надо обрабатывать отдельно.
Felix14_v2
24.09.2024 13:45+1Так ведь клиент телеграма сохраняет все загруженные файлы и сообщения в кэше, и ему не важно, есть у вас сеть или нет. Кэш можно самостоятельно настраивать и работать с ним за пределами клиента, просто из файлового менеджера.
Stanislavvv
24.09.2024 13:45Ходить в шифрованную базу за сообщениями вне клиента — это отдельное извращение будет :-)
grishkaa
24.09.2024 13:45+7Какая разница, насколько красивый там код внутри, если вы в итоге сделали этот ужасный планшетный высер, где переключение между чатами совмещено со списком чатов? Главная фича старого интерфейса — это то, что там чаты открываются во вкладках, которые никуда не прыгают, отдельных от списка чатов. Те чаты, в которых ты сейчас переписываешься, все на одном месте, переключаться между ними можно со скоростью мысли. А в новом интерфейсе надо их каждый раз искать в списке.
Да, я понимаю, что сейчас практически все так делают, потому что наша цивилизация зачем-то решила разучиться в десктопные интерфейсы. Но у вас-то уже всё было сделано и работало, надо было просто не трогать.
axelan
24.09.2024 13:45Для меня в новом vk мессенджере не хватает одной маленькой, но из-за этого не менее важной функции «Локальный пароль» (замочек), чтобы без выхода из аккаунта можно было заблокировать приложение, если кто-то на компьютере ещё работает кроме тебя, без перехода в другую учётную запись в ОС.
Время идёт, а такие простые функции выпиливаются из десктопного приложения. В последней версии 5.3.2 от 2020 года это было, а сейчас отсутствует(Паша, верни!
mihmig
24.09.2024 13:45+1Вот ещё, чтоб товарищ майор кричал из окна в бобик - "погодите! не увозите его, тут ещё какой-то пароль!" ?
Alex_PS
24.09.2024 13:45Отлично. Теперь я знаю, как отключить новый интерфейс. UX сильно деградировал с обновлением
Felix14_v2
24.09.2024 13:45В комментариях все ругают ВК за (не)юзабельность, но ведь статья-то по закулисью сервиса, а не по разработке интерфейса. Так что, всем народом теперь очень ждём статью от дизайнеров :)
Kickoman
24.09.2024 13:45+1А как так получилось, что у вас дата не влезала в int32? Классический unix timestamp ещё долго прекрасно будет туда влезать
Su-MPAK
Возможно когда-нибудь вы даже сможете, чтобы ваше..... приложение... не требовало прав админа для установки...