257 Matching Annotations
  1. Last 7 days
    1. Оказываемся в самом начале 80-ых годов, на этот раз

      только через 50 лет. привычный телетайп уже ушел. и консоль уже работала с текстом на экране

    2. телетайп

      кароче, это некоторая система, которая даёт возможность. общатся двум сущностям на условном расстояний. не видя друг друга

    1. In a modern operating system (OS), the concept applies directly. Linux uses a device file to represent a virtual TTY, which enables interaction with the OS by handling input (usually a keyboard) and output (usually a screen).

      это штука, которая даёт возможность.

      общатся с OS. по сути, некоторый посредник. терминал.

      который общается с ОС

    1. mini goals must be show you progress in your main goal. when did you compete him you must be feel, that you stay closer to your main goal. each your mini goals. it is checkpoint.

  2. Dec 2024
    1. при котором подклассы могут переопределять тип создаваемого в суперклассе продукта.

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

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

    2. Паттерн Фабричный метод

      это даёт нам возможность создвать именно один продукт, мы создаём некоторую реализацию в абстрактном классе и добавляем уже в реализаций метод, который как-то создаём нам нужную сущность

    3. Паттерн Простая фабрика

      просто создаётся элемент по enum внутри.

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

    4. Хочется повторно использовать готовые объекты, вместо создания новых (например, паттерн Одиночка). При вызове конструктора вы всегда создаёте новый объект. Это можно обойти, если вынести вызов конструктора в новый метод. В этом методе вы можете сначала поискать готовый объект в каком-то кеше, и только если его нет, создать новый объект.

      в это есть свой удобства. когда есть кеш и правда проще поискать и если что создать новый.

      а еще как вариант, такой "конструктор" может явно говорить, что такой элемент сам по себе не создаётся и он чисто зависим от другой сущности.

    5. альтернативного конструктора

      Здесь мне про это говорил Ильфир, по сути, да заменяет конструктор. такое есть в GUID с его NEWGUID. да и я такое делал с FROM

    6. Создающий метод

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

      и зачему, что он играет роль конструктора, Уже существующего экзепляра сущности.

      он нужен например, для record "классов", или для других структур, в которых данные можно изменять только внутри. или других inmutable типов

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

      фабрика буквально это и значит. что есть некоторый класс, сущность, которая отвечает за создание других классов и сущностей

    1. Обычно программа создаёт конкретный объект фабрики при запуске, причём тип фабрики выбирается, исходя из параметров окружения или конфигурации

      через di можно. либо сделать абстрактную фабрику с фабричным методом и доставать по key ту или инную фабрику

    2. В самом начале программа определяет, какая из фабрик соответствует текущей операционке.

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

    3. Клиентский код должен работать как с фабриками, так и с продуктами только через их общие интерфейсы.

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

    4. Как насчёт вариаций продуктов?

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

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

    1. Думать это работать с теми концепциями, который уже есть в твоём мышлений.

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

    1. тип ptr значение

      так вот почему написано именно ptr. если напишем, dword ptr. то мы как бы говорим, возьми пойнтер, и пусть этот поинтер пройдёт по 4 байтам. вместо dword byte. тогда поинтер пройдёт только по одному байту.

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

    1. вот почему происходит переполнение стэка. каждый раз при заходе в новую функцию. мы создаём ссылку на прошлую функцию и к тому же ссылку на прошлый Bp (это поинтер, у которого ссылка на первый элемент стэка внутри функций).

      по сути sp - это не просто хвост стэка, а это хвост стэка внутри какой-то функций. как и Bp - это голово стэка внутри какой-то функий. кароче говоря, они оба зависимы от контекста. и они голово и наконец относительно функций.

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

      так вот когда мы бесконечнно раз вызывают функцию. то мы каждый раз создаём Frame функций, в которую помещаем Адресс возврата. куда нужно вернутся поинтеру sp, чтоб сразу работать со стэком изнчальной функий.

      и Bp его тоже нужно вернуть в голову функий стэка.

      и если бесконечнно раз это вызывать, то в какой-то места в стэке закончится а заполнится место именно. адресом возвраста и ссылками на страрый Bp.

    2. Каждая функия хранится в стэке и это называется фреймом. именно диапазон ячеек памяти, и называется фреймом. фрейм - рамка. внутри так же хранятся переменные

    3. Функция в свою очередь тоже хранятся в памяти. она так же начинаестя в какого-то адресса, как строка и идёт слево на право.

      istraction pointer ссылается на инструкций, который нужно выполнить. иначе говоря, он ссылается на функцию

    4. у нас есть SP - Stack Pointer. это по сути хвост стэка. благодаря нему можно достать последний добавленый элемент. и BP - Base Pointer. это, по сути, голова стэка. первый элемент стэка.

      это очень похоже реализацию LInkedLIst

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

    1. 1 история про кольскикую скважниу 2 история про дыру мэла. которая как бы 24 км. хотя скважина сама 12 км, да и самая глубокая пещера для 2240 метров крубера.

    1. прикольно, что Утки как и дельфиты спят только одной могут спать одной частью мозга.

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

      а те утки, которые находятся на краю круга, глазом, которые смотрит не в круг не спят.

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

      я и не думал, что и утки спят. здесь Аня и Ирина, когда ехали в поезде в поход/

      и эту штуку с мозгом дельфина нашли в СССР

    1. ЛСД Придумал Химик в 1938 году в швейцарий. он под лсд ехал на велике домой) Когда Исследовали ЛСД его дали слону, чтоб посмотреть, а что же с ним будет. а он тупо сдох.

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

    1. что мы хотим взять не значение из регистра, а значения из адреса,

      мы хотим достать не данные на которые ссылается регистр, а именно сами данные. по сути тоже самое, что и int k = &3 в с++. и потом k - это тоже самое что и [k] в masm. наш ebx указывает на первый элемент строки. чтоб изменить именно данные внутри этой строки. нам нужно mov byte ptr [ebx + (какой симвло по счёту), (символ).

      *k == [ebx]. где ebx - это тоже указатель на данные как и просто k.

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

    1. Поэтому в регистре RDI окажется символ 48 - числовой код символа "0"

      а так как это массив, то никакой little-endian здесь работать не будет и мы насчём со страшего бита

    2. эквивалентна массиву - в данном случае массиву байт

      замечу, что тоже самое и в любом языке программирования. в том же c# хоть есть тип данных String. но внутри него хранится массив chars. по сути массив бит преобразованные в ascii.

    3. numbers dw 0x0123, 0x4567

      мы создали массив, в котором массив двух байтные элементы. по логике массивом мы сначала возьмём первый элемент. а уже внутри одного куска данных в два байта. мы сначала достанем младщий бит. по логике little-endian

    4. Здесь также в секции данных определены 4 байта, но эти байты представляют массив. Данные массива в памяти расположены в порядке его определения, то есть сначала идет первый байт массива, потом второй и т.д. В итоге в регистр RDI будет помещено число 0х01:

      массивам пофиг на littlie-endian or big-endian

    1. Большинство регистров в процессоре обычно имеют размер равный размеру машинного слова,

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

    1. jz zero_set

      флаг нуля смотрит, что в последней операций ответ был 0 или 1.

      тоже самое и при вычитаний

    2. лаг переполнения

      если в байте с данными не хватило место

    3. jc: выполняет переход к метке, если флаг переноса установлен jnc:

      зачему, что все эти, по сути, jmp, только для флагов.

      имеют первую букву j вторую название флага (первую букву). и между ними может быть n - как none.

    4. SF (флаг знака): устанавливается, если старший бит результата установлен. В противном случае флаг знака сброшен (то есть флаг знака отражает состояние старшего бита результата).

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

    1. cmp выполняет некоторую комаду сравние одного числа с другим. и запимыват ответ в флаг. причём ответ, записывает в флаг автоматически. явно это нигде не написано.

      и команда jz смотрит условие флага. если флаг равен 1, то мы делаем jmp в место, куда указывает первый опернад, инача идём вниз.

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

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

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

    1. При этом первый операнд - dest должен быть по разрядности не меньше второго операнда и обязательно должен предоставлять регистр. Эта инструкция также не допускает константные значения. Например

      и очевидно, что размер первого операнда должен быть больше второго. movsx "64 бит регистр", "32 бит регистр" movsx rdi, al

      rdi - 64 бита al - 8 бит

    2. movsx и movzx. movsx выполняет перемещение с расширением знаковым битом, которое копирует данные и расширяет данные по знаку во время их копирования. Синтаксис инструкции movsx аналогичен синтаксису mov:

      но если вдруг нужно переместить 8 бит данных в более в 32 битный регистр, то можно использовать movsx

    3. Оба операнда инструкции mov должны быть одинакового размера

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

    4. дному случае rdi, в другом случае rax.

      В Windows испольузется rax. тогда как в linux rdi. а rax для выполнение системных вызовов

    1. есть секция data, где хранярся данные

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

      и секция text - там все операций с данными. всё взаимодейсвие

    1. (Proximity) приближенность - это, по сути, некоторая разбиение сущностей на классы и на методы на зоны ответсвенности.

      (alignment) выравнивание - тоже самое, что tap и enter, чтоб каждый блок кода был отдельный, чтоб body методов читались быстро и просто.

      (repetition) повторение - ну здесь понятно, без меньше дублирушего кода, тем лучше. это делает код более читабельным и понятным. или та же монада в паттерне result.

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

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

      как интересна стремление мозга к обучению.

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

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

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

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

    1. Америкаский коп придумал инструмент, для лозоходьбы, который в итоге америка продавала другими странам: заработала на этом миллионы. там были разные катриджы. как будто блин сега, вставляешь катриж и можешь искать людей, вставляешь другой уже можешь искать наркотики https://youtu.be/8Z21yvseGF4?t=1797.

      американы жестко умеют в маркейтинг

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

    3. Радиостезия, ака биолокация, некоторая наука, которая утверждает, что, используя, специальные палки можно эффективно находить нужные тебе элементы (https://youtu.be/8Z21yvseGF4?t=343)

      помню такая штука была в экстрасенсах

  3. Nov 2024
    1. Лучший Гайд по NoSQL для Начинающи

      минус sql баз, в том, что она хранит все данные на одном компьютере.

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

    1. destructors are essential for cleaning up unmanaged resources explicitly.

      деструктор работает с не управляемыми ресурсами

    1. ну я понял, что у меня я мало знаком с потоками, и не знают с чем инфу это соединить

    1. Довольно популярна реализация Посредника при помощи Наблюдателя

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

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

      так вот все эти сущности будут хранить в себе реализацию паттерна наблюдатель. где уже внутри метода медиатора будет проходить foreach по всем элементам и отправка им данных

    2. ри этом объект посредника будет выступать издателем, а все остальные компоненты станут

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

    3. они становятся зависимыми от самого посредник

      через него проходят все операция, команды

    1. Фасад создаёт упрощённый интерфейс к подсистеме, не внося в неё никакой добавочной функциональности. Сама подсистема не знает о существовании Фасада. Классы подсистемы общаются друг с другом напрямую

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

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

      чтоб создавать точную связь между событие реального мира с событием из фильма.

      например, в фильме кто-то создаёт какую-то гениальную штуку и на этом строится сюжет, типо эти ребята сделали это. эта штука гениальна.

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

    1. были 3 группы. 1. была кнопка, но собак не били (им было ваще пофиг на кнопку) 2. была кнопка и она отлюкчала ток, который их бил.(они смело всегда нажимали её носом) 3. была кнопка она отключала ток, но потом перестала работать (после того как перестала её больше не нажимали)

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

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

    1. TearDown

      его можно воспринимать как постобработчик в rest api запросах

    1. A∈A

      когда мы говорим про принадлежит, мы говорим, что внутри одного множества есть другое множество. именно внутри. как отдельный элемент множестве.

      а когда подмножество в множестве. мы имеет в виду, что все элементы одного множества есть в другом множестве именно как элементы этого множества. а не как элементы множества, которое внутри этого множества

    2. Элементы х имеющие только одни и те же свойства. не больше и не меньше. находятся в одном множестве.

    1. Посетитель можно рассматривать как расширенный аналог Команды, который способен работать сразу с несколькими видами получателей.

      реально прикол. по сути, паттерн команда, где метод execute как раз принимает посетителя.

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

    2. посещаемых типов домов у него имеется особое предложение.

      он заходит в дом - это аргумент метода объета. он предлагает товар жителям дома - это он принимает в себя объект

    3. Но это простое изменение позволит применять к объектам узлов и другие поведения, ведь классы узлов будут привязаны не к конкретному классу посетителей, а к их общему интерфейсу.

      при этом посетителя та разные, и едят все иду по разному. тем самым мы наши объекты полностью независимы от посетителя, ибо внутри метода объекта мы принимает интерфейс.

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

      мы через объект даём возможность пользоваться посетителю этим объектом.

      все эти объекты работают с одним интерфейсов посетителя.

      а сам посетитель принимает в себя разные классы объектов.

      это нужно, чтоб нам перед вызовом посетителя не нужно было бы определять какой именно клаа у объекта.

      вместо мы просто кидает внутрь объекта посетителя. и внутрь посетителя уже кидает этот объект. таким образом посетитель знает какой класс мы используем, так как вы уже отдаём ему this. то есть тот класс, который и принял этого посетителя

    5. Код поведения, скорее всего, должен отличаться для объектов разных классов, поэтому и методов у посетителя должно быть несколько.

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

    6. Объекты, с которыми должно было быть связано поведение, не будут выполнять его самостоятельно. Вместо этого вы будете передавать эти объекты в методы посетителя.

      ага то есть, мы как мы отдаём ответсвенность посетителю.

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

      мы как бы отдаём его ему

    1. Формат

      нужно сделать некоторый траслятор разметки.

      на вход мы кидаем текст в виде MarkDown а получить уже должны в виду Html.

    1. Есть некоторая металогика, которая занимается логикой других моделей логик.

      да логик так же много как теорий в физики и т.д

  4. Oct 2024
    1. Директор

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

      в данном случае мы создаём директора, который знает лучше всех как строить машину и только дайте ему строителя builder. и он руководя строителям создаст машину

    1. built with the OCP principle in mind

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

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

      тем самым у каждого свой. и каждый несет за свой данные ответственность

    2. encountered

      i had encountered you before you ate sandwich.

      ecountere is when you go ahead and you see wall. you can't ahead. you encountered wall and turn right then you can find shop.

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

      Основной прикол декоратора в том, что при использование его мы вкладываем во внутрь объекта один объект и получаем. условно связной список. то есть прямое дерево вниз.

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

    1. Философ - это тот кто стремится к мудрости. филео - любовь софия - мудрось.

      ксенология - наука о познаний. благодаря ей определяется, что именно истинно, а что ложно.

      метафизика - изучение мира и себя

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

    1. а об обычной теплоёмкости - когда конкретное тело.

      когда у нас в физическом мире, есть объект, какой-то массы, мы его знает, и тогда можем найти его теплоёмкость

    1. теплоемкость

      вообще какая теплоёмкость у всего объекта

    2. Удельная теплоемкость

      просто некоторая абстрактная единица измерения

    1. По сути своей — это способность материала получать или отдавать тепло.

      это когда кладёшь в морозилку что-то и морозилка играет роль гопника, которая забирает тепло у курицы, например.

    2. Излучение

      Способ когда тепло идёт волнами, та же микроволновка. то есть прикол в том, что тепло как бы направленно куда-то. тот же свет этот волны и они тёплые.

    3. Конвекция

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

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

      да когда босиком бежим с горы по доскам, которые до безумия нагретые и ищешь тенёк

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

      такая махинация есть и в воде, когда есть два стакана и между ними трубачка и если в одном стакане вся вода, то если с одного насчётся листся в другой, то в конечном итоге они будут на одном уровне

    6. Нагревание и охлаждение

      Охлаждение как и нагревание полностью симметричны

    1. Возможно, у этого элемента есть тонкости, немного отличающие его от функции. Например, значения кэшируются. Но он достаточно похож на функцию!

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

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

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

      в той же моей библиотеке по OAuth2.0 явно можно скрыть базу данных, и сделать какую-нибудь моку по дефолту. а уже тот кому нужно может и сам реализовать паттерн репозиторий

  5. Sep 2024
    1. 10 фактов об отношениях, которые сэкономят нервы и время. я жалею, что не знала этого раньше
      1. ожидание о партеры могут быть противоположны, реальности, это нормальная тема. мозг всегда создаёт идеальную личность в голове, это норм тема

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

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

      4. ты моя, но это не значит, что я хочу тебя ограничивать, всегда держать возле себя

      5. не подстравить под себя партера, он имеет свой особенности, индивидуальности (Карина про это рассказывала)

      6. человек, который любит, может сделать больно, он может это не знать и т.д

      7. говори, говори, не мочли, чем больше информация он знает, чем проще будет всем

    1. Теперь объекты Span firstDecade и lastDecade работают с теми же данными, что и temperaturesSpan, а дополнительно память не выделяется.

      по сути, мы только создаём ссылки на данные, не создавая нового массива.

      тем самым если менять данные внутри span, то они и изменятся в основном массиве.

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

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

    1. m_ChunkLength

      количество занятых мест в массиве

      так как у нас, по сути, в stringBuilder массив chars. уже имеет фиксированную длину. то есть, это не лист и он не может расширяться. но нам нужно знать сколько уже точно занято мест в массиве.

      для этого он и нужен.

    2. m_ChunkChars

      сам массив chars, куда помещаются данные.

      зачему, что это весь длина всего массива в нём есть и индекусы на пустые символы. другими словами, m_ChunkChars.lenght - это capacity данного stringBuilder.

    3. num2

      сколько осталось после добавление в прошлый чанк

    4. count

      сколько свободно в этом чанке

    5. int num1 = valueCount + this.m_ChunkLength; if (num1 <= this.m_ChunkChars.Length)

      смотрим, а если мы создадим новый чанк, с новыми данными, он будет ли меньше чем, то что уже занято в этой чанке

    6. m_ChunkPrevious

      ссылка на прошлый StringBuilder

    7. m_ChunkOffset

      то есть сколько всего символом использутеся во всём связном stringbuilder

    1. Если инициализированный указатель содержит адрес поля объекта или элемента массива, инструкция гарантирует, fixed что сборщик мусора не перемещает или не удаляет содержащий экземпляр объекта во время выполнения текста инструкции.

      мы как бы говорим, что хотим работать с этими данными. не изменять или, а только работать с ними

    1. Роман Тарасенко

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

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

      сигнатура уже подсвечивает как нам следует мыслить. другими словами, указывает, что должен делать новое api

    2. глубь

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

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

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

      то есть название играет свою роль в такой идей

    1. , обрабатывающие пользовательский ввод и преобразующие его на “язык” домена.

      у нас та порты - это интерфейсы. поэтому и преобразование на язык домена. под языков имеется в виду методы интерфейса

    1. Мы сразу увидим что эта логика плохо соотносится с бизнес логикой приложения.

      по название классов методов, можно явно предположить, что какой-то кринж пишем

    2. Сценарий использования (команда), это определение того, как мы можем использовать наше приложение.

      по сути, dto, которые говорят, что делать можно

    3. подсказка: когда мы определяем интерфейс, мы делаем именно это

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

    4. Таким образом мы не привязываемся намертво к слою фреймворка.

      то есть логику, которая доставляется от фрейморрка. например, asp.net httpClient не должен знать слой приложения. мы должны мочь спокойно заменять на разные реализаций

    5. Также этот слой является адаптером запросов из слоя фреймворка и отделяет его от слоя предметной области.

      адаптеров в том плане, что, например, в asp.net есть контроллеры.

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

      тем самым создаётся слое application, который уже манимулирует нашей предметной областью.

      наш контроллер адаптер между интернетом и нашим приложением, слой application - это аддаптер между контроллером нашей и предметной областью.

      тем самым вся манипуляция\оркестрация над предметной областью происходит в этом слое

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

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

    7. Бизнес логика

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

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

      можно сказать gateway.

      когда есть слое application. есть некоторые интерфейсы через которые можно попасть в этот слой, в логику application.

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

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

      то есть условно один интерфейс одно взаимодействие с внешним миром через один адаптер/порт

    10. еперь у нас есть возможность добавлять дополнительное поведение, при этом сохраняя зону ответственности каждого класса не перегружая его лишней работой

      каждый класс занимается так свой, но в каждом классе, есть другие классы этой же реализаций

    11. Также мы можем объединить несколько декораторов в одну цепочку. Например, мы можем обернуть email нотификатор реализацией для работы с SMS, чтобы дублировать сообщения. В этом случае мы добавляем дополнительную функциональность (SMS) поверх отправки email-ов

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

      либо каждая реализация может внутри себя инкапулировать одну реализацию и потом как матрёшкой всё собрать в одну. 1 и 2 в 4, 4 в свою очедерь в 5 и т.д

    12. Чтобы сделать код чище, мы можем воспользоваться одним из моих любимых шаблонов проектирования

      теперь наш логгер внутрь себя принимает какой-то Notifier. и он в свою очередь запускает Notifier и логику связанную с логированием.

      тем самым notifier не берёт на себя много ответственности, и за логирование и за отправку сообщения

    13. Использование интерфейсов помогает нам правильно инкапсулировать изменения

      мы инкасулируем за интерфейс класс, и тем самым можем заменять класс.

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

      как только мы написали интерфейс, мы по дефолту подразумевает, независимость реализаций от класса-клиента.

    15. Другими словами мы используем интерфейсы всякий раз, когда мы планируем несколько реализаций одного интерфейса.

      паттерн стратегия здесь имеют похожую роль

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

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

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

    1. к

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

      назывался эксперемент "Био сфера 2"

      в нём было 8 человек

    1. Точно так же методы unwrap и expect являются очень удобными при создании прототипа, прежде чем вы будете готовы решить, как обрабатывать ошибки. Они оставляют чёткие маркеры в коде до момента, когда вы будете готовы сделать программу более надёжной.

      даёт оставить места, которые в будущем будут доделываться

    1. Тип Box<dyn Error>

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

    2. Когда

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

    3. тандартной библиотеки имеет варианты, представляющие различные типы ошибок

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

    1. чтением за пределом буфера, buffer overread,

      в C если создать массив, то за пределы его можно ходить и брать данные. Да они не будут принадлежать этому массиву, ну и пофиг)) если хакер может манипулировать индексами в массиве, то безопасности в таком случае не существует.

    2. В

      в вызове ошибке будет написать место, в котором была вызвата именно команда panic. кто и откуда она, можно узнать используя трассировку

  6. Aug 2024
    1. толерантным

      Толератность - это умение привыкать к разнообразию, привыкать к новому, необычному.

    1. одстрич

      Barber barbershop hair salon - for woman. appoinment

      how would you like you haircut

      roots tips - the ends of our hairs

      cape

      haircut

    1. Utopia Show
      1. маньяк с топором ударяет по женщине и вдруг бейспольнтый мяч
      2. чтошка с двумя ко
      3. корабль мороженное, как в американских фильмах
      4. человек с туалетной бумагой ему было больно поттиратся 1850 появилась в 1930 без занос
    1. Лечить инакомыслие. КАРАТЕЛЬНАЯ ПСИХИАТРИЯ

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

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

      то есть психитеарапия - это зависимая от внутри социальных аспект и потребностей общества.

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

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

      а еще мастурбация - это психическая болезнь до 1969 года.

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

    1. Легковес

      основной прикол паттерна в созданий класса, с статическими данными, которые не будут менятся. например пули спрайт и её скорость. и соединять этот статический класс, с другими данными, которые могут меняться. например, координады пули.

      тем самым мы можем сделать куча пуль, у которые работают с одними и теми же статичными данными. скоростью и спрайтом (текстурой)

    1. Хеш IP-адреса

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

    2. Наименьшее количество соединений

      у кого меньше сессий, тому он и отправляет данные

    3. Применяют

      балансировщик знает какой сервер более свободный и туда посылает данные

    4. Используют

      мы знаем какой пк мощнее какой слабее и тот который мощнее будет прапорционально разности мощности с другими серверами, получать запросы. кто мощнее тот и больше

    5. Выделяют

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

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

    6. Принцип работы кругового алгоритма максимально прост:

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

    1. Велес

      Перевёнутая А - это знак Бога велеса одно из самых сильных, он ассоцируется с земледельем, скодовостваом.

      сам он ярый сторонник справедливости

    1. Главное цыганское гетто Европы

      Это видео о том, что в словакий, во первых много цыган, у них есть свой поселение, которых безумно сильно остают от всего мира: 1. электричества, света 2. дома сделаны в ручную, некоторые без крыш как в Африке, или в видео про Сеул. во вторых, правительство Словакий очень помогает им с условиями жизни. строит дома, или проводит электричество.

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

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

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

  7. Jul 2024
    1. let result = quote! {

      мы создаём новую функцию с этим названием потом втунтри пишет println, что функций запущена потом тело функций, а потом пишет, что функция кончилась

    2. Пользовательские derive макросы

      это же даёт нам возможность делать реализацию trait (типажа) автоматически.

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

    3. Функциональные макросы

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

      тогда как в декларативном мы работает о определёнными аргументами, которые прописываются

    4. Декларативные макросыИтак, декларативные макросы в Р

      суть в том, что они генерируеют код, из тех данных, которые в них поступили: очень похоже на match.

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

    5. $x:expr ),*

      привет Regexp

    1. .

      то есть, если юзать T дженерик. то внутри могут находится элементы, только одной структуры. то есть есть в screen может быть куча только buttom или куча только TextField. то есть: у нас будет Screen<Button> и только button и можно будет сувать во внутрь этой структуры.

      использование же dyn - даёт нам возможность, работать уже с любыми элементами, у которых есть типаж. она в real time будет проверять по ссылке, а есть ли такая логика. то есть ошибка появится во время компиляций.

      то есть screen будет однородным - работать только с одной структурой

    1. это перечисление Entry, с двумя вариантами: первый представляет значение, которое может существовать, а второй говорит о том, что значение отсутствует.

      он просто захватыет этот ключ и смотрит, а есть ли у меня с ним данные

    2. Мы не можем использовать

      как только мы кидаем значение типа String то hashmap уже над ними владеет. вне неё они уже не существуют

    1. Лучший Гайд

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

      броке сообщений берёт всю ответсвтенност за отправку данных на себя

    1. Прямое слияние Боуза-Нельсона

      здесь мы просто сначала сортируем элементы по два. то есть, кладём в два массива по элементу. и далее обратно в остортированном порядке относительно этого элемента. выходим так, что в основном массиве заведома два элемента рядом будут остортированы, а потом уже берём по 4 элемента в два массива, и уже будет 4 по элемента отсортированных

      и т.д

    2. Естественное неймановское слияние

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

      как факт, мы точно уверен, что первые два массива из двух вспомогательных лент

      дадут нам более отсортированный массив чем был до этого.

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

      мы заведома из двух массивов уже сделаем один отсортированный.

      то есть с каждым разом на вспомогательных лентах будет все более и более большие отсортированные массивы

    1. Quicksort

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

      там выбирается опорный элемент, но там ищется только расположение как раз опорного элемента, если бы от был отсортирован.

      то есть, да мы просто ищем только один элемент

    1. Цикл обработки событий

      Паттерн наблюдатель кароче: мы как клинет сервера, только ждём новых данные, которые сокет нам скинет.

      то есть, мы как сервер подписываемся на сокет, и когда у него появляются новые данные, он нас об этом уведомляет.

    1. Gossipsub does not provide peer discovery by itself

      сам gossibsub сам не может искать пиры и их подсоеденятся

    1. D Token — это JWT

      мы используем наш Auth server как некую систему, в которой хранится наш пользователь. мы не просто берём токен из auth server. чтоб уже как-то работать с сервером (google mail или vk) через токен. а полноценного пользователя этой системы, с его правами и т.д.

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

      ответсвенность за регистрацию полностью лежит на сервере auth server

    1. Итак, процесс:

      один кидает многоардессный запрос с каким-то именем. и потом когда этот запрос доходит до машины с этим именем, то эта машиша кидаем всем запрос со своим ip адресам, и в итоге все локальыне машины знаю его ip. то есть записали в кэш

    1. отличие от других типов пиринга, веерные соединения являются однонаправленными; они всегда указывают с узла вне темы на узел, подписанный на тему.

      есть узел x - который создал сообщение на определённую тему. сам он на эту тему не подписан.

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

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

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

    2. Сплетни

      Каждый пир сплетничает шестью пиром, рандомным, по служебному "каналу". это происходит каждую секунду.

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

    3. Узлы хранят список недавно просмотренных сообщений

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

    1. В таки достиг А, пройдя через NAT A, до того, как А отправил свой SYN заново. В зависимости от операционной системы, может произойти два сценария:

      А отправил запрос, но Б заблокировал после этого Б отправил запрос, и а его не заблокировал, так как он уже сделал дырку.

      это произдодёт в том случае, если 2 запрос А. будет медленее первого запроса Б.

    2. Таймауты простоя UDP

      нужно моментами кидать пустые запросы, чтоб дырка не закрылась.

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

    3. Если сообщение

      И самое интересное!! если в тоже время машина B пробёт дыру, до момента, когда машина A попадёт уже к NAT B. то NAT B просто отклонит запрос от А.

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

      если один клиент не успеет сделать дырку для другого клиента, то ничего не будет.

    4. Представим

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

      NAT A уже имеет соединение с сервером S. и здесь NAT A делает хитрый мув, он оставляет ip и порт, тот же, Которым он пользовался при общений с сервером. да, когда запрос проходит через nat. nat при новой сессий генерирует порт, который будет переадрессовываться на порт приложения, где находится приложение. ну и свой ip используется, который тоже будет переадрессован на ip машины внутри NAT

    5. в которой находится А, так как чисто случайно сложилось, что его адрес совпал с адресом В в локальной сети В

      А может отравить запрос на локальнный адресс Б, а этот локальный адресс в интернете принадлежать, например, яндексу.

      локальный адресс - это адрес машины внутри NAT, которая отправила запрос на сервер

    1. эксплойт — это средство для выявления слабости в вашей сети или системе и использования этой уязвимости для получения доступа.

      это некоторые инструмент, средства, может скрипт, который используя уязвимость, дать хакере, доступ к комьютеру, к которому используется этот эксплойт

    1. В каких задачах мо

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

    1. b000_0011;

      Мы просто работает с последними двумя битами, в них и находится наше значение. мы берём и на два разряда назад, чтоб получить другое число.

      а это как раз маска для получения значение, которое находится внутри битовой структуре

    1. мы получили

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

    2. битами, которые мы получили

      то есть мы знаем контрольные биты

    3. Вычисление контрольных бит

      Далее находим все биты, который контролирует контрольный бит. а он контролирует каждый N бит интервалом в N. где N - это номер (индекс, но с 0, а 1) самого бита. и суммируем все биты. и если в итоге в сумма чётное число, то ставим 0. иначе 1. здесь просто используется бит чётности

  8. Jun 2024
    1. 0 ДЕВУШ

      Долго лучше не общатся в соц сетях. если есть симпатия после нескольких смс. приглашай погулять максимум на завтра

    1. Directed

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

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

      последняя вершина не имеет ребра для перехода в другую вершину.

      а еще topsort могут быть разными, здесь можно добавить цвета, для понятие, которые уже посещены

    1. LRU

      суть в том, что сам кэш ограничен в своём размере, и ему бы желательно удалять те элементы, которые не кому не нужны.

      ну и суть LRU в том, чтоб вытеснять самые неиспользованные элементы, новыми. что даёт возможность хранить в кэше, наиболее популярные данные, и не хранить, то что нужно мало кому.

    2. Мы

      то есть, обычная концепция кешей: то, что часто используется остаётся, а то что никому не нужно, или мало кому нужно, удаляется, либо по крайне мере быстро не достать

    1. арбитр

      Кароче, используется как в nginx. там тоже есть два вида процессов worker и master. в данном случае это master - он меняет какая бд с mongo будет основной, а на какие будут работать как реплики (копий с теми же данными внутри) так же как nginx master работает с worker процессом. ну только удаляет или создаёт

    1. Абстракция

      то есть, по сути, есть какие-то кнопочки, они что-то делают,

      а что уже делают зависит от реализаций, которая внутри них заложена,

      что делает интерфейс абсолютно независимым, от реализаций.

    1. ПОЛНАЯ

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

  9. May 2024
    1. Почитай

      на 7:01 она прям поняли, что зрители могли её не правильно понять, и сразу подхватилась объяснять. это прям видно на эмоциональном уровне, она прям резко почувствовала эту эмоцию

    1. 3.2. Установление P2P сессий

      Кароче, два хоста соединяются используя данные другого хоста (глобальный и локальный (NAT) ip), который находится сервере.

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

    2. Сервер обратной связи

      Клиент кидает на сервер, пару значений ip и порта. 1. ip самого клиента, откуда отправляется сам запрос (сам хост) 2. глобальный ip (как пример, ip модема).

      первый от отправляет в udp пакете, второй получает от из самого запроса (sourse).

    3. Ретрансляция

      База, можно уже и VPN установить на сервер)) больше для аналогий, чем для смысла))

    4. Исходящий NAT

      По сути, как раз это и мешает peer-to-peer, два хоста из разных NAT не могут подключится к друг другу, по причине, того, что NAT (модем) защищает внутри себя ip хостов, к которому хочет подключится другой хост. то есть прямого подключение просто нету.

      а сам NAT может пропускать, только уже созданные соединения.

    1. overcome

      so multiplexing creates multiple virtual connections, within a single connection, now within one connection, can work more one application or protocol, it deletes bottleneck, and makes scaleble. other app or protocols think that they the only ones on running on that connetion

    2. libp2p

      when using single stream has several problem 1. can't use several application at once, if app is using stream others have wait

  10. docs.libp2p.io docs.libp2p.io
    1. /ip4/192.0.2.0/udp/65432/quic-v1/

      likely multiaddr

    2. To

      each peer has a self-signed certificate, this ceritificate they sing a their private key, which is located on their system

    3. Head

      if one packet is lost the next packet cannot will be sent. until first packer is received.

    4. QUIC

      firstly, QUIC uses the UDP, protocol. if a packet is lost, QUIC takes resposablity for it. QUIC repars itself. secondly, quic exposes multiple stream, unlike tcp which exposes a single steam. therefore, at the application layer, there is no need for a multiplexer

    5. A single QUIC packet can carry frame

      a single QUIC packet carring data for one or more streams. QUIC solves HoL blocking, since it works with UPD protocol (allowing packets to be received out of order)

    6. TLS

      TLS establishs an encrypted and auth connection it runs on top of tcp.

    7. Ossification

      the headers of tcp packets are unencrypted. therefore, when a packet pass throuth other server, server can inspect it, if any field in header has a strange value. server may can reject the packect based of those fieds

    1. Грабим Дома

      по сути, ходьба по лестнице (либо число фибоначи), но отличие в том, что в ходьбе по лестнице мы делали сумму прошлого элемента и позапрошлого. (dp[i-1] + dp[i-2]) а в этой задаче. мы берём либо значение прошолого элемента и всё (di[i - 1]). либо сумма настоящего элемента и позапрошлолго (dp[i] + dp[i-2]).

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

    1. са мономорфизации, выполняемого компилятором, когда мы используем ограничения типажей для обобщённых типов: компилятор генерирует частные реализации функций и методов для каждого конкретного типа, который мы применяем для параметра обобщённого типа. Код, который получается в результате мономорфизации, выполняет статическую диспетчеризацию , то есть когда компилятор знает, какой метод вы вызываете во время компиляции

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

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

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

    2. типаж-объекто

      по сути. типаж-объект, это тот самый интерфейс. он даёт нам возможность, иметь не с опрелёленным типом. если бы мы использовали Where T: type. что объективности даст мономорфизацию. а с теми типами, которые реализуют в себе этот типаж. по сути, мы начинаем работать с типами не на прямую через тип, а через типаж-объект, что по сути может считатся эквавалентом интерфесов, либо абстракт класса.

    1. NetworkBehaviour,

      this behavior beetween peer, how them will talk to each oher

    2. Nodes identify each other via their PeerId which is derived from their public key.

      we created PeerId by publicKey

    1. Метод Wait()

      Wait - просто заставляет поток ждать когда асинхронная операция выполнится, в случае async await поток переходит на другие задачи, а в случае метода Wait() поток другие задачи не выполняет и просто ждёт когда асинхронная операция выполнится.

      что можно понять из закономерностей выше это может понизить производительность

    2. Метод OnCompleted()

      OnCompleted - просто ждёт когда асинхронная операция выполнится, и как только выполнится выполнит внутри себя другую операцию, сам он принимает в себе Action

    1. o store a value, a mapping of the form key -> value is created in the DHT. For every key, an ID is generated by using the same format as peer IDs. Remember that having an ID for every key in the same format as peer IDs means that we can calculate distances between key IDs and peer IDs.

      One formate hash and for peer and for key

    2. peer keeps

      node have list other nodes, which closer to it. it need to find clode node, for key.