Как стать автором
Обновить

Комментарии 49

Отличная реализация. Было приятно днём увидеть в новых каналах интересный сервис на push-уведомлениях, а не очередной канал от СМИ с подключенным RSS.
Отличный сервис! Мне бы такой же, но с перламутровыми пуговицами — для stackoverflow.com c возможностью фильтровать мусорные вопросы по репутации спрашивающего. Ещё неделю назад мелькала мысль сделать для этого десктоп-приложение на WebKit.
если вы более понятно с каким нибудь примером в личку напишите, то подпилить не проблема
Я не имел в виду свой комментарий как побуждение к действию, просто мысли вслух :) Но идея была в том, чтобы не просто тащить все подряд вопросы по тегу, а ещё задать некий нижний порог репутации пользователя-автора вопроса (порядка нескольких десятков очков репутации)? чтобы отсеять низкокачественные вопросы новичков.
Если была бы еще поддержка английского stackoverflow, то вообще цены бы не было.
Добавил поддержку английской версии, инструкция в апдейте статьи
Галочка на «Хотелось бы видеть и английские вопросы» не сохраняется о_О.
момент реализации чуть кривоват, скрипт начинает отрабатывать только после загрузки страницы, после НГ подправлю чтобы отклик был быстрее
НЛО прилетело и опубликовало эту надпись здесь
Окей. Фактически можно создать каналы в PushAll для каждого сервиса. Потом пользователи будут подписываться и получать пуши по тегам через фильтры подписки.
Но решение в статье более user-friendly. Подписался натыкал галочек и получаешь пуши куда хочешь.
НЛО прилетело и опубликовало эту надпись здесь
Сам по себе RSS это просто лента в XML формате. Она не умеет отображать оповещения, отправлять их на устройства и т.д.
В PushAll можно указать RSS-ленту для канала и он будет иногда её проверять и делать пуш всем подписчикам о новых записях в ленте.
Также в PushAll есть фильтры, т.е. можно например сделать такой канал, потом пользователь подписался и ввел с фильтр «jquery» и получает все пуши, где в тексте есть это ключевое слово. На деле выходит тоже самое.

Но решение автора более удобное и простое. На выходе получаем четко то что выбрали в удобном ёмком формате в течении одной минуты. То есть можно ответить раньше всех на вопрос и получить ачивку.

PS. Кстати интересно, на сколько быстрее будут решаться вопросы, если на каждый тег по 10-20 человек подпишется и все они будут в течении минуты получать пуш.
Но врядли хабр предоставит статистику до и после.
НЛО прилетело и опубликовало эту надпись здесь
1. Я к тому и веду, что по сути все это инструмент позволяющий из RSS сделать user-friendly читалку этих ресурсов, а если точнее получать оповещения на разные платформы о новых вопросах с задержкой не более 1 минуты.
2. Ну как не хранит… как то так (выбран канал, про который говорится в статье)


Тут штука в том, что вы можете без установки расширений или читалки просто включить веб-пуши в браузере. Ну или бота в телеграм добавить. Или установить расширение в pushall в хром, или приложение на андроид поставить, или даже email можно добавить.
Видимо автору стоило немного описать используемый сервис.
НЛО прилетело и опубликовало эту надпись здесь
Ниже описал, киньте ка мне оповещение о новом личном сообщении через RSS. Или например на onliner.io пусть мне статусы летят через RSS. Или может дебаг на серваке? Логи с ошибками?
И чтобы приходило секунда в секунду.

И насчет переизобретения RSS. По сути тут основная разница в том, что RSS нужно получать и обновлять, а push-уведомления летят в сайта через сервис пользователю через сокет. То есть тут появляется свобода гибкости рассылок (неограниченное количество параметров выборки, личные оповещения) и экономия ресурсов.

