Прасуньвайце свае навыкі Python, стварыўшы аналізатар чатаў WhatsApp

Кіраваны праект, які дапаможа вам пагрузіцца ў стварэнне чагосьці крутога і самастойна асвоіць карысныя канцэпцыі праграмавання!

Пошук спосабаў прымяніць свае веды толькі пасля працэсу навучання па сутнасці азначае, што навучанне адбылося без асаблівага сэнсу прызначэння. Усё, што мы спрабавалі зрабіць, гэта назапасіць усе веды, якія мы маглі спадзявацца, што яны прыйдуць у карысць у нейкай далёкай, містычнай будучыні.

Ці не здаецца гэта адтэрміноўкай?

Я веру ў падыход да навучання, які падкрэслівае выкананне праектаў.

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

Акрамя таго, гэта супер весела і захапляльна.

Вы можаце атрымаць усё гэта толькі ў тым выпадку, калі робіце праект. Таму я думаю, што варта таго, каб сканцэнтраваць усё сваё навучанне вакол завяршэння праекта.

Калі вы хочаце пагрузіцца ў стварэнне чагосьці цікавага і пазнаёміцца ​​з карыснымі навыкамі праграмавання Python / праграмавання на гэтым шляху, гэта кіраўніцтва для вас.

У гэтым кіраўніцтве я імкнуся правесці вас, стварыўшы нешта цікавае, што дазваляе вам адчуваць складаныя інтуіцыі праграмавання, калі вы будуеце яго. Будзем спадзявацца, што вы пераходзіце ад асноўнага Pythonista да прасунутага.

Але, самае галоўнае, я хачу даць вам матывацыю і стымул, каб вы навучылі сябе.

Што вы даведаецеся

Вось некаторыя навыкі падручніка, якія вы падбярэце:

  • Апрацоўка файлаў
  • Радкавыя аперацыі ў Python
  • Функцыі
  • Модулі
  • Pip і выкарыстанне іншых пакетаў
  • Рэгулярныя выразы (RegEx) у Python

Але гэта не падручнік. Так што разам з імі вы таксама будзеце развіваць інтуіцыю пра добрыя практыкі праграмавання, такія як:

  • Важнасць чытання вашага кода і стылю кадавання
  • Калі і як разбіць код на функцыі
  • Як ісці пры адладцы кода (калі вы хочаце ударыць галавой аб сцяну)
  • Як шукаць рэчы ў Інтэрнэце - карыстайцеся Google, карыстайцеся Stack Overflow, чытайце дакументацыю і г.д.
  • Разумець неабходнасць у розных структурах дадзеных і калі выкарыстоўваць

Давайце тады.

Пытанне: "Добра, што я будую?"

Добра, вось вось ідэя:

Пры зносінах з блізкім сябрам вы ніколі не хацелі ведаць:

  • Колькасць паведамленняў, адпраўленых кожным з вас
  • Сярэдняя даўжыня вашых паведамленняў
  • Хто тэксты першы і першы тэкст у кожнай размове
  • Ваша мадэль часу ў чаце - пагадзінная, штодзённая і штомесячная
  • Найбольш распаўсюджаныя спасылкі на вэб-сайт
  • Самыя распаўсюджаныя словы, якія выкарыстоўвае кожны з вас

Ці не было б крута, калі б вы напісалі праграму, якая проста вылічыла ўсе гэтыя рэчы для вас?

Пытанне: "Але наколькі гэта крута?"

Reddit кажа, што крута "14k балаў"!

Ваша праграма знойдзе падобныя вынікі і раздрукуе іх для вас без графікаў і візуалаў.

Пытанне: "Крута! Але я гатовы? "

"Кожны выдатны распрацоўшчык, якога вы ведаеце, патрапіў туды, вырашаючы праблемы, якія яны не маглі кваліфікаваць, пакуль яны не зрабілі гэтага".
- Патрык Маккензі

Думаючы пра гэтыя лініі, я лічу, што:

  • Калі вы ведаеце асновы наступнага ў Python - зменныя, спісы, слоўнікі, цыклы, умовы, функцыі - вы гатовыя.
  • У адваротным выпадку, калі вы пачатковец у Python, але ведаеце асновы на іншай мове, прайдзіце гэты хуткі падручнік Python - і я думаю, вы будзеце гатовыя.

