• Как упростить код перебора ячеек?

    @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.
    Чем конкретно опишите входные и выходные данные, тем оптимальней можно получить запрос(ы) для решения этой задачи.
    Ответ написан
    Комментировать
  • Как в CSS сделать так, чтобы всегда была видна полоса прокрутки?

    @alexalexes
    Веб разработчик крайне ограничен в стилизации скроллбара.
    Повлиять можно только на 3 параметра:
    1) Ширина скроллбара;
    2) Цвет бегунка (+ hover);
    3) Цвет подложки бегунка.
    Все остальное поведение зависит от браузера и пользовательских настроек вне контекста песочницы веб-страницы (и даже доступные стилизации могут быть перебиты внешними настройками просто потому что потому).
    Ответ написан
    Комментировать
  • Скрытие первой части архива в многотомном архиве, как дополнительный способ безопасности данных. Реально ли?

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

    @alexalexes
    1. На JS любым способом сделать ajax запрос на сервер, передав нужный набор параметров для обработки.
    2. Обработать запрос на серверe, передать клиенту результат.
    3. На JS обработать результат в callback функции ajax.
    Примерная заготовка, как это будет на стороне JS:
    function getValue()
    {
      let xhr = new XMLHttpRequest();
      xhr.open("POST", "" /*<- тут должен быть адрес скрипта на сервере, где будет обработка запроса */, true);
      // создаем виртуальную форму, чтобы нагрузить запрос параметрами
      let t_form = new FormData();
      // нагружаем параметром форму
      t_form.append("input-id", document.getElementById('input-id').value);
      // ... еще какой-то параметр
      // t_form.append("какой-то параметр", "какое-то значение");
       // callback функция ответа
       xhr.onreadystatechange = function(e)
      {
         // состояние, когда ответ сформирован
         if(xhr.readyState === 4 && xhr.status === 200)
         {
             // что-то делаем с ответом, например выводим сообщение
              alert(xhr.responseText);
          }
       };
       // отправляем запрос на сервер, нагружаем его формой с параметрами
       xhr.send(t_form);
    }
    Ответ написан
    1 комментарий
  • Как организовать учет сотрудников и оборудование, которое на руках?

    @alexalexes
    Из минимального, что можно создать, не привлекая специалистов - локальную базу данных в Microsoft Access.
    Вам нужно как минимум 3 таблицы: Сотрудники, Оборудование, Закрепление оборудования.
    Создать формы для добавления Сотрудника, Оборудования и Закрепления оборудования.
    И, возможно, 2 отчета - Закрепленное оборудование по сотруднику, Закрепленное оборудование всех сотрудников.

    Если с базой данных предполагается работать больше 1 человека, то вам уже нужна полноценная коробочная система от какой-нибудь 1С и специалисты, которые ее настроят.
    Ответ написан
    Комментировать
  • Как сгруппировать по убыванию?

    @alexalexes
    Если у вас MySQL 8+ версия, то список чатов получается тривиально - используя оконную функцию:
    SELECT A.*
    from (
    SELECT class_messages.id as class_messages_id,
          `class_messages_chat`.`to_user_id`,
           `class_messages_chat`.`from_user_id`,
           `class_users`.`id`,
           `class_users`.`user_status`,
           `class_users`.`online`,
           `class_messages_chat`.`chat_id`,
           `class_messages_chat`.`ad_id`,
           `class_ads`.user_id,
           `class_ads`.title,
           row_number() over (partition by `class_messages_chat`.`chat_id` order by class_messages.id desc) rn -- этой функцией нумеруем в пределах чата сообщения
        FROM `class_messages_chat`
        inner join `class_ads` on `class_messages_chat`.ad_id = `class_ads`.id
        INNER JOIN `class_users` ON `class_users`.`id`=`class_ads`.`user_id`
        inner join `class_messages` on `class_messages_chat`.`chat_id` = `class_messages`.`chat_id`
    WHERE (   `class_messages_chat`.`to_user_id` = 133337
           or `class_messages_chat`.`from_user_id` = 133337)
    and class_messages_chat.chat_id is not null
    ) A
    where A.Rn = 1 -- оставляем, все что с первым номером счетчика
    order by A.class_messages_id desc

    В mySQL 5.7
    SELECT A.*
    from (
    SELECT
          `class_messages_chat`.`to_user_id`,
           `class_messages_chat`.`from_user_id`,
           `class_users`.`id`,
           `class_users`.`user_status`,
           `class_users`.`online`,
           `class_messages_chat`.`chat_id`,
           `class_messages_chat`.`ad_id`,
           `class_ads`.user_id,
           `class_ads`.title,
      IF(@prev <>  `class_messages_chat`.`chat_id`, @rn:=1,@rn), @prev:= `class_messages_chat`.`chat_id`, @rn:=@rn+1 AS rn -- этой функцией нумеруем в пределах чата сообщения
        FROM `class_messages_chat`
        inner join `class_ads` on `class_messages_chat`.ad_id = `class_ads`.id
        INNER JOIN `class_users` ON `class_users`.`id`=`class_ads`.`user_id`
        inner join `class_messages` on `class_messages_chat`.`chat_id` = `class_messages`.`chat_id`,
         (SELECT @rn:=1)rn,
         (SELECT @prev:=-1)prev
    WHERE (   `class_messages_chat`.`to_user_id` = 133337
           or `class_messages_chat`.`from_user_id` = 133337)
    and class_messages_chat.chat_id is not null
    order by class_messages.id desc
    ) A
    where A.Rn = 1 -- оставляем, все что с первым номером счетчика

    Второй вариант для 5.7, если некорректно будет работать сортировка.
    select B.*
    from (SELECT A.*,
               IF(@prev <> A.chat_id, @rn:=1,@rn), @prev:= A.chat_id, @rn:=@rn+1 AS rn -- этой функцией нумеруем в пределах чата сообщения
    from (
    SELECT
          `class_messages_chat`.`to_user_id`,
           `class_messages_chat`.`from_user_id`,
           `class_users`.`id`,
           `class_users`.`user_status`,
           `class_users`.`online`,
           `class_messages_chat`.`chat_id`,
           `class_messages_chat`.`ad_id`,
           `class_ads`.user_id,
           `class_ads`.title
        FROM `class_messages_chat`
        inner join `class_ads` on `class_messages_chat`.ad_id = `class_ads`.id
        INNER JOIN `class_users` ON `class_users`.`id`=`class_ads`.`user_id`
        inner join `class_messages` on `class_messages_chat`.`chat_id` = `class_messages`.`chat_id`
    WHERE (   `class_messages_chat`.`to_user_id` = 133337
           or `class_messages_chat`.`from_user_id` = 133337)
    and class_messages_chat.chat_id is not null
    order by class_messages.id desc
    ) A,
    (SELECT @rn:=1)rn,
         (SELECT @prev:=-1)prev
    ) B
    where B.Rn = 1 -- оставляем, все что с первым номером счетчика
    Ответ написан
  • Как расположить панель внизу через стили css?

    @alexalexes
    .ch_list
    {
      position: absolute;
      width: 100vw;
      ...
    }
    Ответ написан
    Комментировать
  • Как использовать полученное значение из подзапроса для join?

    @alexalexes
    Если я не напутал с окном partition by va.order_id, apa.sale_type_id, то скорее всего можно переписать так:
    select json_build_object('id', A.id, 'status', A.status)
    from (select apa.id,  apa.status, va.created_at,
                 row_number() over (partition by va.order_id, apa.sale_type_id order by apa.created_at desc) Rn 
              from vt.applications va
              join orders o on va.order_id = o.id 
              join cc.additional_projects_actions apa on apa.order_id = va.order_id
              and apa.sale_type_id = va.sale_type_id
              where o.id = 64
              and va.sale_type_id is not null
    ) A
    where A.Rn = 1 -- отсекаем 1 запись - аналог order by apa.created_at desc limit 1 из первоначального запроса
    order by A.created_at desc;
    Ответ написан
    1 комментарий