К примеру проект автора сканирует ленту раз 1 минуту. На канал может быть подписано 10000 человек. Как итог в 10000 раз меньше запросов на RSS этих сервисов каждую минуту. Неплохая оптимизация?
НЛО прилетело и опубликовало эту надпись здесь
Вот я о том и говорю. Инструменты нужно использовать по назначению. Да через RSS можно сделать все что угодно и подключить это к читалке. А теперь вопрос — как быстро у вас сядет аккумулятор телефона, если он будет хотя бы каждые 10 минут проверять RSS ленту? Или 30 RSS лент? Я сейчас в PushAll подписан на 90 каналов, многие из них подключены через RSS, от многих из них пушей нет больше недели (редко новые записи появляются или новые пуши) Но появиться они могут в любой момент. К слову RSS агрегаторы в облаке имеют достаточно более жесткие ограничения чем у нас. К примеру несколько человек говорили, что у Feedly лента обновляется иногда раз в 8 часов, поэтому они перешли к нам и создали просто открытый канал, сами на него подписались и т.д. После этого мы для каналов с подписчиками меньше 10 сделали ограничение в 1 проверку в 2 часа. Но и это лучше 10 часов. Так что в этом аспекте мы чем то похожи на Feedly.

Я вообще на самом деле удивляюсь, но многие просто используют наш сервис как RSS агрегатор. Т.е. создают канал, прописывают RSS (или группу вконтакте) и приглашают народ. А все по той причине, что 90% их аудитории не знают что такое RSS, но подписаться на пуши им куда проще. Но особенно радует когда подключаются какие нибудь интересные сервисы, которые отправляют таргетированные оповещения. Кстати у нас также много тех, кто отправляет оповещения вручную — у них даже сайта нет, например стриммеры.

Вот вы тут все пишите, зачем это все нужно если есть RSS, а у канала уже 24 подписчика.
«Впрочем, я, кажется, потерял нить… Рсс не требует моментального обновления, почему вы говорите про какую-то проблему с мгновенным получением уведомления? Рсс он вообще не про уведомления. Ну, не в виде «а! что-то прилетело! срочно реагируй!».»
Мы в общем то и подошли к тому, о чем я веду речь. Использовать RSS для уведомлений возможно — но это костыль. Для пушей, к слову, очень важна скорость доставки. К нам многие приходят например от OneSignal и других сервисов т.к. там очень сильно занижают скорость отправки до 200-300 получателей в секунду из за чего на большой базе выходит задержка в несколько минут. И им эта задержка достаточно сильно важна.
Тут тоже самое — если вы будете проверять это через RSS например раз в минуту. То вы будете мучать сервер непрофитным трафиком (рекламу то вы не смотрите) вы один то ладно, вот 10000 таких как вы. т.е. делаете в сутки например 1400 запросов, заходите на сайт один раз.
Скорее всего обычно эти RSS подключают с обновлением например раз в час — для RSS это нормальное время.

А суть всего этого сервиса в том, чтобы получить оповещение в браузер сразу кликнуть и сразу ответить и получить например «Лучший ответ». В общем есть те, кто этим занимается и им этот сервис будет полезен. И RSS для них это как таки не то что им нужно.
НЛО прилетело и опубликовало эту надпись здесь
Можно даже ничего не ставить.

Подсказка:



Жмем на переключатель, и разрешаем.



После подписки на канал приходит первый пуш.



А можно поставить дополнение и будет еще вот такая штука



Это если брать компьютер. А так можно подключить и через телеграм бота и на телефон поставить приложение (ну или без приложений также в хроме работает) или даже email: можно указать как часто, например поставить время 10 минут и вам каждые 10 минут будут приходить письма с оповещениями, у меня стоит сутки, чтобы было как архив, например.
И это все на серваке работает, т.е. я подписан на 90 каналов, но мои устройства не ломятся в сеть, а принимают пуши через GCM со всех этих ресурсов.

PS не будем разводить тут, если есть какой то ответ — пишите мне в ЛС.
Простите за мой французский, но что за херню вы несете?

А теперь вопрос — как быстро у вас сядет аккумулятор телефона, если он будет хотя бы каждые 10 минут проверять RSS ленту? Или 30 RSS лент? Я сейчас в PushAll подписан на 90 каналов, многие из них подключены через RSS, от многих из них пушей нет больше недели (редко новые записи появляются или новые пуши) Но появиться они могут в любой момент.

После этого мы для каналов с подписчиками меньше 10 сделали ограничение в 1 проверку в 2 часа.

Т.е. даже если новость появится в любой момент, уведомление о ней я получу через два часа? Так насколько сядет аккумулятор моего телефона, если я буду проверять 90 фидов раз в два часа?

К примеру несколько человек говорили, что у Feedly лента обновляется иногда раз в 8 часов, поэтому они перешли к нам и создали просто открытый канал, сами на него подписались и т.д.

