Forwarded from Эшер II A+
🔐☢️ Как-то прошла незаметно новость о том, что github.com поменял свой RSA SSH ключ:
https://github.blog/2023-03-23-we-updated-our-rsa-ssh-host-key/
👉 24 марта 2023 года около 05:00 UTC GitHub на всякий случай сменил RSA SSH ключ. Смена ключа произошла в результате обнаружения утечки секретного ключа в публичный git-репозиторий. ECDSA и ED25519 ключи не затронуты.
☝️ Вкратце. SSH ключ, о котором идёт речь, это SSH ключ самого сервера github.com. Когда пользователь сервиса хочет по SSH обратиться к репозиторию на github'е. это как бы тот ключ, который использует сервер. Если следовать всем правилам, надо получить слепок этого ключа доверенным способом и всегда сравнивать его. Обычно же, клиенты SSH предлагают сохранить его при первом соединении и так все и делают. Однако, даже такое «халявное» удостоверение хоста в большинстве случаев позволяет предотвратить атаку «мужик посерёдке» (MitM). Потому что слепок сохранён и если ключ вдруг на хосте поменяется, это вызовет ошибку при попытке нового соединения.
🙀 Как вы уже догадались, это должно было поломать кучу автоматики, пайплайнов CI/CD и так далее. Однако:
• Огромный срез параноиков не пользуется github. Не, некоторые и в пещерах живут, и это не плохо.
• Кто-то всё-таки живёт в 2023 году и использует ECDSA/ED25519
• Многие используют в CI/CD https. Несмотря на отсутствие такого у самого git, есть множество устоявшихся практик git over https. В том числе «проталкиваемых» самим github'ом
• Неимоверно много в скриптах
• Админы утром проснулись, увидели поломанную автоматику, увидели что-то про хосткей в новостях, не глядя приняли новый ключ (мой случай) и пошли пить утренний кофе.
❌🫵 А у тебя сломался пайплайн? А сразу? А точно между тем как сломался и как работал, он работал с нужным ключом? На этой радостной ноте пожелаю всем labos nakties, как говорят тут.
⚡️ Новый ключ, чтобы не искать
https://github.blog/2023-03-23-we-updated-our-rsa-ssh-host-key/
👉 24 марта 2023 года около 05:00 UTC GitHub на всякий случай сменил RSA SSH ключ. Смена ключа произошла в результате обнаружения утечки секретного ключа в публичный git-репозиторий. ECDSA и ED25519 ключи не затронуты.
☝️ Вкратце. SSH ключ, о котором идёт речь, это SSH ключ самого сервера github.com. Когда пользователь сервиса хочет по SSH обратиться к репозиторию на github'е. это как бы тот ключ, который использует сервер. Если следовать всем правилам, надо получить слепок этого ключа доверенным способом и всегда сравнивать его. Обычно же, клиенты SSH предлагают сохранить его при первом соединении и так все и делают. Однако, даже такое «халявное» удостоверение хоста в большинстве случаев позволяет предотвратить атаку «мужик посерёдке» (MitM). Потому что слепок сохранён и если ключ вдруг на хосте поменяется, это вызовет ошибку при попытке нового соединения.
🙀 Как вы уже догадались, это должно было поломать кучу автоматики, пайплайнов CI/CD и так далее. Однако:
• Огромный срез параноиков не пользуется github. Не, некоторые и в пещерах живут, и это не плохо.
• Кто-то всё-таки живёт в 2023 году и использует ECDSA/ED25519
• Многие используют в CI/CD https. Несмотря на отсутствие такого у самого git, есть множество устоявшихся практик git over https. В том числе «проталкиваемых» самим github'ом
• Неимоверно много в скриптах
-o StrictHostKeyChecking=no
— игнорирование сравнения слепка ключа с запомненным. Какой дали, с тем и работаем.• Админы утром проснулись, увидели поломанную автоматику, увидели что-то про хосткей в новостях, не глядя приняли новый ключ (мой случай) и пошли пить утренний кофе.
❌🫵 А у тебя сломался пайплайн? А сразу? А точно между тем как сломался и как работал, он работал с нужным ключом? На этой радостной ноте пожелаю всем labos nakties, как говорят тут.
⚡️ Новый ключ, чтобы не искать
SHA256:uNiVztksCsDhcc0u9e8BujQXVUpKZIDTMczCvj3tD2s
The GitHub Blog
We updated our RSA SSH host key
At approximately 05:00 UTC on March 24, out of an abundance of caution, we replaced our RSA SSH host key used to secure Git operations for GitHub.com.
#ИИ #Copilot #GPT4 🥂ИИ как товарищ и инструмент в руках программиста
Начну цикл постов про программирование и ИИ. Началось всё с того, что я хотел заставить ИИ нарисовать Башню Гедемина в будущем c космолётами. И так слово за слово купил доступ к разным ИИ...
Я расскажу вам как это стало для меня не просто инструментом, но и соратником, помогающим в разработке.
Я был поражён эффективностью ИИ и его способностью быть настоящим другом, который подсказывает решения и предлагает альтернативы, но при этом не делает всю работу за тебя. ИИ-технологии стали и хайпом, и в то же время неимоверно эффективным инструментом в умелых руках.
Начну с того, что может помочь вам прямо сейчас: GitHub Copilot. 10$+TAX в месяц — и он ваш.
Начало моего знакомства с Copilot было совершенно неожиданным. Однажды, активировав триальную версию, я забыл про неё. И вот пришло время поправить shell-скрипт, который, хоть и был важным, но второстепенным и не связанным с основным кодом на Golang. Начав писать функцию
Использование: Установив Copilot как плагин в свой редактор кода (в моем случае, это VS Code), можно получать получать подсказки кода и автоматические предложения для комментариев к типам и интерфейсам, реализации рутинных функций и обработки ошибок. Copilot особенно полезен, когда код назван понятно и структурирован. И тут начинается цепная реакция — более хорошо описанный с помощью Copilot код помогает Copilot работать ещё лучше.
🔖 Если в VS Code в плагине Copilot провести мышкой поверх подсказки, то плагин подскажет клавиши управления. Сейчас можно принимать всю подсказку и пословно. А также листать варианты подсказок.
💚 Главным преимуществом Copilot является снижение рутины, что позволяет сфокусироваться на более сложных задачах.
Недостатки: Copilot может допускать ошибки или предложить не совсем подходящий код. Или вообще не в тему. «Замечтался». Важно не торопиться и внимательно проверять предложенный Copilot код перед его использованием. Это позволяет успеть перехватить большинство ошибок. Умение отсеивать предложения AI и выбирать только подходящие решения становится одним из наиболее важных навыков для современного разработчика.
Советы для начинающих: Я бы рекомендовал начать использовать Copilot прямо сейчас, но не ждать от него чудес. Copilot отражает понятность вашего кода и обогащает его мировым опытом. Если код сложен и запутан, Copilot может быть менее полезным, или даже вредным. Так что всё зависит по прежнему от прослойки между клавиатурой и стулом, и отсофт ИИ-скиллов.
💥 Я покидаю сюда прямо конкретных примеров, когда они будут у меня случаться. Если у вас есть какие-то понятные примеры — кидайте их мне, сделаем альбомчик «ИИ кодят»
Начну цикл постов про программирование и ИИ. Началось всё с того, что я хотел заставить ИИ нарисовать Башню Гедемина в будущем c космолётами. И так слово за слово купил доступ к разным ИИ...
Я расскажу вам как это стало для меня не просто инструментом, но и соратником, помогающим в разработке.
Я был поражён эффективностью ИИ и его способностью быть настоящим другом, который подсказывает решения и предлагает альтернативы, но при этом не делает всю работу за тебя. ИИ-технологии стали и хайпом, и в то же время неимоверно эффективным инструментом в умелых руках.
Начну с того, что может помочь вам прямо сейчас: GitHub Copilot. 10$+TAX в месяц — и он ваш.
Начало моего знакомства с Copilot было совершенно неожиданным. Однажды, активировав триальную версию, я забыл про неё. И вот пришло время поправить shell-скрипт, который, хоть и был важным, но второстепенным и не связанным с основным кодом на Golang. Начав писать функцию
printdef () {
, я был поражен, когда Copilot автоматически дополнил её всеми необходимыми echo
и текстами. Этот момент настолько меня вдохновил, что я просидел часа три за непрерывным написанием кода, правками, написанием, улучшением, правками.Использование: Установив Copilot как плагин в свой редактор кода (в моем случае, это VS Code), можно получать получать подсказки кода и автоматические предложения для комментариев к типам и интерфейсам, реализации рутинных функций и обработки ошибок. Copilot особенно полезен, когда код назван понятно и структурирован. И тут начинается цепная реакция — более хорошо описанный с помощью Copilot код помогает Copilot работать ещё лучше.
🔖 Если в VS Code в плагине Copilot провести мышкой поверх подсказки, то плагин подскажет клавиши управления. Сейчас можно принимать всю подсказку и пословно. А также листать варианты подсказок.
💚 Главным преимуществом Copilot является снижение рутины, что позволяет сфокусироваться на более сложных задачах.
Недостатки: Copilot может допускать ошибки или предложить не совсем подходящий код. Или вообще не в тему. «Замечтался». Важно не торопиться и внимательно проверять предложенный Copilot код перед его использованием. Это позволяет успеть перехватить большинство ошибок. Умение отсеивать предложения AI и выбирать только подходящие решения становится одним из наиболее важных навыков для современного разработчика.
Советы для начинающих: Я бы рекомендовал начать использовать Copilot прямо сейчас, но не ждать от него чудес. Copilot отражает понятность вашего кода и обогащает его мировым опытом. Если код сложен и запутан, Copilot может быть менее полезным, или даже вредным. Так что всё зависит по прежнему от прослойки между клавиатурой и стулом, и от
💥 Я покидаю сюда прямо конкретных примеров, когда они будут у меня случаться. Если у вас есть какие-то понятные примеры — кидайте их мне, сделаем альбомчик «ИИ кодят»
#ИИ #Copilot #VSCode 💥 И сразу отличный короткий пример. Это вот это место: https://github.com/usher2/u2ckdump/blob/4ffca6caf7457840a969507b22e4ebd0a05f9ed4/parse.go#L19
☝️ Я поставил
🫵 Живите теперь с этим!
☝️ Я поставил
//
, а Copilot серым описал, что это. Это действительно статистика последнего цикла разбора XML'ки.🫵 Живите теперь с этим!
🔸 Коллега прислал ссылку на интересный проект. Пакет предоставляет возможность пользоваться функциями из библиотек разных систем. Насколько я понимаю, поддерживается пока только Darwin и Linux:
https://github.com/ebitengine/purego
🫴 Вместо тысячи слов:
• Динамическая подгрузка
• Отсутствие врапперов
https://github.com/ebitengine/purego
🫴 Вместо тысячи слов:
func main() {• Кросскомпиляция
libc, err := purego.Dlopen(
getSystemLibrary(),
purego.RTLD_NOW|purego.RTLD_GLOBAL,
)
if err != nil {
panic(err)
}
var puts func(string)
purego.RegisterLibFunc(&puts, libc, "puts")
puts("Calling C from Go without Cgo!")
}
• Динамическая подгрузка
• Отсутствие врапперов
GitHub
GitHub - ebitengine/purego
Contribute to ebitengine/purego development by creating an account on GitHub.
🏆 Хотите конкурс на интерес? У меня есть.
⏰ Представьте банальную задачу. Ваш сервис что-то постоянно делает, Допустим раз в час обрабатывает какие-то данные и записывает их обработанными. Раз в месяц вы хотите сбросить какой-то счётчик. Раз в месяц от некой стартовой даты Tstart. Существуют два глобальных варианта:
• При старте и после каждого сброса счётчика записывать значение, когда надо сбросить счётчик, прибавив месяц — время Tx. Каждый раз проверять на now.Before(Tx)
• При старте и каждый сброс счётчика записывать текущее время. Каждую обработку проверять, не истёк ли месяц.
В обоих случаях надо или прибавить месяц, или отнять.
🥁 Банальщина какая-то. Давайте напишем функцию(и) добавления/вычитания месяцев к time.Time (не обязательно текущему). С тестами.
🤖 chatGPT можно и интересно. Но я попрошу опубликовать полный диалог с ним.
❗️ По возможности размещайте свой код на go.dev/play
💐 Лайк, шар, репост, вот это всё.
🐰 Внутренний голос сказал: «Вставай, иди на охоту, будет весело»
⏰ Представьте банальную задачу. Ваш сервис что-то постоянно делает, Допустим раз в час обрабатывает какие-то данные и записывает их обработанными. Раз в месяц вы хотите сбросить какой-то счётчик. Раз в месяц от некой стартовой даты Tstart. Существуют два глобальных варианта:
• При старте и после каждого сброса счётчика записывать значение, когда надо сбросить счётчик, прибавив месяц — время Tx. Каждый раз проверять на now.Before(Tx)
• При старте и каждый сброс счётчика записывать текущее время. Каждую обработку проверять, не истёк ли месяц.
В обоих случаях надо или прибавить месяц, или отнять.
🥁 Банальщина какая-то. Давайте напишем функцию(и) добавления/вычитания месяцев к time.Time (не обязательно текущему). С тестами.
🤖 chatGPT можно и интересно. Но я попрошу опубликовать полный диалог с ним.
❗️ По возможности размещайте свой код на go.dev/play
💐 Лайк, шар, репост, вот это всё.
🐰 Внутренний голос сказал: «Вставай, иди на охоту, будет весело»
go.dev
Go Playground - The Go Programming Language
🔹 Уже вчера, 4 апреля 2023 года вышел минорный релиз Go 1.20.3:
https://go.dev/doc/devel/release#go1.20.minor
☑️ Из интересного — вроде бы он закрыл раздражавший в Dependabot alerts баг с возможностью DoS в net/http и там ещё целой пачке библиотек.
☝️ Кстати о Dependabot alerts. Вы ведь знаете о Dependabot? Мир программирования оброс конечно офигенными помощниками — подсветка кода, линтеры, Copilot... Dependabot — это github умеет сообщать вам, если в зависимостях вашего софта есть известные уязвимости. Фишку надо включить. Рекомендую
https://go.dev/doc/devel/release#go1.20.minor
☑️ Из интересного — вроде бы он закрыл раздражавший в Dependabot alerts баг с возможностью DoS в net/http и там ещё целой пачке библиотек.
☝️ Кстати о Dependabot alerts. Вы ведь знаете о Dependabot? Мир программирования оброс конечно офигенными помощниками — подсветка кода, линтеры, Copilot... Dependabot — это github умеет сообщать вам, если в зависимостях вашего софта есть известные уязвимости. Фишку надо включить. Рекомендую
go.dev
Release History - The Go Programming Language
😎 Я хотел подготовить небольшое показательное выступление по chatGPT и получил смешное. «I see, you're looking for ways to integrate custom encryption into your Golang HTTP services at a higher level», — говорит мне Cylon. А потом мы полчаса толчём варианты. А дальше — картинка. «Девочка, что ты плетёшь?..» (c)
💥 В битве
👉 Для перехода в обычный режим нажмите
vim -y
vs chatGPT
выиграл vim -y
🤙 1:0, хромированный тостер!!!👉 Для перехода в обычный режим нажмите
Ctrl+L
, а дальше как обычно из vim
🍺 Помню это был октябрь 2020. Я только устроился программистом в майнинг. Ездил от ст.м. Московская на 187 автобусе. И пытался слушать Go Time подкаст по дороге: https://changelog.com/gotime
🍺 Так вот. Еду я как-то, а там обсуждают, что из Golang удалить бы. И дядька один такой — я бы
🙅♂️ Первой моей реакцией было — как так можно-то? Жутко не удобно. На половине кейсов спотыкаешься и тратишь время на перестановки!!! switch ещё этот!!!
❤️ А где-то через пару месяцев я взглянул на код... И понял, что там где я заставил делать перестановки и выворачиваться из-за избегания
🍓 Я не знаю до сих пор как это работает, но почему-то очень неудобно делать вложенные
🫵 А ты используешь
👉 Да, конечно, неявно такая практика рекомендуется и передовыми животноводами. но явного избегания
• https://google.github.io/styleguide/go/index
• https://github.com/uber-go/guide/blob/master/style.md
🍺 Так вот. Еду я как-то, а там обсуждают, что из Golang удалить бы. И дядька один такой — я бы
else
удалил, я им не пользуюсь. И я такой наушники выронил — как это? Но решил для разнообразия попробовать.🙅♂️ Первой моей реакцией было — как так можно-то? Жутко не удобно. На половине кейсов спотыкаешься и тратишь время на перестановки!!! switch ещё этот!!!
❤️ А где-то через пару месяцев я взглянул на код... И понял, что там где я заставил делать перестановки и выворачиваться из-за избегания
else
— там код читаемый, тестируемый и расширяемый. А там, где я так не делал, в ряде случаев он был запутанный и зачастую с ошибками (логическими).🍓 Я не знаю до сих пор как это работает, но почему-то очень неудобно делать вложенные
if
, если избегать else
и как-то эти вложения автоматом исчезают🫵 А ты используешь
else
?👉 Да, конечно, неявно такая практика рекомендуется и передовыми животноводами. но явного избегания
else
там нет:• https://google.github.io/styleguide/go/index
• https://github.com/uber-go/guide/blob/master/style.md
Changelog
The Go Time podcast
Your source for wide-ranging discussions from all around the Go community.
#game ⚡️⚡️⚡️ Вышла новая реал-тайм стратегия, написанная на Golang!
https://t.iss.one/roboden_game/35
• Игра написана на Golang
• Браузерная версия сделана на Go WASM (это может быть интересно с академической точки зрения)
• Игра наследует go-style — меньше бессмысленных действий
• Игра сделана в стиле мексиканских сериалов — вы можете играть в игру, мыть посуду, стирать, укачивать ребёнка, готовить кофий, иногда бросая взгляд на экран
• Именитые разработчики
👆Обратите внимание, завтра 21 апреля у них стрим.
https://t.iss.one/roboden_game/35
• Игра написана на Golang
• Браузерная версия сделана на Go WASM (это может быть интересно с академической точки зрения)
• Игра наследует go-style — меньше бессмысленных действий
• Игра сделана в стиле мексиканских сериалов — вы можете играть в игру, мыть посуду, стирать, укачивать ребёнка, готовить кофий, иногда бросая взгляд на экран
• Именитые разработчики
👆Обратите внимание, завтра 21 апреля у них стрим.
Telegram
Roboden Game
Рободен готов! 🔥
Можно играть прямо из браузера, а можно скачать дистрибутивы под Windows и Linux: https://quasilyte.itch.io/roboden
Завтра, 21-го апреля в 20:00 по Москве будем стримить игровой процесс. Подключайтесь, будем рады вас видеть. ❤️
Можно играть прямо из браузера, а можно скачать дистрибутивы под Windows и Linux: https://quasilyte.itch.io/roboden
Завтра, 21-го апреля в 20:00 по Москве будем стримить игровой процесс. Подключайтесь, будем рады вас видеть. ❤️
#game ❤️ Собственно Искандер рассказывает про детали разработки на Хабре. Обещает цикл статей. Даже если вы никогда не будете писать игр на Golang — это всё равно интересно и познавательно:
https://habr.com/ru/articles/730848/
https://habr.com/ru/articles/730848/
Хабр
Разработка игр на Go: шейдеры
Давненько я не писал никаких статей на Хабре. Я планировал вести серию заметок о разработке игр на Go и начал я с рендеринга текста , но меня не хватило даже на второй текст. Что же, настало время...
Соседний канал офигенный примерчик привёл.
А тут?
func() {Что будет на экране? https://t.iss.one/HowToGoWrong/150
f, err := net.Dial("tcp", "1.1.1.1:443") // network is down
defer f.Close()
fmt.Println(err)
}()
А тут?
func() {https://t.iss.one/HowToGoWrong/148
f, err := os.Open("does-not-exist")
defer f.Close()
fmt.Println(err)
}()
Telegram
How to Go wrong
Что будет на экране?
<nil> / dial tcp 1.1.1.1:443: connect: no route to host / panic: runtime error: invalid memory address or nil pointer dereference / ( ╯°益°) ╯彡 ┻━┻
<nil> / dial tcp 1.1.1.1:443: connect: no route to host / panic: runtime error: invalid memory address or nil pointer dereference / ( ╯°益°) ╯彡 ┻━┻
Forwarded from addmeto (Grigory Bakunov)
Пользователи бета-версии нового Github CoPilot смогли добраться до его промпта, т.е. текстового запроса который помещается в каждый диалог, чтобы GPT4 делал то, что задумано. Посмотрите как любопытно.
Для тех кто не программирует, посмотрите на картинку - вот так выглядит будущее программирование искусственного интеллекта https://twitter.com/marvinvonhagen/status/1657060506371346432
Для тех кто не программирует, посмотрите на картинку - вот так выглядит будущее программирование искусственного интеллекта https://twitter.com/marvinvonhagen/status/1657060506371346432