Проста пагрузіцеся ў першае раўназначнае практыкаванне "Прывітанне, свет" ніжэй. Калі вы зможаце завяршыць гэта, вы гатовыя.

Пытанне: "І як я буду гэта будаваць?"

WhatsApp дазваляе экспартаваць любы чат у тэкставы файл, які выглядае прыблізна так:

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

Але гэта не дастаткова дапамогі, так?

"Добра, давайце тады".

Дарожная карта для пабудовы аналізатара чата WhatsApp

MS0: Наладзьце сваё асяроддзе

Калі вы пачынаеце, вы не хочаце марнаваць гадзіны на стварэнне свайго асяроддзя. Палова вашай матывацыі забіваецца менавіта там, праўда?

Repl.it - ​​гэта выхад з гэтай расстройства расчаравання.

Гэта вэб-сайт, які прадастаўляе Інтэрнэт-ідэнтыфікатар практычна для кожнай мовы, да якога вы можаце атрымаць бясплатны доступ усяго за некалькі клікаў. Гэта выдатна падыходзіць для невялікіх праектаў, такіх як той, які мы будуем.

MS1: Упэўненасць у тым, што ўсё працуе ("Добры дзень, свет!")

Кожная кніга / навучальны дапаможнік па праграмаванні пачынаецца з "Прывітанне, свет!" праграма. Чаму гэта так?

Акрамя таго, што вітае пачаткоўцаў, гэтая праграма выконвае задачу пераканання вучня, што ў яе асяроддзі створаны і што ўсё працуе. Таму, калі яна зробіць гэта правільна, яе праграма таксама будзе працаваць.

Улічваючы гэтыя мэты, вось ваша "Прывітанне, свет!" - эквівалентная праграма:

Надрукаваць "Я цябе люблю 3000" 3000 разоў. (Любыя фанаты Marvel там?)

Гэта добрая магчымасць паглыбіцца і:

  • Паглядзіце, ці гатовыя вы нырнуць у праект

Калі няма, то прыйшоў час заняцца асновамі Python. Не хвалюйцеся, гэта не так ужо і складана.

MS2: прачытайце файл чата з дапамогай праграмы Python

Тут далей вы будзеце ствараць фрагмент праекта з кожнай главай.

Ёсць 2 файлы, якія вам спатрэбяцца для праекта -

  1. Ваш файл чата Whatsapp (заканчваецца ў .txt)
  2. Файл кода Python (які заканчваецца ў .py)
Пасля таго, як вы іх атрымаеце, у першай главе патрабуецца адкрыць файл чата з дапамогай праграмы Python і раздрукаваць усё яго змесціва.

Гэта добрая магчымасць паглыбіцца і:

  • Зразумейце, як абыходзіцца з файламі з Python

Апрацоўка файлаў у Python - ад нуля да героя:

Вы ведаеце, што любы рэдактар, які выкарыстоўваецца для адкрыцця тэкставага файла на вашым кампутары (нататнік, код VS, Vim і г.д.) - гэта праграма, праўда?

Ведаеш што? - вы можаце зрабіць сваю ўласную праграму Python. Амаль лёгка!

Прайдзіце гэты выдатны падручнік Real Python, каб даведацца пра канцэпцыю апрацоўкі файлаў у Python.

MS3: Асаблівасці № 1 і № 2 - падлічваюць агульную колькасць паведамленняў і агульную колькасць слоў

Падлічыце колькасць паведамленняў, якія вы і ваш сябар абмяняліся.

Затым падлічыце кожную вашу асобную долю - як па колькасці паведамленняў, так і па колькасці слоў.

Выдрукуйце вынікі.

Гэта добрая магчымасць паглыбіцца і:

  • Зразумець радкі ў Python

Важныя рэчы, якія варта памятаць пра радкі ў Python:

  • Радкі разглядаюцца як спісы. Такім чынам, вы можаце зрабіць такі пошук:
