DEV: Рубиновые тона
3.32K subscribers
154 photos
2 videos
8 files
1.04K links
Анонсы новых видео о программировании (Ruby/Rails, Solidity/Ethereum, Python, JS и не только), практические советы, обзор полезных инструментов и новости из мира IT
Download Telegram
Я тут последнее время стал задумываться, почему не хочется ходить в кино, хотя раньше это было "круто" - ну, посмотреть фильм, поесть мороженое или поп-корн... Да, а ведь ещё можно было сходить во Friday's! Это надо было в центр ехать, а цены там были почему-то в долларах (страшное время). Потом спустя много лет мы любили ходить на ночные премьеры - и в общем много хорошего видели. Но сейчас как-то не тянет.

С одной стороны, странно, ведь снимают всё ещё много интересного. И дело не в том, что все вдруг подсели на тик-токи и не могут сосредоточиться - я вот такие форматы видео не смотрю никогда. Больше того, читать длинные тексты или играть в какие-то "долгие" игры для меня вполне нормально. А ходить в кино как-то совсем не тянет.

Кажется, понял, в чём дело. На самом деле, это началось не вчера - много лет назад мы с другом, которого я, к сожалению, не видел уже много лет, могли смотреть фильм дома в стиле "посмотрели пять минут - поставили на паузу - полчаса поговорили". Сейчас, вероятно, это перешло в другую фазу. Нужно просто *поставить на паузу*, чтобы подумать, впитать и ощутить.

В детстве, к примеру, завораживает часто картинка, какие-то смешные моменты, ещё что-то такое. Ну поэтому, кстати, так затягивают идиотские видео "для детей на YT", где совсем уж ересь какая-то творится. Хорошо, что в наше старопердунское время такого не было... Но потом ты начинаешь задумываться. Кажется, первая прямо *сильная* эмоция от фильма была, когда я увидел "Конан-варвар" (где играл всеми любимый Арни). Да, сейчас это уже как-то простовато, но зрелище всех этих мучений для ребёнка, да ещё и сцена распятия - это конечно оставило след в неокрепшей душе.

Да, тогда я прямо поставил на паузу и убежал в другую комнату. Надо было как-то всё осознать. Сейчас аналогично - просто в более зрелом виде. Хочется подумать, обсудить, зафиксировать. В кино, очевидно, такой возможности нет - ну, не будешь же ты как придурок болтать весь фильм.

Представьте, что вы едете на машине мимо красивого озера. Можно пронестись мимо и просто обратить на него внимание. А можно остановиться и полюбоваться его красотой, пусть даже молча. Эпизод жизни, который запомнится. Прожить, а не пролететь мимо.
👍32❤‍🔥6👏2💯1
Кстати, вышел Typescript 6. Не знаю, что тут особо добавить, но так как он у меня много где используется, то попробовал мигрироваться. В целом, если проект современный и не использует всякое старьё, вообще без проблем всё проходит, вот пример коммита https://github.com/lokalise/node-lokalise-api/compare/bc5fa96fb54a715a9d7dd2bee86df563cc39de8c...e563c8d809723077b4607e998db8148b41edb265

Заодно заменил tsup на tsdown (для компиляции), чего и вам желаю
7🔥2
В этом видео — реальная запись mock-интервью нашего студента, который за 14 дней освоил базовый и продвинутый Solidity, сделал финальное задание и сел отвечать перед действующим аудитором смарт-контрактов из компании MixBytes.

Вы увидите:
— Какие вопросы реально задают на собеседовании Solidity-разработчика и аудитора.
— Разбор типов доступа, tx.origin vs msg.sender, require vs assert, нюансы selfdestruct и ABI encoding.
— Опасные моменты: selector clash, проблемы с donation-атаками и как их избежать.
— Практическое задание — написать Vault (ERC-4626) с нуля за 30 минут.
— Честную обратную связь: где ошибся, где проявил внимательность, и что нужно подтянуть для реального оффера.

По промокоду KRUK скидка -30% на guidedao.xyz до 20 апреля😎
https://youtu.be/iNm3gdKmXAE
16😍1
У меня тут новая статья про любопытное решение Lightpanda - первый браузер для машин, а не людей 😁 Ну, если кратко, это написанный с нуля супер-лёгкий браузер чисто для сбора данных в разнообразных скриптах. Я попробовал, в целом работает прилично https://www.scrapingbee.com/blog/lightpanda-headless-browser/
👍42🔥1
Шутка дня 🫠

 There are 10 kinds of people in this world:

Those who understand binary, and those who don't.
😁27👍7💯2🗿2🤯1👀1
Сегодня... просто музыка. Внезапно для любителей оперы, прямиком из театра. От лучшей части группы Ravens Die Laughing. Худшая часть (то есть я) в это время просто пила пиво - вероятно, это и к лучшему 😂 https://www.youtube.com/watch?v=0vx8UkcMwa8
🆒6
Гитхабу что-то поплохело, на все коммиты пишет 😄
🤯3🍾2
Хотел поделиться небольшим трюком, который позволяет легко сгенерировать файлы sbom и добавить аттестацию для приложений Go, которые компилируются через Goreleaser в GH Actions. Имея эти данные, любой может проверить происхождение файла, контрольные суммы (которые также подписаны отдельно) и удостовериться, что билд реально делался в этом репо. Конечно, это не докажет, что в коде нет каких-то скрытых нехороших штук.

В общем, в сам action добавляются разрешения

permissions:
contents: write
id-token: write
attestations: write
artifact-metadata: write


