• Безопасно ли в Германии качать торренты через свой VPN на основе Outline?

    Q2W
    @Q2W
    Мне хетцнер пару раз писал письмо о том, что им писали письмо правообладатели о том, что засекли скачивание их спираченного контента через торрент с айпи этого хетцнеровского сервака.
    Отбрехался, но больше скачивать через этот сервак не даю.
    Ответ написан
    1 комментарий
  • Как шифровать по паролю на golang ассиметричным шифром?

    Q2W
    @Q2W Автор вопроса
    1. Сделал так:
    func (kbr keyBytesReader) Read(p []byte) (n int, err error) {
    	n = copy(p, (*kbr.key)[*kbr.offset:])
    	if n < len(p) {
    		err = bytes.ErrTooLarge
    	}
    	*kbr.offset += n
    	return
    }
    
    func PasswordToPrivateKey(password string) (privateKey *rsa.PrivateKey, err error) {
    	dk := pbkdf2.Key([]byte(password), []byte(salt), 1024, 512*1024, sha512.New)
    	kbr := keyBytesReader{&dk, new(int)}
    	privateKey, err = rsa.GenerateKey(kbr, 4096)
    	return
    }


    И это не работает, т.к.:
    1. (решаемо) нет повторяемости результата генерации ключа по результату работы pbkdf2.Key в качестве рандома.
    2. (не решаемо или сложно решаемо) в RSA-ключе должны быть простые числа. Т.е. далеко не всякий рандомный набор байт подойдёт.

    Ну и чисто в теории пароль обладает много меньшей энтропией, чем 4096-битный RSA-ключ.

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

    2. За то работает для криптографии на эллиптических кривых:
    argon2Key := argon2.IDKey([]byte(password), []byte(salt), 1, 64*1024, 4, 128)
    privateKey, err = ecdsa.GenerateKey(elliptic.P521(), bytes.NewReader(argon2Key))
    Ответ написан
    Комментировать
  • Как пробросить родной китайский 4G интернет (из приграничного города) в другой город РФ?

    Q2W
    @Q2W
    Быть может стоит где-то ещё поднять впн-сервер и с обоих точек к нему подключиться?
    И настроить роутинг со стороны машины в ту вторую точку?
    Ответ написан
    Комментировать
  • Имеется ли определение адреса через GeoIP по прокси серверу?

    Q2W
    @Q2W
    Могут спалить через DNS (не все пользователи VPN настраивают DNS так, чтобы тот резолвил тоже через VPN).
    Могут спалить через русский язык в браузере.
    И ещё есть куки, в т.ч. куки рекламных площадок. А по ним за денежку можно получить разные данные.
    Ответ написан
  • Где оправдано применение Node Js?

    Q2W
    @Q2W
    По моим ощущениям ноду используют фронтендеры, которые хотят простой бекенд и не хотят заморачиваться.

    Ну и server side rendering для фронта, написанного на каком-нибудь реакте, ангуляре, вью, свелте не просто организовать без ноды на сервере.
    Ответ написан
    5 комментариев
  • Есть ли смысл учиться в вузе на заочном, платно, на информатике?

    Q2W
    @Q2W
    Корочка в IT не нужна.
    Скорее всего потому, что ВУЗы толково и не учат айти специальностям.
    Бывают редкие исключения. Наверное.
    Но при приёме на работу всем до лампочки, что у тебя там с бумагами. Решает собес. А на собесе решает опыт и соображалка.

    Вот в европах корочки может и нужны. Тут не знаю. Говорю за РФ.
    Ответ написан
  • Роутер из ноутбука. Как сделать?

    Q2W
    @Q2W
    Я себе сделал на базе debian.
    В роутере на базе старого ноута всё хорошо. Кроме одного: открытые драйвера на wifi часто не позволяют использовать все каналы wifi, а частенько даже 5Ггц каналы.
    А когда дают, то с редкими, но неприятными перебоями.
    В итоге я через несколько лет плюнул и добавил к своему роутеру хорошую точку доступа.
    Да, она роутит трафик внутри вайфая без меня, но и пофиг =)
    Ответ написан
    Комментировать
  • Это брутфорс детский был или что это такое?

    Q2W
    @Q2W
    Регулярно такое случается. Обычное дело.
    Сервак угнан скорее всего. Но стоит пожаловаться в digital ocean.
    Ответ написан
  • Логика в ларавеле пишеться в контроллерах?

    Q2W
    @Q2W
    По логике вещей должно быть так:

    Модель отвечает только за валидность данных.
    Контроллер отвечает за бизнеслогику.
    Представление понятно за что отвечает.

    Бизнеслогику в моделях держат весьма странные специалисты.
    Ответ написан
  • Что разрабатывать на Java?

    Q2W
    @Q2W
    Как я знаю, в продакшн на java пишут или кровавый энтерпрайз, или унылые andoid-приложения.
    Ответ написан
    Комментировать
  • Macbook Pro 2015 год, стал разряжаться за 1-2 часа?

    Q2W
    @Q2W
    Аккумуляторы деградируют.
    Почему не плавно: критическая просадка напряжения только сейчас стала проявляться. Литий почти до полного разряда отдаёт ток без особой просадки напряжения.
    Ответ написан
  • Как оказать первую помощь смартфону-утопленнику?

    Q2W
    @Q2W
    Я делал так:
    1. Разобрал максимально.
    2. Положил всё в рис. Он вытягивает на себя влагу.
    3. Подождал сутки.

    Телефон после этого проработал ещё долго.
    Ответ написан
    4 комментария
  • Как задать backgroundSize в js?

    Q2W
    @Q2W
    Свойство задаётся, посмотрите в дебаггере.
    Вопрос, почему ничего не меняется, лежит уже в плоскости css.
    Ответ написан
    3 комментария
  • Куда переходить с Ubuntu 14.04?

    Q2W
    @Q2W
    Перешёл с ubuntu на debian stable несколько лет назад по той же причине.
    И радости моей нет предела с тех пор. Всё работает как часы.
    Ответ написан
    Комментировать
  • Порекомендуйте, на чём сделать backend?

    Q2W
    @Q2W
    На каждом из указанных языков можно сделать быструю реализацию.
    Судя по вот этому:
    Минус в том, что после каждого выполнения скрипт убивается

    Смущает его однопоточность.

    вопрос больше стоит в плоскости опыта программирования, чем выбора конкретного языка.
    Но даже без учёта этого обычно эффективней всего писать на том, на чём лучше всего умеет команда.
    Ответ написан
    Комментировать
  • Концепция прав пользователя сайта, как сделать?

    Q2W
    @Q2W
    Большинство оптимизаций производительности обычно сводится к тому, чтобы тяжёлую работу выполнять не тогда, когда нужно быстро получить результат, и вообще снизить объём работы.

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

    Поэтому в любом случае придётся в каких-то моментах выбирать или-или.

    На счёт производительного слоя доступа, я делаю обычно примерно так:
    Вот у меня есть объекты, настройки доступа к которым влияют на другие объекты, доступ к которым тоже настраивается (буду использовать в качестве примера папки).
    При смене настроек доступа к папке для каждой подпапки я вычисляю эффективные настройки доступа. Т.е. посколько запреты доступа на родительской папке добавляются к запретам на дочерней, то эффективные настройки доступа дочерней включают и те запреты, и эти.
    Так вот для каждой папки я храню не только изначальные настройки доступа, которые юзер задал конкретно этой папке, но и все запреты всех родительских папок до корня.
    Так мне при решении о том, давать ли доступ к каждому объекту не нужно загружать из БД настройки доступа всех родительских объектов. Но за то изменение настроек доступа замедляется. Обычно это ок.

    Если этого недостаточно, то вот как я оптимизирую получение списка доступных объектов.
    Обычно все выборки объектов можно как-то систематизировать. Например, в случае с папками и файлами выборки бывают такими:
    1. Список подпапок папки A.
    2. Список файлов папки А в сортировке по рейтингу.
    3. Список файлов папки А в сортировке по дате создания.
    4. Список файлов папки А и всех её подпапок в сортировке по рейтингу.
    5. Список файлов папки А и всех её подпапок в сортировке по дате создания.

    Настройки доступа к папкам меняют видимость целых кусков таких выборок. Например, для выборки №1 - для каких-то юзеров может появиться или пропасть один элемент из-за изменения на нём настройки доступа.
    Для выборок 2 и 3 может пропасть или появиться сразу всё содержимое выборки.
    Для выборок 4 и 5 может пропасть или появиться та часть выборки, которая находится непосредственно в папке и изменённой настройкой доступа, а так же в её подпапках.

    Так вот можно нарезать уникальных фрагментов всех выборок так, что каждый фрагмент будет содержать файлы с уникальным набором запретов доступа. Потом эти фрагменты нужно где-то хранить. Это производная выборка от целевой.
    Т.е. если целевая выборка - это просто выборка всех файлов папки в какой-то сортировке, а слой доступа уже после выборке должен нафильтровать только доступные, то у нас будет не так, ибо это дорого. У нас заранее будет готов список объектов, доступный по определённому уникальному набору запретов.
    А когда происходит запрос на выборку доступных объектов, мы узнаём, какие вообще есть фрагменты, какие у них настройки доступа, какие из них доступны нашему юзеру.
    Потом выбираем из БД содержимое всех доступных фрагментов и, поскольку внутри это сортированные списке, сливаем их занедорого.
    Так же недорого можем получить такой список со смещением. Т.о. можем получать не весь список целиком, ведь он может быть очень большим, но и брать его частями. Например, для постраничного вывода.
    Но это будет работать только если настройки доступа к папкам не особенно разнообразны. Обычно это так и есть.

    В общем вот в таком ключе обычно всё.
    Ответ написан
    Комментировать
  • Как достучаться до объекта в json?

    Q2W
    @Q2W
    доступКсерверу.data['2067983'].statistics.all.countOf
    Ответ написан
    Комментировать
  • Какова теоретическая предельная дальность Bluetooth?

    Q2W
    @Q2W
    Антенна ведь как раз и нужна для увеличения показателя сигнал/шум.
    А скорость распространения радиоволн у всех протоколов одинаковая.
    Только антенна нужна с двух сторон.
    Ответ написан
    Комментировать
  • Графическое представление работы скрипта на Perl

    Q2W
    @Q2W
    Дело в том, что perl понимает только интерпретатор perl. Так что вряд ли есть такой софт.
    Ответ написан
    1 комментарий