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

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

Send message

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

OTP секреты можно бекапить. Лично мои лежат зашифрованные gpg в git репе (-ах).

Если кратко — то телеграмы эти ваши блочат домашние ISP, на серверах в датацентрах такой дичи обычно нет.

Иными словами: готовимся вводить капчи на каждом сайте из сети Cloudflare CDN каждые 15 минут

Вы немножко усложнили себе жизнь на ровном месте. Если давать ld относительные адреса и правильно устанавливать cwd, то получаются действительно нормальные символы:


~ 
➜ ld -r -b binary -o blob.o some/dir/to/blob.png               

~ 
➜ objdump -t blob.o                       

blob.o:     file format elf64-x86-64

SYMBOL TABLE:
0000000000000000 l    d  .data  0000000000000000 .data
0000000000000000 g       .data  0000000000000000 _binary_some_dir_to_blob_png_end
0000000000000000 g       .data  0000000000000000 _binary_some_dir_to_blob_png_start
0000000000000000 g       *ABS*  0000000000000000 _binary_some_dir_to_blob_png_size

А если использовать абсолютные, то да, и символы будут с абсолютным путём
~ 
➜ ld -r -b binary -o blob.o $(realpath some/dir/to/blob.png)

~ 
➜ objdump -t blob.o                                         

blob.o:     file format elf64-x86-64

SYMBOL TABLE:
0000000000000000 l    d  .data  0000000000000000 .data
0000000000000000 g       *ABS*  0000000000000000 _binary__home_prok_some_dir_to_blob_png_size
0000000000000000 g       .data  0000000000000000 _binary__home_prok_some_dir_to_blob_png_end
0000000000000000 g       .data  0000000000000000 _binary__home_prok_some_dir_to_blob_png_start

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

Ну да, этих 100кб очень мне погоду сделают, ага…
image

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

Может кто то привести пример хоть сколько нибудь популярного домена, у которого с 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
Просто выбираете нужную тему и смотрите, как она реализована в данном случае.

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

Information

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

Specialization

Backend Developer, Fullstack Developer
Linux
Java
Kotlin
Android development