калі "- Paridhi:" у chat_line: counter + = 1
  • Радкі Python вядомыя (у параўнанні з тымі, што існуюць на іншых мовах), таму што Python забяспечвае іх багатай бібліятэкай убудаваных метадаў, якія можна выкарыстоўваць для выканання аперацый над імі. Прапаную вам выкарыстоўваць гэты падручнік W3Schools як арыенцір для гэтых метадаў.
  • Здольнасць Python рэзаць і адмоўныя радкі індэкса часам можа быць вельмі зручным

Засцярога: Цяпер вы адчуеце, як ваша праграма расце ў памерах і складанасці. Такім чынам, вы павінны пачаць усведамляць свой стыль кадавання і мець на ўвазе чытальнасць вашага кода.

Стыль кадавання і чытальнасць кода:

Браян Керніган кажа ў сваёй кнізе "Практыка праграмавання:"

"Мэта стылю - зрабіць код лёгка чытаць для сябе і іншых, а добры стыль мае вырашальнае значэнне для добрага праграмавання".

Асабіста, калі я спрабую прымаць рашэнні аб чытанні майго кода, у маім мозгу гуляе радок з "Дзен Пітона":

"Яўнае - лепш, чым неяўнае".

Вось тры простыя, дзеючыя правілы, якія вы можаце памятаць, каб выпрацаваць добры стыль кадавання:

1. Падумайце аб выбары назваў вашых зменных

Я лічу парады Браяна Кернігана вельмі карыснымі тут:

  • Глабальныя функцыі, класы і структуры павінны мець апісальныя назвы, якія мяркуюць іх ролю ў праграме
  • У адрозненне ад іх, для лакальных пераменных дастаткова кароткіх імёнаў; у межах функцыі можа быць дастатковай п, нулявых кропак нармальна, а нумарофПойны - залішняя колькасць
  • Лакальныя зменныя, якія выкарыстоўваюцца звычайнымі спосабамі, могуць мець вельмі кароткія назвы. Выкарыстанне i і j для індэксаў цыкла, p і q для паказальнікаў, і s і t для радкоў настолькі частае, што мала прыбытку і, магчыма, пэўная страта ў даўжэйшых назвах.

2. Выкарыстоўвайце функцыі, дзе гэта неабходна

  • Разбіце доўгія часткі кода на функцыі
  • Не паўтарайце сябе (сушыце) - выкарыстоўвайце функцыі для выдалення дублікатаў кода

Больш пра функцыі ў наступнай главе.

3. Напішыце карысныя каментары

  • Каментары каштуюць, каб дапамагчы чытачу праграмы. Яны не дапамагаюць, кажучы рэчы, якія код ужо прама кажа, альбо супярэчаць коду - альбо адцягваючы чытача прадуманымі друкарскімі выявамі.
  • Наколькі гэта магчыма, напішыце код, які лёгка зразумець; чым лепш вы гэта зробіце, тым менш каментарыяў вам трэба. Добры код патрабуе менш каментароў, чым дрэнны код. Каментары, у лепшым выпадку, неабходнае зло.
  • Не супярэчце коду. Большасць каментарыяў згодныя з кодам, калі яны пішуцца, але паколькі выпраўленыя памылкі і праграма развіваецца, каментары часта пакідаюць у першапачатковым выглядзе, што прыводзіць да нязгоды з кодам.

У рэшце рэшт, памятайце, што прынцыпы стылю праграмавання заснаваныя на здаровым сэнсе, кіруючыся досведам, а не на адвольных правілах і рэцэптах.

MS4: Функцыя № 3 - вылічыць сярэднюю даўжыню паведамленняў, адпраўленых кожнай удзельніцай

Цяпер, калі вы разлічылі вашу індывідуальную долю, выкарыстоўваючы дзве метрыкі - колькасць паведамленняў і колькасць слоў - вы можаце выкарыстоўваць яе для разліку кожнай вашай сярэдняй даўжыні паведамленняў. Выдрукуйце вынікі.

Гэта добрая магчымасць паглыбіцца і:

Разумець функцыі як сродак:

  • Паменшыце паўтарэнне
  • Зрабіце код больш чытэльным

Глыбокае пагружэнне ў выкарыстанне функцый - матывацыя і стыль:

Дубліраванне можа стаць коранем усяго зла ў праграмным забеспячэнні. Функцыі былі адной з першых метадаў, распрацаваных для барацьбы з гэтым злом.

