• Какие русскоязычные аналоги Хабр существуют?

    1) Аналогов хабра нет.
    2) Сейчас главная политика хабра направлена на то, чтобы зарабатывать на крупных айти-компаниях. Отсюда куча никчемных статей в блогах компаниях. Реально открываешь хабр, и там в ленте какие-то статьи компаний, новостной мусор и холиварные срачи.
    3) Раз главная цель заключается в том, чтобы доить корпоративные блоги, хабр всячески вставляет палки в колеса обычным авторам. Как итог, с хабра разбежалось много крутых авторов. Хабр, конечно, сделал шаг назад и дал небольшие послабления, но уже поздно.
    4) Если хочется прямо вести свой блог и писать в нем все, что тебе хочется - создавай собственный сайт, веди твиттер.
    5) На цукере последнее время выходят более умные, качественные и объемные статьи, чем на хабре.
    Ответ написан
    2 комментария
  • Как еще чуть ускорить алгоритм?

    Vindicar
    @Vindicar
    RTFM!
    А не проще ли будет сделать в два прохода.
    Прямым проходом делаем так: если 0, то счетчик в ноль, иначе счетчик + 1 и элемент приравниваем счетчику.
    Потом то же самое делаем обратным проходом, но изменяем элемент только если он больше счетчика.
    Отсюда получаем:
    lst=[5, 3, 0, 2, 0, 3, 8, 2, 9, 7, 0, 0, 7, 1, 5, 3]
    L = len(lst)
    # если в начале списка не 0, то мы сможем задать корректные значения только на обратном ходе
    # так что ставим заведомо большее значение счетчика
    counter = len(lst) if lst[0] != 0 else 0
    for i in range(0, L):
      if lst[i] == 0:
        counter = 0
      else:
        counter += 1
        lst[i] = counter
    # обратный ход
    counter = lst[-1] - 1 #чтобы не запороть последние элементы
    for i in range(L-1, -1, -1):
      if lst[i] == 0:
        counter = 0
      else:
        counter += 1
        lst[i] = min(counter, lst[i])
    
    print(lst)
    # [2, 1, 0, 1, 0, 1, 2, 3, 2, 1, 0, 0, 1, 2, 3, 4]

    Правда, это даст некорректный результат, если список не содержит нулей. Но это можно обнаружить в ходе первого прохода.
    Ответ написан
    2 комментария
  • Как еще чуть ускорить алгоритм?

    @dmshar
    А вот так не быстрее будет?
    (Пример специально усложнил)

    lst=[5, 3, 0, 2, 0, 3, 8, 2, 9, 7, 0, 0,7,1, 5, 3]
    
    l=[i for i,v in enumerate(lst) if v == 0]
    m_l=[]
    for i,ls in enumerate(lst):
        m=len(lst)
        for j in l:
            if m>abs(i-j):
                m=abs(i-j)
        m_l.append(m)
    print (m_l)


    Результат:
    [2, 1, 0, 1, 0, 1, 2, 3, 2, 1, 0, 0, 1, 2, 3, 4]

    Если надо еще ускорить - можно порождать список m_l сразу, т.е.
    m_l=[len(lst)]*len(lst)
    и
    m_l.append(m)
    заменить на
    m_l[i]=m
    За счет статики работы с списком должно бы получиться еще быстрее.
    Ответ написан
    2 комментария
  • Зачем используют Django и Python, разве не удобнее сразу все сделать через Node.js и javascript фреймворки?

    @calculator212
    В итоге получается что у JS огромное преимущество перед Python в области разработки сайтов, так как на нем можно сразу писать и бэк, и фронт.
    Вообще вы не правы, есть много вакансий, на которые нужны только Node.js разрабы.

    В итоге проект повиснет в ожидании исполнителя.
    А если разраб один, то вообще всё повиснет если он уйдёт. Фулстеков на джанго не намного меньше чем фулстеков на js.

    Прикрутив Bootstrap мы немного приукрасим скелет, но он все равно не будет отвечать требованиям современных динамических сайтов, типа асинхронная подгрузка комментов, вывод онлайн лайков, дизлайков. Все это может реализовать только умелый js программист.
    Для проектов у которых есть 2 программиста обычно это не ключевые моменты (да и не все пишут соц. сети и клоны ютубов). Есть проекты, где статических сайтов будет достаточно, а если работодатель хочет дешево заплатить за сложную работу, то он должен понимать к чему это может привести.
    Ответ написан
    Комментировать
  • Зачем используют Django и Python, разве не удобнее сразу все сделать через Node.js и javascript фреймворки?

    Hivemaster
    @Hivemaster
    Админ, который хочет программировать
    JavaScript - очень плохой язык, который выжил только благодаря его безальтернативности на фронте, а Node.js была создана только для того, чтобы открыть доступ в мир взрослого программирования несчастным засранцам, вкатившимся через фронт. Причём сам создатель Node.js считает её ошибкой. Лучше уж тогда развернуть ситуацию и писать фронтовый код на чём-нибудь вроде Brython. Только остаётся ещё html и css, а использовать настоящего программиста для вёрстки - это глупый расход ресурсов, проще нанять верстальщика/фронта.
    Ответ написан
    2 комментария
  • Зачем используют Django и Python, разве не удобнее сразу все сделать через Node.js и javascript фреймворки?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    Бекенд - это не язык. Это понимание соответствующих технологий работы с базами данных, кешированием, работы со структурами данных, протоколами, технологиями, алгоритмами, построением архитектуры и связыванием с внешними сервисами и прочее...
    А поскольку это охватывает очень большой пласт проблем - и произошла специализация.

    А Python разработчики имеют дело в основном только с бэкенд - и понятия про фронтенд у них будут на уровне dummy html, css, bootstrap.

    Угу... При таком подходе - с чего вы взяли тогда что у фронта будут достаточные знания о работе бекенда? Раз по-вашему бекендер только в dummy html может, - а фронтендер сразу с ходу сможет оптимизированные запросы к БД к примеру писать? )))) Если ваш фронтендер настолько крут - то в принципе незнание языка не помеха, поскольку язык - только инструмент.
    Ответ написан
    3 комментария
  • Что хранится внутри request в django?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Django
    Седой и строгий
    Изначально request хранить только запрос. Все остальные поля добавляют middleware. В частности user добавляет AuthenticationMiddleware. Соответственно и списка нет, надо смотреть документацию подключенных middleware.
    Ответ написан
    1 комментарий
  • Как удалить свой аккаунт с Хабра?

    jalkoby
    @jalkoby
    напиши пост, и тебя почестями отправят на покой
    Ответ написан
    1 комментарий
  • Как вообще понимать декораторы в Python?

    @o5a
    Дальше у меня возник вопрос и ступор - мы почему то возвращаем не результат выполнения функции wrapper, а возвращаем саму функцию-объект.

    Так и есть. Нам же не нужно в самом декораторе вызывать функцию, а только указать, какую функцию мы используем. Без скобок () это просто ссылка на сам объект (функцию).
    Пример:
    def f1(): return 1
    
    a = f1() # присваиваем результат работы функции, т.е. в a будет 1
    a = f1 # присваиваем саму функцию
    # тогда a - это не результат работы функции f1, а сама функция f1
    # и мы можем ее запустить
    print(a() ) # выведет 1, т.к. мы через a запустили f1

    Декораторы так и делают. Создают функцию и возвращают ее, но не запускают. А запускается эта "обертка" во время запуска нашей основной функции.
    Т.е. когда добавляется декоратор
    @uppercase
    def greet(): ...
    # то когда мы запускаем функцию
    greet()
    # по факту запускается
    uppercase(greet)()

    Но что возвращает uppercase(greet) ? Смотрим по коду. А возвращает она некий wrapper. Что делает wrapper?
    original_result = func() # запускает переданную ему функцию на исполнение, в нашем случае greet
    return f'Большие {original_result.upper()}' # и возвращает строку с результатами исполнения

    И она сама каким-то образом вызывается и выполняется, хоть мы и явно не пишем это.

    Исполняется потому, что запуск декорированной функции означает запуск
    uppercase(greet)()
    а т.к. uppercase(greet) возвращает wrapper
    то uppercase(greet)() запускает wrapper()
    Ответ написан
    Комментировать
  • Камера видеонаблюдения тратит энергии больше, когда её смотришь или нет?

    @Newbie2
    Да, больше. Когда подключаетесь к камере - она шлёт поток в сеть. То есть начинает интенсивный работать сетевая карта, сильнее нагружается процессор камеры.
    Ответ написан
    2 комментария
  • Как работает электрический генератор, что происходит когда нагрузка больше чем он вырабатывает?

    hint000
    @hint000
    у админа три руки
    100к киловатт - это уже будет 100 мегаватт, буква "к" лишняя.

    Допустим если генератор сжигает кучу топлива и вырабатывает 100к киловатт. Но потребителям требуется лишь половина, 50к киловатт. Остальная половина просто куда-то исчезнет, улетит куда-то?
    Нет, 100 кВт - это максимальная мощность. Если потребляют 50 кВт, то генератор вырабатывает 50кВт и сжигает примерно вдвое меньше топлива (не будем вдаваться в подробности про КПД).
    Конечно, совсем без нагрузки сколько-то топлива будет расходоваться, но мало. Ну там 1% или 5% от максимального расхода. Когда нет нагрузки - это называется холостой ход.

    какой-нибудь автосервис будет вовсю использовать все сварочные аппараты и для стабильной работы потребуется 150к киловатт. Что тогда будет? Просто упадет напряжение допустим с 220В до 170В
    Тут верно. Так и будет. Вырабатываемая мощность будет 100 кВт, потребляемая тоже 100 кВт, ток в сети увеличится, а напряжение уменьшится.

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

    gbg
    @gbg Куратор тега Электроника
    Любые ответы на любые вопросы
    "Нагрузка" для генератора выглядит как попытка затормозить его двигатель. Регулирование происходит путем стабилизации оборотов (при большей нагрузке больше открывается дроссель) и изменения напряжения возбуждения на генераторе.

    Если нагрузка превысит номинал, сработает автоматика и отключит нагрузку, или генератор заглохнет.
    Ответ написан
    4 комментария
  • Как быть Python junior?

    @Trahibidadido
    Backend/DevOps
    1) Не ищи удаленку. Если Москва\Питер - просто пиши резюме на вакансии мидлов, главное опиши те скиллы в которых уверен. Из того что ты должен знать если хочешь идти именно питонистом, если идешь в веб:
    а) Все true pythonic way - итераторы, каскады, взаимодействия со словарями и т.д., дабы ни у кого не возникало вопросов.
    б) Ориентироваться в библиотеках, а главное грамотно подключать зависимости
    в) один из веб фреймворков, django\flask в фаворе
    д) sql, желательно чистый. Организация схем хранения, ключи, индексы, нормализация и денормализация данных, построение сложных запросов и т.д.

    С этим багажом, тем более если тебе 20-22 можешь спокойно писать на вакансии seniorа, HR сам поймет что ты даже не мид, но если голова на плечах и в тебе увидят потенциал - 99% возьмут. Питонисты стоят дорого и их мало, а любая мало-мальски серьезная компания готова их растить.

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

    Попал на работу python-джуном именно так. Сейчас, спустя 4 месяца и 2 вытащеных из ямы проекта - стабильный джун ушедший на повышение. На мне команда из еще трех разработчиков. P.S. никогда не бойся тестеров и DBA, они твои лучшие друзья ;)
    Ответ написан
    3 комментария
  • Почему мне нужно заранее объявить i для цикла?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Потому что цикл идет от 0 до len(table[i]). А что такое i, если она не объявлена?
    Если нужно просто кол-во элементов в одном списке, можно просто заменить на 0 допустим.
    И получится
    for i in range(0, len(table[0]), 1):

    Первый ваш цикл - аналог моему, только в моем берется первый элемент из списка по индексу 0 table[0], а в вашем вместо 0 выступает переменная i, равная 0.
    Ответ написан
    Комментировать
  • Можно ли любое GUI положение сперва реализовать в консольном варианте, а потом уже привязывать к нему GUI?

    romesses
    @romesses
    Backend инженер
    Можно ли любое GUI положение сперва реализовать в консольном варианте, а потом уже привязывать к нему GUI?
    Едва ли. Для простых еще можно, а для сложных, как Excel?
    Начинать нужно с проектирования:
    - расписать какие есть сценарии работы
    - начать собирать макеты интерфейса
    - определить что требуется на входе и на выходе каждого действия
    - декомпозировать на мелкие задачи
    - спроектировать интерфейсы вызовов API
    - разделить их на логические модули - DLL и их аналоги
    - написать заглушку для каждого вызова
    - написать некоторые тесты
    - реализовать интерфейсы поэтапно
    - пробовать на тестовом стенде: можно консольное, а можно и графическое приложение.
    - и из кубиков собирать приложение.
    Ну как-то так.
    Ответ написан
    Комментировать
  • Можно ли любое GUI положение сперва реализовать в консольном варианте, а потом уже привязывать к нему GUI?

    @12rbah
    учить на Борланд С++

    нужно изучить STL, я открывал по ним статейки и закрывал их с мыслями что за архаизм

    Большинство мнений, которое я видел/читал/слышал как раз о том, что борланд/билдер архаизм. И вообще не понял почему stl архаизм.
    Если приложение более менее большое, то нужно логику писать отдельно от GUI.
    Можно ли любое GUI положение сперва реализовать в консольном варианте, а потом уже привязывать к нему GUI?
    Если вы правильно пишите логику, то что для консоли, что для gui вам нужно будет только сделать интерфейс, если сам gui простой, то занимает это немного времени. Некоторые вообще пишут графику поверх консольных приложений.
    Все по схеме - долго думал, прицелился, но запутался в своих мыслях и прострелил себе ногу. И вот в этот раз, наконец то я подумал - а что если любое приложение даже на этапе рисования на бумажках, начинать не с рисования ГУЙев и кнопочек, а именно с консольного ввода вывода информации? А потом привязывать к интерфейсам ввода-вывода ГУЙ и продумывать окошечки-кнопочки. А ведь об этом мне надо было задумываться еще будучи в универе - когда я написал всего два полезных для себя приложения, и оба были консольные.
    В общем писать сразу в GUI даже приложение на 1000 строк мне кажется сомнительным. Как по мне проще в консоли функционал весь написать/проверить (с тестовыми данными), а потом просто привязать к кнопке эту функцию.
    Ответ написан
    2 комментария
  • Можно ли любое GUI положение сперва реализовать в консольном варианте, а потом уже привязывать к нему GUI?

    GavriKos
    @GavriKos
    Можно. ПОловина юниксовых тулей так работает.
    Полотнище текста не читал
    Ответ написан
    Комментировать
  • Годится ли i3-2100 для клиента 1С или нужно собирать новый на базе G5420, Ryzen 3 2200G или i3-9100?

    Jump
    @Jump
    Системный администратор со стажем.
    Годится ли i3-2100 для клиента 1С
    Для описанных задач такой процессор даже избыточен. Получится производительный и шустрый системник.
    Память для офисных задач минимум 8Гб
    Под систему обязательно SSD.

    собирать новый на базе G5420, Ryzen 3 2200G или i3-9100?
    А они для поставленной задачи ничем не лучше. Разницы никакой.
    Ответ написан
    Комментировать
  • Годится ли i3-2100 для клиента 1С или нужно собирать новый на базе G5420, Ryzen 3 2200G или i3-9100?

    anthtml
    @anthtml
    Системный администратор программист радиолюбитель
    Ну смотря как его будут использовать и на сколько тяжелый клиент.
    Для складского АРМа для чиста ввода-вывода информации и меньших машинок предостаточно
    Ответ написан
    Комментировать