web mess – Telegram
web mess
130 subscribers
85 photos
1 video
2 files
163 links
go, vim and some other random stuff
appreciate your feedback :)
Download Telegram
Forwarded from Not Boring Tech
Обожаю разные забавные проекты с дообученными GPT-2 из серии чё-то.там_does_not_exist — вот один из них, который совсем недавно дико развирусился в соседних каналах. Эта идея уже старая, её наконец-то превратили в реальность: дообученная GPT-2 на UrbanDictionary.com придумывает слова, их часть речи, падежи, слоги и определения к ним. Если обновить страницу, сгенерируется другое слово. Также можно получить определение слова, которое вы сами придумали. В код лезть я не стал, ибо не сильно разбираюсь, можете сами посмотреть исходники, они тут. А вот сам сайт: http://www.thisworddoesnotexist.com/
Сейчас пишу очень много тестов, в основном - это интеграционные тесты.
То есть, нужно проверить взаимодействие разных частей приложения между собой.
Столкнулся с такой проблемой:
Есть структура, в которой есть дата, мне нужно запушить её в MongoDB и позже проверить правильность данных из Mongo.
Так вот, формат даты в монго не такой же, как в го, монго обрезает миллисекунды, из-за чего, в итоге структуры не одинаковы по DeepEqual.
Я пока что присваиваю ожидаемой структуре дату из полученной и сравниваю.
Конечно же, в контексте тестов этот подход не совсем правильный, т.к вдруг что-то будет не так с датой - тесты этого не проверят.
Кто-то сталкивался с таким, как с этим бороться?
В общем, с датой ничего не решилось, но понял, что с помощью прекрасного go-cmp(адвансед альтернатива DeepEqual), можно исключать поля, которые не желательно проверять. Это мой инсайт номер один.
А второй инсайт - это потрясающий тул go-spew, с помощью которого можно очень красиво логировать структуры для дебага(со значениями, типами и т.д). Так я вспомнил, что нулевое значение слайса - nil, а Mongo, когда она сканирует результат запроса в структру, создаёт пустой слайс, а не nil. Так и получается, что в итоге эти две структуры, которые хранят в себе слайсы - не равны по DeepEqul и cmp.Equal.
Столько боли в этих тестах, столько боли …

А вот и сами тулы:
https://github.com/davecgh/go-spew
https://github.com/google/go-cmp
Forwarded from INTERNET 9000
NOTION ✏️ ТЕПЕРЬ 📎 ПОЛНОСТЬЮ 📌 БЕСПЛАТНЫЙ 📓 ДЛЯ 💪 ЛИЧНОГО 🔗 ИСПОЛЬЗОВАНИЯ

notion.so/personal
Я уже знаю, о том, что есть hub. Но вот что.
Github запустил свою command line утилиту для управления репозитириями.
Приятно, что они решили эту утилиту написать на Go.
Пока что это бета и функционал немного урезан по сравнению с тем, что есть в hub.
В будущем обещают поддержку Github Enterprise Server и больше функционала.
Но, по моему скромному мнению, функционала более чем достаточно, чтобы пользоваться в работе.

https://github.com/cli/cli
Если вкратце, я работаю в компании, сервисы которой тесно связаны с криптовалютой.
И по долгу службы, как бы формально это не звучало, мне нужно знать, как устроен блокчейн и апи разных блокчейн платформ.
В процессе ознакомления я прочитал очень известный документ(Satoshi Nakamoto Paper) - https://bitcoin.org/bitcoin.pdf
Впринципе понял, как это устроено в теории. Но на этом решил не останавливаться, ведь намного лучше всё понимается на практике.
Так вот, в итоге я нашел интересную серию статей на медиуме, в которых показывают как сделать свой простой блокчейн и внедрить имплементации разных алгоритмов(майнинг, proof-of-work и т.д).
Пока что еще не написал его, но совсем скоро - поделюсь репо на гитхабе.

Вот ссылка на первую статью, там внизу ссылки на все остальные из серии.
https://medium.com/@mycoralhealth/code-your-own-blockchain-in-less-than-200-lines-of-go-e296282bcffc
Forwarded from oleg_log (Oleg Kovalov)
Стало интересно собрать статистику по Cloud & SaaS. Кто и что использует на работе или просто для себя. На текущем месте работы, а так же и на прошлом.

Даже если вы с этими вещами не работаете (в силу специализации), но знаете, что есть в вашей фирме используется - попрошу вас ответить :)

Результаты выложу на след неделе, думаю за 3-4 дня будет собрано достаточно ответов. Репост приветствуется, или хотя бы ссылку на опрос киньте покидайте другим.

https://forms.gle/v4wppXeC1thfHJ4J9

Спасибо.
Не решился даже пробовать, но теперь и не буду 🙂
Forwarded from oleg_log (Oleg Kovalov)
Последние 2 или 3 недели решил пожить в Goland (который IDE от JetBrains) и...я так-то не много потерял, когда жил без него.

Конечно рефакторинг по F6 это прикольно, и вот все эти менюшки, но как показывает практика, бОльшая часть времени тратится в простом наборе кода и перепрыгиванию между файлами/определениями.

Что сильно выбешивает, так это время отклика, когда по привычке ставишь {} и быстренько хочешь поставить курсор внутри и нажать Enter, а в итоге проваливаешься на строку ниже, а скобки висят на месте. Да и другие телодвижения чувствуются в натяжку (сейчас в лс набегут со словами, что РАМУ РАМУ НАДО БЫЛО ПОДДАТЬ, но факт такой, mbp15 не дотягивает)(и да, кроме как телеги и хрома с 4 вкладками ничего нет, цпу нулевой).

