100 Days of Python

Предыдущую попытку я забросила, хотя саму учебу нет. Недавно купила bundle курсов от Talk Python и решила пройти их курс #100DaysOfCode in Python. Курс прохожу и для себя, чтобы немного размяться, плюс для того чтобы можно было с чистой совестью рекомендовать его всем желающим.

Даже после беглого просмотра могу сказать, что все здорово организовано, а подробней напишу уже как пройду курс чуть дальше.

Базовые правила 100 Days of Code с небольшими изменениями

  • Каждый день уделять изучению Python 1 час
  • Хотя бы половина времени должны тратиться на код (в идеале час в день)
  • После каждой сессии коротко описать прогресс и что именно я делала в этот день
  • В репозитории каждый день должен быть хотя бы один коммит
  • Можно прогулять один день в неделю, но нельзя два дня подряд
  • Все прогулы не учитываются

Day 1: July 30, 2018

В курсе все разделено на темы и на каждую тему выделено по 3 дня:

  • 1 день - теория
  • 2 день - задачки и практика
  • 3 день - продолжение практики

За сегодня я посмотрела видео первого дня, сделала задачки за второй день и начала задачку из третьего. Начала делать свой pomodoro timer и пока сделала костяк скрипта, а завтра уже буду добавлять реальную работу. Если успею, завтра также добавлю интерфейс для вызова скрипта в командной строке, но пока не решила делать его с argparse (его я знаю и будет проще) или с click (пробовала только пару раз).

Time:

  • 30 минут видео
  • 1 час 10 минут код

Day 2: July 31, 2018

Сегодня продолжаю работать над таймером pomodoro. Он уже вполне рабочий, хотя пока запускаю всё в секундах, вместо минут. Это легко меняется, достаточно будет изменить только одну функцию в финальной версии.

В целом всё уже работает, но ещё остается добавить интерфейс в cli с argparse или click. Пока что склоняюсь к click, так как его я знаю намного хуже.

Пример выполнения скрипта (записан с помощью termtosvg):

Time: 1 час 30 минут код

Day 3: August 1, 2018

Завершила работу над таймером Pomodoro. Сегодня добавила интерфейс командной строки. Остановилась на click. Теперь все параметры можно указывать при вызове скрипта.

Пока оставила на будущее оповещения и обошлась добавлением цвета в вывод. Плюс теперь таймер уже полноценно работает по минутам, а не секундам.

Пример выполнения скрипта с секундными интервалами (записан с помощью termtosvg):

Time: 1 час 20 минут код

Day 4: August 2, 2018

Начала следующую тройку дней, тема - модуль collections. Посмотрела лекции и сделала задание Code Challenge 13 - Highest Rated Movie Directors. Задание в целом простое, но соображаю я сегодня хуже, чем обычно, так что времени ушло больше.

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

Time:

  • 15 минут видео
  • 2 часа код

Day 5: August 3, 2018

Сегодня занималась вечером, так что вместо намеченного скрипта делала задачки Bites of Py. Решила делать все с самого начала, так что пока сделала intro и пару beginner.

Time: 1 час код

Day 6: Aug 4, 2018

За сегодня написала скрипт, который парсит отчет FCC. Слушатели могут подключаться к лекции несколько раз и тогда в отчете они тоже видны несколько раз. Я обработала записи и собрала вместе информацию о каждом слушателе. Позже в курсе будут темы связанный со скарпингом HTML страниц, так что отложила этот аспект на потом. Возможно, в следующие дни займусь сбором информации из нескольких отчетов и сводной статистикой по посещению лекций онлайн.

На данный момент скрипт из такого отчета:

Caller,Service Type,Start Date and Time,End Date and Time,Duration
jane@example.com - Jane Austen,VoIP,2018-07-01 09:49:33 +0300,2018-07-01 13:16:09 +0300,207m
markt@example.com - Mark Twain,VoIP,2018-07-01 09:57:35 +0300,2018-07-01 13:16:10 +0300,199m
charles.dickens@example.com - Charles Dickens,VoIP,2018-07-01 10:00:10 +0300,2018-07-01 13:00:21 +0300,180m
Homer,VoIP,2018-07-01 12:37:06 +0300,2018-07-01 13:16:11 +0300,40m
william@example.com - William Shakespeare,VoIP,2018-07-01 09:58:10 +0300,2018-07-01 13:16:12 +0300,198m
dumas1802@example.com - Alexandre Dumas,VoIP,2018-07-01 09:51:18 +0300,2018-07-01 13:16:12 +0300,205m
Jules.Verne@example.com - Jules Verne,VoIP,2018-07-01 09:58:13 +0300,2018-07-01 13:16:12 +0300,198m
dumas1802@example.com - Alexandre Dumas,VoIP,2018-07-01 13:18:28 +0300,2018-07-01 13:21:32 +0300,3m
charles.dickens@example.com - Charles Dickens,VoIP,2018-07-01 13:00:20 +0300,2018-07-01 13:16:11 +0300,16m

