Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр
🔮✨Волшебство, любовь… и шерсть на одежде!
Ищи улики, решай головоломки — и помни: каждый твой шаг меняет ход сюжета.

Мой Любимый Кот

Новеллы, Головоломки, Коты

Играть

Топ прошлой недели

  • AlexKud AlexKud 38 постов
  • SergeyKorsun SergeyKorsun 12 постов
  • SupportHuaport SupportHuaport 5 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня

Javascript

С этим тегом используют

Программирование IT HTML IT юмор Программист Frontend CSS Все
964 поста сначала свежее
sumat777
sumat777
1 год назад
Лига программистов
Серия Простые смешные задачки на сообразительность

Тест: 1+2⁠⁠

Как много можно узнать о человеке, задав ему простой вопрос:

1+2=?

В большинстве случаев ответ будет обычным:

1+2=3

Значит, мы имеем дело с обычным, ничем не примечательным человеком.

Если последует ответ:

1+2=4

Значит, перед нами невнимательный торопыжка, привыкший к стандартному 2+2.

Вот такой вариант:

1+2=12

Скажет нам о том, что перед нами человек, которому ближе строки-слова, чем числа.

Хотя, точнее было бы:

'1'+'2'='12'

Если будет ответ:

1+2=10

Значит, перед нами математик-теоретик, работающий в троичной системе счисления.

Но, чу! А это кто к нам пришел лысый, но с бородкой, прячущий за очками хитрые глаза? Он нам дал такой неожиданный ответ:

1+2=3.0000000000000004

Ага, попался! Вот он-то нам и нужен, специалист по JS (JavaScript, ЯваСкрипт, ДжаваСкрипт) с специфическим чувством юмора.

Строго говоря, ответ неверный, даже в JS все-таки 1+2=3 в большинстве случаев, когда работаем с целыми числами. Но бывают и вот такие вариации:

(0.1+0.2)*10=3.0000000000000004

Такой вот фото факт.

Тест: 1+2 Задача, Javascript, Юмор, IT юмор, Программирование

Свежий фотофакт, только что пробовал.

За это мы и любим JS, за необычное специфическое чувство юмора, которое снесло крыши у многих неустойчивых к стрессам программистов.

Об авторе

Адрес моего творческого некоммерческого сайта: https://wpvi.ru/

#############

### Конец ###

#############

Показать полностью 1
[моё] Задача Javascript Юмор IT юмор Программирование
36
20
theasmoth
1 год назад
Лига Разработчиков Видеоигр

Age of Robots - Игра для хакатона⁠⁠

В конце сентября 2023 пришло письмо о проведении хакатона и я решил в нём поучаствовать. Хакатон немного нестандартный, не два-три дня как обычно проводят, а аж целых 2 недели. Начало было 4 октября, а окончание 18. На момент написания поста результатов еще никаких нет кроме того что игра опубликована.

Age of Robots - Игра для хакатона Gamedev, Idle игры, Idle, HTML, Javascript, Яндекс Игры, Длиннопост

Зарегистрировался и осталось подождать начала, о котором я благополучно забыл. Вечером 7 октября внезапно вспомнил про него, а уже прошло 3 дня с начала, и решил всё таки поучаствовать несмотря ни на что.

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

Идея

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

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

Роботов можно назначать работать в постройки. Постройки приносят ресурся или производят опять же роботов. У роботов есть параметр редкости и каждый созданный робот случайным образом создается из списка доступных типов роботов.

Новые типы роботов можно получить с открытием новых построек, в квестах и с помощью изучения технологий в "Исследовательском центре им. Бэббиджа" :)

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

Что по технологиям?

Несколько раз пробовал пользоваться ECS паттерном и библиотеками в Unity, но всё никак не мог привыкнуть. Давненько смотрел доклады и помнил что это очень удобно для разработки игр. Сейчас был хороший повод использовать этот подход. Немного погуглив библиотеки для JavaScript, а было решено писать на нём, решил остановиться на Ape ECS.

Быстренько скопипастил систему сборки из Immortal Knight и начал изучать Ape ECS. На удивление в этот раз как-то всё было более понятно и стало получаться. Без ошибок не обошлось, пытался использовать паттерн не по назначению, превращяя ECS в EC, но вовремя одумался и всё получилось более-менее неплохо.

