• Почему событие onchage не срабатывает для select?

    @alexalexes
    Есть события: click, change, input и т.д.
    Привязка обработчика соответствующего события с использованием атрибута тэга осуществляется с приставкой on:
    <select id="selectTheme" onchange="alert('Theme changed')">
    </select>

    Но в тоже время, привязка обработчика события с использованием addEventListener не требует указания on, берется само название события и с названием атрибута не нужно путать:
    sel.addEventListener('change', (event) => {
        	alert('Theme changed');
        })
    Ответ написан
    3 комментария
  • Для чего нужны спецификаторы в C?

    @alexalexes
    Чтобы дать функции printf дополнительную информацию, в каком виде вы хотите вывести результат второго и последующих аргументов этой функции. Спецификаторы имеют определенное отношение к такому понятию, как тип данных. В выводе типа вещественного числа можно настроить знаковую точность, поэтому есть не только %f, но и %0.f и т.д.
    https://ru.wikipedia.org/wiki/%D0%A1%D0%B8%D1%81%D...
    Ответ написан
    Комментировать
  • Как собрать в один массив несколько переменных из input с одинаковыми ID?

    @alexalexes
    Если наступить на горло веб стандарту, игнорируя условие уникальности, то к id нужно относиться как обычному атрибуту тега. Следовательно, для захвата всех элементов с одинаковым id в коллекцию нужно использовать селектор вида:
    input[id="id_imgs"]
    Ответ написан
    1 комментарий
  • Как записать данные из запроса VK в бд?

    @alexalexes
    Отработать навык, как вставить в базу вообще что-то.
    Например, так https://html5css.ru/php/php_mysql_insert.php
    Обратите внимание, что у процесса взаимодействия с БД есть несколько фаз работы:
    подключение к базе, формирование запроса, добавление параметров к запросу, выполнение запроса и получение результата (если нужен действия статус или выборка).
    Ответ написан
    Комментировать
  • Как уменьшить разрешение картинки без потери качества?

    @alexalexes
    Если это какая-то карта или схема, и необходимо сохранить детали, то лучше перерисовать это изображение в вектор, например использовать формат svg и редактор соответствующий.
    Тогда растягивание окна просмотра пол пикселя сюда, пол пикселя туда, масштабирование на пару процентов, никакой роли играть не будет. Все останется четким.
    Ответ написан
    Комментировать
  • Можно ли из уравнения квадратной кривой Безье выразить значение параметра t?

    @alexalexes
    Можно.
    Для трех точек кривая Безье описывается как:
    P = (1−t)^2*P1 + 2(1−t)*t*P2 + t^2*P3
    Для координат X уравнение примет вид:
    X = (1−t)^2*X1 + 2(1−t)*t*X2 + t^2*X3.
    X - эта координата на кривой Безье, и X1, X2, X3 - это координаты X опорных точек.
    Очевидно, что X будет перебираться в области min(X1,X2,X3) до max(X1,X2,X3), но не факт что каждый X даст точку (или сразу две точки) на кривой Безье.
    Получается, что X1,X2,X3 - вы задаете сами, а X перебираете исходя из условия выше.
    Осталось разобраться, как найти t.
    Перепишем уравнение, чтобы известные координаты стали константами квадратного уравнения.
    X = X1 - 2*X1 + X1*t^2 + 2*X2*t - 2* X2 * t^2 + t^2*X3
    X = (X1 - 2*X2 + X3) * t^2 + 2 * (X2 - X1) * t + X1
    Получается квадратное уравнение:
    (X1 - 2*X2 + X3) * t^2 + 2 * (X2 - X1) * t + X1 - X = 0
    Коэф, которого:
    a = X1 - 2*X2 + X3
    b = 2 * (X2 - X1)
    c = X1 - X
    Решаете его, получаете 2 решения.
    Если есть решение с t в отрезке от 0 до 1, значит точка определена на кривой Безье (могут быть оба решения входить в отрезок 0,1 - это две разные точки!).
    Зная t, можно найти Y координату:
    Y = (1−t)^2*Y1 + 2(1−t)*t*Y2 + t^2*Y3
    Если решение уравнения не входит в данный отрезок, либо нет решения с действительным числом (дискриминант оказался отрицательным), то на данной координате X нет точки на кривой Безье.
    PS: Скорее всего вы найдете Y близкие к целочисленным значениям с некоторой погрешностью, можно округлять к ближайшему целому.
    Ответ написан
    Комментировать
  • Как организовать обработку url запросов на сайте на стороне сервера?

    @alexalexes
    Но это очень ресурсозатратно, поэтому я хочу создать отдельный серверный обработчик, занимающийся абсолютно всеми обращениями к сайту. Допустим, если сайт называется asd.com, то любое обращение через asd.com (asd.com/registration, asd.com/documents/users, asd.com и т.д.) должно проходить через этот скрипт. Сам скрипт, считывая url запрос, выдавал бы определенный нужный файл, а сама строка url при необходимости изменялась бы при помощи js (pushState и replaceState например)

    Ну, вы уже описали технологию, берете любой популярный веб-сервер - php, node.js, python, asp net и реализовываете.
    А каким образом вообще можно организовать сервером обработку url

    Любой запрос, прежде чем попасть на выполнение в серверный скрипт попадает на обработку на http сервер.
    Скорее всего, вы будете работать с apache или nginx. Ответ на этот вопрос кроется в искусстве конфигурирования файла htaccess или nginx.conf.
    PS: После того, как http сервер перенаправит запрос согласно правилам конфиг. файла до нужной точки входа - тому файлу-скрипту, с которого начнется выполнение кода на сервере, сам скрипт точки входа может передать управление другому исполняемому файлу компоненту или просто подключать нужные скрипты, согласно параметрам url. Этот процесс называется роутингом, а координирующий скрипт - роутер.
    Если вы поищите "Роутер или роутинг в <любимая среда разработки/фреймворк>" то найдете пример реализации.
    Причем, роутинг можно реализовывать, как на стороне сервера (роутинг php/laravel/node.js), так и на стороне клиента (клиентские фрейворки, например vue).
    Самый наколеночный вариант будет выглядеть так.
    После того, как научитесь создавать многокомпонентное серверное приложение и связывать их, можете посмотреть, что такое Rest API, GraphQL, TreeQL.
    Ответ написан
    Комментировать
  • Как изменить положение у строчно-блочных элементов списка?

    @alexalexes
    </li><!-- тут символ переноса строки, вносит свою лепту как текстовая нода, имеющая небольшие, но геометрические размеры -->
          <li class="modules-card layout">

    Часто такой эффект выявляется, когда используется display: inline-block.
    Выход - не переносить li элементы (и не оставлять пробелы), или нивелировать размер текстовых нод с помощью css.
    Ответ написан
    Комментировать
  • Структуризация и импорт базы для интернет магазина?

    @alexalexes
    артикулом/категорией/брендом/названием/ценой

    Редко какое свойство товара останется скалярным значением с развитием структуры базы и не перейдет в таблицы-справочники.
    Что же сразу должно бросится в глаза начинающему проектировщику БД - это то, что нужны таблицы:
    - Категория товара
    - Бренд
    - Цена на товар (одна запись соответствует цене товара за определенный период, может нести сведения о скидке и т.д.)
    Причем, валюта цены тоже может быть отдельным справочником.
    У товара могут быть габариты ДxВxШ.
    Название оси габарита - эта тоже справочник.
    Размерность - см, м, дюймы - тоже справочник.
    Так что, смотрите, любое свойство можно превратить в справочник, и довольно разобранный на составляющие.
    Ответ написан
    Комментировать
  • Перенос таблиц из одной бд в другую в postgresql?

    @alexalexes
    В общем случае, вам нужно подучить, чем отличаются
    а) запросы, которые модифицируют архитектуру базы (Create table, Alter Table, Create index и т.д.)
    б) от запросов, которые работают с данными текущей архитектуры (SELECT, INSERT, UPDATE, DELETE).

    Сделав экспорт базы в формате sql, вы обнаружите, что дамп состоит из запросов, которые сначала создают или модифицируют архитектуру базы, а зачем, идут запросы, которые вставляют данные.

    Например в db1 есть table_user с сотнями данных, а в db2 его нет. Нужно, чтобы table_user перешел в db2, но без данных, нужно чтобы она просто создалась.


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

    И второй вариант событий: в db1 и db2 есть table_user, но у db1 table_user появилось 20 новых колонок, как их передать в более легком виде db2 table_user?

    Тут посложней.
    Изучайте alter table add column и применяйте его для недостающих колонок. Не забудьте из дампа взять запросы, которые создают или модифицируют другие объекты, связанные с новыми колонками.
    Ответ написан
  • Как сделать проверку наличия слов?

    @alexalexes
    Самый тупой вариант без регулярок:
    $email_exploded = explode('@', $email);
    if(count($email_exploded) == 2 && ($email_exploded[1] == 'gmail.com' || $email_exploded[1] == 'mail.ru'))
    {
      echo 'Домен в порядке, проходите!';
    }
    Ответ написан
    Комментировать
  • Как настроить автоматический вход в личный кабинет на сайт?

    @alexalexes
    В качестве ключа для автоматического входа нужно использовать идентификатор открытой сессии.
    Ни в коем случае не хранить пароль.
    Нежелательно светить логин и id, по которому авторизовывались.
    Идеально, держать подальше идентификатор сессии от JS скрипта, сделать куку только http only и позволить проверять ее только серверу.
    Ответ написан
    2 комментария
  • Процедурная генерация случайного мира из 100 на 100 клеток?

    @alexalexes
    Интуитивно можно действовать так:
    1. Капнуть разными красками в N начальных точках, выбранных случайно.
    2. Выбрать цвет для покраски следующей точки (случайно или последовательно).
    3. Найти точку выбранного цвета, с которой еще не работали (нужно выходить из цикла если отработали все точки).
    3.1. Если непокрашенных соседей нет, то запоминаем, что работали с этой точкой, идем опять на шаг 3 (или на шаг 2, можно случайно выбирать).
    4. Выбрать у этой точки непокрашенного соседа (случайным образом).
    5. Покрасить соседа выбранным цветом.
    6. Запомнить, что работали с точкой, выбранной на шаге 3. Перейти к шагу 2.
    7. Кончились точки с которыми не работали - скорее всего пора выводить результат.
    Ответ написан
    Комментировать
  • /deletethis/deletethis?

    @alexalexes
    Не факт, что там будет изучение именно веб'а или нужного мне ЯП.

    Ни колледжи, ни университеты не созданы, чтобы следовать трендам. Вас просто познакомят с систематизированными знаниями о Computer Science. Что такое машина Тьюринга, как работает центральный процессор, как данные из ethernet кабеля на нижнем уровне превращаются в http запрос на верхнем уровне, как работать с графами, как работает диспетчер задач в ОС, как распределяется память между процессами, какова сложность алгоритмов и т.д. Вы получите, только те знания о технологиях, которые стали фундаментальные, классикой жанра.
    Главной задачей профессии вашей станет не получение этих знаний, и даже не тех знаний, которые дают тренды. А чтобы найти заказчика, или устроиться на место работы, куда приходят нужные вам заказчики (желательно, чтобы они были достаточно денежны), и обслуживать их интересы. У них будут потребности в некой системе, в которой будет кнопочка "сделать хорошо", ваша задача будет сделать кнопочку "сделать очень хорошо", или даже "супер". Заказчику будет не важно, пишите ли вы на пайтоне или на пыхе, получили навыки работы с бэком две недели назад или пашете 5 лет. Если вы напишите свой продукт достаточно качественно и в срок, то ваши потуги оценят (желательно принимать только денежные оценки). Вот в этом и будет философия "доучивания".
    В универ стоит идти, если не хотите сразу из школы в армию. В универе можно будет учиться на 3, посещать меньше всего занятий, насколько это возможно, и одновременно искать место, где можно работать с теми самыми заказчиками.
    Ответ написан
  • Сравнение времени mysql?

    @alexalexes
    Минус переставьте в нужное место.
    SELECT * FROM `test` WHERE `time` >= (now() - INTERVAL 10 MINUTE);
    Ответ написан
    3 комментария
  • Как сделать одно действие с несколькими значениями?

    @alexalexes
    Если нужно присвоить одно и то же значение атрибутам у нескольких определенных строк, то это делается элементарно.
    update `table` set атрибут_не_первичный_ключ = 1
    where id in (1, 2, 4, 10);

    Другое дело, если это касается атрибутов с уникальным свойством.
    Если нужно сделать рокировку значений, то поскольку первичный ключ имеет свойство уникального значения, то нужно действовать в два этапа.
    1. Переписать id-шники интересуемых строк так, чтобы новый id был за диапазоном присваиваемых id.
    Можно переписать в большую сторону, если у вас максимальное число записей пару тысяч, то воспользоваться новыми значениями, например, от миллиона.
    Но проблема в том, что если система не остановлена во время этой рокировки, то вероятно, вставка новых строк будет происходить с присвоением макс. последнего значения +1, тогда новые строки окажутся с миллионными id-шками.
    Нужно взять диапазон отрицательных чисел в качестве промежуточного состояния рокировки id.
    update table
    set id = case
       when id = 1 then -1
       when id = 2 then -2
       when id = 4 then -4
       when id = 10 then -10
       else id -- страховка от дурака, если неправильно описан in 
    end
    where id in (1, 2, 4, 10)

    2. Второй шаг заключается в том, чтобы переписать нашим отрицательным id новые положительные значения, чтобы каждая строка получила новые значения 1,2,4,10. Например, можно поменять местами id соседей.
    update table
    set id = case
       when id = -1 then 2
       when id = -2 then 4
       when id = -4 then 10
       when id = -10 then 1
       else id -- страховка от дурака, если неправильно описан in 
    end
    where id in (-1, -2, -4, -10)

    В итоге, такую операцию можно делать на работающей системе, не мешая созданию новых записей.
    Чтобы вообще исключить коллизии, то лучше оба запроса делать в одной транзакции, при этом можно использовать положительные значения не используемого диапазона значений id.
    Ответ написан
    3 комментария
  • Как получать котировки акций на Java?

    @alexalexes
    Вопрос слишком общий.
    Ответ тоже общий:
    1. Выбирается источник данных.
    2. Изучается формат данных, либо API.
    3. Ищется инструмент для данной среды разработки для чтения данного формата, либо обращения к API.
    4. Ищется инструмент визуализации полученных данных, либо используются встроенные компоненты.
    Ответ написан
    Комментировать
  • Как сохранить writeImage все файлы директории?

    @alexalexes
    $imagick->writeImage('*.webp');
    У вас имя файла на протяжении всего цикла одно и то же.
    Чему вы удивляетесь, когда файл перезаписывается несколько раз, и остается последний перезаписанный вариант?
    Решение:
    1. Нужно посмотреть, что выводится в $ext:
    var_dump($ext);
    2. Если это действительно имя открытого файла, то самое грубое решение, добавить нужное расширение в конце, несмотря на наличие jpg.
    $imagick->writeImage($ext.'.webp');
    3. Хорошо бы посмотреть файл лога ошибок php - error_log. Возможно, есть еще какие-то проблемы с записью файлов.
    Ответ написан
  • Как сделать посуточный счетчик посещений (доработать старый)?

    @alexalexes
    Если вы понимаете, что делает этот запрос:
    UPDATE article SET visits=(visits+1) WHERE id='".$theme_idss."' LIMIT 1

    То по аналогии можно плюсовать интересуемый столбец:
    UPDATE article
    SET visits=(visits+1),
          today = today + 1 -- суточные посещения
     WHERE id='".$theme_idss."' -- когда разберетесь, что такое sql-инъекция, то перепишите все запросы, использующие такой стиль подстановки параметров (склеиванием строк)
    LIMIT 1 -- после того, как разберетесь, является ли id первичным ключом, можно убрать лимит

    Но при добавлении столбца нужно позаботиться, чтобы у столбца значение по умолчанию было 0.
    ALTER TABLE article
    ADD COLUMN today int default 0 AFTER visits

    В скрипте, который чистит таблицу раз в сутки предусмотрите запрос, обнуляющий суточный счетчик у всех статей:
    UPDATE article
    SET today = 0

    PS: Если хотите анализировать посещаемость, то лучше воспользоваться готовыми счетчиками от поисковых систем - Google Analytics или Яндекс-метрики.
    Если хотите все же использовать свой лог, то лучше его не удалять. Вдруг захотите выявить среднемесячное/суточное/годовое посещение или в каком то другом разрезе по разным разделам сайта. Для пересчета понадобится каждая запись посещения.
    Ответ написан
    2 комментария
  • Как получить значение элемента, зная его id в xml?

    @alexalexes
    Вам нужно оперировать двумя запросами к xml-дереву:
    1. Определить список узлов, для которых известны категории:
    //items/item[categoryId=//catalog/category/@id]
    2. Определить категорию узла при переборе результата запроса 1.
    //catalog/category[@id="тут вставляем код категории"]

    При вставке узла categoryname нужно ориентироваться не на categoryId, а на portal_category_id, поскольку вставлять новый узел до существующего легче, чем изобретать велосипед с функцией, которая делает вставку после.
    PS: Вопрос выглядит как задание, характерное для фриланса, поэтому можно только посоветовать, как его реализовать, без подробной реализации.
    Ответ написан
    Комментировать