Генерирует такую таблицу

name                 email                          duration  first seen           last seen
-------------------  ---------------------------  ----------  -------------------  -------------------
Alexandre Dumas      dumas1802@example.com               208  2018-07-01 09:51:18  2018-07-01 13:21:32
Jane Austen          jane@example.com                    207  2018-07-01 09:49:33  2018-07-01 13:16:09
Mark Twain           markt@example.com                   199  2018-07-01 09:57:35  2018-07-01 13:16:10
William Shakespeare  william@example.com                 198  2018-07-01 09:58:10  2018-07-01 13:16:12
Jules Verne          Jules.Verne@example.com             198  2018-07-01 09:58:13  2018-07-01 13:16:12
Charles Dickens      charles.dickens@example.com         196  2018-07-01 10:00:10  2018-07-01 13:16:11
Homer                                                     40  2018-07-01 12:37:06  2018-07-01 13:16:11

Time: 3 часа код

Day 7: Aug 5, 2018

Сегодня только лекции. Посмотрела лекции по 7 дню и начала смотреть курс Write Pythonic Code Like a Seasoned Developer

Time: 1.5 часа лекции

Day 8: Aug 6, 2018

Решила 4 задачки Bites of Python

Time: 50 минут код

Day 9: Aug 7, 2018

Решила 9 задачек Bites of Python и продолжаю слушать курс Write Pythonic Code Like a Seasoned Developer.

Time:

  • 1 час видео
  • 1.5 часа код

Day 10: Aug 8, 2018

Сегодня только лекции.

Time: 1 час лекции

Day 11: Aug 9, 2018

Решила 6 задачек Bites of Python

Time: 1 час код

Day 12: Aug 10, 2018

Решила 6 задачек Bites of Python

Time: 1 час код

Day 13: Aug 11, 2018

Сегодня только лекции.

Time: 1 час лекции

Day 14: Aug 12, 2018

Сегодня по курсу сделала задачку с игрой Rock Paper Scissors.

Time: 1 час код

Day 15: Aug 13, 2018

Сегодня сделала задачку по курсу 15-way Rock Paper Scissors и решила 7 задачек Bites of Python (дорешала все beginner).

$ python rock_paper_scissors_15_way.py
---------------------------------
------ Rock Paper Scissors ------
---------------------------------
Enter your name: nata
Make your roll: dragon
Player Player(nata) roll: Roll(dragon)
Player Player(computer) roll: Roll(fire)
Result: Player(nata) win Player(computer)

Make your roll: paper
Player Player(nata) roll: Roll(paper)
Player Player(computer) roll: Roll(snake)
Result: Player(nata) lose Player(computer)

Make your roll: rock
Player Player(nata) roll: Roll(rock)
Player Player(computer) roll: Roll(tree)
Result: Player(nata) win Player(computer)

Make your roll: dragon
Player Player(nata) roll: Roll(dragon)
Player Player(computer) roll: Roll(fire)
Result: Player(nata) win Player(computer)

Make your roll: fire
Player Player(nata) roll: Roll(fire)
Player Player(computer) roll: Roll(rock)
Result: Player(nata) lose Player(computer)

Player(nata) winned

Time: 1.5 часа код

Day 16: Aug 14, 2018

Сегодня новая тема list comprehensions and generators. Послушала лекции и два часа на код: решила challenge 11 и 5 задачек intermediate уровня.

Time:

  • 15 минут видео
  • 2 часа код

Day 17: Aug 15, 2018

Так как вчера я сделала все что было по темам на три дня, сегодня решаю задачки: 6 задачек intermediate уровня.

Time: 1 час 10 минут код

Day 18: Aug 16, 2018

Сегодня сделала 4 задачки intermediate уровня

Time: 1 час код

Day 19: Aug 17, 2018

Сегодня сделала 2 задачки, еще одну вроде сделала, но что-то ответ не совпадает.

Time: 1 час код