Для UI решил оставить React из Immortal Knight, т.к. к Phaser еще не до конца привык, быстрее было сделать на обычных div'ах и CSS.

Age of Robots - Игра для хакатона Gamedev, Idle игры, Idle, HTML, Javascript, Яндекс Игры, Длиннопост

Один из ранних скриншотов интерфейса

Графика

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

А ведь сейчас как раз такой расцвет генеративных моделей изображений. Самым простым способом было взять Stable Diffusion XL 1.0 с Pixel Art XL. Интерфейсом послужил ComfyUI.

В итоге получились вот такие изображения:

1/4

Роботы всех видов и размеров, а так же здания

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

Процесс

Основной игровой процесс был написан примерно за четыре дня. Остальное уже дописывалось по мере необходимости.

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

Ну и куда же без небольших приколов в игре? У всех роботов интересные названия, местами в описаниях зданий или технологий есть отсылки. Например "Лаборатория GPT-9000" или "Шахтёр BTC-25". Можете сами поискать.

Что дальше?

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

Поиграть в Age of Robots можно на Яндекс Играх https://yandex.ru/games/app/262827

Показать полностью 6
[моё] Gamedev Idle игры Idle HTML Javascript Яндекс Игры Длиннопост
1
1
NutrientElement
NutrientElement
1 год назад
Лига программистов
Серия Программирование

Что же такое замыкание в Javascript⁠⁠

Замыкание (closure) в JavaScript - это функция, которая имеет доступ к своему собственному лексическому окружению, а также к окружениям внешних функций, в которых она была определена.

Что же такое замыкание в Javascript Программирование, IT, Программист, Javascript, Разработка, Web-программирование

Это позволяет функции сохранять значения переменных и параметров из внешнего контекста, даже после того, как внешняя функция завершила свое выполнение.

Замыкание создается, когда внутренняя функция ссылается на переменные из внешней функции. Например:

function outerFunction() {

var outerVariable = 10;

function innerFunction() {

console.log(outerVariable);

}

return innerFunction;

}

var closure = outerFunction();

closure(); // Выведет 10

В данном примере функция innerFunction является замыканием, так как она ссылается на переменную outerVariable из внешней функции outerFunction. Даже после того, как outerFunction завершила свое выполнение и переменная outerVariable вышла из области видимости, замыкание все еще имеет доступ к этой переменной.

Замыкания часто используются в JavaScript для создания приватных переменных и методов. Они позволяют скрыть внутренние детали реализации и предоставить только необходимый интерфейс для работы с объектом.

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

Интересные факты и фичи языков программирования у нас в канале, заходи :)

Показать полностью
[моё] Программирование IT Программист Javascript Разработка Web-программирование
4
NutrientElement
NutrientElement
1 год назад
Лига программистов
Серия Программирование

Дружба между C# и JavaScript⁠⁠

C# и JavaScript - это два разных языка программирования, которые используются для разных целей. C# - это язык, который работает на платформе .NET и позволяет создавать приложения для Windows, веб, мобильных устройств и других платформ. JavaScript - это язык, который работает в браузере и позволяет добавлять интерактивность и динамику на веб-страницы.

Дружба между C# и JavaScript Программирование, Программист, IT, Javascript

Чтобы подружить C# и JavaScript, есть несколько способов:

  • Использовать ASP.NET Core - это фреймворк для создания веб-приложений на C#, который поддерживает работу с JavaScript и другими фронтенд-технологиями. С помощью ASP.NET Core можно создавать RESTful API на C#, которые можно вызывать из JavaScript с помощью AJAX или Fetch. Также можно использовать Blazor - это технология, которая позволяет писать фронтенд-код на C# и компилировать его в WebAssembly, который работает в браузере.

  • Использовать Node.js - это среда выполнения для JavaScript, которая позволяет запускать JS-код на сервере. С помощью Node.js можно создавать веб-приложения на JavaScript, которые могут общаться с C#-приложениями через HTTP, WebSocket или другие протоколы. Также можно использовать Edge.js - это библиотека, которая позволяет вызывать C#-код из JavaScript и наоборот.

  • Использовать Electron - это фреймворк для создания кросс-платформенных настольных приложений на JavaScript, HTML и CSS. С помощью Electron можно создавать приложения, которые используют Node.js на бэкенде и Chromium на фронтенде. Также можно интегрировать C#-код в Electron-приложения с помощью Edge.js или других способов.

