Pull to refresh
17
0
Foxcool @Foxcool

Архитектор ПО

Send message

Вспоминаю, как порой геморройно пирогами что-то связанное с кафкой после длительного перерыва. И все может казаться всратым и не удобным. И вот иметь подобные туториалы в обсидиан может быть полезным. Спасибо!

Ага, так может быть удобнее

раньше использовал вайпер с коброй. Но там вот реально надо было вроде отдельный init файл делать, директории с подкомандами и прочим. Т.е. уже решения для прям сложных гуевых приложений, в которых есть команды приложения и их собственные параметры и т.д.

Я как раз люблю собирать параметры в какие-то структуры и потом ее использовать, не дергая какой-то объект за методы. Вот пример моего config.go текущего пет-проекта. Т.е. весь боилерплэйт умещается в одном файлике, который кладется рядом с main.go в папку cmd. А в main уже параметры читаются из структуры.

package main

import (
	"fmt"
	"os"
	"strings"

	"github.com/knadh/koanf"
	"github.com/knadh/koanf/parsers/json"
	"github.com/knadh/koanf/parsers/toml"
	"github.com/knadh/koanf/parsers/yaml"
	"github.com/knadh/koanf/providers/confmap"
	"github.com/knadh/koanf/providers/env"
	"github.com/knadh/koanf/providers/file"
	"github.com/spf13/pflag"
)

// Config is application config struct
type Config struct {
	Logger struct {
		Level string `koanf:"level"`
	} `koanf:"logger"`
	Sentry struct {
		DSN              string  `koanf:"dsn"`
		TracesSampleRate float64 `koanf:"tracesSampleRate"`
	} `koanf:"sentry"`
	DB struct {
		URL string `koanf:"url"`
	}
	GRPC struct {
		Port int `koanf:"port"`
	}
	Services []ServiceConfig `koanf:"services"`
}

// ServiceConfig is a config for a service
type ServiceConfig struct {
	Type       string            `koanf:"type"`
	Parameters map[string]string `koanf:"parameters"`
}

const (
	ServiceConfigTypeAsset     = "asset"
	ServiceConfigTypeUser      = "user"
	ServiceConfigTypePrice     = "price"
	ServiceConfigTypePortfolio = "portfolio"
	ServiceConfigTypeTrade     = "trade"
)

func getConfig() (*Config, error) {
	var err error
	k := koanf.New(".")

	// Default values

	defaults := map[string]interface{}{
		"sentry.tracesSampleRate": 1.0,
	}
	err = k.Load(confmap.Provider(defaults, "."), nil)
	if err != nil {
		return nil, fmt.Errorf("can't load default config parameters: %w", err)
	}

	// Load command line and configs

	f := pflag.NewFlagSet("config", pflag.ContinueOnError)
	f.Usage = func() {
		fmt.Println(f.FlagUsages())
		os.Exit(0)
	}
	f.String("c", "", "Path to config file")
	err = f.Parse(os.Args[1:])
	if err != nil {
		return nil, fmt.Errorf("can't parse command line arguments: %w", err)
	}

	// Load the config files provided in the commandline.
	cFile, _ := f.GetString("c")
	switch {
	case strings.HasSuffix(cFile, "toml"):
		if err := k.Load(file.Provider(cFile), toml.Parser()); err != nil {
			return nil, fmt.Errorf("error loading file: %w", err)
		}
	case strings.HasSuffix(cFile, "yaml"):
		if err := k.Load(file.Provider(cFile), yaml.Parser()); err != nil {
			return nil, fmt.Errorf("error loading file: %w", err)
		}
	case strings.HasSuffix(cFile, "json"):
		if err := k.Load(file.Provider(cFile), json.Parser()); err != nil {
			return nil, fmt.Errorf("error loading file: %w", err)
		}
	}

	// Load ENV

	err = k.Load(env.Provider(ServiceName+"_", ".", func(s string) string {
		return strings.ReplaceAll(strings.ToLower(
			strings.TrimPrefix(s, ServiceName+"_")), "_", ".")
	}), nil)
	if err != nil {
		return nil, fmt.Errorf("can't load env variables: %w", err)
	}

	// Unmarshal configs to struct
	var config Config
	err = k.Unmarshal("", &config)
	if err != nil {
		return nil, fmt.Errorf("can't unmarshal config: %w", err)
	}

	return &config, nil
}

