• Как набить руку на Python разработку и сисадминистрирование за 2 месяца?

    ri_gilfanov
    @ri_gilfanov
    Web- and desktop-developer
    Веб-разработка и администрирование сетевых ресурсов более востребованы, поэтому я бы рекомендовал изучить следующее:
    • основы и стандартная библиотека Python -- навык лучше прокачивается написанием скриптов и программ для решения неучебных задач. И если основной навык миддла -- это гуглить (полу)готовые решения, то основной навык джуна -- уметь писать свои "велосипеды". Разработчик, который по-максимуму использует и полагается на готовое -- столь же неэффективен, как и предпочитающий использовать готовое по-минимуму;
    • веб-фреймворк Django -- пилите небольшой проект, получаете общие представления о веб-разработке и практику ООП, но о Python этот веб-фреймворк расскажет мало, делает слишком много работы за программиста, а в его исходном коде можно заплутать, так и не поняв как он работает;
    • система контроля версий Git -- обязательно для разработчика и желательно для сисадмина;
    • wsgi-сервер uWSGI (или Gunicorn) -- см. ниже;
    • http-сервер Nginx -- см. ниже;
    • GNU/Linux -- пробуете развернуть проект с использованием предыдущих двух пунктов;
    • веб-фреймворк Flask -- просто пощупайте или сделайте ещё один небольшой веб-проект, по исходникам этого веб-фреймворка проще понять как работают другие веб-фреймворки и как писать поддерживаемый код, к тому же на Flask часто пилят всякие API / бэкенды;

    Настольные приложения и мобильная разработка на Python кажется менее развита и менее востребована, но когда-нибудь можете пощупать:
    • Python GTK+ 3 (или PySide2) -- Python обёртки над GUI инструментариями для разработки настольных приложений;
    • Kivy -- фреймворк преимущественно для мобильной разработки.

    И, если вопрос предполагает поиск работы через пару месяцев, то работодателям обычно нужны те, разработчики, что будут решать их "бизнес-задачи": снижать расходы, повышать доходы и минимизировать риски. Проще говоря, знание математики, алгоритмов и модных технологий могут не пригодится вообще, а вот доведённые до ума проекты расскажут о Вас работодателю намного больше.
    Ответ написан
    4 комментария
  • Bootstrap-Vue - В чём фишка данного симбиоза?

    copist
    @copist
    Empower people to give
    Расскажите плиз о технологии, и чем развёрнутей, тем лучше.

    Вот захотел ты сделать сайт SPA или PWA с любимой тебе вёрсткой на базе Twitter Bootstrap и любимой библиотеки Vue. Сверстал. Поповеры не появляются, дропдауны не выпадают, модалки не открыватся, формы не валидируются, клики не работают.

    Оригинальный Twitter Bootstrap имеет поддержку интерактивных элементов на Javascript. Реализовано это на библиотеке jQuery. Если делаешь на Vue, придётся подключать ещё и jQuery, что лишняя библиотека на 100+ килобайт, что, конечно, не катастрофа (пока ты не на мобилке).

    Vue работает с состояниями привязывает данные к отображению, а jQuery работает с DOM и событиями. Это вопрос производительности. Работа JQuery начитается когда загружен и распарсен JS и HTML. Работа Vue начинается в тот момент, когда загружен и распарсен JS, то есть чуть раньше. jQuery модифицирует DOM на лету, перестраивая текущий документ. Vue работает с shadow DOM, а затем подсовывает уже готовую интерактивную страницу в пустой документ, что быстрее (разница в секунды на десктопе, десятки секунд на м...).

    Vue реализует компонентную парадигму. Куски страницы являются изолированными кусочками кода (HTML CSS JS), которые цепляются между собой динамически, а обмениваются данными через аттрибуты и события. Предположим, что вы решили следовать компонентной парадигме, тогда согласно вот такому примеру нужно будет увязать самостоятельно все интерактивные компоненты. Компонента-кнопка. Компонента-поле ввода. Компонента-форма. Компонента-контейнер. Получается около 50 компонент. Для некоторых надо будет написать логику на jQuery. Если посмотреть на код jQuery этих микрокомпонент, то он окажется несложный, его вполне можно переписать на Vue. Ну там класс заменить или клик отработать. Когда от кода jQuery не останется следа, его можно будет из проекта удалить.

    И вот получается Bootstrap-Vue

    На компоненты побили. От Jquery избавились. Написано в единой парадигме. Работает быстрее.

    Добавляем тот факт, что в Vue можно не импортировать компоненты, которые не нужны (например, я не работаю с дропдаунами и модальным окнами) и код становится меньше, грузится быстрее, работает быстрее.

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

    Это сам изучай и сравнивай. Навыки и опыт воздушно-капельным и через Internet не передаётся
    Ответ написан
    4 комментария
  • Что происходит при выполнении функции sum(1 for _ in g)?

    adugin
    @adugin Куратор тега Python
    Подсчитывается "длина" итератора по элементам соответствующей группы, т.е. количество элементов.
    Весь алгоритм проще переписать так:
    from collections import Counter
    
    lst = ['a', 'c', 'f', 'r', 'a', 'a', 'f']
    lst.sort()  # не обязательно
    result = Counter(lst)
    Ответ написан
    1 комментарий
  • Как средствами Django подсчитать время, в течении которого была открыта вкладка браузера?

    @AlexandrBirukov
    вебсокеты в помощь - https://channels.readthedocs.io/en/latest/ все до секунды посчитаешь
    Ответ написан
    Комментировать
  • Какое даст понимание язык программирование ассемблер, абсолютному новичку?

    fox_12
    @fox_12
    Расставляю биты, управляю заряженными частицами
    Может дать понимание как работает железо - как устроена память, что происходит с регистрами при операциях, что такое прерывания, стек, и прочее...
    ООП - это совершенно другой уровень абстракции. Как раз чтобы абстрагироваться от железа и работать с некими абстрактными сущностями - объектами, не задумываясь особо о том как это будет реализовано в железе.
    Ответ написан
    Комментировать
  • Как подобрать оптимальную архитектуру для проекта?

    idegree
    @idegree
    Senior Workaround Developer
    Просто пробуйте и все получится. Не бойтесь ошибиться. Вот когда столкнетесь с чем-то конкретным, тогда и спрашивайте. Это и будет полезный опыт.
    Ответ написан
    Комментировать
  • Не совсем шарю в Python, русским языком объяснить что значит (:=) в нем?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Ответ написан
    Комментировать
  • Когда в django нужно использовать модели?

    kgb_zor
    @kgb_zor
    I need your traceback.
    Модели нужны для того чтобы упростить взаимодействие с БД.
    Вы данные откуда будете брать? В html можно указать статические данные, которые в реальном времени никак не изменить.

    Вы вообще читали что-то о Django?
    Такое ощущение, будто вы узнали о моделях и сразу пришли узнавать ТУТ, для чего они, хотя ГУГЛ заполнен этой информацией по самое не хочу.
    Ответ написан
    Комментировать
  • Как избавиться от глобальной переменно в файле views.py?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Django
    Седой и строгий
    @lru_cache
    def get_cities(id):
        METHOD = 'database.getCities'
        response = requests.get(
            f'{URL}{METHOD}?access_token={TOKEN}&v={VK_API}&country_id={id}'
        )
        content = response.json()
        return [i['title'] for i in content['response']['items']]
    
    
    def show_cities(request, id, ordered=False):
        cities_list = get_cities(id)
        if ordered:
            cities_list = sorted(cities_list, key=lambda x: x[0])
        return render(request, 'countries/cities_list.html', {'cities': cities_list})
    Ответ написан
    1 комментарий
  • Как избавиться от глобальной переменно в файле views.py?

    alternativshik
    @alternativshik
    Сделать в одном методе и получение и сортировку, держать города в бд.
    Ответ написан
    2 комментария
  • Возможен ли импорт схемы БД в модели Django?

    alternativshik
    @alternativshik
    manage.py inspectdb > models.py

    Иногда полезно читать офф документацию
    Ответ написан
    Комментировать
  • Возможен ли импорт схемы БД в модели Django?

    fox_12
    @fox_12 Куратор тега Django
    Расставляю биты, управляю заряженными частицами
    В документации по Django все описано:
    https://docs.djangoproject.com/en/2.2/howto/legacy...
    Ответ написан
    Комментировать
  • Как не начать говн*кодить?

    usdglander
    @usdglander Куратор тега PHP
    Yipee-ki-yay
    Забавный вопрос:
    Сначала Вы всё равно будете говнокодить! Потом перестанете и станете перфекционистом! А потом всё равно СНОВА станете говнокодить, ну либо будете срывать сроки. :)))
    Ответ написан
    4 комментария
  • Почему Python неправильно считает?

    adugin
    @adugin Куратор тега Python
    Это ошибка округления в операциях с плавающей точкой. Читайте тут.
    Ответ написан
    Комментировать
  • Как вычислить 9**(9**9) не потратив на это огромное количество времени?

    sergiks
    @sergiks Куратор тега Алгоритмы
    ♬♬
    Алгоритм:
    1. ручкой пишем на бумаге первые несколько степеней 9
    2. в голове появляется догадка
    Ответ написан
    3 комментария
  • Почему в большинстве модулях Python имена классов с маленькой буквы?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    Потому что вот.
    Вы можете зайти в папку python/Lib и открыть файл datetime.py < именно его вы и импортируете. А в нём самом просто вызываемые методы. Да, там есть класс datetime, но тут действует правило:
    The naming convention for functions may be used instead in cases where the interface is documented and used primarily as a callable.
    Ответ написан
    Комментировать
  • Как правильно установить Linux на ноутбук Lenovo IdeaPad Z500, V580 (и аналогичные), сохранив возможность загрузки Windows 8?

    Ubuntu и Fedora умеют корректно устанавливаться через UEFI.
    Вам необходим 64-битный образ (32 бита не загрузятся через UEFI, необходим 32-bit EFI). Заранее подготовьте разделы для будущей системы (root, home, swap, на своё усмотрение), можно и во время установки, но разметчики в инсталяторах довольно ограничены в настройках. Можно с того же LiveCD Ubuntu/Fedora с помощью gparted.

    Грузимся c LiveCD через UEFI (в биосе отключаем legacy-mode) через boot-menu по f12 (у меня lenovo y500, думаю отличия незначительные). У меня пункт называется "EFI CD" примерно (точно не помню).
    (Если вы начнёте установку в Legacy-mode, то ядро не будет иметь доступа к настройкам UEFI и не сможет добавить пункт загрузки)

    Запускаем инсталятор. Во время выбора разделов для монтирования выбираем root, home, tmp или что там вы понасоздавали.
    И самое главное. Это важно. Выбираем для EFI-раздела точку монтирования "/boot/efi/". Строчными буквами. На самом разделе лежит один-единственный каталог "EFI". Т.е. пути к загрузчикам будут иметь вид "/boot/efi/EFI/". Не перепутайте.

    В принципе всё. Далее можно продолжать установку. Инсталятор скопирует на EFI-раздел необходимые файлы для загрузки (подписанный ключом Microsoft загрузчик shim и grub) и сам пропишет boot-entry в UEFI. Windows-запись не должна повредиться. После установки в boot-menu появятся 2 новые записи "Ubuntu" и "ubuntu". Одна для загрузки через BootSecure (с помощью загрузчика shim, он подписан). Shim и без SecureBoot будет работать, но будет ругаться в начале. Это не критично.

    Учтите, что с SecureBoot вы не сможете использовать пропиретарные драйверы в Linux. Даже открытые, если вы сами их собираете. Всё драйверы должны быть подписаны ключом.

    Если вы отключите SecureBoot, то можете использовать любые модули. Но Windows 8 будет ругаться на неправильно настроенный SecureBoot.

    Совет: перед манипуляциями обновите bios до последней версии.
    Ответ написан
  • Почему все просто зависает и перегружается?

    longclaps
    @longclaps
    a = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя'
    a = list(a)
    b = a
    print(id(a) == id(b)) # True, a и b - один и тот же list
    b = a[:]
    print(id(a) == id(b)) # False, теперь разные
    for i in a:
        b += [i.upper()]
    print(b)
    Ответ написан
    6 комментариев