TGViewer
Channel Public Channel
S0ER

S0ER

@softwareengineervlog

Архитектура | Программирование | Профессиональное развитие

Соер.Клуб - https://t.me/soer_live

По всем вопросам писать на @soerdev
Subscribers
10.4K
Photos
337
Videos
20
Links
732

Showing posts older than #2240 · Back to latest

Older Posts 19 shown
Post #2238 11.8K

Forwarded from SOERDEV | развитие инженеров-программистов

ACID vs BASE

Вчера в NarisApp разбирали разницу между ACID и BASE транзакциями, что я понял по результату:

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

💡 ORM скрывая часть логики работы с СУБД может не помогать, а мешать правильному восприятию запросов. Например, TypeORM реализуя Soft Delete сама подставляет null вместо удаленного пользователя, что логично, но используя мягкое удаление мы рассчитываем всегда получать данные пользователя, просто с пометкой Delete. Отсюда возникает недопонимание и ошибки.

💡привычка работать с ACID вырабатывает страх "несогласованности" с ним бороться сложнее всего. С этим нужно работать.

💡оркестрация и хореаграфия - это не всегда про микросервисы, оркестратор - это любой внешний "управленец", который решает как обрабатывать транзакцию. Причем это может быть - скрипт, человек, обоработчик события и т.д.
  • 👍 30
  • 🤔 4
  • 🤮 2
  • 🤪 2
  • ❤ 1
Post #2237 10.1K
В субботу планируем поговорить про устройство компилятора, в гостях будет архитектор из PVS-Studio.

Тезисы для разговора:

1) Что вообще делает компилятор (в общих чертах);

2) Парсинг. Как работает, какие разновидности бывают;

3) Неоднозначности в грамматике. Как с ними бороться;

4) Почему мы хотим идти только вперед и никогда не откатываться и почему это нереально;

5) Про плюсы и их "прекрасную" грамматику. Most vexing parse;

6) Как разбираться с ошибками в коде, если нам подсунули некомпилируемое;

7) Семантика и как мы вообще понимаем, что эти слова в коде значат;

8) Перегрузки функций;

9) Шаблоны в плюсах. Почему это круто, но при этом больно;

10) Как считать выражения во время компиляции;

11) Оптимизации;

12) Почему undefined behaviour - не баг, а фича (это про плюсы и сишечку в основном).


Если есть вопросы, задавайте, обозначу их на стриме.

SOER | PRO | Boosty
  • 🔥 70
  • 👍 12
  • ❤ 5
  • ⚡ 1
  • 🤮 1
  • 💯 1
Post #2235 9.21K
У компании Kinescope самая "дружественная" поддержка из всех что я видел.

Сам сервис работает примерно так же - "как только так сразу". Отсюда вопрос, какие варианты для self-hosted видео есть?
  • 😁 84
  • 👍 9
  • 🔥 6
  • 🤡 3
  • 👀 2
  • 🥰 1
  • 🤝 1
Post #2234 10.8K

Forwarded from SOERDEV | развитие инженеров-программистов

Движение малыми шагами: как достичь цели без выгорания

Мне нравится подход, при котором достижение целей происходит не рывками, а постепенно, день за днём. Такой метод позволяет избежать выгорания и сохранить интерес к своему делу.

👑 Вместо того чтобы потратить много сил и времени на обучение один раз, лучше делать это регулярно, понемногу продвигаясь вперёд. Главное — превратить обучение в часть повседневной жизни.

Этот подход напоминает посещение тренажёрного зала: только регулярные и систематические занятия могут привести к желаемому результату.

Пример из жизни

У меня есть стратегическая цель — создать образовательную программу по архитектуре. Я зафиксировал эту цель и разбил её на ряд задач. Затем я начал постепенно двигаться вперёд, развивая несколько направлений:

✅ Создание и развитие платформы (так появилась NarisApp).

✅ Сбор и анализ материалов (так появились конспекты и архитектурные стримы).

