• Как выйти из ступора и стагнации?

    inoise
    @inoise Куратор тега Карьера в IT
    Solution Architect, AWS Certified, Serverless
    Обожежтымой. Никогда не было и вот опять.

    В середине 2020 года начал изучать Python( ранее изучал C++)

    Ну и куда с такими знаниями. Люди чтобы получить работу от года пашут, учатся на курсах, света белого не видят чтобы получить работу в разработке. Куда так быстро?

    Отправлял своё резюме на позицию Python Junior Developer, но безуспешно.

    Вот когда с сотню компаний обойдешь - можно будет задуматься о том что не так и начать собирать обратную связь

    Data Science, ML

    Наверное единственное направление в IT куда без релевантной вышки дорога закрыта

    уверяет что порог вхождения в оную разработку более низок нежели в Web-backend

    На заборе тоже много чего написано. У каждого в IT своя история и у каждого свое видение ситуации. Получить первую работу в любом случае тяжело и очень часто больше удача

    Если проблема исключительно личностное(характер), прошу указать решение.

    Проблемы вообще нет. Есть непонимание как рынок устроен
    Ответ написан
    4 комментария
  • Почему последнее время в Разработке такие маленькие зарплаты?

    Zoominger
    @Zoominger
    System Integrator
    Лол, а что вы хотели-то?

    Вместо людей, пришедших в IT по призванию и добившихся успеха многолетним тяжким трудом, подкреплённым истинным фанатизмом и любовью к своему труду (это я про себя, да), в сферу ломанулось стадо откровенно глупеньких и недалёких вайтишников, которые насосались пропаганды от курсоводов про "триста тыщ на удалёнки на пехепе нинапригаясь", причём оглянитесь - этих балбесиков даже не переубедить, они свято верят, что в IT деньги раздают просто так и что веб - это лежать под пальмами с Макпуком и пить коктейли, которые подносят мулатки. По факту же вместо Мальдив - хрущёвка, вместо Макпука - убогий Хлаоми, а вместо мулаток и коктейлей - мамка с чаем из пакетика.

    И да:
    условно говоря юниор средняя около 30-40к

    15-20k. Рублей. В мегаполисе. В галере с полной загрузкой.
    Ответ написан
    6 комментариев
  • Как сделать так, чтобы переменная внутри if стала общей?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    f никогда не будет равно 5, так как input возвращает строку, а не число, поэтому блок условного выражения никогда не выполнится и присваивания k нового значения не произойдёт.
    Ответ написан
    1 комментарий
  • Комментарии кода на русском - это плохо?

    @vshvydky
    Это понятно, если твой код для понимания тобой, это идеально.
    Ответ написан
    Комментировать
  • На каком языке писать комментарии для проекта?

    tundramani
    @tundramani
    твердое убеждение
    — это догмат
    ну типа не кошерно и не православно писать не на церковно-англицком
    и не модно, фу ))

    надо делать так как тебе удобно
    если все русские - то лучше писать всё по русски

    я работаю сам - всё делаю по-русски, и переменные тоже - так выше скорость работы
    а если кого то это бесит - я ржу над такими инвалидами
    Ответ написан
    2 комментария
  • На каком языке писать комментарии для проекта?

    Tiendil
    @Tiendil
    Разработчик ПО.
    На языке, на котором общается команда, с учётом будущего её развития.

    В противном случае получится испорченный телефон.

    Учтите, что родной язык знают все, а иностранный могут не знать (люди учат немецкий, французский, китайский, etc).
    Ответ написан
    Комментировать
  • Насколько надёжный данный шифр?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Классические шифры полагаются на то, что никто не догадывается, как их расшифровать, а подбор вручную может быть не очень простым делом. И то, на самом деле, некоторые из них ломаются очень просто. Например, шифр простой замены ломается частотным анализом, а шифр сдвига - просто перебором разных вариантов сдвига, число которых не превышает длины алфавита.

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

    Основа современной криптографии - вычислительная сложность. Можно даже всё знать об алгоритме шифрования - но за разумное время расшифровать не получится. Но старинные методы шифрования "символ-в-символ" вычислительно очень просты и никак не годятся в современном мире.
    Ответ написан
    8 комментариев
  • Как вы называете свои сервера?

    Лично я, называю по первым буквам названия проекта. Например, kb1, rb1.

    Была практика названия проектов именами девушек — неудачная. Однажды начальство в моём разговоре с админом услышало «Ирина лежит и дожидается тебя». Полдня объясняли, кто такая «Ирина» и почему она «лежит». А затем пришлось переименовывать все звания серверов.
    Ответ написан
    Комментировать
  • Как повторно импортировать модуль?

    @Miit
    async awaiter
    Если вам нужно прям заново вызывать модуль, то сперва вам нужно удалить его из объекта modules в стандартной библиотке sys, а затем заново вызвать импорт. Либо можете использовать функцию reload из модуля importlib.
    Во всех остальных случаях, лучше просто объявить функцию в модуле, которую вам необходимо вызывать.

    Примеры

    import sys
    import some_module
    
    del sys.modules['some_module']
    import some_module

    from importlib import reload
    import some_module
    reload(some_module)

    Ответ написан
    Комментировать
  • Как отправить письмо с задержкой?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Django
    Седой и строгий
    Создать модель заданий на отправку почты, содержащую дату создания задания или дату его срабатывания, и management command, запускаемый раз в день кроном, выбирающий из БД задания на сегодня и отправляющий письма. Либо не изобретать велосипед и использовать Celery.
    Ответ написан
    Комментировать
  • Как вести два одинаковых проекта, имя возможность дорабатывать их вместе и по отдельности?

    Robur
    @Robur
    Знаю больше чем это необходимо
    1) вы себя проклянете, если правок будет хоть немного больше парочки.
    2) это тот же 1) только сбоку. С точки зрения гита - мало разницы между втрой веткой в том же репо или такой-же веткой в другом репо. команды на мерж кода будут разные, все остальное - одно и то же.

    оба норм если количество разных правок небольшое и работу над одним из проектов вы точно и стопроцентно завершите в ближайшем будущем.
    Ну или если вы полностью разделите эти проекты, и работа над ними будет независима, тогда вариант 1)

    3) правильный вариант. Стоит ли он потраченных усилий - это уж только вы сами можете оценить.
    Ответ написан
    8 комментариев
  • Как шифровать личные данные пользователей?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Давайте различать. Шифрование пароля - это не то же самое, что шифрование других данных. Пароль следует не шифровать, а хешировать. Это такое шифрование, которое нельзя расшифровать обратно. То есть имея хеш нельзя получить пароль, а имея пароль можно получить точно такой же хеш. Существуют для этого специальные хеш функции. Но хешировать пароли мало, их нужно сперва солить. Соль - это произвольный текст, присоединённый к паролю перед хешированием и размещаемый рядом с хешем в открытом виде. Нужна соль для того, чтобы нельзя было подбирать простые пароли по значению их хешей.
    Проверка пароля будет такой:
    1. Запрашиваем у пользователя логин и пароль.
    2. Достаём из БД по логину хеш солёного пароля.
    3. С этой солью хешируем введённый пользователем при авторизации пароль и сличаем хеши. Совпали -- значит пускаем.

    Шифрование других данных, очевидно, нужно уже обратимое, чтобы можно было расшифровать. И теперь есть два варианта: серверное и клиентское шифрование.

    Серверное не имеет смысла, поскольку скомпрометированный сервер означает утечку всего необходимого для расшифровки данных. Не скомпрометированный сервер означает, что данные и так вроде бы в безопасности. Значит шифровать не нужно (ну кроме некоторых специальных случаев).

    Клиентское шифрование - это когда сервер не имеет возможности расшифровать данные. Они шифруются на клиенте перед отправкой ключом, который не покидает пользовательского компьютера. Потом клиент снова запросит шифрованные данные с сервера и расшифрует его тоже сам. Это иногда имеет смысл. Например если вы храните keychain с паролями на сервере, но не хотите их утечки в случае взлома сервера.

    Есть ещё p2p шифрование, где с помощью специального алгоритма пользователи обмениваются ключами через сервер так, чтобы эти ключи не мог узнать ни сервер, ни кто иной. Далее от пользователя к пользователю ходит через сервер шифрованная информация, которую кроме оконечных пользователей никто не может расшифровать. Это так называемое оконечное шифрование.

    В итоге хранить шифрованные данные на сервере не нужно, поскольку всё что нужно для расшифровки тоже на этом сервере. Если кто-то туда влез, то он и ключи шифрования свистнет и данные перехватит после расшифровки или перед расшифровкой. Нет смысла прятать сиськи. если жопа голая.

    О, чуть не забыл. Есть опасность утечки незашифрованных данных из датацентров при наличии физического доступа к жестким дискам. Чтобы обезопасить себя в этом смысле, можно применить прозрачное шифрование файловой системы. Работающая операционная система будет знать ключ для расшифровки данных, но отсоединённый диск становится без ключа бесполезным. Однако это малоэффективно, если украдут весь сервер вместе с дисками. Зато эффективно против восстановления жуликами данных, если диск сгорел, а его сисадмин выбросил не просверлив.

    Ещё один аспект - это канал передачи. Нет смысла опасаться перехвата незашифрованных данных в канале передачи даже на последней миле провайдера клиента. Об этом заботится SSL когда правильно настроен HTTPS и сертификаты не скомпрометированы, а пользователь не подмахнул левый сертификат.

    Если вы задаёте вопрос о необходимости шифрования, значит вам ничего сверх вышесказанного шифровать не нужно. Это усложнит систему, сделает её менее надёжной, более (как ни парадоксально) уязвимой и отнимет ресурсы процессора, памяти, не даст использовать или усложнит кэширование и прочие оптимизации.
    Ответ написан
    Комментировать
  • Что значить pip install -e.?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Этот ключ означает, что пакет будет установлен в редактируемом режиме:

    -e, --editable Install a project in editable mode (i.e. setuptools "develop mode") from a local project path or a VCS url.

    Такое нужно, если мы хотим править исходники пакета, который устанавливаем.
    При этом пакет будет размещен не в обычный каталог site-packages, а в текущий или указанный каталог. Пути для поиска установленного пакета будут добавлены в переменную среды окружения и питон без труда найдёт установленную библиотеку не смотря на её необычное месторасположение.
    Найти это можно так:
    pip install --help
    Ответ написан
    Комментировать
  • Как лучше всего разделить проект Django на приложения?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Django
    Седой и строгий
    Не нужно выделять homepage в отдельное приложение. Всегда есть корень проекта, которого для этого функционала достаточно.
    То, что портфолио можно создавать только из под авторизованного аккаунта, не делает его частью приложения, отвечающего за авторизацию.
    Модели у каждого приложения должны быть свои. Связи между приложениями - это нормально.
    Ответ написан
    Комментировать
  • Как можно оптимизировать использование памяти при работе с экземплярами классов в Python?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    Попробуйте так класс определить:
    class Unit:
      __slots__ = ('number', 'radius', 'width', 'color')
    
      def __init__(self, number, radius, width, color):
    
        self.number = number
        self.radius = radius
        self.width = width
        self.color = color
    
        l.append(self)


    Без использования __slots__
    Partition of a set of 71837 objects. Total size = 6887839 bytes.
     Index  Count   %     Size   % Cumulative  % Kind (class / dict of class)
         0  10000  14  1120000  16   1120000  16 dict of __main__.Unit
         1  12606  18  1099993  16   2219993  32 str
         2  10056  14   729024  11   2949017  43 tuple
         3  10000  14   560000   8   3509017  51 __main__.Unit
         4    561   1   460680   7   3969697  58 type
         5   2512   3   361909   5   4331606  63 types.CodeType
         6   4892   7   340577   5   4672183  68 bytes
         7   2413   3   328168   5   5000351  73 function
         8  11220  16   317416   5   5317767  77 int
         9    561   1   269392   4   5587159  81 dict of type
    <125 more rows. Type e.g. '_.more' to view.>


    С использованием __slots__:
    Partition of a set of 61841 objects. Total size = 5928031 bytes.
     Index  Count   %     Size   % Cumulative  % Kind (class / dict of class)
         0  12606  20  1099995  19   1099995  19 str
         1  10058  16   729232  12   1829227  31 tuple
         2  10000  16   720000  12   2549227  43 __main__.Unit
         3    561   1   460512   8   3009739  51 type
         4   2512   4   361909   6   3371648  57 types.CodeType
         5   4892   8   340583   6   3712231  63 bytes
         6   2413   4   328168   6   4040399  68 function
         7  11220  18   317416   5   4357815  74 int
         8    561   1   269392   5   4627207  78 dict of type
         9    400   1   181760   3   4808967  81 set
    <124 more rows. Type e.g. '_.more' to view.>
    Ответ написан
    Комментировать
  • Как поменять изображение на рабочем столе Windows 10?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    Тебе нужно сделать всего 2 действия:
    1. Открыть гугл, написать "python change wallpaper windows 10" и просто открыть самую первую ссылку. Это я сделал за тебя, вот она.
    2. Открыть гугл, написать "run python on startup windows 10". Давай, я верю в тебя, ты сможешь нажать на первую ссылку (иногда по первой ссылке нет нужного ответа, но не беда - есть еще 2, 3, 4 и вообще много-много ссылок, не бойся их нажимать).

    Правда есть один нюанс - если ты тупо скопируешь код из ответа по первой ссылке и попробуешь таким образом его запустить - возможно что-то пойдет не так и тебе нужно будет чуть-чуть подумать и подредактировать код, что бы он соответствовал требованиям. Подумать тебе может помочь очень добрый дядька - Марк Лутц, он даже книгу написал, шикарную книгу, честно.
    Ответ написан
    1 комментарий
  • Функция return в python 3,8 выдает ошибку, почему?

    netpastor
    @netpastor
    Python developer
    Комментировать
  • Функция return в python 3,8 выдает ошибку, почему?

    @0pauc0
    После того, как правильно расставите отступы:

    def max_a(x, y):
        if x > y:
            return x
        else:
            return y


    задумайтесь, как поведет себя ваш код, если будут введены одинаковые x и y.
    Ответ написан
    Комментировать