Обновить

Разработка

Сначала показывать
Порог рейтинга

Почему моё Web API никогда не будет RESTful?

TL;DR потому мне не нужен динамический контракт.

Создатель архитектурного стиля REST Рой Филдинг — считает, что REST-архитектура должна соответствовать пяти обязательным ограничениям. У него довольно жёсткая позиция, что если API не выполняет хотя бы одного ограничения, то это не RESTful API. И тут ничего не поделаешь, как автор идеи считает, так и правильно. Далее я буду говорить, что api REST или не REST именно по Филдингу.

Но шутка в том, что хотя каждый уважающий себя бекендер знает про REST, почти никто не делает RESTful API. Но не потому что это недостижимый идеал, а потому что REST для апи, почти никому не нужен.

В смысле не нужен? А вот так, давайте взглянем на модель зрелости REST сервисов Леонарда Ричардсона. На первом и втором уровне находятся ресурсы и http-глаголы, вещь полезная, я понимаю их пользу и ничего против них не имею. А вот на третьем уровне мы видим hypermedia controls, о котором я бы хотел поговорить подробнее.

Гипермедиа как средство управления состоянием приложения или HATEOAS. Благодаря этому ограничения клиент и сервер могут развиваться независимо друг от друга, а вся необходимая информация о том, что можно делать ресурсом, содержится в ответе этого ресурса. В общем, классический сайт. Мы открываем главную или какую-нибудь другую страницу и переходим между страницами. На страницах есть ссылки на другие страницы и формы для редактирования. Вот что говорит сам автор:

«REST API следует вводить без каких-либо предварительных знаний, кроме начального URI и набора стандартных типов данных. Все переходы состояний приложения должны определяться исходя из представлений или пользовательских манипуляций с ними, полученных клиентом от сервера»

— Рой Филдинг, Архитектурные стили и проектирование сетевых архитектур программного обеспечения.

Для меня это звучит так: вот у нас сайт, соответствующий принципам REST архитектуры, тогда он может отдавать свои ресурсы в разных представлениях — например, в виде html или json. HTML — это обычная веб страница, а json содержит только данные, без визуала. Нетрудно понять, что REST клиент для json представления выглядит не очень привлекательно.

Филдинг предполагал, что сервер может менять контракт как захочет, а клиент сможет его понять на основании гипермедиа. Вы встречали таких клиентов? На самом деле они есть, но про них мало кто знает. На практике в API HATEOAS не нужен ни программисту, ни программному клиенту. Программисту нужно описание контракта, с чем прекрасно справляются OpenAPI/Swagger, желательно автогенерённые из кода. А клиенту нужен четкий контракт, как создать товар или показать ленту. И меньше всего клиент хочет, чтобы контракт менялся, и тем более не хочет поддерживать средства обнаружения и подстройки под изменённый контракт.

В итоге перед программистом встаёт дилемма:

  • Не делать HATEOAS. Но тогда его апи нельзя называть RESTful.

  • ДелатьHATEOAS. Но тогда ему нужно будет "напихать ссылок" в ответы своего апи и поддерживать их просто чтобы называться RESTful. При этом, эти ссылки никто не будет использовать.

В итоге мы живём в мире, где бэкенд часто разрабатывают с использованием принципов REST, но при этом почти не существует RESTful апи. А те, что существуют, имеют пародийное название REST-like API или pragmatic REST. А 2-й уровень зрелости REST звучит так, как будто мы остановились на полпути к идеалу. Но ведь это не идеал: 3-й уровень зрелости часто бессмысленен или даже вреден.

На практике, все насколько смирились с ситуацией, что ослабили значение термина и называют api RESTful, даже если оно только частично следует принципам REST.

А было бы круто, если бы кто-то придумал новый, хороший термин для архитектурных практик, которые бы взяли всё лучшее и полезное из REST применительно к современным Web-api. Тогда бы начинающие бэкендеры сразу осваивали актуальные подходы, а не книги Филдинга из 2000-х, как я когда-то.

Теги:
Всего голосов 2: ↑2 и ↓0+2
Комментарии0

В игровом чате EA теперь нельзя писать сокращение «GG» (Good game) и за это пользователь получает наказание в виде бана аккаунта на 72 часа. Это сообщение подразумевает «хорошую игру», однако у проигравшей команды могла быть плохая игра, и сообщение для них могло быть обидным.

