myStack
الذهاب إلى القناة على Telegram
Меня зовут Ростислав и я разработчик. Это мой личный блог. Я пишу на Go, читаю книги про технологии и пишу об этих и других вещах сюда. Книги: https://bit.ly/rostislav-books Личка: https://t.me/Rostislaved Сайт: Rostislav.me
إظهار المزيد877
المشتركون
-324 ساعات
-47 أيام
-730 أيام
أرشيف المشاركات
877
Где искать электронные книги
http://flibusta.is
в основном художка (fb2, epub)
http://libgen.is
все книги (pdf, иногда epub). 90% книг можно найти тут
https://www.twirpx.com
иногда тут бывает то, чего нет на либгене
https://annas-archive.org/
тут также может быть то, чего нет на либгене
Если предыдущие ссылки не помогли, то с вероятностью 0.99 книгу найти не получится, но еще источники можно поискать тут:
https://www.reddit.com/r/Piracy/wiki/megathread/books/
ну и не забываем про гугл
877
Чистая архитектура. Как изучать.
Чтобы полностью погрузиться надо писать код и читать книги. Код писать надо для того, чтобы информация из книг не была пустым звуком и какие-то самые популярные паттерны были уже знакомы. То есть хотя бы что-то в голове представлять, когда говорят слова:
репозиторий, контроллер, сервис, энтити.
Не обязательно правильно их понимать, ибо там и путаницы много и не все сейчас используются в том виде, в котором изначально были придуманы, но что-то представлять надо.
А книги вот такие. В порядке чтения.
1. Robert Martin - Clean Code
2. Robert Martin - Agile Software Development
3. Robert Martin - Clean Architecture
Пояснения:
1. Чистый код
Основа. Там не так много самой архитектуры, но базовые идеи есть, а также совсем немного про SOLID. Эта книга просто полезна сама по себе, а также может служить хорошим показателем будут ли следующие книги пониматься или нет. То есть, если чистый код понимаешь, то читай дальше.
2. Agile Software Development
Про эту мало кто знает, но она чуть ли не самая важная из всех трех. Именно тут описан SOLID.
3. Чистая архитектура
Тут сама идея чистой архитектуры. Многие начинают читать сразу ее и полагаю, что мало что понимают. Ну или понимают, но без предыдущей книги не так, как могли бы.
Достаточно ли этих трех книг? Если смог их понять полностью, то, наверное, да. Но понять их полностью непросто, если нет опыта и понимания ООП.
Также, кроме книг надо ознакомиться со статьей Мартина и его докладом.
Если читать книги нет времени, то именно статья и доклад - это необходимый минимум.
Другие материалы в интернете
В интернете миллионы статей, видео и репозиториев на гитхабе, которые или содержат в названии словосочетание "чистая архитектура", или подразумевают, что именно о ней расказывают. Огромное количество этих материалов содержат ошибки и часто критические. Их сложно распознать, если сам изучал тему не по оригиналу, а по другим статьям, поэтому путь чтения книг скорее всего самый эффективный для достижения цели.
877
Что происходит, когда вводишь URL и нажимаешь Enter (высокий уровень)
Без CDN:
- Когда пользователь вводит URL в браузер, браузер делает запрос к DNS-серверу, чтобы получить IP-адрес сервера, связанного с этим URL.
- После того как браузер получил IP-адрес от DNS, он делает запрос к серверу. Этот сервер — nginx, который может либо отдать статический контент браузеру, либо перенаправить запрос на сервер бекенда для получения динамического контента.
- Статический контент — неизменяемые файлы (html, css, javascript) — фронтенд.
- Динамический контент — контент, генерируемый динамически на бекенде.
- Браузер, после получения статического контента, взаимодействует с ним. Этот статический контент может с помощью JavaScript-кода отправить запрос для получения дополнительной информации.
- Этот запрос также придет в nginx, а он перенаправит его на сервер бекенда. Сервер бекенда отдаст нужные данные nginx, а он отдаст их браузеру.
С CDN:
- Когда пользователь вводит URL в браузер, браузер делает запрос к DNS-серверу, чтобы получить IP-адрес сервера, связанного с этим URL.
- Если веб-сервис настроен на использование CDN, записи DNS будут указывать на серверы CDN, а не на оригинальный сервер (nginx).
- После того как браузер получил IP-адрес от DNS, он делает запрос к серверу CDN.
- CDN проверяет, есть ли запрошенные файлы (статические) в кэше. Если файлы есть в кэше, CDN возвращает их в браузер. Если файлы отсутствуют или кэш устарел, CDN делает запрос к оригинальному серверу (nginx) за свежими копиями файлов.
- Сервер (nginx) возвращает запрошенные файлы CDN, который в свою очередь кэширует их и отправляет браузеру.
- После загрузки статического контента, уже сам JavaScript-код на клиенте может делать запросы к серверу. Эти запросы могут быть направлены на CDN (если CDN настроен на кэширование динамического контента или API-ответов) или напрямую на сервер (nginx), в зависимости от конфигурации.
877
Немного обновил табличку. Добавил соотношение DAU/MAU.
DAU - число пользователей, которые заходят каждый день (среднее)
MAU - число пользователей, которые заходят хотя бы раз в месяц
| Name | DAU | MAU | DAU/MAU |
| ----------- | ------ | ----- | ------- |
| Spotify | | 574 m | |
| Apple Music | | 100 m | |
| Deezer | | 16 m | |
| Youtube | 368 m | 2.7 b | 14% |
| Vimeo | | 300 m | |
| Netflix | 100 m | 250 m | 40% |
| Twitch | 30 m | 140 m | 21% |
| TikTok | 780 m | 1.7 b | 45% |
| Twitter | 240 m | 550 m | 40% |
| Tinder | | 75 m | |
| Whatsup | 400 m | 2.7 b | 15% |
| Telegram | 200 m | 800 m | 25% |
| Facebook | 2 b | 3 b | 66% |
| VK | 60 m | 100 m | 60% |
| Instagram | 1.25 b | 2.5 b | 50% |
| Uber | | 131 m | |
Вывод: DAU/MAU ~= 20% - 50%.
То есть в среднем примерно DAU = MAU/3
P.S. в ютуб как-то слабо верится. Но т.к. числа не очень достоверные, то возможна ошибка. Ну а может действительно так и есть877
Найден убийца pastebin'а. Сервис делает картинку - фотку монитора, где в IDE открыт ваш код.
https://code.xxut.ru/
ref
877
Сделал пару запросов в интернеты и собрал в табличку MAU (Monthly Active Users) различных популярных сервисов
| Name | MAU |
| ----------- | ----- |
| Spotify | 574 m |
| Apple Music | 100 m |
| Deezer | 12 m |
| Youtube | 2.5 b |
| Vimeo | 300 m |
| Netflix | 250 m |
| TikTok | 1.1 b |
| Twitter | 320 m |
| Tinder | 75 m |
| Whatsapp | 2 b |
| Telegram | 800 m |
| Facebook | 3 b |
| VK | 100 m |
| Instagram | 2.5 b |
| Uber | 131 m |
и отсортированная:
| Name | MAU |
| ----------- | ----- |
| Facebook | 3 b |
| Instagram | 2.5 b |
| Youtube | 2.5 b |
| Whatsapp | 2 b |
| TikTok | 1.1 b |
| Telegram | 800 m |
| Spotify | 574 m |
| Twitter | 320 m |
| Vimeo | 300 m |
| Netflix | 250 m |
| Uber | 131 m |
| Apple Music | 100 m |
| VK | 100 m |
| Tinder | 75 m |
| Deezer | 12 m |877
Внутренности типов в Go. Либа
https://github.com/rostislaved/go-types-internals
В Go типы данных имеют свое представление в рантайме в виде структур. Например, слайс - это структура, мапа - структура. Чтобы иметь доступ к полям этих структур нужно использовать пакет unsafe. Я когда копался во внутренностях мапы написал код, который это упрощает. Не то чтобы это получилась полноценная либа, но я решил выложить, чтобы не потерялось. Удобно, если надо посмотреть, что внутри.
877
Платное ПО
Если читать старые (2003 год - старая, даже 2011 - старая) книги по разработке ПО, то можно видеть, как поменялась индустрия по отношению к софту. Раньше было нормой покупать приложения или его части, а сейчас везде опен-сорс
877
Передача файлов между разными компьютерами
Нашел крутую штуку - croc
https://github.com/schollz/croc
Супер простая и удобная в использовании:
> croc video.mp4 Did you mean to send 'video.mp4'? (Y/n) Sending 'video.mp4' (1.4 GB) Code is: 8448-xray-valid-slow On the other computer run croc 8448-xray-valid-slowСкорость - максимальная
877
Я зачем-то поднял демоны Prometheus + NodeExporter + Grafana на ноуте, чтобы смотреть за температурой ЦПУ несколько дней, перед тем, как почищу его и заменю термопасту 🏥
(По центру - это я фильм в 4к запустил)
877
Decoupling is an essential tool to enable the management of change
- Gregor Hohpe, Bobby Woolf - Enterprise Integration Patterns
877
Чтобы написать в чат в WhatsApp не добавляя номер в контакты можно сделать так:
wa.me/79167772424877
Если кого интересует какую структуру проекта можно себе взять на вооружения для Go приложений, то вот она.
Не называю ее завершенной или идеальной, но как минимум лучше 90% того, что вижу в интернетах
. ├── CHANGELOG.md ├── config.toml ├── deploy ├── go.mod ├── go.sum ├── internal │ ├── app │ │ ├── adapters │ │ │ ├── primary │ │ │ │ ├── grpc-adapter │ │ │ │ ├── http-adapter │ │ │ │ ├── kafka-adapter-subscriber │ │ │ │ ├── nats-adapter-subscriber │ │ │ └── secondary │ │ │ ├── grpc-adapter │ │ │ ├── kafka-adapter-publisher │ │ │ ├── nats-adapter-publisher │ │ │ ├── gateways │ │ │ └── repositories │ │ ├── application │ │ │ └── service │ │ └── domain │ │ └── order │ │ └── order.go │ └── pkg │ ├── config │ ├── logger │ ├── prometheus │ └── tech ├── main.go └── README.md
877
HTTP Версии
HTTP/1 - каждый запрос - это отдельное TCP соединение
HTTP/1.1 - Добавили Keep Alive. Несколько запросов могут проходить в одном TCP соединении.
HTTP/2
1. Бинарный протокол
2. Сжатие заголовков
3. Добавили HTTP Streams - позволяют внутри одного TCP соединения делать параллельные запросы, порядок неважен.
4. Добавили возможность Push'ей для сервера.
HTTP/3
1. Использует не TCP, а QUIC. QUIC основан на UDP.
