Задать вопрос
  • Какой протокол лучше выбрать для шифрованного обмена файлами?

    @Drno
    Cifs - лол)) ни в коем случае)))

    Можно например rcync через ssh. Или его аналог - rclone
    Ответ написан
    Комментировать
  • Какой протокол лучше выбрать для шифрованного обмена файлами?

    @rPman
    https

    Это наиболее 'простой', максимальная поддержка софтом, включая dpi провайдеров (ломающий интернет последнее десятилетие), простой для разработки утилит.

    За ним идет протокол scp или sftp, передача файлов по каналу ssh, готовый инструментарий, (а еще провайдеры его 'отключат' последним, но понижать скорость будут)

    p.s. cifs - худший выбор, не надо так
    Ответ написан
    Комментировать
  • Как массово скачать файлы по списку?

    irishmann
    @irishmann
    Научись пользоваться дебаггером
    Т.е. не получится это сделать с помощью wget в командной строке, т.к. куков не будет

    Кто сказал?
    https://qna.habr.com/q/444245
    wget --no-check-certificate --quiet \
      --method GET \
      --timeout=0 \
      --header 'Cookie: PHPSESSID=ocqfdbv0kv6qs5jv4at6uk36pf' \
       'https://test-mis.ru/api/****************************************'
    Ответ написан
    Комментировать
  • Как защитить обучающие материалы от слива?

    CityCat4
    @CityCat4 Куратор тега Информационная безопасность
    Жил да был черный кот за углом...
    Никак

    Этот вопрос уже обсуждался стопицот раз. И всем обсуждателям я предлагаю небольшой кейс (после которого обычно становится понятно, почему никак)
    Я - легитимный юзер, оплативший все услуги. У Вас нет оснований не показывать мне курс. Я подключаюсь и начинаю просмотр...
    Где подвох, спросите Вы?
    Правильно спросите. Потому что подключаюсь я с виртуалки, а параллельно ей, в абсолютно недостижимой для Вас области работает программа записи экрана. Которая в итоге сграбит все, что там игралось.
    Как Вы собираетесь от этого защищаться?

    Детект виртуалки - и отвалятся все, кто их использует
    Какие-то фантастические варианты типа поляризационных очков - и курс купят полторы калеки
    Ответ написан
    Комментировать
  • Как защитить обучающие материалы от слива?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Никак.

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

    Но можно кое-как защищаться юридически, заявляя свои права на материалы, когда они появятся в публичном доступе.
    Ответ написан
    6 комментариев
  • Как защитить обучающие материалы от слива?

    @sergey_privacy
    Админ со стажем, начинающий DevOps
    Любой контент, отданный пользователю, может быть сграблен. Ни практически, ни теоретически этого избежать не получится. Даже не трать силы/время/деньги на достижение недостижимого.
    Он может поставить камеру и снимать экран.
    Он может подключить устройство по USB и гнать изображение параллельно на соседнее устройство, где происходит запись.
    Ты можешь как угодно пытаться контролировать его компьютер, но он запустит браузер в виртуалке, а на хостовом компе - OSB studio и будет писать все, что творится в виртуалке.
    В этой вселенной на текущем уровне технического развития это абсолютно невозможно. 100500%
    Ответ написан
    Комментировать
  • Как вы делаете code-review?

    sfi0zy
    @sfi0zy
    Creative frontend developer
    У code review должна быть цель. В моей практике обычно проекты небольшие и там нет отдельных тестировщиков. Получается, что code review отвечает на три вопроса:

    1. Соответствует ли функционал ТЗ?
    2. Создает ли код проблемы команде?
    3. Есть ли тут какой-то специфичный для проекта опыт, который лучше задокументировать, пока мы еще в контексте?


    Получается что-то такое:

    • До выполнения задачи: проводится анализ задачи, формулируется ТЗ. Бывает, что нужно подключиться и помочь с требованиями, с контекстом, в котором все делается. Чем более подробный анализ мы делаем и чем лучше мы понимаем контекст на этом этапе, тем больше вероятность, что потом весь процесс выполнения задачи пойдет как по маслу и code review будет чистой формальностью в конце.
    • До ревью: линтеры проверяют код на соответствие стилю, на отсутствие синтаксического бреда.
    • Дальше - проверка на соответствие функционала ТЗ. Это защита от глупых ошибок в продакшене, которые коснутся пользователей.
    • Потом - на сответствие принятым соглашениям по коду, если они есть в проекте. Обычно это архитектурные паттерны и что-то про зависимости, смотрим не создает ли код проблем окружающим, а то разные глупости порой случаются. Особенно это важно в коде, который не сам в себе, а затрагивает много чего вокруг. Иногда возникает конфликт интересов, когда что-то явно устарело, и соглашения дополняются чем-то. Чем лучше был анализ в начале, тем меньше вероятность, что тут будет, что обсуждать.
    • Дальше уточняющие вопросы по странным местам, если они есть. Это больше с целью узнать контекст задачи, почему приняты те или иные решения. Происходит передача специфичных для проекта знаний в сторону команды. Возможно там же будут какие-то рекомендации по поводу практик, на что стоит обратить внимание в следующий раз. Это будет передача опыта от команды.


    А кто там будет, джун или синьер-помидор - не важно. Все люди ошибаются, и всем нужен контекст происходящего для эффективной работы.
    Ответ написан
    Комментировать
  • Как обойти графический интерфейс через Bash-скрипт в Linux?

    #!/bin/bash
    DEBIAN_FRONTEND=noninteractive apt install mysql-server -y
    Ответ написан
    Комментировать
  • В чём можно рисовать SVG иконки для приложения?

    LenovoId
    @LenovoId Куратор тега SVG
    svg, css,js
    в inkscape есть опция : сохранить простой svg и так же есть настройки этой опции
    а вы сохраняете как: inkscape svg

    вот пример кода с inkscape:

    <svg width="210mm" height="297mm" version="1.1" viewBox="0 0 210 297" xmlns="http://www.w3.org/2000/svg">
     <g fill-rule="evenodd">
      <path d="m73.327 135.91v42.409l20.315-4.4317v-36.105z" points="73.327381,178.31548 93.642178,173.88375 93.642178,137.77849 73.327381,135.90663 " fill="#353564"/>
      <path d="m73.327 178.32 34.774 14.139 20.858-8.9974-35.317-9.5736z" points="108.10119,192.45477 128.95966,183.45732 93.642178,173.88375 73.327381,178.31548 " fill="#afafde"/>
      <path d="m93.642 137.78 35.317-4.0436v49.722l-35.317-9.5736z" points="128.95966,133.73484 128.95966,183.45732 93.642178,173.88375 93.642178,137.77849 " fill="#e9e9ff"/>
      <path d="m73.327 135.91 34.774-5.9721 20.858 3.8003-35.317 4.0436z" points="108.10119,129.93452 128.95966,133.73484 93.642178,137.77849 73.327381,135.90663 " fill="#4d4d9f"/>
      <path d="m108.1 129.93v62.52l20.858-8.9974v-49.722z" points="108.10119,192.45477 128.95966,183.45732 128.95966,133.73484 108.10119,129.93452 " fill="#d7d7ff"/>
      <path d="m73.327 135.91 34.774-5.9721v62.52l-34.774-14.139z" points="108.10119,129.93452 108.10119,192.45477 73.327381,178.31548 73.327381,135.90663 " fill="#8686bf"/>
     </g>
    </svg>


    здесь я чуток поправил viewbox но делать надо это в редакторе



    а свои какие то приколы любой редактор svg оставляет
    Ответ написан
    Комментировать
  • Как использовать service worker на localhost?

    @AlexanderMi
    Software Developer
    когда мне была нужна имитация https с "зеленым щилдом" в браузере, я делал запись в hosts:
    awesome.cool.app 192.168.100.101

    где 192.168.100.101 это твой адрес в локальной сети. Выясняется через ipconfig

    выпускал сертификат самоподписной для awesome.cool.app
    и добавлял его в хранилище через certutl -addstore

    дальше браузер работал по адресу https://awesome.cool.app/ ничего не подозревая. Сертификат валиден, действует.
    Но у меня задача была веб-сервер на апаче поднять исключительно для localhost, так что бы ssl тоже работал, хоть iis хоть апач запущенные с привязкой к сетевому адресу - работали шикарно по ssl.

    работает ли этот финт с 127.0.0.1 - не помню
    Ответ написан
    1 комментарий
  • Можете объяснить как работает перевод чисел с одной системы счисления в другую?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    (xkxk − 1...x1x0)n = x0 * n0 + x1 * n1 + ... + xk − 1 * nk − 1 + xk * nk
    Где x0...xk - цифры числа в системе счисления по основанию n.
    135467 = 1 * 74 + 3 * 73 + 5 * 72 + 4 * 71 + 6 * 70 = 370910
    370910 = 2 * 123 + 1 * 122 + 9 * 121 + 1 * 120 = 219112
    Ответ написан
    2 комментария
  • В чем разница между str и &str?

    vabka
    @vabka Куратор тега Rust
    В принципе тут уже есть хорошие ответы, но я перефразирую, чтобы было чуть понятнее другим.

    str - это встроенный тип, который представляет из себя последовательность из байтов utf8.
    Размер значения str не известен во время компиляции, а по тому нигде его нельзя применить в чистом виде (только как содержимое какого-нибудь типа-указателя)
    Можно провести аналогию с массивом (только в случае массивов размер таки известен, но его тоже достаточно редко используют в таком чистом виде)

    &str - это ссылка на эту последовательность байт.
    Это может быть ссылка на содержимое String или ссылка на строковый литерал (&'static str)

    Кстати, String под капотом - это Vec<u8>
    Ответ написан
    Комментировать
  • В чем разница между str и &str?

    Erik_Mironov
    @Erik_Mironov
    Старые вопросы: *Dies from cringe*
    str представляет собой неизменяемую последовательность байтов UTF-8 динамической длины где-то в памяти. Поскольку размер неизвестен, его можно обрабатывать только за указателем. Это означает, что str чаще всего используется как &str — ссылка на некоторые данные UTF-8, обычно называемые «срезом строки» или просто «срезом». Срез — это просто представление данных, и эти данные могут быть где угодно, например:

    - В статическом хранилище: строковый литерал "foo"представляет собой файл &'static str. Данные жестко закодированы в исполняемый файл и загружаются в память при запуске программы.

    - Внутри выделенной кучи: String разыменовывает представление &str в строке.

    - На стеке: Например, в следующем примере создается массив байтов, выделенный стеком, а затем он получает представление этих данных как &str:

    use std::str;
    
    let x: &[u8] = &[b'a', b'b', b'c'];
    let stack_str: &str = str::from_utf8(x).unwrap();


    Используйте String, если вам требуется владение строковыми данными (например, передача строк в другие потоки или их создание во время выполнения), и используйте &str, если вам нужно только представление строки.
    Ответ написан
    1 комментарий
  • Как работает этот код? Почему у функции появляется метод?

    @LJ322
    const cancelable = fn => { // Создаётся функция cancelable, которая принимает функцию и сохраняет в переменную fn
      const wrapper = (...args) =>{ // Создаётся функция-обёртка, которая принимает любой набор аргументов
        if(fn) return fn(...args) // Если в cancelable была передана функция, то вызывает её с необходимыми аргументами
      }
    
      wrapper.cancel = () => fn = null // Добавляет свойство во wrapper для очистки переменной fn 
    
      return wrapper // Возвращает обёртку
    }
    
    const fn = par =>{ // Функция, которая оборачивается в декоратор со своим аргументом
      console.log('Function called, par:',par)
    }
    
    const f = cancelable(fn) // Создаёт обёртку вокруг fn
    
    f('first') // Function called, par: first
    f.cancel() // fn является переменной внутри cancelable, здесь мы её обнуляем
    f('second') // Ничего не выводит, потому что условие у wrapper отрабатывает, только если функция есть
    Ответ написан
    Комментировать
  • Какой процессор выбрать под виртуальные машины?

    @Drno
    ну логично что 11 поколение мощнее))) так что бери его

    если жестко собрался к ядрам привязываться - тогда 10е...

    и зачем на linux VB, когда там есть офигенный Qemu-KVM?)
    Ответ написан
    1 комментарий
  • Как практиковаться в программировании?

    Adamos
    @Adamos
    от выбора библиотек

    Да, это сложно.
    Надо, во-первых, понять, что тебе вообще надо.
    Потом поискать, как это вообще решается. Сейчас, когда есть гугль и форумы, этот этап стал значительно легче.
    И вот когда перед тобой распахнется все богатство выбора решений и возможностей - не искать самое оптимальное и правильное, а взять первое попавшееся, описание которого тебе в общем понятно. И по этому понятному руководству нарукоблудить кучу говнокода, добиваясь единственной цели - чтобы оно заработало.
    После того, как полученный продукт все-таки запустится и будет удален, кругозор немного изменится, и дальше пойдет легче...
    Ответ написан
    Комментировать
  • Что значит этот код?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    что значит код

    ubfx r0, r0, #1, #1 -- извлечь битовое поле шириной 1 бит (правая единица) начиная с бита №1 (левая единица) из регистра r0 (правый r0) и поместить результат в r0 (левый r0).
    bx lr -- перейти по адресу в регистре lr, обычно это возврат из подпрограммы.
    Семантика опкодов легко гуглится по названию опкода и названию архитектуры процессора.

    какая между ними разница

    ubfx r0, r0, #1, #1
    ubfx r0, r0, #2, #1
    теперь, когда ты знаешь, что это за опкод, ты можешь понять сам, что они извлекают битовое поле начиная с разных битовых позиций.

    что я делаю не так

    ты не написал, что конкретно ты делаешь: что и где меняешь и как проверяешь результат.
    Ответ написан
    3 комментария
  • Существуют ли сервисы анализа кода сайтов?

    DevMan
    @DevMan
    не существует. иначе обфускация (минимизация - частный вид обфускации, хоть и с другими целями) не имела бы место быть.

    для разбора логики достаточно профилировщиков с трейсом вызовов, а не читаемых названий.
    Ответ написан
    2 комментария
  • Как понять какой код сейчас выполняют потоки?

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

    Но если не получится это применить (например на целевой машине не стоит студия/райдер) или это просто слишком неуловимая ошибка, то Тогда остаётся только обмазаться телеметрией (логами, метриками) и смотреть, что происходит.
    Ответ написан
    6 комментариев
  • Какие основные понятия в ООП?

    Агрегация/Ассоциация/Композиция - это всё виды взаимоотношений между разными типами. Это не принципы
    Абстракция - это просто сама возможность вводить какие-то новые абстракции, поверх уже существующих. Ради этого ООП и придумано.

    ИМХО, вот эти все попытки выделить основные принципы ООП в современном мире не имеют смысла, тк языки сейчас мультипарадигменные и постоянно добавляют и убирают какие-то части.

    И уже споров о глубинном смысле трёх волшебных слов была целая куча (а ведь если бы кто-то когда-то не решил всё уместить в одиночные слова - этой неразберихи бы не было)

    Так что из всех принципов, которые объединяют все более-менее ООП-языки остаётся только:

    1. Всё есть объект, и объект объединяет под собой некоторые данные (которые могут быть не доступны публично) и операции (методы или функции), которые можно произвести над совокупностью этих данных.
    2. Имеется какой-нибудь механизм для полиморфизма.

    В общем-то первый такой принцип можно назвать этой самой абстракцией и, отчасти, инкапсуляцией.
    Ответ написан
    Комментировать