Разработчик под ником jslegend представил онлайн версию игры Duck Hunt в HTML5, написанную с помощью библиотеки JavaScript KAPLAY - Duck Hunter.
Игра доступна в браузерах на ПК, управление мышкой.

Делаем веб лучше
Разработчик под ником jslegend представил онлайн версию игры Duck Hunt в HTML5, написанную с помощью библиотеки JavaScript KAPLAY - Duck Hunter.
Игра доступна в браузерах на ПК, управление мышкой.
Нам нужно больше capacity: как растет вместимость в слайсах на Go
Чтобы выяснить, во сколько раз Go увеличивает внутренний массив элементов в слайсах, проведем небольшой тест. Добавим один элемент к уже заполненным слайсам:
На графике видно, что в районе 200 элементов увеличенный слайс вмещает уже 400 элементов, а в районе 800 — 1200, то есть вместимость выросла сначала в два раза, потом — в полтора.
В коде рантайма можно найти простую формулу: если в слайсе capacity элементов было меньше 256, то вместимость увеличится в два раза. Если больше 256, то на четверть. Таким образом мы пытаемся экономить память.
Существует забавная константа для вычисления вместимости: три четвертых от 256. Разработчики на Go посчитали, что так происходит более плавный переход от фактора 2x к фактору 1.25
Почему на графике образовались «ступеньки» вместо привычной кривой и что еще нужно знать о слайсах Go-разработчику — читайте в статье →
Совет по Joomla: метод debug() для отладки лейаутов
В Joomla есть понятие layout. Это кусочек вёрстки, который можно многажды использовать в любом месте сайта: как в панели администратора, так и во фронтенде. Можно рассматривать лейауты как оторванные от контекста элементы дизайна. Находятся они в папке layouts в корне сайта. Также, в случае с модулями они могут находиться в папке tmpl модуля. А в случае с плагинами - в tmpl плагина.
Их можно переопределять в шаблонах, в чём и заключается одна из главных фишек Joomla. Лейауты чаще всего рендерятся с помощью классов LayoutHelper
или напрямую FileLayout
. Писал о них ранее тут и тут.
А вот как увидеть какой именно файл переопределения используется? Сколько их вообще есть и по каким путям идёт поиск макетов? Для этого есть метод debug()
(и у LayoutHelper и у FileLayout).
<?php
/**
* Method to render a layout with debug info
*
* @param string $layoutFile Dot separated путь к файлу относитеьлно basePath
* @param mixed $displayData Объект с данными для рендера
* @param string $basePath Base path, где будет поиск файлов лейаутов
* @param mixed $options Дополнительные опции для FileLayout
*
* @return string
*
* @since 3.5
*/
public static function debug($layoutFile, $displayData = null, $basePath = '', $options = null)
{
// Так проще показать параметры метода.
}
То есть мы в можем проверить следующим образом:
<?php
/**
* Получаем параметры баннера
*/
$wt_custom_menu_item_banner = $menu->getParams()->get('wt_custom_menu_item_banner');
echo \Joomla\CMS\Layout\LayoutHelper::debug(
($wt_custom_menu_item_banner?->pluginlayout ?? 'default'),
['wt_custom_menu_item_banner' => $wt_custom_menu_item_banner],
JPATH_SITE.'/plugins/system/wt_custom_menu_item_banner/tmpl'
);
И увидим результат как на скриншоте в начале поста.
Как вы знаете, китайская LLM deepseek-R1 работает не хуже chatGPT-o1, но стоит в 20 раз дешевле. А знаете ли вы, что сама модель вообще бесплатная, её можно скачать себе и запустить на своём железе?
Мне стало интересно, как это делать, можно ли как-то запустить прямо на макбуке, и оказалось, что это делается буквально в два клика (конечно, полная модель на ноут не влезет, но дистиллированная - вполне).
Возможно, все уже это умеют, но расскажу для тех, кто, как и я, был в танке, так что держите инструкцию.
Для этого надо установить ollama, например так:
brew install ollama
и запустить
ollama serve
Запустить можно в отдельном окошке, чтобы смотреть логи, или в бекграунд убрать, пофиг. В общем, это некий сервис.
Дальше скачать и запустить модель. Это делается тупо одной командой.
ollama run deepseek-r1:8b
8b - это количество параметров (8 миллиардов). Другие варианты:
1.5b
7b
8b
14b
32b
70b
671b
Но понятно, что 671b на макбук не влезет, понадобилось бы больше 400 гигов видеопамяти. Зато 1.5b можно и на мобилу запихнуть.
При запуске этой команды скачивается модель (примерно 5 гигов), и собственно вы уже можете общаться с ней прямо в олламе.
Но это не очень юзер-френдли, поэтому дополнительно можно запусть web-интерфейс, например в докере одной командой
docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main
После чего на http://localhost:3000/ видна веб-морда, похожая на chatgpt.
Прикол китайской модели еще в том, что там показан процесс думания. Его можно посмотреть прямо в этом веб-интерфейсе.
Понятно, что это скорее побаловаться - на ноуте влезает только дистиллированная модель и то нещадно тормозит (макбук M1 pro). Для полноценной работы нужно нормальное железо или облако.
По-моему, это очень круто: если вложиться в железо, можно очень быстро и просто поднять у себя самый топовый чат и не посылать больше свои секреты ни в OpenAI, ни в Китай.
Приглашаю вас подписаться на мой канал в telegram
Смотрите второй выпуск подкаста с Димой Бабиным, автором канала SIBERIA CAN CODE 🔥
В нем Дима поделился с командой Cloud.ru своим опытом работы в IТ и экспериментом с резюме на GitHub.
Также в выпуске:
как использование нейросетей может улучшить код и почему оно не может заменить ревью;
проблемы и перспективы JavaScript, Typescript и React;
что ждет frontend-разработку и PWA;
почему атмосфера в компании играет ключевую роль в удержании сотрудников.
Что написать на Go, если «вывод суммы на экран» вы уже переросли
На этот вопрос нашел ответ Игорь Горбунов. Он разрабатывает платформу базовой станции в YADRO и второй год изучает Go. Когда стандартные задачи ему надоели, он придумал челлендж: построить приложение, похожее на утилиту ping в UNIX-подобных системах.
Первым делом разработчик набросал список требования к приложению, чтобы опираться на него в процессе работы:
Возможность запросов Echo-Request по протоколам ICMP и ICMPv6 и поддержка IPv4 и IPv6 со стороны ping
.
Возможность указания целевого узла в виде непосредственно адреса либо в виде имени, что требует поддержки разрешения имен.
Возможность менять из командной строки размер отправляемых запросов и их количество.
Подсчет и вывод в консоль статистики отправленных запросов, полученных и неполученных ответов, ошибок, минимального, среднего, максимального времени круговой задержки (rtt), а также стандартного отклонения rtt.
Получилось ли у Игоря реализовать настоящий ping и какую проблему ему так и не удалось решить — читайте в статье.
E-mail шаблоны Joomla 5: добавление и просмотр своих переменных
В Joomla 5 появились настраиваемые email-шаблоны, как системные, так и сторонних компонентов. Их нельзя (пока что) добавить самостоятельно, они добавляются расширениями при установке. Но их можно отредактировать в Система - Шаблоны - Шаблоны писем. В настройках шаблонов писем (кнопка настроек компонента в верхнем правом углу) мы выбираем формат писем текст или HTML. Тогда становятся доступны настройки макетов шаблонов писем Joomla. Эти глобальные параметры можно переопределить в каждом конкретном email-шаблоне. Таким образом для каждого из email-шаблонов можно указать свою вёрстку и настройки логотипа.
Это, конечно, требует отдельной подробной статьи...
Для разработчиков: как добавить свои переменные для e-mail шаблонов Joomla?
Полезны окажутся 2 триггера для плагинов: onMailBeforeTagsRendering
и onMailBeforeRendering
.
onMailBeforeRendering
- триггер, который позволяет добавлять свои шорт-коды для строковой замены в плагине. Отдать туда надо массив вида [ variable_name => variable_value ]
. Из админки свои переменные нужно добавлять уже с фигурными скобками: {variable_name}
заменится на variable_value
. Аргументом $event
плагина является экземпляр класса BeforeRenderingMailTemplateEvent
, в котором есть кроме прочих 2 метода: getTemplate()
(получение объекта мейлера, куда можно добавлять свои данные) и getTemplateId()
(получение id шаблона письма вида com_users.registration.admin.new_notification
), по которому мы определяем нужный ли это для нас email-шаблон или нет. Аналогично контексту в контент-плагинах.
Также полезное свойство класса для передачи данных из плагина в лейаут письма для рендера - $layoutTemplateData
. Это ассоциативный массив.
// Получаем текущий мейлер
$mailTemplate = $event->getTemplate();
$data = [
'variable_name' => 'variable_value'
];
// с Joomla 4 для всех типов писем. 2-й аргумент - plain - текстовый формат письма
$mailTemplate->addTemplateData($data, false);
// с Joomla 5.2 - для HTML-писем
$mailTemplate->addLayoutTemplateData($data);
// пример из ядра Joomla
// Add additional data to the layout template
$this->addLayoutTemplateData([
'siteName' => $app->get('sitename'),
'lang' => substr($this->language, 0, 2),
]);
onMailBeforeTagsRendering
- триггер, который добавляет ваши переменные в список доступных переменных для замены в окне редактирования email шаблона Joomla. Отдать туда нужно массив с переменными, но без их значений.
Быль.
Во времена древние приходит к нам "по знакомству" один важный клиент и просит помочь - заказал он типа сайт, а сайт получился какой-то плохой. Вот оценить, почему? Ведь в офисе у вебстудии всё было очень хорошо, а тут деньги заплатили, на хостинг выложили - а там г... какое-то.
Идем смотреть. Сайт - куча красивых картинок, десяток страниц, на каком-то "PHP хостинге" - и тормозит, потому что картинки - на весь экран, в формате BMP.
А времена - когда аналоговый модем 57600 кбит/с - роскошь. И вот тянуть эти мегабайтные BMP по модему...
Обьяснили, "мягко говоря, неоптимально сделан сайт", вроде понял.
Спрашиваем: а как так получилось, вы когда смотрели - что видели?
Да, говорит, в вебстудии на компьютере запустили, всё очень красиво, быстро, чётко было...
Зачем люди ссорится будут, пошли по знакомству проблему утрясать.
А там действительно, "вебстудия" в одно лицо, стоит навороченный комп, сидит молодой человек дизайнерской наружности и ваяет красивое. Фотошоп, Корел, вот это всё.
Прикручивает к какой-то CMS, всё - картинками, большими, красивыми, и рамки вокруг текста картинками (кто помнит как это делалось до CSS border).
И вот прямо как в Windows сохраняет - в BMP, так и прикручивает. БезУчетаРегистра.TXT имен файлов.
- У меня - говорит - всё работает! Вот, видите, быстро и красиво!
- а у клиента на сайте?
- а это у него хостинг там кривой, на дурацком юниксе, это не моя проблема!
- но почему картинки в BMP??
- а что, работает же? В PSD не работает, в jpg мылится.
- про то, что File.TXT и file.txt - разные файлы, знаешь?
- у меня - одно и то же, а у него там хостинг кривой!
В общем, "я художник, я так вижу!". Человек освоил Фотошоп, Ворд, и стал вебмастером.
Еле убедили, что в его же интересах изучить еще jpeg и доработать сайт, а то клиент нервный, еще из этих, малиновых пиджаков, может обидеться и предьявить за развод.
Ну вроде как доработал потом.
А проблема тут в том, что позже не раз попадалось подобное: разработчик чего-либо разрабатывает это на топовой машине, тестирует на топовом сервере, который стоит тут же, за спиной, подключен гигабитным кабелем, показывает это творение заказчику - стороннему или своему же руководству, получает одобрение и продукт идет в работу.
Но клиенты подключаются со старого мобильника или древнего ноутбука, и плюются ядом, когда нужная им программа или сайт вот точно так же медленно и мучительно что-то грузит, грузит, грузит...
И точно так же: "у нас всё работает быстро, это у них устаревшее железо, кривой софт, глючный телефон, руки из задницы и голова тупая!"
Но - "нам нужны новые компьютеры, помощнее!". Может, наоборот, не нужны?
(это все к вопросу о пуристах, требующих быстрые легковесные программы и сайты на HTML)
Установка "вечной" темы на хабре
Весь прошлый год меня жутко бесила одна проблема: у меня регулярно слетала тема на хабре со "светлой" на "системную". В последнее время я понял, что мне не комфортно читать текст в темных темах, и я стал возвращаться на светлые. При этом темная тема в самой системе мне все еще нравится. Таким образом, тема хабра периодически изменялась со светлой на тёмную.
Тема слетала достаточно регулярно, чтобы бесить, но недостаточно часто, чтобы понять систему, по которой это происходит и как-то это отдебажить. Проверял настройки профиля, может быть это какая-то общая настройка, которая привязана не к браузеру, а самому профилю, но ничего не нашел.
Сперва я подумал: "Наверняка это защита от отслеживания в Firefox. Попробую добавить хабр в исключения". Не сработало. Но все равно казалось что проблема кроется где-то рядом. У меня куча всяких расширений, блокировщиков и прочей ерунды. Что-то из этого могло удалять какую-нибудь сессию, куку или что-то еще, о чем я и не слышал. Решил проверить на хроме и edge: на одном тоже куча расширений, на втором — ни одного. Проблема оказалась и там.
Подумал: "Когда тёмная тема только появилась, там был анонс о ней в духе беты, мол кликни и получи эксклюзивную темную тему, которой еще нет на хабре". Я тогда кликнул, не понравилось, вернулся на светлую. Может быть дело в этом, и я привязал свой акк на веки-вечные к темной теме?
Написал в саппорт хабра. Мне сказали, что проблема какая-то непонятная и скорее всего на моей стороне, т.к. больше к ним с такими трудностями никто не обращался.
После этого у меня уже опустились руки, думал ну придется жить так. Ничего. Люди могут счастливо жить, лишившись конечностей или органов чувств, в сравнении с этим нет ничего страшного, если несколько раз в месяц я буду руками менять тему на светлую.
Шли дни, менялись сезоны, пока в какой-то момент мне не потребовалось ковыряться в куках браузера по не связанной с данной проблемой теме. Одновременно с этим опять слетела тема и во мне снова что-то дернулось, потому что ну бесит же. Решил спросить у GPT без всякой надежды на решение очень уж специфичной проблемы. Он не сказал ничего нового в общем-то, но предложил проверить в браузере срок действия кук на хабре и мол если дело в этом, то тут уже ничего не сделать, срок валидности кук определяет сам сайт. Средствами фф проверить срок действия кук у меня не вышло, но я ведь как раз ставил расширение "Cookie-Editor", позволяющее читать и редактировать значения кук. Открыл я его на хабре и нашел куку "theme", на вкладке "advanced" которой была вожделенная дата истечения куки, совпадающая тем самым днем.
Я сменил тему еще раз, и посмотрел как изменилась кука — число перепрыгнуло на неделю вперед. Т.е. срок действия настройки темы на хабре: 1 неделя. После этого тема вновь устанавливается на "системную", а в системе у меня стоит темная тема. Я решил провести эксперимент, и отредактировал эту дату, поменяв 2024 на 2025 (не меняя число и день недели, очевидно день недели будет неверным, но главное, что дата заведомо далеко впереди). Идёт уже третья неделя, тема не слетает, а я счастлив. Поставил expiration date на 3000-ый год.
Не знаю, есть ли еще кто с такой проблемой, если есть — надеюсь им поможет этот пост.
Но вообще, возможно для этой куки хабру стоит отмерить какой-то больший срок жизни.
UPD. Ув. @Mirnin подсказал в комментах где в Firefox можно найти срок годности куки:
Инструменты разработчика → Хранилище → Куки. Там же его можно и отредактировать, без всяких расширений.
🌐 HTTP-метод QUERY: новый метод для поисковых запросов
В мире HTTP давно существует проблема с передачей сложных поисковых запросов. Когда разработчику нужно передать большой набор параметров для поиска или фильтрации, у него есть два не самых удачных варианта.
Можно использовать GET и передавать всё в URL:
GET /feed?q=foo&limit=10&sort=-published&filters[]=status:active&filters[]=type:post
Но URL дефакто имеет ограничения по длине, а кодирование сложных параметров становится громоздким.
Второй вариант — использовать POST и передавать параметры в теле запроса. Однако POST не предназначен для таких операций: он не кэшируется и не является идемпотентным, что усложняет работу с CDN и повторную отправку запросов.
Именно поэтому появился новый метод QUERY. Он позволяет отправлять поисковые параметры в теле запроса:
QUERY /feed
Content-Type: application/json
{
"q": "foo",
"limit": 10,
"sort": "-published",
"filters": ["status:active", "type:post"]
}
При этом QUERY сохраняет все преимущества GET: он безопасный, идемпотентный и кэшируемый. Cочетает поддержку тела запроса с возможностью кэширования.
Метод официально получил статус PROPOSED STANDARD, что означает скорое появление поддержки в браузерах и веб-фреймворках.
Если вам интересны подобные посты, подписывайтесь на tg-канал Cross Join
Представлен проект капчи DOOM CAPTCHA, где нужно убить минимум трёх монстров на карте secret level E1M9 в режиме Nightmare. Стрейфиться нельзя, управление - стрелки вперёд. назад, вправо, влево, стрельба - пробел.
В сети появился онлайн-скринсейвер Screensaver Chess, который решает шахматные головоломки.
Обновления января 2025 года в Amvera Cloud
Многие ждали, писали, но нет, мы цены повышать не будем!)
Зато сразу после 1 января праздников, ориентировочно 13—17 января
Выкатим новый фронт. Надеемся, все станет понятнее.
Появятся преднастроенные RabbitMQ и Memcached.
Расширенные алерты и пробы. Можно будет настроить алерты на падение проекта, превышение заданного потребления ОЗУ и CPU и появления определенных ошибок в логах. Дополнительно появятся liveness и readiness пробы.
Мы вводим SLA. Осенью 2024 были инциденты с падением сервисов. Мы готовы нести ответственность за безотказность работы сервиса. Начиная с января 2025, если наша надежность окажется ниже 99,5% в месяц, можно будет претендовать на компенсации с нашей стороны.
SLA действует с 1 января 2025
Amvera Cloud — это облако для простого деплоя приложений через git push. Встроенный CI/CD, бэкапы и мониторинг позволяют развернуть проект тремя командами в IDE и не думать о настойке инфраструктуры. Amvera проще, чем использование VPS или Kubernetes-кластера.
Не иди в стартап, не совершай ошибки… или совершай?
Всем привет!
Меня зовут Данил, и я работаю старшим специалистом веб-разработки в компании ООО «Увеон» (Группа компаний Астра). Сегодня я бы хотел поговорить о своем опыте вхождения в айти через стартапы.
В моем окружении разработчики делятся на два типа: те, кто работают в стартапах, и те, кто трудятся в корпорациях. Каждый может привести весомые аргументы за свою позицию. Я успел побывать в обоих легионах и готов поделиться своей историей работы в стартапе. Буду рад вашим мнениям и комментариям.
Спустя год после окончания университета и работы на Ижевском Радиозаводе python-программистом, я понял, что уперся в потолок как технический, так и зарплатный, хотелось изменений. Плюс впереди планировался переезд в Питер, нужно было искать удаленный формат, что завод никак не мог предложить.
После пары недель поиска основатель стартапа, о котором пойдет речь, нашел меня сам, провел техническое собеседование, которое тогда показалось мне довольно легким. Сам проект представлял собой соцсеть для финансистов: пользователи могли доверять свои средства опытным игрокам валютного рынка, чьи операции затем автоматически копировались. Идея заключалась в том, чтобы все участники оказывались "в плюсе". Моей задачей была разработка модуля копирования операций MT5.
У проекта был заказчик, который оплатил бюджет целиком, а не по спринтам, что вскоре создало проблемы. Через некоторое время начались сложности. Руководство заявило, что моя зарплата завышена и её нужно сократить на 30%. Не обошлось без сравнений с другими сотрудниками, которые якобы "работают лучше". Атмосфера в команде стала напряжённой.
Далее выяснилось, что все работники подписали краткосрочные партнерские договоры на три месяца (испытательный срок) и получали деньги через самозанятость. Контракты не продлевались, а трудовые договоры считались "невыгодными". Через несколько месяцев поступило предупреждение: денег не хватает, возможны задержки оплаты. Однако уверяли, что ситуация наладится. Увы, я был слишком наивен и начал искать новое место лишь спустя два месяца после первых признаков кризиса.
Хочу отметить, что не все стартапы такие. Многие работают честно, создают интересные проекты и открыты перед сотрудниками. Однако мой опыт заставляет быть осторожным.
Опираясь на свой опыт и наблюдения моих коллег, я бы хотел выделить следующие плюсы работы в стартапе:
Подработка. Стартап может быть отличным вариантом, если вы ищете дополнительный доход, особенно при формате 0.5 ставки или работы через ИП.
Рост. Участие в стартапе ускоряет профессиональное развитие. Из-за ограниченных ресурсов вы осваиваете новые навыки и роли.
Значимость. В стартапе каждый сотрудник играет ключевую роль, чего не всегда можно сказать о корпорациях.
Доля в компании. Возможность получить опцион или бонусы за вклад в развитие продукта.
Свобода. Меньше корпоративных ограничений, например, связанных с географией работы.
НО есть и минусы:
Отсутствие корпоративных бонусов. Обычно нет ДМС, оплачиваемого оборудования или других стандартных "плюшек".
Риски с оплатой труда. Возможны задержки, сокращения или даже отсутствие зарплаты.
Риск банкротства. Стартап может закрыться в любой момент, а сотрудники останутся без компенсаций.
Сложности с менеджментом. Часто в стартапах не хватает структурированного управления, что приводит к хаосу.
Большая нагрузка. Вам придётся совмещать несколько ролей, что ведёт к выгоранию.
Как вам мои выводы? Пишите свое мнение и делитесь своим опытом в комментариях.
Объектно-ориентированное программирование и его реализация в JavaScript
Именно так звучит тема нового выпуска нашего открытого курса по JavaScript. В 12 серии вместе с веб-разработчиком Василием Новиковым разберёмся:
что такое объектно-ориентированное программирование (ООП) и его функции;
как реализовывать ООП на конкретном примере;
как применять метод проверки getPrototypeOf.
Больше информации о сериях, а также полезных материалах к ним можно найти на сайте курса JS.
Подписывайтесь на канал AvitoTech в Telegram, там мы рассказываем больше о профессиональном опыте наших инженеров, проектах и работе в Авито, а также анонсируем митапы и статьи.
Недавнее исследование выявило и классифицировало 68 уникальных типов «тёмных паттернов» в дизайне пользовательских интерфейсов. Эти паттерны были организованы в пять основных категорий:
Препятствия (Obstruction): Намеренное усложнение или запутывание процессов.
Укрывательство (Sneaking): Сокрытие или искажение информации с целью введения пользователей в заблуждение.
Интерференция интерфейса (Interface Interference): Манипуляции элементами интерфейса для влияния на поведение пользователей.
Принуждение (Forced Action): Обязательное выполнение пользователем определённых действий для достижения желаемого результата.
Социальная инженерия (Social Engineering): Использование социальных норм или давления для манипуляции поведением пользователей.
Кроме того, таксономия включает 8 новых подкатегорий и 24 дополнительных типа тёмных паттернов, таких как:
Новые подкатегории: Ложная информация, сложно закрыть, откровенно злой дизайн, принудительная реклама, автоматическое выполнение и др.
Новые тёмные паттерны: Принудительный льготный период (Forced Grace Period), только первоначальные выплаты (Only Initial Payouts), бесконечная прокрутка (Infinite Scrolling) и другие.
Таксономия была проверена с участием представителей индустрии, и более 87% опрошенных одобрили её за полноту, ясность и практическую полезность.
🎉 Релиз MoonShine v3 админ панели для Laravel! 🎉
Друзья, у нас праздник!
10 декабря наконец-то зарелизили MoonShine v3 (open-source панели администратора для проектов на Laravel).
Кто не вкурсе, вот статьи:
Это было непросто. Пришлось отложить дату релиза, но зато успел всё сделать что запланировано. 🔥
Что было на стриме:
🕰 Краткая история создания MoonShine — от первых шагов до сегодняшнего дня.
🚀 Релиз на GitHub, деплой новой версии лендинга и документации.
🛍 Демонстрация маркетплейса приложений для MoonShine
Обязательно посмотрите запись стрима! Вы не только узнаете больше о MoonShine, но и вдохновитесь на свои проекты.
Немного выдохну, и сделаю подробный разбор по возможностям MoonShine v3.
Сайт проекта - https://moonshine-laravel.com/
Чат в телеграм - https://t.me/moonshine_ru
#MoonShine #релиз #CutCode
Подготовка расширений к Joomla 6: CMSObject -> stdClass
В Joomla 6 метод getItem()
в Adminmodel
будет возвращать \stdClass
вместо CMSObject
. Это означает, что все устаревшие функции этого класса будут недоступны.
Разработчики в Joomla 6 должны напрямую работать со свойствами объекта item
и не использовать устаревшие методы set()
и get()
.
Устаревший способ
<?php
$article = $app->bootComponent('content')->getMVCFactory()->createModel('Article', 'Administrator')->getItem(1);
echo $article->get('title');
Как будет в Joomla 6
<?php
$article = $app->bootComponent('content')->getMVCFactory()->createModel('Article', 'Administrator')->getItem(1);
echo $article->title;
Соответствующий Pull Request уже принят в ветку Joomla 6.
Чат-боты стали неотъемлемой частью цифровых взаимодействий, однако их эффективность во многом зависит от восприятия пользователями их производительности и стиля общения. Исследования показывают следующее:
Ошибки подрывают пользовательский опыт: Ошибки негативно влияют на восприятие чат-бота с точки зрения простоты использования, полезности, социальной значимости и удовольствия от взаимодействия. Проще говоря, чем больше ошибок совершает чат-бот, тем меньше у пользователей желания с ним взаимодействовать.
Человечный стиль общения повышает удовольствие: Хотя человеческий стиль общения (например, эмпатия, шутки, эмоциональные реакции) не оказывает существенного влияния на восприятие простоты использования или полезности, он значительно увеличивает ощущение удовольствия от взаимодействия, делая общение с чат-ботом более приятным.
Для максимизации эффективности чат-ботов дизайнерам следует сосредоточиться на минимизации ошибок, одновременно внедряя элементы человеческого взаимодействия. Комбинация компетентности и доступности позволяет создавать чат-ботов, которые не только работают эффективно, но и вызывают доверие и удовольствие у пользователей.
https://www.tandfonline.com/doi/epdf/10.1080/10447318.2023.2175158