судя по отзывам тебе хватит первого ZET GAMING Arctic Red M2
говорят он не только nvme но и sata диски читает (но подтверждения я не нашел)
почитай отзывы к нему, человек пишет что это чип Realtek RTL9210B
поэтому если прямо критично, сначала купи один, протестируй его и если что купишь второй... ну или посмотри другие модели где точно заявлена поддержка одновременно nvme и sata
сам такими вещами не занимался, поэтому личного опыта нет
Adamos, так ты определишь что документ содержит текстовые данные
если автора устроит полуручная работа (документов мало) пусть копирует вручную.
Но если нет, код все равно придется писать, ведь проводить анализ формата так или иначе придется.
Я в похожей задачи споткнулся как раз из-за отсутствия координат у текстовых данных.
pdf очень странный формат
текстовые данные могут разделяться пробелами внутри слова! двухколоночный pdf внезапно превращается в одноколоночный и текст объединяется построчно (каша получается), а отсутствие информации над или с боку находится текст, невозможно бывает понять, к каким именно данным он относится (табличные данные)
Я помню даже пробовал abbyy fine reader (отличный пакет инструментов распознавания текста) к этой задаче присовокупить, так или иначе с таблицами беда!
что значит "сохраняет данные всем" по показанному коду у тебя ничего не сохраняется
по теме у тебя каждое сообщение содержит message.from_user.id соответственно когда что то сохраняешь, нужное для работы бота, сохраняй с указанием этого идентификатора, а когда считываешь, ищи сохраненное для этого же id, и если не найдешь - считай что это новый пользователь а значит с ним нужно с начала начинать работу
Если сохраняешь в файлах, то просто в имени файла добавляй идентификатор пользователя, в случае с телеграм у тебя не должно быть проблем с одновременным общением одного пользователя с разных устройств, а разные пользователя будут разграничены разными файлами.
Но настоятельно рекомендую делать сразу правильно, используя базы данных (sql, а nosql это по факту те же файлы, только с плюшками и индексами), как минимум для обучения.
само собой, это особенность технологии, и радуйся что их алгоритмы такие крутые, 12мп и 64мп отличаются как небо и земля, мало того даже если ты работаешь с камерой в режиме 16мп, все равно качество очень высокое.
пока еще больше мегапикселов - хорошо, цифровой зум 2х на халяву.
ты не сможешь подложить соломку и защититься от брака
максимум что ты можешь, выбирай магазины где у тебя не будет проблем с гарантийным возвратом/заменой/ремонтом
докину еще своего отношения, последние годы я покупаю именно 3-ех летней давности флагманы, когда в момент выхода они стоят почти в 2 раза дороже но через 3 года их цена заметно падает, а значит у меня есть еще 2-3 года времени жизни с хорошим устройством по хорошей цене
Так, к примеру, я когда то купил xiaomi a2 (отличный смарт, маленький шустрый хорошая камера но без стабилизации)
Сейчас у меня xiaomi redme note 8 pro (купил ровно год назад), планирую с ним хотя бы 3 года прожить
он немного великоват, хорошая камера (для fullhd есть стабилизация видео), их хваленый макрообъектив не сильно отличается от их штатного 64мбитного фото (делаешь фото с максимальным приближением и пользуешься цифровым зумом), есть nfc (ни разу не включал), из явных недостатков - он очень скользкий и хрупкий (сделано это специально, поэтому уродовать его чехлом), я читал есть те кто покрывают свои корпуса резиноподобным пластиком (вопрос не изучал но говорят помогает)
Сегодня я его бы и рекомендовал, ну возможно xiaomi 10 pro ...
Изучай под цели, нужна ли тебе большая лопата или легкий миниатюрный экран, нужно ли много памяти, нужна ли карта памяти для фото и тьма тьмущая опций, обычно вариантов и не остается
оп а сразу сказать что тебе именно надо?
чтобы разбирать пакет данных с элементами разного типа у тебя 2 подхода
* первый - заведи свой тип данных в виде структуры, описывающей весь пакет твоих данных (к сожалению это подходит только для тех типов пакетов, структура которых не имеет динамических блоков, например строк переменной длины, или их мало)
struct MyPacket
{
uint16_t myFirstElement;
uint8_t[16] myFixedLenName;
...
}
тогда твой буфер - это буквально переменная этого типа, и работать с ней можно как есть, в си есть не только простые типы но и битовые (переменная являющаяся несколькими битами от куска памяти) и union, когда один и то же блок в структуре может быть на выбор разными элементами, лишь бы размер был одинаковый.
недостаток, компиляторы по своей прихоти, ради оптимизации могут добавлять в структуру выравнивания и даже менять порядок, у разных компиляторов есть соответствующие директивы
#pragma pack(push, 1) // это отключит выравнивание по 32-64 битам
* второй - держи пакет данных в виде массива байт без типа void* (хотя любой другой подойдет, но удобнее байтовый тип), затем по шагам ты берешь нужное количество байт из этого массива и сдвигаешь указатель на соответствующее количество байт, размером с этот элемент, пример:
*(uint16_t*)buf; // читаем данные
buf+=sizeof(uint16_t); // делаем сдвиг
этот подход самый гибкий, но нужно следить за выходом за границы, так как преобразования типов ненадежны, в смысле если ты допустишь ошибку, ты можешь об этом не сразу узнать.
майкрософт ограничила типы ситуаций, в который будет работать их internet sharing
там требуется 2 ethernet подключения (по уму можно wireless настроить но не уверен что в win10 это не сломали) и главное никаких инструментов настройки, например только dhcp у адаптера, чей интернет делается общим
я выкручивался виртуальной машиной (когда то давно на 32-битных версиях работал colinux, не требовал ресурсов и весь спектр сетевого функционала на руках)
говорят он не только nvme но и sata диски читает (но подтверждения я не нашел)
почитай отзывы к нему, человек пишет что это чип Realtek RTL9210B
поэтому если прямо критично, сначала купи один, протестируй его и если что купишь второй... ну или посмотри другие модели где точно заявлена поддержка одновременно nvme и sata
сам такими вещами не занимался, поэтому личного опыта нет