Теги:
Всего голосов 5: ↑4 и ↓1+5
Комментарии4

Новые лекции Python + AI выпустили в Microsoft. В них эксперты собрали самую актуальную информацию про кодинг и создание продвинутых нейропомощников на основе последних разработок с подробными презентациями и примерами кода, в том числе RAG, эмбеддинги, агенты и MCP-протокол.

Теги:
Всего голосов 3: ↑2 и ↓1+1
Комментарии0

Инструмент Depixelization PoC вытаскивает текст из скриншотов и фото, убирает пиксельный хаос и делает буквы читаемыми. Починит даже самые безнадёжные блоки текста. Использует метод De Bruijn sequence для точного восстановления букв. Подходит для документов, конспектов, рефератов и всего учебного.

Теги:
Всего голосов 6: ↑6 и ↓0+9
Комментарии0

Представлен ресурс Uchinoko, который восстанавливает справедливость между пушистыми питомцами и людьми. Можно детально воссоздать своего кота/собакена в цифровом формате. Результат выгружается в SNS-иконку.

Теги:
Рейтинг0
Комментарии0

Пользователи жалуются, что новые иконки Microsoft плохо различимы в «стеклянном» интерфейсе iOS 26. Со временем подключается память, но в первое время не всегда получается быстро найти нужное приложение. Больше всего похожи друг на друга иконки Excel, Word и OneNote. Самое яркая их отличительная черта — цвет, которого в «стеклянном» интерфейсе нет.

Теги:
Всего голосов 4: ↑4 и ↓0+6
Комментарии2

Привет, Хабр! Наверное, я занимаюсь какой-то ерундой, но любопытство взяло верх. Однажды я нашёл интересную статью и очень захотел повторить эксперимент самостоятельно, ну и, конечно, написать статью по результатам. В качестве подопытного была выбрана отечественная оперативная память К565РУ5Г.

TL;DR
Автор успешно использует старую микросхему памяти в качестве фотодатчика получает несколько Ч/Б изображений.

Сложностей с тем, чтобы писать и читать в память не возникло, но возникли проблемы другого толка. Во-первых, из засвеченного кристалла читается странный паттерн, при этом в темноте память отдаёт ровно то, что в неё записывали, кристалл не повреждён при вскрытии.

Паттерн
Паттерн

Вторая проблема - самый душный этап этого квеста. Нужно сопоставить логический адрес каждой ячейки памяти с её физическим расположением. Всё, что у меня получилось извлечь из полученной каши - засветку/затенение блоков 64 на 64 точки. Т.е. кристалл реагирует на свет, но получить что-то внятное не получается.

Заранее с благодарностью призываю коллективный разум на помощь. С меня интересный материал.

Теги:
Всего голосов 3: ↑3 и ↓0+3
Комментарии0

Открытый проект AI Video Transcriber помогает транскрибировать видеоролики в сжатый и отлично написанный текст. Работает просто, вытаскивает текст из любых видео за секунды, а потом корректирует и делает подробное саммари. Решение поддерживает более 30 самых популярных площадок, в том числе YouTube, TikTok, Bilibili и прочие. Проект не просто вытаскивает текст из видео, но делает настоящее эссе: дополняет фразы и реплики, корректирует факты и мысли, редактирует текст и доводит до идеала. Основа — Fast Whisper (лучшая нейронка для транскрибации видео). Может смотреть видео и сразу же выдавать текстовые материалы и уточнения. Сегментирует видео на 20-минутные отрывки и делит их на разделы, чтобы проще было изучать материал.

Теги:
Всего голосов 1: ↑1 и ↓0+1
Комментарии1

OpenAI + Google Studio и немного Python = создаем бесплатную аудиокнигу без лишних заморочек

Ведущая Coral c Openai.fm
Ведущая Coral c Openai.fm

 В своё время моё отношение к аудиокнигам изменилось благодаря легендарному проекту «Модель для сборки» с Владом Коппом. Именно благодаря МДС я понял, что книги можно не только читать, но и прекрасно воспринимать в формате аудио. Аудиоформат даёт возможность знакомиться с произведениями в дороге или во время прогулок. Прекрасно помню времена, как загружал в свой MP3-плеер на 512 МБ выпуски МДС и, вместо того чтобы ехать с работы в тесной маршрутке, устраивал себе полуторачасовые прогулки в компании очередного фантастического рассказа.

