Pull to refresh
37
0
Сергей Шатунов @Prototik

JVM Backend разработчик

Send message

Используйте типы. Введите интерфейс Source (можно даже sealed), от него наследуйте и VideoSource, и AudioSource. MediaRecorder (и его билдер) типизируйте с <T : Source> ну и в нём одно поле val source: T.

Никак не связано, Car действительно никак не используется.
Если mapOf заменить на listOf<Car> - тогда рабочий.
А с мапой оно ещё и не работает по причине того, что в filter приходит Map.Entry, в котором лежит key и value, но содержимое фильтра клало на эту мааааленькую недоработку. Хоть бы в IDE код бы вставили, такие уж глупости они бы не пропустила...

Мне, как джависту, всё понятно, там и не такие дженерики можно увидеть иногда...

Разве что ~ заставляет подумать, но из текста статьи понятно, зачем оно.

Это уже называется property, а не field. Хоть в простейшем случае property может иметь backing field, но в общем это не так.

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

Здесь автор не совсем точно выразился — в factorio есть tps, а есть fps. tps — это и есть игровые такты, и в нормальном состояние тактов всегда ровно 60 в секунду. Они могут проседать под нагрузкой (тем самым замедляя всё вокруг), но никогда не могут быть больше.
А fps можно сделать любой — он никак не влияет на tps.

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

Это значит, что новый поток создается на каждый запрос?

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

За все не скажу, но вот longhorn мне не понравился — постоянно отваливаются реплики, вечное выпадание в I/O error после непонятно чего (фиксится только перезапуском пода), томы кушают место просто потому что (какие-то старые реплики, которые никем не используются, но и не удаляются).


OpenEBS, в котором движок jiva использует наработки longhorn, работает куда стабильнее и по моим тестам быстрее самого longhorn, уж не знаю как, настройки плюс-минус одинаковые — три реплики на том на трёх разных серверах.

Нууу...


Не так давно столкнулся с вылетами игрульки The Division 2 от Ubisoft на Win10 с отключённым swap. Вылетала стабильно через 15-30 минут игры, ничего внятного не писала, RAM даже на половину не была заполнена.


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

Нет, это можно.


Нельзя кучу дополнений "Celsius to Fahrenheit", "Fahrenheit to Celsius", "Fahrenheit to Kelvin", каждое из которых ведёт на страничку одного и того же онлайн-калькулятора.

Я конечно извиняюсь, но зачем ручное удаление пода? Можно же напрямую сказать "перезапусти deployment":


kubectl rollout restart deployment deployment-name

"зависят только от ваших рук" — так можно сказать про все устройства на allwinner, и об всех платах Banana в частности. Китайцы штампуют плат как грязи, вываливают полтора полурабочих бинарника и на этом заканчивают. Если у вас нет желания/времени/сил ковырятся вот с такой вознёй с dts, ручным его написанием по даташиту и прочими прелестями — не берите никогда allwinner, старая-добрая raspberry в этом плане куда лучше.

Дело не в форме, а общем визуальном стиле. Tcl/tk выглядит так, как выглядел интерфейс 25 лет назад, ну вот не хватает ему руки дизайнера.

По поводу новости по ссылке — sideloaded extensions это не навязанные mozilla расширения, это такой метод установки дополнений, при котором достаточно дропнуть файл с расширением в определённую папку на диске — и типа всё, расширение установлено. Пользовались всякие зловреды для взятия под контроль браузеров, постоянной выдачи рекламы и т.п.

И как bulletproof — взять халявные ns у Hurricane Electric и их тоже сделать репликой.

Это не меняет ситуации с данной конкретной проблемой. Разработчики jvm языков вполне осведомлены о наличии synthetic, который был с лохматых времён (в 1.5 точно был, возможно даже раньше, если не с 1.0), и активно им пользуются в других местах.
Добавление synthetic не ломает abi (разве что api для случаев, описанных в статье, но кого волнует совместимость с теми, кто в обход скалы пытается отнаследоваться от sealed?), его вполне можно добавить хоть прямо сейчас в компилятор.

Что интересно, sealed классы в kotlin'e таким образом не сломаешь — конструктор у базового класса помечен как synthetic, что делает невозможным его вызов из Java (да и других jvm языков) без применения особой уличной магии.
Почему в скале не сделали так-же — непонятно, вполне очевидная штука.


kotlin
sealed class Option {
    class Some<out T>(val value: T) : Option()
    object None : Option()
}

java
import kotlin.jvm.internal.DefaultConstructorMarker;

public abstract class Option {
    private Option() {
    }

    public /* synthetic */ Option(DefaultConstructorMarker $constructor_marker) {
        this();
    }

    public static final class Some<T>
    extends Option {
        private final T value;

        public final T getValue() {
            return this.value;
        }

        public Some(T value) {
            super(null);
            this.value = value;
        }
    }

    public static final class None
    extends Option {
        public static final None INSTANCE;

        private None() {
            super(null);
        }

        static {
            None none;
            INSTANCE = none = new None();
        }
    }

}

Ну… нет. То, что wireguard не даёт вам выбора шифросьюитов не значит того, что он сам не сможет это делать. Допустим, ломают текущий набор алгоритмов, выходит wg2.0, который может работать по двум алгоритмам — по новому и по старому (сначала пробуем дешифровать по новому, не получилось — по старому), сам определит, какие шифры у peer'a (если на том конце wg1.0, то и шифровать для него надо по-старому, иначе не поймёт).
В общем, каких-то принципиальных ограничений к смене шифров не вижу.

А после такой манипуляции можно будет перезаписать флеш (обновить прошивку), пусть даже ценой потери ключей?

(Кстати, когда уже наконец Stream отнаследуют от Iterable? Хочется просто писать for (Path file: Files.list(dir)), а не возиться с промежуточными списками.)

Батюшка, да куда же Вам обновляться с java 8, коль вы основную фичу java 8 ещё не поняли? :)

Information

Rating
Does not participate
Location
Красноярск, Красноярский край, Россия
Date of birth
Registered
Activity

Specialization

Backend Developer, Fullstack Developer
Linux
Java
Kotlin
Android development