BufWriter<Master<'_>> – Telegram
BufWriter<Master<'_>>
105 subscribers
451 photos
28 videos
34 files
1.7K links
https://www.patreon.com/alxe_master

Видео/статьи. Конспект и мои вольные комментарии по инженерии. тут только то, что считаю полезным для себя или других =)

#os, #cloud, #rust, #golang, #python, #javaScript, #cpp, etc
Download Telegram
Forwarded from S0ER
Чем отличается архитектура и декомпозиция?

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

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

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

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

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

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

Таким образом, если речь идет о разделении программы на классы (не о выделении интерфейсов, не о распределении обязанностей, не о выработке требований и т.д.), а только о "географическом" размещении файлов и вынесении кода в эти файлы, то это с большим натягом можно отнести к процессу построения архитектуры приложения, но правильнее всего называть "модульная декомпозиция" или "классовая декомпозиция". Архитектуре же строится по принципу "от общего к частному" и начинается со сбора и формирования требований.
Экстремальный_Cи_Параллелизм,_ООП_и_продвинутые_возможности_2021.pdf
7.8 MB
Экстремальный Cи. Параллелизм, ООП и продвинутые возможности
Автор: Камран Амини
Книга научит пользоваться продвинутыми низкоуровневыми возможностями языка для создания эффективных систем.
#c
Forwarded from Блог*
#prog #rust #article

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

== 1. История видеокарт, введение в OpenCL
https://youtu.be/2_vUxISp7ko

CPU parallelism
- out-of-order optimizations (instruction level parallelism)
- branch predictor
- hyper-treading
- multi-core parallelism
- SIMD intrinsic functions - SSE, SSE2, SSE3 (по 4 числа). AVX, AVX2 (по 8 чисел)

GPU
- vertex shader 9вершины и треугольники)
- fragment shader (пиксели, освещение)

GPGPU API
- closeto metal
- cuda
- openCl
- Metal

GPU
- SIMT instructions

Computation model in OpenCL/Cuda:
- Work space (Height X WIdth)
- Work group
- Work Item
- Kernel (program)

!!! отказ от синхронизации
INTRINSIC FUNCTION

https://en.wikipedia.org/wiki/Intrinsic_function
встроенные функции в процессор, которые доступны из ЯП. используются для оптимизации вычислений или предоставляют какие либо функциональные возможности. например обработка массива данных одной функцией из линейной алгебры. может быть вставлена компилятором автоматически если он видет такую возможность

== Intrinsic Functions - Vector Processing Extensions
https://youtu.be/x9Scb5Mku1g
1512.00168.pdf
866.7 KB
Consistency in Non-Transactional Distributed Storage Systems

про распределенные нетранзакционные системы
Consistency in Non-Transactional Distributed Storage Systems

про распределенные нетранзакционные системы
== Pablo Galindo Salgado - Time to take out the rubbish: garbage collector - PyCon 2019
https://youtu.be/CLW5Lyc1FN8
- reference counting (count, ownership)

- identify cycles
- deference rc
- clear weak refs (very tricky)
- call finalizers (very tricky)
- resurrection (abort cancelation)
- clear ref cycles
- generational GC - survive the object to next gen.
- atomic
- copy On Write (when forked process) - BUT rc gets troubles !!!
- calculating total memory costs


- pep 442 DETERMINE object finalization

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

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

Интерфейс использования secrets довольно прост и схож с random. Его основные функции:

secrets.choice(collection) - возвращает случайно выбранный элемент из переданной коллекции.

secrets.randbelow(n) - возвращает случайный int в диапазоне [0, n).

secrets.randbits(n) - возвращает целое число int состоящее из n случайных бит.

secrets.token_bytes(n) - возвращает случайную байтовую строку, содержащую n байт.

token_hex(n) - возвращает случайную строку из n байт в шестнадцатеричной формате.

token_urlsafe(n) - возвращает URL-безопасную строку, содержащая n байт, закодированную в Base64.

Также в модуле есть класс SystemRandom, который поддерживает большинство функций определенных в random.