• В чём ошибка запроса?

    @alexalexes
    INNER JOIN [Open demand] ON ... ON ...
    что-то многовато On-ов для одного join. После ON должна быть корректная конструкция с точки зрения булевой алгебры (всякие выражения с and или or, in любой вложенности ), а не еще один on.
  • Как получить timestamp,обрезав пустое время?

    @alexalexes
    Либо переводить на клиенте (на самом-самом фронтенде) формат даты, либо извлекать запросом в виде отформатированной строки.

    Можете сделать view с полем your_format_date, чтобы строковое представление даты радовало глаз.
    Но для сортировки и сравнения вам придется оставить оригинальное поле в выводе view, так как строковое представление даты не годится для этих целей, только для вывода пользователю.

    Ответ дописал.
  • Как НЕ фиксировать транзакцию после отработки php скрипта?

    @alexalexes
    Значит, все таки у вас вариант А. Вы делаете продвинутый редактор для админки.
    В этом случае, с точки зрения безопасности, если набор прав профиля пользователя админки (он же администратора) имеет ту же полноту набора прав роли пользователя базы данных, под которым он соединяется с базой, то не имеет значения, будет ли этот пользователь пытаться сделать sql-инъекции к базе с которой он работает или нет. Он все равно не превысит свои права доступа, что разрешено ролью в базе.
    Главное, не оставляйте такой механизм взаимодействия для обычных посетителей сайта, где их права ограничиваются не ролью в учетке СУБД, а бизнес-логикой.
    Конкретно в этом примере, все происходит при нажатии на кнопку в таблице.
    Запускается функция, которая на вход принимает запрос и отправляет его дальше ajax'ом.

    Значит, когда вам нужно выполнить что-то, что требует включения режима транзакции и удержания его в реальном времени, в этой ситуации вам нужно общаться с сервером не по ajax, а через web socket. Подключаясь к отдельному php скрипту, сервер которого работает в особом режиме сессий (общие сессии), настройки сервера не должны завершать скрипт по таймауту (или делать его продолжительность в несколько часов - в пределах жизни сессии администратора), а код скрипта должен работать в бесконечной петле.
  • Как правильно заменить текст в html?

    @alexalexes
    Если парсить регуляркой весь документ сложно, то:
    1. можно конвертировать текстовое представление страницы в DOMObject.
    2. Получить список указателей на DOM узлы которые script и содержат ViewGifImage, нужно придумать запрос такой выборки.
    3. Пределах содержимого узла вида script можно получить его содержимое и парсить регуляркой только его содержимое.
    4. Достали ссылку регуляркой? - Собираем DOM узел img с нужным атрибутом src.
    5. Методом replace заменяем script узел на img узел в DOM объекте, возможно этим методом.
    6. Переходим к следующим узлам script и повторяем шаги 3-5.
    7. Закончили обрабатывать все узлы script. Преобразуем DOMObject обратно в текстовое представление.
  • Можно ли подключить старый монитор с VGA к видеокартам с цифровыми разъемами и наоборот?

    @alexalexes
    То есть, имея видеокарту с фото gtx1050 с hdmi/dp-dvi-d нельзя подключить монитор с одним лишь VGA через переходник? нужен именно конвертер?

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

    1. Цена на конвертер может быть существенно выше чем у кабеля, но эта зависит от фирмы/noname производитель.
    2. Плата конвертера требует заметного по габаритам корпуса, но скорее всего может не сильно отличаться от габаритов разъема DVI.
    3. Если цифровой вход имеет недостаточные ресурсы по питанию, чтобы запитать конвертер, то на конвертере будет дополнительный разъем для подключения БП (тогда это точно конвертер!).
    4. Можно встретить кабель (не конвертер) HDMI to VGA. Но в большинстве видеокарт работать не будет, это какое-то нишевое решение для определенной модели оборудования.
  • Странное поведение document.write()?

    @alexalexes
    Такое ощущение, что этот JS код, предназначенный для браузера, компилируется на стороне сервера или это компилирует фреймворк, прежде чем отдать браузеру.
    По идее, этот фрагмент нужно протащить через стек так, чтобы все промежуточные "умные компиляторы" - сервер (если у вас NodeJS), фронтендовый фреймворк воспринимали эту инструкцию не как код, а как статичный текст (требуется экранирование), а конечный интерпретатор - движок JS браузера подхватил эту инструкцию не как текст а как код (на его этапе получения этого фрагмента все экранирующие слои должны отсутствовать с точки зрения движка браузера).
    let mywindow = window.open('', 'PRINT', 'height=400,width=600');
    
        mywindow.document.write('<html><head><title> Some titke </title>');
        mywindow.document.write('</head><body >');
        mywindow.document.write('<h1>' + document.title  + '</h1>');
        mywindow.document.write('</body></html>');
    
        mywindow.document.close(); // necessary for IE >= 10
        mywindow.focus(); // necessary for IE >= 10*/
    
        mywindow.print();
        mywindow.close();

    Если вы этот код в консоли браузера вставите, то появится меню печати?
  • Notepad++ есть ли у него форки?

    @alexalexes
    Контекстное меню Notepad++ настраиваемое.
  • Как получить длину JSON объекта?

    @alexalexes
    А если распарсить?
    JSON.parse(json_string).length
  • Лучше использовать целое число или строку для индикатора состояния данных?

    @alexalexes
    Это специфический тип данных. В каких-то СУБД он реализован, в каких-то нет.
    Если рассматривать реализацию, которая будет работать в любой СУБД, без оглядки на то, что есть альтернатива в виде особого типа данных, то это нужно делать так, как я ответил.
  • На чем дешево и долго хранить десятки Тб информации сейчас?

    @alexalexes
    Если говорить о Blu-ray, то начинку приводов выпускают пару японских фирм, которые можно пересчитать по пальцам одной руки. Из доступных болванок, на которых можно записать второй слой (это которые 50 Гбайт) и не обнаружить сразу после записи, что он недоступен - только Verbatim подходит и доступен за умеренную цену. Китайские многослойные болванки можно сразу отправлять в помойку, даже не пытаться на них записывать.
    Уже сейчас, имея хранилище на таких дисках, стоит переживать, что японцы не закроют производство приводов, а verbatim - дисков.
  • Какой отрезок содержит в себе больше целочисленных значений?

    @alexalexes
    Потому что число 32 лежит справа от интервала (21;31), и оно не входит в него.
    И 20 лежит слева от этого интервала, и тоже не входит в него.
    А вам нужны только те целые числа, которые входят в этот интервал.
  • Почему через prompt не записываются данные?

    @alexalexes
    Алексей Уколов, давно не смотрел новшества в JS.
    = +
    это аналог функции parseInt()
    а вот
    +=
    это как раз инкремент/конкатенация.
  • Почему через prompt не записываются данные?

    @alexalexes
    = +
    Консоль браузера не ругается на эту вольность?
    parseInt к промту не хотите применить, чтобы избежать конкатенации строк?
  • Как создать RAID-хранилище из старых SATA HDD?

    @alexalexes
    Для домашних целей хранилище из RAID не имеет преимуществ по сравнению с одним/двумя многотерабайтниками, поскольку вы будете часто менять не сильно новые диски в этом массиве.
    Вы уверены, что хотите взять роль администратора по резервному копированию и поддержания живучести данных, а не просто иметь 10 Тбайт файловой помойки?
  • При клике на один элемент кликнуть другой?

    @alexalexes
    mletov, в обработчике клика любого элемента поджечь событие click конкретного элемента.
  • После установки SSL отвалились редиректы на HTTPS?

    @alexalexes
    В браузере, F12, вкладка консоли (настройка "Сохранять журнал"). При переходе по ссылкам с редиректами, что пишет?
    PS: С такой же настройкой "Сохранять журнал" на вкладке Сеть. Какие статусы http при переходах?
  • Почему ПК не включается и не перезагружается и не включается на горячую?

    @alexalexes
    - если выключить удержанием power, потом включить, все лампочки все кулеры все запускается, но он все равно не включается, и так можно делать до посинения, может случайно как то на 5 - 10 раз включиться, или ждать часа - два, пока остынет и тогда включается сразу но тоже может не с первого раза, но чаще с первого. Я перестал его выключать, вгоняю в спящий режим всегда теперь.

    В сервисе определили на каком этапе подвисает загрузка? После перезапуска можно зайти в биос или нет?
    Если нет, то на каком POST коде мамка зависает?
    В сервисе пробовали поставить другие компоненты для диагностики: видеокарту, память?
    PS: POST коды могут выводится на встроенном индикаторе материнки, если его нет, то в сервисе есть специальная диагностическая плата или в крайнем случае подключают спикер и слушают кол-во импульсов.
  • Как сделать так, чтобы мигание можно было воспроизводить несколько раз?

    @alexalexes
    Для color нужно подбирать сильно отличающийся цвет от #bbb, тогда она будет заметна.
    Возможно, для текста нужен отдельный трек ключевых кадров, чтобы было побольше уровней перехода:
    @keyframes blinker_text {
      25% {
        color: #999;
      }
      50% {
        color: #666;
      }
      75% {
        color: #333;
      }
    }

    В анимации она применяется дополнительным набором свойств:
    mailinput.style.animation = "blinker 0.6s linear 3, blinker_text 0.6s linear 3";

    Возможно, для анимации текста нужно применить другую временную функцию перехода, не linear.
  • Как убрать переполнение программного стека?

    @alexalexes
    Для технической отладки рекурсивных функций можно вводить дополнительный параметр - текущий уровень рекурсии и его проверять перед выполнением всей функции, чтобы из за ошибок в коде выполнение не проваливалось в бесконечность рекурсии.
    function f(n: integer, current_level: integer): integer;
    begin
     if current_level > 1000 "В начале рекурсивной функции сразу проверяем, не вышли мы за какое-то отладочное значение, например, 1000"
       write('Что-то пошло не так, достигнут предел рекурсии!')
     else
    ...
    else f:= 3*f(n-1, current_level + 1)-f(n-2, current_level + 1); "Добавляем и прибавляем значение уровня при рекурсивном вызове"
    ...
    write(f(n, 1)) "Уровню рекурсии задаем начальное значение"