Путь Golang
373 subscribers
15 photos
32 links
Всё о Golang

Ресурсы и материалы: https://t.iss.one/waygolang/12

Кроме чата, Golang обсудить можно тут: https://t.iss.one/gogolang
Download Telegram
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'ом
• Неимоверно много в скриптах -o StrictHostKeyChecking=no — игнорирование сравнения слепка ключа с запомненным. Какой дали, с тем и работаем.
• Админы утром проснулись, увидели поломанную автоматику, увидели что-то про хосткей в новостях, не глядя приняли новый ключ (мой случай) и пошли пить утренний кофе.

🫵 А у тебя сломался пайплайн? А сразу? А точно между тем как сломался и как работал, он работал с нужным ключом? На этой радостной ноте пожелаю всем labos nakties, как говорят тут.

⚡️ Новый ключ, чтобы не искать SHA256:uNiVztksCsDhcc0u9e8BujQXVUpKZIDTMczCvj3tD2s
#ИИ #Copilot #GPT4 🥂ИИ как товарищ и инструмент в руках программиста

Начну цикл постов про программирование и ИИ. Началось всё с того, что я хотел заставить ИИ нарисовать Башню Гедемина в будущем 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

🫴 Вместо тысячи слов:
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!")
}

• Кросскомпиляция
• Динамическая подгрузка
• Отсутствие врапперов
🏆 Хотите конкурс на интерес? У меня есть.

Представьте банальную задачу. Ваш сервис что-то постоянно делает, Допустим раз в час обрабатывает какие-то данные и записывает их обработанными. Раз в месяц вы хотите сбросить какой-то счётчик. Раз в месяц от некой стартовой даты Tstart. Существуют два глобальных варианта:

• При старте и после каждого сброса счётчика записывать значение, когда надо сбросить счётчик, прибавив месяц — время Tx. Каждый раз проверять на now.Before(Tx)
• При старте и каждый сброс счётчика записывать текущее время. Каждую обработку проверять, не истёк ли месяц.

В обоих случаях надо или прибавить месяц, или отнять.

🥁 Банальщина какая-то. Давайте напишем функцию(и) добавления/вычитания месяцев к time.Time (не обязательно текущему). С тестами.

🤖 chatGPT можно и интересно. Но я попрошу опубликовать полный диалог с ним.

❗️ По возможности размещайте свой код на go.dev/play

💐 Лайк, шар, репост, вот это всё.

🐰 Внутренний голос сказал: «Вставай, иди на охоту, будет весело»
🔹 Уже вчера, 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 умеет сообщать вам, если в зависимостях вашего софта есть известные уязвимости. Фишку надо включить. Рекомендую
😎 Я хотел подготовить небольшое показательное выступление по chatGPT и получил смешное. «I see, you're looking for ways to integrate custom encryption into your Golang HTTP services at a higher level», — говорит мне Cylon. А потом мы полчаса толчём варианты. А дальше — картинка. «Девочка, что ты плетёшь?..» (c)
👍 Очень характерная хорошая подсказка github Copilot во время рефакторинга
👍 И вот прямо буквально через строку тоже. Я это всё показываю в качестве рекламной паузы и для чистоты понимания возможностей Copilot. Обратите внимание, он посмотрел по аналогии, вытащив строку из комментария
😄 Четверг же это маленькая пятница?

👉 Есть такой популярный среди айтишников редактор — vim . И есть у него есть режим vim -y . Попробовали?

🖖 А теперь хорошая тренировка — попробуйте с помощью chatGPT выйти из редактора, запущенного в режиме vim -y

👇 Присылайте успешные диалоги с chatGPT в каменты
💥 В битве vim -y vs chatGPT выиграл vim -y

🤙 1:0, хромированный тостер!!!

👉 Для перехода в обычный режим нажмите Ctrl+L, а дальше как обычно из vim
🍺 Помню это был октябрь 2020. Я только устроился программистом в майнинг. Ездил от ст.м. Московская на 187 автобусе. И пытался слушать Go Time подкаст по дороге: https://changelog.com/gotime

🍺 Так вот. Еду я как-то, а там обсуждают, что из 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
#midjourney Будущее программирования с помощью ИИ
#game ⚡️⚡️⚡️ Вышла новая реал-тайм стратегия, написанная на Golang!
https://t.iss.one/roboden_game/35

• Игра написана на Golang
• Браузерная версия сделана на Go WASM (это может быть интересно с академической точки зрения)
• Игра наследует go-style — меньше бессмысленных действий
• Игра сделана в стиле мексиканских сериалов — вы можете играть в игру, мыть посуду, стирать, укачивать ребёнка, готовить кофий, иногда бросая взгляд на экран
• Именитые разработчики

👆Обратите внимание, завтра 21 апреля у них стрим.
#game ❤️ Собственно Искандер рассказывает про детали разработки на Хабре. Обещает цикл статей. Даже если вы никогда не будете писать игр на Golang — это всё равно интересно и познавательно:
https://habr.com/ru/articles/730848/
Соседний канал офигенный примерчик привёл.

func() {
f, err := net.Dial("tcp", "1.1.1.1:443") // network is down
defer f.Close()

fmt.Println(err)
}()

Что будет на экране? https://t.iss.one/HowToGoWrong/150

А тут?

func() {
f, err := os.Open("does-not-exist")
defer f.Close()

fmt.Println(err)
}()

https://t.iss.one/HowToGoWrong/148
Forwarded from addmeto (Grigory Bakunov)
Пользователи бета-версии нового Github CoPilot смогли добраться до его промпта, т.е. текстового запроса который помещается в каждый диалог, чтобы GPT4 делал то, что задумано. Посмотрите как любопытно.

Для тех кто не программирует, посмотрите на картинку - вот так выглядит будущее программирование искусственного интеллекта https://twitter.com/marvinvonhagen/status/1657060506371346432