🍺 Помню это был октябрь 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
⚡️⚡️⚡️ OpenAI сделало функционал «поделиться диалогом» для chatGPT. Вот например про golang, Wireguard VPN и preshared keys:
https://chat.openai.com/share/ff6af8d8-2aba-4f8d-a898-e655d415e486
✅ Поделиться диалогом — это прямо нереально круто!
https://chat.openai.com/share/ff6af8d8-2aba-4f8d-a898-e655d415e486
✅ Поделиться диалогом — это прямо нереально круто!
ChatGPT
WireGuard cryptography and PSK.
A conversational AI system that listens, learns, and challenges
Forwarded from Эшер II A+
🎓 Помните, Минцифра рекламировала федеральную образовательную программу для старшеклаcсников? Типа программистов там готовят: https://digital.gov.ru/ru/events/46032/
🙀 Это задачка курса по Python с ожидаемым ответом в одной из школ (в рамках этой программы). Ответы проверяются платформой. Полученный результат сравнивается с ожидаемым.
🤷♂️ А потом я удивляюсь, что 146% кандидатов на разработчика на Golang не могут объяснить, что такое горутины. Не, ну счастливо, конечно. Но Максут Игоревич, это бардак вселенского масштаба.
☝️ Для непрограммистов — в программировании нельзя проверять числа с плавающей точкой на равенство. В данном случае платформа проверяет ученика по результату в том числе, и по вот этому числу.
🫵 Если ты программист и не в курсе, о чём я, то... то я не знаю что
🙀 Это задачка курса по Python с ожидаемым ответом в одной из школ (в рамках этой программы). Ответы проверяются платформой. Полученный результат сравнивается с ожидаемым.
🤷♂️ А потом я удивляюсь, что 146% кандидатов на разработчика на Golang не могут объяснить, что такое горутины. Не, ну счастливо, конечно. Но Максут Игоревич, это бардак вселенского масштаба.
☝️ Для непрограммистов — в программировании нельзя проверять числа с плавающей точкой на равенство. В данном случае платформа проверяет ученика по результату в том числе, и по вот этому числу.
🫵 Если ты программист и не в курсе, о чём я, то... то я не знаю что
Forwarded from Эшер II A+
Путь Golang
🎓 Помните, Минцифра рекламировала федеральную образовательную программу для старшеклаcсников? Типа программистов там готовят: https://digital.gov.ru/ru/events/46032/ 🙀 Это задачка курса по Python с ожидаемым ответом в одной из школ (в рамках этой программы).…
👍 Но так выявляются пытливые умы. Тру будущий программист приходит с вопросом:
— Мать(отец), WTF?!!!
— Мать(отец), WTF?!!!
Forwarded from Эшер II A+
🌑 Говорят, умер Никлаус Вирт, автор языка Pascal:
https://twitter.com/Bertrand_Meyer/status/1742613897675178347
«программы становятся медленнее куда шустрее, чем компьютеры становятся быстрее»
https://twitter.com/Bertrand_Meyer/status/1742613897675178347
«программы становятся медленнее куда шустрее, чем компьютеры становятся быстрее»
X (formerly Twitter)
Bertrand Meyer (@Bertrand_Meyer) on X
We lost a titan of programming languages, programming methodology, software engineering and hardware design. Niklaus Wirth passed away on the first of January. We mourn a pioneer, colleague, mentor and friend.
Forwarded from How to Go wrong (Alexey Palazhchenko)
Не прошло и три го… а, нет, уже прошло. Тем не менее, теперь у нас есть официальная документация по этому поводу: https://go.dev/doc/modules/layout 🎉
Выпиливайте ваши
Выпиливайте ваши
pkg/
.Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from How to Go wrong (Alexey Palazhchenko)
Все написали, и Russ Cox написал:
* https://research.swtch.com/xz-script
* https://research.swtch.com/xz-timeline
* https://research.swtch.com/xz-script
* https://research.swtch.com/xz-timeline
🤷♂️ Бросил Golang Telegram Bot API и перешёл на https://github.com/go-telegram/bot
🐾 Забавно. Я всё понимаю. Я знаю все Pro и Contra. Но внезапно стал часто применять в пет-проектах на go база данных - просто файл в json. Так получается в разы быстрее на MVP. И главное, что 99% разработки не вырастает из файла. А вот тормозит "быстро накидаю" использование другого типа баз сильно
🐾 Забавно. Я всё понимаю. Я знаю все Pro и Contra. Но внезапно стал часто применять в пет-проектах на go база данных - просто файл в json. Так получается в разы быстрее на MVP. И главное, что 99% разработки не вырастает из файла. А вот тормозит "быстро накидаю" использование другого типа баз сильно
GitHub
GitHub - go-telegram/bot: Telegram Bot API Go framework
Telegram Bot API Go framework. Contribute to go-telegram/bot development by creating an account on GitHub.
Forwarded from Эшер II A+
⚡️⚡️⚡️ Все побежали, и я побежал. VPN-бот от известного кутюрье (меня) с VPN по спекулятивной цене за 🌟:
https://t.iss.one/FarscapeBot
👉 ShadowSocks в варианте совместимом с Outline. Подключайся! Рви свой инфопузырь!
🍄 Сообщай об ошибках. Предлагай исправления. Бот сыроват. Инструкций много я не написал. Но всё работает
🫵 А может ты написал/записал обзор интересного клиента?
https://t.iss.one/FarscapeBot
👉 ShadowSocks в варианте совместимом с Outline. Подключайся! Рви свой инфопузырь!
🍄 Сообщай об ошибках. Предлагай исправления. Бот сыроват. Инструкций много я не написал. Но всё работает
🫵 А может ты написал/записал обзор интересного клиента?
#swagger #oauth ☕️ Люблю и не люблю такие штуки. Переделывал немного одну вещь по работе и вдруг понял, что в go-swagger для security.type="oauth2" отсутствует flow для
👉 Для способа получения ключа Client Credentials Grant в go-swagger есть flow application (согласно спецификации swagger 2.0, но это надо было догадаться туда сунуться и сложить 2+2). Из обязательных полей только
☝️ Главное не забыть у
👍 Flow полностью соответствует RFC 6749. Но главное, что встроенный в go-swagger Swagger-UI умеет этот flow авторизовать. Он запрашивает
client_credentials
. Но нет, есть. Несмотря на то, что я считаю, что это довольно частый случай — пришлось выкапывать и экспериментировать. 👉 Для способа получения ключа Client Credentials Grant в go-swagger есть flow application (согласно спецификации swagger 2.0, но это надо было догадаться туда сунуться и сложить 2+2). Из обязательных полей только
tokenURL
, который может быть в свою очередь в этом же API:securityDefinitions:
OauthSecurity:
type: oauth2
flow: applicatiom
tokenUrl: '/token'
scopes:
admin: Admin scope
user: User scope
☝️ Главное не забыть у
/token
, если он локальный поставить: security:
- Basic: []
👍 Flow полностью соответствует RFC 6749. Но главное, что встроенный в go-swagger Swagger-UI умеет этот flow авторизовать. Он запрашивает
client_id
и client_secret
, и scope. Пару client_id
и client_secret
он сам превращает в заголовок Authorization: Basic xxxx...
(как и положено по RFC). Он сам получает access_token
по ссылке tokenURL
, которую он распознаёт, и потом с этим токеном работает в API. Единственное, что он не отрабатывает "протухание" ключа, приходится авторизовываться каждый раз зановоForwarded from How to Go wrong (Alexey Palazhchenko)
Лучшая четверть организаторов GopherCon Russia (не я) делает камерный четырехдневный Go-кэмп в Черногории. С 13-ого по 16-ое октября будет летний лагерь, Kubernetes операторы, горы, PyTorch в Go, отдых, создание игр на Go. Подробности тут, а наш Go-чат делает разыгрыш скидки в 15%.
😱 Простите не про Go. 22 года работаю с MySQL. CRUD для веба. Один раз что-то сложное делал, но специфическое. Не прямо чтобы DBA, я к этому. И тут фигня случается — 2млн. строк, есть индекс по int-полю, выборки строк под 20. Тормозит и всё тут
😱 Я уже и так, и сяк, и innodb в память вытащил. Ладно, думаю, дошло дело до изучения Explain. И тут вдруг вижу - индекс по колонке, по которой выбираю, есть, но explain показывает ALL.
WTF?!!!!
🤙 Просто
WTF?!!!! 2024 год на дворе
😱 Я уже и так, и сяк, и innodb в память вытащил. Ладно, думаю, дошло дело до изучения Explain. И тут вдруг вижу - индекс по колонке, по которой выбираю, есть, но explain показывает ALL.
WTF?!!!!
🤙 Просто
ANALIZE TABLE ...
спасает ситуциюWTF?!!!! 2024 год на дворе
#swagger #oauth 🖌 Произвёл рефакторинг своего летнего поста про oauth2 в go-swagger
☝️ Я работаю с swagger только в режиме генерации кода. Генерация спецификации по коду делает код более гибким. Однако и возможностей ошибиться намного больше, чем при генерации кода по спецификации
☕️ Переделывал одну вещь по работе и не смог найти в go-swagger для
ℹ️ Что такое client credentials grant? Это когда клиенту API надо сходить с
👉 Для варианта
☝️ Главное не забыть у
и добавить в
👍 Flow полностью соответствует RFC 6749. Встроенный в go-swagger Swagger-UI умеет этот flow авторизовать. Он запрашивает
‼️ Обратите внимание, что go-swagger не учитывает формата выдаваемого токена — он может быть любым. Поле
☝️ Я работаю с swagger только в режиме генерации кода. Генерация спецификации по коду делает код более гибким. Однако и возможностей ошибиться намного больше, чем при генерации кода по спецификации
☕️ Переделывал одну вещь по работе и не смог найти в go-swagger для
security.type="oauth2"
значение для flow для client credentials grant
. Через несколько часов поисков и экспериментов, я всё-таки обнаружил нужный flow. Но считаю, что в документации это не очевидноℹ️ Что такое client credentials grant? Это когда клиенту API надо сходить с
client_id
и client_secret
(считайте логин и пароль) на сервер авторизации и запросить токен доступа. А к ресурсам ходить уже с этим токеном. Токен указывается в заголовке. Обычно токен представляет собой JWT (данные в json. подписанные и закодированные в base64 с определёнными полями, указывающими что это за токен, срок действия, область действия - scope
и т.д.). Принципиальное отличие от авторизации пользователя — права принадлежат приложению. Хотя, на практике в большинстве случаев права приложений строго равны правам, создавших их пользователей👉 Для варианта
client credentials grant
в go-swagger есть специальный flow: application (совершенно неочевидное название). Из обязательных полей только tokenURL
, который может быть в свою очередь в этом же API:securityDefinitions:
OauthSecurity:
type: oauth2
flow: applicatiom
tokenUrl: '/token'
scopes:
admin: Admin scope
user: User scope
☝️ Главное не забыть у
/token
, если он локальный, указать авторизацию Basic
: paths:
/token:
post:
security:
- Basic: []
и добавить в
securityDefinitions
:securityDefinitions:
Basic:
type: basic
👍 Flow полностью соответствует RFC 6749. Встроенный в go-swagger Swagger-UI умеет этот flow авторизовать. Он запрашивает
client_id
и client_secret
, и scope
у пользователя. Пару client_id
и client_secret
он сам превращает в заголовок Authorization: Basic xxxx...
(как и положено по RFC). Он сам получает access_token
по ссылке tokenURL
, которую он распознаёт, и потом с этим токеном работает в API через заголовок Authorization: Bearer xxxx...
‼️ Обратите внимание, что go-swagger не учитывает формата выдаваемого токена — он может быть любым. Поле
scope
в блоке security
носит справочную информацию и передаётся в функцию обработки авторизации для справки. Опознания JWT, его разбора и сравнения scope
не происходит/user:
post:
security:
- JWT:
- "user:create"
Forwarded from How to Go wrong (Alexey Palazhchenko)
Tailscale портировали на Plan 9, попутно пофиксив и Go, и сам Plan 9: https://tailscale.com/blog/plan9-port
Tailscale
Securely connect to anything on the internet with Tailscale. Built on WireGuard®️, Tailscale enables you to make finely configurable connections, secured end-to-end according to zero trust principles, between any resources on any infrastructure.
This media is not supported in your browser
VIEW IN TELEGRAM
🥃 Видимо я переделаю это не раньше второго пришествия. Вдруг кому понадобится. Или я когда-нибудь переведу на английский/литовский и актуализирую. pdf первым каментом