Тут еще от нехер делать засунуты томл, json. ОБычно все запускаю в ENV так как с компоуза удобнее. Так что можно еще сократить, но накладные расходы на поддержку парсинга конфигов вряд ли фатальны.

Есть ещё koanf, у которого можно из желаемых источников собирать параметры в структуру

Плохой тимлид начинается с идеи, что он является каким-то начальником.

Недавно открыл для себя mermaid как доступный способ кодом "рисовать" диаграммы. Поддерживаются различные виды, в том числе в бете поддреживаются С4 диаграммы. Автоматически рендерится в схемы на гитлабе, обсидиане. В вскод тоже работает, как минимум с установкой расширения (точно не помню). Т.е. можно без каких-либо отдельных инструментов вести ту же документацию сразу в гит-репозиториях в маркдауне и при этом не надо тащить картинками схемы - все изменения будут фиксироваться, как и изменения другого текста.

Статья хорошая.

Добавлю только, что офисная работа и вообще работа на территории работодателя - это не какой-то артефакт из глубины веков. До эпохи индустриализации люди обычно работали примерно там же, где и жили. Да, сама по себе жизнь человека, вынужденного работать для выживания, не была лучше, но сам факт разделения места жизни и места работы начался с необходимости, а продолжился тупым масштабированием дурных практик, приведших к сверхцентрализации ресурсов и другим проблемам вроде маятниковой миграции.

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

Но такие же можно и сказать про другие "руководящие" роли. Нередко продукт менеджеров нанимают, а потом ожидают выполнения от них скорее функций сержантов, которые пушат разрабов на овертаймы и завершение тасок любой ценой.

В конечном итоге все равно приходишь к мысли, что самое лучшее: когда свой проектик или какой-то движ, людей на найм не надо - либо под конкретные задачи самозанятые, либо уже партнёры нормальные. Не нужно городить огромные вертикальные структуры и вот это все. Но таким образом много ниш отрежешь.

Вообще, в Go можно уйти от возврата ошибок в сторону того же отправления всех ошибок в специальный канал.

Однако, предвижу тонны проблем с дебаггингом, так как в стектрейсах и сентри, скорее всего точка отстрела ошибки будет в той гороутине, которая тащит и как-то "обрабатывает" ошибки из канала. Т.е. могут возникнуть трудности с определением места возникновения ошибки.

Мы уже живём не в нулевых и даже не в десятых. Мир опенсорса давно переживает попытки сделать монетизируемой работу активистов. На данный момент для меня наиболее живой и активный проект - gitcoin на базе эфириума, где периодически даже я кидаю какие-то деньги на гранты проектам

А потом оказалось, что активные донатеры иногда получают эирдропы денежные от других взлетевших проектов. То есть чтобы помогать опенсорсу и распределенным индивидуалистическим решениям даже не обязательно быть идеальным и щедрым.

В опесорсе есть много проектов, которые сами по себе плохо монетизируемые из-за их важных качеств. Вряд-ли вы сможете тупо продавать ядро Линукс или такой же корджс. Но при этом деньги могут ходить через полноценные продукты, частью которого является такой софт.

Вообще, ожидать от масс субъектности и какой-то запредельной просвещенности as is - несколько инфантильно. Средний человек по максимуму не будет вникать в проблемы каких-то проф инструментов и их разработчиков. Для этого работают отдельные специалисты и целые некоммерческие орг.

Но даже многие os задроты не ходят понимать социальные и экономические механизмы общества, а к попыткам развития всяких криптоинститутов относятся примерно так же, как циничные деды из мира юриспруденции и банкинга - ниазлетит/нидадут/детскиезабввы/пузырь. В эпохи санкций глупо

