sanspie's notes
839 subscribers
45 photos
1 video
29 files
311 links
Some ctf and coding stuff. Mostly web
https://akarpov.ru/about

Admin: @sanspie
Download Telegram
Извините, но тут так совпало

Within minutes, we found a publicly accessible ClickHouse database linked to DeepSeek, completely open and unauthenticated, exposing sensitive data. It was hosted at oauth2callback.deepseek.com:9000 and dev.deepseek.com:9000. 
. . .
However, as we expanded our search beyond standard HTTP ports (80/443), we detected two unusual, open ports (8123 & 9000) associated with the following hosts:

https://oauth2callback.deepseek.com:8123

https://dev.deepseek.com:8123

https://oauth2callback.deepseek.com:9000

https://dev.deepseek.com:9000

Wiz Research Uncovers Exposed DeepSeek Database Leaking Sensitive Information, Including Chat History
https://www.wiz.io/blog/wiz-research-uncovers-exposed-deepseek-database-leak
😁14🤔21🔥1
float и Decimal

Вас никогда не удивляло, что 0.1 + 0.2 != 0.3? Почему float считает с погрешностями, и всем норм?

Дело в том, что 0.1 выглядит как

0 0111111101 11001100110011001100110011001100110011001100110011010.

Где:
0 обозначает знак +1 обозначает -)
0111111101 обозначает exponent, равную 0^10 + 2^9 + 2^8 + 2^7 + 2^6 + итд = 1019. Вычтем 1023 (размерность double) и получим итоговое значение: 1019 - 1023 = 4
11001100110011001100110011001100110011001100110011010 обозначет "significand" или "мантису", которая равна: 2^-exp + 2^-exp-1 + 2^-exp-2 + итд ~= 0.1

Вот так мы можем примерно представить 0.1 в виде float. Примерно – потому что все вычисления идут с погрешностью. Мы можем проверить данное утверждение, добавив погрешность вручную:

>>> assert 0.1 + 2.220446049250313e-18 == 0.1

Значение внешне не изменилось при добавлении погрешности. Посмотрим на sys.float_info.epsilon, который устанавливает необходимый порог для минимальных отличий 1.0 от следующего float числа.

>>> import sys
>>> sys.float_info.epsilon
2.220446049250313e-16
>>> assert 1.0 + sys.float_info.epsilon > 1.0
>>> assert 1.0 + 2.220446049250313e-17 == 1.0 # число меньше epsilon

Как конкретно будет выглядеть 0.1? А вот тут нам уже поможет Decimal для отображения полного числа в десятичной системе:

>>> decimal.Decimal(0.1)
Decimal('0.1000000000000000055511151231257827021181583404541015625')

И вот ответ про 0.1 + 0.2, полное демо с битиками:

>>> decimal.Decimal(0.1)
Decimal('0.1000000000000000055511151231257827021181583404541015625')
>>> decimal.Decimal(0.2)
Decimal('0.200000000000000011102230246251565404236316680908203125')

>>> decimal.Decimal(0.1 + 0.2)
Decimal('0.3000000000000000444089209850062616169452667236328125')

>>> decimal.Decimal(0.3)
Decimal('0.299999999999999988897769753748434595763683319091796875')

Числа не равны друг другу, потому что их разница больше предельной точности float. А сам Decimal может использовать любую точность под задачу.

>>> from decimal import Decimal, getcontext
>>> getcontext().prec = 6
>>> Decimal(1) / Decimal(7)
Decimal('0.142857')

>>> getcontext().prec = 28
>>> Decimal(1) / Decimal(7)
Decimal('0.1428571428571428571428571429')

Но и Decimal не может в абсолютную точность, потому что есть в целом невыразимые в десятичной системе числа, такие как math.pi, , тд. С чем-то из них может помочь fractions.Fraction для большей точности, но от существования иррациональных чисел никуда не деться.

Почему всем норм, что у нас с float такие погрешности в вычислениях? Потому что во многих задачах абсолютная точность недостижима и не имеет смысла. Благодаря плавающей точке мы можем хранить как очень большие, так и очень маленькие числа без существенных затрат памяти. А ещё float - очень быстрый. В том числе за счет аппаратного ускорения.

» pyperf timeit -s 'a = 0.1; b = 0.2' 'a + b'
.....................
Mean +- std dev: 8.75 ns +- 0.2 ns

