Сегодня со мной случилось забавное и неожиданное открытие.
Приняли мой pr в дев ветку, я предварительно проверил всё, в докере билд проходил.
Из дева автоматически билдится новый образ в dockerhub.
В итоге захожу на докерхаб и статус моего билда - Failed.
Немного порылся и выяснилось, что если ты кладешь в репо файл с окончанием test.yaml - запускаются автотесты на этот контейнер.
Так я и узнал, что докерхаб умеет в автотесты.
Вот дока: https://docs.docker.com/docker-hub/builds/automated-testing/
Приняли мой pr в дев ветку, я предварительно проверил всё, в докере билд проходил.
Из дева автоматически билдится новый образ в dockerhub.
В итоге захожу на докерхаб и статус моего билда - Failed.
Немного порылся и выяснилось, что если ты кладешь в репо файл с окончанием test.yaml - запускаются автотесты на этот контейнер.
Так я и узнал, что докерхаб умеет в автотесты.
Вот дока: https://docs.docker.com/docker-hub/builds/automated-testing/
Docker Documentation
Automated repository tests
Automated tests
Интересная статья об обработке нескольких ошибок в го. И, кстати, да, я решил вернуться. Сейчас работаю на удаленке, поэтому времени на написание постов будет побольше.
https://medium.com/a-journey-with-go/go-multiple-errors-management-a67477628cf1
https://medium.com/a-journey-with-go/go-multiple-errors-management-a67477628cf1
Medium
Go: Multiple Errors Management
Error management in Go is always prone to debate and a recurrent topic in the annual survey about the biggest challenges developers are…
Во многих источниках по concurrency в go видел рекомендацию о том, что одна горутина не должна принимать из канала и одновременно писать в него.
Раньше не понимал почему, вплоть до момента, пока не столкнулся с последствиями такого решения в проде (автором того куска кода был не я).
В моём примере был локальный буфер для кликхауса, который собирал определенное количество строчек и потом делал bulk в сам кх.
Так вот, эти строки он получал из канала, складывал в массив. Потом по сигналу от тикера делал запись. В случае, если запись была неудачной - засовывал всё из массива обратно в канал. Размер канала 2000, одновременно с тем, как записи возвращались обратно в канал, они так же поступали в него из других горутин.
При этом, горутина, которая должна была читать что-то из канала была заблокирована и канал переполнялся и получался deadlock.
Вывод: одна горутина не должна одновременно читать и записывать в канал, получится deadlock. Нужно либо создавать другой, резервный канал для записи из этой горутины, либо запускать внутри этой горутины еще одну, которая будет записывать.
Раньше не понимал почему, вплоть до момента, пока не столкнулся с последствиями такого решения в проде (автором того куска кода был не я).
В моём примере был локальный буфер для кликхауса, который собирал определенное количество строчек и потом делал bulk в сам кх.
Так вот, эти строки он получал из канала, складывал в массив. Потом по сигналу от тикера делал запись. В случае, если запись была неудачной - засовывал всё из массива обратно в канал. Размер канала 2000, одновременно с тем, как записи возвращались обратно в канал, они так же поступали в него из других горутин.
При этом, горутина, которая должна была читать что-то из канала была заблокирована и канал переполнялся и получался deadlock.
Вывод: одна горутина не должна одновременно читать и записывать в канал, получится deadlock. Нужно либо создавать другой, резервный канал для записи из этой горутины, либо запускать внутри этой горутины еще одну, которая будет записывать.
Я тут за пару часов написал маппер из map[string]interface{} в объекты.
Написал пару тестов, вроде всё работает, но нужно еще тестить и оптимизировать.
Там куча рефлекта и скорее всего, читать это неудобно. Потом отрефакторю, но это не точно.
Критика важна и приветствуется!
https://github.com/Koshqua/structmap
Написал пару тестов, вроде всё работает, но нужно еще тестить и оптимизировать.
Там куча рефлекта и скорее всего, читать это неудобно. Потом отрефакторю, но это не точно.
Критика важна и приветствуется!
https://github.com/Koshqua/structmap
GitHub
Koshqua/structmap
Structmap is a lighweight and easy to use tool to map structs fields to maps keys. - Koshqua/structmap
Нашел прикольную штуковину, которая умеет из toml файлов с заданными примерами того, какие значения может иметь структура собирать тип в Go. Это круто, по-моему.
https://xuri.me/toml-to-go/
https://xuri.me/toml-to-go/
xuri.me
TOML-to-Go
Convert TOML to Go instantly
У нас на работе есть небольшая библиотека, там много разных книг и некоторые из них о Go. Давно хотел что-то оттуда взять и наконец дошли руки. Взял почитать "The way to Go" Ivo Balbaert.
В книге есть хорошее введение в язык с объяснением истории и идеи создания. Для меня читать это - уже немного поздно, было бы круто найти эту книгу, когда я только начинал учить Go.
Но, что меня действительно заинтересовало, так это раздел о concurrency.
Только начал читать и наткнулся на прикольную штуку, которая лежала прямо в stdlib. А именно, функцию runtime.Gosched().
Если вкратце, эта функция "освобождает" процессор, на котором выполняется текущая горутина и "передаёт" ресурсы другой горутине, чтобы та тоже могла выполниться. Нашел хороший тред на StackOverflow с детальным объяснением того, как это работает. Не уверен, что это можно применить в production приложениях, но штуковина точно интересная. И, самое забавное, она уже давно была у меня на виду, но как-то не обращал на неё внимания.
https://stackoverflow.com/questions/13107958/what-exactly-does-runtime-gosched-do/13108469
В книге есть хорошее введение в язык с объяснением истории и идеи создания. Для меня читать это - уже немного поздно, было бы круто найти эту книгу, когда я только начинал учить Go.
Но, что меня действительно заинтересовало, так это раздел о concurrency.
Только начал читать и наткнулся на прикольную штуку, которая лежала прямо в stdlib. А именно, функцию runtime.Gosched().
Если вкратце, эта функция "освобождает" процессор, на котором выполняется текущая горутина и "передаёт" ресурсы другой горутине, чтобы та тоже могла выполниться. Нашел хороший тред на StackOverflow с детальным объяснением того, как это работает. Не уверен, что это можно применить в production приложениях, но штуковина точно интересная. И, самое забавное, она уже давно была у меня на виду, но как-то не обращал на неё внимания.
https://stackoverflow.com/questions/13107958/what-exactly-does-runtime-gosched-do/13108469
Stack Overflow
What exactly does runtime.Gosched do?
In a version prior to the release of go 1.5 of the Tour of Go website, there's a piece of code that looks like this.
package main
import (
"fmt"
"runtime"
)
func say(s string) {
for ...
package main
import (
"fmt"
"runtime"
)
func say(s string) {
for ...
На днях получил задачу написать сервис для подсчета некоторой статы из стороннего апи.
И так исторически сложилось, что всё, что считает статистику у нас на NodeJS.
В итоге, пишу сервис на ноде и, сказать честно, мне понравился js.
Особенно понравилось то, как работает асинхронность, всё очень просто и понятно.
Некоторый опыт с нодой был до этого, т.к я с неё начинал, но это было давно, поэтому есть ощущение, будто учу язык с нуля и это правда захватывающе.
Могу сделать вывод, что иногда интересно переключаться на другие технологии.
Особенно круто, что нельзя, например, написать код на js'е так же, как я написал бы его на go, поэтому приходится больше думать о структуре и периодически подглядывать в доки. Сервис пока не дописал, но уже на полпути, чувствую, что буду очень доволен, когда закончу эту таску.
И так исторически сложилось, что всё, что считает статистику у нас на NodeJS.
В итоге, пишу сервис на ноде и, сказать честно, мне понравился js.
Особенно понравилось то, как работает асинхронность, всё очень просто и понятно.
Некоторый опыт с нодой был до этого, т.к я с неё начинал, но это было давно, поэтому есть ощущение, будто учу язык с нуля и это правда захватывающе.
Могу сделать вывод, что иногда интересно переключаться на другие технологии.
Особенно круто, что нельзя, например, написать код на js'е так же, как я написал бы его на go, поэтому приходится больше думать о структуре и периодически подглядывать в доки. Сервис пока не дописал, но уже на полпути, чувствую, что буду очень доволен, когда закончу эту таску.
Сегодня написал свою первую аггрегацию в Mongo.
Может показаться, что в этом нет ничего особенного.
Но дело в том, что у меня на собеседовании спросили о них и я не смог ответить, потом заморачивался, разбирался с ними.
И вот, спустя восемь месяцев как я тут работаю у меня появилась таска, в которой я применил эти знания.
Переполняет гордость и чувство, будто всё было не зря 😂
Может показаться, что в этом нет ничего особенного.
Но дело в том, что у меня на собеседовании спросили о них и я не смог ответить, потом заморачивался, разбирался с ними.
И вот, спустя восемь месяцев как я тут работаю у меня появилась таска, в которой я применил эти знания.
Переполняет гордость и чувство, будто всё было не зря 😂
Forwarded from 🦖 Айти Тудэй 🦥
Тензорный петух на этой картинке не просто так, вам просто необходимо послушать подкаст!
Статья - красивый трибьют Mozilla с рассказом об истории, основных достижениях компании на этапах раннего интернета и в наши дни.
Тут так же есть рассказ о том, почему компания сейчас ушла(уходит) на дно.
Достаточно грустно, на самом деле. Я сам пользуюсь Firefox Developer Edition и первые попытки в вебе у меня начинались именно с MDN.
https://link.medium.com/92k1NdsNwbb
Тут так же есть рассказ о том, почему компания сейчас ушла(уходит) на дно.
Достаточно грустно, на самом деле. Я сам пользуюсь Firefox Developer Edition и первые попытки в вебе у меня начинались именно с MDN.
https://link.medium.com/92k1NdsNwbb
Medium
Mozilla: The Greatest Tech Company Left Behind
How could an organization that had its hand in so many world-changing technologies fail to thrive?
Кстати, касаемо предыдущего поста и англоязычного контента в целом.
Я часто нахожу контент на английском и иногда у меня появляется желание перевести что-то действительно крутое для того, чтоб больше людей могли это прочитать.
Что думаете, если я буду находить хороший контент на англоязычных ресурсах и выкладывать его здесь для вас на русском? Было бы такое интересно ?
Я часто нахожу контент на английском и иногда у меня появляется желание перевести что-то действительно крутое для того, чтоб больше людей могли это прочитать.
Что думаете, если я буду находить хороший контент на англоязычных ресурсах и выкладывать его здесь для вас на русском? Было бы такое интересно ?
Нужны переводы ?
Anonymous Poll
46%
Да, было бы круто.
37%
Круто, но всё и так понятно на английском.
10%
Не стоит этим заниматься.
7%
Я Игорь.