Задать вопрос
  • Здравствуйте, нужно связать два роутера на расстоянии ≈150 метров, как это сделать?

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

    @alexalexes
    Никак. Любая составляющая сайта, переданная на сторону клиента, может использоваться и изучаться клиентом как угодно и какими угодно инструментами (кто сказал, что на другой стороне будет браузер?), как в полезном ключе, так и в зловредном.
    Краеугольным вопросом безопасности вашего ресурса является не противодействие анализу той части, которая получает клиент, а сделать так, чтобы серверная часть не реагировала на запросы, которые не соответствуют бизнес-логике клиентской части (или считала ошибкой, выводя соответствующее сообщение).
    На стороне сервера нужно проверять валидность данных, получаемых от клиента, как по правам доступа (имеет ли право клиент совершать определенное действие), так и по содержанию (данные, приводящие к изменениям, не будут ли приводить к противоречивому состоянию базы?).
    Ответ написан
    1 комментарий
  • Как сортировать позиции в БД по заданным весам?

    @alexalexes
    Ну, если буквально понимать задачу, и у вас нужная характеристика имеет конкретное значение, то сортировать список нужно так:
    select *
      from <таблица/соединенные таблицы для выборки товара> Tab1
    where <условия фильтрации>
    order by
    case
      when Tab1.Приоритетное_свойство = :входная_приоритетная_характеристика
      then 1 -- запись с приоритетным свойством получит повышенное очко для первичной сортировки
      else 0 -- запись с неприоритетным свойством получит пониженное очко для первичной сортировки
    end desc,
    <Другие условия сортировки (по дате добавления, имени и т.д.)>

    Если таких приоритетных характеристик несколько и они равнозначны, то можно сортировать по количеству подходящих под условие характеристик:
    select *
      from <таблица/соединенные таблицы для выборки товара> Tab1
    where <условия фильтрации>
    order by
    case
      when Tab1.Приоритетное_свойство_1 = :входная_приоритетная_характеристика_1
      then 1 -- запись с приоритетным свойством получит повышенное очко для первичной сортировки
      else 0 -- запись с неприоритетным свойством получит пониженное очко для первичной сортировки
    end
    + -- очки приоритетов складываем
    case
      when Tab1.Приоритетное_свойство_2 = :входная_приоритетная_характеристика_2
      then 1 -- запись с приоритетным свойством получит повышенное очко для первичной сортировки
      else 0 -- запись с неприоритетным свойством получит пониженное очко для первичной сортировки
    end
    + 
    -- ... и так далее все характеристики
     desc, -- 
    <Другие условия сортировки (по дате добавления, имени и т.д.)>

    Если приоритеты имеют иерархию, то через запятую в order by раскладываем case от важной характеристики, к менее важной.
    select *
      from <таблица/соединенные таблицы для выборки товара> Tab1
    where <условия фильтрации>
    order by
    case
      when Tab1.Приоритетное_свойство_1 = :входная_приоритетная_характеристика_1
      then 1 -- запись с приоритетным свойством получит повышенное очко для первичной сортировки
      else 0 -- запись с неприоритетным свойством получит пониженное очко для первичной сортировки
    end desc, -- эта более важная характеристика
    case
      when Tab1.Приоритетное_свойство_2 = :входная_приоритетная_характеристика_2
      then 1 -- запись с приоритетным свойством получит повышенное очко для первичной сортировки
      else 0 -- запись с неприоритетным свойством получит пониженное очко для первичной сортировки
    end desc, -- эта менее важная характеристика
    -- ... и так далее все характеристики
    <Другие условия сортировки (по дате добавления, имени и т.д.)>

    Можно комбинировать подходы, если есть куча характеристик на одном уровне иерархии.
    Ответ написан
    1 комментарий
  • Как подписать документ простой электронной подписью?

    @alexalexes
    Простая электронная подпись - это просто фиксация факта, что такой-то авторизованный пользователь сделал определенное действие (разместил файл, утвердил файл, сказал что "копия верна") над объектом (точные координаты размещения файла) тогда-то.

    Вам нужно любым способом создать реестр для фиксации таких действий, в которую будете записывать параметры:
    - идентификатор сессии пользователя;
    - идентификатор пользователя;
    - дата и время действия;
    - вид действия (размещение)
    - параметры объекта, над которым совершено действие (идентификатор файла или путь на диске, желательно md5 файла).
    - статус действия (осуществлено, отклонено, устарено, ошибка и т.д.)

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

    Также нужен бот, который будет следить за хранилищем файлов и сравнивать параметры файла с реестром, чтобы сбрасывать статусы, если файлы менялись.
    Ответ написан
    2 комментария
  • Как сделать слайдер со сменяющимся текстом внутри?

    @alexalexes
    Учить основы CSS - с чем едят свойство position.
    В данном случае для вас неожиданностью является поведение свойства position: absolute; у контейнера .header__slider-text.
    Чтобы абсолютное позиционирование было относительно слайда, дайте контейнеру слайда .header__slider-item свойство position: relative;
    Ответ написан
  • Верстка сложных кнопок адаптив?

    @alexalexes
    64997c8329d1e269390254.png
    Если без svg, то можно сделать 3-мя текстурами.
    Кнопка будет фиксированной высоты, но безразмерна по горизонтали.
    Ответ написан
    1 комментарий
  • Код из файла *.js выполняется после формирования DOM?

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

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

    @alexalexes
    О порядке добавления записей не нужно заботиться.
    У СУБД нет задачи хранить записи в строгом порядке, ваша задача понять, удовлетворит ли вас результат сортировки, если при выборке задать сортировку по darg-w:
    select *
      from verbs
    order by darg-w

    Если хотите получать список в порядке добавления, то логично сортировать по id:
    select *
      from verbs
    order by id

    Если хотите особую сортировку, которая не подчиняется ни id, ни естественному весу строк, то можете ввести новую колонку и следить за позиционированием строк при выборки сами, или по каким-то другим правилам вычислять позицию:
    select *
      from verbs
    order by position -- дополнительное поле, в которое будете сами или программно вбивать порядок сортировки

    Или запрос может выдергивать сам определенные строки, давая им высший приоритет (можно написать любое правило, что требует бизнес логика, или что в голову сбредет):
    select *
      from verbs
    order by case when id = 100 then 0 else 1 end -- даем записи id=100 наивысший приоритет, в любом состоянии списка она будет на 1 месте!
            , id -- остальные записи отсортируются в порядке добавления

    PS: Важно, чтобы поля, которые применяются в сортировке, были проиндексированы (в схеме СУБД были созданы индексы по данным полям и они своевременно пересчитаны).
    Ответ написан
    1 комментарий
  • Можно ли как-то получить html до определенного тега?

    @alexalexes
    1. Получить объект дерева документа d1.
    2. Создать пустой объект документа d2.
    3. Получить непосредственных детей объекта d1.
    4. Перейти к обработке очередного ребенка d1.
    4.1. Ребенок не содержит в себе признаков искомой ссылки - да, идем на шаг 4.2, нет - идем на шаг 5.
    4.2. Копируем ребенка в d2, идем на шаг 4.
    5. Прекращаем обработку детей d1, преобразуем объект d2 в текст.
    Ответ написан
    Комментировать
  • Как проверить принадлежат ли массивы из одной таблицы массивам в другой?

    @alexalexes
    С помощью функции json_to_recordset проводите нормализацию таблиц, чтобы на выходе pair получилась вот такая псевдотаблица-выборка:
    pair
    id_group, name
    1, "ананас",
    1, "апельсины",
    2, "ананас",
    2, "арбуз"
    ...
    Дальше тоже самое делаете с order_list.
    Ну, а дальше все приведено в 3-ю нормальную форму, можно, наконец, использовать SQL-ные сравнения/соединения этих псевдовыборок и высчитывать кол-ва того-сего.
    PS: Такое решение годится как разовое для получения результата, например, если вам нужно срочно сделать нестандартный отчет для руководства, а структура таблиц спроектирована из рук вон плохо.
    Нужно изначально планировать структуру базы так (приводить к 3-й нормальной форме), чтобы не прибегать к декомпозиции полей с помощью функций JSON, если компоненты внутри JSON будут использоваться для соединения между таблицами.
    Ответ написан
  • Как передавать один параметр, а не 3?

    @alexalexes
    FROM views v JOIN memes m JOIN comments c
    Вы конечно, не указали, в какой СУБД пишете, но странно видеть JOIN без ON или USING.
    Если это эквивалент синтаксиса с USING, то вы увидите статистику, если по пользователю есть И просмотры, И мемы, И комментарии. Если в одной из таблиц не будет записей, то пользователь вывалится из статистики.
    Если это эквивалент:
    FROM views v, memes m, comments c
    То такое декартово произведение таблиц с использованием distinct будет не производительно.
    Рационально вам написать такое:
    SELECT (select COUNT(v.id) from views v where v.user_id = u.user_id )      AS просмотры,
           (select COUNT(DISTINCT v.meme_id) from views v where v.user_id = u.user_id) AS [уникальные просмотры],
           (select COUNT(m.id) from memes m where m.user_id = u.user_id)      AS [выложено мемов],
           (select COUNT(c.id) from comments c where c.user_id = u.user_id)      AS [написано комментариев]
      FROM users u -- лучше связаться с таблицей users
     WHERE u.user_id = 1

    Тогда каждый подзапрос будет работать по своей агрегации (да, если по какой-то таблице не будет записей, то вы увидите по ней ноль, а не пустую строчку по всем параметрам), дистинктовать вам нужно только по параметру уникальные просмотры - но его использование не связано с размножением записей при объединении таблиц, так что он посчитает его достаточно быстро.
    PS: Если вы не забыли создать индексы для v.user_id, v.meme_id, m.user_id, c.user_id, то должно все летать на космической скорости.
    Ответ написан
  • Как копировать текст вместе с буллитами?

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

    @alexalexes
    1. Вычисляете агрегированную выборку - подзапрос A.
    2. Сортируете выборку в том порядке, как собираетесь нумеровать - подзарос B.
    3. Нумеруете строки доступной функцией в конкретной СУБД (в Oracle это rownum, в остальных средах есть row_number, в MySQL 5 версии нужно делать костыль из пользовательской переменной @ и if-a).
    select rownum, B.*
    from (select A.*
                from (SELECT v.user_id,
                      u.nickname,
                     COUNT(DISTINCT v.meme_id) as meme_count
                    FROM views as v
                       join  users u on u.id = v.user_id
                   GROUP BY v.user_id, u.nickname) A
            order by A.meme_count desc) B
    Ответ написан
  • Как закрыть доступ к странице, если пользователь не авторизован?

    @alexalexes
    Ну, так основное правило в вебе касаемо кейса "сделать ресурс закрытым от пользователей, у которых нет прав" - это не спрятать ссылки на этот ресурс (в вашем случае дать пользователю редирект). А не давать пользователю получать данные на самом ресурсе, куда ведут ссылки.
    То есть, вам нужно чекать авторизацию и набор необходимых прав (если есть разделение на роли, помимо наличия факта авторизации), не только для редиректа, но и на самом ресурсе, куда пользователь может попасть любым путем (на personal_product.php).
    PS:
    $select = mysqli_query($conn, "SELECT * FROM employers WHERE username='$username' AND password='$password'");

    За склейку параметров запроса в виде строки, нужно давать высшую меру наказания и вам, и автору статьи, откуда вы срисовали этот пример. Используйте, подготовленные запросы. Наказание отяжелено еще тем, что в mysqli_* функциях есть весь инструментарий, чтобы сделать запросы безопасными, и не учить никого как это делать иначе.
    Ответ написан
    1 комментарий
  • Почему лагает курсор мыши при запуске торрентов?

    @alexalexes
    Можно в роутере зафиксировать канал wifi в крайнее меньшее или большее значение, если он свободен (точки доступа соседей не мешают).
    Либо отключить в роутере диапазон частот 2,5ГГц (в этом диапазоне работают большинство радиомодулей мышей и клавиатур), оставить только 5ГГц. Если все устройства могут подключаться по 5ГГц и держать приемлемый уровень сигнала.
    Ответ написан
    Комментировать
  • Как позвонить с пк или ноутбука Windows 10 если нет Bluetooth?

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

    @alexalexes
    Пишется один рекурсивный запрос одного из видов (или оба вида, чтобы два раза не вставать).
    1) Получения списка детей, если известны параметры родителя (до определенного уровня, с пропуском неважных уровней).
    2) Получения списка предков (до определенного уровня, с пропуском неважных уровней), если известны параметры ребенка.
    Выносите эти запросы в секцию with, даете им понятные псевдонимы.
    Далее ниже по тексту пишите уже привычные запросы, используя эти псевдонимы, словно это view или кеш-таблицы.

    PS: Если иерархическая выборка нужна в подзапросе, и она зависит от изменяемых в ходе выборки входных параметров ребенка/родителя, то тут нужно выносить 1 и 2 в хранимые функции, где результат функции будет табличный курсор. При использовании результата этого курсора, обычно, делают преобразование результата функции в тип "таблица" через выражения cast.
    Ответ написан
    Комментировать
  • Как работать с меню, где нет сетевых дисков?

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

    @alexalexes
    У речи помимо звуковых характеристик есть еще и другие.
    Скорость произношения, паузы между словами, ударения, дефекты произношения, акцент, говор.
    Если анализировать среди малой группы людей, то при детальном анализе речи, а не голоса, изменение голоса не поможет замаскироваться.
    Ответ написан
    Комментировать