• Как изучать администрирование линукс самостоятельно?

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

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

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

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

    @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
    Внимание! Изменился адрес почты!
    Запросто.

    Запуск 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 вернуть две переменные?

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

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

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    Используй кортежи.
    public static (int, double) While3(double n)
            {
                double S = 0;
                int d = 10,
                    sumd = 200,
                    days = 1;
                while (S < sumd)
                {
                    days++;
                    S += d + (d * ( n / 100));
                }
                return (days,S);
            }

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

    @mkone112
    Начинающий питонист.
    на основе JS учить ООП так вообще странно.

    *Миллионы разработчков освоившие ооп с динамическими яп, говорят...
    Да-да, привет динамическая типизация

    Мало кто внятно объясняет ООП

    кроме миллионов книг и индусов на ютубе
    на примере TS.

    Да без разницы, можешь и на Java примеры посмотреть.
    Не будем портить друг другу настроение.

    В теге 'Карьера' так не принято, обычно отвечающие дают честные ответы, и веселятся когда у вопрошающих портится настроение. Я раньше смотрел комедии, но оказалось что сидеть на сервисах ответов - гораздо смешнее!
    Книги, чтобы понять ООП и Паттерны для начинающих?

    Никакие, ты сначала пишешь код, и когда понимаешь что уже не справляешься с его поддержкой - начинаешь искать способы это решить, ооп с паттернами - это один из способов. А сейчас ты пытаешься решить задачу, до того как она возникла, как ты собираешься понять решение проблемы, если не знаешь о проблеме?
    Ответ написан
    2 комментария
  • Как запустить проект на C# в Visual studio code?

    vabka
    @vabka Куратор тега C#
    Токсичный шарпист
    1. Устанавливаешь .net 6 SDK

    2. Устанавливаешь все нужные плагины:


    3. Создаёшь новый проект по гайду
    4. Открываешь в vs code папку с проектом
    5. Жмёшь на кнопку отладки и запускаешь
      (при первом запуске он может напомнить, что в отладчике есть декомпилятор, который нелегально использовать на чужих приложениях - соглашаемся с этим)
      603d3bb386701819998214.png
      Если что - выбираем .net Core
      603d3bf3168e0691109502.png
      В итоге появится нужная кнопка
      603d3c19c5f27607073624.png


    Чтобы запустить без отладки - нужно будет покопаться в launch.json, либо использовать консоль

    PS: Вообще, советую пользоваться полноценной студией - может она на первый взгляд и пугает, но она сильно удобнее, чем vs code. (ну и в ней всё работает из коробки, что важно для новичков)
    PPS: А ещё существует Rider - для профессионального разработчика он стоит копеечные 15$ в месяц, а для школьника или студента вообще бесплатен. При этом он даёт целую кучу полезных инструментов, особенно для геймдева, если он вам интересен.
    Ответ написан
    9 комментариев
  • Есть ли альтернативa Visual Studio для C#?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    JetBrains Rider - платно (можно пиратить, но проще просто поставить VS .Net Desktop)
    Visual Studio Code - бесплатно но функционал слабее
    и далее:
    Sublime, Notepad++ - с плагинами
    ...
    Notepad и компиляция командной строкой

    ps что бы не охреневать от веса присмотритесь к настройкам инсталятора. если ставить только .Net Desktop, то совсем не страшно на самом деле. а новичку обычно больше ни чего не надо.

    мало того - все что сверх .Net Desktop, вменяемо не обслуживается ни в одной альтернативной среде. ну разве что веб направление в JetBrains Rider.. ну Visual Studio Code.. но новичку в VS Code думаю будет не уютно

    pps можете смело урезать стартовую конфигурацию до набора
    как на скрине
    PR832pt.png
    , остальное, пока не поймете зачем - оно и не надо
    Ответ написан
    Комментировать
  • Как установить память на сервер?

    fdroid
    @fdroid
    press any key
    В характеристиках платы указано, что она поддерживает память UDIMM ECC. Если вы установили RDIMM ECC, то она не заведётся.
    Ответ написан
    1 комментарий
  • Как сохранить IP адрес клиента в локальной сети при запросе через внешний интерфейс?

    Jump
    @Jump
    Системный администратор со стажем.
    Как я понимаю, сделать это можно, только если отправлять запрос на HTTP сервер, минуя внешний интерфейс.
    Правильно понимаете.

    как это сделать без внутреннего DNS сервера?
    Используйте файл HOSTS вашего роутера, или компьютера.
    Добавьте туда запись вида vash_domain.com 192.168.1.200 и ходите по имени.
    Ответ написан
    Комментировать
  • Сравнение "буквенных" и "числовых" строк. Как происходит?

    Simkav
    @Simkav
    В вашем случае 123 не число а строка, при сравнении строк запускается цикл который переводит символ строки в юникод если не ошибаюсь, и сравнивается номер этих юникод символов
    P.S
    Ответ написан
    3 комментария
  • Изучать сразу 2 ЯП - плохая практика?

    vabka
    @vabka
    Токсичный шарпист
    Конечно можно.
    Если у вас уже нет проблем с циклами / условиями и есть понимание, чем отличается класс от экземпляра класса.
    Главное не пытаться писать на C#, как на JS и наоборот.
    Ответ написан
    Комментировать
  • Есть ли интересные Telegram-каналы по веб-разработке?

  • Как провести грамотный апгрейд сервера 1С?

    @LollyFox
    Без анализа можно только посоветовать SSD + увеличить ОЗУ - это минимум, чего точно не хватает серверу.
    А дальше садиться и настраивать PostgreSQL или переходить на MS SQL.
    Ответ написан
    Комментировать