Интересные факты и фичи языков программирования у нас в канале, заходи :)

Показать полностью
[моё] Программирование Программист IT Javascript
12
16
cherkalexander
cherkalexander
1 год назад
Лига программистов

Array prototype sort⁠⁠

Как будет отсортирован следующий массив [-1, 0, 1, 2, -1, -4, -2, -3, 3, 0, 4].sort()?

Array prototype sort Кросспостинг, Pikabu Publish Bot, Javascript, Frontend, Текст, Алгоритм, Leetcode


🥱 Предыстория

На выходных я решал литкод, и в задаче 3sum было необходимо отсортировать массив по возрастанию, перед тем как перейти к основной реализации алгоритма.

Я написал решение, подебажил на бумаге — всё работает, отправляю код на проверку — не работает 🤷‍♂️. Перепроверяю всё глазами — ну должно же работать!

Сдаюсь и начинаю дебажить в VS Code и вижу, что сортировка массива работает не так как я ожидал.

ℹ️ Объяснение

Если перейти на MDN и прочитать документацию Array.prototype.sort(), то станет всё понятно.

Метод sort() в JavaScript преобразует элементы в строки и затем сравнивает их последовательности значений кодов UTF-16. Это означает, что при сортировке числа рассматриваются как строки.

Таким образом, числа в данном случае сортируются на основе их строкового представления. Например, '-10' будет идти перед '-2', потому что строка '10' идет перед строкой '2' в лексикографическом порядке.

Чтобы выполнить числовую сортировку массива, нужно предоставить функцию сравнения методу sort(), как показано здесь:

[-1, 0, 1, 2, -1, -4, -2, -3, 3, 0, 4].sort((a, b) => a - b);


Это даст вам [-4, -3, -2, -1, -1, 0, 0, 1, 2, 3, 4] — числовую сортировку.

https://t.me/cherkashindev/136

Показать полностью
[моё] Кросспостинг Pikabu Publish Bot Javascript Frontend Текст Алгоритм Leetcode
15
3
cherkalexander
cherkalexander
1 год назад
Лига программистов

Каррирование и частичное применение⁠⁠

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

И частичное применение, и каррирование, реализуются как функции, принимающие в качестве параметра другую функцию.

Каррирование и частичное применение Кросспостинг, Pikabu Publish Bot, Frontend, Javascript, Текст



1️⃣ Частичное применение — функция partialApply, принимающая первым параметром функцию — fn, а остальные параметры — часть параметров функции fn. Функция partialApply возвращает функцию, которая в качестве параметров принимает недостающие аргументы функции fn.

2️⃣ Каррирование — функция curry, которая принимает единственный параметр — функцию fn, и возвращает каррированную функцию fn. Можно сказать, что каррированная функция fn — функция аккумулятор, которая будет накапливать переданные аргументы до тех пор, пока не будет передано достаточно параметров для вызова исходной функции. Параметры можно передавать в любом количестве.

Подробнее

- Карринг vs Частичное применение функции — C#
- Каррирование функций в JavaScript
- Реализация функции каррирования
- Function: length

https://t.me/cherkashindev/132

Показать полностью 1
[моё] Кросспостинг Pikabu Publish Bot Frontend Javascript Текст
3
12
WoWSab
WoWSab
1 год назад
Лига программистов

Гайд - импортируем CKEditor 5 в Laravel 10 как модуль node.js⁠⁠

Всем привет!

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

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

Ее мы сегодня и будем импортировать в наш проект на Laravel 10. Скриншотик (и пасхалочка, кто знает тот поймет) внизу.

Как обычно есть 2 пути - простой и сложный.

Простой - это просто прописать в шаблоне

<script src="https://cdn.ckeditor.com/ckeditor5/40.0.0/classic/ckeditor.js"></script>

И активировать его на textarea через ClassicEditor.create().

Но есть нюанс.... что если авторы решат уйти из РФ и ограничит доступ? Или же РКН решит что "ты не пройдешь!" и ... ты не пройдешь. Нужно любить всех своих пользователей, а не заставлять их расчехлять VPN потому что на сайте не работает редактор.

Да и мы ведь серьезный проект пишем! Нам нужно свое! Да еще и желательно с кастомным билдом под наши задачи!

По этому мы пойдем по второму пути - сложному, который делится еще на два.

Назовем их "следовать инструкциям" и "догадаться самим".

