• Как перевести html в PNG?

    @alexalexes
    Есть такая библиотека. HTML загоняет в canvas, а из него уже можно любой графический бинарник выдернуть.
    https://html2canvas.hertzen.com
    Ответ написан
    Комментировать
  • Какое направление подготовки выбрать?

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

    @alexalexes
    Фишка хэширования в том, что вы считаете его ровно один раз, и при повторном сравнении уже оперируете им, а не содержимым файла.
    У вас есть 1 млн. файлов. При получении каждого файла вы подготовили для него хэш и сохранили этот хэш в отдельном массиве в оперативной памяти, в файле на диске или в таблице базы данных.
    Когда поступит следующий файл, то вы от него тоже получите хэш, но при сравнении вам уже не надо вычитывать 1 млн. файлов, чтобы сделать сравнение, достаточно обратиться к более быстрому источнику за хэшами этих файлов, сравнение которых будет короче и перебор быстрее (если эта база данных, то должны использоваться индексы, если оперативная память, то сбалансированные деревья и бинарный поиск и т.п.).
    Ответ написан
    1 комментарий
  • SQL View против отдельных запросов с JOIN's?

    @alexalexes
    SQL View применяется в первую очередь, если некоторым пользователем нужно предоставить сводные сведения из закрытых для них таблиц, исключив доступ ко всем колонкам таблицы, либо предоставить только агрегированные сведения (count-ы, суммы, средние) и тд, не предоставляя доступ к исходной выборке.
    Делегировать сводные данные другому пользователю, но не давать исходники данных - это как раз про представление.
    В моем понимании, только в одном случае представление может поднять производительность. Если в выборке будут данные из редко изменяемых таблиц или колонок, а СУБД умеет отдельно кэшировать представление и имеется возможность настроить кэш, тогда можно сделать быстрые источники данных на представлениях, основанных на редко изменяемых таблицах. Самый яркий пример - получение древовидной структуры организации со сведениями о начальниках подразделений. Такой запрос отягощен рекурсивностью, а данные редко изменяются. Можно из такого запроса сделать вью и правильно закэшировать. И использовать структуру организации в других запросах станет проще, однотипно, и возможно, более производительнее.
    Ответ написан
    Комментировать
  • Как сделать запрос к самой базе данных (SQL)?

    @alexalexes
    MySQL. Если хоть раз открывали phpmyadmin и видели в списке схем information_schema. То это оно, что вы ищите. В этой схеме лежит весь конструктив базы. Туда и нужно обращаться, чтобы вытащить сведения об архитектуре.
    Select distinct table_schema, table_name
    from information_schema.colums
    where column_name = 'имя поля'

    Oracle. Тоже есть некоторые "супер-таблицы" со сведениями о структуре:
    SELECT table_name, column_name, data_type, data_length
    FROM USER_TAB_COLUMNS
    WHERE column_name = 'имя поля'

    Под каждую СУБД есть свои источники-таблицы структуры самой базы, но реализованы они по разному.
    Ответ написан
    Комментировать
  • Как правильно сформировать регулярное выражение php?

    @alexalexes
    Просто взял регулярку из ответа.
    <a\s.*?href="(.+?)".*?>\[photo-.+<\/a>
    И методом тыка подобрал в онлайн редакторе.
    Ответ написан
  • Как из массива объектов удалить дублирующиеся объекты?

    @alexalexes
    Можно удалить id из элемента массива (точнее из копии элемента), оставшиеся свойства засериализовать, от сериализации найти md5 хэш - это и будет ориентир для уникальности элемента.
    $out_array = [];
    foreach($donates as $donate)
    {
       $donate_copy =  $donate; // копируем элемент массива
       unset( $donate_copy->id); // удаляем уникальное свойство из элемента
       $key = md5(serialize($donate_copy)); // получаем уникальный ключ по содержанию остальных свойств
       $out_array[$key] =  $donate; // добавляем исходный элемент в новый массив по уникальному ключу
    }
    Ответ написан
    2 комментария
  • Как выдавать пустую страницу в PHP?

    @alexalexes
    Проблема такой защиты от DDOS на PHP в том, что атакующий пользователь все же успевает запустить скрипт на PHP, хоть и с минимальными ресурсами. Если у вас архитектура серверного приложения построена не на event loop (как правило, обычные сайты), то для каждого запущенного скрипта выделяется отдельный системный процесс - не самый экономный вариант работы PHP сервера.
    Поэтому, нерадивых пользователей лучше отшивать как можно раньше.
    Идентифицировать плохого пользователя вы можете и на PHP, а вот работу по его отсечению лучше доверить системе, которая стоит перед PHP сервером. Это может быть и Apache, и Nginx.
    Определяете пользователя и добавляете его в файл черного списка по IP, user agent или cookie, который будет обрабатывать настроенный Apache или Nginx.
    Лучше конечно, чтобы это был отдельный файрвол, еще лучше - на железке (но в условиях арендуемого хостинга такое маловероятно).
    Ответ написан
    Комментировать
  • Как извлечь текст из exe файла?

    @alexalexes
    В общем случае эта задача реинжиниринга ресурсов. Для простого копипастинга не имеет смысла.
    Если нужно выдрать какую-то простыню текста, которая выводится на экран или в окне продолжительное время, чтобы можно было сделать снимок, то самым эффективным будет метод фото или видео захвата экрана с последующим OCR распознаванием текста по отдельным кадрам.
    Все остальное очень затратно, если превентивно не обладать знаниями, чем скомпилирован exe, и есть ли возможность обратно распаковать его при такой-то технологии комплиляции.
    Ответ написан
    Комментировать
  • Как заполнить столбец с foreign key?

    @alexalexes
    Это делается апдейтом с подзапросами.
    update table tb
          set tb.type_id = (select tp.id from types tp where tp.name = tb.type_name limit 1) -- выбираем подзапросом id из справочника по совпадению наименования поля в обновляемой таблице
     where tb.type_id is null -- страховка, что будем обновлять не установленные значения
         and exists(select 1 from types tp where tp.name = tb.type_name) -- будем ставить ключ, если есть наименование в справочнике types

    PS: Прежде чем выполнять update, убедитесь при помощи select с тем же where, что вы вставите нужные для вас значения в поля секции set. По принципу поговорки: "Семь раз select-ни - один раз update-ни".
    PPS: Желательно, избегать ситуаций, когда вам периодически нужно нормализовывать структуру данных, в идеале, при insert-е нужно сразу определять ключик, а поле наименования использовать только тогда, когда нужного наименования нет в справочнике.
    Ответ написан
  • Как вытащить информацию из XML вне зависимости от используемых неймспейсов?

    @alexalexes
    Читаете каждый узел, определяете его имя, читаете его атрибуты.
    Если элемент имеет признаки определителя неймспейсов, например, называется export и имеет атрибуты xmlns:ns*, то это и есть определитель наймспейса. Нашли определитель, останавливаете поиск определителя.
    Возможно, для дальнейшего чтения нужно взять этот список атрибутов и искать только этих потомков.
    PS: Термин определителя неймспейсов взят от балды. Для такой структуры данных нужна вполне определенная техническая документация, которая должна давать исчерпывающий ответ, как ее использовать.
    Ответ написан
    1 комментарий
  • Как сделать подобное меню?

    @alexalexes
    Решение без JS:
    Принцип действия: Над кнопкой показа меню добавляется скрытый чекбокс, который выступает как триггер состояния. Состояние чекбокса управляет применяемым css правилом на меню.
    Кнопку "Server systems development" и скрываемое меню делаете в одном контейнере top-left-container.
    На том же уровне, где находится меню делаете прозрачный input type="checkbox" над кнопкой "Server systems development".
    Вывод и скрытие меню задаете примерно такими правилами:
    div.top-left-container input[type="checkbox"]:checked ~ div.menu
    {
    /*анимация появления меню*/
    }
    div.top-left-container input[type="checkbox"]:not(:checked) ~ div.menu
    {
    /*анимация скрытия меню*/
    }

    Решение c JS:
    Вешаете обработчик на кнопку Server systems development, проверяете наличие класса отображения на меню. Если нет класса, то добавляете, если есть то убираете (в Jquery будет использоваться функция toggle).
    Ответ написан
    Комментировать
  • Какие есть варианты устранения ошибки Memory Error у RAID контроллера?

    @alexalexes
    Ошибка намекает, что что-то не так с оперативной памятью контроллера.
    Многие мануалы рекомендуют просто снять контроллер и планки памяти контроллера и собрать их обратно.
    Ответ написан
    1 комментарий
  • Как обрабатывать Undefinded в JSON (Ajax jquery)?

    @alexalexes
    Если у вас железобетонно всегда присутствует объект data.noticeInfo, но временами отсутствует свойство document, то можно проверять наличие так:
    if('document' in data.noticeInfo)
    {
    }

    или так, если нужно различать свойства обусловленные прототипом и доприсвоенные свойства:
    if(data.noticeInfo.hasOwnProperty('document'))
    {
    }

    Если свойство лежит глубоко, а проверять существование цепочки свойств/объектов до него лень, не схлопотав предупреждения отладчика, или запись получается слишком громоздка, то нужен аналог функции isset из PHP для JS.
    if(typeof data.noticeInfo.document != "undefined" && data.noticeInfo.document !== null)
    {
    }
    Ответ написан
    Комментировать
  • Как получить удаленный доступ к телефону?

    @alexalexes
    Все перечисленные способы будут либо незаконны, либо аморальны, либо приведут к ожирению.
    Ответ написан
    Комментировать
  • Почему Удаляются записи из БД, ООП, php?

    @alexalexes
    ... на глобальном сбой.

    Вероятно, нужно докопаться до текста ошибки, чтобы понять, в чем дело?
    Но можно предположить, что от места выполнения у вас чувствительна вот эта строчка:
    $this->go_to_back_one_stap = explode('.ru', $_SERVER['HTTP_REFERER']);

    Выведите в отладочный файл значение $_SERVER['HTTP_REFERER'] на боевом окружении и посмотрите, то ли вы ожидаете в ней значение, чтобы разделить ее по '.ru' и взять элемент с индексом 1.
    Ответ написан
  • Как оптимально сделать таблицу умножения?

    @alexalexes
    Вот решение на Oracle.
    Достоинства:
    1. Подобрано максимально короткое описание вспомогательной выборки factor от 1 до 10 без перечисления ее элементов или обращения к другим таблицам.
    2. Поскольку нужно получить декартово произведение вспомогательной выборки, и не хочется повторять ее описание, то используем with.
    3. Не нравится писать слово join? У декартового пересечения нет условий, значит с соединением таблиц справится обычная запятая.
    Недостатки:
    1. СУБД должна мочь в рекурсивные запросы ( ... connect by ... ).
    2. СУБД должна мочь в выносимые запросы (with ...).
    3. Скорость рекурсии несколько ниже чем просто перебор описания 10 строк.

    with factor as (select level as lvl from dual connect by level < 10)
    
    select to_char(f1.lvl) || 'x' || to_char(f2.lvl) || '=' || to_char(f1.lvl * f2.lvl) as multi
    from factor f1,
        factor f2
    Ответ написан
    Комментировать
  • Можно ли работать двумя программами с одной базой данных?

    @alexalexes

    Обе программы получают из базы данные и работают с ними. Так вот я хочу исключить вероятность получения одних и тех же данных обеими програмамми. Сейчас у меня в коде используется using и в нем идет открытие соединения. Далее, получаем данные, в определенном столбце таблицы я помечаю, что данные взяты, что свидетельствует второй программе о том, чтобы она эти данные уже не брала.

    Основываясь на этом комментарии, могу сказать, что вам нужно познакомиться с теорией: шаблоном проектирования "Планировщик"
    и системы на основе очереди задач.
    Помимо "двух программ", в вашем случае это воркеры (исполнители), в вашей системе должен еще присутствовать планировщик, имеющий приоритет над воркерами, который будет формировать задачи.
    Назначать задачи исполнителям может как планировщик, так и сами исполнители.
    Каждая задача должна иметь идентификатор, статус выполнения, назначенный исполнитель, а также перечень объектов, которые должен обработать исполнитель. Как раз перечень объектов и будет ограничивать работу одного исполнителя, чтобы они "не лезли на одни и те же записи в таблицах".
    Конечно, нужно познакомиться с транзакциями и уровнями блокировки таблиц - это только часть инструментов реализации системы, но без планировщика вам не обойтись.
    Ответ написан
    Комментировать
  • Как сортировать с приоритетом массив?

    @alexalexes
    Первым действием перетранслируйте этот массив во вспомогательную структуру:
    {
        100: // groupId
        {
           1:  [1, 3], // source: [id, id, .....]
           2: [2]
        },
       ......
    }

    Тогда вам будет проще снимать метрики для сортировки: считать какие source есть у группы (сколько, каких нет), и какие id входят в source.
    Ответ написан
  • Как поставить перенос строки в функции mail?

    @alexalexes
    https://www.php.net/manual/ru/function.mail.php
    Читайте документацию:
    Каждая строка должна быть отделена символом CRLF (\r\n). Строки не должны быть длиннее 70 символов.
    Ответ написан
    Комментировать