Day 20: Aug 18, 2018

Сегодня сделала 1 задачку и посмотрела видео по новым темам itertools.

Time:

  • 30 минут код
  • 30 минут видео

Day 21: Aug 19, 2018

Сегодня сделала задачку с созданием светофора и одну intermediate уровня

Пример выполнения скрипта со светофором (записан с помощью termtosvg):

Day 22: Aug 20, 2018

Сегодня решила три задачки intermediate уровня.

Time:

  • 1 час 20 минут код
  • 23 минуты видео

Day 23: Aug 21, 2018

Сегодня решила пять задачек intermediate уровня.

Время 1 час 10 минут код

Day 24: Aug 22, 2018

Сегодня решила 4 задачки intermediate уровня.

Time: 1 час код

Day 25: Aug 23, 2018

Сегодня решила 6 задачек intermediate уровня.

Time: 1 час 45 минут код

Day 26: Aug 24, 2018

Сегодня решила 3 задачки intermediate уровня и посмотрела лекции по теме.

Time:

  • 20 минут лекции
  • 40 минут код

Day 27: Aug 25, 2018

Сегодня решила 5 задачек intermediate уровня.

Закончилось самое сложное время - отпуск :) Все дни, как минимум, час занималась и почти каждый день час тратила на код, в основном, решала задачки.

Time: 1 час 20 минут код

Day 28: Aug 26, 2018

Сегодня решила 2 задачки advanced уровня.

Time: 1 час код

Day 29: Aug 27, 2018

Сегодня решила 6 задачек advanced уровня.

Получила красивую бумажку :)

Time: 2 часа код

Day 30: Aug 28, 2018

Сегодня только лекции

Time: 50 минут лекции

Day 31: Aug 29, 2018

Сегодня начала следующую тему - логирование. Узнала про модуль logbook. Добавила базовое логирование в Pomodoro timer из 3 дня. Завтра продолжу разбираться с logbook

Time:

  • 1 час лекции
  • 1 час код

Day 32: Aug 30, 2018

Сегодня решила 2 задачки advanced уровня

Time: 1 час код

Day 33: Aug 31, 2018

Сегодня только лекции

Time: 1 час лекции

Day 34: Sep 1, 2018

Сегодня решила 2 задачки intermediate уровня.

Time: 1 час код

Day 35: Sep 2, 2018

Сегодня решила 2 задачки intermediate уровня.

Time:

  • 40 минут код
  • 35 минут лекции

Day 36: Sep 3, 2018

Последние несколько дней как-то тяжелее заниматься, видимо отчасти потому что вечером кодила, но похоже не только. Сегодня тоже вечером, но хорошо пошло. А может задачек передозировка :)

Сегодня дополняла свой pomodoro timer: добавила запись статистики в бд, позже будет рассматриваться plotly, вот тогда еще займусь рисованием графиков на основании статистики.

Time: 1 час 20 минут код

Day 37: Sep 4, 2018

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

Time: 1 час лекции

Day 38: Sep 5, 2018

Сегодня поступила умно и занималась утром - разница огромная. Работала с данными по популярности песен и исполнителей классического рока. Было весело :)

Такой получился скрипт:

$ python get_best_classic_rock.py --help
Usage: get_best_classic_rock.py [OPTIONS]
Options:
  -c, --category [artist|song]
  -t, --top INTEGER             [default: 10]
  --sort_asc
  --help                        Show this message and exit.


$ python get_best_classic_rock.py -c artist
Artist                           Songs playcount
-----------------------------  -----------------
Led Zeppelin                                1556
Van Halen                                   1243
Rolling Stones                              1143
Pink Floyd                                  1044
Tom Petty & The Heartbreakers                965
AC/DC                                        866
Aerosmith                                    813
ZZ Top                                       712
The Beatles                                  704
Queen                                        694


$ python get_best_classic_rock.py -c song
Name                         Artist          Year    Playcount
---------------------------  ------------  ------  -----------
Dream On                     Aerosmith       1973          142
Sweet Emotion                Aerosmith       1975          141
All Along the Watchtower     Jimi Hendrix    1968          141
You Shook Me All Night Long  AC/DC           1980          138
More Than a Feeling          Boston          1976          134
Carry On Wayward Son         Kansas          1976          134
Peace of Mind                Boston          1976          132
Crazy On You                 Heart           1976          125
Legs                         ZZ Top          1983          121
Sharp Dressed Man            ZZ Top          1983          120

Time: 1 час 40 минут код