✅ Подготовка практических материалов (так появились воркшопы).

В течение трёх лет я спокойно развивал каждое из этих направлений, не забывая фиксировать небольшие шаги, которые нужно сделать, чтобы продвинуться вперёд (так появился календарь активности).

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

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

«Движение малыми шагами» помогает:

🔥Избежать выгорания.

🍀 Сохранить интерес к своему делу.

💲 Достичь цели без рывков.

☕️ Совмещать обучение с личной жизнью и работой.

Этот метод может быть полезен для тех, кто хочет достичь своих целей, но боится выгорания или не знает, с чего начать.
  • 👍 97
  • 🔥 30
  • ❤ 3
  • 💯 3
  • 🤮 2
  • 👌 2
  • ⚡ 1
Post #2232 11K

Forwarded from Иван Черняков. Сразу к делу.

ВНИМАНИЕ ‼️ С этого дня запускаем практику докладов для участников сообщества!

Будем тренировать твои софт навыки выступлений, Лицеист! А в ходе подготовки доклада ещё и углубишься в теме и прокачаешь также хардскилы.

▪️Что для этого нужно?
Просто подготовить тему для выступления и скинуть в предложку (ссылка есть в чате лицеистов)

❗️Пробный вариант запускаем уже в этот четверг (03.10!) в 19:00

Алишер выступит с докладом на тему:
▪️ALONE IN THE DARK или слепое кодирование. Связывание уровня подписки на Boosty с уровнями подписки на образовательной платформе в условиях отсутствия публичного API от boosty.to

Приходи, возьми для себя опыт и записывайся следующим.

Стрим пройдет на ютуб канале
  • 👍 16
  • 🔥 4
  • 💩 1
Post #2231 13.1K
Post #2229 10.1K

Forwarded from SOERDEV | развитие инженеров-программистов

В TypeScript 5.6 появилась более осознаная обработка всегда истинных выражений.

if (/0x[0-9a-f]/) {

}

Здесь забыли .test() после регулярки, но теперь это не проблема.

if (x => 0) {

}

Здесь перепутали >= и стрелочную функцию =>

function isValid(value: string | number, options: any, strictness: "strict" | "loose") { 

if (strictness === "loose") {
value = +value } return value < options.max ?? 100;
}

Здесь будет вот такой порядок: (value < options.max) ?? 100

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

error: This kind of expression is always truthy.
  • 👍 34
  • 🤡 3
  • ❤ 1
Post #2228 7.81K

Forwarded from SOERDEV | развитие инженеров-программистов

Перенёс загрузку архивов стримов в облачную инфраструктуру.

Для получения стрима нужна ссылка с ключом/подписью.

Ссылку выдаёт функция после проверки JWT токена.

Сейчас для этой задачи у меня работает отдельная виртуальная машина. Это потому что стримы занимают много места и приходится брать ВМ ради диска. В облаке место в ObjectStorage стоит очень дёшево (почти в 10 раз дешевле, чем виртуальная машина).

Для подобных задач схема «плати только за то, что используешь» намного выгоднее, чем аренда ВМ.
  • 👍 38
  • 🔥 6
  • 💩 2
  • 🤮 1
Post #2225 9.55K

Forwarded from SOERDEV | развитие инженеров-программистов

Два интересных графика на подумать. Первый это трафик Gmail, который с начала 2024 года начал резко падать. Падает понятно почему - люди отказываются от этого сервиса. Но почему только с начала 2024 года?

Скорее всего люди чувствуют риски, связанные с использованием продуктов Google, но валить массово стали только в этом году - это следствие инертности или простыми словами "вендорлок". Нужно время, чтобы перестроить процессы.

А второй график - это YouTube, от него начали отказываться только на волне замедления. Это и не удивительно, самая массова и востребовання площадка с видео на все темы.