Когда у вас окажется столько же пользователей сколько у Feedly, вам тоже придется 2 часа превратить в 8 часов. Во всяком случае для ваших «бесплатных» клиентов.

Тут тоже самое — если вы будете проверять это через RSS например раз в минуту. То вы будете мучать сервер непрофитным трафиком (рекламу то вы не смотрите) вы один то ладно, вот 10000 таких как вы. т.е. делаете в сутки например 1400 запросов, заходите на сайт один раз.

Большая часть публичных RSS спокойно кэшируется и старая версия спокойно возвращает HTTP 304 Not Modified. Если оно гонит HTTP 200, то это проблема сервера, а не читателей.

Что касается 10000 подписчиков у сайта, это ведь уже не маленький такой сайт и 150 запросов статического файла в секунду ему ничего сделать не смогут даже теоретически, поскольку nginx даже на 5 баксовом дроплете тянет больше 1000 RPS.

Ну и о рекламе. Я вам ща секрет открою, только никому не рассказывайте — сайты не всегда отдают весь контент в RSS и мы таки переходим на сайт, если статья интересная.

Скорее всего обычно эти RSS подключают с обновлением например раз в час — для RSS это нормальное время.

Нормальные ресурсы обновляют 1 в 1. Единственный странный ресурс на моей памяти — Upwork, на котором задержка 5 минут, но он живет не с рекламы и ваши параноидальные идеи как-то мимо кассы.

А суть всего этого сервиса в том, чтобы получить оповещение в браузер сразу кликнуть и сразу ответить и получить например «Лучший ответ». В общем есть те, кто этим занимается и им этот сервис будет полезен. И RSS для них это как таки не то что им нужно.

Че, правда что ли? http://i.imgur.com/NjbvJid.png Попапы летят на рабочий стол. Не думаю, что вы обновляете с частотой раз в секунду.
Ок. Ваш подход имеет место. Пользуйтесь на здоровье. Есть те, кто уже сейчас использует решение в статье и их тоже устраивает.

«Т.е. даже если новость появится в любой момент, уведомление о ней я получу через два часа? Так насколько сядет аккумулятор моего телефона, если я буду проверять 90 фидов раз в два часа?»

До 10 подписчиков 2 часа, от 10 до 100 — 30 минут, от 100 до 500 — 1 минута. Больше 500 подписчиков — 30 секунд.
Когда мы добавили Wordpress плагин — многие каналы (официальные конечно) на него перешли. И там оповещение приходит секунда в секунду.

Большая часть каналов на которые я подписан обновляются каждые 1-10 минут. То есть таки телефон мой с полудохлым аккумулятором сядет еще до того как я выйду из дома утром…

«Когда у вас окажется столько же пользователей сколько у Feedly, вам тоже придется 2 часа превратить в 8 часов. Во всяком случае для ваших «бесплатных» клиентов.»
Когда у нас будет больше пользователей, скорее всего бесплатно мы не будем разрешать каналы с RSS если меньше 10 подписчиков. Изначально например приватные каналы бесплатно не могут использовать RSS.
Для 500 пользователей без проблем можно обновлять одну ленту раз в 30 секунд.

«поскольку nginx даже на 5 баксовом дроплете тянет больше 1000 RPS.»
Если только там не HTTPS, т.к. SSL Handshake реально так повышает нагрузку.
Фильтры, разве что… Я как-то не задумывался о фильтрации, но наверняка рсс-читалки это умеют делать.

В случае с проектами StackExchange можно подписаться сразу на отфильтрованную ленту
Фильтры, разве что… Я как-то не задумывался о фильтрации, но наверняка рсс-читалки это умеют делать.

За Тостер не отвечаю, а на Stack Overflow внизу каждой страницы со списком вопросов есть ссылка на RSS с этими вопросами. Соответственно, достаточно подобрать нужный фильтр, и будет нужный RSS. Например, я подписан на ru.stackoverflow.com/feeds/tag?tagnames=.net%20or%20wpf%20or%20winforms%20or%20c%23%20or%20c%2b%2b%20or%20c&sort=newest
Простите, но чем ваши пуш уведомления удобнее и проще RSS? Берем QuiteRSS, пихаем в папку все нужные теги (на SO у каждого тега свой канал) и все.

