• Паттерны проектирования?

    TrueBers
    @TrueBers
    Если вы не понимаете, для чего они вам нужны, значит ещё рано их учить. Потом поймёте.
  • Как писать кроссплатформенные приложения на C++?

    TrueBers
    @TrueBers
    Чего это Qt для андроид не подходит?
    Достаточное количество популярных приложений написано на нём, тот же Телеграм, 2ГИС.
  • Qemu грузит процессор?

    TrueBers
    @TrueBers
    Или, если диск не ССД и трим не нужен, то можно на virtio-blk вешать.
  • Qemu грузит процессор?

    TrueBers
    @TrueBers
    asapelkin: А если без проброса видео?
    И, загрузка от простых числодробилок или от, допустим, сетевой активности или диска?
    Стоят virtio драйверы?
    Попробуйте зацепите диск за virtio-scsi и сеть повесьте на virtio-net-pci, ну и дрова, естественно, если не стоят. Нейтив ввод-вывод ещё можно попробовать с прямым кешем: -drive aio=native,cache.direct=on
    Ещё, как вариант, вынести ввод-вывод в отдельный тред через -object iothread.
    Лишние устройства, также можно вырубить, через всякие -serial none -parallel none -nodefaults -nodefconfig -no-user-config -nographic
  • Есть ли жизнь в консоли на нетбуке?

    TrueBers
    @TrueBers
    fshp: Ну, как минимум, когда пробовал его на ноутбуке в режиме энергосбережения, когда частота снижена до 800МГц, zsh заметно так тупил, когда баш вполне сносно откликался.
  • Есть ли жизнь в консоли на нетбуке?

    TrueBers
    @TrueBers
    fshp: Что-то я очень сомневаюсь, что zsh будет комфортно работать на проце 900МГц и гипермедленной флешке в качестве накопителя.
  • Как UTF-8 помещается в char?

    TrueBers
    @TrueBers
    В строке с символами, ломающими тостер, имелись в виду 4 любых символа, выходящие за диапазон 0-FFFF. Сколько ни бился, ни один тег тостера их не понимает, вся разметка плыть начинает.
  • Как UTF-8 помещается в char?

    TrueBers
    @TrueBers
    abcd0x00: как же тяжко, блин… =)) почему нельзя просто принимать опыт, который люди получили на своих ошибках, набив огромные шишки, исписав тысячи строк на стековерфлоу фразами "Помогите, мужики, нихера не понимаю чё делать с этим юникодом! От от ASCII уж больно отличается!" и, благодаря этому опыту, не ошибаться самому? Гордость не позволяет что ли? Причём, эта проблема, как будто вездесущая. Весь мир упирается против нормальной поддержки UTF-8 везде, где можно. Каждый норовит придумать свою религию или секту кривых кодировок.

    Ты говорил, что невозможно найти длину строки в UTF-8. Возможно найти длину строки. Надо просто перегнать байтовые в ширкосимвольные и применить wcslen().

    Мы же хотим писать кроссплатформенно, правда? Чтобы было минимум костылей для разных систем. Вот теперь сравните выдачу этой функции у MSVS и у gcc\clang:
    size_t len = wcslen(L"здесь готские символы из диапазона 10330 — 1034F, которые ломают разметку Тостера :D ха-ха-ха.");
    // вот вам пример крутой поддержки юникода от авторов самого посещаемого ИТ ресурса рунета, очень смешно

    ВНЕЗАПНО, VS выдаст 8(восемь!), а гцц и клэнг верно выдают 4. Потому что символы из готской письменности выходят за диапазон 0-FFFF, который может помещать виндовый wchar_t, а по причине закостыливания UTF-16 в wchar_t у винды, им приходится пилить эти символы с помощью суррогатных пар. Отсюда кривой вывод длины. Что происходит на менее популярных компиляторах, я даже проверять не хочу, чтоб настроение не портить.

    Что ты пытаешься показать, что "й" невозможно сравнить с "й"? Возможно их сравнить. И с чего ты взял, что прямая "й" и составная "й" должны быть равными?

    Ну, потому что, стёб — значит стёб, к тому, что Си не умеет юникод. Ибо в нём нет функций поиска, а нет, потому что не умеет нормализацию. Он умеет лишь примитивный collation 1-го уровня (а их целых 5! www.unicode.org/reports/tr10/#Multi_Level_Comparison), который рассказывает только о том, у какого символа в таблице веса больше. А нам, допустим, нужен полнотекстовый поиск в приложении. Мало того, что отдельно нужен поиск по хранилищу (в котором хранится обычно NFC, а на вход поиска приходит NFD), и отдельно поиск по визуальной части графического интерфейса (NFKC, либо NFKD). Такая же проблема существует при конкатенации строк в разных нормальных формах, более того, если даже форма нормализации одна у обеих строк, это никак не гарантирует, что результирующая окажется в нормальной форме.
    unicode.org/reports/tr15/#Canonical_Equivalence
    www.unicode.org/reports/tr10/#Asymmetric_Search

    Или, если вы пишете какую-то крутую читалку или любое приложение, где важен внешний вид текста, вам нужно делать переносы слов, слогов, абзацев и т. д. Ладно — русский, английский и более-менее понятные европейские языки вы можете захардкодить костылями. Но, попробуйте правильно перенести на иврите, арабском, или каком-нибудь бирманском: "မင်္ဂလာပါကမ္ဘာလောက!" Вот сходу скажете сколько слов в этом предложении? Встроенные средства Си сделают адекватный split хотя бы по словам? А если написание полностью видоизменяется при переносе в некоторых языках? Конечно же ни Си ни C++ этого не сможет, ибо нужна поддержка сегментирования (unicode.org/reports/tr29/).

    Как вы это предлагаете делать в Си без сторонних библиотек? Ну вот в упор не вижу, что он это поддерживает, может это в виде пасхалки реализовано или надо секретный флаг компилятору передать?

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

    Снова смотрим, вами горячо любимый, стандарт:
    unicode.org/reports/tr15/#Canon_Compat_Equivalence
    Canonical equivalence is a fundamental equivalency between characters or sequences of characters which represent the same abstract character, and which when correctly displayed should always have the same visual appearance and behavior.
    always — значит всегда, same — значит одинаковый. Если у вас что-то выглядит по-разному, значит установлены кривые шрифты или что-то не так настроено. Возможно, криво запатчен fontconfig патчами от народных умельцев. У меня выглядят они абсолютно идентично.

    В общем, считаю вопрос закрытым. И посоветую использовать для процессинга юникода отличную библиотеку ICU. Хотя, лично мне нравится Boost.Locale, у него можно в качестве бекенда использовать эту же самую ICU, а можно и ваши любимые встроенные средства языка, правда, очень уж ущербненько =)
  • Qemu грузит процессор?

    TrueBers
    @TrueBers
    asapelkin: а что именно грузит, то? в винде процесс какой-то показывается? или в винде по нулям?
  • Как UTF-8 помещается в char?

    TrueBers
    @TrueBers
    abcd0x00: железные аргументы, аж не поспоришь :D это называется Стандарт Головного Мозга.
    Определить — символ это или цифра, думаю, Си в состоянии, но не более того.

    #include <stdio.h>
    #include <locale.h>
    #include <wchar.h>
    #include <string.h>
    
    int main(void)
    {
        setlocale(LC_ALL, "ru_RU.UTF-8");
    
        mbstate_t state;
    
        const char *iy_mb = u8"й";
        const char *iyy_mb = u8"й";
    
        memset(&state, 0, sizeof state);
        size_t len = 1 + mbsrtowcs(NULL, &iy_mb, 0, &state);
        wchar_t iy_w[len];
        mbsrtowcs(&iy_w[0], &iy_mb, len, &state);
    
        memset(&state, 0, sizeof state);
        len = 1 + mbsrtowcs(NULL, &iyy_mb, 0, &state);
        wchar_t iyy_w[len];
        mbsrtowcs(&iyy_w[0], &iyy_mb, len, &state);
    
        // wchar_t from u8 mb
        wprintf(L"%ls\n", !wcscoll(iy_w, iyy_w) ? L"==" : L"!=");
        wprintf(L"%ls\n", !wcscmp(iy_w, iyy_w) ? L"==" : L"!=");
        
        // wchar_t
        wprintf(L"%ls\n", !wcscoll(L"й", L"й") ? L"==" : L"!=");
        wprintf(L"%ls\n", !wcscmp(L"й", L"й") ? L"==" : L"!=");
    
        return 0;
    }


    [hv@main-hv tmp]$ clang -std=c11 -Wno-c99-compat -Weverything -pedantic test.c && ./a.out 
    !=
    !=
    !=
    !=


    й не равно й? Правда? Наверно, gcc и clang тоже не поддерживают стандарты, как и проклятая вижуал студия! :D Приводить примеры с неверными строчными капитализациями и прочими извращениями даже не хочется.

    Да, пример достаточно надуманный просто для стёба. Понятно, что в ненормализованной форме никто юникод не сравнивает, и в базах обычно хранится какой-нибудь NFC, но весь к этому NFC ещё как-то надо привести? Либо писать свой костыль на тысячи строк, либо брать готовую библиотеку, которые пишут уже не один десяток лет.

    Тогда о какой поддержке Юникода в Си (и вашем ненавистном C++ тоже) может идти речь?
  • Как UTF-8 помещается в char?

    TrueBers
    @TrueBers
    abcd0x00: В игру вступают теоретики =)) Товарищ, тыкальщик, вы, собственно, когда в последний раз использовали в продакшене то, о чём так люто брызжете слюной? Можно ссылочки на гитхаб, пожалуйста?

    Локали прописать? Что-то я не помню адекватной поддержки нормализации юникода в STL. Классический пример: напишите мне ваши пару строк, где нужно "просто локаль привязать" для сравнения\поиска_подстроки в utf8 строках, содержащих символы, типа немецкого эсцета, греческой сигмы, десятков вариаций турецкого "i", тысяч различных диграфов в языках, зависящих от их местоположения в слове, диакритику и т.п. Я очень удивлюсь, если вы сможете это сделать средствами стандартной библиотеки:

    to_upper(u8"Maßstab") == to_upper(u8"Maſsstab") == (u8"MASSSTAB") == (u8"MAẞSTAB")
    to_lower(u8"ΣΊΓΜΑΣ") == u8"σίγμας" == u8"ϲίγμαϲ" == to_lower(u8"ϹΊΓΜΑϹ")

    Про хранение в wchar_t... прикольно. У таких же теоретиков, которые предлагали это в стандарт, да, в идеале они хотели этого. Но идеалов не бывает, к счастью\сожалению. Вы в курсе, что реализация wchar_t у винды не соответствует стандарту ISO/IEC 10646 с бородатейших времён и до сих пор, в отличие от других современных компиляторов, соответственно, ни о какой переносимости кода речи быть не может!? Видимо, не в курсе, погуглите в свободное, от изучения теории, время. Ещё раз повторю: шишек набито на wchar_t очень много, не нужно его использовать нигде, кроме WinAPI! Ну зафейлился он by design, ну что поделать?!

    А авторов, в своё время, да, читал, никому неизвестного фреймворка Qt, твиттера, Trello, ICU, Boost и прочих неизвестных вещей.

    Вот, как просили, ссылочки, засирайте мозг на здоровье! =):
    utf8everywhere.org
    https://dev.twitter.com/basics/counting-characters
    softwareengineering.stackexchange.com/questions/10...
    https://www.reddit.com/r/cpp/comments/2zv2qo/best_...
    https://google.github.io/styleguide/cppguide.html#...
    www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf (6.10.8, _ _STDC_ISO_10646_ _)
    archives.miloush.net/michkap/archive/2005/12/21/50...
  • Как UTF-8 помещается в char?

    TrueBers
    @TrueBers
    Кодировка 1251 это исключительно виндовая вещь для русской локали. У другого языка на винде, будет другая кодировка. Например, восточная европа использует 1250, греческий — 1253, и т.д. Но это работает только на винде и нигде больше.
    Просто, нужно различать ВХОДНУЮ кодировку, кодировку ХРАНЕНИЯ и ВЫХОДНУЮ. Они ВСЕ могут быть разными и просто преобразовываться из одной в другую, когда это необходимо.

    Для понимания достаточно абстрагироваться от типов, типы — это искусственная вещь, придуманная для человека. А учитывая, что язык Си изначально разрабатывался учёными для учёных, то типы у него получились, мягко говоря, странные и неподходящие под современные реалии. Данные же в памяти хранятся вообще независимо от каких либо типов и интерпретаций. Не нужно на них зацикливаться, а воспринимать данные как последовательность бит и ничего более.

    И char — это просто тип данных, равный 8 битам. И всё. Он не имеет ничего общего с кодировками, символами, строками. Совсем ничего. Просто, однажды приняли, что он подходит для хранения позиций однобайтовых кодировок типа ASCII, ибо других на то время просто не существовало. С тем же успехом строки можно и в int хранить, и в double. Сейчас же строки в современных кодировках, типа UTF-8, хранятся просто в массивах байтов и не имеют никакого отношения ко встроенным фичам языков Си и C++.
  • Как UTF-8 помещается в char?

    TrueBers
    @TrueBers
    Алан Кабисов: она туда не помещается. Кириллица занимает 16-битный диапазон, в 8 бит она не поместится. Вы путаете с какой-нибудь CP1251.
  • Почему клиент upwork под линуксом такой тормозной?

    TrueBers
    @TrueBers
    Пума Тайланд: хм, другу фуллстековцу приходил инвайт прошлым летом от Upwork Dev Team, писать бекенд для самого апворка, предлагали 13 в час. Когда тот назвал 25 минимум, сказали, что такого бюджета у них нет. При этом, даже интервью ещё не было
  • Почему клиент upwork под линуксом такой тормозной?

    TrueBers
    @TrueBers
    Думай Головой: У меня тоже арч. Иногда тупит, иногда вообще не работает :D вчера вот писало, что обнаружен учёт времени с нескольких компьютеров. Поэтому, работать вы не сможете. И такую херь часа 2 несло.
  • Почему ноутбук сразу включается после входа спящий режим?

    TrueBers
    @TrueBers
    для чего вам это на ноутбуке? оно ж аккумулятор жрёт как не в себя
  • Приобретать ли GTX 1060 имея в наличии i5-4570?

    TrueBers
    @TrueBers
    Nekto_Habr: А потому что её нет, по сути. Брал на CU, париться с возвратом не охота было
  • Приобретать ли GTX 1060 имея в наличии i5-4570?

    TrueBers
    @TrueBers
    Nekto_Habr: Ну, не скажи. У меня такая же 1070. Дроссели достают дико, благо, в наушниках их не слышно обычно. Но без ушей очень не комфортно долго сидеть рядом с этим.
  • Почему не работает libcurl?

    TrueBers
    @TrueBers
    Ну, документацию что ли почитайте. Всё ж само не сделается без вашего участия. https://curl.haxx.se/docs/install.html
    Там же описано, что нужно сделать. Даже пример конкретный есть для вашего случая.