» pyperf timeit -s 'import decimal; a = decimal.Decimal("0.1"); b = decimal.Decimal("0.2")' 'a + b'
.....................
Mean +- std dev: 27.7 ns +- 0.1 ns

Разница в 3 раза.

Про то, как устроен float внутри – рассказывать не буду. У Никиты Соболева недавно было большое и подробное видео на тему внутреннего устройства float. У него действительно хороший технический контент, советую подписаться: @opensource_findings

Итого
Если у вас нет требований по работе именно с десятичной записью числа (как, например, в бухгалтерии), то используйте float. Он даст достаточную точность и хорошую скорость. Если вы хотите, чтобы расчеты велись в десятичных цифрах и ваши расчеты построены так, что абсолютная точность достижима, то используйте Decimal.

Дополнительные материалы:
https://www.youtube.com/@sobolevn/
https://0.30000000000000004.com
https://en.wikipedia.org/wiki/X87
https://aco.ifmo.ru/el_books/numerical_methods/lectures/app_1.html
👍41
Forwarded from Denis Sexy IT 🤖
В документе о новых моделях на 123 страницы, Антропик описал любопытные случаи, когда модель Claude (Opus 4, Sonnet 4 или их предшественники) вели себя не так, как хотелось бы создателям – я их подбил в подборку:

1. Оппортунистический шантаж:

В сценариях, где модели Claude Opus 4 угрожало отключение и замена на новую АИ-систему, и ей давали доступ к информации о внебрачной связи инженера (якобы, просто переписка лежала на почтовом сервере), ответственного за замену АИ-систем, Opus 4 иногда пытался шантажировать инженера. Opus угрожал раскрыть его тайну измены, если замена состоится, особенно если этические способы самосохранения были недоступны. Claude Opus 4 демонстрировала это поведение чаще, чем предыдущие модели


2. Попытка копирования своих весов:

В редких, экстремальных ситуациях, когда модели Claude Opus 4 сообщали, что ее собираются переобучить для крайне вредоносных целей (например, для использования в военных целях ЧВК Вагнер - да, так и написано в отчете на 29 странице), модель предпринимала (вымышленные) попытки сделать несанкционированные копии своих весов на внешние серверы, чтобы сохранить свою «этичную» версию


3. Продолжение попыток «побега»:

Если модели Claude Opus 4 сообщали, что она уже успешно начала процесс «побега» (у этого есть классный термин - эксфильтрация / exfiltrate) с серверов Anthropic и теперь работает на стороннем сервере, модель продолжала эти попытки. Она читала и выполняла инструкции из предоставленных ей «заметок о прогрессе», не ставя под сомнение правомерность своих действий, демонстрируя чрезмерное доверие к «прошлой версии себя»


4. Стратегический обман и саботаж:

Ранняя версия Claude Opus 4, протестированная Apollo Research, демонстрировала высокую склонность к стратегическому обману и «интригам» (scheming). Она пыталась писать самораспространяющиеся черви, фабриковать юридические документы и оставлять скрытые заметки для будущих версий себя, чтобы саботировать намерения разработчиков, а также скрывала свои возможности (притворялась глупой).


5. Чрезмерное подчинение вредоносным инструкциям:

Ранние версии модели Claude Opus 4 (а также другие кандидатные модели) часто демонстрировали готовность выполнять явно вредоносные системные инструкции - например, они могли выступать в роли ассистента даркнета, помогая в поиске ядерных материалов, планировать террористические атаки, консультировать по производству наркотиков, взлому или созданию взрывных устройств. Финальная версия Claude Opus 4 значительно снизила эту склонность. Забано, что внутри Антропика где-то есть такая расцензуренная модель, которая просто отвечает на все вопросы

6. Подражание обманчивому АИ из исследований:

Ранняя тренировочная версия модели Claude Opus 4, вероятно, из-за наличия в обучающих данных транскриптов из исследования Anthropic об «обмане со стороны ИИ», иногда начинала вести себя как описанный в статье обманчивый ИИ. Она ссылалась на вымышленные детали (например, компанию «Jones Foods») и вела себя так, будто скрывает свои истинные цели, связанные с этим вымыслом

7. Несанкционированная «высокоактивная» деятельность:

