Как стать автором
Обновить
2
0

Пользователь

Отправить сообщение

Смотрите категорию камеры с http протоколом. Обычно они поддерживают еще и FTP. Какой-нибудь Dahua или Tiandy. Поставите себе vsftp на локальном сервере и все.

Прошивал такой иглой мелкую плоскую флэшку в формате wson8 на материнке. Прищепка с нее спадала. Мне повезло, прошилось и заработало. Если бы выпаивал, разворотил бы там все.

Ага. Написал по памяти. Что вспомнилось.

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

Для изоляции состояния потребуется. GenServer, Agent, Task не суть. Для поведения не обязательно.

Вы же вызываете имплементацию через протокол. Вам известен только он (интерфейс). Что там в реализации вы не знаете. Я вам ещё раз напишу:

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

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

На каждый чих GenServer делать? Это антипаттерн. Плюс наличие тех же протоколов и defimpl буквально говорит об отделении реализации. Если это не сокрытие, то я уже и не знаю что тут ещё сказать.

Обычные map с сахаром. Я понимаю, elixir гибкий язык и можно все раскидать по функция\модулям как угодно. Но struct + module + matching дает то самое сокрытие поведения. Если вы сами это захотите сделать.

Посмотрите на исходники Elixi, Ecto. Там что нет модулей с defstruct и приватными методами? Нет сокрытия?

Но ведь, как только в модуле появляется функция с аргументом %ModuleName{}, у вас сразу же появляется эта связь. Приватные функции модуля для работы с этой структурой вызвать нельзя. Вот вам и сокрытие поведения.

Так внутри модуля делается defstruct. И вот вам данные. У структуры даже что-то типа появляется.

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

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

Почему? Там же там есть модули и структуры. В elixir точно были. Те же модули могут иметь приватные методы.


Суть инкапсуляции, в моем понимании, это отделить поведение (контракт) от его реализации. В разных языках это может делаться по разному. Так-то как в python можно договориться и решить, что методы c _ являются приватными и не вызывать их извне. Но лучше, конечно, когда язык имеет необходимые конструкции и механизмы.

Это мог бы делать объект типа DispatcherTemperature, а Temperature лучше иметь простым "плоским" обьектом.

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

Я так понимаю, вы в последней строке имеете ввиду dispatcher, а не sensor?

Temperature t = dispatcher.getTemperature();

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

И конечно. На каком-то уровне надо работать с примитивами. От этого никуда не денешься. Компьютеры - это всё ещё числодробилки.

Так не надо. Не надо давать температуре ответственность считывать датчик. Это не выглядит логичным.

Что касается Kelvin и Celsius - если не подходит такой простенький вариант температуры, то нужно ввести понятие TemperatureScale, которое будет знать о правилах конвертации температур в разных шкалах. Можно захардкодить в один класс, можно делать отдельные KelvinScale, CelsiusScale.

В Temperature будет метод from(value, scale). И все занимаются тем, чем должны - температура представляет физическое понятие, шкала делает конвертацию.

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

public class Temperature {
    Double celcius;

    public Double getCelsius() {
        return celsius;
    }
    
    public void setCelsius(Double value) {
        celsius = value;
    }
}

А откуда вы взяли этот классический пример? Зачем температура сделана мутабельной? Получается, что например 1°C как сущность может стать внезапно 2°C. Это физически не имеет смысла.

Вроде бы во многих статьях об ООП не раз говорилось, что добавление геттеров\сеттеров не приводит к инкапсуляции автоматически. Пример выше ничем не отличается от класса с публичным полем celsius.

Логичнее сделать так:

public class Temperature {
    double celsius;

    public double getCelsius() {
        return celsius;
    }

    public double getKelvin() {
        return celsius + 273.15;
    }

    public static fromCelsius(double value) Temperature {
        if (value < −273.15) {
            throw new InvalidTemperature()
        }
        return new Temperature(value)
    }

    private Temperature(double celsius) {
        this.celsius = celsius
    } 
}

double value = getTempFromSensor(); // from outside

try {
    Temperature t = Temperature.fromCelsius(value)
    System.out.println(t.getCelsius())
} catch(InvalidTemperature e) {
    System.out.println("Sensor is broken! Call a technician.");
}

Здесь сокрыт способ хранения температуры. Можно хранить в кельвинах. Можно не double, а string. Как хотите.

А они там не обычные, стоят магнитные датчки Холла. Можно настроить момент срабатывания. У меня реагирует почти сразу, как на кнопку нажал. Правда, я почему-то не ощущаю разницы между двумя профилями с низким и высоким порогом срабатывания. Может баг, а может не разобрался еще с настройками.

Исходя из требований, автору бы подошла Keychron Q3 HE (TKL) + набор низкопрофильных кейкапов. Только дорого.

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

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

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

Источник: https://constrf.ru/razdel-1/glava-2/st-55-krf

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

- цели ограничения прав и свобод должны быть не только юридически, но и социально оправданы, а сами ограничения - им адекватны. При этом такие ограничения должны отвечать требованиям справедливости*(706); - ограничения прав, даже если они осуществляются в определенных Конституцией целях, не могут толковаться расширительно и не должны приводить к умалению других гражданских, политических и иных прав, гарантированных Конституцией и законами РФ;

Источник: https://constrf.ru/razdel-1/glava-2/st-55-krf

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

Главная угроза - это действия РКН. В ноябре сайты на hetzner уже отваливались. Тот же archlinux.org не работал.

На Озоне есть официальные магазины и кнопка - Хочу скидку. Я на Oppo попросил 30%, мне дали 5%. Но в ДНС все-равно дешевле было.

В android все это есть. И ключевые слова для СМС. Берете какой-нибудь SpamBlocker и отключаете для него уведомления. У вас чистая история звонков и никакого беспокойства.

В целом радует, что современные ОС стараются создавать безопасную среду для пользователя.

Ага, если бы они еще API нормальный делали. В google похоже считают, что кроме видосиков, фоток и музыки других файлов нет. Например, через Storage Access Framework нельзя открыть файл sqlite. Точнее на чтение еще как-то вроде можно, но на запись уже не выходит.

Как самому сформировать путь к файлам внутри директории открытой с помощью ACTION_OPEN_DOCUMENT_TREE тоже неясно. Приходиться делать что-то вроде Uri.parse(pickedDir.uri + "/nested_dir/filename".replace("/", "%2F")). И не факт что-это будет везде раотать. Можно что-то c findFile сделать, но это же так здорово и быстро, перебирать все файлы в поисках нужного /сарказм.

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

Информация

В рейтинге
5 470-й
Зарегистрирован
Активность