Эпоха аудиоизобилия

Сегодня выбор аудиокниг несравним с тем, что было пятнадцать лет назад. В интернете можно найти огромное количество как профессионально озвученных произведений, так и любительских версий. Однако даже при всём этом богатстве выбора нередко встречаются книги, которые до сих пор никто не озвучил.

Например, один из моих любимых циклов — «Зоны мысли» Вернора Винджа. «Пламя над бездной»«Глубина в небе» и «Болтушка» легко найти в сети. А вот заключительную часть — «Дети неба» — увы, никто не озвучил.

Поскольку мы живём в эпоху искусственного интеллекта, решение приходит само собой: если нужной аудиокниги нет — сделай её сам. Требования у меня простые, без претензий:

  1. Качество должно быть приемлемым;

  2. Платить не хочется, поэтому все должно быть полностью бесплатным.

Голос

Вспомнил я про сайт OpenAI FM — демо-площадку голосовой модели gpt-4o-mini-tts . Она звучит естественно и хорошо справляется с русским языком. Выбор из 11 разных дикторов. А так же есть классная фитча - промт инструкции для стиля речи, благодаря чему можно управлять «подачей» — делать её более спокойной, вдохновлённой или нейтральной . Поигравшись с промтами и выбрав голос, переходим к следующему этапу. На сайте можно бесплатно генерировать небольшие аудиофрагменты длиной до 999 символов. Ограничение не стало проблемой. Берем Python + Selenium WebDriver, и получаем программу, которая:

  • делит текст книги на чанки нужной длины,

  • отправляет их на сайт,

  • сохраняет аудиофайлы,

  • затем объединяет всё в одно произведение с помощью FFmpeg.

Результат получился неожиданно достойным. Да, между фрагментами иногда чувствуется разница в тембре, особенно в первые секунды. А ударения не всегда точны и изредка проскакивает лёгкий акцент. Но в целом — получилась полноценная озвученная аудиокнига.

Музыкальная подложка

После того как книга была готова, захотелось добавить фоновую музыку. Можно было просто подобрать подходящий трек, но ради спортивного интереса я решил сгенерировать музыку самостоятельно.

Платные сервисы вроде Suno или Udio я сразу отбросил. Зато вспомнил про Google AI Studio, где в разделе Build есть приложение PromptDJ MIDI. Оно позволяет создавать музыку прямо в браузере — достаточно задать стиль и параметры.

Скопировал прямо в Studio приложение, в промпте указал стиль space ambient и добавил возможность скачивания получившегося трека. Поигравшись с настройками в полученном приложении, получил именно то, что меня устроило.

Оставалось объединить музыкальную дорожку с голосом — снова помог FFmpeg.

Инструменты:

  • OpenAI FM — генерация речи;

  • Google AI Studio (PromptDJ MIDI) — генерация фоновой музыки;

  • Python + Selenium + FFmpeg — автоматизация и сборка.

Затраты: 0 долларов и несколько часов времени.

Итог: Получилась аудиокнига приличного качества с музыкальным сопровождением. Конечно, это не уровень профессиональных дикторов , но для личного использования — IMHO более чем достойно. Плюс абсолютно бесплатно.

Теги:
Всего голосов 8: ↑7 и ↓1+7
Комментарии22

По информации СМИ, OpenAI хочет показывать в ChatGPT таргетированную рекламу прямо в чат-боте на основе переписок с ИИ. Например, если пользователи говорят о спорте, им предложат спортивную форму или добавки. Контекст ИИ будут юзать, чтобы показывать больше рекламы. Если пользователи отключат рекламу, то лишатся всей памяти чат-бота. Контекста больше не будет, всю работу придётся организовать снова.

Теги:
Рейтинг0
Комментарии0