Лёгка зразумець сінтаксіс функцый напісання, але патрэбна практыка і некаторы сэнс дызайну, каб даведацца, калі разбіваць код на функцыі. Адной з задач з'яўляецца распрацоўка такіх функцый, каб яны маглі паўторна выкарыстоўваць пры пашырэнні праграмы на новыя выпадкі.

Што яшчэ? Такі выбар дызайну - гэта тое, што робіць праграмаванне цікавым.

Вось тры эўрыстыкі з кнігі Боба Марціна “Чысты код”, якія будуць накіроўваць вас пры выбары:

  1. Функцыі павінны быць невялікімі. Як мала? Не больш, чым экранныя - альбо 20 радкоў.
  2. Функцыі павінны мець апісальныя імёны. Чым менш і больш мэтанакіравана функцыя, тым прасцей выбраць апісальнае імя. Не бойцеся доўга называць імя. Доўгае апісальнае імя лепш, чым кароткае загадкавае імя. Доўгія апісальныя назвы лепш, чым доўгі апісальны каментар.
  3. Функцыі павінны выконваць толькі адно і не мець пабочных эфектаў - яе намер павінен быць зразумелы ад назвы.

Калі вы ўпершыню пішаце функцыю, яна, верагодна, атрымаецца доўгай і складанай і не будзе прытрымлівацца ніводнага з вышэйпералічаных правілаў. І ўсё ў парадку. Вы можаце ўдакладніць і перафарматаваць код пазней. Я не думаю, што хто-небудзь можа пачаць пісаць функцыі, якія выконваюць усе вышэйзгаданыя правілы.

Памятайце, што гэта мэта пабудовы функцый, да якіх трэба імкнуцца. Не дазваляйце ім паралізаваць вас.

MS5: Функцыя № 4 - падлічыце колькасць першых тэкстаў і пакажыце іх

Вы хочаце вырашыць пытанне, хто тэксты спачатку раз і назаўсёды? Пасля гэтай вехі вы.

Вы дакладна ведаеце, колькі размоў пачаў кожны з вас, і будзеце мець спіс гэтых першых тэкстаў. Раздрукаваць усё гэта.

Гэта добрая магчымасць паглыбіцца і:

  • Зразумейце модулі - тут вам спатрэбіцца модуль часу Python
  • Даведайцеся, як шукаць рэчы і прачытаць дакументацыю

Засцярога: Не трэба запалохаць дакументаў. Яны твае сябры.

Што такое модулі?

Кожны файл зыходнага кода Python, імя якога заканчваецца пашырэннем .py, з'яўляецца модулем.

Усталяванне Python пастаўляецца са стандартнай бібліятэкай, якая змяшчае такія модулі ў нестандартнай камплекце. Гэта карысныя фрагменты кода, якія вам не трэба пісаць.

MS6: Функцыя № 5 - час у чаце (гадзінны, штодзённы і штомесячны)

Цяпер прыйшоў час высветліць вашы звычайныя мадэлі зносін.

* У якую гадзіну дня вы больш за ўсё балбатаеце? А як з астатнімі гадзінамі?

* У які дзень тыдня вы звычайна больш за ўсё балбатаеце? А як з астатнімі днямі?

* У якім месяцы вы больш за ўсё балбаталі? А як з астатнімі?

Выдрукуйце вынікі.

Гэта добрая магчымасць паглыбіцца і:

  • Разумейце неабходнасць у розных структурах дадзеных для захоўвання ўсіх гэтых дадзеных і падумайце, як распрацаваць структуру дадзеных у адпаведнасці з вашымі патрэбамі

Заўвага: тут вам зноў спатрэбіцца модуль часу. Важна ведаць, што ўсё ў парадку, калі вы гэтага не памятаеце; вам дазволена выкарыстоўваць Google і правяраць дакументацыю столькі разоў, колькі вам трэба.

Засцярога: ажыццявіць гэта можа быць вельмі складана. Вы, хутчэй за ўсё, праводзіце большую частку свайго кадавання, стукаючы галавой па няспраўным кодзе. Памятайце: віна не ў камп'ютэры, але ў вашым кодзе.

