Pull to refresh
12
0
Chamie @Chamie

TypeScript, React, C#

Send message

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

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

Ну, так пусть и не «кляпают» спам-ботов. Правда думаете, кто-то жалеть будет?

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

Так именно, что в i2p оно уже есть много лет.

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

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

Всё давно продумано.

1. Что значит нет IP-адресов? Для чего тогда на маршрутизаторе необходимо открывать порт во вне? Не для того ли, чтобы другие узлы могли к нам подсоединиться для возможности дальнейшей маршрутизации пакетов?

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

2. Что значит по-настоящему анонимно? Будет ли I2P хорошо анонимизировать трафик, если клиент и сервер находятся в одном государстве?

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

Сможет ли при таком сценарии государство / объединение провайдеров связи построить модель противодействия анонимизации?

Я не слышал о действенных. Для всех известных в сети встроены меры противодействия, в т.ч. постоянный «мусорный» трафик, имитирующий транзитный.

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

Linux kernel на чистом Си же.

Ещё раз: код с асинк-авейтами — не объектно-ориентированный, и он как раз и «без ООП», и не «лапша из тыщ колбеков».

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

Так это что же, ООП — это сплошное нарушение принципа единственной ответственности?

Ну, и да, для этого есть второй вариант.

А какая связь?

Рисование пропало внутри create тут и конструктор и рисование

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

Значит, при добавлении или модификации нового метода будет всё сломано.

Да с чего бы сломано? Как там вообще что-то сделать, чтобы сломать?

Сделай рисование красным.

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

type Color = "Black" | "Red" | "Green" | "Blue" | "Magenta" | "Salmon" | "Gold";
const getCanvas = () => {
    const shapes: Shape[] = [];
    return {
        add: (shape: Shape) => shapes.push(shape),
        render: (color?: Color) => shapes.map(shape => shape() + (color ? ` ${color}` : "")),
    }
}

Сделай вычисление площадей

Тоже работы на 3 минуты.

Скрытый текст
type Shape = {
    render: () => string,
    getArea: () => number,
}

type Color = "Black" | "Red" | "Green" | "Blue" | "Magenta" | "Salmon" | "Gold";

const create = {
    point: (x: number, y: number): Shape => ({
        render: () => `Drawing a Point at (${x},${y})`,
        getArea: () => 0,
    }),
    circle: (x: number, y: number, r: number): Shape => ({
        render: () => `Drawing a Circle R=${r} at (${x},${y})`,
        getArea: () => r * r * Math.PI,
    }),
    rectangle: (x1: number, y1: number, x2: number, y2: number, width: number): Shape => ({
        render: () => `Drawing a Rectangle (${x1}, ${y1}) to (${x2},${y2}) width=${width}`,
        getArea: () => Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2)) * width,
    })
};

const getCanvas = () => {
    const shapes: Shape[] = [];
    return {
        add: (shape: Shape) => shapes.push(shape),
        render: (color?: Color) => shapes.map(shape => shape.render() + (color ? ` ${color}` : "")),
        getTotalArea: () => shapes.reduce((sum, cur) => cur.getArea() + sum, 0),
    }
}

const main = () => {
    const canvas = getCanvas();
    canvas.add(create.circle(1, 2, 3));
    canvas.add(create.point(1, 2));
    canvas.add(create.rectangle(1, 2, 3, 4, 5));

    canvas.render();

    canvas.render("Gold");
}

Хотя, можно, конечно, и поупарываться

Скрытый текст
type ShapeType = "circle" | "point" | "rectangle";

type Shape = [ShapeType, ...number[]];

type Color = "Black" | "Red" | "Green" | "Blue" | "Magenta" | "Salmon" | "Gold";

const create = {
    circle: (x: number, y: number, r: number): Shape => ["circle", x, y, r],
    point: (x: number, y: number): Shape => ["point", x, y],
    rectangle: (x1: number, y1: number, x2: number, y2: number, width: number): Shape => ["rectangle", x1, y1, x2, y2, width],
};

const renderers: Record<ShapeType, (shape: Shape) => string> = {
    circle: ([_, x, y, r]) => `Drawing a Circle R=${r} at (${x},${y})`,
    point: ([_, x, y]) => `Drawing a Point at (${x},${y})`,
    rectangle: ([_, x1, y1, x2, y2, width]) => `Drawing a Rectangle (${x1}, ${y1}) to (${x2},${y2}) width=${width}`,
}

const render = (shape: Shape, color: Color = "Black") =>
    (renderers[shape[0]] || (() => ""))(shape) + (color ? ` ${color}` : "");

const areaCalculators: Record<ShapeType, (shape: Shape) => number> = {
    circle: ([_, x, y, r]) => r * r * Math.PI,
    point: () => 0,
    rectangle: ([_, x1, y1, x2, y2, width]) => Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2)) * width,
}

const getArea = (shape: Shape) =>
    (areaCalculators[shape[0]] || (() => NaN))(shape);

const getCanvas = () => {
    const shapes: Shape[] = [];
    return {
        add: (shape: Shape) => shapes.push(shape),
        render: (color?: Color) => shapes.map(shape => render(shape, color)),
        getTotalArea: () => shapes.reduce((sum, cur) => getArea(cur) + sum, 0),
    }
}

const main = () => {
    const canvas = getCanvas();
    canvas.add(create.circle(1, 2, 3));
    canvas.add(create.point(1, 2));
    canvas.add(create.rectangle(1, 2, 3, 4, 5));

    canvas.render();

    canvas.render("Gold");

    canvas.getTotalArea();
}

Да причём тут поллинг? Мы, вроде бы, про асинки, реализовать которые вполне можно и без ООП, а не только «классом с кучей методов». Т.е., и сама по себе концепция async/await — не ООП, и реализация её внутри — тоже не обязана быть ООП.

Вот вам безгранично расширяемый MVP без оверинжиниринга (TypeScript):

Скрытый текст
const create = {
    point: (x: number, y: number) =>
        () => `Drawing a Point at (${x},${y})`,
    circle: (x: number, y: number, r: number) =>
        () => `Drawing a Circle R=${r} at (${x},${y})`,
    rectangle: (x1: number, y1: number, x2: number, y2: number, width: number) =>
        () => `Drawing a Rectangle (${x1}, ${y1}) to (${x2},${y2}) width=${width}`,
};

const getCanvas = () => {
    const shapes: Function[] = [];
    return {
        add: (shape: Function) => shapes.push(shape),
        render: () => shapes.forEach(shape => shape()),
    }
}

const main = () => {
    const canvas = getCanvas();
    canvas.add(create.circle(1, 2, 3));
    canvas.add(create.point(1, 2));
    canvas.add(create.rectangle(1, 2, 3, 4, 5));

    canvas.render();
}

Есть к нему какие-нибудь претензии?

Не вижу никаких инкапсуляций с полиморфизмами, не покажете, о чём вы? То, что вы это можете с ними написать — не означает, что не написать без них.

У вас тоже

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

Тогда, получается, и единого приложения нужно избегать

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

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

У меня часть ложек/вилок — с чернением, например. А у некоторых ножей деревянные ручки.

1
23 ...

Information

Rating
5,819-th
Location
Россия
Date of birth
Registered
Activity