Задать вопрос
  • Как запустить приложение на новом компьютере, так, чтобы оно думало, что запущено на старом?

    axifive
    @axifive
    Software Engineer
    Надо изучать само по и смотреть какие параметры проверяет. Да и непонятно под браузерным вы имеете ввиду Electron/CEF приложение или PWA, или расширение в браузере?
    У pwa гораздо меньше возможностей получить конфигурацию системы, они могут опираться на user-agent, местоположение, canvas, cookies, разрешение, особенности движков конкретных браузеров и другие условно уникальные параметры. Можете глянуть fingerprintjs который как раз и комбинирует все эти параметры для генерации идентификатора.
    У расширений чуть побольше, так как добавляется api (к примеру проверка закладок в браузере)
    У Electron/CEF помимо вышеперечисленного возможна проверка любых параметров системы и оборудования.
    Ответ написан
    Комментировать
  • Как запустить приложение на новом компьютере, так, чтобы оно думало, что запущено на старом?

    В общем случае - никак, тк мы не знаем нюансов работы првоерки компьютера контретно у вашего софта (который даже не назван).

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

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

    Как там в 2010?

    как мартышка ковыряешься с проставлением типов (а иногда это и не особо очевидно), а потом оказывается что какой-нибудь популярный плагин (условный слайдер) в твоей экосистеме - не типизирован. Ручками писать? Потрошить внутренности плагина? Искать аналог?

    Это уж как вам удобно. Вам в большинстве случаев понадобится типизировать от стороннего плагина несколько, а то и один метод и пару аргументов. Не хотите ручками? Идём на https://www.typescriptlang.org/dt/search/ и ищем готовое. А в большинстве случаев достаточно создать файлик типа modules.d.ts и там прописать строчку declare module 'ldapjs-type-parsers';, где подставить имя пакета, для которого нет типов.

    Вопрос звучит как "уговорите меня использовать TypeScript". В общем вас никто не заставляет. Если лично вам неудобно, то пишите на JS.
    P.S. Я уже молчу про удобство рефакторинга ))
    Ответ написан
    7 комментариев
  • Нормально ли хранить JSON в базе данных?

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

    0xD34F
    @0xD34F Куратор тега JavaScript
    Асинхронная функция, внутри бесконечный цикл, в цикле запрос. Если результат запроса нас устраивает - выходим из цикла. Задержка между итерациями цикла реализуется с помощью промиса, который резолвится по таймауту.

    async function() {
      let result = null;
    
      while (1) {
        result = await fetch(...);
    
        if (result тот, который нужен) {
          break;
        }
    
        await new Promise(r => setTimeout(r, 5000));
      }
    
      return result;
    }
    Ответ написан
    6 комментариев
  • Почему var_dump выводит больше, чем нужно?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Возможно, у вас просто не было приватных свойств.
    Вывод чистого var_dump() в версиях PHP 8.2.0RC4, 8.1.7, 8.0.20, 7.4.30, 5.6.40:
    object(Test)#1 (2) {
      ["name":"Test":private]=>
      string(16) "Васенька"
      ["age"]=>
      int(43)
    }

    Вывод var_dump() с установленным xdebug:
    class Test#1 (2) {
      private $name =>
      string(16) "Васенька"
      public $age =>
      int(43)
    }
    Ответ написан
    2 комментария
  • Допустимо ли сокращать названия переменных до 1 буквы или комбинации символа + буквы?

    Моё мнение - если тебе смысл переменной не очевиден, то нужно делать полноценное имя переменной.

    Короткое, например, имеет смысл для параметра в лямбде (array.filter(x => x % 2 === 0)) или в какой-нибудь функции наподобие
    function sum(a, b) {
     return a+b;
    }


    Если тебе к твоей однобуквенной переменной нужно ещё и комментарий писать, который её расшифрует - значит переменная точно не должна быть однобуквенной.

    В том примере кода, который у тебя есть в вопросе, ничего нельзя сократить.

    Экономить ресурс нажатий на кнопки клавиатуры не надо, как и не надо экономить буквы на экране.
    Ответ написан
    Комментировать
  • Чем в PHP 8.2 теперь заменять функцию mb_convert_encoding()?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Комментировать
  • Как почистить каталог .git от ненужных файлов?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Файл .gitignore не предназначен для удаления файлов из репо, он лишь помогает не добавить случайно лишнее в репо. А если уже закоммитили, то игнор не поможет.

    Самый надёжный способ вычистить репозиторий от файла — использовать скрипт filter-repo
    # клонируем репозиторий в соседний каталог
    # иначе придётся использовать ключ --force
    git clone --no-local . ../clonerepo/
    # переходим в свежий клон
    cd ../clonerepo
    # чистим
    git filter-repo --path "path/to/file" --invert-paths
    # проверим что файл исчез
    git log --oneline --name-status -- "path/to/file"
    Коммиты в гите неизменяемые, но мы можем их пересоздать заново. Фактически получится новый репозиторий, но сохранится история. Всем участникам проекта придётся клонировать новый проект заново.
    Ответ написан
    3 комментария
  • Как можно улучшить модерирование?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Разумеется, он не знает местных заморочек, и накосячил.

    Абсолютно все перед регистрацией ставят галочку, что прочитали и приняли правила.

    А не давать пинка под зад, "Пшёл вон, дурачина", молча удаляя вопрос.

    При удалении вопроса, его автор получает уведомление с указанием причины удаления.
    Ответ написан
    Комментировать
  • Почему кв.матрица — nxn?

    @deliro
    Это троллинг такой? У квадрата все стороны равны, верно? Вот и у квадратной матрицы количество столбцов равно количеству строк. А причём тут индекс — я могу только догадываться. Почему трёхэтажный дом по 3 квартиры на каждом этаже называют девятиквартирным, если у каждой квартиры есть свой номер?
    Ответ написан
    2 комментария
  • Почему объекты созданные через класс не наблюдаются mobx?

    Alexandroppolus
    @Alexandroppolus
    кодир
    Рекурсивная наблюдаемость объектов (выставляемая по умолчанию в makeAutoObservable и успешно примененная в bStore) не залетает в пользовательские классы. Считается, что класс (в твоем случае AStore) должен сам настроить внутри себя наблюдение.

    об этом написано в документации https://mobx.js.org/observable-state.html
    ctrl+F "primitives and class instances are never converted to observables"
    Ответ написан
    Комментировать
  • Что означает «код не как у сениора»; и как его подтянуть?

    HighTechLowLife
    @HighTechLowLife
    Если опустить паттерны / SOLID и прочую архитектуру и открыть любой рандомный php-файл, то сразу можно увидеть хороший код или шляпу. Обычно у меня такие критерии последнего:
    1. Отсутствие кодсайла PSR или другого. Убогое форматирование. Двойные-тройные пустые строки; Лишние пробелы; Или, наоборот, код слеплен без единой пустой строки, которая логически бы отделяла блоки.
    2. Отсутствие scrict-сравнения; Всегда стараюсь писать через ===, declare(strict_types=1), добавлять true в конец in_array и подобных;
    3. Отсутствие type-hint'ов; хотя бы в phpdoc; Отсутствие указания области видимости метода / поля / константы;
    4. Неадекватные названия переменных и методов, по которым непонятно, что это. Лишние переменные. Или отсутствие пемененной, где она была бы полезной, для улучшения понимания кода;
    5. Тупые и очевидные комментарии ради комментариев;
    6. Длинные портянки. Если метод, условно, больше 80 строк, то, мб, надо задуматься о декомпозиции;
    7. Куча параметров в сигнатуре функции
    8. Неиспользуемые переменные / константы / методы "на будущее".
    9. Закомментированный код;
    10. Хард код. Какие-нибудь api url прям в коде в переменной, вместо конфига или хотя бы константы.
    11. Забивание на работу с ошибками. unserialize вернул false? Да неее, такое точно не произойдёт


    Ну, это что на первый взгляд бросается. Потом видишь неоптимальный код. Какой-нибудь INSERT в бд по одной строке в цикле foreach.
    Ответ написан
    Комментировать
  • О каких IT специалистах говорят, когда речь идет о дефиците кадров?

    IonDen
    @IonDen
    JavaScript developer. IonDen.com
    У вас неправильная оценка. Если убрать новичков останется максимум 10 миддлов
    Ответ написан
    Комментировать
  • Как реализовать такое нижнее подчеркивание?

    DanArst
    @DanArst Куратор тега HTML
    Гриффиндор в моде при любой погоде!
    Зачем отключать свойства? Это ведь эффект при hover-е. Так откройте devTools, выберите интересующий вас элемент и посмотрите на его стили, далее нажмите правой кнопкой мыши на него и в контекстном меню выберите Force state -> Hover и снова смотрите стили.
    На сайте из вашего вопроса сделано так:
    Ответ написан
    1 комментарий
  • Почему сайт может очень долго грузится?

    den_rad
    @den_rad
    PHP разработчик
    Для начала стоит разобраться, сайт медленно работает из-за передачи данных (медленный канал), большой нагрузки на PHP или нагрузки на базу данных ?
    Ускорить загрузку можно, если пустить сайт через Cloudflare, например.
    Посмотреть, сколько времени генерируется страница можно с помощью профилирования
    Ответ написан
    Комментировать
  • Почему PermissionError: [Errno 13] Permission denied на хостинге?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Немного странно спрашивать "в чем может быть проблема", если это написано прямо в заголовке вопроса.
    Ошибка Permission denied является совершенно стандартной, переводится как ошибка прав доступа к файлам/папкам.
    ".htaccess" (как и sqlite) здесь совершенно не при чем
    Пользователь, под которым выполняется веб-сервер, не имеет права на запись в папку app/static/images/goods/
    Надо разобраться, под каким пользователем создана папка и под каким пользователем выполняется веб-сервер. В самом тупом случае поставить папке права 777, но лучше всего конечно сделать так, чтобы веб-сервер выполнялся от имени пользователя
    Ответ написан
    5 комментариев
  • Как сделать комит в GITLABE без запуска runner?

    @d-stream
    Готовые решения - не подаю, но...
    Самое простое - в commit message поместить "волшебный" текст [skip ci] либо передать опцию ci.skip гиту
    Либо менять слегка схему сборки и там уже либо реагировать на условия, а в остальных случаях например не собирать (gitlab yml when/rules)
    Ответ написан
    3 комментария
  • Laravel как правильно обновить баланс при покупке?

    rozhnev
    @rozhnev Куратор тега PHP
    Fullstack programmer, DBA, медленно, дорого
    В таблице баланса ограничиваете возможность отрицательных значений
    create table user_balance (
    	user_id int,
      	balance decimal(9, 2) check (balance >=0)
    );


    create table user_balance_unsigned (
    	user_id int,
      	balance decimal(9, 2) unsigned
    );


    любая попытка списать больше чем баланс вызывает ошибку

    SQL online environment
    Ответ написан
    1 комментарий
  • Laravel как правильно обновить баланс при покупке?

    iMedved2009
    @iMedved2009
    Не люблю людей
    1. Лочить запись в таблице балансов до момента списания. Залочили, проверили, списали, разлочили. Другие процессы либо будут ждать - либо вылетят по таймауту.

    2. Использовать update с условием. update user_balance where user_id = ? and balance > нужного. У вас запрос не выполнится если кто то уже списал деньги. А вы по affected rows можете судить списалось или нет
    Ответ написан