Именно поэтому в свободных проектах тоже нужны не только колеры, но и всякие продуктологи, экономисты и т.д. То есть люди, которые не только про код и технологии, но и про не менее важное: рынки, боли, и т.п. Опрометчиво надеяться, что левоанархических идеалов достаточно.

У федерации, конечно, есть и существенные минусы, схожие с минусами централизованных - привязка к конкретному серверу.

https://t.me/darkfox_info/52

Но в матрикс вроде это понимали, и заявляли несколько лет назад о движении в сторону полностью распределенной архитектуры. Вообще, самое важное тут - отвязать айдентити. Т.е. чтобы ваш адрес в сети не был прибит к серверу, который может перестать существовать или "скурвится". Иначе это ведет к потере контактов, а не только логов общения.

Сколько лет интересуюсь темой и зарабатываю в крипте, каждый раз, когда что-то не получается, вылезают желчные душные "консерваторы" (скорее смахивающие на реакционеров), которые не сдерживая слюны радуются тому, что какие-то попытки что-то интересное построить заканчиваются неудачей.

Мне, конечно, сильно повезло, т.к. я туда не вкладывался. Но принцип примерно такой.

Есть стэйблкоины с доверием, типа USDT. их основная проблема - доверие. Там, где есть доверие, там не обойтись без регулятора или периодичесих экзит скамов (своровали и свалили в закат).

Есть стэйблкоины на данный момент самые надежные и работающие в разных условиях типа DAI. Принцип такой, что ручного управления нет или почти нет, все обеспечивается автоматических контрактом. Чтобы впустить "доллар" надо избыточно его обеспечить чем-то другим. Сначала в даи обеспчение было только с помощью эфира. На каком-то очередном обвале крипты после очережного кратного роста, когда все хоронили всю индустрию в пятидесятый раз, валюта выдержала. Да, было много ликвидаций залогов и обесценивания гаверненс токена, но даи жив и работает до сих пор. Потом оин добавили возможность обеспечивать его другими токенами. Таким образом ДАИ стал обеспечен не только эфиром, но и битком, и даже другими стэйблами (USDC сейчас доминирует, что вызвало напряжение у людей и стремление это сбалансировать). В общем пока самый рекомендуемый вариант.


Другая тема - алгоримические стэйблкоины. Если поверхностно вникнуть в идеи монетаризма современного, можно узнать, что доллары как бы рисуются кредитами через неполное обеспечение в банках. Т.е. центробанк дает распоряжение, что вот у нас растущая экономика и нужны деньги в системе - можете выдавать кредитов в нац валюте больше, чем у вас реально на депозитах лежит. Регулируется это через требования к обеспеченияю (сколько процентов от кредитов должно быть зарезервировано на своих кошелках) и процентной ставкой. Но тут я уже лезу не совсем в свою тему, потому могу ошибаться. Сильно не бейте. В любом случае, эта конструкция не выглядит менее хлипкой, чем те же алгоримические стэйблкоины с неполным обеспечением. Современные экономисты даже скажут, что для развития экономики мировой и роста ВВП деньги должны так эмитироваться по требованию. А в случае кризисов, центробанки с кожаными людьми внутри регулируют и спасают систему.

https://www.youtube.com/watch?v=tiWlTpz7P6k

https://www.youtube.com/watch?v=aEjMcfeA6Bg

Ну и в целом рекомендую канал экономиста по теме.

