• Чем программирование сегодня отличается от программирования 20 лет назад?

    • Перевод


    Я увидел этот вопрос на Quora и начал писать ответ. Но ответ получился слишком большим, так что я превратил его в эту статью.


    Вот часть изменений в случайном порядке, которые я заметил в программировании за последние 20 лет:


    • Многие концепции, которые были лишь теоретическими 20 лет назад, сегодня широко применяются на практике. Например, такие функциональные парадигмы как неизменяемость объектов, хвостовая рекурсия, ленивые коллекции, сопоставление с шаблоном, функции первого класса и взгляд свысока на тех, кто всё это не использует.
    • «Десктопным приложением» многие неиронично называют упакованный браузер со страницей по умолчанию и без адресной строки.
    Читать дальше →
  • Что принёс нам Pandas 1.0

    • Перевод


    9 января состоялся релиз Pandas 1.0.0rc. Предыдущая версия библиотеки — 0.25.


    Первый мажорный релиз содержит множество замечательных нововведений, в том числе улучшенное автоматическое суммирование датафреймов, больше форматов вывода, новые типы данных и даже новый сайт документации.


    Все изменения можно посмотреть здесь, в статье же мы ограничимся небольшим, менее техническим обзором самого главного.

    Читать дальше →
  • Повышение продуктивности при работе с Jupyter Notebook за 5 минут

    • Перевод
    • Tutorial

    Для начала повторим основные горячие клавиши. Если вы их ещё не используете — начните обязательно. В долгосрочной перспективе время на изучение окупится многократно.


    0. Основные горячие клавиши


    • Esc: Переключение между режимом выполнения и редактирования
    • A: Добавление пустой ячейки сверху
    • B: Добавление пустой ячейки снизу
    • DD: Удаления ячейки
    • C: Копирование ячеек
    • X: Вырезание ячеек
    • V: Вставка ячеек

    1. Перезапуск блокнота


    Для рестарта просто нажмите ESC + 00.


    Читать дальше →
  • Отслеживаем прогресс выполнения в Python

    • Перевод
    • Tutorial

    Зачем нужны индикаторы прогресса?


    Индикаторы прогресса (progress bar) — визуальное отображение процесса работы. Они избавляют нас от необходимости беспокоиться о том, не завис ли скрипт, дают интуитивное представление о скорости его выполнения и подсказывают, сколько времени осталось до завершения.


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

    Читать дальше →
  • Создаём линзы для SnapChat с использованием pix2pix

    • Перевод
    • Tutorial

    Почти такой же заголовок носит и моя предыдущая статья, с той лишь разницей, что тогда я создавал линзы для SnapChat алгоритмически, используя dlib и openCV, а сегодня хочу показать, как можно добиться результата, используя машинное обучение. Этот подход позволит не заниматься ручным проектированием алгоритма, а получать итоговое изображение прямо из нейронной сети.


    Вот что мы получим:


    Читать дальше →
  • Новые фичи Python 3.8 и самое время перейти с Python 2

    • Перевод

    Наступил 2020 год, а значит, Python 2 перестал поддерживаться. Если быть совсем точным, то основные разработчики уже перестали заниматься веткой, а выход релиза 2.7.18, приуроченный к PyCon US в апреле 2020 года, ознаменует полное прекращение любой активности, связанной с Python 2.


    С другой стороны, совсем недавно состоялся релиз Python 3.8, добавивший немного синтаксического сахара в язык. Python 3.9 же ожидается ещё нескоро, да и пока не похоже что добавит в язык что-то интересное.


    Так что если вы вдруг ещё не отказались от Python 2, то дальше тянуть смысла просто нет: поддержка второй версии уже прекратилась, а переход сразу на 3.8 позволит использовать язык в его самом актуальном состоянии ещё долгое время.


    Ну а, чтобы решиться было проще, ниже приведён обзор главных нововведений Python 3.8, которые пригодятся каждому питонисту.

    Читать дальше →
  • Что добавят в JavaScript уже в 2020 году

    • Перевод

    Недавно опциональный доступ к аттрибутам (Optional Chaining) и значение по умолчанию для атрибутов (Nullish Coalescing) перешли на последний, четвёртый этап процесса TC39.


    На практике это означает, что эти и другие нововведения станут частью стандарта JavaScript уже в этом, 2020 году. Их мы и рассмотрим в этой статье.


    Отслеживать поддержку браузерами можно здесь («2020 features») — прим. перев.


    Читать дальше →
  • Краткая и на 146% точная история языков программирования

    • Перевод


    1800


    Жозеф Мари Жаккар учит ткацкий станок читать перфокарты, создавая первый многопоточный процессор. Изобретение в штыки приняли ткачихи, которые уже тогда что-то подозревали.


    1842


    Ада Лавлейс, устав от положенного по социальному классу безделья, делает наброски в блокноте, которые станут известны как первая компьютерная программа. С поправкой, конечно, на то, что компьютеров тогда ещё не было.

    Читать дальше →
  • Задачки по программированию — плохой способ оценки квалификации Senior Developer'а

    • Перевод

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


    Читать дальше →
  • Советы по написанию самодокументируемого кода

    • Перевод

    Слова «самодокументируемый код» — это ещё один способ сказать «читаемый код». Сам по себе он не заменит настоящей документации или хороших комментариев, но с ними или без них определённо сделает вашу жизнь и жизнь ваших коллег проще.


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


    Читать дальше →
  • 4 крутых функции Numpy, которые я использую постоянно

    • Перевод

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


    Читать дальше →
    • +12
    • 5,2k
    • 1
  • Используем console.log() в Chrome на полную

    • Перевод


    Сложно представить себе разработку на JS без вывода информации в консоль. Говоря метафорически, console.log() — лекарство от большинства болезней кода.


    Отладка — почти как расследование преступления, где главный преступник тоже вы — Филипе Фортес


    Но помимо повсеместно используемой функции console.log(), есть ещё много инструментов, позволяющий сильно упростить процесс. Давайте разберём некоторые из них на простых примерах.

    Читать дальше →
  • Инстанцирование в Python

    • Перевод

    Допустим, у вас есть класс Foo :


    class Foo(object):
        def __init__(self, x, y=0):
            self.x = x
            self.y = y

    Что происходит, когда вы создаёте его объект?


    f = Foo(1, y=2)

    Какой метод вызывается первым при этом вызове Foo? Большинство новичков, да и, возможно, немало опытных питонистов тут же ответят: «метод __init__». Но если внимательно приглядеться к сниппетам выше, вскоре станет понятно, что такой ответ неверен.


    __init__  не возвращает никакого результата, а Foo(1, y=2), напротив, возвращает экземпляр класса. К тому же __init__ принимает self в качестве первого параметра, чего не происходит при вызове Foo(1, y=2). Создание экземпляра происходит немного сложнее, о чём мы и поговорим в этой статье.

    Читать дальше →
  • Атрибуты и протокол дескриптора в Python

    • Перевод
    • Tutorial

    Рассмотрим такой код:


    class Foo:
        def __init__(self):
            self.bar = 'hello!'
    
    foo = Foo()
    print(foo.bar)

    Сегодня мы разберём ответ на вопрос: «Что именно происходит, когда мы пишем foo.bar




    Вы, возможно, уже знаете, что у большинства объектов есть внутренний словарь __dict__, содержащий все их аттрибуты. И что особенно радует, как легко можно изучать такие низкоуровневые детали в Питоне:


    >>> foo = Foo()
    >>> foo.__dict__
    {'bar': 'hello!'}

    Давайте начнём с попытки сформулировать такую (неполную) гипотезу:


    foo.bar эквивалентно foo.__dict__['bar'] .


    Пока звучит похоже на правду:


    >>> foo = Foo()
    >>> foo.__dict__['bar']
    'hello!'

    Читать дальше →
    • +11
    • 3,9k
    • 2
  • Точки входа в Python

    • Перевод
    • Tutorial
    Многие думают, что точки входа это такие инструкции в setup.py, которые позволяют сделать пакет доступным для запуска из командной строки. Это, в целом, верно, но возможности точек входа не ограничиваются этим.

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



    Осторожно: специфический юмор далее по тексту.
    Читать дальше →
    • +39
    • 15k
    • 6
  • Разбираем WTF задачки в JavaScript

    • Перевод


    JavaScript язык особенный. Сколько его не изучай, всегда найдутся моменты, которые заставят даже матёрого профессионала начать чесать репу.


    В этой статье приводятся несколько задачек на JavaScript, связанных с необычным поведением языка. Кому-то они помогут узнать что-нибудь новое, а кто-то просто сможет освежить знания.


    Задачка 1 — «BANANA»


    Читать дальше →
  • Самый полезный модуль стандартной библиотеки Python, о котором все постоянно забывают

    • Перевод


    В Python много отличных доступных «из коробки» модулей. Один из самых полезных — collections. Он содержит «специализированные типы для создания контейнеров», являющихся альтернативами универсальным dict, list, set и tuple. Ниже мы рассмотрим три содержащихся в модуле класса, с которыми большинство питонистов сталкивались, но постоянно забывают применять на практике.

    Читать дальше →
  • Неэффективная эффективность

    • Перевод


    Вы делаете утренний кофе. Хотите приготовить 2 чашки. Вы:


    • Начнёте кипятить воду на 1 чашку, чтобы вода вскипела пораньше, и одна чашка была готова как можно раньше
    • Начнёте кипятить воду на 2 чашки, чтобы приготовить их одновременно и наиболее эффективно?
    Читать дальше →
  • Прекратите использовать Else в ваших программах

    • Перевод

    Когда я только начинал программировать, хотел бы я, чтобы тогда нашёлся кто-то, кто мог бы рассказать об основных подводных камнях, с которыми я столкнусь при создании моего первого сайта.


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


    Дисклеймер: нижеизложенное — исключительно моё субъективное мнение.


    Приём, о котором я собираюсь рассказать, работает не всегда и иногда использовать else всё-таки придётся. В остальных случаях отказ от else поможет сделать код чище.


    Читать дальше →
  • Превращаем скрипты в красивые инструменты для машинного обучения

    • Перевод

    Создаём семантический поисковик с машинным обучением в реальном времени за 300 строк Python кода.

    Мой опыт подсказывает, что любой более или менее сложный проект по машинному обучению рано или поздно превращается в набор сложных неподдерживаемых внутренних инструментов. Эти инструменты, как правило, мешанина из скриптов Jupyter Notebooks и Flask, которые сложно развёртывать и интегрировать с решениями типа GPU сессий Tensorflow.


    Впервые я столкнулся с этим в университете Карнеги, затем в Беркли, в Google X, и, наконец, при создании автономных роботов в Zoox. Зарождались инструменты в виде небольших Jupyter notebooks: утилита калибровки сенсора, сервис моделирования, приложение LIDAR, утилита для сценариев и т.д.


    С ростом важности инструментов появлялись менеджеры. Бюрократия росла. Требования повышались. Маленькие проекты превращались в огромные неуклюжие кошмары.


    Читать дальше →
    • +23
    • 7,1k
    • 9