Так или иначе, процесс идет, очевидно - если вы все еще надеетесь, что все образуется и гугл снова станет доступен как и прежде, то вам стоит внимательно вглядеться в графики и понять - нет, не образуется.
  • 🤡 144
  • 👍 48
  • 🤔 7
  • 😢 5
  • 👎 4
  • 💩 2
  • ❤ 1
  • 🤬 1
Post #2222 9.78K
Что нужно знать про Docker контейнеры

📍 Контейнеры. Поддержка контейнеров сделана на уровне ядра Linux. Идея состоит в том, чтобы создать изолированные контейнеры, которые не могут обращаться друг к другу и имеют свой пул выделенных ресурсов. При этом все контейнеры работают с общим ядром.

📍 В windows, macos и т.д. для поддержки контейнеров создают легковесные виртуальные машины Linux

📍 По умолчанию контейнеры не содержат никаких файлов, в них можно делать только вызовы ядра.

📍В контейнеры можно добавить библиотеки и исполняемые файлы, тогда в рамках контейнера можно запускать разный софт.

📦 Docker - это инфраструктура управления контейнером.

📦 для добавления файлов используется понятие "образ" (image)

📦 образ содержит наборы файлов - библиотеки, исполняемые файлы и т.д.

📦 популярные образы содержат необходимые файлы для запуска разных приложений, например: mysql, linux-alpine, nodejs и т.д.💡

#знания #архитектура

SOER | PRO | Boosty
  • 👍 114
  • 🥱 22
  • 🤔 7
  • ❤ 1
Post #2221 10K
Сегодня на стриме был гость - Андрей Kobezzza, поговорили про важность базы для программистов.

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


https://www.youtube.com/live/LJpS4_aFQek
  • 🔥 8
  • 👍 3
  • ❤ 2
  • 💩 1
  • 🤡 1
Post #2219 12.4K
Низкий уровень: как выглядят функции на ASM

Процессор умеет выполнять лишь простые машинные команды, как же тогда работают функции и классы языков высокого уровня?

Чтобы разобраться будем использовать Compiler Explorer который позволяет преобразовать конструкции высокого уровня в их представление на низком уровне (Assembler).

Начать предлагаю с того, что посмотреть какой код будет сгенерирован компилятором для следующего листинга:


int callme() {
return 1;
}

void main() {
callme();
}


в командной строке это можно сделать с помощью команды

gcc -g -o output.s -masm=intel -fno-verbose-asm -S -fdiagnostics-color=always example.c


но Compiler Expolrer делает это за нас, в результате получен следующий код:

callme:
push rbp
mov rbp, rsp
mov eax, 1
pop rbp
ret
main:
push rbp
mov rbp, rsp
mov eax, 0
call callme
nop
pop rbp
ret

Мы видим, что:

✅ имена функций превратились в имена меток, на самом деле это реальные адреса по которым будут делаться переходы, представленные в виде меток.

✅ для вызова функции используется специальная инструкция call

✅ для возврата из функции используется специальная инструкция ret

✅ чтобы вернуть значение из функции используется регистр eax - mov eax,1
✅ в функции есть специальные части "пролог" и "эпилог"

Что такое "Пролог"

Это часть функции которая сохраняет текущие значения регистров, чтобы восстановить их при возврате из функции.


push rbp; инструкция push сохраняет в стеке значение rbp

mov rbp, rsp; копирует значение регистра указателя вершины стека (открытие кадра стека)

sub rsp, xx; выделяем память под локальные переменные

1. rbp используется для адресации локальных переменных, должен быть сохранен в стеке;
2. rsp используется для указания на вершину стека

Что такое "эпилог"

Этр код, который закрывает кадр стека и восстанавливаем значние rpb
mov rsp, rbp
pop rbp
ret


Red zone

Вероятно вы заметили, что у нас в прологе нет инструкции sub rsp, xx, все дело в том, что у процессоров есть оптимизация, которая называется red zone, в данном случае - область размером 128 байт которая находится за пределами RSP и не должна изменяться обработчиками сигналов и прерываний.

