Задать вопрос
  • Хорошая ли идея создавать БД на стороне клиентской части (фронтенда)?

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

    В любом случае, у вас эксклюзивная часть приложения, в которой, например, ведутся сведения об учетных записях пользователей, хранится состояние лицензий, должна находится на сервере. И там будет нормальная, взрослая СУБД.

    Суть в том, что имеющие SQL запросы (INSERT, JOINT LEFT - RIGT) делать на стороне клиента, и я задался вопросом себе, насколько это нужная задача, и какие аргументы мог бы противопоставить, что это нужно - не нужно?

    Если вы хотите собирать текст запросов на клиенте, передавать на сервер, и там исполнять.
    Не самый хороший вариант, но терпимо только в одном случае, если учетная запись пользователя в точности соответствует учетной записи в СУБД, и доступ к данным в СУБД четко ограничен правами доступа - из учетной записи в СУБД нельзя дотянуться ни до каких данных, не принадлежащих только этому пользователю.
    Но такое редко бывает, так что воздержитесь от этой практики, воспользуйтесь лучше GraphQL/TreeQL, чтобы ограничить API только тем функционалом и теми данными, которые необходимы для конкретного пользователя.
    Ответ написан
    2 комментария
  • Как организовать работу N com-портов одновременно?

    @alexalexes
    // Форма окна
        Ui::MainWindow *m_ui;
    
        // Флаг ожидания ответа
        bool m_waitAnswer;
    
        // Открываемый com-порт
        QSerialPort *m_comPort;
    
        // Приемный буфер
        QByteArray m_bufferRead;
    
        // Таймер
        QTimer *m_timerWaitAnswer;

    Эти свойства у вас отвечают за контекст одного конкретного порта.
    1. Нужно описать элемент-структуру по этим свойствам - тем самым опишите контекст порта.
    2. Сделать массив из этих элементов - массив контекстов портов.
    3. В каждом методе работы с портом обеспечить передачу входного параметра, чтобы указывать, какой i-ый элемент структуры использовать (какой контекст порта - конкретный порт), чтобы что-то делать с параметрами конкретного порта.
    Ответ написан
    4 комментария
  • Как ведут себя данные при удалении?

    @alexalexes
    СУБД до лампочки, в каком порядке хранить записи таблиц. Внутренняя логика лишь контролирует, чтобы чрезмерная перезапись данных не приводила к расползанию физических файлов СУБД, и то требуется внимание администратора.
    Порядок вывода записей вы задаете, когда хотите их, собственно, вывести. В любом месте запроса, где вы хотите оценить вес строки по порядку, вы, обязательно, воспользуетесь клаузой order by. Чтобы было по каким признакам сортировать, при проектировании схемы базы данных разработчик сам должен позаботиться, какими свойствами снабдить записи, чтобы можно было проводить сортировку. Можно элементарно сортировать по ID записи (первичному ключу), или оставлять датированные метки, или по алфавиту какого-нибудь текстового поля, иногда нужно отдельное числовое поле, чтобы принудительно задать свой порядок сортировки, не подходящий ни под один признак естественной сортировки других полей записи.
    Чтобы СУБД быстро отрабатывала вывод по критериям order by, лучше снабдить сортируемые поля индексами (индекс - это отдельный объект СУБД). Индексами как раз обеспечивается "магия" быстрого доступа к записям.
    Именно с ними случается вот эти действия, что вы описали в вопросе, когда происходит вставка, обновление, удаление записей:
    Cмещаются ли оставшиеся 4-10 записи вверх, занимая место удаленных 1-3 записей, и новые 4 записи вставляются на места 8-11, или сначала 3 из 4 новых записей займут места 1-3, а 4 запись будет внесена в 11 строку?

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

    @alexalexes
    в доте на 10 фпс упало

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

    На этом мониторе только VGA - это аналоговый сигнал. При повышении герцовки можно получить очень сильные искажения картинки. Можно, конечно, улучшить ситуацию - подобрать качественный кабель, заземлить комп, убрать посторонние источники электромагнитного шума, но такого же качества картинки не добиться, как у HDMI. Еще преобразователь из аналога в цифру внутри монитора может чудить, поскольку он работает на максимальных параметрах сигнала.
    Ответ написан
    Комментировать
  • Какой монитор лучше купить для rtx 4070?

    @alexalexes
    У меня сейчас монитор 2560x1440 27"

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

    @alexalexes
    Добавь на body какой-нибудь класс:
    <body class="body__with-background">
    </body>

    и повесь на него селектор с фоном:
    body.body__with-background {
      background: url(background.gif) no-repeat; /* Задаём фон GIF-картинкой */
    }

    тогда перебьет bootstrap-стиль фона.
    Ответ написан
    Комментировать
  • Как упростить код перебора ячеек?

    @alexalexes
    1) Чтобы сильно не повторяться кодом, можно добавить k-цикл:
    If Cells(i, j).Value = 2 Then
            Cells(i, j) = 1
        End If
    For k = 8 to 52 Step 4
        If (Cells(i, k).Value = 1) And (Cells(i, k+2).Value = "") Then
            Cells(i, k+2).Value = 0
        else ' ячейка i,k в одном прогоне цикла не может быть одновременно пустой и 1, тогда можно через else использовать, чтобы не обрабатывать второй if лишний раз
        If (Cells(i, k+2).Value = 1) And (Cells(i, k).Value = "") Then
            Cells(i, k).Value = 1
        End If
        End If
    Next k

    2) Чтобы ускориться, надо избавиться от дорогой операции извлечения и присваивания Value ячейке таблицы.
    Таблица - слишком сложный объект. Предлагаю перед обработкой выгрузить все данные в двумерный массив, и пройтись по нему, потом результат полностью переписать обратно в таблицу.
    3) Нужно, все таки разобраться, в какие пятнашки играем с 0 и 1 в ячейках и понять, какой это стандартный алгоритм (у него есть название), и посмотреть готовые модификации алгоритма.
    Ответ написан
    1 комментарий
  • Hc 05 блютуз модуль?

    @alexalexes
    Смотрите сами по доступности и по цене.
    Но учтите, что hc 05/06 - это версия bluetooth 2. Соответственно, все совместимости и скоростные характеристики будут упираться в эту версию протокола. И некоторые новые устройства (смартфон, пк) вы не зацепите к этим модулям, если захотите экспериментов с ними.
    Если нужно что-то по новее по версиям bluetooth, то смотрите линейку jdy-33/34 и т.д.
    Ответ написан
    Комментировать
  • Можно ли добавить себе сайт, который уже добавлен в другом аккаунте?

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

    @alexalexes
    hp pavillion dv6700, апгрейд:
    1. Вместо HDD ставите SSD Sata 256Гб в отсек HDD.
    2. Вместо DVD покупаете салазки для установки HDD в отсек DVD - бывают 9мм и 12мм высотой, у вас 12мм.
    3. Покупаете 1,5 Тб HDD, например, hgst 5k1500, вставляете его в салазки - получаете максимальный размер диска под файлопомойку. Если хотите другой многотерабайтник, то смотрите, чтобы подходил по толщине - толщина у таких дисков нестандартная.
    4. Покупаете оперативку 2 по 2 Гб DDR2 - получаете 4 Гб максимум для этой железки.
    В такой ноут пойдет только WindowsXP или Windows 7. Windows 10 будет работать со скрипом, возможно, не будет хватать драйверов.
    1. Файлопомойка:
    а) Настраиваете общий сетевой диск (он же SMB, он же samba сервер), по любому руководству, найденному в интернете - получаете общий доступ к диску в пределах локальной сети, до роутера.
    б) Альтернативный вариант. Настраиваете доступ к диску как к ftp каталогу, по любому руководству, найденному в интернете - получаете общий доступ к диску в пределах локальной сети, до роутера.
    2. Майквафт.
    Настраиваете сервер для вашей операционной системы по любому руководству, получаете сервер в пределах локальной сети, до роутера.
    3. Доступ к вашим ресурсам за пределами локальной сети.
    Настраиваете все выше сказанное, еще покупаете учетку dynamicDNS, настаиваете роутер, и получаете доступ к своему компу из внешки.
    Ответ написан
    4 комментария
  • Как сбросить защиту сетевой карты?

    @alexalexes
    Цена новой гигабитной карточки ~500 руб. В других вариантах просто за диагностику материнской платы вы выложите не менее 1 тыс. руб. Так что выгоднее просто купить карточку, и не разбираться, что случилось со встроенной.
    Ответ написан
    Комментировать
  • Как встроить html-код в массив php?

    @alexalexes
    Вам не нужно ни JS, ни HTML записывать в message. В json лучше держать "чистые" данные без форматирования (серверный API не должен ничего знать, как рисовать интерфейс пользователя).
    Ваша проблема связана с тем, что нужное форматирование сообщения необходимо произвести в функции callback на стороне JS, откуда был вызван AJAX запрос.
    Ответ написан
    Комментировать
  • Почему на экране фиолетовые пиксели?

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

    @alexalexes
    Берете любую вузовскую методичку по дисциплине "Теория языков программирования и методов трансляции".
    Изучаете, с чем едят грамматики формальных языков, строите лексический анализатор, синтаксический анализатор, транслятор в свой машинный код, исполнитель машинного кода.
    На выходе у вас должна получиться вот такая штука:
    https://studfile.net/preview/937093/
    Ответ написан
    Комментировать
  • Как удалять файлы определенного расширением?

    @alexalexes
    Вам нужна только командная строка, или создать bat-файл с такой командой:
    del /f /s /q D:\Temp\1\*.txt
    Где,
    /f - удалять даже если будет атрибут "только чтение";
    /s - удаление файлов из подкаталогов;
    /q - без запроса подтверждения
    D:\Temp\1 - каталог, от которого стартует удаление (можно указать относительный путь).
    *.txt - маска, какие файлы удалять.
    PS: Аккуратней используйте, особенно, с опцией q.
    Ответ написан
    Комментировать
  • Как сделать преобразование данных jsonb в таблицу с определенными полями?

    @alexalexes
    Как сделать так, чтобы из сохраняемого JSON создать новую таблицу

    Такой скрипт не должен создавать новые структуры в СУБД, он должен делать только вставки записей (insert-ы) в заранее подготовленные таблицы на этапе проектирования базы данных.

    id-question: "идентификатор_вопроса_с_указанием_типа"
    answer: "value":<ответ_на_вопрос>
    date: "created":"<дата_ответа>"

    Вот и создайте эту структуру ручками, create table вам в помощь.
    и далее объединить с таблицей, где будут поля

    Опять же, при вставке данных в базе не должно происходить модификации самой структуры базы.
    Вы при выборке данных сопоставляете данные из одной таблицы с другой таблицей при помощи внешних ключей.
    Запрос выборки будет иметь конструкцию join:
    select *
     from  Answer A
      join Question Q on Q.id_question = A.id_question -- как раз соединение по ключам
      ...

    В общем, учите мат. часть по реляционным СУБД.
    Ответ написан
    Комментировать
  • Как можно сверстать такую рамку на сайте?

    @alexalexes
    Примерно так можно сверстать:
    Ответ написан
    1 комментарий
  • Putty крэшится. Windows показывает ошибку 0xc0000005 и смещение ошибки 0x0006fc7b. Что это?

    @alexalexes
    Поставьте нормальную версию Putty - не портативную версию, в каталог, где имеются необходимые права доступа для приложения.
    Ответ написан
    Комментировать
  • Как обойти sql запрос в циклах по группировкам?

    @alexalexes
    Пока не обозначите две вещи:
    1) По каким критериям будете искать школы или учеников.
    2) Какие и в какой форме выводить данные.
    Не будет точного плана, как оптимально составить запрос или несколько запросов, чтобы перейти от условий 1 к результату 2.
    Чем конкретно опишите входные и выходные данные, тем оптимальней можно получить запрос(ы) для решения этой задачи.
    Ответ написан
    Комментировать