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

    @alexalexes
    $_POST['SQL'];
    Ой, вы доверяете клиенту настолько, что позволяете ему самому формировать текст запроса для бэкенда?
    У такой модели взаимодействия уровень безопасности еще ниже, чем у подготовленных запросов со строковой склейкой параметров.
    Идеология выполнения скриптов в PHP такая, чтобы выполнить все атомарные действия, зафиксировать результат (или откатиться), отдать ответ и умереть.
    Есть какие-то примеры данного "фокуса"?

    Есть. Технология называется web sockets, она представляет другую идеологию - называется длинные запросы. Когда клиент открывает соединение с сервером и ждет от сервера сообщений (или сам их отправляет в соккет), при этом скрипт сервера в бесконечном цикле опрашивает открытый соккет. Не завершая скрипт, на сервере можно либо ожидать появление сообщения в соккете, либо выполнять что-то по транзакции, если имеется принятое сообщение.
    Проблема еще в том, что PHP не сильно приспособлен для этого режима. Вам придется делать бесконечную петлю обработки в скрипте:
    while(true)
    {
      // исполняемый код для всех клиентов соккетов
    }

    И вам нужно самим делать механизм сессий, чтобы отличать одного клиента от другого, поскольку запущенный скрипт будет принимать сообщения от всех клиентов.
    Для этих целей больше годится NodeJS. Там все соккеты разбиты по обработчикам событий, можно выделить контекст одного конкретного клиента.
    Резюмируя, могу сказать.
    а) Вы пишите свой продвинутый редактор запросов (а-ля PHPMyAdmin но с поддержкой транзакций) и у вас неправильно выбран вид сервера для бэкенда (PHP вместо NodeJS). Технические требования для взаимодействия клиента и сервера не имеют подходящей реализации технологии на сервере (web sockets).
    б) Либо у вас приложение не предполагает работы, связанной с редактированием запросов пользователем. Вы просто переносите опыт разработки desktop приложений на веб разработку.
    В этом случае вы не правильно делаете то, что формируете запросы на клиенте. Толстую бизнес-логику, предполагающую взаимодействие с базой данных с фиксацией или не фиксацией транзакции нужно переносить на бэкенд, либо в хранимые процедуры и функции СУБД.
    Ответ написан
    2 комментария
  • Как спасти ноутбук?

    @alexalexes
    В ремонт, куда же еще?
    После заливания водой нужно как можно быстрее отключить батарею.
    Потом, в условиях ремонтной мастерской ноут нужно разобрать полностью и изучать поверхность мат. платы на предмет следов коррозии. Если таких нет, и плата сухая, то уже мастер попробует включить его, не вы.
    Ответ написан
    Комментировать
  • Как правильно заменить текст в html?

    @alexalexes
    Функция ViewGifImage не нативная, а скорее всего ее реализация прописана в какой-то подключаемой библиотеке JS.
    Нужно погуглить спецификацию этой библиотеки, и посмотреть в доках, за что отвечает параметры в функции ViewGifImage.
    Если я предположу (я не знаю, что за библиотека и не видел ее документации!), что первый параметр отвечает за указатель на html узел, куда вывалить бинарный ресурс изображения, то нужно как-то обозначить теги, чтобы указатели на эти теги выцепить из DOM через JS. Например, я хочу им задать уникальные идентификаторы:
    <img id="image-1234" src="/какой-то путь/qa_2023-02-01-212831-1.gif">
    <img id="image-5678" src="/какой-то путь/qa_2023-02-01-212831-2.gif">

    Тогда из DOM я буду доставать указатели на эти элементы через функцию getElementById.
    <script type="text/javascript">
    let image_1234 = document.getElementById("image-1234"); // тут получаем ссылку на элемент с id="image-1234"
    // далее, используем ее вместо this
    ViewGifImage(image_1234, 'sitedb/log/QA/General/SfpBCTuningCheck/gfx/qa_2023-02-01-212831-1.gif','sitedb/log/QA/General/SfpBCTuningCheck/gfx/qa_2023-02-01-212831-1.pix','322','242','ReflectionResultPlot','Frequency in MHz','0','Reflection Factor |r|','0','1','xffffff x000000 x000000 xff0000 x0000ff x00df00 xff00ff xff7f00','2','158','1','Reflection 0 Degrees','158','1','Reflection 90 Degrees','','','','','','','','','');
    
    let image_5678 = document.getElementById("image-5678"); // тут получаем ссылку на элемент с id="image-5678"
    // далее, используем ее вместо this
    ViewGifImage(image_5678, 'sitedb/log/QA/General/SfpBCTuningCheck/gfx/qa_2023-02-01-212831-2.gif','sitedb/log/QA/General/SfpBCTuningCheck/gfx/qa_2023-02-01-212831-2.pix','322','242','TransmissionResultPlot','Frequency in MHz','0','Transmission |t| in db','0','1','xffffff x000000 x000000 xff0000 x0000ff x00df00 xff00ff xff7f00','2','158','1','Transmission 0 Degrees','158','1','Transmission 90 Degrees','','','','','','','','','')
    </script>
    Ответ написан
  • Как определить точную модель видеокарты?

    @alexalexes
    Диспетчер устройств -> свойства устройства -> вкладка "Сведения" -> Свойство "ID оборудования".
    Копируем первую строчку вида через Ctrl+C:
    "PCI/VEN_****&DEV_****&SUBSYS_*"
    На сайте https://driver.ru/Search/ выбираем "Поиск по ID" и вставляем ID.
    В результатах поиска будет написано:
    "Это Device ID от <устройство>"
    Если поиск не дал результат, то пытаемся укоротить ID до следующего амперсанта, например:
    "PCI/VEN_****&DEV_****"
    Как правило, VEN и DEV достаточно, чтобы выйти на конкретную модель устройства.

    PS: Для подробного анализа характеристик именно видеокарт есть утилита GPU-Z.
    Ответ написан
    1 комментарий
  • Можно ли подключить старый монитор с VGA к видеокартам с цифровыми разъемами и наоборот?

    @alexalexes
    Но вот беру я в руки видеокарты и там везде DVI-D, а беру переходники на аналог и там DVI-I - VGA. Ну и для кого они, спрашивается?

    Для той эпохи видеокарт (приблизительно до тысячной линейки nvidia), когда существовал переходный период, когда у дешевых ЖК мониторов был VGA. Сейчас даже новому дешевому монику не положено иметь что-то ниже стандарта HDMI.
    В какую сторону работают? Что во что конвертируют?

    Только документация к конвертеру может сказать про порядок откуда и куда и поддерживаемый перечень выходных размеров картинки (или в описании к товару четко должно быть прописано направление "from стандарт_1 to стандарт 2"). В названии конвертера продавец очень легко может перепутать вход и выход.
    Если цифру в аналог без проблем можно переделать, почему все видеокарты с DVI-D?

    Как говорил выше, переходный период на рынке окончен, самые дешевые моники могут принимать цифру по кабелю. Встраивать аналоговые схемы в видеокарту потеряло смысл.
    Ответ написан
  • Для чего на микрике мыши 3 контакта?

    @alexalexes
    Если появляются двойные срабатывания, я обычно, разбираю эту деталь иголкой прямо на плате, не прибегая к помощи паяльника. Чищу все пятаки якоря зубочисткой или тонкой отверткой, в зависимости от степени окисления этих пятаков, и потом собираю всё обратно. Хватает такого обслуживания на год.
    Ответ написан
    1 комментарий
  • Странное поведение document.write()?

    @alexalexes
    Для записи многострочного текста в качестве параметра или переменной в JS нужно использовать обратные кавычки.
    // Как у вас:
    let a = 'Много
    строчный
    текст';
    // как корректно
    let a = `Много
    строчный
    текст`;
    // как выкрутиться, если у вас не ES6
    var a = "Много\
    строчный\
    текст";
    Ответ написан
  • Существует ли такой разъем xlr?

    @alexalexes
    Вроде существуют:
    https://aliexpress.ru/item/1005004488552588.html
    Ответ написан
    Комментировать
  • Как правильно хранить секунды в базе даных?

    @alexalexes
    1. Храните в БД целочисленно;
    2. Передавайте на фронт целочисленно;
    3. На фронте преобразуйте целочисленную длительность в нужный формат любым доступным способом.
    Ответ написан
    Комментировать
  • Почему зависает при postgresql запросе?

    @alexalexes
    1. Выборка не ограничена лимитом строк - ни в самом запросе, ни, скорее всего, в том средстве, в котором делаете запрос.
    2. Когда пишете список таблиц во from вы никак не сопоставляете их ключи (в where
    или в join в лексеме on будет что-то типа tickets.id = seats.ticket_id ).
    Каждая новая таблица умножает итоговую выборку на количество строк этой таблицы (полное декартово произведение получается).
    Если tickects у вас было 100 записей, а seats 1000 записей, то просто перечисляя таблицы без условий соединения, вы получите 100 тыс. записей в итоговой выборке.
    Ответ написан
    3 комментария
  • Как выбрать все последние запись где recipient = 1?

    @alexalexes
    Чтобы выдернуть по одному сообщению от каждого пользователя, нужно проранжировать сообщения особым счетчиком с подзапросом, имитирующим оконную функцию row_number.
    select a.*
      from (select m.*, u.*, count(select *
                                                  from messages as m2
                                                    join users as u2 on u2.id = m2.author
                                                where m2.recipient = 1
                                                    and u2.id = u.id -- имитация клаузы partition by
                                                    and m2.id > m.id -- имитация клаузы order by  ... desc
                                   ) as row_num, -- аналог row_number через оконную функцию:
                                 -- row_number() over(partition by u.id order by m.id desc) as row_num 
      from messages as m
       join users as u on u.id = m.author
    where m.recipient = 1
    ) as a
    where a.row_num = 1 -- берем 1 строку по ранжированному счетчику в пределах каждого id пользователя
    Ответ написан
    Комментировать
  • Ошибка запуска ТХТ, что может быть?

    @alexalexes
    Не названная программа пытается получить доступ к файлу из каталога C:\Users\vanek\OneDrive, предназначенного для монтирования к облаку.
    Вероятно, нужно проверить, что приложение OneDrive запущено и вы в нем авторизованы.
    Ответ написан
    Комментировать
  • В .NET 7 не запускается https. Что нужно сделать?

    @alexalexes
    Либо ставите самоподписанный сертификат к себе на операционную систему для домена localhost, либо отключаете проверку SSL сертификата в соединениях внутри проекта для тестовых сборок (если заранее не следовали второму варианту и не вынесли в конфиг софта это как отдельный параметр, то реализовать с нуля будет накладно).
    Ответ написан
  • Как сделать поиск в ячейке по знаку " с помощью VBA?

    @alexalexes
    Обработайте строку регулярным выражением методами RegExp в VBA:
    \w+\s"(?<=").*(?=")"
    https://regex101.com/r/14oM7H/1

    PS: Насчет работы регулярок в VBA - не имею представления, гуглите самостоятельно.
    Ответ написан
  • Как при запросе к ссылке на FOREIGN KEY получить имя пользователя а не id?

    @alexalexes
    https://www.w3schools.com/sql/sql_join.asp
    В вашем случае Orders это artist,
    Customers это track,
    Customers.CustomerName - это ваш искомый artistname.
    В джоине участвуют атрибуты:
    ON Orders.CustomerID=Customers.CustomerID
    а у вас будут:
    ON artist.artistid=track.trackartist
    Ответ написан
    Комментировать
  • Лучше использовать целое число или строку для индикатора состояния данных?

    @alexalexes
    Если не хотите фильдеперсовый enum, то делайте как должно быть по классике построения реляционных баз данных.
    Делаете таблицу справочник TransactionStatus, перечисляете там все состояния, с использованием id состояния. И этим id ссылаетесь на этот справочник в таблицах, где используется состояние, как внешний ключ.
    Ответ написан
  • Есть ли способ улучшить соединение ADSL?

    @alexalexes
    На ADSL не так много вариантов что можно сделать самому с оборудованием, чтобы понять, где проблема:
    1. Заменить роутер на другой. Чтобы не сильно тратиться, можно взять в компьютерном комиссионном магазине, либо на avito. Благо ADSL роутеры сейчас могут отдать почти даром: 200...1000 руб. Если роутер был у человека, который перешел с ADSL на оптику, то вероятно, что роутер жив чем мертв.
    На роутере могут со временем приходить в негодность входной трансформатор для гальванической развязки, что может понижать параметр сигнал/шум. Если заменить роутер, то может попасться более исправный экземпляр.
    2. Заменить сплиттер - коробочка-разветвитель телефон-роутер. Либо избавиться от нее, если телефона нет на линии.
    3. Заменить телефонный кабель от жилья, до места, где подключается к щитку провайдера, избавиться от скруток (в городских условиях это будет щиток в подъезде или на чердаке, в сельских - коробочка на телефонном столбе).
    По идее, это должен делать работник от провайдера. Но если у вас сложно проложен кабель в доме и на прилегающей территории, то часть работ придется делать своими силами.
    Ответ написан
    Комментировать
  • На чем дешево и долго хранить десятки Тб информации сейчас?

    @alexalexes
    Я думаю, 10 дисков с технологией записи CMR и без гелиевого наполнения по 8 Тбайт, запертые в сейфе в негорючем помещении с постоянным микроклиматом, будут куда дешевле и проще в эксплуатации, и пролежат 15 лет. Чем возиться с ленточным накопителем и лентами.
    Ответ написан
    Комментировать
  • Почему при использовании substr в php, если в тексте есть символ точки, то он считает не корректно?

    @alexalexes
    "ДокРу00001.Р1"

    Вероятно, у вас эта строка не в однобайтовой кодировке (скорее всего в utf8 работаете).
    Для таких строк нужно использовать набор функций для строк в многобайтовых кодировках, в данном случае вам нужна функция mb_substr вместо substr, иначе результат работы функций для однобайтовых кодировок в строках с многобайтовыми - не предсказуем.

    PS: не забудьте включить расширение mb_string в конфиге php сервера.
    Ответ написан
  • Очень-очень много фотографий в одной папке - это вредно для диска?

    @alexalexes
    1. Я бы такой каталог убрал из личного каталога пользователя системы, так как многие элементы интерфейса системы любят интерактивно проецировать состояние таких каталогов в корне проводника, Меню пуск и Рабочего стола (это каталоги Музыка, Загрузки, Изображения и т.д.). Это проецирование может быть ресурсоемким.
    2. Настроить просмотр файлов проводника Windows для этого каталога только в виде списка, без отображения миниатюр. Поэкспериментировать с настройкой кеширования миниатюр изображения. Это поможет снизить нагрузку при навигации.
    3. Использовать для навигации не проводник Windows, а программу-галерею. Например, ACDSee, XnView.
    4. Для копирования и переноса файлов - файловые менеджеры, которые не лезут в содержимое файла без необходимости (если не установлены плагины) - Total Commander, Far Manager.
    Ответ написан
    Комментировать