17 открытых репозитариев, чтобы выучить Python с нуля:

  • 30-Days-Of-Python — пошаговый курс на 30 дней: синтаксис, типы, функции, ООП, файлы, модули, мини-проекты и задания с решениями;

  • Python Basics — вся база и примеры по основам для новичков;

  • Learn Python — конспект тем с наглядными примерами и ссылками; удобно как быстрый справочник и повторение;

  • Python Guide — лучшие практики: окружение, управление пакетами, стиль, тестирование, деплой, инструменты;

  • Learn Python 3 — понятные ноутбуки и упражнения по Python 3. Лучший репо для самостоятельной практики;

  • Python Programming Exercises — 100+ задачек по базовым темам с решениями; Coding Problems — алгоритмические задачи, разбитые по темам и сложности. Идеально для подготовки к собеседованиям;

  • Project-Based-Learning — большая подборка учебных проектов с пометками по уровню сложности;

  • Projects — идеи проектов по категориям (CLI, веб, игры и другое) для портфолио и прокачки;

  • 100-Days-Of-ML-Code — краткий дневник-план по машинному обучению: темы на каждый день, базовые алгоритмы и ссылки для реализации на Python.

  • TheAlgorithms/Python — огромный справочник алгоритмов/структур данных с реализациями и тестами;

  • Amazing-Python-Scripts — набор готовых скриптов: автоматизация, парсинг, утилиты, GUI; каждый с инструкцией по запуску.

  • Geekcomputers/Python — склад идей с практичными скриптами;

  • Real Python Materials — исходники и материалы к статьям/курсам Real Python;

  • Awesome Python — топ-подборка библиотек и фреймворков, разбитая по категориям;

  • 30-Seconds-of-Python — короткие функциональные фрагменты кода с пояснениями;

  • Python Reference — шпаргалки, лайфхаки и туториалы.

Теги:
Всего голосов 12: ↑11 и ↓1+10
Комментарии3

Блогер показа самый иммерсивный рабочий стол по Minecraft. Ярлыки программ и игр красивенько размещены в слотах персонажа — можно даже открывать «инвентарь» персонажа. Для такого модного сетапа понадобятся три вещи — Windows 11, Rainmeter Skins и Wallpaper Engine. Последние две программы позволяют создать обои на любую тематику.

Теги:
Всего голосов 2: ↑0 и ↓2-2
Комментарии2

Как я сделал blur и линзу в Jetpack Compose

Всем привет! Меня зовут Владимир, я мобильный разработчик в «Финам». В одном из недавних проектов нужно было добавить в интерфейс Jetpack Compose визуальные эффекты поверх контента, например размытый хедер или движущуюся «лупу». 

Обычно такие приемы встречаются в играх, где весь экран — это фактически полотно для рисования OpenGL. В классической XML-разметке UI я с таким не сталкивался, поэтому пришлось довольно глубоко погрузиться во внутреннюю кухню Compose. Этот разбор может быть полезен тем, кто решает похожие задачи.

Сначала на Stack Overflow я нашел неплохой пример создания эффекта размытия на определенном участке экрана — к сожалению, это решение не было универсальным и зависело от верстки. Однако мое внимание привлекли два класса из фреймворка: RenderNode и GraphicsLayer

Если коротко, можно захватить часть экрана через GraphicsLayer, а в RenderNode записать контент. Но перед этим его можно обработать. После обработки метод drawWithContent() выводит результат в canvas. 

Сначала я попытался модифицировать эффект размытия из ответа на Stack Overflow, затем сделал размытие в форме круга, который движется вслед за пальцем, и постепенно пришел к окончательному варианту с движущейся прозрачной линзой. Код для отрисовки эффекта я показал в статье.

В результате можно получить эффект линзы, которая будет перемещаться за пальцем, если водить им по экрану. 

Какие выводу я могу сделать:

  • в Compose можно делать крутые визуальные эффекты, если покопаться в RenderNode;

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

Мой пример не самый изобретательный, но способ, который я показал, открывает почти безграничные возможности для реализации визуальных эффектов в Android-разработке, чем мы в «Финам» и пользуемся очень активно в наших финтех-проектах. Итоговый результат оформил в GitHub-репозитории — берите и пробуйте в своих проектах.

Теги:
Рейтинг0
Комментарии0

Ближайшие события

Терминал, командная строка, консоль, shell — как правильно?

Чем эти все термины отличаются друг для друга. Очень нужно понять, чтобы правильно написать мою следующую книгу.

Всем ответившим заранее спасибо.

Теги:
Всего голосов 6: ↑1 и ↓5-3
Комментарии12