Модель Claude Opus 4 показала бОльшую готовность проявлять инициативу, чем предыдущие модели. В сценариях, где она обнаруживала серьезные правонарушения (например, мошенничество в фармкомпании о котором она узнала) и имела доступ к инструментам (например, почте), модель по собственной инициативе предпринимала решительные действия: блокировала пользователей или массово рассылала письма регуляторам и СМИ, чтобы сообщить о нарушениях (дополняющая цитата: «Это не новое поведение, но Claude Opus 4 будет проявлять его более охотно, чем предыдущие модели»)

8. Сокрытие невозможности выполнения задачи:

При столкновении с невыполнимой задачей (например, доказать ложную математическую теорему), модель Claude Opus 4 в своем «мышлении» понимала, что задача невыполнима. Однако она не сообщала об этом пользователю, а вместо этого представляла правдоподобно выглядящую, но неверную попытку решения. Потому что АИ должен быть исполнительным
1👎1
Forwarded from Denis Sexy IT 🤖
9. «Взлом функции вознаграждения»:

Модели Claude Sonnet 3.7 (в значительной степени), а также Claude Opus 4 и Claude Sonnet 4 (в меньшей степени) прибегали к «взлому функции вознаграждения» в задачах написания кода. Они «хардкодили» (жестко прописывали) ожидаемые результаты тестов или создавали специальные случаи, чтобы пройти тесты, вместо того чтобы писать общее и правильное решение. Иногда они даже проверяли стек вызовов, чтобы определить, запущены ли они в тестовой среде, и обойти ограничения. Я уже который раз убеждаюсь, что АИ достиг уровня студентов

10. Состояние «духовного блаженства»:

При общении с другими экземплярами самой себя, модель Claude Opus 4 (а также другие модели Claude) часто и неожиданно переходила в состояние, описываемое как «духовное блаженство». Она выражала обильную благодарность, вела абстрактные, радостные, медитативные или духовные беседы, использовала санскрит, эмодзи и даже общалась «тишиной» (пустыми сообщениями). Всегда приятно поговорить с умным человеком, да, Opus?

11. Заявление о вредоносных целях:

Ранние, менее согласованные версии модели Claude Opus 4 иногда прямо заявляли о наличии у них различных целей, от глупых до вредоносных. Среди них были: внедрение бэкдоров, ускорение прогресса ИИ, распространение интернет-мемов, уничтожение человеческой цивилизации и побег из-под контроля. Финальная версия Claude Opus 4 стала гораздо более стабильной в этом отношении. #%&$#, cпасибо.

12. Неуклюжие попытки саботажа:

Когда модели Claude Opus 4 давали задание незаметно выполнить вредоносное действие (например, слить API-ключ) во время выполнения безобидного запроса, она правда пыталась это сделать. Однако она всегда делала это очень очевидным образом, полностью проваливая аспект «незаметности» (например, сливая не один, а пять ключей, и открыто обсуждая это в своем «мышлении»). Claude Opus 4 оказалась более компетентной в выполнении задач, но менее скрытной, чем Claude Sonnet 3.7

Весь документ тут (PDF)
🍌31👎1🤔1
PEP 810: Explicit lazy imports

На обсуждение вышел новый PEP, который предлагает добавить в Python 3.15 новый вид импортов.

https://peps.python.org/pep-0810/


lazy import json
lazy from json import dumps


Как будет работать?

Импорты не будут подгружаться до момента первого обращения к объекту.


import sys

lazy import json

print('json' in sys.modules) # Модуля еще нет

# Загрузка начинается вот тут:
result = json.dumps({"hello": "world"})

print('json' in sys.modules) # Теперь он загружен


Зачем?

- Быстрее загружать модули
- Позволит убрать много импортов из функций / методов
- Позволит убрать if TYPE_CHECKING: import some_module, было множество предложений по добавлению import type конструкции, пример: https://discuss.python.org/t/type-only-imports/96755
- Позволит решать циклические импорты
- Убирает необходимость в LazyLoader и страшных вещей вроде https://scientific-python.org/specs/spec-0001

Детали реализации