Не, я понимаю, что вам надо бизнес продвигать, но объективно плюсов по сравнению с RSS у пушей нет вообще никаких. А нормальная RSS читалка может еще и серьезно поспорить с вашим сервисом в плане возможностей поиска, организации и хранения новостей.
90% нашей аудитории даже не знает что такое RSS. Про то, что наш сервис работает даже без установки чего либо в браузер — я уже написал. В случае с сафари (OSX) или андроид например, у вас это будет даже работать при закрытом браузере.

«Не, я понимаю, что вам надо бизнес продвигать» Больше потратил чем заработал (пожертвования + 1.5 платные функции), и буду тратить дальше.

«но объективно плюсов по сравнению с RSS у пушей нет вообще никаких. А нормальная RSS читалка может еще и серьезно поспорить с вашим сервисом в плане возможностей поиска, организации и хранения новостей.»
Если брать множественные рассылки да. Но например возьмите канал FreeLoot — там оповещения о новых личных сообщениях, интересно вы будете делать ленту для личных сообщений и через читалку их получать?

RSS не создан для оповещений. Это инструмент агрегации лент, чтобы можно было читать статьи или их заголовки не бегая по всем ресурсам. При этом тут не важна скорость доставки, ленты можно проверять прямо при открытии читалки.
Тут же вам ничего не нужно открывать, делать и т.д. Например я мониторю статьи на ресурсах, они тоже мониторятся через RSS + фильтруются. За счет этого я часто захожу на ресурсы где еще 10-20 просмотров нет (через час уже несколько тысяч, да)
В плане личных оповещений это мегаудобно, личные сообщения, ответы на комментарии, все что происходит сейчас и связано лично с вами. Например второй комментарий в этой статье — это рейтинг автора. Через RSS такое уже сложновато сделать тут уже возможно потребуются доп. запросы и это уже индивидуальное.
Спасибо за столь интересный пост.

Есть небольшое предложение… У Вас UserId NVARCHAR(128) — при росте данных в таблицах могут быть проблемы с перфомансом. Возможно имеет смысл сделать суррогатный ключ IDENTITY с типом SMALLINT или INT.
Это была светлая мысль создателей Identity, а что бы сделать нормальным ключом, надо либо описать самому интерфейсы, либо сделать дополнительный ключ как вы предлагаете, но все равно дополнения надо дописывать. Решил пока перформанс не начнет проседать, пока не буду коня в вакууме лепить
Лучше для таких целей использовать rss-клиент, настроив его как нужно для обновления ленты.
Могу лишь сказать за себя и повторить что меня побудило это сделать. Есть каналы, на которые я реагирую с большой задержкой, например мыло, смс, есть каналы по которым я отвечаю быстро телефон скайп. Для себя я долго тестил RSS и либо он идет через почтовик (соответственно, все что проходит по почте является либо важным либо в корзину), либо через приложения которые не под рукой все время. Повторюсь, лично у меня не срослось, если у вас иначе, вам больше повезло чем мне, вам не надо ничего делать чтобы получить полезную информацию, а мне вот приходится под себя писать доп примочки.
НЛО прилетело и опубликовало эту надпись здесь
Я бы с ума сошел от такого количества пуш-уведомлений. Стараюсь их отключать всегда и везде, за редчайшими исключениями (которые можно пересчитать по пальцам одной руки).
Такого это какого? Подписался на 10 тегов (это много как мне кажется), получилось с 15.00 всего 4 оповещения, причем подписался на так много, чтобы протестировать.
Потом отпишусь от половины и будет 1 пуш в день или даже меньше.
Подписан исключительно на .NET и ASP.NET (там 5 тэгов собралось), периодичность получается около один пуш на пару часов, по заголовку сразу понятно насколько вопрос интересен. Так что, если в меру, то все выглядит довольно таки не плохо.
Потому что русский SO — мертворожденная помойка для второсортных вопросов? Попробуйте повторить этот же эксперимент с нормальным SO и теми же тегами.

Мне вот что интересно: вопрос получить спустя пару часов вы боитесь, а пропустить _все интересные вопросы_, потому что читаете форум для неспособных спросить у профессионалов всего мира — нет? Очень странный подход.

