• Как кликнуть по элементу у которого один Class но элементов таких 10?

    @alexalexes
    Если не хотите forEach-ем, то переберите по старинке через for.
    let Nlist = document.querySelectorAll(".chain_cnt_head");
    for(let i = 0; i < Nlist.length; i++)
    {
       Nlist[i].click();
    }
    Ответ написан
    1 комментарий
  • Запоминает ли usb bluetooth свисток подключенные устройства при смене операционной системы?

    @alexalexes
    Учет подключенных устройств bluetooth осуществляется на уровне приложения выше драйверов донгла. В каких-то случаях ОС использует свою утилиту, в каких-то случаях можно использовать утилиту от производителя донгла (или может быть универсальная утилита). Сам донгл учетных данных не хранит.
    Ответ написан
    Комментировать
  • Modx Babel мультиязычность - как получить контекст во внешнем файле?

    @alexalexes
    При наличии параметра uri страницы, контекст ресурса можно получить так:
    $page = $modx->findResource($uri);
    $context_key = $page->get('context_key');
    Ответ написан
    Комментировать
  • Какое регулярное выражение использовать, что бы достать из текста все цифры?

    @alexalexes
    Сначала пишите патерн для лицевого счета, ориентируясь на "л/с" и на пробел после номера (см. Позитивный просмотр вперед/назад).
    Отдельно пишите патерн, чтобы получать даты (тупо по точкам и обязательному количеству цифр между ними).
    Потом пишите патерн, чтобы вытащить номер № - это посложней, так как только вы можете проанализировать, какие номера могут быть, но можно заглядыванием назад ловить номер (и опционально пробел) и читать до следующего пробела.
    Если порядок нахождения не важен, можете тупо по очереди сканировать текст этими тремя патернами.
    Если важен, то делаете один патерн из всех через пропуск определенного кол-ва символов (.)+ - обернуть нужно также как с условным просмотром вперед/назад.
    Ответ написан
    Комментировать
  • Что является разработкой клиентской части?

    @alexalexes
    Все окружение браузера, до чего дотягивается JS интерпретатор - DOM-дерево, window, куки, локальное хранилище, интерфейсы XHR (он же ajax), web_sockets, api к графике/звуку - это все клиентская часть приложения.
    Вы можете полностью создать одностраничный сайт без применения фреймворков, веб-сервера, и просто сохранить в виде html файла (плюс еще несколько статичных css, img, js, font файлов, но это можно использовать без поднятия настоящего сервера) - и это будет полноценное клиентское приложение без серверной части.
    Ответ написан
    Комментировать
  • Как реализовать получение уникального айди из базы данных?

    @alexalexes
    Ну, insert вы для себя открыли.

    я хотел сделать отдельный параметр в бд, который проверяется

    посмотрите, как пользоваться select-ом, да еще с входными параметрами, чтобы извлечь строку.

    заменить в ней значение,

    Ищем как пользоваться запросом c update, да еще с параметрами.
    PS: Если еще посмотрите, как пользоваться delete, то CRUD комплект вы изучили, как взаимодействовать с базой.
    PPS: cursor после выполнения insert может содержать свойство last insert id, но это не точно.
    Ответ написан
    Комментировать
  • Как быстро сделать список адресов для скачивания?

    @alexalexes
    Если прямо "на коленке" нужно написать и за 5-20 минут получить список url к определенной странице.
    То открываете консоль браузера F12.
    Открываете вкладку "элементы", чтобы изучать дерево документа.
    Также заходите во вкладку "консоль" и с помощью document.querySelector пытаетесь написать CSS селектор, чтобы дотянуться до нужного img узла изображения. Если вам нужна ссылка на то, что выводится тегом img, то забираете атрибут src. А оригинал изображения может лежать в соседнем атрибуте этого же тега, например, data-src - тогда забираем его.
    Далее, пробуем получить список узлов img по заданному селектору с помощью document.querySelectorAll.
    Если функция подхватывает все узлы, то результат готов. Вам нужно подставить в url-ы домен ресурса или адрес текущей страницы (без части запроса), так как ссылки могут быть относительны.
    Можно накопить результат в виде массива, перевести в JSON и забрать строчку JSON из консоли. Если еще проще, то склеить результат в строку через запятую и тоже забрать из консоли.

    В отдельных случаях одним CSS селектором можно не обойтись, чтобы забрать все ссылки, или img узлы лежат не в постоянной структуре.
    Тогда нужно в несколько этапов получать содержимое.
    Сначала нужно научиться дотягиваться до узла-контейнера списка элементов (элементы - не обязательно интересующие Img узлы, ими могут быть какие-нибудь карточки товаров - тоже контейнеры).
    Потом от контейнера-карточки пытаемся дотянуться до нужного изображения.
    Далее организуем forEach, чтобы перебрать контейнеры-карточки.
    Ответ написан
  • Делаю to do веб-приложение. Как реализовать логику повторения задач?

    @alexalexes
    В вашей структуре данных будет как минимум 3 схемы хранения данных, отвечающие за разные подсистемы:
    1. Схема для подсистемы управления учетными данными пользователей
    Подсистема отвечает за регистрацию пользователей, аутентификацию. То есть, позволяет пользователю при предъявлении своего токена (логина и пароля), как-то соотнести его с учеткой в системе. Или помочь восстановить доступ к этой учетке.
    2. Схема для подсистемы прав доступа
    Перечисленная структура таблиц позволяет создать шаблон роли пользователя с заранее оговоренными допустимыми действиями над определенными типами задач. И применить шаблон роли на пользователе - создав роль пользователя.
    Данные из этой подсистемы позволяют проводить авторизацию пользователя, ограничивая его область привилегий.
    Для этой подсистемы нужно уточнять требования, чтобы понять насколько вам нужен шаблон ролей, какие свойства в него должны входить и т.д. От этого будет зависеть структура таблиц.
    3. Схема для подсистемы планировщика задач
    В этой подсистеме можно создать шаблон задачи, назначить номинальных куратора и исполнителя (пока что по одному пользователю, если нужно больше, то расширяйте это таблицами со связями многим-ко-многим).
    Есть возможность назначать задачу на конкретный календарный период (и не один раз) - с указанием фактических куратора и исполнителя (тоже по одной единице - надо больше расширяйте структуру таблиц). Наличие таблицы календарного планировщика позволяет зафиксировать параметры выполнения задачи во времени, если в ней будут непредвиденные изменения в кураторах и исполнителях, перенос на другое время.
    Нужно определиться как генерировать задачу для таблицы-календаря - заранее накидать фактические даты выполнения на неделю, месяц, год, и потом их корректировать по обстоятельствам, или назначать следующую дату выполнения после истечения периода выполнения предыдущей.
    Схема таблиц позволяет любой из этих вариантов.
    Также из задач можно построить дерево задач и нанести каждую подзадачу в планировщик (есть связь таблицы по родителю).

    4. Можно сделать схему подсистемы построения отчетности как по шаблонам задач, планировщику, так и по назначению прав доступа, кураторов, исполнителей.

    ----------------------------------------
    Схема таблиц учетных данных пользователей

    Пользователь
    #* Код человека
    *Дата регистрации
    * ФИО
    *Адрес электронной почты
    * Хеш пароля

    -----------------------
    Схема таблиц прав доступа пользователей

    Шаблон роли пользователя (модель роли)
    #* Код шаблона
    * Название роли

    Действия прав доступа (справочник)
    1. Код действия
    2. Название действия (просмотр, назначение, отмены, удаления, переноса задачи, редактирования шаблонов задач, редактирования планировщика задач)

    Cвойства шаблона прав доступа
    1. Код свойства прав доступа
    2. Код шаблона роли
    3. Код действия прав доступа
    5. Код типа задач
    4. Дата создания свойства

    Роль пользователя (реализация роли пользователя)
    1. Код прав доступа пользователя
    2. Код шаблона роли
    3. Код пользователя

    ------------------
    Схема таблиц планировщика задач пользователей

    Тип задачи
    1. Код типа задачи
    2. Название типа задачи

    Шаблон задачи (модель задачи)
    1. Код шаблона задачи
    2. Код типа задачи
    3. Код родителя шаблона задачи (на сущность Шаблон задачи)
    4. Наименование задачи
    5. Описание задачи
    6. Дата создания шаблона
    7. Периодичность выполнения
    8. Код пользователя (номинальный куратор)
    9. Код пользователя (номинальный исполнитель)
    10. Дата назначения номинального куратора
    11. Дата назначения номинального исполнителя

    Календарь задач (реализация задач, он же планировщик)
    1. Код элемента
    2. Код шаблона задачи
    3. Дата начала выполнения задачи
    4. Дата окончания выполнения задачи
    5. Код пользователя (фактический куратор)
    6. Код пользователя (фактический исполнитель)
    7. Дата назначения фактического куратора
    8. Дата назначения фактического исполнителя
    ---------------------

    PS: Можете из этого перечня таблиц и их атрибутов нарисовать DFD диаграмму или диаграмму по Ричарду Баркеру. Правда, тут не обозначены явно связи, но можно догадаться по названию внешних ключей, как связаны таблицы.
    Ответ написан
    1 комментарий
  • Какую видеокарту выбрать на древний ПК?

    @alexalexes
    1. Докупить SSD, гигов на 240, не меньше.
    2. Потом купить комплект мамки DDR3/SATA3 + проц. i3 не ниже Ivy bridge поколения (трехтысячные номера моделей процессоров). Eсли в комплект войдет пару гигов озу - поставить на первое время.
    3. Добить емкость озу до 8 или 16 гиг DDR3. Если проц/мать поддерживает частоту 12800, то ориентироваться на такие планки.
    4. видео можно оставить, если что-то подвернется почти бесплатно, что-то до nvidia 560 (новее смысла ставить нет), то можете воткнуть эту затычку, хуже не будет.
    PS: Может выяснится, что у вас блок питания на 400 ватт (а может даже 350), и он не тянет новый комплект железа - купить на 450 ватт. Если он еще окажется с сертификатом 80plus - то супер.
    Ответ написан
    Комментировать
  • Как хранить массив внутри value каждой опции выпадающего списка selectize?

    @alexalexes
    Если переводить массив в JSON то там тоже будут кавычки и это возможно может сломать html.

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

    Каждой опции соответствует свой массив данных, которые я планирую записать в значение value в этой форме html.

    Если вы самописно генерируете html элемент и записываете свойства атрибута элемента, то вы сами должны позаботиться об экранировании на уровне этой абстракции. В php для генерации безопасной строки для подстановки в html существуют функции htmlspecialchars и htmlentities, только настройте их, какие кавычки нужно экранировать.
    Ответ написан
    Комментировать
  • Хочу понимать биты/байты и их друзей. Литература?

    @alexalexes
    Для простого объяснения как работает UTF-8 не нужно знать, какие конкретные размерности символов используются. Можно рассмотреть бытовую аналогию - печать на клавиатуре.
    Какая аналогия печати символов, если мы используем принцип unicode?
    На клавиатуре набираем Alt и код символа с ведущими нулями (пусть их будет всего восемь цифр в номере). Тогда, чтобы напечатать любой символ нам всегда нужно 9 нажатий клавиш.
    Какая аналогия печати символов, если мы используем принцип utf?
    У нас есть переключатель регистра сочетанием клавиш Alt+Shift+номер таблицы символов (пусть будет фиксированный 4 цифры). На первом регистре основные клавиши клавиатуры печатают англ. алфавит, на втором регистре - кириллицу, на третьем - регулярно используемые спец символы, на четвертом - греческий, на пятом - вязь и т.д.
    Чтобы нам начать печатать текст, нужно либо остаться на первом регистре (не использовать комбинацию переключения), либо если идет символ не из текущего регистра, то воспользоваться комбинацией переключения - в этом случае стоимость печати символа выходит 6 символов на переключение и 1 символ на печать. Следующие символы можно печатать в этом же регистре по 1 нажатию.
    Большинство человеческих текстов достаточно однородны, при принципе utf мы будем достаточно редко переключать регистр, на печать каждого символа будет уходить в среднем чуть больше одного нажатия клавиши. Если мы будем печатать тот же однородный текст принципом unicode, то будем каждый раз нажимать 9 клавиш.
    Utf принцип в этом смысле очень экономный выходит.
    По такой же аналогии "уплотняются" данные в реальной кодировке utf-8, utf-16 и т.д.
    Ответ написан
  • Как правильно организовать таблицы?

    @alexalexes
    1. Сделать правильную таблицу Client с полем год.
    2. Создать индекс на поле год.
    3. Сделать импорт из таблиц Client_ГОД в таблицу Client с указанием поля года.
    4. Переписать запросы, чтобы присутствовала таблица Client в контексте нужного года (выборка с параметром год).
    5. Если очень нужно ограничить выборку по нужному году (по соображениям разграничения прав), то для определенных запросов сделать view по нужному году, выдать права на view для определенного пользователя.
    Ответ написан
    Комментировать
  • Как сменить кодировку MySQL?

    @alexalexes
    В документации это есть:
    ALTER DATABASE ... CHARACTER SET ... COLLATE ...
    Версия 5.7
    Версия 8.0
    PS: Есть вариант сменить кодировку в коннекте phpMyAdmin, но как будет работать админка - надо смотреть.
    PPS: Бекапы никто не отменял, делайте данное действие на тестовой базе, либо при наличии копии.
    Ответ написан
    Комментировать
  • Как вывести в одной строке значения по нескольким строкам для одного ID с разными типами?

    @alexalexes
    select C.id_client,
      (select Cv.value from client_value as Cv where Cv.type = 'name' and Cv.id_client = C.id_client) as client_name,
      (select Cv.value from client_value as Cv where Cv.type = 'address' and Cv.id_client = C.id_client) as client_address
    from client as C
    Ответ написан
    Комментировать
  • Можно ли присвоить имя файла функции, которая в нём находится?

    @alexalexes
    Понимаю, хотите изобрести свой composer.
    $func_file_full_path = ''; // полный путь к файлу модуля с функцией
      require_once ($func_file_full_path);
      $func_name = basename($func_file_full_path,  '.php');
    
      $funct_name($func_arg1, $func_arg2....); // если попытаться вызвать переменную как функцию, то интерпретатор PHP попытается обратиться к глобальной функции по имени что содержится в этой переменной в виде строки.
      
      call_user_func($funct_name, $func_arg1, $func_arg2....); // то же самое, но в более классическом виде
    Ответ написан
    3 комментария
  • Возможна ли замена матрицы без замены тачскрина на ноутбуке Lenovo?

    @alexalexes
    Даже если физически возможно отделить матрицу от тачскрина, то ни один мастер не возьмется за эту операцию, так как результат отделения и обратной склейки непредсказуем. Можно разбить тачскрин, либо приклеить с мутными следами. Надежнее и предсказуемо заменить сразу всем модулем.
    Ответ написан
    Комментировать
  • Как в php заполнить автоматически массив данными?

    @alexalexes
    $out_arr = [];
    // Тут нужно указать параметры каждого N - места в шаблоне
    $i_min = 1; $i_max = 9;
    $j_min = 1; $j_max = 9;
    $k_min = 1; $k_max = 9;
    for($i=$i_min; $i <= $i_max; $i++)
    {
      for($j=$j_min; $j <= $j_max; $j++)
      {
        for($k=$k_min; $k <= $k_max; $k++)
        {
           $out_arr[] = "ваш".$i."шаблон".$j."строки".$k;
        }
      }
    }
    var_dump($out_arr);
    Ответ написан
    Комментировать
  • Как получить timestamp,обрезав пустое время?

    @alexalexes
    komino, это проблема разработчика, а не конфига драйвера СУБД, как он будет интерпретировать значение даты в конкретном запросе, если ему не подходит статичный шаблон nls_date_format. Такой шаблон не имеет в себе лексического интерпретатора, способного выполнять условные операторы.
    Решение:
    select
    -- вариант 1
    to_char(sysdate, 'DD.MM.YYYY' || decode(sysdate - trunc(sysdate), 0, '', ' HH24:MI:SS')) as your_format_date_1, 
    -- вариант 2
    case
      when sysdate - trunc(sysdate) > 0
      then to_char(sysdate, 'DD.MM.YYYY HH24:MI:SS')
      else to_char(sysdate, 'DD.MM.YYYY')
    end as your_format_date_2
    from dual;
    Ответ написан
  • Как НЕ фиксировать транзакцию после отработки php скрипта?

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

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

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

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