Як адладзіць код:

  1. Растлумачце сябру код альбо скарыстайцеся тэхнікай гумавай качкі
  • Падбярыце сябра (альбо гумовую качку)
  • Адкрыйце праблемны код і растлумачце яму (/ ёй / ім) радок за радком, павольна і цярпліва
  • Знайдзі праблему, якая глядзіць на цябе, у твар, без старонняй дапамогі твайго сябра (ці качкі), нібы магіяй

2. Дадайце друкаваныя заявы

Хоць даданне такіх заяў на друк не з'яўляецца правільным спосабам адладкі, я часам лічу іх неверагодна эфектыўнымі, асабліва, калі я працую з тэкставым рэдактарам, як VIM, а не з паўнавартасным IDE, які мае адладчык (ці калі вам лянота даведацца, як выкарыстоўваць адладчык.

Але я павінен сказаць, як толькі вы даведаецеся, як выкарыстоўваць адладчык IDE, назад няма.

3. Выкарыстоўвайце адладчык IDE

Як пісаць, repl.it яшчэ не падтрымлівае адладчык. Мае любімыя IDE для Python, якія падтрымліваюць яго, з'яўляюцца PyCharm і VS Code.

Адладчык можа быць настолькі карысным, што я рэкамендую вам пераключыцца і даведацца, як выкарыстоўваць адладчык у ім. Паверце мне, гэта цалкам варта нанесці боль (асабліва цяпер, калі ваш код складаны.)

Асабісты савет: я выкарыстоўваю адладчык IDE, таму што Python забяспечвае адладчык у стандартным модулі бібліятэкі - * pdb ** - і я прапаную вам не выкарыстоўваць яго зараз.

MS7: Функцыя № 7 - найбольш папулярныя сайты

Гэта добрая магчымасць паглыбіцца і:

  • Даведацца RegEx
  • Разумейце слоўнікі Python як традыцыйныя хэш-табліцы: супастаўленне ад назвы вэб-сайта па колькасці сустрэч

Хуткае ўвядзенне ў RegEx:

Рэгулярны выраз - гэта адмысловая тэкставая радок для апісання шаблона пошуку.

Вы, напэўна, знаёмыя з запісамі падстаноўкі (напрыклад, * .txt), каб знайсці ўсе тэкставыя файлы ў файлавым менеджэры. Вы можаце думаць пра рэгулярныя выразы як падстаноўку на стэроіды. Яны дазваляюць шукаць:

"Я хачу, каб усе радкі, якія знаходзяцца паміж" http: // "або" https: // "і другой / пасля гэтага, калі ёсць. Ці інакш, першы / ".

Вось некалькі маіх папулярных рэсурсаў, каб даведацца пра RegEx:

  • RegexOne - інтэрактыўны падручнік для вывучэння RegEx
  • "Уводзіны ў Regex ў Python"
  • Дакументацыя Python - яна называе іх "малюсенькай, вузкаспецыялізаванай мовай праграмавання, убудаванай у Python".

MS8: Функцыя № 8 - самыя распаўсюджаныя словы

Я дазволю вам самастойна разабрацца ў гэтым!

MS9: друкуйце ўсё вышэйсказанае ў прыгожых, акуратных табліцах

Вы павінны выкарыстоўваць некаторыя заявы пра друк для друку вынікаў кожнай вехі. Цяпер прыйшоў час засяродзіцца на прадстаўленні гэтых вынікаў. Раздрукуйце ўсе вышэйпералічаныя вынікі ў прыгожых, акуратных табліцах.

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

Гэта добрая магчымасць паглыбіцца і:

  • Зразумейце, што значыць, калі людзі раяць - "функцыі павінны выконваць толькі адно"
  • Навучыцеся шукаць, усталяваць і выкарыстоўваць іншыя модулі, якія дзіўнае і дынамічнае супольнасць Python забяспечвае праз pip
  • Дайце асабістую сувязь з праектам з тым, як вы афармляеце табліцы

Хуткі грунт на багатай экасістэме адкрытага зыходнага пакета Python:

Экасістэма Python мае ўкладчыкаў, пачынаючы ад асобных распрацоўшчыкаў да мегакорпусаў, такіх як Facebook і Google (багатая экасістэма, так?). Яны прапануюць модулі і бібліятэкі з кодам для стварэння вэб-сайтаў, лічбавага праграмавання, распрацоўкі гульняў, навукі дадзеных, машыннага навучання, глыбокага навучання і, добра, друку прыгожых табліц.