Но перед тем как начать - нам нужно собрать кастомный билд с нужными нами модулями и настройками. Что можно спокойно сделать на сайте. Я использовал билд на базе ClassicEditor, выбрал нужные мне модули в том числе и модуль watchdog на будущее (сейчас активировать его в коде я его конечно-же не буду). В общем, качаем билд и распаковываем его в "Новая папка (3)" на рабочке. Он нам понадобится, но несколько позже.

Гайд - импортируем CKEditor 5 в Laravel 10 как модуль node.js Гайд, Инструкция, Программирование, PHP, Javascript, Nodejs, Laravel, Длиннопост, Разработка, Веб-разработка, IT

Распакованный архив с кастомным билдом

Следуем инструкциям.

По инструкции на сайте мы берем скачанный билд, копируем его в папку с проектом в директорию public\assets\ckeditor5, импортируем .js файл в blade шаблон и так-же активируем его через EditorWatchdog() или CreateEditor(). Легко и просто, и в принципе все гайды в интернете по интеграции в Laravel пишут нам что так делать правильно.

Но нас то не обманешь! У нас серьезный проект! И ведь действительно, вдруг нам потом понадобится модуль, который мы не добавили в наш билд? Пересобирать заново? Да ну его! По этому мы пойдем своим путем! Поехали!

Догадываемся сами

К нашему счастью в Laravel встроен замечательнейший инструмент под названием Node.js, который мы и будем использовать. И не только его.

Установка

Идем консолькой в папку с нашим проектом и запускаем (не забудь включить vpn)

npm install --save @ckeditor/ckeditor5-build-classic

Гайд - импортируем CKEditor 5 в Laravel 10 как модуль node.js Гайд, Инструкция, Программирование, PHP, Javascript, Nodejs, Laravel, Длиннопост, Разработка, Веб-разработка, IT

Установка

Сразу нам устанавливается множество зависимостей, однако наш любимый Laravel 10 этот модуль сразу не увидит. Для того чтобы это исправить нам нужно сделать еще кое-что. Поехали интегрировать.

Интеграция

Нам нужно чтобы наш Laravel увидел CKEditor, да собирал его под наши нужды "на лету". Для этого мы будем использовать vite, благо он идет в составе Laravel. У авторов CKEditor для него есть отдельный модуль с названием @ckeditor/vite-plugin-ckeditor5, его и будем использовать. Также нам понадобится модуль @ckeditor/ckeditor5-theme-lark.

Снова консоль, пишем:

npm install --save @ckeditor/vite-plugin-ckeditor5

npm install --save @ckeditor/ckeditor5-theme-lark

Пока ждем установку - наливаем кофе.

Далее ищем в корне нашего проекта файл vite.config.js и вносим в него следующие строки как показано на скриншоте (слева - старый файл, справа - внесенные изменения)

import { createRequire } from 'node:module';
const require = createRequire( import.meta.url );

import ckeditor5 from '@ckeditor/vite-plugin-ckeditor5';

ckeditor5( { theme: require.resolve( '@ckeditor/ckeditor5-theme-lark' ) } ),

Гайд - импортируем CKEditor 5 в Laravel 10 как модуль node.js Гайд, Инструкция, Программирование, PHP, Javascript, Nodejs, Laravel, Длиннопост, Разработка, Веб-разработка, IT

vite.config.js

Конфигурируем

Помните ту конфигурацию, что мы делали на сайте CKE? Она то нам сейчас и понадобится.

Открываем Новую папку (3) и в подпапке src находим файл ckeditor.ts. Это файл с настройками нашего билда. Копируем его в папку с проектом, в директорию resources/js.
Также из папки samples копируем style.css в resources/css.
И дополнительно создаем файлик editor.js - его мы и будем встраивать в наш шаблон.

Содержимое editor.js

import ClassicEditor from './ckeditor';

ClassicEditor.Editor
// Note that you do not have to specify the plugin and toolbar configuration — using defaults from the build.
.create( document.querySelector( '#editor' ), {
language: 'ru',
removePlugins: [
'MediaEmbedToolbar'
]
})
.then( editor => {
console.log( 'Editor was initialized', editor );
} )
.catch( error => {
console.error( error.stack );
} );

Для наблюдательных - я специально не использовал watchdog здесь. Импортировать его я планирую потом.

Дальше нам нужно загрузить недостающие модули.