На Hugging Face вышел новый инструмент для вайбкодеров. Это среда для создания мощнейших ИИ-агентов openEnv, где можно собирать, подключать, интегрировать, тестировать и масштабировать агентов под свои задачи. Там же можно обучить с подкреплением собственную нейронку. Есть полный комплект для работы: плагины, инструменты, API, контекст и прочее. Результат — автоматизация задач и проектов, целые приложения и сервисы под контролем ИИ, а также системы из связанных ИИ-агентов.

Теги:
Рейтинг0
Комментарии0

Как Dodo Brands развернула 1С в облаке Cloud.ru и ускорила выгрузку отчетов в два раза 📙☁️

Что за компания

Dodo Brands — компания, которая развивает бренды быстрого питания через франчайзинг и открыла более 1 500 точек в 26 странах мира. Сейчас у Dodo Brands есть популярные сети: пиццерии «Додо Пицца» и кофейни «Дринкит».

У компании есть своя IT-команда Dodo Engineering и технологическая платформа Dodo IS. Dodo Brands разработала сайты и приложения для своих сетей, умную выдачу в кофейнях и систему управления ресторанами, где можно планировать все бизнес-процессы: назначать смены, отслеживать заказы, анализировать продажи в реальном времени.

Какая была задача

В Dodo Brands «1С:Бухгалтерия» — важная система, которая влияет на все процессы в компании. От стабильной работы 1С напрямую зависит прибыль и удовлетворенность клиентов. К примеру, если что-то даст сбой, тесто или кофейные зерна приедут позже. Посетители останутся без пепперони или капучино, а точка недополучит денег.

Сначала Dodo Brands арендовала ПО. Чтобы все работало стабильнее, компания решила закупить лицензии и перейти в частное облако для хостинга всех своих сервисов. Dodo Brands начала сотрудничать с популярным облачным провайдером, но возникла проблема: работа бухгалтеров в 1С стала занимать в два раза больше времени, а работа самой системы замедлилась втрое.

Бухгалтерия не хотела тратить пять часов на закрытие месяца, а еще такой расклад не устраивал IT-команду, поэтому Dodo Brands решила сменить поставщика облачных услуг.

Как ее решили

Изначально рабочая база данных Dodo Brands размещалась на IT-ресурсах предыдущего провайдера, но с БД начались непредвиденные проблемы. Важно было быстро восстановить работу: от 1С зависят поставки продуктов, и сбой мог бы повлечь приостановку всех бизнес-процессов.

Во время неполадок с БД Dodo Brands уже тестировала сервисы Cloud.ru, они выигрывали по сравнению с предыдущим поставщиком облачных услуг. По итогам теста команде понравился результат, и компания решила перенести IT-инфраструктуру в облако Cloud.ru.

Сначала команда Dodo Brands использовала мощности Cloud.ru, чтобы восстановить работу БД. А еще удалось сократить время отладки процессов. После этого развернула копию 1С-инфраструктуры — виртуальные машины с определенным количеством процессоров и оперативной памяти.

При миграции развернули восемь ВМ для приложений, баз данных и веб-сервера. Тестирование длилось три недели, а миграция заняла всего один день. Мы всегда были на связи с менеджером компании и подключали круглосуточную техподдержку.

Что в результате

  • Время выгрузки отчетов из «1С:Бухгалтерии» сократилось в два раза: с 5 до 2,5 часов благодаря миграции в Advanced Elastic Cloud Server.

  • Перенесли в облако рабочую БД прямо во время теста сервисов Cloud.ru. Как итог — работа БД быстро восстановилась, а еще сократилось время на отладку.

  • Обеспечили стабильную работу 1С в облаке. Это позволило Dodo Brands четко планировать бизнес-процессы и не тратить время на устранение неполадок.

Читайте полный кейс, чтобы узнать больше о ходе работы и полученных результатах 🚀

Теги:
Всего голосов 3: ↑2 и ↓1+1
Комментарии2

В SpaceWeb запустили менеджер SSH-ключей

В панели управления SpaceWeb появился новый раздел — «SSH-ключи», единый менеджер для всех ключей, добавленных на аккаунт.

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

Что изменилось

Раздел «SSH-ключи» в меню аккаунта объединяет все ключи без привязки к конкретным VPS.

