Why not using Linux kernel with Mono? Why the effort to write a kernel?
Creating our kernel written in C# and our run time we will accomplish a lot of advantages respect to use the Linux kernel:
There will be only a version of Cosmos that will run on any CPU (code once run everywhere)
The OS will be safer using the Linux kernel we will expose us to all the security bug that C code has
Cosmos and the applications will condivide the same memory space using the .NET runtime to isolate processes memory. At the same time when needed a process could give the “ownership” of an object to another process directly without the need to serialization; a reference to the very same object will be used
Cosmos will permit to implement Zero Copy I/O very easily (faster web server ever?)
Using C# will permit us to code and debug using Visual Studio to debug the kernel itself
Not using the Linux kernel we do not take the dependency from others and are more free to do our choices
т.е. всякие rufus точно не подойдут, они тупо не знают как загрузчик установить и настроить
к сожалению эта реализация по сетевому трафику не сильно отличается от vnc, по крайней мере когда я тестировал несколько лет назад
в оригинале rdp(старые версии, а новые в linux не завезли) транслирует каждый GDI вызов, по крайней мере это было видно при тормозной сети, при этом не было лага как в vnc, но в linux версии rdp ты получишь именно vnc реализацию с лагом
замена в тексте каких то магических констант на другие значения чтобы получать разные итоговые тексты и есть формирование текста на основе шаблона
программа/алгоритм, которая из шаблона превращает итоговый документ называется шаблонизатор
для php шаблонизаторов написано десятки, это помимо того что сам php это уже шаблонизатор, я об этом уже написал
p.s. в большинстве случаев шаблоны можно вообще перенести на сторону клиента и генерировать документ там, освободив сервер и сеть клиентов от ненужной нагрузки
ну значит у тебя не шифруется
если в гуглхроме не вводишь пароль, но есть авторизация, значит у тебя хранится токен авторизации гугл, а вот чем шифруется куки на компьютере не хранится, его выдаст гугл когда проверит этот токен (само собой если ты и в хроме не авторизован, то тогда да, не шифруется)
было одно время когда браузеры не шифровали куки, потом случился незаметный бум троянов/вирусов, которые их массово воровали, и браузеры подсуетились и все зашифровали
firefox шифрует куки паролем (если он включен), без него их не достать
что то мне говорит что chromium такую же функцию имеет, либо как то завязано на аккаунт google (т.е. без авторизации получить куки не получится)
С маленькой буквы слово интернет уже не пишут, используется когда нужно подчеркнуть именно технологию (например в составных словах) и отдельно не используется, я неправ, надо говорить интранет.
Локальная сеть - формально это интернет как технология, при использовании ip адресов из разрешенного диапазона.
Если ты к примеру добавишь к своей машине ip адрес не из локального диапазона (например 8.8.8.8) и сделаешь так для кучи сайтов (так например реализуют i2p и tor сети для приложений без поддержки прокси) то ты получишь свой собственный интернет, называть его Интернет нельзя, он другой (в северной корее назвали Кванмён, кстати там ip адреса под вопросом, возможно и локальные)
судя по отзывам тебе хватит первого 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); // делаем сдвиг
этот подход самый гибкий, но нужно следить за выходом за границы, так как преобразования типов ненадежны, в смысле если ты допустишь ошибку, ты можешь об этом не сразу узнать.
т.е. всякие rufus точно не подойдут, они тупо не знают как загрузчик установить и настроить