• Почему http.server отвечает через две секунды?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    SERVER_ADDRESS = 'localhost'
    меняешь на
    SERVER_ADDRESS = '127.0.0.1'

    объяснять нужно? и вооьбще - какую проблему решаем-то?
    Ответ написан
    7 комментариев
  • Имеет ли вес хеш сумма в юридической практике?

    BasiC2k
    @BasiC2k
    .NET developer (open to job offers)
    Почему бы и нет? Главное - укажите это в договоре, как подтверждение того, что обе стороны принмают этот способ контроля целостности передаваемых файлов.
    В договоре необходимо указать :
    - что именно передаётся, с материальной точки зрения. В Вашем случае - указывается перечень файлов, и их основные описательные характеристики;
    - как именно передаются файлы (например - на носителе), согласно акта приёма-передачи. Стороны договорились о том, что целостность файлов подтверждается контрольной (хеш) суммой, которая рассчитыватся согласно алгоритма (MD5, SHA и т.д.) применительно к каждому бинарному файлу. Соответственно, в акте приёма-передачи указываете эти контрольные суммы, фразу что принимающая сторона проверила файлы и подтверждает что хеш суммы соответствуют указанным.
    Ответ написан
    Комментировать
  • Каким образом узнают код Телеграмма?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    стиллером
    через клиента
    банк ломать нет смысла - ломают и банки, но оприходовать сложнее - защита получше

    симка нет, коненчо - можно и симкой, но тогда все видно будет, и прежде всего - деньги со счетов ВЖУХ

    это если знакомый не мамонт и не повелся "нажать на кнопочку"
    Ответ написан
    3 комментария
  • Зачем надо закрывать курсор при работе с БД?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Дело в том что курсор может потреблять ресурсы. Например вы захотели взять первые 10 строк из 10000000 выборки но предварительно отсортировали. Выбрали 10 строк и не сделали финализирующие протокольные действия в Python. База данных будет удерживать в памяти алгоритмы и структуры данных для снапшота результата этого запроса до тех пор пока не придет явный CLOSE с вашей стороны либо интеллекуальный драйвер который еще и обладает логикой уборки мусора сам не догадается что Statement уже вышел из scope вашего использования и может быть удалён GC.

    Я был свидетелем ситуации когда крупное ent-приложение Java/Oracle переполняло память из-за неверной обработки Exception и плодила много незакрытых курсоров в БД. Java от этого не сильно страдала (GC всё убирал) но страдал Oracle. Потому что уборка происходила слишком поздно. Пофиксилось тогда переписыванием с try на try-with-resources.

    Поэтому если вы неряшливо обращаетесь с курсорами (явными и неявными (обычный select к примеру может прождать неявный курсор)) то не ваше приложение а база данных почувствует себя плохо. Как быстро и какие ошибки вы будете получать - зависит от настроек вашей БД.
    Ответ написан
    Комментировать
  • Как настроить OpenVPN на Linux?

    @Drno
    что значит для обычного? Вам надо ВПН сервер сделать или Вы хотите ВПН клиент?

    Для сервера вот адекватные руководства

    https://www.digitalocean.com/community/tutorials/h...

    https://ruvds.com/ru/helpcenter/kak-nastroit-openv...

    Ubuntu Desktop от сервер отличается только установкой графического интерфейса.
    Ответ написан
    5 комментариев
  • Как правильно стыковать данные по датам из нескольких массивов?

    seven5674
    @seven5674
    Старый я уже что бы что-то в себе менять
    Как это учесть? Если дней в месяцах бывает не всегда 30

    spoiler

    import datetime
    import calendar
    
    summa = 1000
    
    d1 = '2022-02-01'
    d2 = '2022-02-05'
    
    d1 = datetime.datetime.strptime(d1, "%Y-%m-%d")
    d2 = datetime.datetime.strptime(d2, "%Y-%m-%d")
    
    year = d1.year
    month = d1.month
    
    days_diff = d2 - d1
    month_days = calendar.monthrange(year, month)[1]
    summa_news = (month_days - days_diff.days) * summa / month_days
    
    print("Полная сумма {}".format(summa))
    print("Сумма с учетом дней {:.0f}".format(summa_news))

    и...
    Полная сумма 1000
    Сумма с учетом дней 857



    Ведь сравнивать по дате нельзя - дни могут не сойтись, а сойтись должно именно по месяцам.

    ну значит не сравнивай дни а сравнивай только по году и месяцу
    spoiler

    import datetime
    
    d1 = '2022-02-01'
    d2 = '2022-02-05'
    
    d1 = datetime.datetime.strptime(d1, "%Y-%m-%d")
    d2 = datetime.datetime.strptime(d2, "%Y-%m-%d")
    
    # v1 - как строки
    if d1.strftime("%Y-%m") == d2.strftime("%Y-%m"):
        print("Ok")
    else:
        print("No")
    
    # v2 - как обьекты
    if d1.year == d2.year and d1.month == d2.month:
        print("Ok")
    else:
        print("No")


    проверить принадлежность даты периоду можно еще так
    spoiler

    import datetime
    
    d1 = '2022-02-01'
    d2 = '2022-02-05'
    d3 = '2022-05-05'
    
    d1 = datetime.datetime.strptime(d1, "%Y-%m-%d").timestamp()
    d2 = datetime.datetime.strptime(d2, "%Y-%m-%d").timestamp()
    d3 = datetime.datetime.strptime(d3, "%Y-%m-%d").timestamp()
    
    if d1 <= d2 <= d3:
        print("Ok")
    else:
        print("No")


    В чем хранить все эти данные

    ну для тестового примере храни в sqlite - сгенерировать fake data не особо сложная задача
    как и в целом в данной задаче я не вижу больших проблем - тут только работа с датами

    в сухом остатке БД у тебя будет содержать две таблицы
    1. Таблица с платежами - id, payer_id, period, summa
    2. Таблица с информацией по плательщикам - id, payer_id, fio
    По payer_id ты легко можешь их связать. Выборку из БД делаешь по диапазону дат.
    В основном скрипте проверяешь и суммируешь - как вариант промежуточного хранилища используй словарь
    spoiler

    credits = {
        "Иванов" : {
            "credit_1" : {
                '2021-01': 21221,
                .
                .
                .
                '2021-11': 234234
            }
        }
    }



    Значительно упросить задачу можно правильной выборкой данных
    Вот пример (в твоем случае category_sub_name - это заемщик, category_cur_name - это кредит)
    spoiler

    SELECT category_cur_name, category_cur_name, SUM(summa) AS summa FROM (
    	SELECT category_sub_name, category_cur_name, SUM(view_count) AS summa, 
           strftime("%Y-%m", created_at) AS 'period' 
           FROM orders WHERE period >= '2021-01' AND period <= '2021-12'
    	   GROUP BY category_sub_name, category_cur_name, period) 
       GROUP BY category_cur_name ORDER BY summa DESC

    62983194ca346600365564.png

    В таком варианте тебе просто надо посчитать начальное и конечное расхождение да исходя из условия что дата может быть не полный месяц

    Конечный вариант можно визуализировать в табличной форме например в pyqt
    Но с учетом специфики равных платежей у тебя скорее всего будет просто прямая

    Вот пример для расчета сезонности
    6298333332598997344560.png
    Ответ написан
    Комментировать
  • Как в терминале открыть путь до папки?

    Vamp
    @Vamp
    Выполнить один раз на сервере команду:
    echo 'cd /papka' >> ~/.bashrc
    Ответ написан
    Комментировать
  • Поясните пожалуйста bash скрипт?

    @RayHex
    1. https://tldp.org/LDP/abs/html/process-sub.html
    2. bash это интерпритатор, вы всегда можете вставить куски выражения, и посмотреть что они выдают, например:
    echo <(ls -1 .)
    /dev/fd/63

    3. Ваш код мягко говоря дурно пахнет, а по сути он вообще кривой и будет сбоить на файлах со спецсимволами или даже пробелами. Можно сделать проще и правильнее:
    shopt -s nullglob
    for f in my_temp_dir/*; do
        echo "$f"
    done

    nullglob нужен для случаев когда файлов совсем не будет, без него подставится строка со *, и это может вызвать ошибку в вашем коде.
    Ответ написан
    Комментировать
  • На каком оборудовании построить беспроводную сеть для офиса?

    @vovaxa44
    Не проектируйте WiFi на Mikrotik! Они не поддерживают протоколы роуминга 802.11r/k/v. При перемещении, устройства будут разрывать все соединения и отключатся от сети секунд на 5. Такие Микротики не поддерживают Beamforming, так что зона покрытия будет меньшая. Микротик плохо управляет аиртаймом при количестве клиентов больше 5.

    Рекомендую к рассмотру Keenetic, где все эти функции реализованы + есть умный qos который автоматически ставит в первую очередь приложения для ip-телефонии (viber, telegram, zoom, google meet и т.д.) и где этих приложений в базе несколько тысяч.

    Также могу порекомендовать Ubiquiti и TP-Link eap точки. Если есть деньги, то это HPE Aruba.

    Wifi в микротиках это только доп функция для галочки. Мтики хорошие как шлюзы или радиомосты, но не как точки доступа. Поставите Микротик - разочаруетесь в WiFi! Еще раз повторюсь - роуминга у Мтиках нет!!!

    Если денег совсем куча, то наилучше себя показывает Ruckus.
    Ответ написан
    7 комментариев
  • Как открыть порт 443?

    @Drno
    Все открыто. Проверяйте слушает ли этот порт какой то сервис
    Ответ написан
    Комментировать
  • Как перенести объект из JS в другие языки?

    @GrayHorse
    в каком виде CryptoJS принимает в себя инстанс объекта самого себя и что он хеширует, чтобы повторить этот метод используя другие инструменты


    Все криптографические алгоритмы работают с байтами. CryptoJS используется абстракцию в виде класса "WordArray" для представления байтов, т.к. это старая библиотека, написанная, когда не было "ArrayBuffer".

    мне надо чтобы оно НЕ РАБОТАЛО также как и НЕ РАБОТАЕТ в js,

    Оно работает. Причем правильно.

    неужели по Вашему я могу переместиться во времени и пространстве к программисту, который когда-то захешировал слово таким методом и сказать ему "эй, ты хешируешь объект, не надо, хешируй строку" и дать ему этот код?

    На что тот программист бы ответил: "Не неcи чушь".
    И будет прав.

    Т.к. в его случает программа берет байты из строки и хешерует их, потом опять хеширует их же и т.д:
    SHA512(
            SHA512(
                    SHA512("hello".getBytes()) 
            )
    ).toString("hex");

    Для вывода в консоль предстaвляет их в виде хекс строки.

    ---

    Хеши же от вывода якобы той программы на C++:
    SHA512(
            SHA512(
                    SHA512("hello".getBytes()).toString("hex").getBytes()
            ).toString("hex").getBytes()
    ).toString("hex");

    Ничего не смущает? Что здесь cчитается не то же самое.

    ---

    чтобы повторить этот метод используя другие инструменты


    Другие инструменты в виде Java:

    import java.math.BigInteger;
    import java.nio.charset.StandardCharsets;
    import java.security.*;
    
    public class Main {
        public static void main(String[] args) throws NoSuchAlgorithmException {
            byte[] bytesOfMessage = "hello".getBytes(StandardCharsets.UTF_8);
            MessageDigest SHA512 = MessageDigest.getInstance("SHA512");
    
            byte[] digest = SHA512.digest(bytesOfMessage);
            Main.log(digest);
            for (int i = 0; i < 4; i++) {
                digest = SHA512.digest(digest);
                Main.log(digest);
            }
        }
        private static void log(byte[] digest) {
            var hex = new BigInteger(1, digest).toString(16);
            if (hex.length() % 2 == 1) {
                hex = "0" + hex;
            }
            System.out.println(hex);
        }
    }


    Шок! Вывод такой же и у "неправильного" CryptoJS. Банковские приложения в опасносте!

    ---

    Тема — кринж.
    Ответ написан
    1 комментарий
  • Чем веб-парсеры отличаются от реальных пользователей?

    @deliro
    1. Количеством запросов
    2. Нехаотичностью запросов
    3. Отсутствием рантайма для JS
    4. Либо присутсвием рантайма, но отсутствием натурального движения мышью
    5. Списком IP из ренжа AWS/DO/Vultr и других хостингов. Пользователи не сидят с таких IP адресов или делают это очень редко (купили и настроили там VPN)
    6. Резкими всплесками активности из одного сегмента сети (следствие 1 и 5 пунктов)
    7. Капча
    8. Что угодно ещё, хоть fingerprintjs

    Какая конкретно детектилка ботов стоит — сложно сказать. Либо измерять эмпирически, либо подкупить разработчиков оттуда, либо терморектальный криптоанализ. Но в любом случае, это должно стоить дешевле, чем информация, которую ты пытаешься попарсить
    Ответ написан
    Комментировать
  • Что такое файлы core на сервере?

    Smithson
    @Smithson
    20+ лет админю
    Это файлы для отладки падающего процесса. В зависимости от версии unix, могут называться core.МногоЦифр или НазваниеПадающегоСофта.core
    Можете смело удалять, но советую попытаться понять, кто их производит: что-то у вас их очень много (если это не запас за много лет), такими темпами они могут весь диск заполнить.
    Ответ написан
    Комментировать
  • Что такое файлы core на сервере?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Смотрим на любой core-файл с помощью утилиты file:

    $ file core.666
    core.666: ELF 64-bit LSB core file, x86-64, version 1 (SYSV), SVR4-style, from '/usr/bin/foobar', real uid: 0, effective uid: 0, real gid: 0, effective gid: 0


    Тут видно, что крэшился процесс foobar.

    Далее с помощью:

    gdb -c core.666

    можно поизучать, что там реально происходило, но это уже более сложно, особенно без отладочных данных и вообще с чужим кодом.

    С запуском scp всё это скорее всего не связано, ну разве что core-файл остаётся от самого sshd.
    Ответ написан
    Комментировать
  • Как удалить дубликаты внутри строки?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    Если порядок в строке не важен, то можно просто
    while read;do echo $REPLY|xargs -n1|sort -u|xargs; done<data.txt
    Ответ написан
    Комментировать
  • Как запустить несколько сайтов на одном хосте, так чтоб у каждого был свой набор Docker контейнеров и чтоб они были доступны по одному 80 порту?

    asadganiev
    @asadganiev
    На мой взгляд правильнее будет запустить один nginx на все сайты. Иначе если их будет несколько, то они могут конфликтовать. Я у себя так реализовал, то есть у каждого сайта свой конфиг файл в /etc/nginx/sites-enabled.
    и все они слушает порт 80.

    server {
    	listen 80;
    	listen [::]:80;
    
    	server_name     etova.ru;
    	
    	location / {
    		proxy_pass http://localhost:8080;
    	}
    }


    server {
    	listen 80;
    	listen [::]:80;
    
    	server_name     site.ru;
    	
    	location / {
    		proxy_pass http://localhost:8081;
    	}
    }
    Ответ написан
    Комментировать
  • Как полностью удалить управляющие символы из файла?

    sudo iftop -PtNn -i enp3s0 > file.txt
    или netflow sensor + netflow collector, если нужно собирать данные о трафике на постоянной основе (например fprobe + nfdump)
    Ответ написан
    Комментировать
  • Как называется договор, по которому можно долгое время проводить работы?

    @Stan_1
    Рамочный договор с общими пунктами: прайс-лист на часы, ответственность, конфиденциальность, какие-то общие условия.

    Допсоглашения: сроки, трудоемкости, состав работ.
    Ответ написан
    Комментировать
  • Многопоточная обработка страниц используя Python3+Grab. Как?

    sim3x
    @sim3x
    Забудь про граб

    Или используй питон2 и scrapy, или используй питон3 с его плюшками, или просто запускай параллельно синхронные скрипты с помощью parallel

    cat file_with_links.txt | \
         parallel -j количество_потоков myscript.py --param1={}
    Ответ написан
    Комментировать
  • Обязан ли человек предоставлять пароли от собственного ноутбука следственным органам?

    uvelichitel
    @uvelichitel
    habrahabr.ru/users/uvelichitel
    Кажется в рамках законодательства вы не обязаны помнить пароли. Плохая память вроде не преступление.
    Ответ написан
    Комментировать