В итоге с июня возвращаюсь в VSCode 🎉
Интересная статья про монорепо Uber. Здесь приводится много примеров использования Bazel и много интересной статистики.

https://eng.uber.com/go-monorepo-bazel/
И вот, после прочтения статьи сверху мне стало интересно чуть глубже копнуть в тему монорепо, и тут есть статья о том, почему это плохо.

https://link.medium.com/UaYr3uIeV6
Релизнули Go 1.14.4
Там несколько фиксов для пакета os, райнтайма и go doc.
Не знаю, стоит ли писать анонсы для майнор версии, но всё же.

https://twitter.com/golang/status/1267589808529997825?s=20
Небольшая документация о 12-и факторных приложениях. https://12factor.net/
Много где встречал этот термин раньше, но как-то не доходили руки почитать.
А этот материал обещает быть хорошим, т.к написан сооснователем Heroku, Adam Wiggins.
Закончил миграцию с одного пакета на другой, осталось дописать мутации и gql api будет готово, кстати gql - это действительно круто в итоге, не смотря на то, как он мне не нравился изначально.
Forwarded from Komfy 🔐
We completed migrating from graphql-go/graphql to graph-gophers/graphql-go because the original package had a number of issues we couldn't solve. Now the GraphQL API works and further development can continue.
Решил попробовать использовать vim какое-то время.
Очень много разговоров вокруг этого зверюги.
Оказалось, что всё не так сложно и из vim’a есть выход.
Vim очень хорошо документирован, у него есть свой интерактивный(насколько это возможно в окне терминала) туториал, который пошагово объяснянт всю навигацию и функционал.
Решил установить nvim, следуя этому гайду.
Было бы круто услышать от вас о вашем опыте использования vim, если такой есть.

https://octetz.com/docs/2019/2019-04-24-vim-as-a-go-ide/
​​Пока что мой neovim выглядит вот так, после всех этапов из гайда, который я отправил в предыдущем посте.
Дополнительно я установил NERDTree, это файловый браузер.
https://github.com/preservim/nerdtree - NERDTree.
Около месяца искал тул с помощью которого можно найти весь неиспользуемый код.
Казалось, что на проекте его куча и хотелось от него избавиться.
И в итоге долгих поисков я нашел вот этот потрясающий линтер: https://github.com/dominikh/go-tools.
Который не только ищет неиспользуемые методы/поля/структуры/глобальные переменные, но и помогает писать идеоматичный код.
И вообще, делает намного больше, чем встроенный golint. К тому же, у него очень крутая документация.

Вот примеры тех алертов, которые он выдаёт:
Если использовать литералы создание слайсов.
 should use make([]string, 0) instead (S1019)

Если значение переменной после присваивания нигде не используется:
 this value of findCond is never used (SA4006)


И, кстати, по итогу на проекте было не так уж много “мертового” кода, что очень порадовало.
Сегодня расскажу про первоапрельские Request For Comments (пару лет назад я про них уже упоминал). RFC — массив документов, описывающих интернет-протоколы и различные технические вопросы, связанные с их использованием, по сути, основная база стандартов интернета, если слово "стандарт" тут вообще применимо; на данный момент их почти 9 тысяч. Инженеры порой любят пошутить, и время от времени стали появляться первоапрельские RFC (википедия знает уже больше 50).

Самая известная (хотя и не первая) шутка опубликована в 1990 году в RFC 1149 "передача IP-пакетов голубиной почтой". Стандарт указывает, что "пропускная способность ограничена длиной лапки", "broadcasting не поддерживается", "MTU в среднем повышается с возрастом носителя" и другие полезные сведения. Позже стандарт расширялся, например, в RFC 2549 (поддержка QoS) и в RFC 6214 (поддержка IPv6). В 2001 году протокол был практически реализован в Bergen Linux user group, было отослано 9 ping пакетов и получено 4 reply:

--- 10.0.3.1 ping statistics ---
9 packets transmitted, 4 packets received, 55% packet loss
round-trip min/avg/max = 3211900.8/5222806.6/6388671.9 ms

Среди других первоапрельских RFC упомяну RFC 2324+RFC 7168 о "гипертекстовом протоколе по управлению кофейником" (очень похожим на мою старую курсовую), RFC 3251 "электричество поверх IP", RFC 5514 "IPv6 поверх социальных сетей" (позже также реализованная) и RFC 7511 "живописная маршрутизация для IPv6".

В этом году опубликовали RFC 8774 "The Quantum Bug", но я пока не читал. А ещё я когда-то давно рисовал интерактивные "созвездия RFC" — граф взаимного цитирования этих документов. Почитать/посмотреть можно тут.
Весь предыдущий месяц занимался тестами. Ну и совсем немного писал новые фичи и исправлял баги, которые где-то вылазили.
И вот, момент истины, у меня по всем пакетам (почти) test coverage 70-85%, и я ожидаю увидеть хотя бы 60% по всей репо.
В итоге, я как-то это всё неправильно замерил и получил 17%. Очень расстроился, весь день недоумевал, как это вообще может быть.
В итоге вот нашел правильный скрипт для замера tc, ну и отправки показатель в CI системы(если кому нужно) и у меня 62%.
Теперь можно спать спокойно.

Вот тут можно почитать об этом: https://blog.seriesci.com/how-to-measure-code-coverage-in-go/