sanspie's notes
Open in Telegram
Some ctf and coding stuff. Mostly web https://akarpov.ru/about Admin: @sanspie
Show more828
Subscribers
No data24 hours
No data7 days
No data30 days
Data loading in progress...
Similar Channels
No data
Any problems? Please refresh the page or contact our support manager.
Tags Cloud
No data
Any problems? Please refresh the page or contact our support manager.
Incoming and Outgoing Mentions
---
---
---
---
---
---
Attracting Subscribers
September '25
September '25
+174
in 0 channels
August '250
in 0 channels
Get PRO
July '250
in 0 channels
Get PRO
June '250
in 0 channels
Get PRO
May '250
in 0 channels
Get PRO
April '250
in 0 channels
Get PRO
March '250
in 0 channels
Get PRO
February '250
in 2 channels
Get PRO
January '250
in 1 channels
Get PRO
December '240
in 0 channels
Get PRO
November '240
in 0 channels
Get PRO
October '240
in 0 channels
Get PRO
September '240
in 0 channels
Get PRO
August '240
in 0 channels
Get PRO
July '240
in 2 channels
Get PRO
June '240
in 0 channels
Get PRO
May '240
in 1 channels
Get PRO
April '240
in 0 channels
Get PRO
March '240
in 0 channels
Get PRO
February '24
+17
in 0 channels
Get PRO
January '24
+36
in 0 channels
Get PRO
December '23
+39
in 1 channels
Get PRO
November '23
+18
in 0 channels
Get PRO
October '23
+36
in 0 channels
Get PRO
September '23
+33
in 0 channels
Get PRO
August '23
+41
in 0 channels
Get PRO
July '23
+22
in 0 channels
Get PRO
June '23
+46
in 0 channels
Get PRO
May '23
+122
in 0 channels
Get PRO
April '23
+10
in 0 channels
Get PRO
March '23
+8
in 0 channels
Get PRO
February '23
+24
in 0 channels
Get PRO
January '23
+19
in 0 channels
Get PRO
December '22
+14
in 0 channels
Get PRO
November '22
+16
in 0 channels
Get PRO
October '22
+22
in 0 channels
Get PRO
September '22
+19
in 0 channels
Get PRO
August '22
+14
in 0 channels
Get PRO
July '22
+33
in 0 channels
Get PRO
June '22
+23
in 0 channels
Get PRO
May '22
+23
in 0 channels
Get PRO
April '22
+13
in 0 channels
Get PRO
March '22
+226
in 0 channels
Channel Posts
Repost 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)
| 2 | В документе о новых моделях на 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 в своем «мышлении» понимала, что задача невыполнима. Однако она не сообщала об этом пользователю, а вместо этого представляла правдоподобно выглядящую, но неверную попытку решения. Потому что АИ должен быть исполнительным | 0 |
| 3 | https://habr.com/ru/articles/911818/ | 0 |
| 4 | 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
• http://aco.ifmo.ru/el_books/numerical_methods/lectures/app_1.html | 0 |
| 5 | https://habr.com/ru/news/839116/ | 0 |
| 6 | Извините, но тут так совпало
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:
http://oauth2callback.deepseek.com:8123
http://dev.deepseek.com:8123
http://oauth2callback.deepseek.com:9000
http://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 | 0 |
| 7 | Вышел Cloudflare 2024 Year in Review
Из интересного:
Starlink продолжает революцию в подключении:
Значительный рост трафика в новых рынках, таких как Зимбабве и Малави, показывает огромный потенциал спутникового интернета. Особенно интересен 900-кратный рост трафика в Парагвае.
Постквантовое шифрование набирает популярность:
Постквантовая криптография защищает данные от угроз со стороны квантовых компьютеров, которые теоретически смогут взламывать традиционные алгоритмы шифрования (например, RSA или ECC). В 2024 году доля трафика, использующего постквантовое шифрование в TLS 1.3, выросла до 13%, что стало значительным скачком по сравнению с 2% в начале года.
Уменьшение активности некоторых ИИ-ботов:
Падение активности Bytespider от ByteDance может сигнализировать об изменении стратегий сбора данных для моделей ИИ, возможно, из-за регуляторного давления.
Аномальное поведение TCP-соединений:
TCP-соединения часто завершаются неожиданно на разных стадиях без передачи полезных данных. В 2024 году 20.7% соединений с Cloudflare прерывались на ранних этапах, и почти половина из них завершалась после получения сервера SYN, но до передачи подтверждающего пакета ACK.
Возможные причины:
Сканирование и тестирование: Скрипты и программы для сканирования сети могут инициировать соединения, но не доводить их до конца.
DoS-атаки: Злоумышленники часто создают массовое количество неполных соединений, чтобы перегрузить серверы.
Фильтрация трафика: Провайдеры или посредники могут прерывать соединения, особенно в странах с ограничением доступа к определенным сайтам или сервисам.
Неравномерность внедрения HTTP/3:
2024
HTTP/3, который работает на основе нового протокола QUIC, обещает улучшенную производительность и встроенную шифрацию, но его использование остается неравномерным. В 2024 году только 20.5% запросов использовали HTTP/3, несмотря на его преимущества. В то же время 49.6% запросов все еще используют HTTP/2, а почти 30% — старые версии HTTP/1.x.
Опасность новых TLD:
Некоторые новые доменные зоны, такие как .bar, .rest и .uno, продемонстрировали, что более 99% писем с таких доменов являются либо спамом, либо вредоносными. Среди национальных доменов (ccTLD) худший результат у .ws (Западное Самоа), где более 90% писем оказались вредоносными.
Многие из этих доменов предоставляются по заниженной стоимости или используются для "парковки" доменных имен, что привлекает злоумышленников.
Отсутствие строгого контроля или регулирования делает их "серыми зонами" для размещения сомнительного контента..
Рост языка Go для API-запросов:
Факт, что Go обогнал NodeJS, подчеркивает сдвиг в сторону высокопроизводительных и масштабируемых решений. Это может быть связано с ростом микросервисной архитектуры и потребностью в быстрой обработке запросов. | 0 |
| 8 | Разбираемся в дефолтных и откладываемых (деферрабельных) констрейнах в PostgreSQL
В постгре по умолчанию все констрейны проверяются немедленно, сразу после каждой операции(NOT DEFERRABLE INITIALLY IMMEDIATE). Это означает, что уникальные ограничения и внешние ключи всегда валидируются мгновенно, как только происходит изменение данных. Такой подход гарантирует целостность данных, но иногда это создает проблемы. Например, если вы пытаетесь изменить значения в столбце с уникальным индексом, сдвинув их все на единицу, то получите ошибку:
UPDATE numbers SET number = number + 1;
-- Ошибка: Duplicate key value violates unique constraint
Почему так происходит? Дело в том, что проверка ограничений выполняется для каждой строки в транзакции, и если хотя бы одна из них нарушает уникальность, операция завершается ошибкой. Это неудобно, особенно если вы хотите массово изменить данные в рамках одной транзакции. Но постгрес так же позволяет создавать деферрабельные (отложенные) констрейны, которые проверяются не сразу, а только в момент завершения транзакции при выполнении команды COMMIT.
Отложенные ограничения можно настроить двумя способами. Первый — DEFERRABLE INITIALLY IMMEDIATE — позволяет отложить проверку ограничений вручную, изменив поведение внутри транзакции с помощью команды SET CONSTRAINTS <constraint_name> DEFERRED. Второй вариант — DEFERRABLE INITIALLY DEFERRED — изначально предполагает, что проверка всегда будет происходить в конце транзакции, что особенно полезно в случаях, когда временное нарушение ограничений не критично и будет исправлено до завершения транзакции.
На первый взгляд кажется логичным сделать все ограничения отложенными, ведь это позволяет избежать ошибок при массовых обновлениях и сложных операциях. Однако на практике это может привести к проблемам. Во-первых, использование отложенных ограничений снижает производительность. Планировщик запросов в PostgreSQL полагается на уникальность данных для оптимизации выполнения запросов. Если уникальность не гарантируется на каждом шаге транзакции, то некоторые оптимизации становятся невозможными, и выполнение запросов замедляется.
Также стоит учитывать, что отложенные проверки нельзя использовать для ограничений типа NOT NULL и CHECK. Эти типы ограничений всегда проверяются немедленно, что ограничивает применение деферрабельных настроек.
больше примеров использование деферрабельных констрейнов можно посмотреть тут:
https://emmer.dev/blog/deferrable-constraints-in-postgresql/ | 0 |
| 9 | https://gekk.info/articles/traceroute.htm
tldr: Traceroute - это хак, а не настоящий сетевой протокол. Он работает случайно и ненадёжно. Маршрутизаторы не обязаны на него отвечать, и часто не отвечают. В современных сетях (особенно с MPLS) он показывает неверную информацию. Отсутствие ответа или высокая задержка в traceroute ничего не значат. | 0 |
| 10 | Промпт chatgpt 4 - https://www.reddit.com/r/ChatGPTJailbreak/comments/1an7tp4/sooo_did_chatgpt_just_leak_the_instructions/
машинный перевод | 0 |
| 11 | Нашел на реддите интересный тред: чувак запросил у пользовательского GPT прописанные в нем инструкции, но ChatGPT выдал свой системный промпт. И он охренеть какой огромный, около 2000 токенов.
Посмотреть этот промпт можно в комментах к треду.
А тут машинный перевод этого промпта.
Так вот, оказывается, почему наебать и джеилбрейкнуть ChatGPT так легко. | 0 |
| 12 | Learning how qr works
Интересная статья про энкодинг и запись qr кодов
https://qr.blinry.org/ | 0 |
| 13 | GitLab 10/10
The most critical security issue GitLab patched has the maximum severity score (10 out of 10) and is being tracked as CVE-2023-7028. Successful exploitation does not require any interaction.
https://www.bleepingcomputer.com/news/security/gitlab-warns-of-critical-zero-click-account-hijacking-vulnerability/ | 0 |
| 14 | mp3. Как мы научились сжимать музыку - Запуск завтра
30 лет назад, чтобы послушать любимую песню, нужно было пойти в магазин, отстоять очередь и купить дорогой диск, на который умещалось всего девять композиций. Всё изменил один немецкий ученый, который придумал революционную технологию сжатия звука. Благодаря ей диски стали не нужны - теперь всю музыку мира можно было бесплатно слушать с компьютера,
https://music.yandex.ru/track/121031035 | 0 |
| 15 | Очень интересный выпуск про историю разработки и распространения формата mp3 | 0 |
| 16 | rce через sqli выходят на новый уровень...
https://blogs.oracle.com/mysql/post/introducing-javascript-support-in-mysql | 0 |
| 17 | https://www.opennet.ru/opennews/art.shtml?num=60367 | 0 |
| 18 | Разработка REST Api кажется простым делом - перекладывай json-чики с места на место и все дела. Но когда ты сталкиваешься с плохо спроектированными Api-шками и начинаешь задумываться о том, как спроектировать хорошо, тут то и открывается бездна. Особенно интересно то, что каждый знает "как правильно проектировать Api" и часто даже в небольшой команде начинаются жаркие споры и каждый тянет одеяло на себя.
Вот еще одна из миллиона статей на тему "как делать правильно", которая мне понравилась взвешенным подходом и подробной аргументацией к каждому пункту. Если вы работаете на проектах, где нет внутреннего стандарта на Api, то рекомендую почитать https://github.com/stickfigure/blog/wiki/How-to-(and-how-not-to)-design-REST-APIs | 0 |
| 19 | Вышел The State of Developer Ecosystem 2023, в котором в этом году особенно уделили внимание влиянию AI на процесс разработки.
Языки
По классике, на первом месте JS, на втором Python, бурный рост TS и Rust, падение php и objective-c. Так же из интересного некоторые(~10%) разработчики хотят изучить Rust и Go в ближайший год, а разработчики на Scala и Rust наоборот в большинстве не хотят изучать другие языки.
Жизнь
Из интересного 30% разработчиков находят работу через знакомства, что доказывает что лучше вкладываться в удобные рабочие часы и высокую ЗП, которую большинство разработчиков считают самым важным. Еще из забавного 75% разработчиков не окончили различные курсы, которые они проходили. Из грустного 50% разработчиков не следят за своим психическим здоровьем и 75% испытывали выгорание.
Those who have experienced burnout feel tired more often.
70% разработчиков пишут код на выходных и только 19% не работают.
У большинства разработчиков 16 GB – 32 GB оперативы, хотя не удивительно, ведь опрос проводил JetBrains.
AI
84% разработчиков знают какой-либо из AI tools, большинство из них сомневаются в надежности этих сервисов в плане хранения данных. 60% уверены, что AI полностью изменит процесс разработки и будет сам писать код. 77% используют ChatGPT, 46% Copilot. Чаще всего их применяют для того, чтобы писать код и обрабатывать natural language, реже для документации и прочей работы с текстом. Половина разработчиков с радостью переложат написание кода и тестов на AI, но та же половина не захочет передавать написание кода ИИ.
AI assistants are most commonly used to help developers perform routine tasks, like writing documentation, code comments, and commit messages, as well as searching. However, developers prefer to do their own coding, including understanding the code and recent code changes, debugging, and of course, writing code, even though 79% of the respondents mentioned that writing code is their most time-consuming activity.
DB
Из грустного 64% разработчиков до сих пор используют MySQL и только половина использует Postgres. MySQL чаще всего используют в связке с MariaDB, что не удивительно, из-за их совместимой апи. Так же наблюдается значительное падение использование oracle в снг, думаю понятно почему.
DevOps and Cloud
54% на докере, 39% без ничего, 13% на кубере. Странно, что большинство разработчиков не знакомы с docker-compose, при том, что большая часть использует докер. 60% на aws, далее azure и гугл, но в этом году появляется Alibaba, которые предоставляют быстрый хостинг на территории Азии. В этом опросе только 10% разработчиков используют, однако на территории Китая около трети сайтов крутятся на Alibaba Cloud, а их главный конкурент - Huawei.
Development
Большинство(60%) разработчиков используют windows, на linux и на маке сидят одинаковое кол-во - по 40%. 41% разработчиков контрибутят в open-source, половина из них делает это постоянно. Еще из интересного в кросс-платформенной разработке 2 место после винды занимает linux, как target для разработчиков, обгоняя макось.
62% of developers follow the Secure Software Development Life Cycle (SSDLC).
34% разработчиков пишут микросервисы, из их большинство используют различные протоколы поверх http.
Python
бОльшая часть разработчиков используют последнюю LTS - 3.11. Половина до сих пор на МЛ и аналитике, 40% на вебе. Django обогнал Flask как основной фреймворк, однако FastAPI понемногу догоняет его. Большинство разработчиков, около трети, пишут на vs code, несмотря на удобства в pycharm-а
Отчет очень информативный и красивый, с большим кол-вом смежной аналитики. Рекомендую изучить самостоятельно, например статистику по другим яп:
C C# C++ Go Java JavaScript Kotlin PHP Python R Ruby Rust Scala Swift and Objective-C
https://www.jetbrains.com/lp/devecosystem-2023/ | 0 |
| 20 | GraphQL и тесты
Будучи разработчиком, я не любил GraphQL с самого его появления — из-за ноды, привязки к Apollo, отсутствия APM (если не покупать подписку у Apollo) и сложного, вложенного языка запросов. В принципе до сих пор ничего изменилось, но в этом посте я хочу отдельнло поговорить о своей любимой теме – тестировании.
GraphQL замечательно умеет делать одну вещь: вытаскивать данные с сервера в произвольном формате, удобном в каждый конкретный момент. «Выгрузи мне все книги — название, количество страниц, пару интересных цитат и автора, а у каждого автора покажи ФИО, фотографию и список популярных произведений» — это типичный запрос для GraphQL, с которым он справляется идеально. В REST для такой специфичной выборки пришлось бы писать отдельный эндпоинт, следить за ним и поддерживать. А тут даже кода писать не надо — один раз описал схему данных, и всё работает из коробки.
Минус в том, что вместо понятного набора эндпоинтов с заранее определённым поведением, мы получаем один эндпоинт на все наши данные. Тестировать такой эндпоинт очень больно. Первая проблема – контракт между бекендом и фронтендом: раньше мы могли написать батарею юнит-тестов, которые проверяют все возможные запросы, аутентификацию и авторизацию, а затем копипастить их для разных эндпоинтов, добавляя локальную специфику. Тесты для GraphQL так не могут — мы же не знаем, что у нас запросят в каждый конкретный момент, а значит не можем написать тесты, которые отражают реальность. Остаётся только делать тесты для типичных запросов, и надеяться, что когда фронт или бек что-то поменяет, программисты сами договорятся и друг-другу ничего не сломают.
Сложно тестировать не только контракты, но и прозводительность. Раньше мы для каждого эндпоинта могли предсказать количество тяжёлых запросов с джоинами, и даже ограничить их количество в тестах или в рантайме (по ссылкам питон, в вашем стеке будут другие инструменты). Теперь мы каждый раз не знаем, что у нас запросят, а значит можно выгрузить хоть всю базу за один запрос.
Конечно, есть бизнесы, которые выигрывают от умения отдавать по 20 сущностей на один запрос, и делают это своей core-ценностью — к примеру облачные BaaS или высокоуровневые headless CMS вроде Sanity. Но если вам надо просто отдавать на фронт десяток известных сущностей, даже если вы планируете добавить в будущем ещё пару десятков — скорее всего GraphQL обойдётся вам намного дороже чем обычный REST, потому что с самого старта вам придётся тратить намного больше сил на тесты. | 0 |