Открываем редактором ckeditor.ts и видим вверху множество импортов.

Гайд - импортируем CKEditor 5 в Laravel 10 как модуль node.js Гайд, Инструкция, Программирование, PHP, Javascript, Nodejs, Laravel, Длиннопост, Разработка, Веб-разработка, IT

Открываем папку "node_modules/@ckeditor" внутри проекта и ищем недостающие модули. Если такие есть - устанавливаем их через npm install --save %имя_модуля%.

В дальнейшем есть шанс получить следующую ошибку от TailWindCSS (при запуске npm run dev)

[vite:css] Nested CSS was detected, but CSS nesting has not been configured correctly.Please enable a CSS nesting plugin *before* Tailwind in your configuration.

Она вызывается из-за того, что мы используем кастомный css для ckeditor

Чтобы этого не происходило, нам необходимо в файле postcss.config.js в корне нашего проекта добавить следующие строки:

'postcss-import': {},
'tailwindcss/nesting': {},

как на скриншоте

Гайд - импортируем CKEditor 5 в Laravel 10 как модуль node.js Гайд, Инструкция, Программирование, PHP, Javascript, Nodejs, Laravel, Длиннопост, Разработка, Веб-разработка, IT

postcss.config.js

Почти все

Нам осталось только в нашем шаблоне между тегов <head> добавить

@Vite(['resources/js/editor.js', 'resources/css/editor.css'])

И теперь любой <div> или <textarea> с указанием id="editor" будет вызван с редактором CKEditor5.

Запускаем проект через npm run dev и радуемся полученному результату!

Результат

Гайд - импортируем CKEditor 5 в Laravel 10 как модуль node.js Гайд, Инструкция, Программирование, PHP, Javascript, Nodejs, Laravel, Длиннопост, Разработка, Веб-разработка, IT

Результат

А Вы заметили пасхалочку на скриншоте?

Все что вам осталось - это настроить дизайн редактора в css файле.

Ну и как-же без ложки дегтя - почему-то конфигурация "language: ru" не срабатывает и редактор остается английским. Возможно не хватает какого-то модуля или же что-то необходимо донастроить. Пока еще не разобрался, но в целом на данном этапе разработки это не сильно критично. Если у Вас есть идеи - welcome!

Update: С языком разобрался. Действительно его необходимо было имортировать. Для этого в ckeditor.ts необходимо вставить строку после импорта { ClassicEditor }

import '@ckeditor/ckeditor5-build-classic/build/translations/ru';

Update2: Также нашел проблему при вставке видео с внешнего источника, например Youtube. В редакторе оно вставляется, а вот в пост не переносится. Лечится доп конфигом там-же в ckeditor.ts в секцию defaultConfig

mediaEmbed: {
previewsInData: true
}

Гайд - импортируем CKEditor 5 в Laravel 10 как модуль node.js Гайд, Инструкция, Программирование, PHP, Javascript, Nodejs, Laravel, Длиннопост, Разработка, Веб-разработка, IT

Исправленная локализация

Надеюсь что данный гайд поможет Вам в проектах.

Если вы хотите немного потрындеть, или быть может знаете Laravel или например умеете верстать, ну или просто у вас есть желание как-нибудь помочь с разработкой проекта, милости прошу в мою потрынделку.

В кратце - да, старый добрый, с блекджеком и шлюпками.

Всем спасибо!

Показать полностью 7
[моё] Гайд Инструкция Программирование PHP Javascript Nodejs Laravel Длиннопост Разработка Веб-разработка IT
3
Партнёрский материал Реклама
specials
specials

Считаете себя киноманом 80 LVL?⁠⁠

Залетайте проверить память и сообразительность → Будет интересно

Киногерои Тест Текст
cherkalexander
cherkalexander
1 год назад

Проваливание промисов⁠⁠

Когда вы передаете в then() что-то отличное от функции (например, промис), это интерпретируется как then(null) и в следующий по цепочке промис «проваливается» результат предыдущего.

Подробнее о промисах в статье "У нас проблемы с промисами".

#interview #frontend #javascript

https://t.me/cherkashindev/131

Проваливание промисов Кросспостинг, Pikabu Publish Bot, Interview, Frontend, Javascript, Telegram (ссылка)
Показать полностью 1
Кросспостинг Pikabu Publish Bot Interview Frontend Javascript Telegram (ссылка)
0
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии