В Испании программисты рождаются сразу сеньорами


Детекция значений null и undefined в JavaScript

Оказывается, есть ещё nullish coalescing operator(Оператор нуллевого слияния) «??».

это логический оператор, который возвращает значение правого операнда когда значение левого операнда равно null или undefined, в противном случае будет возвращено значение левого операнда.

Визуально он как-то похоже на тернарный оператор из за вопросительного знака, но он не тернарный.

x ?? y

Если x равно null или undefined, вернётся y, иначе x (даже если равно 0 или false)

Этот оператор не поддерживается в Internet Explorer для десктопа и в Samsung Internet и некоторых других мобильных браузерах.

Текущее описание можно найти здесь

https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing_operator


Что такое REST

Очередная теоретическая статья, посвящённая графоманству.

REST — стиль построения распределённого приложения в сети, набор ограничений.

Веб-службы, построенные на REST называются RESTful.

Читать далее Что такое REST

Разрабатываем на PHP с XAMPP

В этой статье мы установим XAMPP с модулем WordPress на Ubuntu. Его планируется использовать для разработки плагина Urvanov Syntax Highlighter. Сам дистрибутив XAMPP скачивается с https://www.apachefriends.org/.

Можно, конечно, установить вручную nginx, PHP и MySQL, но для разработки существуют более простые решения. XAMP это настроенная и полностью готовая к использованию сборка сервера с Apache, MySQL и PHP, устанавливающаяся буквально в несколько кликов.

Читать далее Разрабатываем на PHP с XAMPP

TelegramBots долго останавливает сессию

Использую в работе библиотеку TelegramBots, но есть проблема, что боты останавливаются очень долго. Останавливаю ботов последовательно одного за другим и в результате весь процесс занимает около часа.

В списке задач TelegramBots нашёл две задачи с описанием похожей проблемы:

BotSession.stop() takes a long time

stop method never exits

Я долго отлаживал саму библиотеку, но легкого решения проблемы не нашёл. О проблема заключается в том, что ReaderThread внутри библиотеки использует блокировку на объект DefaultBotSession. Но при остановке бота мы вызываем синхронизированный метод stop у DefaultBotSession, что приводит к тому, что мы несколько десятков секунд ждём, пока ReaderThread освободит блокировку, и мы сможем её взять.

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