All streams
Search
Write a publication
Pull to refresh
41
0
Сергей Шатунов @Prototik

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

Send message

Но… ведь это уже есть… Или я чего-то не понял из Вашего сообщения?

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

https://www.opennet.ru/
https://opennet.ru/


Первый полная версия сайта, второй — "лёгкая". Не шибко разные сайты конечно, но пример есть.
И нет, я не поддерживаю это конкретное решение владельца opennet и я против путаницы с www и без него в целом

+1, от йоты я вижу ровно одно сообщение в месяц — "с вас списана месячная плата, пока-пока до следующего месяца, вот вам чек"

Ну key можно и за'require'ить, не суть дело.
Просто Ваше решение очень теряет в типобезопасности — попробуйте туда добавить Set<String> без unchecked cast'a.
Ну и хранит инстанс SharedPreferences в каждом делегате.

Я бы это сделал проще
interface SharedPreferencesHolder {
    val sharedPreferences: SharedPreferences
}

abstract class CommonPreferenceDelegate<T>(val name: String? = null) : ReadWriteProperty<SharedPreferencesHolder, T> {
    private fun getPreferenceKey(property: KProperty<*>) = name ?: property.name

    final override fun getValue(thisRef: SharedPreferencesHolder, property: KProperty<*>): T {
        return getValue(thisRef.sharedPreferences, getPreferenceKey(property))
    }

    final override fun setValue(thisRef: SharedPreferencesHolder, property: KProperty<*>, value: T) {
        setValue(thisRef.sharedPreferences, getPreferenceKey(property), value)
    }

    abstract fun getValue(prefs: SharedPreferences, key: String): T
    abstract fun setValue(prefs: SharedPreferences, key: String, value: T)
}

class BooleanPreferenceDelegate(private val defValue: Boolean, name: String? = null) : CommonPreferenceDelegate<Boolean>(name) {
    override fun getValue(prefs: SharedPreferences, key: String) = prefs.getBoolean(key, defValue)
    override fun setValue(prefs: SharedPreferences, key: String, value: Boolean) {
        prefs.edit().putBoolean(key, value).commit()
    }
}

fun SharedPreferencesHolder.boolean(defValue: Boolean = false, name: String? = null) = BooleanPreferenceDelegate(defValue, name)

class Foo(override val sharedPreferences: SharedPreferences) : SharedPreferencesHolder {
    val isUserLogged by boolean(false)
}

Ну и нафаршировать сверху классов для остальных типов.


NotFoundRealizationException

Реализация по-бассурмански будет implementation

Замечу, что если попытаться удалить сабвольюм средствами файлового менеджера или утилиты rm, то операция завершится с ошибкой operation not permitted (операция не разрешена).

Замечу, что начиная с какой-то там версии ядра это уже не так

Я либо не понял, либо пока этого нет — экспортировать в какой-то внешний формат на данный момент можно? Хочется IDE для OpenAPI, но сабж вроде как умеет только импортировать его, сохраняет только в своём собственном формате (в какое-то ответвление от OpenAPI)


p.s. нет пункта меню file -> exit, меня, как пользователя окон без декораций, это вводит в ступор
p.s. раз уж это электрон, онлайн версия планируется?

apt, snap будет жрать дополнительный флеш и оперативку.

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


➜ cat /boot/cmdline           
# LUKS (Lol Ur Keys Sick)
rd.luks.name=bffa9547-b6a5-43e8-a199-4f92bb225c91=fenix
rd.luks.options=timeout=0

# Root fs (I heard kernel panics without it, I want happy kernel)
root=/dev/mapper/fenix
rootflags=subvol=@archlinux,x-systemd.device-timeout=0

# We love systemd, right?
init=/usr/lib/systemd/systemd

# But hate it for a little verbosity
quiet
loglevel=3
rd.systemd.show_status=auto
rd.udev.log_priority=3

Если нужен ssh на initrd фазе — пакет mkinitcpio-dropbear или mkinitcpio-tinyssh.


Так же прошу заметить, что эти опции ядра для systemd initrd HOOKS=(base systemd autodetect modconf block keyboard sd-vconsole sd-encrypt fsck filesystems), для busybox initrd название опций другое

Т.е. самый оптимальный код в таком случае — "квадрат"?

Ну nullability в kotlin на уровне типов, override не аннотация, а модификатор функции, его отсутствие — ошибка компиляции.


Посмотреть на разные особенности языка можно онлайн, например на https://play.kotlinlang.org/koans
Просто выбираете нужную тему и смотрите, как она реализована в данном случае.

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

Как и со всеми языками — нужно пробовать, желательно не на хеллоуворлдах.
А вообще он решает много попоболи из Java, простой (относительно какой-нибудь Scala например), фичастый (корутины, инлайновые классы вон завозят потихоньку и т.п.), ну и с недавних пор мультиплатформенный (jvm, js, native).


Не помню кто сказал (кажется это был Андрей Бреслав), когда пишешь на Котлине — прям на душе приятно. Ты не пишешь очередные геттеры, а пишешь код.

Не, этот тип применяется только когда nullability неизвестна (когда дёргаем java код, на котором нет никаких аннотаций). Тогда компилятор позволит работать с этим типом как с nonnull, но везде натыкает проверок на null для early null propagation. Т.е. когда есть аннотации — то в Kotlin всё будет хорошо и везде будет нужный тип. Если нет (старый код или просто не заморачивались) — то можно не писать портянки из всяких ?., ?:,!!! и прочего и просто писать код, не столь безопасный (хотя если где-то прилетит null, где вы его не ожидали — то вылетит как можно раньше, а не когда этот null расползётся по всем структурам), но без манускриптов из символов и просто красивый.

Вы давно не смотрели в kotlin. Давно же появились платформенные типы — String!, которые могут использоваться как nullable, как и non-null.

Ну, и? Человек утверждает, что на маках своп включён и выключить можно через терминал. Не спорю и не подтверждаю это утверждение — как это относится к телеграму с его жором в гигабайт? Или телеграм только на маках?
Место то на диске может и условно бесконечное, но вот динамический своп (который сам растёт/уменьшается) пока ещё редкость. Пущай себе кешируют что хотят на диске напрямую, а не забивают память в надежде на своп и ядро.
Речь шла про телеграм, про осьикс слова не было сказано (был только скриншот тамошнего диспетчера задач).
убунту

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

А то, что почти гигабайт ушёл в своп — не показатель качества продукта? Что можно аллоцировать в мессенджере на гигабайт и забыть про этот гигабайт?
Ну и для проверки глянь внизу диспетчера задач сколько используется свопа — наверняка там не 0

Да тут хоть засмотреться — нет у меня свопа и всё тут :D
Детект запущенных игр (и отображение их как статуса), интеграция с множеством игр (кнопочки join / spectate /etc), отображение статуса стримов (которые обычно об играх)… Продолжать?

Information

Rating
6,199-th
Location
Красноярск, Красноярский край, Россия
Date of birth
Registered
Activity

Specialization

Backend Developer, Fullstack Developer
Linux
Java
Kotlin
Android development