• Что добавить к URL Youtube чтоб при открытии сразу появлялись субтитры с русским автоматическим переводом?

    @Mercury13
    Программист на «си с крестами» и не только
    ?language=russian недавно исчезло и никто не знает, что дальше. Вероятно, теперь личные настройки пользователя перебивают то, что поставил автор.
    Ссылка на время — #t=1h23m34s.
    Ответ написан
    Комментировать
  • Что лучше в mysql одинарные запросы или множественные(мульти) запросы?

    @Mercury13
    Программист на «си с крестами» и не только
    Массовый INSERT всегда лучше multi_query. Хотя multi_query из нескольких таких INSERT’ов имеет право на жизнь.
    Выигрыш по времени незначителен и сводится к тому, что разбор выражения происходит единожды. Сервер всё равно выполнит запросы один за другим.
    Но multi_query может быть хорош, когда надо запустить несколько модифицирующих запросов (INSERT, UPDATE, DELETE) один за другим. Просто код смотрится лучше.
    Когда в SQL-коде много подстановок, стоит обратить внимание на prepare. Это безопаснее и позволит использовать кэш компилированных запросов.
    Ответ написан
  • Можно ли сделать PCI-E звуковую карту внешней через USB?

    @Mercury13
    Программист на «си с крестами» и не только
    К сожалению, нет. Звуковой нужно ОЗУ, чтобы брать участки волны, и процессор, чтобы вызывать прерывания. Другими словами, переходник будет небольшим компьютером.
    Может, в режиме низкой задержки всё не так страшно (не знаком с ним), но системная шина и последовательная шина для периферии — слишком разные интерфейсы.
    Ответ написан
    3 комментария
  • Как реализовать код для срабатывания нефиксированной Кнопки?

    @Mercury13
    Программист на «си с крестами» и не только
    UPD1. У вас опять игрушечное никогда не выполняющееся условие PINB &= 0b00000000.
    Если всё-таки сделаете работающее условие, то должно быть что-то вроде
    char oldState = 0, newState = 0
    ...
    oldState = newState;
    newState = PINB & 0b00000001;
    if (!newState && oldState) {
      // нажатие кнопки зарегистрировано.
      // 1. переключить состояние.
      // 2. Записать что надо в порт.
      // 3. Сделать задержку на дребезг.
    }

    Естественно, считается, что кнопка замыкается на землю и !newState — это как раз «прижата».
    Ответ написан
    3 комментария
  • Изучение линейной алгебры поможет в школьном курсе алгебры?

    @Mercury13
    Программист на «си с крестами» и не только
    Скорее всего, нет, однако стоит посмотреть, какое отношение эта самая линейная алгебра имеет к векторам, прямым и плоскостям в 2D и 3D. Это будет важно в вашей дальнейшей прогерской жизни.
    Ответ написан
    Комментировать
  • Header в header'е и можно ли делать игру на одних Header'ах?

    @Mercury13
    Программист на «си с крестами» и не только
    Такой механизм называется «одна единица компиляции» и вполне имеет право на жизнь: на одном процессоре время полной сборки будет наименьшим, потому так распространяют некоторые библиотеки (SqLite, Google Test). Правда,
    игра — обычно масштабный проект, и чем больше будет кода, тем дольше нужно компилировать, чтобы проверить изменения.

    Потому код обычно разбрасывают по единицам компиляции (*.cpp) в соответствии с его внутренней логикой, и к каждой единице (кроме точки входа) приписывают хедер (*.h), который показывает, что эта единица делает. Повторяю, только описывает, что делает — весь код в CPP. И в большинстве случаев самый длинный этап сборки — линковка (особенно с оптимизацией по ходу линковки aka LTO).

    Единственное, что в 80% случаев не получается закинуть в CPP — это шаблоны.

    Чтобы один хедер не подключался несколько раз — есть include guard. Правда, если вы не продумали зависимость между хедерами, может попасться циклическое включение — это вредно, но лишь потому, что программа может не скомпилироваться.

    Чтобы не было циклических включений, для сохранения скорее всего потребуются два хедера: один отвечает за собственно процедуру сохранения и подключается к одному-единственному модулю — системе меню. Второй — за какие-то общие функции, которые позволяют сохраняться в абстрактный поток плиточному фону, снаряду, монстру… Называется как-нибудь SaveUtils.h и подключается повсюду.

    (Примечание. И SqLite, и Google Test разрабатывались по традиционной схеме, с проектом из кучи CPP. SqLite собирается в один большой *.c автоматикой, и я даже качал традиционный код — на 5-метровом файле некоторые версии Embarcadero вылетали с нехваткой памяти. В Google Test есть файл all.cpp или что-то подобное, в котором #include остальных CPP — пользователь подключает в проект all.cpp, и библиотека отнимает минимум его времени.
    Ответ написан
  • Будет работать ноутбук с ddr3 большей частотой шины, чем предусмотрено?

    @Mercury13
    Программист на «си с крестами» и не только
    В целом да (и даже тайминги масштабируются под реальную частоту шины). Хотя бывают особенности наподобие ёмкости одного чипа — потому надо проверять. Особенно если матплата старенькая, а память современная.

    Потому при апгрейде ноутбуков советую обращаться в фирмы, которые занимаются старыми ноутбуками. Они более-менее профессионально вскроют девайс, поставят память прямо при владельце, а потом проверят то, что сделали — у меня лично были два случая, когда по совершенно непонятной причине матплата не заводится. В одном случае я сменил память на другого производителя, комп служил 5 лет у меня и 5 лет у другого. В другом — матплата была старая, память вернул и решился на полный апгрейд, это дало 2× производительность на одном ядре (оба компа настольные).

    А ещё был случай, когда у дамы был комп с ХРюней (≈2012), DDR1, денег на новый не было, я сказал: с такими запросами надо купить гигабайт, и всё. Купил, всё обошлось, довольна, как слон. В общем, вопрос везения.
    Ответ написан
    Комментировать
  • Доказывают ли изначально аксиомы, чтобы потом принимать их на веру?

    @Mercury13
    Программист на «си с крестами» и не только
    Аксиомы доказать невозможно. Но можно сделать одну классную вещь. А именно — построить модель теории. Другими словами: найти в соседней теории, которой вы «доверяете» (например, теории действительных чисел или евклидовой геометрии) такие «точки» и «прямые», чтобы они отвечали всем аксиомам. И эти аксиомы нужно доказывать, чтобы показать, что, например, R² с «точками» (x,y) и «прямыми» ax+by+c=0 — действительно модель евклидовой геометрии.

    Да, и математики часто, но некорректно говорят: «Векторное пространство — это совокупность из основного множества X, числового поля K, операций x+y и x·k такая, что отвечает аксиомам…» Вообще-то, требованиям, а не аксиомам, и эти «аксиомы» нужно доказывать, чтобы доказать, что, например, R² — векторное пространство над полем R.

    Да, а что же Евклид? А Евклид, вероятно, сам не догадывался, какую классную штуку он придумал. К тому же исчерпывающую аксиоматику евклидовой геометрии придумали ≈1900. Страшна, как чёрт, шесть базовых понятий… Но это зачастую и не требуется, чтобы решать задачи — надо как-то определить объект изучения и начать доказывать теорему за теоремой. Большинство из нас, даже выпускники вуза, не знают ни теорию действительного числа, ни аксиоматику Пеано для арифметики, ни аксиоматику для теории множеств…
    Ответ написан
    Комментировать
  • Как перевернуть строку за пол прохода цикла?

    @Mercury13
    Программист на «си с крестами» и не только
    Первую букву меняем с последней, вторую с предпоследней, и так далее.
    Ответ написан
    Комментировать
  • Домен и доменное имя. В чем разница?

    @Mercury13
    Программист на «си с крестами» и не только
    example.com — это домен = доменное имя
    https://example.com — это уже URL, состоящий из…
    • схемы URL’а (протокола, типа ресурса) https:
    • и специфичных для протокола HTTP(s) вещей, к коим относятся
      • знак домена //
      • домен example.com

    Когда мы пишем в браузере example.com/path, система понимает, что надо добавить схему и знак домена, но упаси бог такое писать в HTML — получится что-то типа http://local.example.net/example.com/path.
    Ответ написан
    Комментировать
  • Как записать в excel поле время?

    @Mercury13
    Программист на «си с крестами» и не только
    1. Записать время как double в формате «1 сутки = 1; 1 секунда = 1/86400».
    2 — простой путь. Применить какой-нибудь из предопределённых числовых форматов (думаю, лучше всего подходит 2E16 = [h]:mm:ss сверх 24 часов).
    2 — сложный путь. Похимичить с форматными строками.
    Ответ написан
  • Браузер игнорирует keep-alive?

    @Mercury13
    Программист на «си с крестами» и не только
    Это другая штука, имеющая опосредованное отношение к keep-alive. Это загрузка информации в несколько потоков.

    Почему шесть соединений, а не пять — другой вопрос. Я бы предположил вот что. Браузер разобрал index.html и увидел там картинку. Создаём новое HTTP-соединение (нешифрованное) — два пинга спустя поехали данные. Задействуем имеющееся — один пинг спустя. С небольшим пингом браузер просто подумал, что быстрее будет вот так. А может, браузер просто туп и если мы укладываемся в количество соединений с одним сервером — создаём новые, да и всё.

    А вот то, что все картинки в разных потоках — это верно. Если считать скорость сети «бесконечной», для каждой из них информация пойдёт с запозданием в два пинга. Работай мы в один поток — первая пришла бы с запозданием в 2 пинга, вторая в 3 пинга, третья в 4 пинга… А вот протоколы SPDY и HTTP/2 позволяют сказать: «Дай мне картинки А, Б и В»,— и они все, ОДНИМ СОЕДИНЕНИЕМ, придут с запозданием в два пинга.

    Другими словами:
    HTTP (все метки времени — когда они были посланы с клиента/приняты клиентом):
    К: SYN: (+0 пингов)
    С: SYN+ACK (+1 пинг)
    К: ACK (+1 пинг)
    К: Запрос 1 (+1 пинг)
    С: Ответ 1 (+2 пинга)
    К: Запрос 2 (+2 пинга)
    С: Ответ 2 (+3 пинга)

    HTTP2:
    К: SYN: (+0 пингов)
    С: SYN+ACK (+1 пинг)
    К: ACK (+1 пинг)
    К: Запросы 1, 2 (+1 пинг)
    С: Ответы 1, 2 (+2 пинга)

    На реальных «не очень быстрых» соединениях играют роль не только пинги, но и скорость передачи. Тогда картинки начнут появляться не по одной, а по восемь (или сколько там соединений) — это тоже может повлиять на впечатление от браузера. К тому же если случился затор на шлюзе локальной сети — тогда, если одно соединение забарахлит, другие что-то привезут. А если сеть не очень хорошо сконфигурирована — это ещё и ввосьмеро увеличит скорость передачи (реально в начале 2000-х качал в универе 10-мегабайтный драйвер за перемену в 100 потоков).

    Я бы посоветовал сделать штук двадцать картинок — и тогда начнётся повторное использование имеющихся соединений.
    Ответ написан
    Комментировать
  • Почему Eclipse не подсвечивает тип данных string?

    @Mercury13
    Программист на «си с крестами» и не только
    Главная причина: int — ключевое слово Си++, а string — нет.
    Система программирования может подсвечивать стандартные контейнеры STL другим цветом. Вот, например, скриншот Code::Blocks.
    6cd9ef6d6e4346aaaac0de090af78f88.png
    Видите, ключевое слово char синее, а стандартный объект STL std::string — зелёный.
    (Да, специалисты, вижу, что на экране результат не слишком удачного рефакторинга. Для специализированной утилиты в шестьсот строк, думаю, покатит.)
    Ответ написан
    Комментировать
  • Qt(C++) на windows XP?

    @Mercury13
    Программист на «си с крестами» и не только
    Си++ и Qt сделаны кроссплатформенными, то есть скрывают разницу между платформами где-то у себя внутри.

    Компиляторы перестают поддерживать ту или иную ОС последними. Процессор-то остаётся тем же — ну и норма. Думаю, скомпилированное MinGW (без Qt) даже на 98 запустится.

    Так что разницы не будет, если весь наш софт будет работать на хост-ОС и все наши библиотеки будут запускаться на целевой ОС. А вот с поддержкой беда, версия 5.6 объявлена последней, которая официально поддерживает XP как хост-, и 5.7 — XP как целевую. Работает всё-таки? Вот и классно!

    Да. Раз уж в Qt есть три системы сборки — могут возникнуть вопросы, когда нужно редактировать руками pro-файл. Большинство руководств предполагают QMake. Я держусь на нём, потому что так и не выяснил, как QBS работает с многоядерными процессорами. Двести файлов в проекте — сами понимаете.
    Ответ написан
    Комментировать
  • С чего начать создания текстовой игры?

    @Mercury13
    Программист на «си с крестами» и не только
    Движок можно даже самописный. Считается, что движок — дело тяжёлое, но для таких игр это не так.
    Начать надо со среза механики и предельно упрощённого движка на чём угодно (хоть в консоли, хоть на Java AWT).
    Ответ написан
  • Как сделать численно равные выборки из нормального и любого иного распределения?

    @Mercury13
    Программист на «си с крестами» и не только
    UPD. Раз у нас нормальное распределение — надо построить нормальное распределение, оцененное по методу наивысшего правдоподобия.
    А затем вычислить F−1(0,05), F−1(0,1), …, F−1(0,95).
    Ответ написан
    Комментировать
  • Как передать counter is for loop внутрь макроса?

    @Mercury13
    Программист на «си с крестами» и не только
    Будет подставлено ИМЯ ПЕРЕМЕННОЙ b, а чему она равна — это уже другой вопрос. Никаких проблем не должно быть.
    #include <iostream>
    
    #define CHECK(a,b) \
       if ((a) == (b))     \
          std::cout << "Equal" << std::endl;  \
          else std::cout << "Inequal" << std::endl;
    
    int main()
    {
        for (int i = 0; i < 5; ++i) {
            CHECK (i, 2)
        }
        return 0;
    }


    После препроцессирования программа превратится вот во что…
    int main()
    {
        for (int i = 0; i < 5; ++i) {
            if ((i) == (2))
               std::cout << "Equal" << std::endl;
               else std::cout << "Inequal" << std::endl;
        }
        return 0;
    }


    Вывод в консоли
    Inequal
    Inequal
    Equal
    Inequal
    Inequal


    Разумеется, нехороши ситуации, когда в макрос подставляется код с побочными эффектами, но это другой вопрос.
    Ответ написан
    1 комментарий
  • Какие задачи решаются на C++?

    @Mercury13
    Программист на «си с крестами» и не только
    На Си++ пишутся сложные быстрые программы. Этим всё сказано.
    Игры, настольные программы, всякие там серверы…

    Лучше скажу, что НЕ пишется на Си++.
    1. Софт, сильно абстрагированный от машины, изменяемый пользователем и/или призванный запускаться где угодно: программы для iOS, Android, веба, высокоуровневые части некоторых игр…
    2. Компактные программы (например, для микроконтроллеров). Сейчас — вотчина Си и его уменьшенных библиотек.
    3. Простые программы, для которых быстродействие и установка дополнительного фреймворка — не проблема: 2D-игры наподобие Braid или Fez, графический редактор Paint.net…
    Ответ написан
    Комментировать
  • Реально ли 2d игра на С++ без граф.библиотек и движокв?

    @Mercury13
    Программист на «си с крестами» и не только
    Без DirectX или OpenGL никуды, это самые низкоуровневые API, дающие как скорость, так и мало-мальскую совместимость.
    Советую использовать тонкую обёртку над всем этим добром вроде SDL: думаю, интереснее будет писать игру, чем решать проблемы с Alt-Tab.
    А так, если задаться целью, можно небольшой движок сделать за неделю-две. Остальное лучше оставить на багофиксы и наполнение.
    Не советую работать с гексами, и вот почему. Гексы сразу же подразумевают, что игра пошаговая. ИИ замучитесь писать!

    И ещё. Систему анимации-то можно за это время написать, но сделать хороший редактор анимаций сложнее. Каждый кадр — отдельная картинка, и всё?
    Ответ написан
    1 комментарий
  • Нарушают ли указатели и разименование в c++ принципы ООП?

    @Mercury13
    Программист на «си с крестами» и не только
    Не будем встревать в холивар «должен ли указатель быть объектом». Примем, что указатель — простейший тип, ради совместимости и эффективности.
    К простейшему типу инкапсуляция и наследование неприменимы.
    А вот для полиморфизма указатели очень нужны. Динамический полиморфизм — это когда под одним фасадом могут оказаться разные объекты.
    1. По копии их передавать невозможно, только по указателю/ссылке.
    2. Их нельзя уничтожать под одну гребёнку. А значит, если мы их передаём в чьё-то другое владение, надо удостовериться, что они созданы в «куче» и у «фасада» есть виртуальный деструктор.

    Есть ещё два принципа ООП — абстракция и принцип Лисков. Первый имеет отношение к указателям постольку, поскольку есть полиморфизм. Второй — гугли «ковариантные/контравариантные указатели».
    Ответ написан
    1 комментарий