• Современные платформы по созданию блога?

    MaKvc
    @MaKvc
    Отчаянный веб-разработчик
    Ответ написан
    Комментировать
  • Как управлять планировщиком задач используя python3?

    Vindicar
    @Vindicar
    RTFM!
    1. cmd: SchTasks.exe /? Дальше просто вызываешь с нужными параметрами.
    2. Используя API на базе COM-библиотеки. Для питона есть библиотека pywin32, модуль win32com которой обеспечивает взаимодействие с COM.

    StackOverflow
    Ответ написан
    Комментировать
  • Как прописать в договоре на создание сайта, что таким подобным проектом мы заниматься не будем?

    Совет Developer максимально дельный.

    Но, если нет возможности поконсультироваться с настоящим юристом, можете рискнуть (!) простым русским языком прописать:

    1. Исполнитель обязуется не создавать сайты, которые
    - ... (максимальное количество пунктов с максимальным количеством слов, описывающих фичу)
    (!) без всяких "включая, но не ограничиваясь"
    до ... конкретная дата (!)
    2. В случае нарушения п.1 (в договоре, понятно, номера 1-3 другие будут) Исполнитель выплачивает Заказчику ... (сумма, валюта)
    3. п.1 имеет силу только после полной оплаты Заказчиком работ Исполнителя по Договору.

    П.2 позволит вам при "вкусном" предложении от конкурентов нынешнего заказчика нарушить п.1 не "в наглую", а "как договаривались".

    Кстати, без п.2 вы вообще можете смело нарушить п.1, максимум, что с вас "возьмут по закону" в этом случае - сумму, полученную вами по договору.
    (перелом ног, пробив головы, и т.п. не рассматриваем не потому, что это невозможно, а потому что не знаем вашего заказчика).
    Ответ написан
    Комментировать
  • Как прописать в договоре на создание сайта, что таким подобным проектом мы заниматься не будем?

    alexgp13
    @alexgp13
    Руководитель ИТ-проектов
    То есть наработав крутой и востребованный опыт, вы хотите перекрыть себе возможность его использовать. Вам платят столько, что можете больше не работать до конца жизни? Очень странный пункт в договоре, я бы посоветовал избегать такого заказчика. По существу вопроса максимально полно описывайте каждый момент из тз, чтобы всегда можно было сказать что есть отличие в новом проекте исчитать его таким же не получится.
    Ответ написан
    2 комментария
  • Чем os.system() хуже чем модуль subprocess?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Ни чем не хуже, если вам хватает его возможностей.
    Ответ написан
    Комментировать
  • Нужен ли класс threading.Lock?

    @deliro
    Скопируй и запусти две разных версии кода.

    Без Lock

    from threading import *
    
    def work(i):
        for _ in range(100):
            print(f"hello i'm a thread #{i}")
    
    t1 = Thread(target=work, args=(1,))
    t2 = Thread(target=work, args=(2,))
    t1.start()
    t2.start()
    t1.join()
    t2.join()



    С Lock

    from threading import *
    
    lock = Lock()
    
    def work(i):
        for _ in range(100):
            with lock:
                print(f"hello i'm a thread #{i}")
    
    t1 = Thread(target=work, args=(1,))
    t2 = Thread(target=work, args=(2,))
    t1.start()
    t2.start()
    t1.join()
    t2.join()



    Как можешь заметить, первый вариант иногда печатает две строки на одной, а иногда печатает пустые строки

    Ещё примеры

    Без Lock

    from threading import *
    from time import sleep
    
    
    class GlobalState:
        def __init__(self, x):
            self.x = x
            
        def set_x(self, x):
            self.x = x
    
    def reader(state: GlobalState):
        if state.x % 2 == 0:
            sleep(0.01)  # simulate OS context switch
            print(f"{state.x=} is even")
        else:
            print(f"{state.x=} is odd")
            
    
    def changer(state: GlobalState):
        state.set_x(state.x + 1)
    
    state = GlobalState(2)
    t1 = Thread(target=reader, args=(state,))
    t2 = Thread(target=changer, args=(state,))
    t1.start()
    t2.start()
    t1.join()
    t2.join()


    С Lock

    from threading import *
    from time import sleep
    
    
    class GlobalState:
        def __init__(self, x):
            self.x = x
            self.lock = Lock()
            
        def set_x(self, x):
            self.x = x
    
    def reader(state: GlobalState):
        with state.lock:
            if state.x % 2 == 0:
                sleep(0.01)  # simulate OS context switch
                print(f"{state.x=} is even")
            else:
                print(f"{state.x=} is odd")
            
    
    def changer(state: GlobalState):
        with state.lock:
            state.set_x(state.x + 1)
    
    state = GlobalState(2)
    t1 = Thread(target=reader, args=(state,))
    t2 = Thread(target=changer, args=(state,))
    t1.start()
    t2.start()
    t1.join()
    t2.join()


    Ну и совсем упоротый пример для тех, кто говорит, что list — threadsafe (что фактически является истиной, но логически не всегда) и не нужно использовать Lock:
    Открыть

    from threading import *
    from random import *
    
    class GlobalState:
        def __init__(self):
            self.x = []
            
        def do_something_changing(self):
            if random() < 0.5:
                self.x.append(1)
            elif self.x:
                self.x.pop()
    
    def reader(state: GlobalState):
        for _ in range(10000000):
            if len(state.x) % 2 == 0:
                if len(state.x) % 2 != 0:  # wtf how it's possible?
                    print(f"length {len(state.x)} was even before context switch")
    
    def changer(state: GlobalState):
        for _ in range(10000000):
            state.do_something_changing()
    
    state = GlobalState()
    t1 = Thread(target=reader, args=(state,))
    t2 = Thread(target=changer, args=(state,))
    t1.start()
    t2.start()
    t1.join()
    t2.join()



    И напоследок. Хватит программировать (или пытаться) на тредах. Это сложно и никому не нужно. Давно существуют куда более удачные реализации использования всех ядер процессора (csp например в golang). А если треды используются для IO (а в питоне они в 99.9% используются именно для IO), то давно есть и довольно юзабельный asyncio.
    Ответ написан
    Комментировать
  • Как найти сетевые или расшаренные принтеры?

    partisan42
    @partisan42
    Новичок в Linux.
    Advanced ip scanner.
    Проще некуда:)
    Ответ написан
    Комментировать
  • Как найти сетевые или расшаренные принтеры windows?

    @MaxKozlov
    Просканировать сеть в поисках открытого 9100 порта (raw) - будут сетевые принтеры.

    Расшаренные видны если опрашивать компы через wmi - класс Win32_share
    Ну и они скорее всего тоже могут держать открытым 9100 порт
    Ответ написан
    Комментировать
  • Приложение для анализа диска Linux?

    deepblack
    @deepblack
    NCurses Disk Usage

    sudo apt install ncdu
    Ответ написан
    Комментировать
  • Выбор софтового VPN сервера?

    leahch
    @leahch Куратор тега Linux
    3D специалист. Dолго, Dорого, Dерьмово.
    OpenVPN - других слов нет, и не будет.

    -----
    Давайте я немного разверну свой ответ. Каждый раз при очередной надобности в VPN, я пробую разные решения, начиная от PPTP и заканчивая WireGuard, не считая частнофирменных сисоц и всяких решений исключительног под всем известную операционную систему..
    И так на протяжении лет 20-и.
    За эти года построил сотни сетей и решений от простых на 10-20 клиентов, до серверов доступа на несколько тысяч.
    У OpenVPN есть куча недостатков, у него нет нативных клиентов, но есть три очень больших преимущества:
    1) Относительно высокая скорость работы
    2) Очень быстрое поднятие, установка и отладка
    3) Он работает везде, на любой платформе (да, я его поднимал даже очень экзотических системах типа OS-9), с любым MTU, на любых типах сетей, проходит все мыслимые и немыслимые NAT.
    Итого: увы, на мой взгляд, лучшей альтернативы ему пока нет.
    Ответ написан
  • Чем пользоваться для программирования на Питоне?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Для начала обычным текстовым редактором и командной строкой.
    Ответ написан
    Комментировать
  • Как улучшить качество картинки в подписи Outlook?

    advengineering
    @advengineering
    Тоже с этим маялись.
    Как оказалось, Outlook сжимает рисунки до 96 пикселей на дюйм (DPI). У нашего логотипа DPI изначально был 300, уменьшение его в графическом редакторе до 96 испортило качество. Пока остановились на 150 пикселей на дюйм. Пробуйте!
    Ответ написан
    1 комментарий
  • Что использовать для создания консольного меню средствами терминала?

    @AVKor
    dialog, например.
    Ответ написан
    Комментировать