Потом ставятся такие штуки перед go releaser:

     - name: Install Syft
uses: anchore/sbom-action/download-syft@v0

- name: Install Cosign
uses: sigstore/cosign-installer@v4.1.1


Следующим шагом запускается Goreleaser, а затем ставится аттестация:

      - name: Find checksum file
shell: bash
run: echo "CHECKSUMS_FILE=$(ls dist/*_checksums.txt)" >> "$GITHUB_ENV"

- name: Generate artifact attestation
uses: actions/attest@v4.1.0
with:
subject-checksums: ${{ env.CHECKSUMS_FILE }}


В самом же конфиге go releaser помимо обычных вещей добавляется:

checksum:
name_template: "{{ .ProjectName }}_{{ .Version }}_checksums.txt"
algorithm: sha256

sboms:
- artifacts: archive

release:
draft: false
prerelease: auto
mode: replace

changelog:
disable: true

signs:
- id: checksums
cmd: cosign
signature: "${artifact}.sigstore.json"
artifacts: checksum
args:
- sign-blob
- "--bundle=${signature}"
- "${artifact}"
- "--yes"


После этого всё сделается "само". Затем через Cosign любой может сделать верификацию, либо посмотреть аттестацию прямо на GitHub
7👍5
Примерный список команд из прошлого видео тут https://gist.github.com/bodrovis/4c65951e81e9139585aa2b351eb8203c

Но это самый базовый набор, в идеале ещё врубить BBR, разобраться с DNS, защитить сервер и прочее
9👍5💘2🙏1
Сегодня нашёл интересную штуку (с трудом, так как наши друзья, разрабатывающие xray-core, очень любят писать весь changelog на китайском).

Оказывается буквально несколько дней назад они добавили поддержку Finalmask - это дополнительный слой маскировки трафика поверх обычных транспортов вроде XHTTP/REALITY/TLS.

Там есть несколько вариантов работы. Самый простой это fragment - "мягкая" фрагментация начала соединения. Он режет стартовые пакеты, например TLS ClientHello, на несколько частей с небольшими задержками. За счёт этого DPI сложнее распознать протокол по первому крупному и "красивому" пакету. Плюс fragment в том, что он почти не ломает совместимость и обычно даёт минимум побочек. Это, конечно, не волшебная таблетка, но в целом штука неплохая.

Например, можно при желании использовать это на участке между двумя вашими серверами. Для этого на промежуточном сервере просто пишется вот такое в раздел streamSettings (для outbound)

        "finalmask": {
"tcp": [
{
"type": "fragment",
"settings": {
"packets": "tlshello",
"length": "100-200",
"delay": "10-20",
"maxSplit": "3-6"
}
}
]
}


На сервере-получателе ничего менять не надо. Учтите, что xray нужно обновить по крайней мере до версии 26.3.27.

Есть и более мощная штука, называется sudoku. Она не просто дробит поток, а меняет его внешний вид по согласованному правилу/паролю между клиентом и сервером. Это сложнее, поэтому обе стороны должны поддерживать sudoku и иметь одинаковые настройки. Плюс sudoku в том, что трафик становится менее похож на стандартный Xray/REALITY/XHTTP и хуже ловится простыми сигнатурами.

Увы, похоже на участке между двумя серверами это особо работать не будет, если на сервере-получателе (сервер Б) стоит caddy и работает как reverse proxy. Зато это можно настроить между клиентом и первым сервером вот так, тоже в streamSettings, но для inbound:

  "finalmask": {
"tcp": [
{
"type": "fragment",
"settings": {
"packets": "tlshello",
"length": "100-200",
"delay": "10-20",
"maxSplit": "3-6"
}
},
{
"type": "sudoku",
"settings": {
"password": "длинный пароль",
"paddingMin": 8,
"paddingMax": 64
}
}
]
}


Но на клиенте обязательно тоже нужно настроить finalmask. Так, v2rayn это уже умеет, там просто жмётся в расширенных настройках finalmask и вставляется json вот такой

{
"tcp": [
{
"type": "sudoku",
"settings": {
"password": "тот же пароль",
"paddingMin": 8,
"paddingMax": 64
}
},
{
"type": "fragment",
"settings": {
"packets": "tlshello",
"length": "100-200",
"delay": "10-20",
"maxSplit": "3-6"
}
}
]
}


Далее там можно сформировать share link (она довольно большая тк кодируется json). Другие клиенты это умеют не все. Streisand - нет, happ - для винды вроде да, для мака не похоже, onexray - да, v2rayng - вроде должен, но там судя по всему только в пре-релизной версии. Но думаю в ближайшие месяцы это добавят много где
17👍8🔥4
Разбираем лабораторную схему Xray XHTTP split, где upload и download идут через разные публичные endpoints: up-сервер принимает исходящий поток, down-сервер отдаёт клиенту основной download, а обе половины сходятся в один Xray backend через приватную сеть. https://www.youtube.com/watch?v=c0ZZFIV6kPs
❤‍🔥145
Друзья, я тут совершенно неожиданно заметил, что Telemt как-то *слишком* много пишет в логи даже если поставить log level в normal. Не очень понятно, баг ли это, но только за сегодня он умудрился написать 160 тысяч строк, а всего его лог-файл занял 2 гигабайта 😄

Если используете эту штуку, я настоятельно советую проверить логи и угомонить его (например можно в override сделать RUST_LOG=warn или просто выставить в конфиге silent
👍12👎1💯1