• Разбиение локалки на подсети?

    Mi11er
    @Mi11er
    A human...
    Для вашего вопроса , существует vlan .
    Ответ написан
    5 комментариев
  • Разбиение локалки на подсети?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Теоретически так. Практически, для таких целей обычно используют другие адреса: 172.16.0.0 с маской 255.240.0.0 или 10.0.0.0 с маской 255.0.0.0
    Ответ написан
    Комментировать
  • Как в микротик настроить две локальных сети?

    @Drno
    Выделить для этого отдельный интерфейс
    Настроить на него адрес
    Настроить на нём dhcp при необходимость
    Разрешить NAT для этой подсети в фаерволе
    Ответ написан
    Комментировать
  • Как отдать объект без некоторых полей?

    @Voland69
    Строить разные модели (регистрация, логон, инфо о юзере) и маппить их на сущность из базы.
    Если разово, можно конечно [JsonIgnore] навесить, просто не попадет в сериализацю.
    Ответ написан
    2 комментария
  • Как найти самое часто встречаемое число в массиве?

    0xD34F
    @0xD34F Куратор тега JavaScript
    const mostFrequentNum = Array
      .from(arr.reduce((acc, n) => acc.set(n, -~acc.get(n)), new Map))
      .reduce((max, n) => max[1] > n[1] ? max : n, [ , 0 ])
      .at(0);

    или

    const mostFrequentNum = Object
      .entries(arr.reduce((acc, n) => (acc[n] = (acc[n] ?? 0) + 1, acc), {}))
      .reduce((acc, n) => (acc[n[1]] = +n[0], acc), [])
      .pop();
    Ответ написан
    2 комментария
  • RAID 1 из дисков разной емкости?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Можно собрать два зеркала 1:1 и 0.5 : 0.5 и потом склеить их через какую-то умную файловую систему типа zfs.
    Ответ написан
    Комментировать
  • RAID 1 из дисков разной емкости?

    @rPman
    Программный рейд mdadm или фишки файловых систем btrfs и zfs, позволяют создавать raid массивы на основе разделов а не дисков (вообще любых блочных устройств, в т.ч. каскадно), производитель дисков или дискового контроллера будет не важен

    В твоем случае ты можешь разбить 1т.б. диски на по 2х 500гб раздела, и объединить по отдельности первые с 500гб дисками и вторые друг с другом
    Ответ написан
    Комментировать
  • RAID 1 из дисков разной емкости?

    @Drno
    Сделайте 2 raid 1 и дальше объедините в lvm
    Ответ написан
    7 комментариев
  • Как мне укоротить код, но так, чтобы функционал не менялся?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    отрефакторите, вынесите куски кода в функции, текстовые строки в константы, да и вообще используйте форматированные строки

    let message = `Ничья
    Вы победили ${userScore} раз
    Компьютер ${computerScore} раз`
    Ответ написан
    Комментировать
  • Можно ли без высшего образования работать в Геймдеве?

    GavriKos
    @GavriKos Куратор тега Разработка игр
    На наличие вышки никто не смотрит. Но она не лишняя. Как минимум глубоко в рендер-пайплайне сидят матрицы - и это уже ВУЗовская математика (если программа не поменялась). +вышка это хорошая школа жизни (ща в меня полетят тапки - но это личное мнение), которая поможет выстроить в т.ч. коммуникативные навыки.

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

    mayton2019
    @mayton2019
    Bigdata Engineer
    Чтение книг тут вобщем-то не очень полезно потому что каждый автор описывает линукс применительно к каким-то промышленным решениям где сразу "всего много". Много хостов в сети. Много серверов приложений и хранилищ и много задач.

    Изучать будет трудно. Линукс не прощает грубых ошибок. Если проводить аналогии то Windows - это электродрель где всё в резиновых ручках безопасно и красиво и удобно лежит в руке. С такой дрелью вам ничего не грозит. И можно сделать дырочки в стенах безопасно. А Линукс в этом сравнении - это строительный бур, которым вы можете снести стену, но и легко пробурить себе ногу. Тоесть когда вы начнёте эксперименты (особенно на привилегиях root) то думайте что по ту сторону нет вообще никаких защит. Удалить корень файловой системы одним жестом очень просто, как уже отметили выше.

    Но для домашнего варианта можно придумать нечто вроде : создать свою мини-сеть с DNS, файрволом, прокси, и медиасервером для фильмов. Вот с этого можно начинать. Можно поднять игровые серверы Майнкрафта, фермы майнинга или генерации радужных таблиц. По поводу Mint - всё в принципе хорошо. Вообще важен не дистрибутив а скорость трабл-шутинга. И надо не боятся работать с консолью. Не надейтесь что если вы подняли Smb через UI - то это достижение. Нужно поймать траблу. Зайти в консоль и ее пофиксить. Я гарантирую что через UI большинство траблов не фиксятся. В этом есть особая философия. Поэтому и устанавливайте и конфигурите софт через консоль.
    Ответ написан
    1 комментарий
  • Как по ховеру на картинку показывать другую картинку?

    Rst0
    @Rst0
    Ответ написан
    Комментировать
  • Есть ли способ красиво вызвать addeventlistener несколько раз?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Обычно делают так:
    document.body.addEventListener('mouseenter', function(e) {
        console.log(e.target);
    });

    В переменной e.target будет лежать целевой элемент, проверяйте его на соответствие и если он соответствует...

    code.mu/ru/javascript/manual/dom/matches
    Ответ написан
    Комментировать
  • Запуск своей программы вместо графической оболочки в Linux?

    @PapaNT
    Если киоск нужен как защита от дурака, а не нечто серьезное по уровню безопасности, то достаточно простым решением будет:
    1. Графическая оболочка LXDE
    2. Прописать свою программу в автозапуск
    3. Удалить панель с кнопкой "Пуск"
    Ответ написан
    Комментировать
  • Запуск своей программы вместо графической оболочки в Linux?

    uvelichitel
    @uvelichitel
    habrahabr.ru/users/uvelichitel
    После аутентификации(login: password:) я попадаю в консоль в которой уже могу работать. Далее я выполняю:
    $ startx
    Эта команда запускает иксы, xserver(графический интерфейс). Эта команда читает конф файл /home/user/username/.xinitrc
    Мой выглядит так:
    xrdb ~/.Xresources # Читаем конфигурацию для иксов
    setxkbmap -option grp:alt_space_toggle -option grp_led:scroll us,ru # Переназначение перекдючения раскладки
    xmodmap -e 'clear Lock' -e 'keycode 0x42 = oslash Caps_Lock'  # Переназначение клавиши CapsLock
    exec dbus-launch --exit-with-session bspwm  # Собственного запуск оконного менеджера который мне нравится. Можно запустить другой оконный менеджер. Или любимую графическую оболочку. Или вообще любую программу с графическим интерфейсом.
    Ответ написан
    1 комментарий
  • Запуск своей программы вместо графической оболочки в Linux?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Запросто.

    Запуск DE - это просто скрипт, который выполняется при входе через DM. Ну, либо запуск программы через .xinitrc, если это старинный способ запуска через startx.

    Меняешь скрипт/прописываешь нужную прогу в .xinitrc - и все
    Ответ написан
    Комментировать
  • Запуск своей программы вместо графической оболочки в Linux?

    @rPman
    Например
    1. отключаешь display manager - lightdm (или что у тебя там для меню авторизации и выбора DE)
    2. минимум что необходимо для работы графического режима - это xserver, для его запуска достаточно запустить утилиту X (кстати кажется до сих пор требует root), будет запущен графический сервер без Desktop Environment, но нужно понимать что DE отвечает за управление окнами, а точнее управление их размерами, положением на экране и вообще сокрытие/минимизация. Т.е. без этого, если твое приложение ожидает что пользователь будет перемещать его окна (а это к примеру диалоговое окно открытия/сохранения файлов) то он уже это сделать не сможет, все окна будут без заголовков и бордюра для изменения их размеров.
    И кстати, чтобы графическое приложение запустилось и отображалось на X нужно устанавливать переменную окружения DISPLAY, значение смотреть либо в конфиге X либо в логах (скорее всего будет что то типа :0, это имя сервера и номер xserver, запущенного на нем, напоминаю, что linux из коробки умеет multiseat)
    3. чтобы появился хоть какой то интерфейс взаимодействия, нужно установить DE, из минималистичных, идеальных для kiosk mode - я бы рекомендовал awesome, в нем к примеру можно настроить чтобы все открываемые окна сразу разворачивались на весь экран.

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

    Из минималистичных и вполне функциональных DE можно предложить еще какой-нибудь openbox, его можно настроить так чтобы вообще никаких 'пуск' и списка задач не было, а только иконки и приложение на весь экран. Но пользователь сможет добраться до редактирования меню и запустить любое приложение, т.е. это не для kiosk mode

    Чтобы запустить xserver с DE автоматически можно либо настроить автозагрузку в lightdm (это правильно) либо просто запускать утилиту startx, которая смотрит в пользовательском каталоге .xinitrc и запускает DE от туда.

    На самом деле процесс запуска DE стал очень замудреный, его запутали несколько поколений разработчиков и выпутывать не желают, но обычно все это критично для тяжелых DE типа KDE, а что то простое и легкое с приложениями на gtk работает и так

    Собственно как запускать приложения автоматически при включении компьютера тоже вопрос очень интересный, способов много, минимум три могу предложить
    * правильный - настроить службу и прописать ей зависимости и автозапуск,
    * так же до сих пор есть устаревший способ настройки службы без зависимостей sysvinit - /etc/init.d
    * ну еще есть /etc/rc.local
    Ответ написан
    1 комментарий
  • Как пустить часть трафика через VPN?

    Vindicar
    @Vindicar
    RTFM!
    Есть два подхода. В обоих случаях тебе нужен список заблокированных IP, его можно взять на антизапрете, например.
    Дальше вопрос, как пускать трафик.
    1. На хабре был материал про динамическую подгрузку маршрутов через BGP. Плюс - работает с любыми протоколами, и не требует дополнительной настройки со стороны проксируемого ПО. Минусы - ощутимо сложнее в понимании, на мой взгляд, да и с кроссплатформенностью могут быть проблемы. В статье приведена реализация на роутере Mikrotik.
    2. Использовать файл proxy.pac. Его можно сгенерировать скриптом типа такого:
    #!/bin/bash
    #!/bin/bash
    DNS_SERVER=8.8.8.8
    BLACKLIST_URL="http://antizapret.prostovpn.org/iplist.txt"
    #куда класть файл proxy.pac
    PACDIR=/var/www/html
    TMPLIST=/tmp/iplist.txt
    #домены, которые нужно пускать через прокси независимо от содержимого iplist.txt
    DOMAINS=(\
    rutracker.org \
    facebook.com \
    facebook.net \
    fbcdn.net \
    twitter.com \
    twitter.co \
    t.co \
    twimg.com \
    twitpic.com \
    periscope.tv \
    pscp.tv \
    )
    #качаем чёрный список
    wget -q --tries=10 -O "$TMPLIST" "$BLACKLIST_URL"
    # вытаскиваем IP наших прописанных доменов
    declare -a EXTRAIPS=()
    for domain in "${DOMAINS[@]}"
    do
            dig A "$domain" +short @$DNS_SERVER | grep -v '\.$' >>"$TMPLIST"
    done
    #в чёрном списке есть отдельные IP и есть подсети
    #также чёрный список очень длинный, поэтому кодируем его более компактно.
    IPLIST=`grep -Ex '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' "$TMPLIST" | awk '/^[0-9]+/ {split($1,b,/\./); printf("0x%02x%02x%02x%02x,", b[1],b[2],b[3],b[4]);}'`
    SUBNETLIST=`awk '/[0-9.]+\.[0-9]+\.[0-9]+\.[0-9]+\/[0-9]+/ {split($1,p,/\//); printf("[\"%s\", %s], ", p[1], p[2]);}' <"$TMPLIST"`
    #генерируем proxy.pac по шаблону
    #он проверяет домен на вхождение в фиксированные домены, а потом IP по списку.
    function templatePAC {
            NAME=$1
            shift
            DMNLIST=("$@")
            cat >"$PACDIR/$NAME" <<EOF
    function FindProxyForURL(url, host) {
      var domainblacklist = [
    EOF
            for d in "${DMNLIST[@]}"
            do
                    echo "  '$d'," >>"$PACDIR/$NAME"
            done
            cat >>"$PACDIR/$NAME" <<EOF
      ];
      var ipblacklist = [ $IPLIST ];
      var subnetblacklist = [ $SUBNETLIST ];
    
      function endsWith(str, suffix) {
        return str.indexOf(suffix, str.length - suffix.length) !== -1;
      }
      function numberToMask(n) {
        var m=[0,128,192,224,240,248,252,254,255];
        var r=[];
        for (var i=0; i<4; i++) {
          var p = (n > 8) ? 8 : n;
          r[i] = m[p];
          n -= p;
        }
        return r.join(".");
      }
      function maskMatch(ip, mask) {
        var m = numberToMask(mask[1]);
        return isInNet(ip, mask[0], m);
      }
    
      var blocked = false;
      for (var i=0; !blocked && (i<domainblacklist.length); i++)
        blocked = blocked || ((host == domainblacklist[i]) || endsWith(host, '.'+domainblacklist[i]));
      if (!blocked) {
        var ip = dnsResolve(host);
        for (var i=0; !blocked && (i<subnetblacklist.length); i++)
          blocked = blocked || maskMatch(ip, subnetblacklist[i]);
        blocked = blocked || (ipblacklist.indexOf(convert_addr(ip)) != -1);
      }
      if (blocked)
        return "PROXY ТУТ_ТВОЙ_ПРОКСИ:ПОРТ";
      else
        return "DIRECT";
    }
    EOF
    }
    # генерируем файл
    templatePAC proxy.pac "${DOMAINS[@]}"
    
    rm -f "$TMPLIST"

    Тогда можно отдавать этот proxy.pac любым веб-сервером (но лучше внутри VPN - если VPN не работает, то смысл в файле?), и настроить браузер на его использование.
    Минусы: работает только с браузерами, требует наличия вебсервера и полноценного прокси-сервера внутри VPN-сети (т.е. просто арендованный VPN не подойдёт, нужен VPS). Но мне показалось это проще в понимании, чем возня с BGP, да и требуется только наличие современного браузера и VPN клиента, без привязки к роутеру. Можно хоть на ноуте настроить, как я сделал.
    Ответ написан
    Комментировать
  • Как с помощью return вернуть две переменные?

    Есть несколько вариантов:
    1. Возвращать массив
    2. Объявить свою структуру или класс, в которой будет два нужных значения в виде полей или свойств
    3. Возвращать кортеж
    Ответ написан
    Комментировать
  • Как настроить двухстороннюю связь между flask и JS?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    1. Пишешь API на Flask. Статей в интернете куча, например эта.
    2. Из своего JS скрипта обращаешься к API, например используя fetch.
    3. Довольствуешься результатом.
    Ответ написан
    Комментировать