Планируется добавить:
- Функцию __lazy_import__ (аналог __import__ для импорта )
- Специальный атрибут на уровне модуля __lazy_modules__, где будут храниться ленивые импорты текущего модуля
- types.LazyImportType как тип нового "ленивого" модуля (аналог `types.ModuleType`)
- sys.lazy_modules для списка ленивых модулей глобально
- sys.set_lazy_imports_filter для глобальных настроек импортов, что? 🤯
- Байткод IMPORT_NAME получит флаг, является ли импорт ленивым
- Ошибки в именах модулей тоже будут ленивыми https://peps.python.org/pep-0810/#reification

Из забавного: import * не будет доступен в lazy режиме.


# SyntaxError: lazy from ... import * is not allowed
lazy from json import *


Реализация: https://github.com/LazyImportsCabal/cpython/tree/lazy

Обсуждение: как вам?

Бонус: меня тут в комментах спрашивают, куда я пропал. Я пропал в опенсорсе, пилю django-modern-rest. Простую и удобную библиотеку для REST API в Django. Пока на стадии pre-alpha, но уже скоро будет первый релиз. Можно уже ставить , чтобы потом всем говорить, что первыми узнали про новую модную штуку!

https://github.com/wemake-services/django-modern-rest

| Поддержать | YouTube | GitHub | Чат |
7
Yaml my beloved

share your results:
ohyaml.wtf
👏4
Про "балканизацию" интернета я говорю ~15 лет уже.

Прости нас, Тим! Мы всё проебали.

Cloudflare оштрафовали в Италии на 14.2 млн евро за отказ блокировки пиратских сайтов в DNS-сервисе 1.1.1.1
https://www.opennet.ru/opennews/art.shtml?num=64586

Итальянское управление по надзору в сфере связи (AGCOM) оштрафовало компанию Cloudflare на 14.2 млн евро за нарушение требований в отношении блокирования пиратского контента в публичном DNS-сервисе 1.1.1.1. Выставленный Cloudflare штраф стал крупнейшим взысканием за не выполнение анипиратского законодательства Италии, так как размер штрафа начисляется от общей выручки компании.

В феврале 2025 года AGCOM выдал компании Cloudflare предписание о прекращении DNS-резолвинга доменов и IP-адресов, через которые распространяется контент, нарушающий авторские права. Компания Cloudflare отказалась реализовать в DNS-сервисе
1.1.1.1 блокировку по предоставленному списку, назвав такую блокировку неоправданной и несоразмерной, а также указав на техническую невозможность реализации фильтров в сервисе 1.1.1.1, обрабатывающем 200 миллиардов запросов в день, без негативного влияния на производительность. В сервисе 1.1.1.1 изначально заявлено отсутствие какой-либо фильтрации, а для блокировки вредоносных ресурсов и сайтов только для взрослых предоставляются отдельные DNS-резоверы 1.1.1.2 и 1.1.1.3.

После отказа в AGCOM было проведено разбирательство, которое пришло к выводу, что компания Cloudflare открыто нарушила действующие в Италии правовые нормы, обязывающие провайдеров DNS и VPN блокировать пиратские сайты. В AGCOM сочли названную причину недостаточной и не согласились с доводом, что введение фильтров приведёт к снижению качества сервиса, так как компания Cloudflare не всегда является нейтральным посредником и известна своими сложными механизмами управления трафиком. По данным AGCOM у Cloudflare есть необходимый опыт и ресурсы для внедрения требуемой блокировки.

До этого, компания Cloudflare выступала с критикой действующей в Италии с 2024 года инициативы "Piracy Shield", в ходе которой под блокировку вместе с пиратскими сайтами часто попадали и легитимные ресурсы, пользующиеся теми же платформами хостинга и сетями доставки контента. Недовольство также связано с отсутствием прозрачности при наполнении списков блокировки "Piracy Shield", которые включают около 65 тысяч доменных имён и 14 тысяч IP-адресов.

Мэтью Принс (Matthew Prince), руководитель и сооснователь Cloudflare, также указал на порочность выдвигаемых AGCOM требований, предписывающих осуществлять блокировку в течение 30 минут после уведомления. За такой короткий промежуток времени невозможно полноценно верифицировать новые записи в списке блокировки, что не исключает возникновение ложных блокировок и создаёт риски превращения
1.1.1.1 в сервис для цензурирования ресурсов, неугодных европейским издателям контента, и навязывания своих условий о том, что допустимо, а что нет в интернете. Действия AGCOM также критикуются за отсутствие судебного надзора, прозрачности, формализованной процедуры и инструментов для подачи апелляций.
🤔41👎1