• Почему не получается преодолеть барьер в изучении программирования?

    @k4nt
    Здравствуйте.
    Я так же, как и Вы учусь программировать. Лично мне никакое изучение материала не давало результата.
    Только когда у меня появилось к чему приложить свои знания (я сам придумал себе интересный проект и делаю его) у меня появилась больше мотивации в изучении.
    Я не смотрю курсы, не читаю литературу. Я заполняю нужные мне пробелы в знаниях исходя из практики. Да, явно с точки зрения специалиста у меня всё криво, можно лучше и тд, но знания гораздо лучше остаются в моей голове и мотивация падает только тогда, когда я упираюсь во что-то сложное для себя. Пару дней голова поварит, я соберу нужные знания и снова продвигаюсь к реализации своего мини проекта.
    Ответ написан
    2 комментария
  • Что почитать про программирование под Линукс?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Да, есть абстрактное "программирование под Windows", связанное с тем, что в ней все через ... спину. Но "абстрактного программирования под Linux" нет.

    Есть задача - бери и решай ее. Возникают вопросы - гугли конкретный вопрос. Написание книги (скажу тебе как автор одной такой книги) - процесс долгий, ее издание - примерно столько же - так что к моменту ее выхода она может уже ... устареть :)
    Ответ написан
    3 комментария
  • Что почитать про программирование под Линукс?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    А под линукс как-то особенно программировать не требуется. Наоборот можно уже писать кроссплатформенно.
    У винды много своей специфики, связанной со странными особенностями файловой системы, с выкрутасами в плане использования кодировок в терминале, в файловой системе, в остальных местах... Когда начинаешь кодить на линукс и под линукс, то аж дышится легче.
    Начинаешь думать, что интерфейсы можно делать не нативно, а в виде веб-интерфейсов, которые отлично смогут работать и в облаке, и прямо на роутере, и локально.
    В линуксе гораздо проще и каноничнее всё с доке-контейнерами, стандартной является вся инфраструктура командной строки, свзанная с механизмами автоматизации: стандартные тулзы, make, системы управления пакетами...
    Поднять на линуксе изолированную повторяемую среду получатся гораздо проще, чем в винде.

    Вообще не понятно, конечно, о каком програмировании речь. Тут и системное программирование упоминалось, и GUI...
    По собственному опыту скажу, что сомнения при переходе на разработку под линукс в основном надуманные и ненужные. Переход происходит естественно и непринужденно.
    Особенно подкупает встроенная в систему хорошая документация и огромное количество структурированной информации в сети. Даже книг каких-то специальных читать не пришлось. Просто по обстоятельствам ищем статьи и мануалы по конкретным темам: особенности и устройство файловой системы, пайпы, потоки, процессы, система прав доступа...
    Ответ написан
    1 комментарий
  • Как исправить "cannot borrow as mutable"?

    vabka
    @vabka Куратор тега Rust
    Попробуй вместо того что у тебя написано использовать entry()
    self.on_event_closure
      .entry(event)
      .or_insert_with(Vec::new)
      .and_modify(move |vec| vec.push(f));


    А нельзя borrow as mutable из-за того что get заимствует on_event_closure
    Ответ написан
    1 комментарий
  • Как посчитать количество символов в char на С?

    @res2001
    Developer, ex-admin
    Конкретно для приведенного примера можно делать так: (sizeof(text) - 1)
    Это будет работать только в подобных случаях, когда text - это статический/автоматический массив фиксированного размера (как в данном примере). -1 требуется, чтоб удалить завершающий нулевой символ.
    Преимущество перед strlen в том, что sizeof вычисляется на этапе компиляции, т.е. по факту в коде вместо этого выражения будет константа 14, вычисленная компилятором.
    Кстати, можно делать еще так: sizeof("Literal string") - 1

    Если text будет определена по другому, например char *text = "Literal string";, то такой подход уже не прокатит.
    Универсальный вариант, который будет работать для всех случаев однобайтной строки с завершающим нулем - использовать strlen.
    Ответ написан
    Комментировать
  • Как реализованы программы записи экрана и стриминга?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Используются системные api. Все полатформо зависимое, к сожалению. На винде можно делать через кучу разных апи: gdi+, dxgi, wgc. Гуглите "слово из списка capture screen".

    Далее, похоже нужно будет реализовывать виртуальную камеру. Тут гуглите апи dshow. Уже с этим можно ваш проект прикручивать к существующим стриминг платформам.

    Если же вам хочется сделать все свое (включая бакенд) то можно воспользоваться библиотекой webrtc.
    Ответ написан
    Комментировать
  • Какой протокол лучше выбрать для шифрованного обмена файлами?

    @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 Куратор тега Информационная безопасность
    //COPY01 EXEC PGM=IEBGENER
    Никак

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

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

    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 комментарий