Как стать автором
Обновить
0
0

Пользователь

Отправить сообщение

Огромное спасибо за перевод. Тут один из поставщиков связывался с HPMicro, те ответили, что вся доступная документация выложена, на английском пока только SDK (http://doc.hpmicro.com/). Обещали в конце этого года выложить ещё, но пока появились только старые буклеты на английской версии сайта.
HPM67xx очень привлекательны (да ещё и PTP). Но документация только на китайском явно не идёт им на пользу. А купить можно, но лишний раз никто не афиширует.

Приведу обратный пример. Если надо работать с Unicode, то стандартной библиотеки мало. А внешние библиотеки могут потребовать определённых знаний и умений.

Пример: разбиение текста на предложения и слова используя ICU (не плохо о сегментации Unicode строк тут: https://habr.com/ru/articles/518900/):

#include <iostream>
#include <memory>

#include <unicode/brkiter.h>
#include <unicode/locid.h>
#include <unicode/unistr.h>
#include <unicode/ustream.h>
#include <unicode/utf.h>

void print_words(const icu::UnicodeString &str, const icu::Locale &locale)
{
    UErrorCode err = U_ZERO_ERROR;

    std::unique_ptr<icu::BreakIterator> breaker{
        icu::BreakIterator::createWordInstance(locale, err)};
    // TODO: check err;

    breaker->setText(str);
    int32_t first = breaker->first(), last;
    while ((last = breaker->next()) != icu::BreakIterator::DONE) {
        if (breaker->getRuleStatus() != UBRK_WORD_NONE) {
            std::cout << icu::UnicodeString(str, first, last - first) << '\t';
        }
        first = last;
    }
    std::cout << std::endl;
}

void print_sentences(const icu::UnicodeString &str, const icu::Locale &locale)
{
    std::cout << str << std::endl;
    UErrorCode err = U_ZERO_ERROR;

    std::unique_ptr<icu::BreakIterator> breaker{
        icu::BreakIterator::createSentenceInstance(locale, err)};
    // TODO: check err

    breaker->setText(str);
    int32_t first = breaker->first(), last;
    while ((last = breaker->next()) != icu::BreakIterator::DONE) {
        print_words(icu::UnicodeString(str, first, last - first), locale);
        first = last;
    }
    std::cout << std::endl;
}


int main()
{
    icu::Locale locale_rus{"ru_RU"};
    icu::Locale locale_china{"zh_CN"};

    auto hello =
        icu::UnicodeString::fromUTF8("Hello, World! Привет, мир! 你好世界! ?");

    auto poem = icu::UnicodeString::fromUTF8(  //
        "太乙近天都,"                         //
        "连山到海隅。"                         //
        "白云回望合,"                         //
        "青霭入看无。"                         //
        "分野中峰变,"                         //
        "阴晴众壑殊。"                         //
        "欲投人处宿,"                         //
        "隔水问樵夫。");

    print_sentences(hello, locale_rus);
    print_sentences(poem, locale_china);

    return 0;
}

Результат:

Hello, World! Привет, мир! 你好世界! ?
Hello	World	
Привет	мир	
你好	世界	


太乙近天都,连山到海隅。白云回望合,青霭入看无。分野中峰变,阴晴众壑殊。欲投人处宿,隔水问樵夫。
太乙	近	天	都	连	山	到	海隅	
白云	回	望	合	青	霭	入	看	无	
分野	中	峰	变	阴	晴	众	壑	殊	
欲	投	人	处	宿	隔水	问	樵夫

Сложнее, чем было? Намного? А по сравнению с другими языками программирования? Хочется более современный API?

Но всё это не отменяет возможности выводить сообщения на utf-8 в консоль с первых занятий, если есть такая возможность. Так или иначе С++ не должен быть первым языком программирования, и тогда небольшая порция информации по настройке окружения не должна смущать. Главное не давать задачи на обработку не ASCII строк в первых главах.

Рекурсивная функция для проверки, является ли слово палиндромом: https://www.cyberforum.ru/cpp-beginners/thread3071532.html

bool isPal(const string& str, int start, int end)
{
    if (start >= end)
        return true;
    if (str[start] != str[end])
        return false;
    return isPal(str, ++start, --end);
}

И на этом сайте можно найти достаточно много простых задач, которые задают студентам/школьникам.

Первая проблема с

std::cout << "Привет, мир!\n";

набранном в IDE, это отсутствие понимания в какой кодировке будет сохранён файл. И cp1251 в MSVC не единственный прикол. Например, MounRiver Studio может сохранить код в китайской 1-2 байтовой кодировке ?GBK? в которой есть и кириллица и греческий (забавно выглядит ситуация, когда файлы в этой кодировке попадают в github/gitlab).

Никто не обещает, что строки в исходном коде не поменяют кодировку при компиляции.

BOM-же является Windows-специфичным костылём. О котором лучше бы забыть и научиться настраивать кодировки в свойствах проекта. Но он действует. Как и пачка советов в https://www.cyberforum.ru/cpp-beginners/thread10662.html

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

  • Найдите самое длинное слово.

  • Найдите в тексте слова палиндромы.

  • и т.п. задания где нужен посимвольный доступ.

И это без учёта того, что utf-8 - это уже не про символы, а про Code point. Мы приходим к тому, что, вроде как, нужны библиотеки для работы с Unicode-строками. И начинается много вопросов, как?

Каждый курс обрастает своими костылями и методами решений. Один преподаватель указывает кодировку в коде и вызывает паузу в конце работы программы. Другой преподаёт С++ в Linux, используя его пакетный менеджер для развёртывания среды.

Производственные роботы далеко не нуждаются в ROS. Посмотрите, для примера, на портфолио Mitsubishi Electric (ПЛК, приводы, манипуляторы и софт). ROS хорош для роботов пылесосов. Но промышленная робототехника до него ещё не доросла.
И есть ещё большая проблема в проприетарных протоколах, которые завязывают оборудование на одного большого игрока. Японцы, например, стали активно проталкивать CC-Link в сфере автоматизации производства, но остаётся ещё много не решённых вопросов.
Достаточен ли рынок России для внутреннего производства промышленных роботов? В России всего в десять раз меньше населения чем в Китае, а вот соотношение производителей микропроцессоров ещё более удручающее. Но есть и примеры у нас в стране, когда хорошо продуманный комплект стандартов позволяет более менее успешно существовать компаниям производящим отечественное специализированное микропроцессорное оборудование (например, в сфере энергетики).

В Китае разрабатывается архитектура RISC-X

Китай не разрабатывает свою архитектура. Словосочетание "RISC-X" было растиражировано после статьи Бао Юнганя (包云岗), который является генеральным секретарём CRVA (China RISC-V Aliance, 中国开放指令生态(RISC-V)联盟). В этой статье он говорил о важности развития RISC-V в Китае. О том, что Россия и Индия потенциальные партнёры для Китая в развитии RISC-V. О том, что более половины членов RISC-V International - это Китайские компании. И если, вдруг, Китай попрут из этой организации. То вполне хватит сил создать форк с именем RISC-X, оставаясь совместимым и независимым от других. Таким образом получаем "Ученый изнасиловал журналиста №1".

При этом Бао отвечал на разразившуюся дискуссию о том, а что если Китаю запретят использовать RISC-V как это хотят сделать с Россией. И вся это из-за интервью CEO RISC-V International Калисты Редмонд (Calista Redmond), в котором она аккуратно обошла вопрос санкций к России фразами:

But Redmond says that, as with other countries, such as Russia, RISC-V International is "not required to block anybody from engaging and participating," though the organization will make changes if needed.

"If things go the way of sanctions that are heavier on a country level, we may need to pivot, but at this point we are abiding by things and [are] in very close contact in understanding what are other open source and global organizations doing," she says.

Таким образом получаем "Ученый изнасиловал журналиста №2".

Оумуамуа показал как должен действовать исследовательский зонд в другой планетной системе.

  1. Проникнуть внутрь орбит планет системы, тем самым изучив состав хотя бы нескольких из них.

  2. Развернуться на 90°, и максимально быстро уйти в сторону от звезды, с точки зрения наблюдателя-отправителя.

  3. Отправить сообщение мощным лазерным лучом (или т.п.), правда это может слегка изменить траекторию объекта, но аборигены всё равно не поверят, что это было сделано специально.

Остаётся вопрос как добиться нужной скорости зонда при входе в планетарную систему:

  1. Не обращать внимание на время в Х тысяч лет на перелёт? Зато экономим энергию.

  2. Иметь возможность не только разогнаться, но и затормозить? И заодно иметь возможность скорректировать орбиту.

  3. Что-то что для нас сейчас сродни магии, как и любая более развитая технология?

Shadowsocks — это бесплатный проект протокола шифрования с открытым исходным кодом, который широко используется в Китае для обхода интернет-цензуры. Репозиторий удалили из -за нарушения правил сервиса к моменту написания статьи.

Внимательнее надо быть... Там по дефолту веточка rm семилетней давности для товарища майора, и веточка master (хотя и немного старенькая)

то SD-карту все-таки выносят на платы расширения.

Так я об этом и говорю.

А вариант вывести MicroSD и пару boot битов на контакты SoM-а не рассматривали? Тогда на стенде, за счёт переподтяжки boot битов, можно было бы грузиться с MicroSD и прошивать без программатора. А через нескольких GPIO контролировать результат.

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

А можно подробнее что появилось в GCC11? Более точное определение ошибок? Т.к. я достаточно давно видел использование массивов переменной длины, в закладках же тогда появился такой код:

#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>

void fill(const size_t N, double A[N][N])
{
    for (size_t i = 0; i < N; ++i) {
        for (size_t j = 0; j < N; ++j) {
            A[i][j] = 10 * i + j;
        }
    }
}

void print(const size_t N, double A[N][N])
{
    for (size_t i = 0; i < N; ++i) {
        for (size_t j = 0; j < N; ++j) {
            printf("%4.1f ", A[i][j]);
        }
        printf("\n");
    }
}

int main()
{
    for (size_t N = 5; N < 10; ++N) {
        double(*A)[N][N] = calloc(1, sizeof(*A));
        printf("Created matrix with size %d\n", (int)sizeof(*A));
        fill(N, *A);
        print(N, *A);
        free(A);
    }
    return 0;
}

И он нормально компилируется gcc-4.8. Всё это похоже чем-то на Фортран. Но не популярно т.к. не совместимо с С++.

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

«охренеть, как дорого!», «она что, из золота?» и «ценник вообще атас».

Вот я один из таких. Никак не могу понять, почему 20 лет назад на стипендию и зарплату лаборанта я мог привезти из Питера 10-20 книг по программированию и математике.

Информация

В рейтинге
Не участвует
Откуда
Архангельск, Архангельская обл., Россия
Зарегистрирован
Активность