Задать вопрос
  • Как отключить обновления windows 10 в 2022 году?

    Мой список по "оптимизации windows 10":

    Отключение служб в windows 10 (очистка лишнего, отключение слежки, телеметрии)


    Можете рассмотреть ещё вариант установки Windows 10 Ameliorated. В неё очень много всего выпелено на уровне файлов, а не настроек.
    https://ameliorated.info
    https://wiki.ameliorated.info/

    Я в итоге пересел с 10 на 7. Точнее на Linux пересел, а как альтернативный windows перешёл на win7.

    Вот тут ещё выложены решения по амелеорации windows 10 и оптимизации - https://github.com/gordonbay/Windows-On-Reins

    Win 10 Tweaker не рекомендуется, т.к. может содержать вирусы
    Ответ написан
    7 комментариев
  • Ubuntu Server 18.04. Простой мониторинг загрузки сервера?

    caramingo
    @caramingo
    админ из русского манчестера
    netdata если надо помониторитьодин сервер, ставиться в одну команду.
    Я бы не сказал что он "легкий" но при этом показываеть все что надо в красивых графиках.
    Ответ написан
    Комментировать
  • Сколько стоит час веб-разработчика-фрилансера?

    @deliro
    Ты веcь такой кругом молодец, то знаешь, это знаешь. А теперь представь себе среднестатистический проект, который должен приносить бизнесу деньги. За две недели работы ты едва напишешь хлипкий CRUD для данных, неправильно смаппив бизнес-сущности в объекты ORM, ещё через месяц натянешь какой-то слайдер на jQ, попутно захватив 2мб JS кривых библиотек, а через два заказчик поставит тебе плохую оценку, потому что твой ценник он оплатил не за то, что ему нужно, а потому что ты знаешь монады, которые ему даром не сдались.

    А теперь давай представим простого программиста. Из алгоритмов он с трудом вспоминает сортировку пузырьком, а двусвязный список — предел его знаний о структурах данных, и даже этим списком он пользовался два раза в жизни. Хаскель он никогда не видел в глаза, C++ учил только в школе, вместо этого пишет неэффективный код на PHP. И у него есть опыт. За день он распишет сущности, за второй сделает универсальный CRUD, на третий день поднимет фронт на React'е с SSR. Да, внутренности проекта будут "медленными". Вместо O(logN) что-то будет выполняться за O(N) или даже O(N^2), но всем похер. Пока всё работает на приемлемом уровне — бизнес радуется.

    Кстати, к чему эта поучительная лапша? Я хотел сказать, что всеми этими модными словами можно пугать друзей и преподавателей, но в реальной жизни все алгоритмы уже реализованы, все типы данных уже подобраны оптимально. Знать их полезно для себя (чтобы мозг не атрофировался), но не для работы. Для работы тебе нужны такие навыки как:

    * Оптимальный баланс между говнокодом и идеальным кодом
    * Оптимальный баланс между скоростью разработки и оптимизацией кода
    * Оптимальный баланс между поддерживаемым кодом и костылями
    * Умение использовать те инструменты, с которыми ты работаешь. Опять же, для того, чтобы писать быстро, при этом имея минимальное количество говнокода и обеспечивая максимальную поддерживаемость (в пределах сроков). Например, можешь выкинуть в помойку свой Vim, как бы круто ты себя не чувствовал, разрабатывая в консольном редакторе, если продукты от JetBrains позволят за это же время сделать что-то лучше или чего-то больше
    * Чувство "знаю больше менеджеров". Это то чувство, когда тебе кажется, что "вот эта фича скоро изменится" и надо сделать архитектуру заранее более гибкой. Или "вот эту фичу мы через месяц выпилим" и не надо тратить на неё силы — напиши костыль и через месяц с чистой совестью удали его
    * Знания, как сделать ту или иную фичу. Потому что фичи повторяются (немного видоизменяясь) от проекта к проекту. И если ты сделал что-то за два дня, в следующий раз ты похожее сделаешь за три часа

    Что касается инструментов, выбери любой полноценный фреймворк, который умеет решать 90%+ потребностей "из коробки": Symfony, Django, Laravel

    Всякие "минималистичные" поделия вроде Falcon, Flask (в PHP не знаю, я на питоне пишу) оставь хипстерам. Пусть они говорят: "Мой фалкон такой быстрый, он написан на Cython". Тебя это не должно волновать, потому что бизнес с твоей скоростью разработки уже заработал достаточно денег, чтобы купить ещё десять серверов, пока фалконисты неделю гуглили, как прикрутить миграциии и запустить юнит-тесты на VPSке за пять баксов.
    Ответ написан
    5 комментариев
  • Npm, Webpack, NodeJs с чего начать?

    @deliro
    Фронт развился в какую-то неправильную сторону, это правда
    Вкатиться на фронт очень сложно, это тоже правда. Причём, необоснованно сложно.

    Я бы выделил два пути, как можно въехать во всё это:
    1. Создать приложение на Vue или React по туториалам, затем разобраться, как и зачем оно всё
    2. Разобраться как и зачем оно всё (aka Vanilla JS), потом заняться реактами

    Имхо, вариант №2 предпочтителен и более прост, потому что на варианте №1 есть огромный шанс застрять, никогда не разобравшись, как оно работает а при любых нешаблонных ошибках поднимать лапки.

    Что здесь нужно понимать:
    1. Есть разные версии ES (ecmascript), они все обратносовместимые. Программист может писать на любой версии, какая ему нравится. Обычно берут последнюю стабильную

    2. Для проекта обычно есть две версии ES: та, на которой пишут программисты и та, которая исполняется в браузере или в ноде (об этом позже). Например, программист пишет на ES8, а код транслируется на ES5. Это позволяет использовать последние предсмертные хрипы писки моды JS при этом запуская всё на древнейшем говне вроде IE11. Перегонкой кода из JS/TS одной версии в JS другой версии занимается транспилятор: babel / esbuild / swc

    3. Новые версии JS содержат расширения стандартной библиотеки, которых нет в старых браузерах (например Array.from, Object.entries и т.п.). Эти дырки затыкают полифиллы, они же shims. Самая популярная дырозатыкательная машинка — corejs

    4. Весь код очевидно не пишется в одном файле и может быть написан на TypeScript (он же TS), JSX/TSX (реактовый синтаксис). Всё это нужно собрать в один или несколько файлов, то есть скомпоновать. Этим занимается bundler: часть webpack / esbuild / spark / etc.

    5. Этот же парень отвечает за то, чтобы та тысяча библиотек, что лежит в node_modules, попала в итоговый условный main.js, но не целиком, а только то, что используется. Последнее называется tree shaking (типа навозную кучу node_modules потрясли как дерево, что упало — то не нужно)

    6. (то самое "позже) Код может исполняться не только в браузере пользователя, но и на сервере без браузера вообще. Это нужно для SSR aka Server Side Rendering. SSR — это такой глобальный вонючий костыль для SEO. Дело в том, что стандартные SPA приложения содержат один DOM элемент, куда цепляется всё остальное приложение вроде реакта или вью, которое уже содержит всю вёрстку прямо в JS. Но не все поисковики согласны с таким подходом и некоторые (не будем показывать пальцем на яндекс) не умеют выполнять JS и индексируют только тот самый единственный DOM элемент, который существует на этапе отдачи страницы в браузер. Это уже потом к нему JS движком дорисовывается весь остальной сайт. Соответственно, сайт индексируется от слова "никак", а некоторым это важно. Например, когда SPA — это не админка. Для этого есть два выхода: страницы, важные для SEO, рендерить чем-то не-реактовым или сделать SSR — делать за яндекс работу на сервере (на ноде), представляя в уме, что у нас есть DOM и браузер (на самом деле нет), на выходе получать начальное состояние HTML, отдавать его клиенту (браузеру или поисковому роботу), а JS'ом её т.н. "гидрировать", иными словами — оживлять.

    7. webpack отвечает за всё вот это сверху в том или ином виде. Это такой кухонный комбайн, в который вкидываешь кучу хлама в одном виде, а получаешь другую кучу хлама в другом виде.

    Начать советую с parceljs, который сильно проще в освоении, чем webpack. И на написании кода максимально без библиотек.
    Ответ написан
    1 комментарий
  • Какой вариант построения условий производительнее?

    @deliro
    Очевидно, первый потребляет меньше памяти. Также он будет быстрее как минимум потому, что построение списка — это долго и дорого по сравнению с простейшим сравнением равенства.

    Но это всё спички, а ты на них экономишь. Если ты выбрал питон, то про слово "производительность" забудь в 99% случаев. Да и вообще, (почти) любой код — про читаемость прежде всего. Да, есть места вроде ядра linux, драйверов, embed и т.п., где пишут нечитаемый код, лишь бы выполнялось быстрее. Но питон от этого настолько далеко, насколько можно представить, только ещё чуть дальше.

    P.S. операция in над списком обычно не выполнятся, т.к. очевидно, сложность будет O(n). Если элементов списка не три, а значительно больше, то стоит заменить на set. Так и читабельней и быстрее.
    Ответ написан
    Комментировать
  • Как увеличить шрифт в консольной программе Python?

    За шрифт отвечает консольное окно, а не программа.
    Но мне надо так чтобы при запуске шрифт был нормальным

    Так нельзя, тк твоя программа не может знать, в чём оно запущено.
    Может на компе вообще нет GUI => нельзя увеличить шрифт.
    Ответ написан
    Комментировать
  • Как перестать говнокодить и принимать неверные архитектурные решения?

    miraage
    @miraage
    Старый прогер
    как писать поддерживаемый код?

    Если уж очень коротко, то соблюдать SOLID/GRASP. Мне понравился твит одного из авторов React Router:
    https://twitter.com/mjackson/status/1171524189850701825

    Most common mistake software developers make: putting stuff in the wrong place. Coupling responsibilities and concepts that should be kept separate.
    For me, this is 95% of software development. Just figuring out *where* things belong.


    Что гуглить, что учить?

    Фундаментальные знания, вроде вышеупомянутых SOLID/GRASP, паттерны (не только классические паттерны, но и вообще, общеизвестные решения определённых задач), базовые структуры данных. Фреймворки/библиотеки всегда будут приходить/уходить, что-то будет забываться. А фундаментальные знания всегда актуальны.

    Может литературу какую почитать посоветуете?

    Скажу за себя. Ни одной из этих известных книжек за свою жизнь не прочитал. Писал много говнокода дома, очень много. Удалял, переписывал. Смотрел код других людей, анализировал, пытался перенять то, что считал правильным.

    Можно ли себя называть миддлом, если твой код говно?

    Не пытайтесь себя оценить. В каждой компании свои понятия миддла. А если кто-то 35 лет на лиспе кодил, а потом прыгнет на Angular - кто он, джун или сеньор?
    И, да, все мы в какой-то степени пишем говнокод. Если кто-то Вам доказывает, что он пишет супер чистый код - не слушайте.

    И ответ на главный вопрос.
    Как перестать говнокодить и принимать неверные архитектурные решения?

    Это невозможно. Все проекты, которые чуток сложнее CRUD-ов, рано или поздно обрастают говнокодом. Никто не пишет идеальный код. Код должен работать и решать проблемы бизнеса.
    Ответ написан
    6 комментариев
  • Как список строк превратить в словарь?

    0xD34F
    @0xD34F
    dict(n.split('=') for n in arr)
    Ответ написан
    Комментировать
  • Как спарсить данные из PDF таблицы?

    Adamos
    @Adamos
    которое высылается каждый день в pdf файле в виде таблицы

    Кем? Рептилоидами, которые не идут на контакт и съедают всех почтовых голубей?
    Имхо, вы мужественно преодолеваете искусственно созданные проблемы.
    Причем, возможно, добьетесь кое-каких результатов... но первое же изменение "у них" эти ваши результаты похерит вдребезги напополам, и придется начинать все сначала.
    Запросите у источника данные в другом формате и не делайте себе голову.
    Ответ написан
    2 комментария
  • Современные платформы по созданию блога?

    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.
    Итого: увы, на мой взгляд, лучшей альтернативы ему пока нет.
    Ответ написан