Pull to refresh
253
0

Пользователь

Send message

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

Reading time 4 min
Views 87K


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


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


  • Многие концепции, которые были лишь теоретическими 20 лет назад, сегодня широко применяются на практике. Например, такие функциональные парадигмы как неизменяемость объектов, хвостовая рекурсия, ленивые коллекции, сопоставление с шаблоном, функции первого класса и взгляд свысока на тех, кто всё это не использует.
  • «Десктопным приложением» многие неиронично называют упакованный браузер со страницей по умолчанию и без адресной строки.
Читать дальше →
Total votes 170: ↑168 and ↓2 +166
Comments 251

Что принёс нам Pandas 1.0

Reading time 2 min
Views 14K


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


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


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

Читать дальше →
Total votes 40: ↑40 and ↓0 +40
Comments 6

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

Reading time 2 min
Views 40K

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


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


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

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


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


Читать дальше →
Total votes 27: ↑26 and ↓1 +25
Comments 0

Отслеживаем прогресс выполнения в Python

Reading time 2 min
Views 145K

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


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


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

Читать дальше →
Total votes 43: ↑42 and ↓1 +41
Comments 11

Создаём линзы для SnapChat с использованием pix2pix

Reading time 3 min
Views 4.3K

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


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


Total votes 10: ↑10 and ↓0 +10
Comments 0

Новые фичи Python 3.8 и самое время перейти с Python 2

Reading time 3 min
Views 41K

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


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


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


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

Читать дальше →
Total votes 69: ↑67 and ↓2 +65
Comments 75

Что добавят в JavaScript уже в 2020 году

Reading time 4 min
Views 21K

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


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


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


Читать дальше →
Total votes 46: ↑44 and ↓2 +42
Comments 24

Краткая и на 146% точная история языков программирования

Reading time 4 min
Views 82K


1800


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


1842


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

Читать дальше →
Total votes 195: ↑181 and ↓14 +167
Comments 154

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

Reading time 3 min
Views 60K

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


Читать дальше →
Total votes 123: ↑112 and ↓11 +101
Comments 392

Советы по написанию самодокументируемого кода

Reading time 3 min
Views 7.1K

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


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


Читать дальше →
Total votes 19: ↑17 and ↓2 +15
Comments 17

4 крутых функции Numpy, которые я использую постоянно

Reading time 2 min
Views 16K

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


Читать дальше →
Total votes 14: ↑13 and ↓1 +12
Comments 1

Используем console.log() в Chrome на полную

Reading time 3 min
Views 40K


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


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


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

Читать дальше →
Total votes 25: ↑20 and ↓5 +15
Comments 13

Инстанцирование в Python

Reading time 4 min
Views 37K

Допустим, у вас есть класс 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). Создание экземпляра происходит немного сложнее, о чём мы и поговорим в этой статье.

Читать дальше →
Total votes 34: ↑34 and ↓0 +34
Comments 2

Атрибуты и протокол дескриптора в Python

Reading time 6 min
Views 15K

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


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!'

Читать дальше →
Total votes 11: ↑11 and ↓0 +11
Comments 2

Точки входа в Python

Reading time 6 min
Views 29K
Многие думают, что точки входа это такие инструкции в setup.py, которые позволяют сделать пакет доступным для запуска из командной строки. Это, в целом, верно, но возможности точек входа не ограничиваются этим.

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



Осторожно: специфический юмор далее по тексту.
Читать дальше →
Total votes 39: ↑39 and ↓0 +39
Comments 6

Разбираем WTF задачки в JavaScript

Reading time 2 min
Views 34K


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


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


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


Читать дальше →
Total votes 53: ↑47 and ↓6 +41
Comments 108

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

Reading time 2 min
Views 44K


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

Читать дальше →
Total votes 58: ↑49 and ↓9 +40
Comments 26

Неэффективная эффективность

Reading time 4 min
Views 8.4K


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


  • Начнёте кипятить воду на 1 чашку, чтобы вода вскипела пораньше, и одна чашка была готова как можно раньше
  • Начнёте кипятить воду на 2 чашки, чтобы приготовить их одновременно и наиболее эффективно?
Читать дальше →
Total votes 21: ↑17 and ↓4 +13
Comments 16

Прекратите использовать Else в ваших программах

Reading time 2 min
Views 30K

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


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


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


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


Читать дальше →
Total votes 78: ↑43 and ↓35 +8
Comments 179

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

Reading time 6 min
Views 15K

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

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


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


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


Читать дальше →
Total votes 23: ↑23 and ↓0 +23
Comments 9

Information

Rating
Does not participate
Registered
Activity