Осознал что чистый int неизвестно какого размера мне перестал быть нужным. Кроме как передать в printf и общаться с api ос.
Давно использую (u)intXX_fast_t для считаная и (u)intXX_t для хранения. А так же (s)size_t для работы с памятью.
Некоторое время продолжал использовать int и unsigned для всяких констант и вычисления во время компиляции пока не понял что проще и надежнее в таких случаях сразу брать (u)int_max_t.
Про всякие short и прочие странные long long вообще молчу. Чистый бред.
PS реквестирую современный подход к шаблонам в printf. Чтобы не %d а %u8, %i32
>>> cat test.cpp
int foo(unsigned x) {
}
int main() {
foo(-1);
return 0;
}
>>> g++ -Wall -Wextra test.cpp
Хочу чтобы компилятор меня посылал когда я пытаюсь передать отрицательное число в unsigned тип неявно вместо того чтобы -1 внезапно становилась 4294967295. Такое поведение ведет к очень плохим багам.
И разрешал мне если я явно попрошу. Те foo(unsigned(-1))
Допустим дефолт хром или яндекс.браузер. Скрипты включены. Маргинальных расширений нет.
Что могут скрипты на странице браузера (кроме свистения пердения). Могут трекать мышь/тач. Могут кейлогить.
Ладно. Допустим кейлогер и мышь чисто для статистики и кроме как владелец сайта никто это больше не видит. А вот и нет. Владелец сайта встраивает рекламный скрипт. А тот в свою очередь тоже кейлогит но уже в масштабе посерьезнее. В худшем случае кейлогит какая нибудь яндекс.метрика и вы как на ладони. На какие сайты ходите, что на них пишите. Прямо в недра 3х буквенного агентства.
Но это еще не все. Гугл хром хеширует все файлы на компе до которых дотянется. Естественно в целях «безопасности» пользователя. Якобы ищет вирусы.
А еще гугл хром теперь проверяет орфографию в облаке. Те весь текст, какой бы вы не ввели в браузере, сразу отправляется ББ. Тут рекомендую только писать текст в нативном редакторе и делать ctrl+c ctrl+v на сайт чтобы ББ хотя бы не видел промежуточных результатов.
Но это все работает уже как лет 10.
Новый бич это умные колонки и аудио помощники. Которые слушают 24/7 что происходит в посещении обо всем докладывают ББ.
Спрашивал знакомых что они об этом думают. Ответ один - «мне нечего скрывать». Ладно хоть ментов вызовет при ограблении. Хоть что то хорошее.
Был у меня Casio С811. 768мб рамы хватало на джаббер, ирц, плеер, позвонить. Нужно открывать интернет и тут приехали. IceCat c парой обязательных плагинов (ublock, https always) и телефон тупит.
Ладно. Надоело это терпеть
Переехал на Kyocera Brigadier E6782. 1.5гб рамы. 4 ядра
Пару лет и опять. Джаббер, телега, плеер, тор + dnscrypt как прокси (Invisible Pro). Браузером стал kiwi(ublock, https always, umatrix). Порезвее Icecat. НО. kiwi собака сам себя обновляет. Свистелки перделки. Открыл браузер и фризы.
Дальше ехать некуда. Настоящие бронебойные телефоны с рутом закончились.
Позвонили мол пора обновить тариф «Мой Онлайн» Был 2018 года 150 мин/6гб/50смс за 165 руб.
Стал 400 мин/30гб за 200 руб. НО. Смс нет. Докупи 20смс за 20 руб в месяц или плати поштучно. Звонки на городские номера в пакет минут не входят. Чтобы входили нужно купить еще один пакет за 60 руб или 2.25 руб/мин. Нафик я обновлялся?! Жду еще приколов :/
Знайте если активируете кешбек то сразу бесплатные доставки превращаются в платные. И иногда растут цены. Такая вот правда жизни :-/ Никакой экономии не будет. Сегодня заметил вопиющий случай. BT аудио приблуда. Без кешбека просто 300руб и бесплатная доставка. С кешбеком добавили «доставку» еще 200 руб. Сам лот https://www.aliexpress.com/item/1005001621962879.html если хотите пруфов.
Пишу команду. Нужно --help по ее отдельным частям чтобы посмотреть все опции. Открываю отельные консоли. Дальше желательно протестировать отдельные части пайплайна (типа each test | sed подбираем, отлаживаем). Снова пошли новые табы в консоли. Работу можно приостановить. Консоли остаются.
Сценарий второй. Работаем с гитом, собираем. Одна консоль - git diff чего нибудь Другая консоль - git commit, push, status... Третья консоль - make | less
А потом меня спрашивают почему мне не хватает лимита 30 консолей в ConEmu :-/
int table = 13;
int id = 37;
str test1 = str("SELECT * FROM ", table, " where person_id ", id);
str test2 = str(test1); //copies test1 to test2
str test3 = str(test2, test1); // returns concat of test2 and test1
test2 = test1; // acceptable, but wrong since test2 now points to test1 not copies it.
str(*test1); // returns const char* to use in printf like functions
Ex: puts(str(*test1)); // prints test1
Как бы ок. Но меня возмущает что гцц игнорирует подобное.
На мк вообще нету const секции и там константа действительно изменяется.
Это я сравнивал enum vs static const. enum (за исключением того что он всегда int типа) точно такое не позволит. И памяти тоже гарантированно не занимает (важно для маленького размера флеша/озу мк)
#define можете даже не упоминать. Не знаю почему сишники так любят численные константы делать через #define. Да еще и без префиксов библиотеки. А потом эти дефайны везде лезут в неожиданных местах. Если портирую библиотеку и вижу кучу #define то сразу sed ом превращаю в enum. Ибо нафик. Сейчас есть острое желание сделать static const uint8_t UINT8_MAX_imp = UINT8_MAX; #undef UINT8_MAX; static const UINT8_MAX = UINT8_MAX_imp; и так для всех численных макросов стандартной библиотеки.