С помойками такой нюанс… Относительного большого СО русский СО — беспросветное дно. Но Тостер относительно русского СО — тоже беспросветное дно. :) Русский СО в вопросах контента ориентируется на старшего брата (впрочем, с заметным расширением тематики), а Тостер скорее ближе к традиционным форумам, где можно пофлудить на любую тему без особых ограничений (на Тостере очень популярны вопросы жанра «посоветуйте мне того, не знаю чего» — в сети Stack Exchange такое недопустимо).

Для многих вопросов, кстати, нет разницы, где их задавать: ответы будут примерно одинаковыми на всех ресурсах. Ну, на большом СО ответят за 5 минут, а не за 15 — вот вся разница. К таким вопросам относятся задачи по популярным и распространнённым технологиям. Причём ответят и на относительно сложные вопросы: специалисты есть. Вот если что-то редкое или экзотическое — да, тогда только на забугорные ресурсы. Так что в целом вопрос комфорта, и у русскоязычных ресурсов ниша есть.
Да нет никаких нюансов: мне крайне тяжело представить себе вопрос, ответ на который не нагуглить за те 15 минут, которые пройдут до получения ответа на русском SO. Ну, если гуглить не на русском, разумеется.

Даже не так: я убежден, что таких вопросов не существует, кроме очень узкоспециальных тем, наподобие 1С. Грабли равномерно распределены по всему миру, поэтому если джуниор на них наступил — ответ _уже_ есть на большом SO. А если на грабли наступил сеньор — тут ни за какие 15 минут на русском SO ответ не получить.

Так что ниша есть, но попадание в нее весьма чревато для попавшего очень негативными последствиями.

«Негативные последствия»? Вы так говорите, как будто программисты делятся на сеньоров и идиотов. :)

Умение гуглить приходит не сразу. Учатся чаще всё равно по переведённым книгам, поэтому для эффективного гугления нужны хорошие познания в английской терминологии, а они приходят только с опытом. Да и не сказал бы, что у сеньоров вообще никогда не случается проблем с подобором правильного ключевого слова. Всё-таки мы живём в большой мере в русскоязычной среде, и английские слова не всегда просто точно подобрать.
Негативные последствия проявляются в необходимости учиться «всё равно по переведённым книгам», отсутствии знания терминологии и далее по списку.

Программисты делятся на тех, кто хочет вырасти (не обязательно при этом становиться сеньором, хотя очень сложно откосить) — и тех, кто не хочет. Первым я бы анстоятельно рекомендовал забанить у себя русский SO на аппаратном уровне.

Вот например, я программирую под андроид хреново. Но в пушах заметил интересную багу связанную с хромом, которую гугл не хочет фиксить
stackoverflow.com/questions/30415231/intent-chrome-browser-from-lockscreen-dont-work
Если стоит блокировка паролем, или кодом, то открыв уведомление с локскрина — хром проигнорирует интенд.

Проблему так и не решили, я потом нашел костыль — сделать промежуточное активити, которое все равно где то 0.25 секунды ждет. Иначе хром просто не реагирует.
В следующей версии буду делать это опционально т.к. многие кто эту багу не видел, сильно удивились, что мелькает еще активити.

Но об этой проблеме не написал ни один «сеньор», а я по андроиду даже на джуниора не тяну на самом то деле.
Вы, наверное, это хотели своему тимлиду отправить, а не мне? Очень рад за вас, очень сочувствую вашим пользователям.

Промежуточное активити — это не решение, я бы никогда не подпустил его и близко к продакшену. Вам же написали прямо сразу в комментарии: проблема известна. Я очень далек от мобильной разработки, но склонен верить чуваку. Описать проблему так, чтобы я понял, в чем, собственно, проблема, вам не удалось (допускаю, что это мне не удалось понять).

Подводим итоги: проблема известна, судя по отсутствию мелькающих активити в моем телефоне люди с этим живут, кроме того, я почти уверен, что хром так делает специально, не знаю уж, зачем. ОК.

Какое это все имеет отношение в тому, что писал я?
Я и есть тимлид и основатель сервиса :) Из пары тысяч активных пользователей андроид приложения только пара человек возмутились в отзывах. Намного лучше то, что наше приложение до сих пор весит около 1.5 мегабайта, не жрет аккумулятор и достаточно стабильно работает (собственно только принимает оповещения)
Само приложение имеет рейтинг 4.6 что вполне неплохо при моих знаниях андроид разработки.