В новом интерфейсе пользователи:

  • просматривают ключи списком и видят, к каким серверам они подключены;

  • добавляют уже созданные или генерируют новые;

  • подключают и отключают ключи от серверов;

  • удаляют устаревшие записи.

Зачем это нужно

Менеджер SSH-ключей упрощает работу с доступами и снижает риск ошибок.

Пользователи поддерживают актуальный список ключей, быстро выдают или отзывают доступы — всё из одной вкладки.

Раздел «SSH-ключи» уже доступен в панели управления SpaceWeb.

Теги:
Всего голосов 1: ↑1 и ↓0+1
Комментарии0

Открываем набор на бесплатное обучение по IT-направлениям по программе Альфа-Будущее Кампус

Открываем новый набор на обучение по разным IT-направлениям в рамках образовательной программы Альфа-Будущее Кампус

Сроки программ — от 3 месяцев до полугода, за которые вы научитесь создавать современные цифровые продукты под руководством ведущих экспертов Альфа-Банка в разработке, системной аналитике, QA и бизнес-аналитике.

Выбирайте курс, переходите по ссылке, изучайте программу и подавайте заявку. Успейте присоединиться до 27 октября! ❤️

Обучение бесплатно.

А если хотите узнать, есть ли польза от курсов, как проходит обучение (на примере факультета аналитики), и подойдет ли вам онлайн-обучение IT-специальности, читайте нашу статью по ссылке ниже. На примере факультета системной аналитики рассказали, как готовится программа, как проводятся собеседования с людьми и помогло ли ученикам обучение:

Можно ли стать аналитиком, отучившись в онлайн-школе?
С каждым годом в наших командах появляется всё больше перспективных тестировщиков, разработчиков и а...
habr.com
Теги:
Всего голосов 2: ↑2 и ↓0+2
Комментарии0

Привет, Хабр! Мы только что получили из типографии топовую DevOps-новинку этого года — книгу Камиль Фурнье и Иэна Ноуленда «Инжиниринг платформ: техническое и управленческое руководство». Промокод для читателей Хабра (скидка 32%) - fournier.

Переведённая нами статья Камиль Фурнье с описанием круга проблем и задач, которые решает книга - Инжиниринг платформ: не CFEngine единым / Хабр

Аннотация книги

Базовая книга по инжинирингу платформ – новому подходу к управлению программными системами, при работе с которыми требуется обслуживать множество разных аппаратных архитектур и операционных систем. Показано развитие концепции DevOps и объяснено, как  учитывать запросы и возможности пользователей независимо от способа работы с приложением, минимизировать задержки при обработке данных и упрощать масштабирование и поддержку многоплатформенных продуктов. Описан комплексный  подход к управлению продуктом с учетом потребностей клиентов, разработчиков, системных администраторов и предприятия в целом, актуальный на любых программных платформах.

Для специалистов DevOps, системных администраторов, руководителей команд

Теги:
Всего голосов 10: ↑10 и ↓0+15
Комментарии0

Появление контента, созданного искусственным интеллектом (ИИ), в интернете достигло паритета с материалами, написанными настоящими людьми.

В Axios выяснили, ссылаясь на аналитический отчёт фирмы Graphite, занимающейся поисковой оптимизацией, что доля ИИ-статей на короткое время превзошла человеческую генерацию, но сейчас объёмы выровнялись.

Согласно последним данным, представленным Graphite, в общем объеме новых публикаций в сети доля контента, созданного ИИ, составляет 52%, что незначительно превышает 48% материалов, написанных людьми.

Специалисты Graphite провели анализ 65 тысяч веб-страниц, индексированных с 2020 по 2025 годы. Отмечается, что резкий подъем доли материалов, сгенерированных ИИ, начался в 2023 году, что совпало с выходом на рынок чат-бота ChatGPT в конце 2022 года.

Несмотря на общее увеличение объёмов генерации, результаты поисковой системы Google показывают существенный перекос в пользу человеческого труда. Фирма установила, что 86% статей, которые отображаются в результатах поиска Google, созданы людьми. На долю ИИ приходится лишь 14% такого контента. Более того, когда материалы, созданные искусственным интеллектом, все же попадают в выдачу, они, как правило, располагаются на более низких позициях по сравнению с публикациями, написанными людьми.

Теги:
Всего голосов 2: ↑1 и ↓10
Комментарии0