Не просто форк, мы так же самостоятельно реализуем функционал, который доступен только в Vault EE версии. Так же в нашем roadmap учитываются запросы от наших клиентов, например, сертификация ФСТЭК и шифрование по ГОСТ. Из последнего что мы сделали - встроенный механизм auto unseal кластера Stronghold, репликация KV, автоматические бэкапы по расписанию (файл / S3).
Отличный подход! Спасибо за статью! Надеюсь рано или поздно компании откажутся от лавкодинга в пользу рефакторинга. Когда приходишь на новую работу в первую очередь на тебя вываливают кучу легаси кода и с ним приходится разбираться. А не деревья вертеть как на собесе.
Вот например такой код работает нормально func main() { ctx, done := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM, syscall.SIGKILL) defer done() g, gctx := errgroup.WithContext(ctx)
// just a ticker every 2s
g.Go(func() error {
ticker := time.NewTicker(2 * time.Second)
i := 0
for {
i++
if i > 10 {
return nil
} select {
case <-ticker.C:
fmt.Println("ticker 2s ticked")
case <-gctx.Done():
fmt.Println("closing ticker 2s goroutine")
return gctx.Err()
}
}
}) // just a ticker every 1s
g.Go(func() error {
ticker := time.NewTicker(1 * time.Second)
i := 0
for {
i++
if i > 10 {
return nil
}
select {
case <-ticker.C:
fmt.Println("ticker 1s ticked")
case <-gctx.Done():
fmt.Println("closing ticker 1s goroutine")
return gctx.Err()
}
}
}) // wait for all errgroup goroutines
go func() {
err := g.Wait()
if err != nil {
if errors.Is(err, context.Canceled) {
fmt.Println("context was canceled")
} else {
fmt.Printf("received error: %v\n", err)
}
} else {
fmt.Println("finished clean")
}
}()
time.Sleep(5 * time.Second)
fmt.Println("before done")
done()
fmt.Println("after done")
time.Sleep(1 * time.Second)
}
Спасибо за статью, очень интересная идея! Скажите, а есть возможность развернуть вашу систему на своем железе? Не каждый согласится хранить всю информацию о себе где-то во внешнем хранилище. Тут и вопросы безопасности и отказоустойчивости.
Спасибо за статью! Благодаря вашему циклу публикаций, я тоже построил дома систему резервирования на базе стабилизатора и инвертора от компании MicroArt. Очень радуюсь, что удачно вложил деньги. Спасало и зимой при отключении света на сутки и летом, когда в СНТ либо очень низкое напряжение, либо отключения каждый час.
Не надо так... Пожалуйста, оставайтесь на java и не пишите код на go. Зачем забивать гвозди микроскопом? Потом обычным гошникам очень тяжело будет после вас поддерживать проект, проще будет выкинуть всё и переписать.
Вот вы устраиваете онлайн кодинги, какие-то задачки придумываете. А как это раскрывает потенциал человека? Особенно если у него опыта 10-15 лет и он может спокойно устроиться в другое место, где нет такого маразма на собеседовании. Первый рабочий день нового сотрудника будет состоять совсем не в распарсивании строки на токены или разворачивании двусвязного списка. Вы на него вывалите кучу кода из репозитория, кучу багов и задач из бэклога, с формулировкой - разберись и сделай! Так может стоит так же и собесы проводить? Дайте кусок своего кода или кода с ошибкой, код мз МР джуна. Попросите разобраться и выполнить рефакторинг, объяснить, что код делает, найти в нем ошибки.
Конечно для вас такой подход будет сложней, потому что прийдется думать вместе с кандидатом и погружаться в его мысли и рассуждения. А не просто сверять ответ алгоритмической задачи с литкода. Но если у вас очередь за забором 10 человек на место, то конечно можно и алгоритмическими задачами и онлайн коддингом отсеивать действительно стоящие кадры.
Спасибо за статью!
Хотел бы дополнить, что квадрифилярную антенну можно купить и на территории РФ (правда частота там больше для cubesat подходит) https://radial.ru/catalog/antennas/circularly/vh-436/
Так же кроме приема фото метеоспутников, можно организовать прием телеметрии cubesat.
https://satnogs.org/about/
Спасибо за статью. Подскажите,а почему вы не захотели использоваться MQTT из состава NATS?
Не просто форк, мы так же самостоятельно реализуем функционал, который доступен только в Vault EE версии. Так же в нашем roadmap учитываются запросы от наших клиентов, например, сертификация ФСТЭК и шифрование по ГОСТ.
Из последнего что мы сделали - встроенный механизм auto unseal кластера Stronghold, репликация KV, автоматические бэкапы по расписанию (файл / S3).
Отличный подход! Спасибо за статью! Надеюсь рано или поздно компании откажутся от лавкодинга в пользу рефакторинга.
Когда приходишь на новую работу в первую очередь на тебя вываливают кучу легаси кода и с ним приходится разбираться. А не деревья вертеть как на собесе.
А, теперь понял. Да согласен, это надо учитывать. Спасибо, что подсветил.
А можете привести пример?
Вот например такой код работает нормально
func main() {
ctx, done := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM, syscall.SIGKILL)
defer done()
g, gctx := errgroup.WithContext(ctx)
// just a ticker every 2s g.Go(func() error { ticker := time.NewTicker(2 * time.Second) i := 0 for { i++ if i > 10 { return nil } select { case <-ticker.C: fmt.Println("ticker 2s ticked") case <-gctx.Done(): fmt.Println("closing ticker 2s goroutine") return gctx.Err() } } }) // just a ticker every 1s g.Go(func() error { ticker := time.NewTicker(1 * time.Second) i := 0 for { i++ if i > 10 { return nil } select { case <-ticker.C: fmt.Println("ticker 1s ticked") case <-gctx.Done(): fmt.Println("closing ticker 1s goroutine") return gctx.Err() } } }) // wait for all errgroup goroutines go func() { err := g.Wait() if err != nil { if errors.Is(err, context.Canceled) { fmt.Println("context was canceled") } else { fmt.Printf("received error: %v\n", err) } } else { fmt.Println("finished clean") } }() time.Sleep(5 * time.Second) fmt.Println("before done") done() fmt.Println("after done") time.Sleep(1 * time.Second) }
/
Очень странно, почему вы не использовали синтаксис go для обмена значениями переменных:
first,second = second,first
*
first,*second = *second,*first
, кстати прежде чем разыменовывать указатели, было бы неплохо их на nil проверить.Статья вообще ни о чем.
Спасибо за статью, очень интересная идея! Скажите, а есть возможность развернуть вашу систему на своем железе? Не каждый согласится хранить всю информацию о себе где-то во внешнем хранилище. Тут и вопросы безопасности и отказоустойчивости.
Определение буферов протоколов
Эффективная сериализация с использованием буферов протоколов
Это я так понимаю дословный перевод protobuf с искажением смысла?
Спасибо за статью! Благодаря вашему циклу публикаций, я тоже построил дома систему резервирования на базе стабилизатора и инвертора от компании MicroArt. Очень радуюсь, что удачно вложил деньги. Спасало и зимой при отключении света на сутки и летом, когда в СНТ либо очень низкое напряжение, либо отключения каждый час.
Не надо так... Пожалуйста, оставайтесь на java и не пишите код на go. Зачем забивать гвозди микроскопом? Потом обычным гошникам очень тяжело будет после вас поддерживать проект, проще будет выкинуть всё и переписать.
Спасибо! Ждем продолжения!
А я тебя неть (
Спасибо большое за статью! Ваш пример вдохновляет и дает повод развиваться в профессиональном плане!
А почему вы не смотрите в сторону задач по разбору и поиску ошибок в коде? Это же ближе к практике и тому чем человеку придется на работе за ниматься.
А зачем вы её на английском написали? При этом рекламируете для русскоговорящей аудитории. Было бы правильно делать на 2х языках сразу.
Спасибо, что поделились своим опытом! Наконец-то хоть кто-то признал всю провальность алгоритмических собесов с онлайн коддингом.
Вот вы устраиваете онлайн кодинги, какие-то задачки придумываете. А как это раскрывает потенциал человека? Особенно если у него опыта 10-15 лет и он может спокойно устроиться в другое место, где нет такого маразма на собеседовании.
Первый рабочий день нового сотрудника будет состоять совсем не в распарсивании строки на токены или разворачивании двусвязного списка. Вы на него вывалите кучу кода из репозитория, кучу багов и задач из бэклога, с формулировкой - разберись и сделай!
Так может стоит так же и собесы проводить?
Дайте кусок своего кода или кода с ошибкой, код мз МР джуна. Попросите разобраться и выполнить рефакторинг, объяснить, что код делает, найти в нем ошибки.
Конечно для вас такой подход будет сложней, потому что прийдется думать вместе с кандидатом и погружаться в его мысли и рассуждения. А не просто сверять ответ алгоритмической задачи с литкода.
Но если у вас очередь за забором 10 человек на место, то конечно можно и алгоритмическими задачами и онлайн коддингом отсеивать действительно стоящие кадры.
Спасибо за статью, было интересно прочитать.