В качестве индивидуального задания можете попробовать добавить char a[128]; в код функции callme и посмотреть что будет.


Вывод:
Сегодня мы узнали, что функции высокого уровня на уровне ассемблера размещаются в теле программы и доступ к ним осуществляется путем перехода по адресу, где находится соответствующая функция.

Часто узнать функции в коде на ассемблере можно по следующим признакам:

✅ для вызова функций используются инструкции call, ret

✅ без оптимизаций компилятор добавит специальные куски кода "пролог" и "эпилог"

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

#asm #знания

SOER | PRO | Boosty
  • 👍 107
  • ❤ 4
  • 🤯 3
  • 🤓 2
  • 🔥 1
Post #2217 12.1K
Операционные и аналитические данные

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

Операционные данные

Это бизнес-данные, которые отражают текущее состояние бизнеса. Эти данные постоянно меняются и их нужно поддерживать в корректном состоянии.

Целостность достигается за счет использования транзакций, функциональность реализуется с помощью OLTP (online transaction processing).

Основная проблема операционных данных - изменчивость. Чтобы гарантировать целостность используют либо ACID, либо BASE подходы.

Обычно для операционных данных реализуется стандартный CRUD интерфейс.

Передача данных во внешние источники делается через REST, GraphQL, event-driven подходы и т.д.

Аналитические данные

Это timeseries-данные, которые описывают исторический взгляд на вещи (аналитика). Эти данные нужны для построения отчетов, оперативного мониторинга и т.д.

Эти данные не изменяются во времени, только накапливаются и аггрегируются, поэтому нет нужды обеспечивать целостность. Для обработки используются OLAP (online analytical processing) системы.

Аналитические данные используются для построения информационных моделей в машинном обучении.

Для хранения используются DataLake (централизованный подход), DataMesh (децентрлизованный подход)

#знания #статья

SOER | PRO | Boosty
  • 👍 32
  • 🤔 8
  • ❤ 3
  • 🔥 2
  • 💯 1
Post #2216 8.63K
Пополнил папку участников Соер.Клуба, добавил Андрея - автор канала Kobezzza.

Мне нравится, что в клубе собираются крутые соеры, у которых многому можно научиться. Пока не было ни одного отказа от приглашения в клуб. Это для меня многое значит, спасибо ребятам, что делаете свое сложное дело по развитию АйТи.
Telegram Соер.Клуб S0ER invites you to add the folder “Соер.Клуб”, which includes 9 chats.
  • 👍 14
  • 🤝 5
  • 🤡 4
  • 👎 3
Post #2215 10.2K
Чему учит DataMesh архитектура

В современном мире быть архитектором - значит подмечать архитектурные идеи и тренды, которые существую в индустрии. Я переодически анализирую, что происходит вокруг, вот какие мысли у меня возникли в связи с анализом DataMesh архитектуры.

Тренд №1 Децентрализация

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

Тренд №2 API-интерфейсы

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

Тренд №3 Владельцы и потребители - это домены

Идея в том, чтобы разделить владение данными на уровне доменов, где владельцы данных отвечают за предоставление API к своим данным, при этом они могут быть потребителями данных других доменов (да и в своем домене они могут вести себя и как владельцы, и как потребители)

Размытая грань между потреблением и владением - это очень мощный инструмент децентрализации.

Тренд №4 Федеративное управление

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

Вывод

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

По сути весь веб стал работать как большая DataMesh архитектура - есть децентрализованные сервисы (домены), есть продуманные API, есть владельцы данных. Если сравнить микросервисную архитектуру и DataMesh? Разница только в том, что микросервисы - для проектных OLTP решений, а DataMesh - для аналитических данных OLAP систем, но принципы (читай "тренды") одинаковые.

SOER | PRO | Boosty
  • 👍 49
  • 🤔 9
  • 🔥 2
  • 👀 2
  • ❤ 1
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →