Задать вопрос
  • Как вывести на экран приветствия в Linux Mint ip адрес?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    LinuxMint использует lightdm и slick-greeter. Как пишут в интернетах, там нельзя поменять текст сообщения, хотя можно скрыть hostname и настроить ещё немного опций. Чтобы чего-то сообщать юзерам, народ извращается с xmessage, zenity, gdialog и прочими инструментами, например.

    Вот в gdm можно поменять сообщение. Можно поменять используемый display manager в своей системе. Или только greeter. Это же Linux, тут много чего можно поменять по вкусу.
    Ответ написан
    Комментировать
  • Определение оператора сотовой связи и региона по номеру мобильного телефона, как сделать?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    В России есть Россвязь, которая распределяет номерную ёмкость по операторам. Эта информация публична, можно скачать машиночитаемые выгрузки у них на сайте: https://rossvyaz.gov.ru/deyatelnost/resurs-numerac...

    Далее, в России есть MNP, позволяющий переносить мобильный номер от оператора к оператору. Но только в пределах региона. Поэтому если задача по номеру определять только регион, то она надёжно решается указанными выше выгрузками. Оператора по ним определять ненадёжно, так как ежедневно много номеров меняют оператора, и любые данные быстро устаревают.

    Оператором базы данных перенесённых номеров (БДПН) является ЦНИИС, на его сайте можно получить текущего оператора только по конкретному номеру: https://zniis.ru/bdpn/check/ а обновляемый доступ ко всей базе простым смертным не получить.

    Чтобы понимать масштаб проблемы, сейчас в России ~14.7 млн. перенесённых номеров, за вчерашние сутки ~9.5 тыс. номеров поменяли оператора и ~1.5 тыс. вернулись из списка перенесённых к своему родному оператору.

    Таким образом, никакого смысла в подобном сайте без обновляемого доступа к БДПН (а она обновляется каждые 2 часа) нет.

    Что касается технической реализации, то тут всё достаточно просто, если у тебя есть доступ к БДПН. ЦНИИС публикует раз в сутки Numbering_Plan, аналогичный выгрузке DEF-9xx.csv Россвязи (формат отличается, но смысл тот же - диапазоны, каждый назначен оператору+региону), также публикует раз в сутки Port_All с полным списком MNP. Если не нужно поддерживать (для простоты) частые (каждые 2 часа) обновления, то этого достаточно. Любой номер сначала проверяем на наличие в Port_All, если не нашёлся - ищем подходящий диапазон в Numbering_Plan.
    Ответ написан
    Комментировать
  • Аренда Ip у провайдера и подключение его к серверу в датацентре?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    BGP оперирует не IP-адресами, а автономными системами, которые должны быть не менее чем /24 (256 адресов). Судя по всему, у вас нет своей AS, а адреса принадлежат провайдерам.

    Я вижу только один способ сохранить прям те же самые адреса: сервер поместить в датацентр, а на старом месте оставить недорогой сервер для проброса нужных портов в целевой сервер в датацентр. Лучше подобное воспринимать как временное решение, всё переносить на новый IP сервера, переводить туда клиентов и всё такое, чтобы в дальнейшем когда-нибудь от лишних провайдеров отказаться.

    Если у оператора есть точка присутствия в датацентре, а текущий договор на юрлицо, то можно попробовать официально договориться с ним о том, чтобы подключиться к нему в датацентре и перености IP, но у оператора моугт быть (и скорее всего будут) свои нюансы устройства сети, которые это не позволят.
    Ответ написан
    Комментировать
  • Как адаптировать код php под FreeBSD?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Просто вынести содержимое блока while(true) { ... } из цикла и убрать sleep, тогда вместо бесконечного цикла скрипт будет делать то же самое всего один раз. После этого скрипт можно гонять через cron.

    Вопрос чисто по php, остальные тэги лишние.
    Ответ написан
    Комментировать
  • Какие существуют способы бесплатной интеграции whatsapp в битрикс?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Бесплатных легальных сервисов для интеграции WhatsApp (т.н. WhatsApp Business API) нет. Есть нелегальные (не очень дорогие), основанные на имитации взаимодействия с WhatsApp Web, но с ними есть риск получить бан, так что как минимум особенно ценный номер телефона я бы таким в любом случае не доверил.
    Ответ написан
    Комментировать
  • Не запускается проект Github. Прошу помощи?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Можно не клонировать скрипт, а скачать его архивом, нажав Code-Download ZIP.

    Скрипт можно отредактировать локально, git для этого не нужен.

    В 18 строке падает из-за того, что скрипт берёт сенсор с индексом 1 (при нумерации с нуля), а массив сенсоров на этом компьютере имеет длину меньше 2, возможно даже, что нужные сенсоры ядро не понимает и список пустой. Вообще, скрипт, судя по этому месту, какой-то ацкий говнокод, который сломается просто от изменения порядка вывода сенсоров в модуле psutil. Фу на его автора.

    От себя советую избрать путь настоящего джедая: всё то же самое можно получать стандартными командами:

    Информация по процессорам: lscpu
    Информация по процессам: top или более красиво htop (выход у обоих по кнопке q)
    Информация по памяти: free -h
    Информация по сенсорам (температура, вентиляторы и всё такое): sensors
    Информация по месту на дисках: df -h
    Информация по блочным устройствам дисков: lsblk

    Доустанавливать надо будет только пакеты htop и lm-sensors.

    Ну или можно просто использовать виджеты для используемого десктопа.
    Ответ написан
    Комментировать
  • Как понять откуда поступила команда в телеграм-боте?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Передавать нужную информацию в callback_data. Например, можно передавать add:артикул, который в обработчике парсить и по нему определять, что же именно добавить.
    Ответ написан
    2 комментария
  • Как запретить программе доступ в интернет?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    1. Фильтровать по владельцу: iptables -m owner -h

    2. Использовать cgroups и фильтровать по ним: iptables -m cgroup -h

    3. Использовать отдельный network namespace без доступа в интернет: ip help netns

    4. Использовать docker с none-сетью: docker run -it --net=none my_awesome_image_for_application
    Ответ написан
    1 комментарий
  • AIOGRAM - как отправить альбом с контентом из переменных?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Когда имеешь дело с функцией, которая хочет объект file, можно использовать io.StringIO ил io.BytesIO.

    Например:

    media.attach_photo(io.BytesIO(requests.get('http://foo/bar.jpg').content), 'Foo Bar')
    Ответ написан
    Комментировать
  • Как исправить эту ошибку? IndentationError: unindent does not match any outer indentation level?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Отступы в 3 и 4 строках разные, должны быть одинаковы. Почитай любой учебник по python для начинающих, там популярно объясняют, почему отступы в python так важны.
    Ответ написан
    Комментировать
  • Что написать в except ,чтоб программа не вылетала при неправильном вводе?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Программа в случае ошибки не просто упадёт, а выкинет исключение. Его надо будет поймать и обработать.

    Например:

    try:
      int("1")
      int("-1")
      int("+1")
      int("hello")
    except ValueError as e:
      print (f"ValueError occured: {e}")


    Тут случится ValueError в последнем приведении к int, использование try ... except позволит его поймать, обработать и продолжить дальнейшую работу программы.
    Ответ написан
    Комментировать
  • Можно ли выйти сразу из всех функций?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Подобный вопрос: Прерывание рекурсии python 3?

    Однако это плохой способ, говорящий о плохой архитектуре программы. Исключения лучше использовать для ловли исключительных ситуаций, а подобные задачи решать иначе. Например, возвращать из функций результат или хотя бы признак успешного выполнения, который проверять на всех уровнях и передавать выше. А лучше подумать над тем, чтобы программа была по-другому устроена, в зависимости от задачи.
    Ответ написан
    2 комментария
  • Сallback_data. Python. Ошибка TypeError: send_message() got an unexpected keyword argument 'callback_data'?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    callback_data - свойство inline-кнопки, а не сообщения. Поэтому работать это и не может.

    keyboard = types.InlineKeyboardMarkup()
    keyboard.add(types.InlineKeyboardButton(text="Кнопка 1", callback_data="button1"))
    keyboard.add(types.InlineKeyboardButton(text="Кнопка 2", callback_data="button2"))
    bot.send_message(message.chat.id, "Нажми на кнопку - получишь результат", reply_markup=keyboard)
    
    @bot.callback_query_handler(func=lambda call: True)
    def button_callback(call):
      bot.send_message(call.message.chat.id, f"Ваша кнопка {call.data}")
    Ответ написан
    Комментировать
  • Почему не получается отправить сообщение пользователю?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    В ошибке же всё написано - text должен быть строкой. Скорее всего, courses[course] - не строка.
    Ответ написан
    Комментировать
  • Как переслать сообщение от бота другому пользователю aiogram?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    call.message - это сообщение, с которого пришёл callback, разумеется, оно и есть "предыдущее". Нужно отправить новое сообщение с помощью send_message, этот метод вернёт это отправленное сообщение, дальше именно его и надо пересылать.
    Ответ написан
    Комментировать
  • Просмотр забытого пароля в Winscp?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Предлагаю попробовать echo "%*"
    Ответ написан
  • Не видно InlineKeyboardMarkup. Что я сделал не правильно?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Если сначала отправлять сообщение, а только потом цеплять к нему клавиатуру, то клавиатура не будет отправлена.

    Вот тут:

    // внутри мы вызваем execute, который отправляет сообщение
    SendMessage sms = sendMsg(update.getMessage(), per);
    // к уже отправленному объекту сообщения мы цепляем клавиатуру
    sms.setReplyMarkup(getinlineKeyboardMarkup());
    // дальше с переменной sms мы ничего не делаем
    Ответ написан
    Комментировать
  • Как обработать исключение в потоке?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Как-нибудь так:

    web_urls = [...]
    attempts = 5
    for url in web_urls:
      for attempt in range(0,attempts):
        r = None
        try:
           r = requests.get(url)
        except requests.exceptions.ConnectionError, requests.exceptions.ReadTimeout:
           if attempt < attempts-1:
             sleep(5)
           else:
             print (f"Oops request failed and no more attempts for {url}")
        if r:
          break


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

    try:
      ...
    except Exception as e:
      print (e) # а ещё лучше использовать модуль traceback
    Ответ написан
    Комментировать
  • Что хранится на файле gshadow и зачем редактировать?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    man gshadow всё объясняет.
    Ответ написан
  • Как правильно изменить?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    trending.text - это текст. Думаю, имелось в виду trending.json()
    Ответ написан