• Так ли необходима TN матрица для дизайна?

    @Mercury13
    Программист на «си с крестами» и не только
    «Среднепотолочный» IPS для дизайна лучше «среднепотолочного» TN, независимо от разрядности ЦАПа и разрешения.
    На IPS удобнее сидеть долго, и на TN принципиально нельзя настроить цветопередачу: меняется даже при повороте головы.

    UPD. Пишу «среднепотолочный», потому что видал плохие IPS на уровне TN’ов. Может, появились хорошие геймерские TN на уровне IPS’ов средней руки, я лично таких не видел.
    Ответ написан
  • Могут ли порты сломать материнку?

    @Mercury13
    Программист на «си с крестами» и не только
    Закорот USB обычно приводит к отключению компьютера, проверено на собственной шкуре.

    Ранние USB не выдерживали переполюсовку, это было реальной проблемой, когда разводка косички была не стандартизирована. Я с ней не сталкивался, первый комп с USB 2.0 у меня появился в 2008 и тогда вроде всё было не так мрачно.

    Наушникам закорот не вреден.

    UPD. Стандарт USB таков, что устройство ОБЯЗАНО выдерживать переполюсовку, но «гладко было на бумаге»…
    UPD2. Вставка наушников в компах определяется физическим присутствием штыря, в телефонах — как придётся.
    Ответ написан
    Комментировать
  • Насколько можно уменьшить длину строки уникального ключа, используя вместо 16-тиричных цифр 32-х знаковый алфавит?

    @Mercury13
    Программист на «си с крестами» и не только
    Длина ключа 128 бит.
    1 из 32 — это 5 бит.
    1 из 64 — это 6 бит.
    Вот и считайте. Например, 128:5 = 25,6, то есть 26 символов.
    Ответ написан
    Комментировать
  • Возможно смешной вопрос, но - в Delphi существует аналог "методов-раширений C#"?

    @Mercury13
    Программист на «си с крестами» и не только
    Метод-расширение: XE3+, helper class.
    docwiki.embarcadero.com/RADStudio/Tokyo/en/Class_a...

    Условная компиляция: ещё со времён Трубо-паскаля, директивы компилятора
    {$IFDEF DEBUG}
    {$ENDIF}
    docwiki.embarcadero.com/RADStudio/Tokyo/en/Conditi...
    Ответ написан
    Комментировать
  • Что такое бизнес логика android приложения?

    @Mercury13
    Программист на «си с крестами» и не только
    Бизнес-логика — это то, что программа делает с точки зрения пользователя. По-другому (и более понятно) — логика предметной отрасли.

    Например, у нас есть игра в шахматы. Бизнес-логика — это правила шахмат, принципы работы часов, команды «попросить ход назад», «сдаться» и «согласиться на ничью». Если нужно начинать не с исходной позиции, а с любой — то редактор.

    Крайне спорно, относить ли к бизнес-логике — анимация фигурок на манер Battle Chess и боты.

    Логика, которая не бизнес — это работа с сетью, графикой, конфигурационными файлами, сохранениями досок и партий, античит и многое другое. В общем, то, что нужно для жизнеобеспечения программы, а не для предметной отрасли. Сохранять партии в PGN или XML, как перекидываться пакетами по сети и какие настройки держать для совместимости…
    Ответ написан
    Комментировать
  • Программа для обрезки лишних белых отступов с изображения?

    @Mercury13
    Программист на «си с крестами» и не только
    Да хоть XnView.
    Tools → Batch processing.
    Ответ написан
    4 комментария
  • Правильно ли я спаял адаптер TRS в TRRS?

    @Mercury13
    Программист на «си с крестами» и не только
    Работает в новых мобилах. В старых надо поменять провода местами.

    Чтобы определить, где земля, где микрофон, берём подходящую гарнитуру и звоним. От земли до уха 30 Ом, от микрофона до уха — очень много (килоомы).
    Ответ написан
  • Зачем std::forward иметь две сигнатуры и явно указывать тип?

    @Mercury13
    Программист на «си с крестами» и не только
    std::forward предназначен для использования в шаблонах; без шаблона можно использовать старый добрый std::move.
    Кроме того, std::forward налажен таким образом, что шаблонный параметр надо указывать явно.

    Задача std::forward — передать далее простую или временную ссылку в зависимости от того, какую ссылку передаёт пользователь.
    Ответ написан
    6 комментариев
  • Что одновременно компонент DrawGrid позволяет отображать?

    @Mercury13
    Программист на «си с крестами» и не только
    Этот компонент позволяет отобразить всё, что можно нарисовать программно: картинки, тексты, списки, формулы и прочее. Форма — это не только рисование, но и размещение объекта со своим оконным дескриптором, так что отпадает. «Вычисления» — это слишком общий термин, но если придумаешь, как нарисовать схему/формулу вычислений, то пожалуйста. А остальное катит.
    Ответ написан
  • Нужно ли программисту изобретать велосипед?

    @Mercury13
    Программист на «си с крестами» и не только
    Представьте себе, у меня в одной коммерческой программе есть велосипед и чужая библиотека, занимающиеся одним и тем же, доступом к XLSX.

    В одном месте пользователи иногда скармливают программе огромный XLSX размером мегабайт этак в 20, что соответствует ≈100M памяти, если развернуть в структуры данных, >130M — если сериализовать в XML, и добрых полгига — если этот XML разобрать рекордной библиотекой, а ведь в той XLSX-библиотеке, которую мы купили, ничего рекордного не было. На x86 не хватало памяти ни на что, на x64 тормозило адски. В общем, сделал потоковый разбор XML с пространствами имён «из коробки» и предельно простой разбор XLSX без стилей, без картинок и диаграмм, без сохранения — этот XLSX грузило ≈3 с, из которых <0,5 — раззиповка, ≈1,1 — разбор XML, остальное — собственно разбор XLSX. Для сравнения: Excel грузил 10 секунд, LOo до 6-й линейки вообще не мог загрузить такой файл. Расход памяти — исключительно та сотня, что идёт на структуры данных; расходы памяти на раззиповку и разбор пренебрежимо малы.

    В другом месте таких проблем нет, и я даже не пытался перевести этот момент на свою библиотеку.

    К слову о велосипедах: они тоже глючат, и один японец обнаруживал не одну и не две ошибки, связанных с этим разбором специальных японских XLSX.

    В общем, с велосипедами надо быть осторожным, и причины сделать велосипед в производственном коде — это…
    • Производительность. Пример выше.
    • Функциональность. Хочется написать своё сохранение в XLSX, потому что нужны заметки, которых, кажется, не поддерживает ни одна библиотека.
    • Глючьё. Допустим, я отказался от встроенного в Qt диалога открытия файла, потому что он прикрывал одну важную функцию WinXP+: сохранял, какой каталог был текущим.
    Ответ написан
    Комментировать
  • Какую оптимизацию отключить в g++ -O1, чтобы не было [optimized out]?

    @Mercury13 Автор вопроса
    Программист на «си с крестами» и не только
    -fno-tree-* (в общем, все, начинающиеся на tree и входящие в O1).
    Дальше выделять бессмысленно, каждая из них делает что-то маленькое.

    Но не включаем -fno-tree-copy-prop, оно выводит адову кучу ложных тревог.

    UPD. В настоящее время лучше использовать линкер LLD, и точка. Проект разросся, а линковка длится «целых» ДВЕ секунды.
    Ответ написан
    Комментировать
  • Написать программу, сильно тормозящую Windows?

    @Mercury13
    Программист на «си с крестами» и не только
    Много дёргать ввод-вывод. Например, помногу, в несколько потоков, читать диск.
    Если винт механический, Windows становится абсолютно неюзабельной.
    Ответ написан
    Комментировать
  • Как установить OpenCV для C++ в QT Creator?

    @Mercury13
    Программист на «си с крестами» и не только
    LIBS += -LC:/opencv/pro/lib -lxxx

    xxx — это имя файла с расширением a, без расширения и префикса lib.
    Если он libopencv_core.a, то надо -lopencv_core
    Ответ написан
    Комментировать
  • Какие действия несут эти знаки @ & % # ^ в delphi или pascal?

    @Mercury13
    Программист на «си с крестами» и не только
    Это символ не Delphi, а Win32. Как налаживается горячая клавиша в других ОС — я не в курсе, но в Qt под всеми ОС горячая клавиша задаётся точно так же, амперсандом. В текстовой системе Turbo Vision было ~H~otkey.
    Никакого особого смысла эти символы в окнах Win32 не несут. Но могут нести где-то в других местах, сами понимаете:
    • на некоторых сайтах #hashtag или @user
    • в строках типа printf процент — это символ подстановки типа «Привет, %s»
    • а какой смысл несут все эти символы в Паскале — вы и так должна знать.
    Ответ написан
    Комментировать
  • Как защититься от мультизапросов (Charles)?

    @Mercury13
    Программист на «си с крестами» и не только
    Транзакции и блокировка строк. Точка.
    https://ru.wikipedia.org/wiki/Уровень_изолированно...
    https://dev.mysql.com/doc/refman/8.0/en/innodb-tra...

    Вам вроде нужен самый сильный уровень изоляции транзакций, SERIALIZABLE.

    Более сложный, но более высокопроизводительный способ — SELECT FOR UPDATE.
    https://dev.mysql.com/doc/refman/8.0/en/innodb-loc...
    Тут уровень изолированности транзакций не важен, поскольку вы сами выбираете, какую строку как изолировать.
    Ответ написан
    Комментировать
  • Сколько всего может быть паролей + rainbow-tables?

    @Mercury13
    Программист на «си с крестами» и не только
    1. Что такое радужная таблица? Будучи раз вычисленной, она многократно используется другими для задачи «обратить хэш».
    2. В Wi-Fi используются два параметра: ANonce и пароль — так что перед нами протокол типа challenge-response, предназначенный именно для того, чтобы радужные таблицы были непрактичны — задача взлома, решённая для одной сессии, не поможет взломать другую.
    3. Так сколько же ломать? Если вы пытаетесь взломать чужую сеть и ставите разумные рамки на чужой пароль, так и есть. Если налаживаете политику безопасности — в счёт лучше брать только самый короткий из вариантов: если ограничение 8…24 символа, то для расчётов брать именно 8.
    Ответ написан
    Комментировать
  • Почему запускается первым конструктор mainwindow.cpp?

    @Mercury13
    Программист на «си с крестами» и не только
    Я бы переписал архитектуру программы.
    1. Перед вами модальное окошко. Вот его и вызывайте, как модальное — au.exec().
    2. Чтобы проверить, что авторизация верна, надо соединиться. Так что сделайте невизуальный объект «соединение» и протащите в exec. Ну или создайте в exec.
    3. А уж там собирайте основную программу.
    QApplication a(argc, argv);
    FmAutoriz au;
    std::unique_ptr<SomeConnection> connection = au.exec();   // SomeConnection и exec придётся написать
    if (connection) {
      FmMain m(connection);
      m.show();
      return a.exec();
    } else {
      return 0;
    }
    
    std::unique_ptr<SomeConnection>FmAutoriz::exec()
    {
      bool b = QDialog::exec();
      if (b) {
        return std::move(this->connection);
          // connection — поле FmAutoriz.
          // Такой же unique_ptr, в обработчиках кнопок пытаемся создать соединение.
      } else {
         return nullptr;
      }
    }
    
    void FmAutorize_on_btOk_click()
    {
       connection = new SomeConnection();
       if (connection.connect(someLogin, somePassword)) {
          accept();
       } else {
          // сообщи об ошибке
       }
    }

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

    @Mercury13
    Программист на «си с крестами» и не только
    Это на самом деле сложная задача, и я её решил вот так.
    QHeaderView* header = ui->tableView->verticalHeader();
    QWidget* viewport = header->viewport();
    int i1 = header->logicalIndexAt(0);
    int i2 = header->logicalIndexAt(viewport->height() - 1);
    if (i2 < 0)
        i2 = header->count() - 1;
    QString s = QString::number(i1) + " - " + QString::number(i2);
    ui->lbResult->setText(s);


    Если в очень упрощённом виде — то немного не так.
    return m_tableView->viewport()->height() / m_tableView->rowHeight(0);
    Ответ написан
    Комментировать
  • Что такое "программирование сокетов"?

    @Mercury13
    Программист на «си с крестами» и не только
    Сокет — это абстракция, принятая в Unix и перешедшая в Windows, представляющая собой сетевое соединение.
    https://ru.wikipedia.org/wiki/Сокеты_Беркли
    Ответ написан
    Комментировать
  • Почему не запускается browser action в расширении Firefox?

    @Mercury13 Автор вопроса
    Программист на «си с крестами» и не только
    Опять приходится отвечать самому. Разобрался, хотя мучился долго.

    В браузерном расширении два скрипта: фоновый и контентный. Фоновый умеет работать с браузером и его окнами, контентный — со страницей. Единственный обмен между ними — сообщения.

    Поскольку конкретно на этом сайте довольно много AJAX, начинающему JS’нику трудно обойтись одним контентным скриптом, так что пусть фоновый скрипт с браузерной панели инициирует жульничество, а контентный — вмешается в страницу. Делается это так.
    manifest.json
    {
    
      "manifest_version": 2,
      "name": "Green Way Cheat",
      "version": "1.0",
     
      "description": "A simple addon for cheating in green-way.com.ua",
      "icons": {
        "48": "icons/green-way-48.png"
      },
      
      "applications": {
        "gecko": {
          "id": "green-way-cheater@merc.com",
          "strict_min_version": "45.0"
        }
      },
    
      "permissions": [ "activeTab", "tabs" ],
    
      "browser_action": {
        "default_icon": "icons/green-way-48.png",
        "default_title": "Green Way Cheat"
      },
     
     "content_scripts": [
        {
          "matches": [ "https://green-way.com.ua/*" ],
          "js": [ "content.js" ]
        }
      ],
      
      "background": {
          "scripts": [ "bg.js" ]
      }
    
    }
    bg.js
    function getActiveTab()
    {
    	return browser.tabs.query({active: true, currentWindow: true});
    }
    
    function cheatMain()
    {
    	getActiveTab().then((tabs) => {
    		browser.tabs.sendMessage(tabs[0].id, { command: "cheat" } );
    	});
    }
    
    browser.browserAction.onClicked.addListener(cheatMain);
    content.js
    function cheatHere()
    {
    	alert("Cheat!");
    }
    
    browser.runtime.onMessage.addListener(cheatHere);
    Ответ написан
    Комментировать