То есть, сама идея реализовать неполное обеспечение и поддержку курса алгоритмическими методами - неплоха и уж точно не является новой. Просто ПОКА не получается. Возможно и никогда не получится, а эмиссия стэйблов с избыточным обеспечением останется самым надежным вариантом. В остальной крипте тоже первое ДАО на эфире было взломано. До этого каждый обвал биткоина сопровождался похоронами всех либертарианских идей и улюлюканьем патерналистов, что вот она ваша свобода к чему приводит. Но текущие проблемы "традиционной банковской системы", когда карточки заграницей становятся бесполезным пластиком, доллары не дают обналичить или перевести в нужном объеме, курс становится "тройным" (официальный, реальный в обменниках на улице, реальный курс стэйблкоинов к рублю), а крипта становится чуть ли не самым безопасным и надежным способом вывести деньги заграницу, показывает, что избыточный консерватизм так же плохо, как и попытки "влошиться во что-то на все кредитные деньги". ETF вон тоже заморозили из-за того, что евроклиринг не проводит транзакции. А ведь это один из самых проверенных и надежных способов инвестирования.


Про стэйблы, какие они бывают видов, подробне хорошее и понятное видео о криптуса https://www.youtube.com/watch?v=4_ugEzAlQ9I

Так-то да, убрать ща из приема всю PoW крипту - и это был бы вин. Эфир бы получил стимул быстрее развивиать вторую версию, а полькадот экосистема бы получила наконец больше заслуженного внимания.

Как же это чем?! Ведь он создан лучшими олимпиадными программистами!

Вообще часто подгорает от того, как люди со своими имперскими замашками не могут видеть, как распределенные решения развиваются, а деньги внутри таких рынков идут мимо их карманов. Надо обязательно выкатить непрозрачный скамчик свой, и своими вполне мощными маркетинговыми силами отжирать пирог у всяких достойных проектов типа полькадота сгораздо более прозрачным гавэрнэнсэм.

Справедливости, у нас в https://t.me/distributed некоторые ребята смотрели на код и говорят, что именно с технической стороны проект и правда интересный. Не какой-нибудь очередной форк эфира с централизацией.

Уехать хочется, а 'релоцироваться' не хочется. Хочется работать на иностранную удаленку или выйти на самообеспечение не через зарплаты. А жить там, где интересно и удобно в данный момент времени. Привязываться жёстко к непонятной стране и тем более ходить по офисам ой как не хочется. Благо визы для фрилансеров и прочие номад штуки появляются.

Даже в трилогии про Энакина и зарождение империи сразу бросается в глаза что-то сратое:
- они забрали пацана. учить не хотели. но решили
- у пацана там мать, и он все время в тревогах и депресняках
- порешать ворпосик, выкупить мамку и дать какую-то безопасность - не, не слышали. Пусть само все течет своим чередом, а чердак у сынка подтекает (:

Аналогично считаю: многие распределенные решения находят своих юзеров. Не обзятально быть прям популярными. Особенно это касается финансовых инструментов и DeFi сейчас. P2P — это как мицелий — живет немного под землей и виден тем, кому надо.

С мессенджерами и социалками основная проблема в сетевом эффекте — ценность повышается с количеством юзеров. И тут неясно, как двигаться. Вообще, я бы решал такие вопросы через выделения IDENTITY: тот же эфириум кошелек — отличный айдентити, который юзается в разных решениях.

А те или иные функциональности могут использовать идентификаторы и конкурировать\кооперировать друг с другом. В каком-то смысле это все путь развития интернета, как стека протоколов. golos.id/p2p/@foxcool/spasenie-interneta

Сообществом distributed.ru не раз писали в sci-hub о том, что было бы круто применить ipfs, но порой получали баны (:


Круто, что технология находит свое применение.

Да, все виджеты можно свободно размещать на панелях и просто на столе очень давно. Вообще, кде — самая крутая в плане сочетается гибкости и просты интерфейсная система. Всё нужное настраивается мышкой, очень гибкая архитектура, позволяющая даже сделать де тайловой, менять радикально внешний вид от взрослого и скучного, до гиково-всратого. Т.е. это такой конструктор, с которым справится и ребенок. Единственный минус — тяжеловесность. Но я всё равно покупаю производительную технику, чтоб не страдать от компромиссов. Да и среды разработки и прочее профессиональное все равно потребует нормальные характеристики компьютера.

1
23 ...

Information

Rating
6,054-th
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity