Реальное время выполнения программы (T) состоит из времени выполнения собственно самой программы (t) + накладные расходы на работу планировщика + все другие задачи, которые вклинились планировщиком во время выполнения нашей задачи + джиттер процессора из-за переключения во всякие SMM и другие прерывания, над которыми у ОС нет контроля.
Т.е. в идеальном случае T = t в большинстве случаев, затем T = t + q в меньшем количестве случаев, T = t + 2q в еще меньшем, T = t + 3q еще реже и т.д. Т.е. распределение не нормальное, и усреднять в таком случае бессмысленно.
Может показаться странным считать объекты с равными хешами равными, не проверять дополнительно их содержимое, и целиком полагаться только на хеш, но вы это делаете регулярно, когда пользуетесь протоколами git или torrent.
Вот только в приведенных примерах и подобных им проектах используются криптографические хэши, а не простой полином, как в hash() для строк.
Тем более, что т.к. классы могут переопределять свой __hash__, и спецификация языка явно разрешает одинаковый хэш для разных объектов, просто слепо надеяться на то, что это не сломается? Ну хз.
Сорян, вы говорите глупости. Для «авторизированности» запроса токен передается в хедере Authorization, для чего он и был создан. Для проверки целостности запроса и идентификации отправителя используйте TLS, для чего он и был создан.
Вы же придумываете костыль поверх костыля, не понимая основных принципов работы того, что вы пытаетесь своим костылем заменить. Не делайте так.
Вы так и не ответили, зачем он нужен. Если этот sign не нужен, то и передавать его нет смысла. Тем более, вы «абстрагируетесь от протокола передачи данных», но тем не менее, навязываете какое-то дополнительное невнятное поле, задачи которого с головой покрываются транспортными средствами.
Или это все же про «подпись» md5(«super»+args+«secret») в духе flash-игр начала 2000-х?
А зачем нужен sign? Если это для защиты целостности сообщений, то как бы почему не общепринятый TLS? Если же это для JWT-токена, то почему не общепринятый `Authorization: Bearer`?
Наконец-то люди начали прозревать! Теперь бы еще убить проклятых колдунов-ученых и остановить дьявольское колесо этого так называемого прогресса!
Посмотрите, сколько зла в мире совершается с использованием электричества. А теперь сравните с количеством зла, которое совершается при помощи березовых дров. Заставляет задуматься, не так ли?
Если это все невозможно, почему существуют бессмертные организмы? Колонии HeLa и Jurkat, лобстеры, планарии, гидры, медузы, морские окуни, протеи, разные виды черепах (расписные, болотные, восточные коробочные), морские ежи, океанические венусы, межгорные сосны, гренладнские полярные акулы, и это только первый попавшийся сокращенный список из Википедии. Куча особей из перечисленных живут по 400-500 лет без какого-либо ограничения мобильности или выраженного старения, и прожевут еще 500 раз по столько же, если их не поймать и не съесть.
Ваше право так считать, но не удивлюсь, что если вы и введение T2, и SecureBoot поддерживаете. «Безопасность», все дела. Обмазаться TPMами, запретить и не пущать.
Вот вы упражняетесь в сарказме, а я, тем не менее, серьезен. Транзисторы в CPU перепаять нельзя не потому, что на CPU повесили амбарный замок и не отдают вам ключ. Тут замком выступает физика, и это плата за скорость чипов.
Но! Если продолжать аналогию, то с CPU тоже не все ладно — почему нет полной информации по всяким SMM? Почему нет полной информации о том, что за опкоды у настоящего ядра, как оно работает, как писать под него, а не под эмулятор? Документация по Intel ME? Полная документация по UEFI? Как насчет -3 кольца? Как насчет маленького дополнительного чипа со своим собственным набором команд, который имеет полный доступ ко всей оперативке и шине устройств, и при этом недокументирован и присутствует на всех интеловских чипсетах? Как быть с кучей других закрытых, недокументированных, засекреченных вещей, которые присутствуют в процессорах, чипсетах и прочем, и которые препятствуют тому, чтобы у программистов был полный доступ к железу, за которое они заплатили немалые деньги?
Или это я один такой особенный, что меня это одновременно дико бесит не в последнюю очередь из-за того, что с этим нельзя ничего сделать?
Вы ведь понимаете разницу между «разрешить запустить драйвер, подписанный либо Apple, либо мной», и «разрешить кому угодно запустить любой неподписанный драйвер»? На мой взгляд это как раз «полностью».
Нет, не совсем так. Клавиатура с Али встала бы, если бы это не был брак китайца, который чипы от JIS впаял в ANSI-клавиатуры. Да, замена клавиатуры это не самое простое мероприятие, но не невозможное. Хотя это уже из области претензий к железу и ремонтопригодности, отдельная тема.
Меня лишили именно права ковыряться в системе. Я не могу написать свой драйвер-фильтр. Я не могу написать свою procfs. Я не могу напрограммить драйвер под свою умную гирлянду. Я не могу помигать светодиодом, вставленным в thunderbolt. Я могу только использовать разрешенные apple способы взаимодействовать с операционкой, и чуть-чуть залазить на серую территорию — в недокументированные фреймворки.
Да, естественно, но это не отключение Gatekeeper — это игнорирование только конкретно при открытии одного .app. Это уже не сработает для открытия консольных приложений, и для открытия .app с консоли.
У меня есть Sony Xperia Z3, и оно делает камеру тусклой и мыльной. К счастью, можно забекапить раздел с ключами, восстановить его и снова заблокировать загрузчик. К сожалению, с разблокированным загрузчиком в соньке с нормальной камерой можно попрощаться.
Эта тактика напоминает мне тактику производителей мобильных телефонов, которые дают возможность разблокировать загрузчик телефона, но при этом безвозвратно уничтожают лицензионные ключи для камеры, существенно понижая качество съемки (Sony), или отключают сканер пальцев (Xiaomi), или еще как-то ограничивают пользователя под соусом «заботы о безопасности». Выходит, будто я не приобретаю устройство, с которым потом могу делать, что угодно — я приобретаю право использования с условиями, при которых софт могут окирпичить.
Расскажу из своего личного примера — на моем MBPro вышла из строя клавиатура. Я заказал на Али замену, дождался, установил, но обнаружился недостаток — чип подменной клавиатуры идентифицировал себя как JIS-версию, тогда как физически являлся ANSI. Разница — в одном бите в USB PID.
Решение проблемы элементарное — исправить idProduct в соответствующей записи в `/System/Library/Extensions/AppleUSBTopCase.kext/Contents/PlugIns/AppleUSBTCKeyboard.kext/Contents/Info.plist`, что я и сделал.
Но, к сожалению, Apple в последних версиях macOS отозвала возможность загружать неподписанные kext-ы. Подписать kext невозможно без сертификата, выданного Apple, в котором есть, кроме прочего, обязательное расширение 1.2.840.113635.100.6.1.18. Добавить свой корневой сертификат, чтобы самоподписывать kext-ы, невозможно.
Фактически, у меня есть система, но я не имею на ней полных привилегий — я не могу запустить свой драйвер, не заплатив денег Apple, даже если я этого хочу и полностью осознаю «последствия» для моей «безопасности».
Есть временно работающий костыль — полностью отключить SIP. Но что, если я не хочу отключать кучу всего функционала, связанного с защитой системы? Я хочу добавить свой корневой сертификат, и это бы защитило систему от руткитов ровно настолько, насколько безопасен мой приватный ключ? Но нет, Apple отказала мне в этом.
GateKeeper. Раньше была возможность отключить его. Теперь такой возможности нет — чтобы его отключить, нужно править defaults, и то он сам включится через пару недель. Осталось только две опции — «Из App Store» и «Из App Store и проверенных разработчиков». Могу с уверенностью утверждать, что вскоре «в целях безопасности» оставят только App Store, несмотря на все ограничения песочницы. Песочница, кстати. Приложение не может делать, что хочет, оно может делать только то, что перечислено в белом списке действий — если вы распространяетесь через MAS, иначе ваше приложение не пройдет аудит.
Сейчас вот появился T2, который не дает загружать произвольные операционки. Я так понимаю, через какое-то время Эппл «выпустит из дома корову» и разрешит грузить Линукс — если будет полностью отключен T2, и придется пожертвовать какой-то частью функционала.
Мне это не нравится. Мне нравится macOS, но мне не нравится курс, куда она движется.
Ну о том и речь — всякие Xiaomi копируют внешний вид, но на этом сходство заканчивается. Двух видеокарт с автоматическим переключением нет, 10 часов батарейки под нагрузкой нет, тачпада, который не дрожит, тоже нет (и я не говорю про штуки типа force touch). Все не то, увы.
Да и найти железку — это половина проблемы. Вторая половина — macOS катится в ту же пропасть, что и яблочное железо, все более и более огораживаясь. Как быть с ней?
Это грустно. Если бы только у macOS был опенсорсный клон, который можно было бы запустить на обычном железе… И если бы хотя бы одна компания производила подобие макбуков, которые были бы близки к ним по удобству (а не только по принципу «черные кнопки на серебристом фоне»), то как же это было бы замечательно. Ни малейших раздумий по поводу ухода.
Т.е. в идеальном случае T = t в большинстве случаев, затем T = t + q в меньшем количестве случаев, T = t + 2q в еще меньшем, T = t + 3q еще реже и т.д. Т.е. распределение не нормальное, и усреднять в таком случае бессмысленно.
Вот только в приведенных примерах и подобных им проектах используются криптографические хэши, а не простой полином, как в hash() для строк.
Тем более, что т.к. классы могут переопределять свой
__hash__
, и спецификация языка явно разрешает одинаковый хэш для разных объектов, просто слепо надеяться на то, что это не сломается? Ну хз.Вы же придумываете костыль поверх костыля, не понимая основных принципов работы того, что вы пытаетесь своим костылем заменить. Не делайте так.
Или это все же про «подпись» md5(«super»+args+«secret») в духе flash-игр начала 2000-х?
Посмотрите, сколько зла в мире совершается с использованием электричества. А теперь сравните с количеством зла, которое совершается при помощи березовых дров. Заставляет задуматься, не так ли?
Они все что, коллективно нарушают законы физики?
Вот вы упражняетесь в сарказме, а я, тем не менее, серьезен. Транзисторы в CPU перепаять нельзя не потому, что на CPU повесили амбарный замок и не отдают вам ключ. Тут замком выступает физика, и это плата за скорость чипов.
Но! Если продолжать аналогию, то с CPU тоже не все ладно — почему нет полной информации по всяким SMM? Почему нет полной информации о том, что за опкоды у настоящего ядра, как оно работает, как писать под него, а не под эмулятор? Документация по Intel ME? Полная документация по UEFI? Как насчет -3 кольца? Как насчет маленького дополнительного чипа со своим собственным набором команд, который имеет полный доступ ко всей оперативке и шине устройств, и при этом недокументирован и присутствует на всех интеловских чипсетах? Как быть с кучей других закрытых, недокументированных, засекреченных вещей, которые присутствуют в процессорах, чипсетах и прочем, и которые препятствуют тому, чтобы у программистов был полный доступ к железу, за которое они заплатили немалые деньги?
Или это я один такой особенный, что меня это одновременно дико бесит не в последнюю очередь из-за того, что с этим нельзя ничего сделать?
Меня лишили именно права ковыряться в системе. Я не могу написать свой драйвер-фильтр. Я не могу написать свою procfs. Я не могу напрограммить драйвер под свою умную гирлянду. Я не могу помигать светодиодом, вставленным в thunderbolt. Я могу только использовать разрешенные apple способы взаимодействовать с операционкой, и чуть-чуть залазить на серую территорию — в недокументированные фреймворки.
Решение проблемы элементарное — исправить idProduct в соответствующей записи в `/System/Library/Extensions/AppleUSBTopCase.kext/Contents/PlugIns/AppleUSBTCKeyboard.kext/Contents/Info.plist`, что я и сделал.
Но, к сожалению, Apple в последних версиях macOS отозвала возможность загружать неподписанные kext-ы. Подписать kext невозможно без сертификата, выданного Apple, в котором есть, кроме прочего, обязательное расширение 1.2.840.113635.100.6.1.18. Добавить свой корневой сертификат, чтобы самоподписывать kext-ы, невозможно.
Фактически, у меня есть система, но я не имею на ней полных привилегий — я не могу запустить свой драйвер, не заплатив денег Apple, даже если я этого хочу и полностью осознаю «последствия» для моей «безопасности».
Есть временно работающий костыль — полностью отключить SIP. Но что, если я не хочу отключать кучу всего функционала, связанного с защитой системы? Я хочу добавить свой корневой сертификат, и это бы защитило систему от руткитов ровно настолько, насколько безопасен мой приватный ключ? Но нет, Apple отказала мне в этом.
GateKeeper. Раньше была возможность отключить его. Теперь такой возможности нет — чтобы его отключить, нужно править defaults, и то он сам включится через пару недель. Осталось только две опции — «Из App Store» и «Из App Store и проверенных разработчиков». Могу с уверенностью утверждать, что вскоре «в целях безопасности» оставят только App Store, несмотря на все ограничения песочницы. Песочница, кстати. Приложение не может делать, что хочет, оно может делать только то, что перечислено в белом списке действий — если вы распространяетесь через MAS, иначе ваше приложение не пройдет аудит.
Сейчас вот появился T2, который не дает загружать произвольные операционки. Я так понимаю, через какое-то время Эппл «выпустит из дома корову» и разрешит грузить Линукс — если будет полностью отключен T2, и придется пожертвовать какой-то частью функционала.
Мне это не нравится. Мне нравится macOS, но мне не нравится курс, куда она движется.
Да и найти железку — это половина проблемы. Вторая половина — macOS катится в ту же пропасть, что и яблочное железо, все более и более огораживаясь. Как быть с ней?