TemaKam, в Linux может отображаться @ как признак того, что это симлинк, при некоторых ключах ls, например, ls -F. Но у имени файла, а не около прав. При наличии нестандартных acl там будет +, а не @
Asriel, я думал речь об общении между ботами, а не о проверке токена. Ну так можно просто дёргать /getMe у бота по url или создав объект бота в любимой библиотеке и вызвать от него bot.get_me(). Но глубокого смысла такого действия не понимаю.
Думается мне, что на Heroku и текст будет английский, и формат вывода будет из Linux, и кодировка cp866 не при делах... Не говоря уже о том, что и самого ping может не быть в песочнице, в которой запускается приложение.
Можно и даже разумно класть информацию в какой-нибудь менеджер очереди типа rabbitmq (не вместо базы, а совместно с ней). Можно класть информацию об изменениях в отдельную таблицу в самой базе. Можно версионировать записи в таблице, поднимая version при каждом изменении (если используемая база поддерживает триггеры, это можно даже автоматизировать), тогда бот будет запрашивать записи с version больше последней известной.
Любой "аналог" это всегда условность. Дело в том, что S3 - это 1) протокол 2) функционал 3) конкретная реализация.
В своё время тестировал riak cs и в нём не было поддержки S3 SIGv4. К счастью, большинство клиентов S3 поддерживают принудительное использование SIGv2, поэтому было решаемо, но всё же. Это довольно простой и в то же время реальный пример отличий.
Поддержка протокола S3 означает, что сервис умеет отвечать на запросы в соответствии с протоколом, но насколько глубоко он поддерживается? Там можно назначать метаданные файлам, генерировать preshared url или поддерживается lifecycle policy?
С точки зрения функционала вообще есть ли в этом сервисе то, что нужно? Например, умеет ли он вообще удалять файлы по истечении TTL, даже если формальное назначение lifecycle policy проходит без ошибок?
И с точки зрения реализации не факт, что всё будет работать так же, как в AWS. Например, если в AWS положить миллион файлов, то он прожуёт спокойно. А если положить в minio миллион файлов на один уровень вложенности, то будет очень грустно. Всё потому, что minio хранит каждый файл в виде каталога с шифрованным blob и метаданных в json. Запрос списка файлов вызывает миллион вызовов stat, и это ни фига не быстро, особенно на HDD. Причём ни фига не очевидно, что так будет, если исходить только из наличия поддержки S3 и формальной информации о том, что миллион туда положить можно (да, можно, но если класть неправильно, будут нюансы).
Конкретно с Ceph не имел дело, а про HCP вообще первый раз слышу. Привёл общие соображения. Надо смотреть официальную информацию о поддержке фич (что поддерживается и насколько полноценно), гуглить опыт реальных пользователей, ну и, конечно, тестировать в своих условиях.
Причём тут упоминание NoSQL применительно к реляционной sqlite?
Иногда делают очень специфические решения для необычных задач. Например, Internet Archive хранит данные в виде архивов на диске - никакой базы.
Или вот если вспомнить почту, то dovecot хранит каждый ящик отдельно от других. Ещё бывают почтовики, у которых mailbox (все письма одним файлом длинной портянкой) или maildir (письма отдельными файлами с timestamp в имени).
Но в целом это неудобно для больших масштабируемых решений.
Да, чтобы это работало нормально (актуально резался спам, ничего не отваливалось итд), нужно постоянно следить и прикладывать усилия.
Когда какое-нибудь письмо о регистрации на Нужном Сайте не доходит до mail.ru - Нужный Сайт напряжётся и что-нибудь сделает. Когда оно не доходит на маленький сервачок - сайт пошлёт пользователя самого искать подходящих тараканов в своей конфигурации. Придётся осваивать навыки чтения логов, изучения документации по конфигам итд.
Но если всё же хочется, то рекомендую посмотреть на проект MailCow.
Данил, умные слова типа "колцо вычетов по модулю p" - это не так страшно. Это когда мы берём не все числа вообще, а только остатки от деления на p. И переопределяем основные операции: сложение берём по остатку, умножение тоже. Например, если p=7, то 2*4 mod 7 = 1.
В python так:
(2*4) % 7
Определённые подобным образом "сложение" и "умножение" обладают рядом свойств: коммутативность (a+b=b+a, a*b=b*a), ассоциативность (a+(b+c)=(a+b)+c) и некоторыми другими. Собственно, такое вот множество с двумя операциями и некоторыми особыми свойствами называют в алгебре кольцом.
Но всё это для задачи не очень важно. Тут достаточно просто брать остаток по длине словаря:
jcmvbkbc, нет, inline-функция это не макрос и не может содержать ошибок. Изначально inline-функции в C означали именно то, что они никак не вызывались (call/ret), а просто копировались в целевую функцию, чтобы избежать относительно дорогой операции вызова (особенно far call, когда вызов осуществлялся не в пределах сегмента по смещению, а с переходом в другой сегмент) для очень простых функций. Разумеется, это также означает, что экспорт inline-функции как символа в принципе лишён смысла.
inline-функция не должна компилироваться, её тело должно вставляться в нужное место программы и компилироваться каждый раз заново. Соответственно, ld её и не сможет увидеть никогда в принципе. Кстати, inline-функции надо описывать в h-файлах, а не c-файлах.
Вполне возможно, что фильтруют не по "телефону", а по Wi-Fi (если компьютеры подключены проводом) или на мак-адреса компьютеров (их IP) просто белый список.