Зараз гэта вельмі шмат кода, які вам не трэба пісаць.

PyPI з'яўляецца домам для ўсіх гэтых іншых пакетаў Python. Тут вы можаце знайсці старонку пра кожны пакет з адкрытым зыходным кодам.

Вось некалькі рэчаў, якія дапамогуць вам хутка выкарыстоўваць PyPI:

  • Вы можаце ўсталяваць кожны пакет з дапамогай простай тэрмінальнай каманды - pip. Вы можаце знайсці менавіта тое, што вам трэба ўвесці на старонцы пакета ў PyPI.
Pip ўсталяваць табліцы
  • Любы добры пакет таксама змяшчае інструкцыю па ўжыванні (альбо дакументацыю) на сваёй старонцы ў PyPI
  • Нават пачаткоўцы могуць апублікаваць свае эксперыментальныя пакеты. Вы павінны быць асцярожныя перад іх выкарыстаннем; яны могуць быць няпоўнымі альбо няўтрыманымі. Вы можаце праверыць гісторыю выпуску пакета альбо яго статыстыку GitHub, каб вызначыць яго надзейнасць.

MS10: Зрабіце ўсё гэта працай для файлаў групавога чата

З гэтым этапам вы будзеце пашыраць праграму на новы выпадак - групавыя чаты. Да гэтага моманту ў вас быў бы прамы файл чата з адным сябрам. Цяпер вы зменіце праграму, каб яна таксама працавала з файламі чата групавых чатаў WhatsApp.

Гэта добрая магчымасць паглыбіцца і:

  • Ацаніце свае функцыі. Ці здольныя вы паўторна выкарыстоўваць прынамсі некаторыя з іх?
  • Адчуйце перавагі добрага стылю кадавання і добрай практыкі праграмавання
  • Убачыць важнасць сістэмы кіравання версіямі і даведацца Git

Добрае праграмнае забеспячэнне

Вам добра запомніць, што Браян У. Кернінгхан кажа пра добрае праграмнае забеспячэнне ў сваёй кнізе Практыка праграмавання:

Асноўнымі прынцыпамі, якія ствараюць аснову добрага праграмнага забеспячэння, з'яўляюцца прастата, якая дазваляе праграмам быць кароткімі і кіраванымі; яснасць, якая гарантуе іх лёгкасць для людзей, а таксама для машын; агульнасць, што азначае, што яны добра працуюць у шырокім дыяпазоне сітуацый і добра прыстасоўваюцца да ўзнікнення новых сітуацый; і аўтаматызацыя, якая дазваляе машыне выконваць працу за нас, вызваляючы нас ад прыземленых задач.

Добра, спадзяюся, гэта вам спатрэбілася. Вы атрымаеце сапраўднае разуменне ўсіх міні-урокаў у гэтым кіраўніцтве, як толькі вы на самой справе пагрузіцеся ў праект.

Вось некалькі кодаў, каб пачаць штуршок:

Не бойцеся пачынаць, таму што ўсё будзе складана, калі вы затрымаецеся. Гэта прыгода; гэта будзе выдатна, калі вы адкапаеце сябе.

Акрамя таго, вы можаце паведаміць мне або вашым аднакурснікам пра свае сумневы ў групе Build To Learn Slack (калі ласка, не саромейцеся далучыцца па дадзенай спасылцы).

Як заканчэнне, я хацеў бы, каб вы памяталі словы Джэн Сіманс, калі вы працуеце над гэтым праектам (ці любым іншым праектным праграмаваннем на гэты конт):

Whatsapp Chat Analyzer - адзін з 20 класных праграмных праграм, пра якія я згадваў у мінулым допісе ў серыі - Build To Learn. Калі вы хочаце, каб я зрабіў падобнае кіраўніцтва для любога з іншых, не саромейцеся каментаваць ніжэй альбо звяртацца да мяне напрамую!

Падпішыцеся на рассылку Build to Learn, каб атрымаць электронную пошту, калі я раблю новыя даведнікі і артыкулы.

Вы можаце звязацца з мной на Twitter і LinkedIn.