Day 39: Sep 6, 2018

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

Time: 1:20 код

Day 40: Sep 7, 2018

Сегодня только лекции.

Time: 2:00 лекции

Day 41: Sep 8, 2018

Сегодня только лекции.

Time: 2:15 лекции

Day 42: Sep 5, 2018

Сегодня работала с JSON и данными из OMDb API. Продолжаю использовать click для cli. Так я больше запоминаю, плюс он мне нравится.

Такой получился скрипт:

$ python get_marvel_stats.py rating
title                      year    rating    runtime      money
-----------------------  ------  --------  ---------  ---------
Avengers: Infinity War     2018       8.7        149  664987816
The Avengers               2012       8.1        143  623279547
Guardians of the Galaxy    2014       8.1        121  270592504
Iron Man                   2008       7.9        126  318298180
Thor: Ragnarok             2017       7.9        130  314971245


$ python get_marvel_stats.py rating --top 10
title                                  year    rating    runtime      money
-----------------------------------  ------  --------  ---------  ---------
Avengers: Infinity War                 2018       8.7        149  664987816
The Avengers                           2012       8.1        143  623279547
Guardians of the Galaxy                2014       8.1        121  270592504
Iron Man                               2008       7.9        126  318298180
Thor: Ragnarok                         2017       7.9        130  314971245
Captain America: The Winter Soldier    2014       7.8        136  228636083
Captain America: Civil War             2016       7.8        147  408080554
Guardians of the Galaxy Vol. 2         2017       7.7        136  389804217
Doctor Strange                         2016       7.5        115  232630718
Spider-Man: Homecoming                 2017       7.5        133  334166825


$ python get_marvel_stats.py money -t 8
title                             year    rating    runtime      money
------------------------------  ------  --------  ---------  ---------
Avengers: Infinity War            2018       8.7        149  664987816
The Avengers                      2012       8.1        143  623279547
Black Panther                     2018       7.4        134  501105037
Avengers: Age of Ultron           2015       7.4        141  429113729
Iron Man 3                        2013       7.2        130  408992272
Captain America: Civil War        2016       7.8        147  408080554
Guardians of the Galaxy Vol. 2    2017       7.7        136  389804217
Spider-Man: Homecoming            2017       7.5        133  334166825


$ python get_marvel_stats.py runtime
title                                  year    rating    runtime      money
-----------------------------------  ------  --------  ---------  ---------
Avengers: Infinity War                 2018       8.7        149  664987816
Captain America: Civil War             2016       7.8        147  408080554
The Avengers                           2012       8.1        143  623279547
Avengers: Age of Ultron                2015       7.4        141  429113729
Captain America: The Winter Soldier    2014       7.8        136  228636083

Time: 1:25 код

Day 43: Sep 10, 2018

Сегодня только лекции.

Time: 0:30 лекции

Day 44: Sep 11, 2018

Сегодня только лекции.

Time: 1:10 лекции

Day 45: Sep 12, 2018

Небольшой скрипт для поиска эпизодов подкаста Talk Python:

$ python search_talkpython.py concurrency
There are 27 matching episodes:
1. Monitoring high performance Python apps at Opbeat
2. Flask, Django style with Flask-Diamond
3. Fluent Python
4. Adding concurrency to Django with Django Channels
5. Effective Python
6. Grumpy: Running Python on Go
7. Deep Dive into Modules and Packages
8. Crossing the streams with Podcast.__init__
9. Shipping software to users
10. MongoDB Applied Design Patterns
11. Simplifying Python's Async with Trio
12. Python in Biology and Genomics
13. Scaling Python to 1000's of cores with Ufora
14. SQLAlchemy and data access in Python
15. Home Assistant: Pythonic Home Automation
16. Enterprise Python and Large-Scale Projects
17. A Pythonic Database Tour
18. Turbogears and the future of Python web frameworks
19. Python concurrency with Curio
20. PyPy - The JIT Compiled Python Implementation
21. Python and MongoDB
22. Create better Python programs with concurrency, libraries, and patterns
23. Quart: Flask, but 3x faster
24. Python Book Authors'  Panel Discussion
25. Python for Humans projects
26. 10 top talks of PyCon 2017 reviewed
27. Inside the new PyPI launch


$ python search_talkpython.py concurrency --table
There are 27 matching episodes:
  Index    Show number  Title
-------  -------------  -----------------------------------------------------------------------
      1             43  Monitoring high performance Python apps at Opbeat
      2             97  Flask, Django style with Flask-Diamond
      3             24  Fluent Python
      4             98  Adding concurrency to Django with Django Channels
      5             25  Effective Python
      6             95  Grumpy: Running Python on Go
      7             12  Deep Dive into Modules and Packages
      8             68  Crossing the streams with Podcast.__init__
      9            127  Shipping software to users
     10            109  MongoDB Applied Design Patterns
     11            167  Simplifying Python's Async with Trio
     12            154  Python in Biology and Genomics
     13             60  Scaling Python to 1000's of cores with Ufora
     14              5  SQLAlchemy and data access in Python
     15            122  Home Assistant: Pythonic Home Automation
     16              4  Enterprise Python and Large-Scale Projects
     17            105  A Pythonic Database Tour
     18             35  Turbogears and the future of Python web frameworks
     19            107  Python concurrency with Curio
     20             21  PyPy - The JIT Compiled Python Implementation
     21              2  Python and MongoDB
     22             58  Create better Python programs with concurrency, libraries, and patterns
     23            147  Quart: Flask, but 3x faster
     24            148  Python Book Authors'  Panel Discussion
     25            115  Python for Humans projects
     26            116  10 top talks of PyCon 2017 reviewed
     27            159  Inside the new PyPI launch

Time: 1:00 код

Day 46: Sep 13, 2018

Сегодня доделывала скрипт для переноса решения заданий из ветки master в task_check. Добавила поддержку отдельных заданий и glob выражений.

Time: 1:10 код

Day 47: Sep 14, 2018

Сегодня только лекции.

Time: 1:00 лекции

Day 48: Sep 16, 2018

Решила две задачки Bites of Py.

Один день пропустила

Time: 1:00 код

Day 49: Sep 17, 2018

Сегодня только лекции: лекция по курсу, плюс выступление Refactoring Python: Why and How to Restructure Your Code

Time: 1:00 лекции

Day 50: Sep 18, 2018

Сегодня только лекции: смотрю выступления с pycon.

Time: 1:00 лекции

Day 51: Sep 19, 2018

Сегодня только лекции: смотрю выступления с pycon 2018.

Time: 1:10 лекции

Day 52: Sep 20, 2018

Сегодня только лекции: смотрю выступления с pycon.

Time: 3:30 лекции

Day 53: Sep 21, 2018

Сегодня только лекции: смотрю выступления с pycon.

Time: 2:00 лекции

Day 54: Sep 22, 2018

Сегодня только лекции: смотрю выступления с pycon.

Time: 2:40 лекции

Day 55: Sep 23, 2018

Сегодня только лекции.

Time: 1:00 лекции

Day 56: Sep 24, 2018

Сегодня только лекции: смотрю выступления с pycon.

Time: 0:40 лекции

Day 57: Sep 25, 2018

Сегодня только лекции: смотрю выступления с pycon.

Time: 1:05 лекции

Day 58 Sep 26, 2018

Сегодня только лекции: смотрю выступления с pycon и начала курс Async Techniques and Examples in Python

Time: 2:30 лекции

Day 59 Sep 27, 2018

Продолжаю смотреть курс Async Techniques and Examples in Python.

Time: 0:30 лекции

Day 60 Sep 28, 2018

Продолжаю смотреть курс Async Techniques and Examples in Python.

Time: 0:40 лекции

Day 61 Sep 29, 2018

Продолжаю смотреть курс Async Techniques and Examples in Python.

Time: 1:10 лекции

Day 62 Sep 30, 2018

Продолжаю смотреть курс Async Techniques and Examples in Python.

Time: 1:00 лекции

Day 63 Oct 1, 2018

Продолжаю смотреть курс Async Techniques and Examples in Python.

Time: 1:05 лекции

Day 64 Oct 2, 2018

Продолжаю смотреть курс Async Techniques and Examples in Python.

Time: 0:50 лекции

Day 65 Oct 3, 2018

Продолжаю смотреть курс Async Techniques and Examples in Python.

Time: 0:50 лекции

Статистика 1-20 день

Идеи скриптов

  • Дополнить скрипт для переноса решения заданий из ветки master в task_check: сделать поддержку отдельных заданий
  • разбор логов FCC по присутствию на лекциях
  • поиск по всем моим репозиториям (часто надо вспомнить где был пример кода)
  • скрипт, который отображает задание по номеру + интеграция со slack
  • workout log
  • pytest: тесты для заданий
  • проверка доступности ссылок в книге