• Что значит Set в языке VBA?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Знак присвоения без SET присваивает скалярное значение. А с SET - ссылку на объект. То есть использовать его или нет - зависит от типа значения справа от знака присвоения. Ну и желаемого результата, конечно (включая и желание не получить ошибку несоответствия типов).

    Пример.

    • Откройте Excel.
    • Откройте окно редактора VBA (Ctrl-F11). Измените размеры окон так, чтобы видеть и таблицу, и редактор.
    • В редакторе добавьте модуль (Insert-Module).
    • Вставьте в модуль следующий текст:
      Sub test()
      Dim x, y
      Range("A1").Value = 123
      x = Range("A1")
      Set y = Range("A1")
      End Sub

    • Поставьте курсор в середину модуля, и начните пошаговое выполнение нажатием F8. Доведите исполнение до финального End Sub (когда эта строка будет подсвечена жёлтым цветом).
    • Откройте окно локальных переменных (View - Locals Window).

    Вы увидите, что первый оператор присвоения присвоил переменной x скалярное значение. Поскольку справа был объект, то в качестве скалярного значения было взято свойство объекта по умолчанию. Для объекта типа Range объектом по умолчанию является его свойство .Value - посему в переменную помещено значение 123. И соответственно переменная имеет тип Variant/Double.

    А вот второй оператор присвоения, использующий Set, поместил во вторую переменную y ссылку на объект Range. И переменная имеет тип Variant/Object/Range.
    Ответ написан
    Комментировать
  • Как найти причину пропадания сети в Debian 11?

    @nialiv
    У меня такая же проблема с Debian 11.6 Plasma и она определённо находится в Debian, именно из-за этой проблемы мне пришлось перейти на другую основную систему, Fedora 37 Plasma, а Debian перенести на внешний USB3 винчестер.
    Проблема обычно появляется после очередного обновления и пропадает тоже после обновления.
    Ни какими настройками избавиться от неё не удаётся, пробовал отключать Ntwork Manager и настраивать сетевую карту вручную, использовал и статический и динамический адреса сетевой карты, всё бесполезно.
    Что самое интересное, Debian 11 прекрасно работает на домашнем сервере, правда без GUI.
    Нормально работают и системы, основанные на Debian, например, Q4OS, Kubuntu, Astra.
    Я думаю, что широко разрекламированная стабильность Дебиана сильно преувеличена, возможно это относится только к Debian с графическим окружением, без GUI он работает стабильно.
    PS: Вчера, 30 апреля, совершенно случайно наткнулся на давно созданный образ, когда система ещё работала нормально, восстановил в посекторном режиме поверх существующей системы и всё стало работать нормально.
    Естественно, Debian сразу же запросил обновление, обновлялся около часа.
    В результате вторые сутки работает нормально, только надолго ли? Создам новый образ на случай новых "нежданчиков".
    Ответ написан
    2 комментария
  • Как преобразовать JSON в удобочитаемый вид средствами Python?

    sim3x
    @sim3x
    https://stackoverflow.com/questions/9105031/how-to...

    echo '{"one":1,"two":2}' | python -mjson.tool

    https://docs.python.org/3/library/json.html#json.dumps
    >>> import json
    >>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
    {
        "4": 5,
        "6": 7
    }
    Ответ написан
    Комментировать
  • Как найти причину пропадания сети в Debian 11?

    hint000
    @hint000
    у админа три руки
    link со стороны роутера отсутствует, link на ноуте имеется
    Т.е. нетбук подключен кабелем? Похоже на проблему железа.
    1. попробовать подключить в другой порт роутера;
    2. поменять кабель (хотя его трудно заподозрить, но...);
    3. если не поможет 1 и 2, то провести простой опыт: взять любой исправный свитч (хоть пятипортовый за 300 рублей), воткнуть между роутером и нетбуком и смотреть, с какой стороны линк сохраняется, а с какой теряется; если и с промежуточным свитчём будет пропадать линк на роутере, значит неисправен роутер; в противном случае может быть неисправен ethernet-адаптер нетбука, тогда можно купить USB-ethernet-адаптер.
    Ответ написан
    Комментировать
  • Как получить вывод в рамке с переносом строк?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    Хочу создать рамку вокруг вывода, для этого использую функцию
    msg="# $* #"

    что-то вообще не то

    как вариант размер можно контролировать через column
    MEM="Memory Usage: 277/1983MB (13.97%)"
    HDD="Disk Usage: 5/16GB (35%)"
    CPU="CPU Load: 0.00"
    VAR="$MEM\n$HDD\n$CPU"
    banner() {
    	v="$@"
    	x=$(echo -e "$v" |awk '{if(length>max)max=length}END{for(i=1;i<max+5;i++){printf "#"}}')
    	echo "$x"
    	echo -e "$v" |awk '{print "# "$0" #"}' |column -t -s: -o: |column -t -s'#' -o'#'
    	echo "$x"
    }
    banner "$VAR"

    вывод
    #####################################
    # Memory Usage: 277/1983MB (13.97%) #
    # Disk Usage  : 5/16GB (35%)        #
    # CPU Load    : 0.00                #
    #####################################


    хотя если есть возможность изначально контролировать вид получение MEM, HDD, CPU то будет проще записать данные через тот же csv а его вывод уже форматировать соответствующими программами, например csview

    MEM="Memory,277/1983MB,13.97%"
    HDD="Disk,5/16GB,35%"
    CPU="CPU,0.00,"
    echo -e "$MEM\n$HDD\n$CPU" |csview -H --style Reinforced

    вывод:
    ┏────────┬────────────┬────────┓
    │ Memory │ 277/1983MB │ 13.97% │
    │ Disk   │ 5/16GB     │ 35%    │
    │ CPU    │ 0.00       │        │
    ┗────────┴────────────┴────────┛
    Ответ написан
    3 комментария
  • Как настроить сервер?

    @abezgauz
    web-кузнец
    Здравствуйте.
    Хорошо, что уточнили по поводу адаптера.

    Вставляете в ноут шнур от инета.
    Далее предполагается, что вы успешно запустили установку сервера выставив нужные настройки в bios (с флешки, диска - не суть).

    Делаете разметку (тут инструкции не устарели).
    Подключаетесь к своей сети (аналгин).
    Ждёте завершения установки и уводите машину в ребут.

    Теперь (предполагается, что вы в терминале):

    Узнаём имя устройства.
    iw dev
    iw wlваши_цифры link
    >> not connected...

    Означает, что устройство не подключено ни к одной сети.

    Сканируете доступные сети.
    iw wlваши_цифры scan

    >> command failed: Network is down (-100)

    Означает, что сетевое устройство/интерфейс выключено.

    sudo ip link set iw wlваши_цифры up
    Включаете.

    Повторный вывод списка доступных сетей даст профит, но дальнейшая команда потрубет установки дополнительных пакетов, а инетов то нет. Следовательно, первично настраивать сервер всегда желательно при подключенном кабеле интернета (лирика).

    Подключаемся к нужной сети.
    nmcli dev wifi connect ROUTERSSID SPI

    Гуглите ROUTERSSID SPI - это важные понятия.

    Анализируем выхлоп при пинге на внешнюю машину:
    ping 8.8.8.8

    Если всё ок - отключайте шнур.

    Теперь, обновляете OS:
    sudo apt-get update
    sudo apt-get dist-upgrade


    Читаете, что такое ufw, а пока:
    sudo ufw allow from локальный_адрес_клиента
    где локальный адрес клиента (можно узнать, например из админки роутера или спец.командами, которые в общем доступе в гугле)

    sudo ufw enable
    Пуск.

    Этим самым вы разрешили ВСЁ для клиента и включили брандмауэр.

    Далее:
    sudo apt-get install apache2
    sudo service apache2 status
    Смотрим....
    sudo service apache2 start
    Если не включился
    sudo a2enmod rewrite
    Гуглите, что это и зачем (mod_rewrite)

    sudo apt-get install mysql-server
    sudo apt install php-mysql libapache2-mod-php php-cli php-cgi php-gd mariadb-server-10.6 php php-zip php-xml php-xmlrpc php-curl php-json php-mbstring

    Можно ещё, чтоб веб-морда была:
    sudo apt-get install phpmyadmin

    На вопрос о том с чем сопоставлять (или типа того) выбираете апач.

    После чего начинаете настраивать апач:
    sudo nano /etc/apache2/apache2.conf
    и вставляете в конец:
    Include /etc/phpmyadmin/apache.conf


    Даете права.
    sudo chmod -R 755 /var/www
    sudo chown -R ваш_логин:ваш_логин /var/www

    Сверяйте имя.

    Для работы баз данных.
    sudo -i
    mysql -uroot -p
    SELECT user,plugin,host FROM mysql.user WHERE user = 'root';
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'введите_желаемый_пароль';
    FLUSH PRIVILEGES;


    Выходите из под sudo.
    exit

    Создаёте простую страничку:
    mkdir /var/www/wp
    nano /var/www/wp/index.html
    <html>
    <head>
    <title>testerer</title>
    </head>
    
    <body>
    
    Hello, kitty!
    
    </body>
    </html>


    Ctrl+S

    На клиенте:
    sudo nano /etc/hosts

    Добавляете строку:
    # Временнное
    ip_сервера wp.local www.wp.local


    Ctrl+S

    sudo cp -P /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/wp.conf
    sudo nano /etc/apache2/sites-available/wp.conf
    Раскомментируем: #ServerName www.example.com и заменим на ServerName wp.local
    DocumentRoot /var/www/html на /var/www/wp

    Это конфиг нового сайта.

    sudo a2ensite wp.conf
    Это его включение.

    sudo service apache2 restart

    И уже можете смотреть страничку в обозревателе на клиенте. Или выгрузить архив движка в папку проекта, удалить index.html и выполнить установку сайта.
    Базы данных доступны в локальной сети по адресу: адрес_сервера/phpmyadmin/

    Вам пригодятся:
    mc
    w3m (или кто-то другой)

    Внимание! Это минимум из минимумов!

    p.s.
    Тут до меня дошло. Вам под апач это всё надо же?

    p.s.s.
    Большинство писал на память, сверял некоторые выхлопы гуглением. Ну... Если есть ошибки суть всё-равно должна быть ясна в сочетании с "неактульными манами".
    Ответ написан
    3 комментария
  • Почему bash скрипт не не выполняет команду в новой вкладке?

    sotvm
    @sotvm
    Умный поймёт, а дураку и так всё равно.
    Много лишних букаф . Будь скромнее )))
    gnome-terminal --tab --title="newtab" -e 'man gnome-terminal'
    Ответ написан
    3 комментария
  • Как сделать максимально автономный сервер?

    ValdikSS
    @ValdikSS
    1. Никаких «вечных серверов». Даже как-то неловко разъяснять такое. «Вечный сервер» — маркетинговый ход, фактически мошенничество, который закончится, как только компания изменит условия/реорганизуется/закроется. Следует читать как «ну, проработает года три, а далее — неизвестно».

    2. Непонятно, какого рода у вас информация, и что именно вы понимаете под словом «захостить», также непонятен критерий автономности. Разместить информацию в публичный доступ? Должна ли она индексироваться? Нужен ли для неё контроль доступа? По какому протоколу она должна быть доступна? Она будет нужна только вам через 10 лет, или кому-то еще? Это лицензированный контент, который могут удалить по DMCA (фильмы, сериалы, музыка)? Это персональные данные (сливы баз данных)? Информация популярна и/или востребована на данный момент? Есть вероятность, что она будет сравнительно востребована через 10 лет? Информация каталогизирована? Информация тематическая (например, архив, посвященный конкретной теме, области науки и т.п.)? Важно ли удобство и скорость доступа к информации?
    Технологий много, но они все разные, с разными назначениями. Ответы на перечисленные вопросы необходимы, чтобы отбросить неподходящие и подробно рассмотреть подходящие.

    3. Если информация публична и востребована, и будет востребована через 10 лет, то следует использовать DC++, BitTorrent + веб-хранилища с прямыми ссылками на файл, добавив ссылки в .torrent-файл, в виде webseed.
    Bittorrent существует с 2006 года, популярен, клиенты есть под все ОС, совместимость и надёжность отличные.
    DC++ всё еще имеет популярность. Основное преимущество перед Bittorrent: возможность поиска файла по его имени или названию директории, возможность лёгкого обновления и дополнения информации (нет привязки к «каталогу» в виде .torrent-файла)

    Если информация конфиденциальна или требует контроля доступа, и у вас и кого-либо другого не будет возможности как-либо поддерживать её в течение 10 лет (я не знаю вашу ситуацию, поэтому предположим, что вам грозит 10-летний тюремный срок), то, возможно, есть смысл оплатить облачное хранилище от крупных компаний (Google, Yandex, Microsoft, Apple) на 10 лет вперед. Это не даёт никаких гарантий, но считаю такой вариант более надёжным, нежели хостинг общего плана (и особенно VPS).

    Если информации немного, она не защищена авторскими правами, каталогизирована и полезна, можно банально разместить её на давно существующих бесплатных хостингах, вроде Ucoz, Google Sites, Neocities, загрузить на Bitbucket, Github, Sourceforge (последний поддерживает хранение больших файлов, которые можно скачать по прямой ссылке, вполне подойдёт в качестве webseed для торрента, к слову).

    Если не боитесь попробовать развивающиеся, но еще не устоявшиеся технологии, присмотритесь к IPFS. Он работает по принципу Bittorrent, но позволяет получать доступ к информации через HTTP, а также поддерживается крупными игроками в лице Cloudflare, у которой есть шлюз из интернета в IPFS: https://cloudflare-ipfs.com/
    Я держу несколько статичных сайтов с собственными доменами в IPFS, на домашнем компьютере, за шлюзом Cloudflare. Преимущества: все плюсы BitTorrent, возможность доступа как к сайту (в т.ч. на своём домене), индексация поисковиками, есть сервисы по долгосрочному платному хранению файлов (eternum.io, pinata.cloud), возможность лёгкого обновления информации. Недостатки: работает всё ещё достаточно медленно и нестабильно, только статичные сайты.

    4. Судя по вашему комментарию выше, у вас всего 100 ГБ медиафайлов. Это вообще ерунда. Если они публичны и представляют ценность хотя бы для узкого круга людей, можете захостить их у меня, через проект Schare: https://valdikss.org.ru/schare/
    Мой критерий автономности — максимальная независимость от сторонней инфраструктуры, поэтому файлы хостятся на домашнем сервере, а раздаются в сетях децентрализованного файлообмена.
    Ответ написан
    Комментировать
  • Как запускать sh файл скрытно?

    @pfg21
    ex-турист
    если тебе для граф.стола то сделай desktop ярлык с параметром Terminal=false.
    https://pikabu.ru/story/faylyi_yarlyikov_prilozhen...
    Ответ написан
    Комментировать
  • Что за запрос на сервере?

    Panascanic
    @Panascanic
    Немного WP и немного SEO
    Не соглашусь про "по факту ничего нельзя сделать" и "не обращать внимания".

    Плагин Wordfence в нем прописываются все за*бистые запросы в стиле:

    /backup.sql.gz
    /backup.gz
    /directory.zip
    /directory.gz
    /backup.tar.gz
    /wp-info.php
    /public_html.zip
    /login.php
    /backup.sql.zip
    /installer-backup.php
    /readme.txt
    /clipboard.min.js
    /_config.cache.php
    /?author=1
    /cmd.php
    /author=1
    /unzipper.php
    /unzip.php
    /replace.php
    /index.php
    /options.php
    //options.php
    /xmlrpc.php
    /phpminiadmin.php
    /plugin.min.js


    При повторе подобных команд, запросов - автоматический бан.
    Особо настырных смотрим по IP здесь

    5e8ec3ff8c670145224197.png

    И вносим в бан:
    5e8ec41b02af7180945035.png

    Тут главное не переборщить, если с того пула адресов ходять клиенты - не дойдут :)

    2. Это он пытается запустить код с сайта? ThinkPHP - не установлен


    Да, у чудо бота есть набор прописанных сильно умным человеком, уязвимостей. Боты в некой мере хаотично бегают по сайтах и долбят что попало.
    Они приходят и с серверов Microsoft :) Alibaba, GoDaddy.

    Порой боты имитируют, что пришли с Google.com, потому что какой-то придур решил, что такой реферер как гугл никто не блочит... и много других не сильно умных патернов.

    Еще поможет правильный htaccess
    spoiler
    # BEGIN WordPress

    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]


    # Deny wp config files access

    Order deny,allow
    Deny from all


    # Deny wp config

    order allow,deny
    deny from all


    # Block all requests that contain the up_auto_log parameter in the query string
    RewriteCond %{QUERY_STRING} up_auto_log=.+ [NC]
    RewriteRule .* - [F,L]

    # Deny author
    RewriteCond %{QUERY_STRING} author=\d
    RewriteRule ^ /? [L,R=301]

    # 5G:[QUERY STRINGS]

    RewriteEngine On
    RewriteBase /
    RewriteCond %{QUERY_STRING} (\"|%22).*(<|>|%3) [NC,OR]
    RewriteCond %{QUERY_STRING} (javascript:).*(\;) [NC,OR]
    RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3) [NC,OR]
    RewriteCond %{QUERY_STRING} (\\|\.\./|`|=\'$|=%27$) [NC,OR]
    RewriteCond %{QUERY_STRING} (\;|\'|\"|%22).*(union|select|insert|drop|update|md5|benchmark|or|and|if) [NC,OR]
    RewriteCond %{QUERY_STRING} (base64_encode|localhost|mosconfig) [NC,OR]
    RewriteCond %{QUERY_STRING} (boot\.ini|echo.*kae|etc/passwd) [NC,OR]
    RewriteCond %{QUERY_STRING} (GLOBALS|REQUEST)(=|\[|%) [NC]
    RewriteRule .* - [F]


    # 5G:[REQUEST STRINGS]

    RedirectMatch 403 (https?|ftp|php)\://
    RedirectMatch 403 /(https?|ima|ucp)/
    RedirectMatch 403 /(Permanent|Better)$
    RedirectMatch 403 (\=\\\'|\=\\%27|/\\\'/?|\)\.css\()$
    RedirectMatch 403 (\,|\)\+|/\,/|\{0\}|\(/\(|\.\.\.|\+\+\+|\||\\\"\\\")
    RedirectMatch 403 \.(cgi|asp|aspx|cfg|dll|exe|jsp|mdb|sql|ini|rar)$
    RedirectMatch 403 /(contac|fpw|install|pingserver|register)\.php$
    RedirectMatch 403 (base64|crossdomain|localhost|wwwroot|e107\_)
    RedirectMatch 403 (eval\(|\_vti\_|\(null\)|echo.*kae|config\.xml)
    RedirectMatch 403 \.well\-known/host\-meta
    RedirectMatch 403 /function\.array\-rand
    RedirectMatch 403 \)\;\$\(this\)\.html\(
    RedirectMatch 403 proc/self/environ
    RedirectMatch 403 msnbot\.htm\)\.\_
    RedirectMatch 403 /ref\.outcontrol
    RedirectMatch 403 com\_cropimage
    RedirectMatch 403 indonesia\.htm
    RedirectMatch 403 \{\$itemURL\}
    RedirectMatch 403 function\(\)
    RedirectMatch 403 labels\.rdf
    RedirectMatch 403 /playing.php
    RedirectMatch 403 muieblackcat


    # Block access to PHP files
    RewriteCond %{REQUEST_URI} !^/wp-content/plugins/file/to/exclude\.php
    RewriteCond %{REQUEST_URI} !^/wp-content/plugins/directory/to/exclude/
    RewriteRule wp-content/plugins/(.*\.php)$ - [R=404,L]
    RewriteCond %{REQUEST_URI} !^/wp-content/themes/file/to/exclude\.php
    RewriteCond %{REQUEST_URI} !^/wp-content/themes/directory/to/exclude/
    RewriteRule wp-content/themes/(.*\.php)$ - [R=404,L]

    # Block wp-includes folder and files

    RewriteEngine On
    RewriteBase /
    RewriteRule ^wp-admin/includes/ - [F,L]
    RewriteRule !^wp-includes/ - [S=3]
    RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]
    RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L]
    RewriteRule ^wp-includes/theme-compat/ - [F,L]


    # Block 64x links
    Options +FollowSymLinks -Indexes
    RewriteCond %{QUERY_STRING} base64_encode[^(]*\([^)]*\) [OR]
    RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]

    # Deny Http headers reading
    RewriteEngine On
    RewriteCond %{REQUEST_METHOD} ^TRACE
    RewriteRule .* — [F]

    # Deny access to all .htaccess files

    order allow,deny
    deny from all
    satisfy all


    # Deny SQL injection
    RewriteCond %{query_string} concat.*\( [NC,OR]
    RewriteCond %{query_string} union.*select.*\( [NC,OR]
    RewriteCond %{query_string} union.*all.*select [NC]
    RewriteRule ^(.*)$ index.php [F,L]

    # Deny hackers agents
    SetEnvIf user-agent «Indy Library» stayout=1
    SetEnvIf user-agent «libwww-perl» stayout=1
    SetEnvIf user-agent «Wget» stayout=1
    deny from env=stayout

    #Disable site folders browsing
    Options All -Indexes


    p.s. когда только поставил свежий сайт, о котором никаких упоминаний нигде нету и в помине. Ставишь плагин Wordfence и смотришь, что через два часа прибегает какой-то бот с переходом с какого-то говносайта в стиле "список новых блогов".

    Через пару дней уже поперли запросы wp-login и прочая фигня. Что эффективно обламывается плагином WPS Hide Login - который делает custom URL для входа в админку. А сам запрос wp-login вносим правило бана, просто по приколу.
    Ответ написан
    7 комментариев