«Очень рад за вас, очень сочувствую вашим пользователям.» А пользователи рады, все работает шустро, проблема поправлена, скоро будет эта штука опциональной.

«Описать проблему так, чтобы я понял, в чем, собственно, проблема, вам не удалось (допускаю, что это мне не удалось понять). » Что не ясно: кликаешь ты на уведомление с экрана блокировки, а у тебя блокировка снимается, хром открывается, но зависает. Бага явно в хроме, тикет висит но всем пофиг. Просто мало кто вызывает ссылки с экрана блокировки, тут уже специфика сервиса пуш уведомлений.

«Какое это все имеет отношение в тому, что писал я?» Огромное отношение. Я даже не джуниор, а проблему не решил ни один сеньёор за несколько месяцев.
Там было несколько вариантов решения — либо ждать 2-3 секунды просто перед открытием хрома, что совсем ужасно. Либо там анимация идет переключения между активити. Пользователи за это снизили оценку с 5ки до 4ки, но терпимо. Когда будет опционально — вернут обратно.
У нас очень лояльная аудитория, я целыми днями общаюсь и обсуждаю с десятками пользователей из вопросы и параллельно разрабатываю все аспекты проекта.
> ждать 2-3 секунды просто перед открытием хрома, что совсем ужасно

Да нет, не ужасно. Нормально. Латенси мобильных телефонов до сих пор измеряется секундами.

Просто сеньоры не вставляют костыли, думая, что что-то тем самым починили. Поэтому все ваше хвастовство на сто абзацев впустую: я по-прежнему считаю, что вы издеваетесь над пользователями, а сеньоры — нет.

И да, просто ради хохмы, логику еще никто не отменял, насколько мне известно. Опровержением моих слов была бы ссылка на русский SO, на котором был найден ответ. А то, знаете, теорема Ферма тоже не на каждом форуме освещена. И то, что студент-второкурсник думает, что доказал ее, не говорит о том, что все математики в мире дураки.

Насчёт издевательства над пользователями. Сбербанк режет функционал если у тебя кастомная прошивка, даже если у тебя чистый AOSP на нексусе.
В то же самое время тинькофф работает под рутом, а вчера они ввели оплату через NFC
А сосед жену бьет, да.
Это я о том, что все познается в сравнении. Огромный сбербанк, со штатом разработчиков не может отличить рут от чистого андроида (ну или им руководство сказало так сделать). У нас же например вообще как таковых средств не много, у нас в сервисе практически все бесплатно. Платные услуги только для каналов, и то они не сильно влияют на функционал, скорее немного упрощают жизнь.

В последнем апдейте я кстати фикс этот сломал — задержку сделал 25ms и убрал анимацию — теперь хром с экрана блокировки не открывается. но и активити это уже незаметно — более того, визуально кажется как будто хром стартует быстрее чем обычно т.к. нет анимации.
К слову мы еще как раз радуем пользователей быстрым исправлением ошибок. Например заметили ошибку -505 прямо за час до нового года, связался с пользователем и уже после НГ залили апдейт. Как итог — 2 негативные оценки в тот же день превратились в положительные. При этом крупные компании вообще не фиксят проблемы месяцами.


PS. первый оценку поправил, а вот отзыв не отправился, кстати замечали эту проблему с другими пользователями.



PS2. Когда вижу проблемы в отзывах, нахожу пользователя в БД и пишу ему лично, разбираюсь с проблемой.
Подождите, не совсем понятно.
Оно просто показывает сообщение и висит пока вы его руками не закроете? (что в этом случае делать с фильтрами, по которым бывает 1000+ сообщений в сутки?)
Или оно само закрывается через 5-10 секунд? (что тогда делать с сообщениями, которые показываются в момент, когда пользователь отошёл?)
В веб-пушах висят дальше. В дополнении они исчезают через 10 секунд. В андроиде висит в оповещениях как и везде. В телеграмме оно в чате оседает, на почте будет в письме, а количество писем зависит от настроенного времени, например можно сделать раз в сутки — будет одно письмо приходить.
И то и другое можно будет смотреть в истории.

«что в этом случае делать с фильтрами, по которым бывает 1000+ сообщений в сутки?» видимо по англоязычному stackoverflow много вопросов идет…
Тут кстати видимо проще выбирать более узкие теги, а широкие проще вручную читать, если нужно.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории