Задать вопрос
  • Как передать UTM-метки с сайта в AMO Crm через Whatsapp?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Нельзя. В WhatsApp Business API максимум можно сохранить реферал из фейсбучной рекламы (если клиент придёт из неё), просто ссылку повесить и получить из неё какие-то параметры даже там не получится.

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

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Отредактировать сообщение с заменой клавиатуры:
    msg = bot.send_message(chat_id=my_chat_id, text='Привет', reply_markup=первая_клавиатура)
    bot.edit_message_text(chat_id=my_chat_id, message_id=msg.message_id, text='Привет ещё раз', reply_markup=вторая_клавиатура)
    Ответ написан
    Комментировать
  • Как сделать так, чтобы рамка не разрывалась между страницами?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Самое простое - обернуть в \begin{samepage} ... \end{samepage}. Это может помочь.

    Но это, строго говоря, не гарантирует неразрыв всего блока, а лишь делает "высокий штраф" на разрыв внутри него.

    Можно также вручную напихать внутрь блока \nopagebreak между всеми абзацами или использовать хуки (в достаточно новом LaTeX) как в этом ответе.
    Ответ написан
    Комментировать
  • Безопасно ли загружаться с загрузочной дискеты MS-DOS?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Поддержка NTFS есть только сторонними средствами (кажется, от Paragon Software например).

    Поддержка LFN на FAT есть с помощью сторонней утилиты doslfn. Но работает не особо эффективно и ещё кажется оно не умело в кэширование с диска, что очень чувствовалось. Нужно ещё понимать, что крайне мало софта для DOS умеет работать с LFN, буквально редкие экземпляры. Типа DOS Navigator и самых последних версий Volkov Commander.

    Кстати, я ещё находил какое-то решение, которое позволяло некоторые консольные win32-приложения запускать в DOS. В частности, после отключения пары неработавших плагинов завёлся Far 1.7 и даже с поддержкой LFN.

    Кэширование нативное в DOS отсутствует полностью, и это весьма заметно, что все операции синхронно производятся с диском. Но есть сторонние средства, в том числе решение от Microsoft - smartdrv.

    Если специально ничего не делать деструктивного, то DOS просто не будет видеть разделов NTFS вообще и ничего не сломает.

    В целом, если хочется поддержки NTFS, более перспективно LiveCD с виндой. Я когда-то сто лет назад для себя сделал из XP упрощённый LiveCD с одним cmd.exe в качестве Shell, который запускался на тестовой виртуалке всего с 24 Мб оперативной памяти. Вполне годится для замены Recovery Shell в случае если он не запускается.
    Ответ написан
    Комментировать
  • Почему не заканчивается обнова meta quest 3?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Так ведь очевидно, что обнова качается из интернетов, а эта ваша Meta в России запрещена.
    Ответ написан
  • Допустимо ли хранить логи nodejs приложения в mysql бд или есть решения лучше?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Смотря что именно логгируется и для чего используется. Например, во многих CMS (админпанели, блоги итд) существует "логгирование действий пользователей" и оно традиционно использует базу. Ибо именно из базы удобнее и проще всего через web это показывать.

    Но логи для админа или разработки или службы поддержки писать в базу - это скорее всего будет плохим решением.

    Также плохое решение использовать console.log. Нужно использовать специальные библиотеки для логгирования, они есть под любые развитые языки. Например, такие, как winston для node.js. Библиотки позволяют настраивать уровень логгирования, транспорт (файлы/syslog/итд), что позволит написанный один раз код потом не переделывать под другие реалии (запуск в кубере, запуск для тестов на машине разработчика итд итп).

    В процессе развития и роста можно будет уже приделывать Elastic/OpenSearch, vector, greylog, logstash итд итп в зависимости от потребностей. Для пет-проекта это, скорее всего, не нужно. Но даже для пет-проекта полезно учиться правильным практикам. Чтобы потом хорошо делать в больших и сложных.
    Ответ написан
    Комментировать
  • Можно ли создавать и сохранять LaTeX-изображения в Node.js?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Многие приложения ещё лет 20 назад решали такое через внешний вызов tex, например, mediawiki и moodle.

    Покопался в интернетах, в основном все используют jsmath/mathjax/katex для того чтобы получить html-версию формулы. Также есть проекты, которые генерят pdf, в том числе с помощью нативного js-кода на базе трансляции web в js (texlive.js, latex.js). Сделал ли кто-то аналогичное для получения только картинок - я не нашёл, но может недостаточно глубоко искал.

    В этом видео предлагается делать screenshot формулы, отрендеренной mathjax. Такое себе...

    Возможно, имеет смысл зайти через MathML, если что-то умеет его рендерить и если есть конвертеры \TeX-а в MathML.

    Что интересно, решения для питона гуглятся сразу - например, sympy умеет \TeX-формулы.

    Материала для экспериментов и возможно дальнейшего поиска уже набралось. А вообще, \TeX{} не очень предназначен для встраивания~--- он всегда был "вещью в себе" для создания полноценных документов с его помощью.
    Ответ написан
    Комментировать
  • Какой функционал доступен у Whatsapp бизнес?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    WhatsApp Business - это обычный клиент WA для телефона со своим номером, только с дополнительными функциями для бизнеса. Подключать в него "обычные номера" нельзя. Клиент ставится на один телефон и только на одном и можно работать от имени бизнеса. Для маленьких бизнесов самое то, что ставится всего одно приложение и оно закрывает все потребности.

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

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Потому что time_start у некоторых, пришедших не в этом году, имеет invoice_id is null по старым записям. Раньше эти записи попадали в предыдущие года и давали min(time_start) в прошлом, а после дополнительного условия time_start у всех отобранных попадает уже в текущий год и min(time_start) попадает в условие отбора.
    Ответ написан
    Комментировать
  • Можно ли C/CD в гитлаб настроить на всю группу?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Можно в настройках репозитория указывать путь к внешнему gitlab-ci.yml в другом репозитории. Тогда он может быть один на всех и в каждую репу его добавлять не нужно и изменения файла можно делать только в одном месте.
    Ответ написан
    2 комментария
  • Как в LaTeX убрать пробел между системой и текстом?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    В чём глубокий смысл использовать тут center? Формула и так по умолчанию будет центрирована, а убирание center решает проблему.
    Ответ написан
    1 комментарий
  • Как Telegram бот может отправить ссылку для отправки SMS?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Можно давать ссылку на http/https, который редиректит на sms.
    Ответ написан
    5 комментариев
  • Как в вашей компании обеспечивается установка пакетов и обслуживание репозиториев?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Делаются локальные копии основных репозиториев (reposync, debmirror и другие подобные инструменты), это может касаться и самих дистрибов с пакетами, и всяких менеджеров пакетов для языков типа pip, maven, npm. Либо, как вариант, доступ к ним прописывается через прокси с хорошо контролируемым списком хостов, куда разрешено ходить. Отдельные приложения (вне репозиториев или собственные разработки или свои кастомные сборки) можно класть в свои репозитории либо иногда норм даже просто положить архивом на http, который скрипт раскатки (ansible?) скачает и положит куда надо. Например, именно так у нас по хостам расползается jdk всех нужных версий (в тех проектах, где до контейнеризации нужно ещё космическое количество рефакторинга провести).

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

    Это вообще часть подхода, при котором инфраструктура имеет свой жизненный цикл, свои практики и инструменты, которые отделены от жизненного цикла конечных бизнес-приложений с их совсем другими методами раскатки, обновления, контроля работоспособности.
    Ответ написан
    7 комментариев
  • Как в oracle sql developer 21.2.1 открыть окно вывода sql команд?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Самое простое решение на случай, если чего-то дефолтно присутствующее потерялось:

    673f5705bc6cd794914270.png

    А так вообще в меню View порыться.
    Ответ написан
    Комментировать
  • Верификация номера телефона на сайте. Какие методы есть?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Я бы не стал пренебрегать вариантом с Telegram. Аккаунт в Telegram сейчас есть у значительной части пользователей. При этом в Telegram сейчас появился платный сервис Telegram Gateway для отправки кодов авторизации по номеру телефона. Либо можно использовать авторизацию бесплатно через бота либо виджет Telegram Login - так делают некоторые сайты уже давно. Через бота можно с помощью ссылки вида t.me/MyAwesomeBot?start=секретный_код, бот обработает код и запишет в профиль пользователя привязку к его Telegram user_id. Или попросить пользователя найти этого бота и ввести ему код вручную. Не очень удобно, и нет привязки к номеру, но зато это бесплатно.

    В WhatsApp можно легально использовать WhatsApp Business API, но надо быть бизнесом (хотя бы ИП), частному лицу не дадут зарегистрировать бизнес-аккаунт. Отправка только по шаблонам, которые модерируются при регистрации. Но для кодов может быть достаточно всего одного шаблона.

    Либо использовать нелегальный WhatsApp Web API, с которым работает Web-версия WhatsApp. Они это не любят и могут за такое номер забанить, поэтому если захочется рискнуть - следует по крайней мере использовать какой-нить новый ненужный номер, чтобы было не жалко и в случае потери.

    Есть ещё Viber, там тоже можно платно посылать сообщения от имени бизнеса по номеру телефона, но пользовательская база в России у Viber не очень большая.

    Также можно использовать регистрацию через соцсети (vk, facebook), в них всё же очень активно занимаются борьбой с авторегистрациями.

    Также можно использовать приложения типа Google Authenticator с авторизацией по одноразовым кодам, привязанным к аккаунту Google.

    В общем, варианты есть, можно думать, что более удобо для решения конкретной задачи в конкретном сервисе. Надо понимать, что слишком простая регистрация несёт риски слишком большого количества спамеров и мусорных регистраций, а слишком сложная приведёт к оттоку потенциальных пользователей. Всегда приходится идти на компромисс...

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

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Например, так:

    iptables -t mangle -N SPISOK
    iptables -t mangle -A SPISOK -d 10.9.0.0/24 -j RETURN
    iptables -t mangle -A SPISOK -d 10.11.0.0/24 -j RETURN
    iptables -t mangle -A SPISOK -d 10.14.0.0/24 -j RETURN
    iptables -t mangle -A SPISOK -j MARK --set-mark 4
    iptables -t mangle -A PREROUTING -i enp1s0 -s 10.8.0.0/24 -j SPISOK
    Ответ написан
    Комментировать
  • Если установленное приложение с вирусом используется через CrossOver или PlayOnMac, могут ли они заразить основную систему?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Приложению будут доступны все файлы, которые доступны запустившему его пользователю. Это значит, что оно может заразить exe-файлы, зашифровать документы, найти и угнать файлы с паролями, данные из браузера, а ещё оно может потенциально распознать, что это Linux/Mac и принести в систему зловредов под эти системы.

    НИКОГДА нельзя рассчитывать на то, что пронесёт. Если хочется проверить работу вирусов, то только виртуалка и лучше с наглухо отрубленной сетью.
    Ответ написан
    9 комментариев
  • Сложная маршрутизация на linux роутере. Как правильно готовить policy based routing?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    По поводу этого лучше всего начать с LARTC HOWTO.

    Если кратко, маршрутищация в iproute2 устроена так. Есть несколько таблиц маршрутизации, из которых 3 есть всегда (local, main, default), но можно создать ещё. По правилам (команда ip rule) перебираются таблицы, подходящие под условия, в соответствии с приоритетами (preference, первое число в выводе команды). И в каждой таблице есть свои маршруты. Таблицу local изменять нельзя и перед ней ничего маршрутизировать нельзя (это можно обойти через nat в PREROUTING, но это уже другой вопрос).

    Самый простой вариант - это source routing. Впервые мне это понадобилось, когда я подключил дома второго провайдера с внешним IP, и мне потребовалось отвечать с обоих внешних адресов со всего интернета. Делается так:

    1. В /etc/iproute/rt_tables описываем псевдонимы для новых таблиц (необязательно - можно использовать числовые идентификаторы - но так удобнее). Например, 10 - isp1, 20 - isp2.

    2. Задаём правила, которые приведут к выбору таблицы в зависимости от source address:

    ip rule add pref 10 from IP1 lookup isp1
    ip rule add pref 20 from IP2 lookup isp2

    3. В каждую таблицу добавим маршрут default через нужного оператора:

    ip route add default via GATEWAY1 table isp1
    ip route add default via GATEWAY2 table isp2

    4. В таблице main (которая используется по умолчанию, если не указать таблицу в команде явно) описываем маршрут "по умолчанию" - через того оператора, через которого будет идти исходящий трафик (не ответный на входящий), в данном случае пусть будет isp1:

    ip route add default via GATEWAY1

    Всё это иногда можно в той или иной степени засунуть в конфиги сети (зависит от дистрибутива Linux весьма существенно), а иногда приходится делать скриптами, в том числе, возможно, вызываемыми через hook системы инициализации сети (я, например, обновлял маршрутизацию через postup-хук dhcp-клиента и из скрипта, который поднимал pptp-vpn).

    В дальнейшем всё это обросло кучей других особенностей, например, ip rule fwmark по меткам, которые ставилилсиь в iptables по connmark и иногда другим условиям, но это уже следующий уровень сложности и более специфичне задачи. И LARTC HOWTO почитать всё равно рекомендую, ибо там основа основ и все гуру по нему учились.
    Ответ написан
    3 комментария
  • Как сделать так, чтобы кнопку в сообщение было видно определённым ролям?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Никак, Discord не имеет функции показа разным пользователям разных сообщений в пределах одного чата. Единственное исключение - эфемерные сообщения, которые являются только ответами на действия пользователя, который вызвал команду или нажал на кнопку...

    Как вариант, можно сделать отдельный служебный канал для пользователей с нужной ролью, пусть там делают все эти свои действия. Иногда это неплохое решение подобной задачи.
    Ответ написан
  • Как настроить webhook для бота aiogram 3 и nginx?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Код на python использует polling, причём тут вебхуки? Для вебхуков надо web app сделать, который их принимает. Вот в документации пример: https://docs.aiogram.dev/en/latest/dispatcher/webh... и там же есть образец настройки nginx.
    Ответ написан
    Комментировать