<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>Python Zen</title><subtitle>Про Python та інші освітні штуки.</subtitle><author><name>Python Zen</name></author><id>https://teletype.in/atom/gn_python</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/gn_python?offset=0"></link><link rel="alternate" type="text/html" href="https://teletype.in/@gn_python?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=gn_python"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/gn_python?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-05-01T15:27:20.316Z</updated><entry><id>gn_python:_p6on034U</id><link rel="alternate" type="text/html" href="https://teletype.in/@gn_python/_p6on034U?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=gn_python"></link><title>Спроба накрутити перегляди на YouTube з допомогою Python 1/4</title><published>2020-07-31T08:39:02.877Z</published><updated>2020-07-31T08:41:47.353Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://teletype.in/files/95/e9/95e95a0a-7fc2-48c5-9703-024ed3b40c90.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://teletype.in/files/97/f1/97f19a31-5b27-4a26-b8d1-f6700e759969.png&quot;&gt;Проксі-сервер — сервер, який виступає посередником при виконанні запитів до певного ресурсу, з англійської proxy перекладається як &quot;представник&quot; чи &quot;уповноважений&quot;. Не будемо глибоко вникати в суть цієї технології, головне, що варто знати, ми хочемо приховувати справжню IP-адресу для отримання потрібної інформації. </summary><content type="html">
  &lt;h2&gt;Цілі&lt;/h2&gt;
  &lt;ol&gt;
    &lt;li&gt;&lt;em&gt;&lt;strong&gt;Реалізувати скрипт, який буде змінювати IP адреси (proxy).&lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;
    &lt;li&gt;&lt;em&gt;Оглянути доступні інструменти для цієї задачі.&lt;/em&gt;&lt;/li&gt;
    &lt;li&gt;Організувати безперебійний перехід на сторінку з відео.&lt;/li&gt;
    &lt;li&gt;Дослідити як зараховується перегляд для відео на YouTube.&lt;/li&gt;
    &lt;li&gt;Зробити мінімум 350-400 переглядів на обраному відео.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;h2&gt;Proxy та їх використання у запитах   &lt;/h2&gt;
  &lt;p&gt;&lt;a href=&quot;https://uk.wikipedia.org/wiki/%25D0%259F%25D1%2580%25D0%25BE%25D0%25BA%25D1%2581%25D1%2596-%25D1%2581%25D0%25B5%25D1%2580%25D0%25B2%25D0%25B5%25D1%2580&quot; target=&quot;_blank&quot;&gt;Проксі-сервер&lt;/a&gt; — сервер, який виступає посередником при виконанні запитів до певного ресурсу, з англійської &lt;em&gt;proxy&lt;/em&gt; перекладається як &amp;quot;представник&amp;quot; чи &amp;quot;уповноважений&amp;quot;. Не будемо глибоко вникати в суть цієї технології, головне, що варто знати, ми хочемо приховувати справжню IP-адресу для отримання потрібної інформації. &lt;/p&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/97/f1/97f19a31-5b27-4a26-b8d1-f6700e759969.png&quot; width=&quot;768&quot; /&gt;
    &lt;figcaption&gt;Принцип роботи проксі на простій схемі&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p&gt;Є багато ресурсів, де можна отримати список безкоштовних проксі-серверів, аби посилати свої запити через них.&lt;br /&gt;&lt;/p&gt;
  &lt;figure class=&quot;m_retina&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/0a/f4/0af4f605-cab8-4fd2-b341-f22d80f8e100.png&quot; width=&quot;845.5&quot; /&gt;
    &lt;figcaption&gt;Приклад списку проксі з &lt;a href=&quot;http://free-proxy.cz/ru/proxylist/country/US/all/ping/all&quot; target=&quot;_blank&quot;&gt;http://free-proxy.cz/ru/proxylist/country/US/all/ping/all&lt;/a&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p&gt;Для роботи нам потрібно IP-адрес та порт, проте інші параметри можуть знадобитись для того, щоб фільтрувати отриманий список.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Країна та місто&lt;/strong&gt; — часто потрібно використовувати лише фільтрацію по країні, аби отримати доступ до локального ресурсу.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Ступінь анонімності&lt;/strong&gt; — в залежності від цього параметру гарантується чи високий рівень анонімності, чи абсолютно низький, при якому кінцевий ресурс все одно бачить нашу справжню адресу.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Швидкість відгуку (timeout)&lt;/strong&gt; — те, наскільки швидко обробляються запити цим проксі-сервером, від цього залежить кількість виконаних запитів.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Як попрактикуватись?&lt;/strong&gt;&lt;/p&gt;
  &lt;ol&gt;
    &lt;li&gt;Скопіювати/завантажити &lt;a href=&quot;https://github.com/clarketm/proxy-list/blob/master/proxy-list-raw.txt&quot; target=&quot;_blank&quot;&gt;файл зі списком проксі з GitHub&lt;/a&gt;.&lt;/li&gt;
    &lt;li&gt;Спробувати відправити 20 запитів з різними проксі до ресурсу &lt;a href=&quot;https://api.myip.com/&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;https://api.myip.com/&lt;/code&gt;&lt;/a&gt; з використанням &lt;code&gt;requests-futures&lt;/code&gt; або &lt;code&gt;aiohttp&lt;/code&gt;якщо хочеться гострих вражень.&lt;/li&gt;
    &lt;li&gt;Вивести результати в якості логу з використанням модуля &lt;code&gt;logging&lt;/code&gt;.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p&gt;Зробивши це, одразу стане зрозуміло, що таке підводні камені безкоштовних проксі-серверів і як з цим справлятись. Або не стане зрозуміло взагалі нічого :)&lt;/p&gt;
  &lt;p&gt;Приклад коду з &lt;code&gt;requests-futures&lt;/code&gt;:&lt;/p&gt;
  &lt;pre&gt;from concurrent.futures import ThreadPoolExecutor
from requests_futures.sessions import FuturesSession

# створення сесії з використанням мультипроцесингу 
session = FuturesSession(executor=ThreadPoolExecutor(max_workers=10))&lt;/pre&gt;
  &lt;p&gt;Приклад коду з &lt;code&gt;aiohttp&lt;/code&gt;:&lt;/p&gt;
  &lt;pre&gt;# створення асинхронної сесії
async with aiohttp.ClientSession() as session:
    async with session.get(&amp;quot;http://python.org&amp;quot;,
                           proxy=&amp;quot;http://proxy.com&amp;quot;) as resp:
        print(resp.status)&lt;/pre&gt;
  &lt;p&gt;Доволі непогано це все описано в статті: &lt;a href=&quot;https://webdevblog.ru/python-i-http-klienty/&quot; target=&quot;_blank&quot;&gt;Python та HTTP-клієнти&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;Загальна інформація про скрапинг тут: &lt;a href=&quot;https://blog.pythonzen.ml/tt8HJMkaf&quot; target=&quot;_blank&quot;&gt;Web Scraping в Python. Детальна інструкція &lt;/a&gt;&lt;/p&gt;

</content></entry><entry><id>gn_python:yuEqYm0T3</id><link rel="alternate" type="text/html" href="https://teletype.in/@gn_python/yuEqYm0T3?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=gn_python"></link><title>Flask Checkpoint 024. Markdown. Форматування для лінивих</title><published>2020-07-27T09:29:35.791Z</published><updated>2020-07-27T09:29:35.791Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://teletype.in/files/1a/2b/1a2b9518-7833-4bc3-8c0b-9cd33ad0dac8.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://teletype.in/files/f0/71/f071dfcb-9cfe-41f3-893e-1990e9cadcd6.png&quot;&gt;Полегшена мова розмітки для спрощення форматування повідомлень на різноманітних ресурсах, починаючи з чатів закінчуючи менеджерами задач.

Ця річ використовується в Telegram, Slack, StackOverflow, GitHub, Trello та інших штуках, які спрощують життя в розробці і не тільки. Markdown де факто став стандартом в написанні документації, його легко конвертувати в HTML та зручно використовувати.</summary><content type="html">
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/f0/71/f071dfcb-9cfe-41f3-893e-1990e9cadcd6.png&quot; width=&quot;1200&quot; /&gt;
    &lt;figcaption&gt;Markdown logo&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p&gt;Полегшена мова розмітки для спрощення форматування повідомлень на різноманітних ресурсах, починаючи з чатів закінчуючи менеджерами задач.&lt;br /&gt;&lt;br /&gt;Ця річ використовується в Telegram, Slack, StackOverflow, GitHub, Trello та інших штуках, які спрощують життя в розробці і не тільки. Markdown де факто став стандартом в написанні документації, його легко конвертувати в HTML та зручно використовувати.&lt;/p&gt;
  &lt;figure class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/ac/1e/ac1ef321-52d6-40c0-9029-f0e336f39be3.png&quot; width=&quot;800&quot; /&gt;
    &lt;figcaption&gt;Markdown Cheatsheet&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p&gt;Можна переглянути кілька додаткових матеріалів:&lt;/p&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;iframe src=&quot;https://www.youtube.com/embed/ifydjGoDMU4?autoplay=0&amp;loop=0&amp;mute=0&quot;&gt;&lt;/iframe&gt;
  &lt;/figure&gt;
  &lt;p&gt;&lt;a href=&quot;https://habr.com/ru/company/yandex/blog/342192/&quot; target=&quot;_blank&quot;&gt;Sir Markdown. Лекція Яндексу&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;https://paulradzkov.com/2014/markdown_cheatsheet/&quot; target=&quot;_blank&quot;&gt;Короткий посібник з Markdown&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;https://github.com/sandino/Markdown-Cheatsheet&quot; target=&quot;_blank&quot;&gt;Шпаргалка по Markdown, яка як не дивно зроблена з його допомогою&lt;/a&gt; &lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;https://www.markdowntutorial.com/&quot; target=&quot;_blank&quot;&gt;Інтерактивний тренажер по Markdown&lt;/a&gt;&lt;/p&gt;

</content></entry><entry><id>gn_python:0-LuexsIF</id><link rel="alternate" type="text/html" href="https://teletype.in/@gn_python/0-LuexsIF?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=gn_python"></link><title>Створення 3D фотографії використовуючи Python</title><published>2020-07-17T12:43:22.058Z</published><updated>2020-07-31T08:05:50.420Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://teletype.in/files/87/28/87288495-a4d5-4c3e-b493-537dc8d4b23a.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://teletype.in/files/fc/a0/fca0b248-76b0-4484-afa2-5314dd5af93b.png&quot;&gt;Для прикладу продемонструю кілька прикладів того, яки чином це все працює. Із звичайних фотографій можна зробити шість секунд паралаксу.</summary><content type="html">
  &lt;p&gt;Для прикладу продемонструю кілька прикладів того, яки чином це все працює. Із звичайних фотографій можна зробити шість секунд паралаксу.&lt;/p&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;iframe src=&quot;https://www.youtube.com/embed/KtuN4hsT8o0?autoplay=0&amp;loop=0&amp;mute=0&quot;&gt;&lt;/iframe&gt;
    &lt;figcaption&gt;Львівський приклад відео&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;iframe src=&quot;https://www.youtube.com/embed/Hi_C1QfLP9Y?autoplay=0&amp;loop=0&amp;mute=0&quot;&gt;&lt;/iframe&gt;
    &lt;figcaption&gt;Кам&amp;#x27;янецько-вокзальний приклад відео&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p&gt;Більше прикладів можна переглянути на ресурсі: &lt;br /&gt;&lt;a href=&quot;https://shihmengli.github.io/3D-Photo-Inpainting&quot; target=&quot;_blank&quot;&gt;https://shihmengli.github.io/3D-Photo-Inpainting&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;Перш за все варто переглянути &lt;a href=&quot;https://github.com/vt-vl-lab/3d-photo-inpainting&quot; target=&quot;_blank&quot;&gt;GitHub репозиторій&lt;/a&gt; з реалізацію наукової статті та скопіювати посилання для клонування репозиторію:&lt;/p&gt;
  &lt;pre&gt;git clone https://github.com/vt-vl-lab/3d-photo-inpainting.git&lt;/pre&gt;
  &lt;p&gt;Повинен бути встановлений Git Bash, якщо використовується Windows, на Linux все працює з коробки. &lt;/p&gt;
  &lt;p&gt;До того ж, для завантаження вже готових контрольних точок для моделей нейронних мереж використовується утиліта wget, що не є стандартною для Windows. На допомогу як завжди прийде Chocolatey в запущеному від імені адміністратора PowerShell, якщо говорити про Windows 10: &lt;code&gt;choco install wget&lt;/code&gt;&lt;/p&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/fc/a0/fca0b248-76b0-4484-afa2-5314dd5af93b.png&quot; width=&quot;1442&quot; /&gt;
    &lt;figcaption&gt;Вікно PowerShell з виконаною командою&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p&gt;Після того, як закінчено з підготовкою потрібно виконати bash скрипт за допомогою команди &lt;code&gt;sh download.sh&lt;/code&gt; при умові, що ви знаходитесь в директорії зі склонованим репозиторієм.&lt;/p&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/05/a6/05a6d21f-2243-442a-a20e-f2d85a9cc01d.png&quot; width=&quot;1581&quot; /&gt;
    &lt;figcaption&gt;Вивід записів при виконанні download.sh&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p&gt;Також варто звернути увагу на завантаження необхідного пакету PyTorch. Є кілька варіантів використання цієї бібліотеки з CPU та GPU, встановити потрібно відповідну.&lt;/p&gt;
  &lt;p&gt;Для використання з GPU:&lt;/p&gt;
  &lt;pre&gt;pip3 install torch==1.4.0+cu100 torchvision==0.5.0+cu100 -f https://download.pytorch.org/whl/torch_stable.html&lt;/pre&gt;
  &lt;p&gt;Для використання з CPU:&lt;/p&gt;
  &lt;pre&gt;pip3 install torch==1.4.0+cpu torchvision==0.5.0+cpu -f https://download.pytorch.org/whl/torch_stable.html&lt;/pre&gt;
  &lt;p&gt;В принципі я запустив цю штуку під Windows, підредагував кілька файлів, аби завантажувалось cаме для CPU. Приблизно 10 хвилин на обробку одного файлу та створення 4 відео з різною анімацією. &lt;/p&gt;
  &lt;p&gt;На третьому зображенні відвалилась система і перший раз за весь час завис ноутбук, прийшлось відмовитись від цієї затії та перейти на Google Colab.&lt;/p&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/f2/9e/f29e538c-5d8a-4633-aaca-78a7ed547928.png&quot; width=&quot;502&quot; /&gt;
    &lt;figcaption&gt;Приклад того, як виглядає директорія проекту&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p&gt;Щоб запустити це все, потрібно додати зображення для обробки в директорію image, результат буде у video після запуску скрипта:&lt;/p&gt;
  &lt;pre&gt;python main.py --config argument.yml&lt;/pre&gt;
  &lt;p&gt;В Google Colab все доступно одразу, варто лише завантажити цей ноутбук та виконати всі кроки, завантажити необхідне зображення і зачекати кілька хвилин.&lt;/p&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/6e/28/6e287a24-c9fe-4683-81fe-5198704bf158.png&quot; width=&quot;1931&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;Ось посилання:&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;https://colab.research.google.com/drive/14k-j3fY_gjN7PJCfJkPEhgvg_CIGFs1y?usp=sharing&quot; target=&quot;_blank&quot;&gt;https://colab.research.google.com/drive/14k-j3fY_gjN7PJCfJkPEhgvg_CIGFs1y?usp=sharing&lt;/a&gt;&lt;/p&gt;

</content></entry><entry><id>gn_python:xk3vJRnX0</id><link rel="alternate" type="text/html" href="https://teletype.in/@gn_python/xk3vJRnX0?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=gn_python"></link><title>Кілька слів про філософію Python</title><published>2020-07-14T15:01:29.410Z</published><updated>2020-08-17T20:13:25.527Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://teletype.in/files/93/b1/93b1af4e-4710-479f-a230-71ced42a3701.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://teletype.in/files/0b/11/0b110223-9a9a-49ae-85dc-ed4ae3330d3c.png&quot;&gt;За час існування мови програмування Python, навколо неї сформувалась велика спільнота, певні традиції та підходи до розробки. Це все переросло в певну філософію. Справжній Pythonista повинен знати і розуміти основи, щоб робити свою роботу ліпше. </summary><content type="html">
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/0b/11/0b110223-9a9a-49ae-85dc-ed4ae3330d3c.png&quot; width=&quot;1920&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;За час існування мови програмування Python, навколо неї сформувалась велика спільнота, певні традиції та підходи до розробки. Це все переросло в певну філософію. Справжній &lt;a href=&quot;https://github.com/tdamdouni/Pythonista&quot; target=&quot;_blank&quot;&gt;Pythonista&lt;/a&gt; повинен знати і розуміти основи, щоб робити свою роботу ліпше. &lt;/p&gt;
  &lt;blockquote&gt;&lt;em&gt;Існує два типи мов програмування — ті, які усі постійно лають, і ті, якими ніхто не користується&lt;/em&gt;.&lt;/blockquote&gt;
  &lt;p&gt;Справжній фанат вже напевно дослідив більшість джерел, які розповідають про Python. Особливу увагу можна звернути на пародію Вікіпедії під назвою Lurkmore, де &lt;a href=&quot;http://lurkmore.to/%25D0%259A%25D0%25BE%25D0%25BF%25D0%25B8%25D0%25BF%25D0%25B0%25D1%2581%25D1%2582%25D0%25B0:Python&quot; target=&quot;_blank&quot;&gt;весь шлях до підкорення вершини&lt;/a&gt; описаний ну дуже лаконічно, з відповідною експресією і всіма похідними, дуже раджу переглянути.&lt;/p&gt;
  &lt;p&gt;Якщо ж говорити саме про філософію, то варто згадати про визначну фігуру в розробці першої версії CPython — &lt;strong&gt;Тім Пітерс. &lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;Перша річ, якою він відомий, це гібридний алгоритм сортування під назвою &lt;a href=&quot;https://ru.wikipedia.org/wiki/Timsort&quot; target=&quot;_blank&quot;&gt;Timsort&lt;/a&gt;, що якраз і використовується як стандартний метод в Python. &lt;/p&gt;
  &lt;p&gt;Друга річ, це The Zen of Python, прямо описана філософія в десятку влучних фраз. Ця штука доступна з інтерпретатора в якості пасхального яйця, можна переглянути з допомогою команди &lt;code&gt;import this&lt;/code&gt;.&lt;/p&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/c1/32/c1327765-39f9-4cee-ad1f-8796b3971929.png&quot; width=&quot;1434&quot; /&gt;
    &lt;figcaption&gt;The Zen of Python - вигляд з командного рядка&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p&gt;Українською мовою Дзен Пітону виглядає так:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;Гарне краще за потворне.&lt;/li&gt;
    &lt;li&gt;Очевидне краще за неочевидне.&lt;/li&gt;
    &lt;li&gt;Просте краще за складне.&lt;/li&gt;
    &lt;li&gt;Складне краще за заплутане.&lt;/li&gt;
    &lt;li&gt;Плоске краще за вкладене.&lt;/li&gt;
    &lt;li&gt;Розділене є кращим за щільне.&lt;/li&gt;
    &lt;li&gt;Легкість читання має значення.&lt;/li&gt;
    &lt;li&gt;Особливі випадки не є настільки особливими, щоб порушувати правила.&lt;/li&gt;
    &lt;li&gt;Хоча практичність є важливішою за бездоганність.&lt;/li&gt;
    &lt;li&gt;Помилки ніколи не повинні бути замовчуваними.&lt;/li&gt;
    &lt;li&gt;Хіба що замовчуваними відверто.&lt;/li&gt;
    &lt;li&gt;Зустрівши двозначність, відкиньмо спокусу вгадати.&lt;/li&gt;
    &lt;li&gt;Має бути один — і, бажано, тільки один — очевидний спосіб зробити це.&lt;/li&gt;
    &lt;li&gt;Хоча спочатку він може бути й не очевидним, якщо ви не голландець.&lt;/li&gt;
    &lt;li&gt;Зараз — краще, ніж ніколи.&lt;/li&gt;
    &lt;li&gt;Хоча ніколи, найчастіше, — краще, ніж просто зараз.&lt;/li&gt;
    &lt;li&gt;Якщо реалізацію важко пояснити — задум поганий.&lt;/li&gt;
    &lt;li&gt;Якщо реалізацію легко пояснити — можливо, задум добрий.&lt;/li&gt;
    &lt;li&gt;Простори імен — чудова річ, тож робімо їх більше!&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;Якщо цікаво поринути в світ програмування на Python, можна переглянути статтю &lt;a href=&quot;https://blog.pythonzen.ml/d7VnM2H-L&quot; target=&quot;_blank&quot;&gt;Як хоча б спробувати в Python за місяць&lt;/a&gt;&lt;/p&gt;

</content></entry><entry><id>gn_python:GKAzYNKqB</id><link rel="alternate" type="text/html" href="https://teletype.in/@gn_python/GKAzYNKqB?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=gn_python"></link><title>Дістаємо та аналізуємо тексти відео з YouTube-каналів. Частина 1</title><published>2020-07-12T16:16:30.122Z</published><updated>2020-07-12T16:16:30.122Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://teletype.in/files/b4/34/b4341ac0-1671-4afc-8036-a68e2a1cd7cd.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://teletype.in/files/f2/1b/f21b7ac1-a6a6-40c0-9f9b-37d058621a31.png&quot;&gt;Стало цікаво, яким же чином можна проаналізувати вміст відео на YouTube. Раніше доводилось працювати з сервісами Google, все захищено і важко добитись хороших результатів без прямого використання їх API. Проте з будь-якої ситуації можна знайти вихід, якщо сильно захотіти.</summary><content type="html">
  &lt;p&gt;Стало цікаво, яким же чином можна проаналізувати вміст відео на YouTube. Раніше доводилось працювати з сервісами Google, все захищено і важко добитись хороших результатів без прямого використання їх API. Проте з будь-якої ситуації можна знайти вихід, якщо сильно захотіти.&lt;/p&gt;
  &lt;h2&gt;Що ж саме зробити?&lt;/h2&gt;
  &lt;p&gt;Зацікавили мене рекомендаційні системи та їх реалізація, не дуже круто використовувати вже готові дані по фільмах і подібних речах. Хочеться чогось живого і трендового, слова з інтерв&amp;#x27;ю підійдуть для цієї благої місії. &lt;/p&gt;
  &lt;p&gt;В мене є кілька основних каналів, які я періодично переглядаю, перше, що я б хотів зробити, це дістати ключові слова з текстів, провести мінімальне тематичне моделювання, спробувати прокластеризувати відео в рамках одного каналу. В подальшому перейти на рівень кількох каналів зі всім вмістом.&lt;/p&gt;
  &lt;h2&gt;Дістаємо всі відео з каналу&lt;/h2&gt;
  &lt;p&gt;Почну з &lt;a href=&quot;https://www.youtube.com/c/BigMoneylive/videos&quot; target=&quot;_blank&quot;&gt;каналу BigMoney&lt;/a&gt;, де Євген Черняк розпитує всіх про їхні бізнеси та підходи, з обов&amp;#x27;язковим запитанням про їхню маржу :)&lt;br /&gt;&lt;/p&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/f2/1b/f21b7ac1-a6a6-40c0-9f9b-37d058621a31.png&quot; width=&quot;2517&quot; /&gt;
    &lt;figcaption&gt;Вигляд каналу Big Money.&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p&gt;Перше, що приходить на думку, це використання Selenium для збору даних з каналів, прості запити тут не допоможуть, а розбиратись з YouTube API взагалі не хочеться, якщо в результаті буду використовувати лише кілька запитів. Отримувати ключі, ковиряти &lt;a href=&quot;https://developers.google.com/youtube/v3/docs/?apix=true&quot; target=&quot;_blank&quot;&gt;документацію&lt;/a&gt;, займатись довгою обробкою даних, які приходять, напевно ви зрозуміли. Мені ж тільки ID відео з каналу потрібні.&lt;/p&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/f9/a6/f9a652ca-9ca7-4e73-8ad8-0eff008f0b39.png&quot; width=&quot;1567&quot; /&gt;
    &lt;figcaption&gt;Ви тільки погляньте на розмір цього чортового JSON для YouTube Video Resource. Масштаб лінії для скролу змушує задуматись.&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p&gt;Нещодавно відкрив для себе пакетний менеджер під Windows, це як &lt;code&gt;apt-get install&lt;/code&gt; в Linux, дуже прикольна штука під назвою &lt;strong&gt;Chocolatey&lt;/strong&gt;, однозначний плюс шоколадному. Тепер можна не переживати про пошук частини пакетів, вносити їх у змінну PATH, щоб можна було з командного рядка користуватись командами. Виглядає дуже прикольно, я використав це для встановлення драйверів браузерів, що використовуються у Selenium, відповідний пакет &lt;a href=&quot;https://chocolatey.org/packages?q=selenium&quot; target=&quot;_blank&quot;&gt;можна знайти за посиланням&lt;/a&gt;.&lt;/p&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/c3/64/c364d4ef-731e-4b00-ae29-b696ef6f0ffe.png&quot; width=&quot;1444&quot; /&gt;
    &lt;figcaption&gt;Хоп хей ла-ла-лей. Встановлює все, що потрібно і економить час, однозначно рекомендую.&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p&gt;Після встановлення абсолютно всіх драйверів до браузерів, можна перейти до використання Selenium. Ще трішки пошукавши рішень, я наткнувся на бібліотеку під назвою &lt;a href=&quot;https://pypi.org/project/yt-videos-list/&quot; target=&quot;_blank&quot;&gt;yt-videos-list&lt;/a&gt;, це було приємно, як я думав, там під капотом Selenium, можна вибрати необхідний драйвер і отримати всі відео з каналу.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;pip install yt-videos-list&lt;/code&gt; і я вже на крок ближче до отримання всіх необхідних даних.&lt;/p&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/81/3d/813dee81-a75a-4649-b6c3-39c8516c0046.png&quot; width=&quot;1446&quot; /&gt;
    &lt;figcaption&gt;В кілька рядків коду отримуємо результат, його можна скопіювати з посилання вище.&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p&gt;Результатом виконання є кілька файлів зі списком назв та посилань на відео в форматі CSV. З цим чудово справляється Pandas, тому його ми і використаємо для роботи з цими даними. Варто зазначити, що додатково в об&amp;#x27;єкті &lt;code&gt;ListCreator&lt;/code&gt; використовуються параметри:&lt;/p&gt;
  &lt;ol&gt;
    &lt;li&gt;&lt;code&gt;txt&lt;/code&gt;, &lt;code&gt;md&lt;/code&gt;, &lt;code&gt;csv&lt;/code&gt; — булеві, можна зберігати у файлах всіх цих форматів;&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;headless&lt;/code&gt; — якщо не потрібно, щоб відображався браузер в процесі отримання даних, то варто передати цей параметр зі значенням &lt;code&gt;True&lt;/code&gt; .&lt;/li&gt;
  &lt;/ol&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/37/ea/37ead232-ccdf-4680-b949-80f237abbe7b.png&quot; width=&quot;1538&quot; /&gt;
    &lt;figcaption&gt;Так виглядають дані, отримані з допомогою цієї бібліотеки в форматі CSV.&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p&gt;Бачимо що тут є зайві поля, нам необхідно залишити лише два. Видаляємо непотрібні поля, де немає цікавих нам значень з використанням &lt;code&gt;pandas.DataFrame&lt;/code&gt; , тут параметр &lt;code&gt;inplace=True&lt;/code&gt; означає, що ми виконуємо кожну операцію і одразу застосовуємо результат до нашого фрейму. Немає необхідності записувати результат кожної з операцій до змінної:&lt;/p&gt;
  &lt;pre&gt;df.drop(columns=[&amp;quot;Watched?&amp;quot;, &amp;quot;Watch again later?&amp;quot;, &amp;quot;Notes&amp;quot;, &amp;quot;Video Number&amp;quot;], inplace=True)
df.rename(columns={
    &amp;quot;Video Title&amp;quot;: &amp;quot;title&amp;quot;,
    &amp;quot;Video URL&amp;quot;: &amp;quot;video_url&amp;quot;,
}, inplace=True)&lt;/pre&gt;
  &lt;p&gt;Створимо додаткове поле, що відповідає за ідентифікатор відео:&lt;/p&gt;
  &lt;pre&gt;df[&amp;quot;video_id&amp;quot;] = df.video_url.map(lambda url: urlsplit(url).query.strip(&amp;quot;v=&amp;quot;))&lt;/pre&gt;
  &lt;p&gt;Цих маніпуляцій нам достатньо аби перейти до слідуючого етапу, де ми будемо витягувати тексти з отриманих відео. Там є декілька нюансів, які розглянемо в слідуючій частині.&lt;/p&gt;

</content></entry><entry><id>gn_python:dSEDmBC0T</id><link rel="alternate" type="text/html" href="https://teletype.in/@gn_python/dSEDmBC0T?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=gn_python"></link><title>Flask Checkpoint 021. Швидка підготовка до розробки з Docker</title><published>2020-07-01T15:43:26.318Z</published><updated>2020-07-09T13:12:36.072Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://teletype.in/files/27/31/2731ba4c-88b7-491c-8220-2abac51ba542.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://teletype.in/files/5b/d3/5bd3fe9f-63d0-4b00-a552-dd6f3c784cc3.png&quot;&gt;Віртуалізація — це один з найкорисніших інструментів, що допомагають використовувати доступні ресурси на максимум. Використовуючи один з методів, під назвою контейнеризація та інструменту Docker робить процес підготовки до розробки швидким та простим.</summary><content type="html">
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/5b/d3/5bd3fe9f-63d0-4b00-a552-dd6f3c784cc3.png&quot; width=&quot;800&quot; /&gt;
    &lt;figcaption&gt;Docker. Кити. Контейнери.&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p&gt;Віртуалізація — це один з найкорисніших інструментів, що допомагають використовувати доступні ресурси на максимум. Використовуючи один з методів, під назвою контейнеризація та інструменту Docker робить процес підготовки до розробки швидким та простим.&lt;/p&gt;
  &lt;h2&gt;Цілі&lt;/h2&gt;
  &lt;ol&gt;
    &lt;li&gt;Навчитись скорочувати час, що потрібен для підготовки та розгортання контейнерів.&lt;/li&gt;
    &lt;li&gt;Закінчити першу частину курсу Управління обчисленнями.&lt;/li&gt;
    &lt;li&gt;Ознайомитись з інструментом платформою Play with Docker та базовими лабораторними роботами для розробників: створення та розгортання.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;h2&gt;Завдання&lt;/h2&gt;
  &lt;ol&gt;
    &lt;li&gt;Перечитати &lt;a href=&quot;https://blog.pythonzen.ml/H6FyBYSPr&quot; target=&quot;_blank&quot;&gt;Checkpoint 02&lt;/a&gt;, аби поновити розуміння основних концепцій, що мають відношення до Docker.&lt;/li&gt;
    &lt;li&gt;Для закріплення матеріалу варто пройти &lt;strong&gt;першу частину курсу після вступу&lt;/strong&gt;:&lt;br /&gt;&lt;a href=&quot;https://stepik.org/course/1612&quot; target=&quot;_blank&quot;&gt;Контейнеризация и Docker&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;Ця частина найбільш корисна у цьому курсі, всі послідуючі варто проходити лише для розширення свого світогляду, з погляду прикладного досвіду ці модулі набагато слабші.&lt;br /&gt;&lt;br /&gt;Виконувати завдання можна з використанням інтерактивної платформи &lt;a href=&quot;https://labs.play-with-docker.com/&quot; target=&quot;_blank&quot;&gt;Play with Docker&lt;/a&gt;.&lt;/li&gt;
    &lt;li&gt;Після закінчення попереднього етапу є сенс перейти до інтерактивних лабораторних робіт в розділі &lt;a href=&quot;https://training.play-with-docker.com/#dev&quot; target=&quot;_blank&quot;&gt;Початок роботи для розробників (Getting Started Walk-through for Developers)&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;- &lt;a href=&quot;https://training.play-with-docker.com/beginner-linux&quot; target=&quot;_blank&quot;&gt;Docker for Beginners - Linux&lt;br /&gt;&lt;/a&gt;- &lt;a href=&quot;https://training.play-with-docker.com/microservice-orchestration&quot; target=&quot;_blank&quot;&gt;Application Containerization and Microservice Orchestration&lt;br /&gt;&lt;/a&gt;- &lt;a href=&quot;https://training.play-with-docker.com/swarm-stack-intro&quot; target=&quot;_blank&quot;&gt;Deploying a Multi-Service App in Docker Swarm Mode&lt;br /&gt;&lt;/a&gt; &lt;br /&gt;Тут дуже зручно вчитись працювати з терміналом Linux, &lt;a href=&quot;https://blog.pythonzen.ml/FqBPovXjr&quot; target=&quot;_blank&quot;&gt;про це йшла мова в іншій статті&lt;/a&gt;, всі поради з якої тут можна спробувати в першому ж завданні, де доступний термінал. &lt;br /&gt;Кожен рядок в тексті, який виділений чорним кольором, можна виконати в терміналі справа одразу побачивши очікуваний результат.&lt;/li&gt;
    &lt;li&gt;Результатом для оцінки завдання буде посилання на образ, що розміщено на Docker Hub.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;h2&gt;Ресурси для використання&lt;/h2&gt;
  &lt;p&gt;Всі потрібні матеріали зібрані за посиланням, там доступні статті, відео, корисні поради, розсилки та книги, все в одному місці і ще й на українській мові:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://internetdevels.ua/blog/docker-useful-links&quot; target=&quot;_blank&quot;&gt;Корисні посилання для розуміння призначення і роботи з Docker&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;І дуже хороше відео по темі на YouTube зі швидкістю 1.25-1.5х саме те:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://youtu.be/QF4ZF857m44&quot; target=&quot;_blank&quot;&gt;Основы Docker. Большой практический выпуск&lt;/a&gt;&lt;/p&gt;

</content></entry><entry><id>gn_python:tt8HJMkaf</id><link rel="alternate" type="text/html" href="https://teletype.in/@gn_python/tt8HJMkaf?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=gn_python"></link><title>Web Scraping в Python. Детальна інструкція</title><published>2020-06-28T17:52:38.188Z</published><updated>2020-07-01T09:31:31.194Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://teletype.in/files/8c/c7/8cc7ca5b-9bc7-4d8b-994e-d707658374e3.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://teletype.in/files/19/0e/190edc9a-214d-4fc3-bed8-85a7bf4d1d6b.png&quot;&gt;Збір даних на даний момент у 2020 році — це один з основних напрямків задач, які можна зустріти на Freelance біржах, до прикладу Upwork. Також це єдиний спосіб отримати бажані дані, якщо власники веб-сайтів не надають доступ через API для своїх користувачів. Багато веб-сайтів, таких Twitter, YouTube або Facebook, надають простий спосіб отримати доступ до своїх даних через публічний API. Отримана таким чином інформація належним чином структурована та нормалізована. Наприклад, це можуть бути формати JSON, CSV або XML. 
</summary><content type="html">
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/19/0e/190edc9a-214d-4fc3-bed8-85a7bf4d1d6b.png&quot; width=&quot;680&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;Збір даних на даний момент у 2020 році — це один з основних напрямків задач, які можна зустріти на Freelance біржах, до прикладу Upwork. Також це єдиний спосіб отримати бажані дані, якщо власники веб-сайтів не надають доступ через API для своїх користувачів. Багато веб-сайтів, таких Twitter, YouTube або Facebook, надають простий спосіб отримати доступ до своїх даних через публічний API. Отримана таким чином інформація належним чином структурована та нормалізована. Наприклад, це можуть бути формати JSON, CSV або XML. &lt;br /&gt;&lt;/p&gt;
  &lt;h2&gt;4 способи отримати дані з будь-якого веб-сайту&lt;/h2&gt;
  &lt;h3&gt;&lt;strong&gt;№0 RSS&lt;/strong&gt;&lt;/h3&gt;
  &lt;p&gt;Стояла задача отримувати дані з Upwork, там майже неможливо займатись скрапінгом та збирати дані. Можна використовувати API, проте для цього потрібно відправляти свої документи на верифікацію. &lt;/p&gt;
  &lt;p&gt;При цьому всьому після дослідження &lt;strong&gt;robots.txt&lt;/strong&gt; побачив, що є доступна можливість отримувати дані чере з &lt;strong&gt;RSS&lt;/strong&gt; (&lt;strong&gt;Really Simple Syndication).&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;З допомогою цього можна дуже просто отримувати оновлення ресурсів, збирати новини чи нові повідомлення на форумах. В Python використовувати це, можна з допомогою бібліотеки &lt;strong&gt;feedparser.&lt;/strong&gt;&lt;/p&gt;
  &lt;h3&gt;№1 Офіційне API&lt;/h3&gt;
  &lt;p&gt;В інших випадках, перш за все, ви завжди повинні перевірити, чи є офіційний API, який ви можете використовувати для отримання потрібних даних. &lt;br /&gt;&lt;br /&gt;Іноді офіційний API не оновлюється у відповідності до змін на ресурсі, або деякі при його використанні відсутні, до прикладу, Amazon Seller API.&lt;/p&gt;
  &lt;h3&gt;№2 &amp;quot;Прихований API&amp;quot;&lt;/h3&gt;
  &lt;p&gt;Серверна частина може генерувати дані в форматі JSON або XML, далі ці дані відправляються браузеру для відображення користувачам. Для нас, розробників, це хороша можливість скористатись інспектором в браузері, де можна дослідити вкладку XMLHttpRequest (XHR) і, можливо, знайти потрібні нам запити до API цього ресурсу.&lt;br /&gt;&lt;/p&gt;
  &lt;blockquote&gt;&lt;strong&gt;Цей спосіб надасть нам можливсіть отримати дані так само, як це б зробив офіційний API, правда без детальної документації доступних методів.&lt;/strong&gt;&lt;/blockquote&gt;
  &lt;p&gt;&lt;em&gt;Як отримати ці дані? Давайте самостійно &amp;quot;вполюємо&amp;quot; кінцеву точку API!&lt;/em&gt;&lt;/p&gt;
  &lt;p&gt;Наприклад, візьмемо &lt;a href=&quot;https://covid-19.dataflowkit.com/&quot; target=&quot;_blank&quot;&gt;ресурс, де відображається статистичні дані по COVID19&lt;/a&gt;.&lt;/p&gt;
  &lt;ol&gt;
    &lt;li&gt;Відкрийте Chrome DevTools натиснувши Ctrl+Shift+I або F12&lt;/li&gt;
    &lt;li&gt;Як тільки відкриється консоль, перейдіть до вкладки &amp;quot;Network&amp;quot;.&lt;/li&gt;
    &lt;li&gt;Давайте використаємо фільтр XHR, щоб визначити кінцеву точку API як запит &amp;quot;XHR&amp;quot;, якщо він доступний.&lt;/li&gt;
    &lt;li&gt;Варто переконатись, що кнопка &amp;quot;recording&amp;quot; включена, аби відображались всі запити належним чином.&lt;/li&gt;
    &lt;li&gt;Перезавантажте сторінку.&lt;/li&gt;
    &lt;li&gt;Натисніть зупинити &amp;quot;recording&amp;quot;, коли бачите, що вміст запитів, пов’язаний з даними, вже з’явився на веб-сторінці.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/39/9c/399cd3c3-6036-4f4a-a72b-99549a7893b2.png&quot; width=&quot;2000&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;Зараз перед вами список із запитів зліва. Досліджуйте їх. Вкладка попереднього перегляду відображає масив значень для запиту під назвою &amp;quot; &lt;code&gt;v1&lt;/code&gt;&amp;quot;.&lt;/p&gt;
  &lt;p&gt;Натисніть на вкладку &amp;quot;Headers&amp;quot;, аби переглянути деталі потрібного запиту. Найбільш важливою штукою для нас є метод запиту та URL. В даному випадку для позиції &amp;quot; &lt;code&gt;v1&lt;/code&gt;&amp;quot; URL є &lt;a href=&quot;https://covid-19.dataflowkit.com/v1?ref=hackernoon.com&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;https://covid-19.dataflowkit.com/v1&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
  &lt;p&gt;Тепер, давайте просто відкриємо цей URL як іншу вкладку браузеру, щоб побачити що ж відбудеться. &lt;/p&gt;
  &lt;p&gt;&lt;em&gt;Круто! Це те, що ми шукали.&lt;/em&gt;&lt;/p&gt;
  &lt;p&gt;Отже, отримання даних безпосередньо через API або використання вищеописаної техніки, це найпростіший шлях до завантаження потрібних наборів даних з веб-ресурсів. Звичайно, ці методи можуть бути не надто ефективними для деяких веб-сайтів, тому бібліотеки з web scraping функціоналом все ще необхідні.&lt;/p&gt;
  &lt;blockquote&gt;&lt;em&gt;Web scraping або вилучення даних з веб-сайтів - це єдиний шлях для отримання бажаних даних, якщо власники ресурсу не надають доступ до їх API&lt;/em&gt;. Scraping є &lt;strong&gt;технікою вилучення даних&lt;/strong&gt;, що може автоматизувати повторний ввід даних або копіювання з послідуючою вставкою. &lt;/blockquote&gt;
  &lt;h3&gt;№3 Website scraping. Знай правила!&lt;/h3&gt;
  &lt;p&gt;&lt;em&gt;Що слід перевірити перед тим, як отримувати дані з веб-сайту?&lt;/em&gt;&lt;/p&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/89/f0/89f0766b-c4d9-48da-87dd-95264d7e149b.jpeg&quot; width=&quot;2000&quot; /&gt;
    &lt;figcaption&gt;Photo by &lt;a href=&quot;https://unsplash.com/@mr_sherez?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit&amp;ref=hackernoon.com&quot; target=&quot;_blank&quot;&gt;Adam Sherez&lt;/a&gt; / &lt;a href=&quot;https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit&amp;ref=hackernoon.com&quot; target=&quot;_blank&quot;&gt;Unsplash&lt;/a&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p&gt;&lt;strong&gt;☑️Robots.txt  &lt;/strong&gt;— це перше, що потрібно перевірити, перед тим як діставати будь-які дані з веб-сайту. Файл Robots.txt перераховує правила того, як ви або бот повинні взаємодіяти з цим ресурсом. Ви завжди повинні поважати та дотримуватися всіх правил, перелічених у robots.txt.&lt;/p&gt;
  &lt;p&gt;☑️Не забудьте також переглянути &lt;strong&gt;Terms of use&lt;/strong&gt; сайту. Якщо умови використання не говорять про те, що це обмежує доступ до ботів чи павуків і не забороняє швидкі запити сервера, то можна без будь-яких сумнівів вилучати дані.&lt;/p&gt;
  &lt;p&gt;☑️ Варто також подумати про те, аби відповідати &lt;strong&gt;Загальному регламенту ЄС про захист даних або GDPR, &lt;/strong&gt;потрібно спершу оцінити проект по збору даних. Якщо ж проект не збирає персональні дані, то в такому випадку GDPR не застосовується. В цьому випадку можна пропустити цей крок та переходити &lt;/p&gt;
  &lt;p&gt;☑️Будьте уважні стосовно того чи вилучені дані не порушують &lt;strong&gt;авторські права&lt;/strong&gt;, таке іноді трапляється. Якщо умови використання не накладають обмеження стосовно цього моменту, то ваш збір даних може використовуватись так довго, наскільки вам вистачить ресурсів.&lt;/p&gt;
  &lt;p&gt;Детальніше про це можна прочитати в статті: &lt;a href=&quot;https://medium.com/dataflow-kit/is-web-scraping-legal-or-not-f6c26074584&quot; target=&quot;_blank&quot;&gt;Веб-сканування законно чи ні?&lt;/a&gt;&lt;/p&gt;
  &lt;h2&gt;Sitemaps&lt;/h2&gt;
  &lt;p&gt;На типових веб-сайтах є файли мапи сайту, що містять список посилань, що належать до цього веб-сайту. Вони допомагають пошуковим системам простіше сканувати веб-сайти та індексувати їх. Отримати URL-адреси з веб-сайтів для сканування завжди набагато швидше, ніж послідовно збирати їх з допомогою опрацювання сторінок.&lt;/p&gt;
  &lt;h2&gt;Відображення ресурсів, керованих з допомогою JavaScript&lt;/h2&gt;
  &lt;p&gt;Фреймворки JavaScript, такі як Angular, React, Vue.js широко використовуються для створення сучасних веб-додатків. Коротше кажучи, типовий інтерфейс веб-додатків складається з HTML + JS-коду + CSS-стилів. Зазвичай вихідний HTML спочатку не містить усього фактичного вмісту. Під час завантаження веб-сторінки елементи HTML DOM динамічно завантажуються разом з виконанням коду JavaScript. В результаті ми отримуємо статичний HTML.&lt;/p&gt;
  &lt;p&gt;☑️Ви можете використовувати &lt;em&gt;Selenium&lt;/em&gt; для збору даних з веб-сайтів, але це не дуже гарна ідея, хоча багато навчальних посібників говорять про використання саме з цією ціллю. На домашній сторінці чітко зазначено, що Selenium &amp;quot;для автоматизації тестування веб-додатків&amp;quot;.&lt;/p&gt;
  &lt;p&gt;☑️ &lt;em&gt;PhantomJS&lt;/em&gt; раніше використовувався для подібних задач, це схоже на браузер без візуальної обгортки, що забирає багато ресурсів. Проте, з 2018 року розробка цього інструменту заморожена.&lt;/p&gt;
  &lt;p&gt;☑️ Як альтернатива, &lt;em&gt;Scrapinghub&amp;#x27;s Splash&lt;/em&gt; раніше був варіантом для Python розробників перед Headless Chrome.&lt;/p&gt;
  &lt;blockquote&gt;&lt;strong&gt;Ваш браузер — це скрапер веб-сайтів по своїй природі. Найкращим способом на сьогодні є використання &lt;em&gt;Headless Chrome &lt;/em&gt;для відображення сторінок.&lt;/strong&gt;&lt;/blockquote&gt;
  &lt;h2&gt;Будьте розумними. Не дозволяйте їм блокувати вас.&lt;/h2&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/15/02/15023b2d-13b9-473d-81e5-fff6945a4821.jpeg&quot; width=&quot;2000&quot; /&gt;
    &lt;figcaption&gt;Photo by &lt;a href=&quot;https://unsplash.com/@randyfath?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit&amp;ref=hackernoon.com&quot; target=&quot;_blank&quot;&gt;Randy Fath&lt;/a&gt; / &lt;a href=&quot;https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit&amp;ref=hackernoon.com&quot; target=&quot;_blank&quot;&gt;Unsplash&lt;/a&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p&gt;Деякі веб-сайти використовують техніки для протидії автоматизованим інструментам збору даних. Web scraping — це завжди гра в &amp;quot;кота й мишки&amp;quot;. Тому проектуючи та розробляючи ваш скрапер, візьміть до уваги наступні поради по уникненню блокувань. Або ви ризикуєте не отримати очікуваного результату.&lt;/p&gt;
  &lt;h3&gt;Порада №1: Робіть випадкові затримки між запитами&lt;/h3&gt;
  &lt;p&gt;Коли людина відвідує веб-сайт, швидкість доступу до різних сторінок у рази менша порівняно зі швидкістю веб-сканера. Скрапер, навпаки, може витягнути кілька сторінок одночасно за короткий час. Величезний трафік, який надходить на сайт за короткий проміжок часу, виглядає підозрілим. &lt;/p&gt;
  &lt;blockquote&gt;&lt;strong&gt;Ви повинні дізнатися ідеальну швидкість сканування, індивідуальну для кожного веб-сайту. Щоб імітувати поведінку користувачів людини, ви можете додавати випадкові затримки між запитами.&lt;/strong&gt;&lt;/blockquote&gt;
  &lt;p&gt;Не створюйте надмірне навантаження на сайт. Будьте ввічливі до веб-сайту, з якого витягуєте дані, щоб ви могли продовжувати використовувати цей ресурс, не турбуючись про те, що будете заблоковані.&lt;/p&gt;
  &lt;h3&gt;Порада №2: Заміна User-Agent&lt;/h3&gt;
  &lt;p&gt;Коли браузер підключається до веб-сайту, він передає рядок User-Agent (UA) у заголовку HTTP. Це поле визначає браузер, номер його версії та операційну систему, яку використовує користувач.&lt;/p&gt;
  &lt;p&gt;Типовий рядок User-Agent виглядає подібним чином: &lt;/p&gt;
  &lt;pre&gt;Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36&lt;/pre&gt;
  &lt;ul&gt;
    &lt;li&gt;Якщо кілька запитів на один і той же домен виконуються з використанням одного і того ж агента користувача, веб-сайт може дуже швидко вас заблокувати .&lt;/li&gt;
    &lt;li&gt;Деякі веб-сайти блокують конкретні запити, якщо вони містять User-Agent рядок, що сильно відрізняється від загальнодоступних браузерів.&lt;/li&gt;
    &lt;li&gt;Якщо значення &amp;quot;user-agent&amp;quot; пропущено, багато веб-сайтів не дозволять отримати доступ до їх вмісту.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;blockquote&gt;&lt;strong&gt;Створіть список з доступних значень для User-Agent заголовків та використовуйте їх випадковим чином. Також допоможе Python бібліотека — &lt;a href=&quot;https://pypi.org/project/fake-useragent/&quot; target=&quot;_blank&quot;&gt;fake-useragent&lt;/a&gt;.&lt;/strong&gt;&lt;/blockquote&gt;
  &lt;h3&gt;Порада №3: ​​Заміняйте IP-адреси. Використовуйте проксі-сервери&lt;/h3&gt;
  &lt;p&gt;Якщо ви часто надсилаєте по кілька запитів з однієї і тієї ж IP-адреси в процесі збору інформації, веб-сайт може розпізнати підозрілу поведінку і заблокувати вас.&lt;/p&gt;
  &lt;p&gt;У найпростіших випадках достатньо використання дешевих &lt;em&gt;Datacenter proxies&lt;/em&gt;. Але деякі веб-сайти мають складні алгоритми для розпізнавання ботів, тому в таких випадках приходиться використовувати дорожчі &lt;em&gt;residential&lt;/em&gt; або &lt;em&gt;mobile&lt;/em&gt; пороксі для збору даних.&lt;/p&gt;
  &lt;p&gt;Наприклад, хтось у Європі хоче отримати дані з веб-сайту з обмеженим доступом лише для американських користувачів. Очевидно, що запити проводяться через проксі-сервер, розташований у США, оскільки їхній трафік, як здається для ресурсу, надходить з американської IP-адреси.&lt;/p&gt;
  &lt;h3&gt;Порада №4: Уникайте паттернів для web scraping. Імітуйте поведінку людини&lt;/h3&gt;
  &lt;p&gt;Люди непередбачувані під час навігації по веб-сайту. Вони роблять різні випадкові дії, як натискання на різні області сторінки та рухи миші.&lt;/p&gt;
  &lt;p&gt;З іншого боку, скрапери використовують наперед визначені правила для збору інформації з ресурсу.&lt;/p&gt;
  &lt;p&gt;Навчіть свій скрепер наслідувати поведінку людини. Таким чином, алгоритми виявлення ботів на веб-сайті не мають жодних причин заважати вам виконувати автоматизовані завдання по збору даних.&lt;/p&gt;
  &lt;h3&gt;Порада №5: Слідкуйте за засобами проти web scraping&lt;/h3&gt;
  &lt;p&gt;Одним з найбільш часто використовуваних інструментів для виявлення спроб злому або веб-сканування є &lt;em&gt;&amp;quot;honey pot&amp;quot;&lt;/em&gt; (горщик з медом). Такі речі не видимі для людського ока, але доступні для ботів та скраперів. Одразу після того, як скрапер натисне на невидиме посилання, сайт блокує його доволі просто.&lt;/p&gt;
  &lt;p&gt;Дізнайтеся, чи встановлено властивість CSS &amp;quot;&lt;code&gt;display: none&lt;/code&gt;&amp;quot; або &amp;quot;&lt;code&gt;visibility: hidden&lt;/code&gt;&amp;quot; та просто обходьте такі посилання. В іншому випадку, ресурс легко зрозуміє, що має справу не з людиною.&lt;/p&gt;
  &lt;h3&gt;Порада № 6: Розв’яжіть CAPTCHA&lt;/h3&gt;
  &lt;p&gt;Під час сканування веб-сайту у великих об&amp;#x27;ємах є ймовірність бути заблокованими веб-сайтом. В такі моменти вам починає відображатись &lt;em&gt;CAPTCHA &lt;/em&gt;замість веб-сторінок. &lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;CAPTCHA &lt;/strong&gt;- це тест, який використовується веб-сайтами для боротьби з ботами та сканерами, просячи відвідувачів веб-сайту довести, що вони люди, перш ніж продовжувати роботу з ресурсом.&lt;/p&gt;
  &lt;p&gt;Багато веб-сайтів використовують reCAPTCHA від Google. Остання версія v3 reCAPTCHA аналізує поведінку людини і вимагає від них поставити галочку &amp;quot;&lt;code&gt;I&amp;#x27;m not a robot&lt;/code&gt;&amp;quot;.&lt;/p&gt;
  &lt;p&gt;Сервіси для вирішення CAPTCHA використовують два способи:&lt;/p&gt;
  &lt;p&gt;☑️ &lt;strong&gt;Human-based CAPTCHA Solving Services&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;Коли ви відправляєте свою CAPTCHA для вирішення до такого сервісу, її обробляють люди та повертають назад до вас.&lt;/p&gt;
  &lt;p&gt;☑️ &lt;strong&gt;OCR (Optical Character Recognition) Solutions&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;В цому випадку використовуються методи машинного навчання для розпізнавання символів на зображенні, такі сервіси виконують обробку автоматично.&lt;/p&gt;
  &lt;h2&gt;Використання візуальних селекторів&lt;/h2&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/eb/0f/eb0f5f26-b9bb-49e7-9d29-8d603a0e0763.png&quot; width=&quot;1581&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;Before starting of data extraction, let&amp;#x27;s specify patterns of data. Look at the sample screenshot taken from web store selling smartphones. We want to scrape the Image, Title of an item, and its Price.&lt;em&gt;Google chrome inspect tool&lt;/em&gt; does a great job of investigating the DOM structure of HTML web pages.&lt;/p&gt;
  &lt;p&gt;Перш ніж розпочати вилучення даних, давайте визначимо структуру даних чи шаблон того результату, який ми отримуємо. Подивіться на зразок, зроблений із веб-магазину, що продає смартфони. Ми хочемо отримати зображення, назву предмета та його ціну. &lt;/p&gt;
  &lt;p&gt;&lt;em&gt;Google chrome inspect tool&lt;/em&gt; дозволяє зручно проводити вивчення структури DOM для веб-сторінок.&lt;/p&gt;
  &lt;figure class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/32/cc/32ccbcd9-1567-4e73-b6b9-214cbacbf9d5.png&quot; width=&quot;26&quot; /&gt;
    &lt;figcaption&gt;&lt;em&gt;&lt;strong&gt;Inspect icon&lt;/strong&gt;&lt;/em&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p&gt;&lt;em&gt;Клікніть на піктограму &lt;strong&gt;Inspect &lt;/strong&gt;&lt;/em&gt;в лівому верхньому кутку інструменту&lt;em&gt; DevTools.&lt;/em&gt;&lt;/p&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/7e/13/7e1341b4-ca7a-4ec0-93c6-f9477932a4be.png&quot; width=&quot;2000&quot; /&gt;
    &lt;figcaption&gt;&lt;em&gt;Chrome Inspector tool&lt;/em&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p&gt;За допомогою інструмента Chrome Inspect ви можете легко знайти та скопіювати &lt;a href=&quot;https://medium.com/dataflow-kit/css-selectors-vs-xpath-f368b431c9dc?source=friends_link&amp;sk=ac6efc5d55cd648fa3c9488f8e09d4db&amp;ref=hackernoon.com&quot; target=&quot;_blank&quot;&gt;CSS Selector or XPath&lt;/a&gt; для обраного DOM на цій сторінці.&lt;/p&gt;
  &lt;p&gt;Usually, when scraping a web page, you have more than one similar block of data to extract. Often you crawl several pages during one scraping session.&lt;/p&gt;
  &lt;p&gt;Зазвичай під час збору даних з веб-сторінки ви маєте більше ніж один аналогічний блок даних. Сучасні онлайн-скрапери в більшості випадків пропонують зручніший спосіб задати шаблони (CSS Selectors або XPath) для збору даних, встановити правила розбиття сторінок і правила для обробки деталей тої чи іншої сторінки на своєму шляху.&lt;/p&gt;
  &lt;p&gt;Можете переглянути &lt;a href=&quot;https://youtu.be/SKBkclf1FxA&quot; target=&quot;_blank&quot;&gt;дане відео&lt;/a&gt; для того, щоб з&amp;#x27;ясувати як це працює.&lt;/p&gt;
  &lt;h2&gt;Оберіть стратегію для збереження даних&lt;/h2&gt;
  &lt;p&gt;Найбільш відомі прості формати даних для зберігання структурованих даних на сьогоднішній день включають CSV, Excel, JSON (Lines). Зібрані дані можуть бути відформатовані відразу після розбору веб-сторінки. Ці формати підходять для зберігання даних як малогабаритних сховищ.&lt;/p&gt;
  &lt;p&gt;Сканувати кілька сторінок може бути простою задачею, але мільйони сторінок вимагають інших підходів.&lt;/p&gt;
  &lt;p&gt;&lt;em&gt;Як просканувати кілька мільйонів сторінок і витягти десятки мільйонів записів?&lt;/em&gt;&lt;/p&gt;
  &lt;p&gt;&lt;em&gt;Що робити, якщо розмір вихідних даних коливається від середніх до великих?&lt;/em&gt;&lt;/p&gt;
  &lt;h3&gt;Визначіть правильний формат для вихідних даних&lt;/h3&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/29/a6/29a66c30-300a-4e3b-a10d-a4cd4ad288b7.jpeg&quot; width=&quot;2000&quot; /&gt;
    &lt;figcaption&gt;Photo by &lt;a href=&quot;https://unsplash.com/@ripato?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit&amp;ref=hackernoon.com&quot; target=&quot;_blank&quot;&gt;Ricardo Gomez Angel&lt;/a&gt; / &lt;a href=&quot;https://unsplash.com/?utm_source=ghost&amp;utm_medium=referral&amp;utm_campaign=api-credit&amp;ref=hackernoon.com&quot; target=&quot;_blank&quot;&gt;Unsplash&lt;/a&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;h3&gt;Формат №1. Формат значень, розділених комами (CSV)&lt;/h3&gt;
  &lt;p&gt;CSV — це найпростіший формат обміну даними, що є дуже простим для розуміння людиною. Кожен рядок файлу це один запис. Кожен запис складається з даних по відповідних однакових полях, розділених комами. Поля зазвичай визначені у першому рядку.&lt;/p&gt;
  &lt;p&gt;Тут список сімей відображених у вигляді CSV:&lt;/p&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/42/ec/42ecbc97-3dc5-464e-8c77-d16a248749f9.png&quot; width=&quot;1784&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;CSV обмежений для зберігання двовимірних нетипізованих даних. В цьому форматі складно реалізовувати вкладені структури даних.&lt;/p&gt;
  &lt;h3&gt;Формат №2. JSON&lt;/h3&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/ed/83/ed838328-df65-4624-b662-d31c7d0fc1f0.png&quot; width=&quot;1800&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;Створення складних вкладених структур у файлах JSON є доволі простою задачею.&lt;br /&gt;&lt;br /&gt;В даний час &lt;strong&gt;JavaScript Object Notation (JSON) &lt;/strong&gt;стала фактичним стандартом формату обміну даними, замінюючи XML у більшості випадків.&lt;/p&gt;
  &lt;blockquote&gt;&lt;em&gt;Один з наших проектів складається з 3 мільйонів розібраних сторінок. В результаті розмір кінцевого JSON становить понад 700 Мб.&lt;/em&gt;&lt;/blockquote&gt;
  &lt;p&gt;Проблема виникає, коли вам доведеться мати справу з такими розмірами JSON. Щоб вставити або прочитати запис з масиву JSON, потрібно щоразу аналізувати весь файл, що далеко не ідеально.&lt;/p&gt;
  &lt;h3&gt;Формат №3. JSON Lines&lt;/h3&gt;
  &lt;p&gt;Давайте розглянемо, що таке формат &lt;strong&gt;JSON Lines&lt;/strong&gt; та як він порівнюється з традиційним JSON. В індустрії доволі часто використовується саме цей формат, &lt;em&gt;Logstash&lt;/em&gt; та &lt;em&gt;Docker&lt;/em&gt; зберігають логи в форматі &lt;strong&gt;JSON Lines.&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;Той самий список сімей виражений у форматі &lt;strong&gt;JSON Lines &lt;/strong&gt;виглядає так:&lt;/p&gt;
  &lt;pre&gt;{&amp;quot;id&amp;quot;:1,&amp;quot;father&amp;quot;:&amp;quot;Mark&amp;quot;,&amp;quot;mother&amp;quot;:&amp;quot;Charlotte&amp;quot;,&amp;quot;children&amp;quot;:[&amp;quot;Tom&amp;quot;]} 
{&amp;quot;id&amp;quot;:2,&amp;quot;father&amp;quot;:&amp;quot;John&amp;quot;,&amp;quot;mother&amp;quot;:&amp;quot;Ann&amp;quot;,&amp;quot;children&amp;quot;:[&amp;quot;Jessika&amp;quot;,&amp;quot;Antony&amp;quot;,&amp;quot;Jack&amp;quot;]} 
{&amp;quot;id&amp;quot;:3,&amp;quot;father&amp;quot;:&amp;quot;Bob&amp;quot;,&amp;quot;mother&amp;quot;:&amp;quot;Monika&amp;quot;,&amp;quot;children&amp;quot;:[&amp;quot;Jerry&amp;quot;,&amp;quot;Karol&amp;quot;]}&lt;/pre&gt;
  &lt;p&gt;&lt;strong&gt;JSON Lines&lt;/strong&gt; складається з декількох рядків розділених символом нового рядка &lt;code&gt;\n&lt;/code&gt;, у яких кожен рядок є типовим об&amp;#x27;єктом JSON. Наприклад, це дозволяє розділити файл, що займає 10GB, на менші файли і використовувати їх по мірі необхідності.&lt;/p&gt;
  &lt;p&gt;Переклад статті: &lt;a href=&quot;https://hackernoon.com/the-a-z-of-web-scraping-in-2020-a-how-to-guide-sg263y8d&quot; target=&quot;_blank&quot;&gt;The A-Z of Web Scraping in 2020 [A How-To Guide]&lt;/a&gt;&lt;/p&gt;

</content></entry><entry><id>gn_python:d7VnM2H-L</id><link rel="alternate" type="text/html" href="https://teletype.in/@gn_python/d7VnM2H-L?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=gn_python"></link><title>Як хоча б спробувати в Python за місяць</title><published>2020-06-26T15:56:17.383Z</published><updated>2020-06-26T16:57:39.848Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://teletype.in/files/fe/14/fe14c5f6-b094-4153-8c97-7f50e20f0ef9.png"></media:thumbnail><category term="python" label="Python"></category><summary type="html">&lt;img src=&quot;https://teletype.in/files/39/69/39694e42-1cf8-4584-b106-1d87d298da89.png&quot;&gt;Зі всіх усюд майорять статті про те, як почати займатись Data Science, ви вже втомились обирати з цього різноманіття?

Освоїти Python за короткий термін і, можливо, змінити свою кар'єру на щось інше?</summary><content type="html">
  &lt;h2&gt;Вступ&lt;/h2&gt;
  &lt;p&gt;Зі всіх усюд майорять статті про те, як почати займатись Data Science, ви вже втомились обирати з цього різноманіття?&lt;br /&gt;&lt;br /&gt;Освоїти Python за короткий термін і, можливо, змінити свою кар&amp;#x27;єру на щось інше?&lt;/p&gt;
  &lt;p&gt;В цій статті один з шляхів, яким можна піти, аби познайомитись з наукою про дані та спробувати себе в Python за місяць, все залежить від кількості сил вкладених в це. Тут будуть доступні щотижневі розклади та теми, які слід розглянути, щоб на базовому рівні опанувати Python.&lt;br /&gt;&lt;br /&gt;Перш ніж перейти безпосередньо до Python, давайте зрозуміємо про використання Python в науці про дані чи Data Science.&lt;/p&gt;
  &lt;h2&gt;Data Science Pipeline&lt;/h2&gt;
  &lt;p&gt;Наука про дані — це багатопрофільна суміш гіпотез і висновків на основі даних, розробки алгоритмів та технологій для вирішення аналітично складних проблем. Цей напрямок пропонує рішення проблем у реальному світі за допомогою наявних даних. Проте аналіз даних —  це покроковий процес. Це група з декількох методик, які використовуються для досягнення відповідного рішення проблеми. Крім того, досліднику, можливо, знадобиться пройти певну кількість етапів, щоб дійти до бачення проблеми, яке може відрізнятись від початкового через збільшення кількості доступної інформації.&lt;br /&gt;&lt;br /&gt;Давайте розглянемо як це виглядає на різних етапах.&lt;/p&gt;
  &lt;figure class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/39/69/39694e42-1cf8-4584-b106-1d87d298da89.png&quot; width=&quot;396&quot; /&gt;
    &lt;figcaption&gt;Узагальнений вигляд для Data Science Pipeline&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p&gt;&lt;strong&gt;1. Problem Definition | Визначення проблеми&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;Всупереч поширеній думці, найважча частина наукових даних — це не побудова точної моделі чи отримання хороших, чистих даних. Набагато складніше визначити можливі проблеми та придумати правильні способи для оцінки їх вирішення. Визначення проблеми спрямоване на глибоке розуміння предметної області. Кілька мозкових штурмів дуже допоможуть в тому, щоб правильно визначити проблему через вашу кінцеву мету, залежно від того, яку проблему ви намагаєтесь вирішити. Отже, якщо ви помилитесь під час саме цієї фази, ви отримаєте рішення проблеми, яка спочатку навіть не існувала.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;2. Hypothesis Testing | Перевірка гіпотез&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;Цей етап покладається повністю на статистику, під час якого аналітик перевіряє припущення щодо &lt;strong&gt;&lt;a href=&quot;https://uk.wikipedia.org/wiki/%25D0%25A1%25D1%2582%25D0%25B0%25D1%2582%25D0%25B8%25D1%2581%25D1%2582%25D0%25B8%25D1%2587%25D0%25BD%25D0%25B8%25D0%25B9_%25D0%25BF%25D0%25B0%25D1%2580%25D0%25B0%25D0%25BC%25D0%25B5%25D1%2582%25D1%2580&quot; target=&quot;_blank&quot;&gt;параметру генеральної сукупності&lt;/a&gt;&lt;/strong&gt;. Простими словами, ми формуємо деякі припущення на етапі визначення проблеми, а потім затверджуємо ці припущення статистично, використовуючи дані. Цей етап дає можливість знайти параметри, що дають можливість побудувати на подальших кроках вірну модель для нашої вибірки.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;3. Data collection and processing | Збір&lt;/strong&gt; &lt;strong&gt;та обробка даних&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;Збір даних — це процес збору та оцінки інформації про цікаві параметри у встановленому систематизованому порялдку, який дає змогу відповідати на визначені дослідницькі запитання, перевіряти гіпотези та оцінювати результати. Більше того, цей етап у дослідженнях є загальним для всіх галузей, включаючи фізичні та соціальні науки, гуманітарні науки, бізнес тощо. Хоча методи відрізняються від дисципліни до дисципліни, акцент на забезпеченні точного та чесного збору даних залишається однаковим. Крім того, обробка даних — це більше про низку дій чи етапів, що виконуються над даними для перевірки, організації, перетворення, інтеграції та вилучення даних у відповідній вихідній формі для подальшого використання. Методи обробки повинні бути суворо задокументовані, щоб забезпечити корисність та цілісність даних.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;4. EDA and feature Engineering |&lt;/strong&gt; &lt;strong&gt;Дослідницький аналіз даних та побудова ознак&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;Після отримання чистих та трансформованих даних наступним кроком для проектів машинного навчання є ознайомлення з даними, використовуючи дослідницький аналіз даних (EDA). EDA стосується числових підсумків, графіків, агрегацій, розподілів, щільності, огляду всіх рівнів факторних змінних та застосування загальних статистичних методів. Чітке розуміння даних дає основу для вибору моделі, тобто вибору правильного алгоритму машинного навчання для вирішення вашої проблеми. Також побудова ознак - це процес визначення тих змінних прогнози яких сприятимуть найбільшою мірою передбачувальній здатності алгоритму машинного навчання. Здебільшого це мистецтво, аніж наука. Дуже добре в процесі цього етапу мати спеціаліста у предметній області, проте підключити свою уяву теж не завадить.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;5. Modelling and Prediction | Моделювання та передбачення&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;Машинне навчання можна використовувати для прогнозування майбутнього. Ви забезпечуєте для моделі колекцію навчальних даних, навчаєте модель на них, а потім застосовуєте модель до нових даних, аби створювати прогнози. Моделювання прогнозів корисно для стартапів, оскільки ви можете виготовляти продукти, які адаптуються на основі очікуваної поведінки користувача. Наприклад, якщо глядач послідовно дивиться одне і те саме джерело контенту на потоковому сервісі, візьмемо канал на YouTube, то програма може завантажувати цей канал при запуску і давати вам його в рекомендаціях.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;6. Data Visualisation | Візуалізація даних&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;Цей етап має в основі процес відображення даних/інформації у графіках чи фігурах. ВІн використовується для надання візуальної звітності користувачам щодо продуктивності, операцій або загальної статистики даних та успішності прогнозування моделі.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;7.&lt;/strong&gt; &lt;strong&gt;Insight generation and implementation | Генерація та впровадження інсайтів&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;Інтерпретація даних більше схожа на донесення ваших висновків зацікавленим сторонам. Якщо ви не можете пояснити свої висновки комусь, повірте мені, все, що ви зробили, не приносить користі. Отже, цей крок стає дуже важливим. Крім того, метою цього кроку є визначення інсайтів для бізнесу, після чого їх потрібно співвіднести з отриманими даними. Також, вам може знадобитись залучення експертів у предметній області, які допоможуть вам сформувати цілісне бачення того, що буде корисно для бізнесу. Ще з іншого боку, це допоможе у доведенні фактів до аудиторії, що не має відношення до технологій.&lt;/p&gt;
  &lt;h2&gt;Використання Python на різних етапах &lt;/h2&gt;
  &lt;p&gt;Ознайомившись з різними етапами в алгоритмі рішень Data Science задач, ми можемо перейти до визначення методів, які пропонує Python на кожному з цих етапів. На цьому кроці ми маємо можливість краще зрозуміти про зв&amp;#x27;язок цієї мови програмування та науки про дані.&lt;/p&gt;
  &lt;p&gt;Для початку, перший та останній етапи не потребують використання жодної мови програмування як такої. Обидва етапи більше базуються на дослідженнях та &lt;a href=&quot;https://4brain.ru/decision/&quot; target=&quot;_blank&quot;&gt;прийнятті рішень&lt;/a&gt;, а не на реалізації з допомогою коду.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;1. Python при&lt;/strong&gt; &lt;strong&gt;зборі даних&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;У процесі розробки багатьох проектів, які мають відношення до науки про дані, потрібно зібрати (scraping) інформацію з веб-ресурсів для отримання даних з якими ви будете працювати. Мова програмування Python знайшла широке застосування у цій області, а тому має велику екосистему модулів та інструментів, які можна використовувати в рамках цього процесу.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;2. Python при&lt;/strong&gt; &lt;strong&gt;перевірці гіпотез&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;Перевірка гіпотез вимагає багато статистичних знань та вмінь їх використовувати. У Python є бібліотеки, які можуть допомогти користувачам легко виконувати статистичні тести та обчислення. Використання таких бібліотек, як &lt;a href=&quot;https://www.scipy.org/&quot; target=&quot;_blank&quot;&gt;SciPy&lt;/a&gt;, може полегшити процес автоматизації завдань для перевірки гіпотез.&lt;/p&gt;
  &lt;p&gt; &lt;strong&gt;3. Python при EDA&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;Для виконання базового аналізу доступно кілька бібліотек. Для EDA можна використовувати &lt;a href=&quot;https://pandas.pydata.org/&quot; target=&quot;_blank&quot;&gt;pandas&lt;/a&gt; та &lt;a href=&quot;https://matplotlib.org/&quot; target=&quot;_blank&quot;&gt;matplotlib&lt;/a&gt;, для обробки даних та побудови графіків відповідно. &lt;a href=&quot;https://jupyter.org/&quot; target=&quot;_blank&quot;&gt;Jupyter Lab&lt;/a&gt; для написання коду та інших корисних штук. &lt;a href=&quot;https://jupyter.org/&quot; target=&quot;_blank&quot;&gt;Jupyter Lab&lt;/a&gt; — це свого роду щоденник для аналізу даних та науковців, веб-платформа, де ви можете змішати Python, HTML та Markdown, щоб пояснити свої кроки при дослідженні даних.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;4. Python при&lt;/strong&gt; &lt;strong&gt;візуалізації&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;Однією з ключових навичок науковця є вміння розповідати переконливу історію своїх досліджень. Він повинен візуалізувати дані та знахідки у доступний та стимулюючий спосіб. Також вивчення бібліотеки для візуалізації даних дасть змогу отримувати додаткову інформацію, розуміти дані та приймати ефективні рішення. Крім того, існують такі бібліотеки, як &lt;a href=&quot;https://matplotlib.org/&quot; target=&quot;_blank&quot;&gt;matplotlib&lt;/a&gt;, &lt;a href=&quot;https://seaborn.pydata.org/&quot; target=&quot;_blank&quot;&gt;seaborn&lt;/a&gt;, що дозволяють створювати досить непогані візуалізації, при цьому вивчення методів роботи з цими інструментами не займає багато часу.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;5. Python при&lt;/strong&gt; &lt;strong&gt;моделюванні та передбаченні&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;Python може похвалитись бібліотеками на зразок &lt;a href=&quot;https://scikit-learn.org/&quot; target=&quot;_blank&quot;&gt;scikit-learn&lt;/a&gt;, бібліотекою з відкритим вихідним кодом в якій реалізовано алгоритми машинного навчання, попередньої обробки, перехресної перевірки та візуалізації за допомогою уніфікованого інтерфейсу. Такі бібліотеки абстрагуються від математичної реалізації моделі. Отже, розробники можуть зосередетись на побудові надійних моделей, а не на розумінні складної математичної реалізації. Якщо ви новачок у машинному навчанні, тоді ви можете перейти &lt;a href=&quot;https://habr.com/ru/company/ods/blog/344044/&quot; target=&quot;_blank&quot;&gt;за цим посиланням&lt;/a&gt; аби дізнатись більше.&lt;/p&gt;
  &lt;h2&gt;Хронологія вивчення&lt;/h2&gt;
  &lt;p&gt;У цьому розділі ми розглянемо тижневий розподіл тем для знайомства з Python. Це допоможе вам організувати ваш графік роботи та дозволить мати спеціальну дорожню карту на місяць.&lt;/p&gt;
  &lt;blockquote&gt;&lt;strong&gt;Одразу варто зазначити, що ви не станете хорошим спеціалістом чи тим більше експертом в цій області, за цей час. Але ви можете дати поштовх в розвитку в цьому напрямку.&lt;/strong&gt;&lt;/blockquote&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/28/6d/286dba07-e880-403a-9e84-9435e776bba3.png&quot; width=&quot;638&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3&gt;Тиждень 1&lt;/h3&gt;
  &lt;ol&gt;
    &lt;li&gt;&lt;strong&gt;Основи Python&lt;br /&gt;&lt;/strong&gt;Варто почати з вивчення того, що таке змінні, які є конструкції управління потоком виконання. Опанувати базові операції та функції. Дізнатись з якими базовими типами даних поставляється стандартна бібліотека Python.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Поглиблений Python&lt;br /&gt;&lt;/strong&gt;Одразу після того, як будуть освоєні базові концепції, ви можете сконцентруватись на таких речах як: багатопотоковість, класи, об&amp;#x27;єкти, регулярні вирази, робота з мережею тощо. Багато з цього може не знадобитись кожного дня, проте з цим варто бути знайомим.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p&gt;Курси та матеріали, що допоможуть з вивченням, вони покривають обидва кроки з цього тижню, обирати лише вам, які з них використовувати:&lt;/p&gt;
  &lt;p&gt;&lt;br /&gt;&lt;a href=&quot;https://www.coursera.org/learn/diving-in-python&quot; target=&quot;_blank&quot;&gt;Coursera: Занурення в Python&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;https://stepik.org/course/67&quot; target=&quot;_blank&quot;&gt;Stepik: Програмування на Python&lt;/a&gt; та &lt;a href=&quot;https://stepik.org/course/512&quot; target=&quot;_blank&quot;&gt;Stepik: Python. основи та застосування&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;https://www.tutorialspoint.com/python/&quot; target=&quot;_blank&quot;&gt;TutorialsPoint: Python Tutorial&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;&lt;/p&gt;
  &lt;h3&gt;Тиждень 2&lt;/h3&gt;
  &lt;ol&gt;
    &lt;li&gt;&lt;strong&gt;Web scraping в Python&lt;br /&gt;&lt;/strong&gt;Мається на увазі збір даних з веб-сайтів за допомогою коду, це є найбільш логічним та легкодоступним джерелом даних для подальшої обробки. Автоматизація цього процесу за допомогою Python дозволяє уникнути ручного збору даних, економить час, а також дозволяє мати всі дані в потрібній структурі. Ви можете почати знайомство з таких бібліотек, як &lt;a href=&quot;https://www.crummy.com/software/BeautifulSoup/bs4/doc/&quot; target=&quot;_blank&quot;&gt;BeatifulSoup &lt;/a&gt;та &lt;a href=&quot;https://scrapy.org/&quot; target=&quot;_blank&quot;&gt;Scrapy&lt;/a&gt;.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Pandas, numPy та SciPy в Python&lt;br /&gt;&lt;/strong&gt;В Python є прекрасний набір бібліотек, який покриває більшість задач по управлінню даними. Pandas дозволяє отримати доступ до даних у вигляді Data Frame, своєрідна таблична форма, яка дозволяє дуже просто проводити будь-які потрібні маніпуляції. Це у великій мірі спрощує роботу зі складними структурами та виконанням чисельних операцій над ними, будь то очищення даних, узагальнення даних тощо. NumPy в свою чергу забезпечує повним спектром чисельних методів та складних математичних структур. Багато методів з цієї бібліотеки є де-факто стандартом інтерфейсу по взаємодії з числовими даними в різних бібліотеках. Відповідно для виконання складних наукових та важких математичних обчислень існує бібліотека SciPy. Ці бібліотеки знайдуть застосування не лише при роботі в області науки про дані.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p&gt;&lt;/p&gt;
  &lt;h3&gt;Тиждень 3&lt;/h3&gt;
  &lt;p&gt;Третій тиждень — це про розуміння можливостей машинного навчання при використанні Python.&lt;/p&gt;
  &lt;ol&gt;
    &lt;li&gt;&lt;strong&gt;Бібліотека Scikit-learn&lt;br /&gt;&lt;/strong&gt;Ця бібліотека найбільш поширений вибір для вирішення задач класичного машинного навчання, її інтерфейс послугував для багатьох інших бібліотек. Обов&amp;#x27;язково вкладіть свій час у вивчення методів цієї бібліотеки, вона забезпечує єдиний спосіб використання різних моделей.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Бібліотека Keras&lt;br /&gt;&lt;/strong&gt;Ця бібліотека призначена для спрощення процесу створення моделей глибокого навчання (deep learning). Вона підтримує широкий спектр шарів нейронних мереж, таких як згорткові шари, рекурентні або щільні. Вам потрібно думати лише над використанням тої чи іншої архітектури, замість складної математичної реалізації. Також можна подивитись в сторону PyTorch, що на даний час є доволі популярним.&lt;br /&gt;&lt;/li&gt;
  &lt;/ol&gt;
  &lt;h3&gt;Тиждень 4&lt;/h3&gt;
  &lt;p&gt;Четвертий тиждень — це більше про можливості візуалізації та узагальнення всіх попередніх знань у формі проекту.&lt;br /&gt;&lt;/p&gt;
  &lt;ol&gt;
    &lt;li&gt;&lt;strong&gt;Matplotlib в Python&lt;br /&gt;&lt;/strong&gt;Ця бібліотека для побудови 2D графіків, що легко можна поширювати від однієї платформи до іншої, її можна використовувати як в скриптах, в Python та IPython консолях, ноутбуках Jupyter, серверних додатках та в різноманітних графічних інтерфейсах, як приклад tkinter. Matplotlib дає можливість трішки спростити багато речей, які приходилось би писати вручну.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Проект&lt;br /&gt;&lt;/strong&gt;Освоївши всі вищезгадані інструменти, настав час застосувати ці всі знання разом у вигляді проекту. Проект допоможе вам отримати бачення того, яким чином застосовуються ті чи інші бібліотеки, знайти нові запитання, на які прийдеться шукати відповіді, а також отримати загальну картину побудови Data Science Pipeline.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;h3&gt;Зразок проекту, яким слід закріпити знання&lt;/h3&gt;
  &lt;p&gt;Ви можете обрати будь-який проект, який вам подобається. Якщо ж ви заплутались і не знаєте, що за проект реалізувати, ви можете взяти &lt;a href=&quot;https://www.kaggle.com/c/titanic&quot; target=&quot;_blank&quot;&gt;проблему &amp;quot;Titanic&amp;quot;&lt;/a&gt;, що є своєрідним Hello, World! у сфері Data Science.&lt;br /&gt;&lt;br /&gt;Я не розкажу вам, як це вирішити, але я можу дати вам кілька порад для початку проекту:&lt;/p&gt;
  &lt;ol&gt;
    &lt;li&gt;Не будьте в погоні за рахунком вашої моделі на Kaggle. Мета полягає в тому, аби завершити проект, а не намагатись розробити хорошу модель;&lt;/li&gt;
    &lt;li&gt;Робіть більше обробки даних та EDA замість того, щоб проектувати складну модель;&lt;/li&gt;
    &lt;li&gt;Зосередьтеся на обробці даних з допомогою вивчених бібліотек (Pandas, NumPy, Matplotlib).&lt;/li&gt;
  &lt;/ol&gt;
  &lt;h2&gt;&lt;strong&gt;Висновок&lt;/strong&gt;&lt;/h2&gt;
  &lt;p&gt;Python - надзвичайно універсальна мова програмування. Окрім Data Science, ви можете використовувати її для створення веб-додатків, різноманітних інструментів автоматизації і навіть автономних безпілотників.  Величезний відсоток програмістів у світі використовує Python, і це не дарма. Крім того, я думаю, що кожен може досягти високого рівня володіння ним, якщо знайде правильну мотивацію. Натхнення у навчанні!&lt;br /&gt;&lt;br /&gt;Переклад статті &lt;a href=&quot;https://www.datasciencecentral.com/m/profile?screenName=0e4bp3tl2rvxx&quot; target=&quot;_blank&quot;&gt;Divya Singh&lt;/a&gt;: &lt;a href=&quot;https://www.datasciencecentral.com/m/blogpost?id=6448529:BlogPost:792505&quot; target=&quot;_blank&quot;&gt;How to Learn Python in 30 days&lt;/a&gt;&lt;/p&gt;

</content></entry><entry><id>gn_python:FqBPovXjr</id><link rel="alternate" type="text/html" href="https://teletype.in/@gn_python/FqBPovXjr?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=gn_python"></link><title>9 порад для швидкої роботи в UNIX та Linux терміналі</title><published>2020-06-25T14:24:17.637Z</published><updated>2020-06-25T14:24:17.637Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://teletype.in/files/66/02/6602cf45-9249-48c5-861f-ac7ede51ba4f.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://teletype.in/files/d0/b9/d0b92fed-8981-4b10-a9d3-6ce5d03f265e.jpeg&quot;&gt;Ви коли-небудь зустрічали людину, яка володіла якимись невідомими здібностями і виконував команди в UNIX терміналі зі швидкістю світла?</summary><content type="html">
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/d0/b9/d0b92fed-8981-4b10-a9d3-6ce5d03f265e.jpeg&quot; width=&quot;1152&quot; /&gt;
    &lt;figcaption&gt;Bash tricks by Julia Evans&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p&gt;Ви коли-небудь зустрічали людину, яка володіла якимись невідомими здібностями і виконував команди в UNIX терміналі зі швидкістю світла?&lt;/p&gt;
  &lt;blockquote&gt;&lt;/blockquote&gt;
  &lt;blockquote&gt;Так, я декілька разів зустрічався з такими людьми і це надихнуло мене на те, щоб вчитись у них.&lt;/blockquote&gt;
  &lt;p&gt;В цій статті або туторіалі, або називайте як забажаєте, я поділюсь з вами деякими командами для швидкої та продуктивної роботи в UNIX чи Linux терміналі.&lt;/p&gt;
  &lt;p&gt;Я працюю в сфері фінансових послуг і моя робота заключається в розробці та підтримці додатків для торгівлі акціями та фьючерсами на ринку електронних торгів, деривативів, валютних, товарних та інших класів активів.&lt;/p&gt;
  &lt;p&gt;Всі наші сервіси розташовані на серверах під управлінням Linux, саме тому для нас дуже важдиво, щоб людина могла швидко та ефективно працювати з терміналом Linux. За роки роботи в моїй голові сформувались поради для підвищення продуктивності в Linux. І зараз я збираюсь поділитись цим з вами.&lt;/p&gt;
  &lt;h1&gt;9 порад для підвищення продуктивності в Linux&lt;/h1&gt;
  &lt;p&gt;Якщо ваш сервер під управлінням Linux системи, а ваша щоденна робота включає в себе постійний пошук підходящої команди — дані поради допоможуть заощадити немало часу.&lt;/p&gt;
  &lt;h2&gt;1) Використовуйте ! для швидкого виконання довгої команди&lt;/h2&gt;
  &lt;p&gt;В среднем, эта команда сэкономила мне 30% рабочего времени, так как постоянно приходится выполнять одну и ту же UNIX команду по несколько раз.&lt;/p&gt;
  &lt;p&gt;В середньому, ця команда заощадила мені 30% робочого часу, так як постійно приходиться виконувати одну і ту ж UNIX команду декілька разів.&lt;/p&gt;
  &lt;p&gt;Перш ніж я дізнався про цю команду, я використовував стрілки вверх і вниз для роботи з історією команд. Натискаючи стрілку вверх я шукав потрібну мені команду із запропонованого списку, а потім її виконував. Погодьтесь, не дуже зручно. Але з ! достатньо відкрити історію з допомогою команди &lt;code&gt;&lt;em&gt;history&lt;/em&gt;&lt;/code&gt; , вибрати номер рядка з потрібною командою та виконати її. Скажемо, під номером 100 знаходиться команда &lt;code&gt;&lt;em&gt;sudo apt-get update&lt;/em&gt;&lt;/code&gt; . Для того, щоб не вводити цілу команду, достатньо написати &lt;code&gt;&lt;em&gt;!100&lt;/em&gt;&lt;/code&gt; .&lt;/p&gt;
  &lt;blockquote&gt;Не забувайте про цю пораду, так як вона, заощадити массу часу. Крім того, ця команда виявиться дуже корисною для командної обгортки, яка відрізняється від bash (схоже на &lt;code&gt;csh&lt;/code&gt;або&lt;code&gt;ksh&lt;/code&gt; ), де стрілки вверх та вниз не дозволяють працювати з історією команд.&lt;/blockquote&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/db/31/db312317-dbf6-4914-a389-77b88a6b7284.png&quot; width=&quot;1280&quot; /&gt;
  &lt;/figure&gt;
  &lt;h2&gt;2) Використовуйте !! для виконання останньої команди&lt;/h2&gt;
  &lt;p&gt;Це розширена версія попередньої команди, що дозволяє виконати найостаннішу команду з тих, які ви вже виконували. Оскільки дана команда заключається в подвійному натисканні одної і тої ж клавіші — з роботи ви точно почнете йди раніше за інших.&lt;/p&gt;
  &lt;blockquote&gt;Також вона буде працювати на обгортках, в яких не працює стрілка вверх чи вниз, таких як &lt;code&gt;&lt;em&gt;csh&lt;/em&gt;&lt;/code&gt; и &lt;em&gt;&lt;code&gt;ksh&lt;/code&gt;.&lt;/em&gt;&lt;/blockquote&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/fd/41/fd41f401-72a2-4642-ac75-6121b36ec83d.jpeg&quot; width=&quot;750&quot; /&gt;
  &lt;/figure&gt;
  &lt;h2&gt;3) Використовуйте “CTRL+R” для пошуку та виконання підходящої команди&lt;/h2&gt;
  &lt;p&gt;Якщо ви пам&amp;#x27;ятаєте половину або чверть назви команди, яку хочете знайти — введіть &lt;code&gt;“CRTL+R”&lt;/code&gt;  і вона відобразить останню виконану команду, назва якої співпадає із заданою. Якщо ви продовжите натискати &lt;code&gt;“CRTL+R”&lt;/code&gt;, вам будуть видаватись старіші команди, що підходять до шуканого рядка, якщо вони є в наявності.&lt;/p&gt;
  &lt;p&gt;Вищезгадана трійка порад заощадити вам купу часу та нервів, якщо діло стосується виконання команд, які постійно повторюються.&lt;br /&gt;&lt;br /&gt;Особисто я зекономив майже 50-60% робочого часу, просто слідуючи цим порадам.&lt;/p&gt;
  &lt;h2&gt;4) Используйте историю команд&lt;/h2&gt;
  &lt;p&gt;Це найперша порада, яку я сформував для себе, коли почав працювати з UNIX.&lt;/p&gt;
  &lt;blockquote&gt;Кожен день я виконую сотні команд і, цілком природно, що я не можу запам&amp;#x27;ятати кожну. Для пошуку підходящої потрібно виконати команду &lt;code&gt;&lt;em&gt;history | grep ключові слова&lt;/em&gt;&lt;/code&gt; і ви отримаєте всі команди, що містять ключові слова.&lt;/blockquote&gt;
  &lt;blockquote&gt;Використовуйте змінну HISTSIZE, щоб встановити кількість команд, які необхідно зберігати в списку історії (стандартне значення — 500).&lt;/blockquote&gt;
  &lt;h2&gt;5) Використовуйте grep та find&lt;/h2&gt;
  &lt;p&gt;Команда grep використовується для пошуку тексту в файлах і директоріях, на основі шаблонів. Команда find використовується для пошуку файлів по імені та іншим властивостям.&lt;/p&gt;
  &lt;blockquote&gt;Наприклад, з допомогою &lt;em&gt;find&lt;/em&gt; можна знайти всі файли починаючи з поточної директорії, назва яких починається, наприклад, на&lt;strong&gt; coolarticle&lt;/strong&gt;: &lt;em&gt;&lt;code&gt;find . -name ’coolarticle*&amp;#x27;&lt;/code&gt;. А &lt;/em&gt;з допомогою &lt;em&gt;grep&lt;/em&gt; можна знайти &lt;strong&gt;coolarticle&lt;/strong&gt; в файлі file.txt, з виводом рядка який повністю співпадає: &lt;em&gt;&lt;code&gt;grep coolarticle file.txt&lt;/code&gt;.&lt;/em&gt;&lt;/blockquote&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/bc/06/bc0674bd-7e14-400a-a686-7011dd7e6703.png&quot; width=&quot;1225&quot; /&gt;
  &lt;/figure&gt;
  &lt;h2&gt;6) Використовуйте alias&lt;/h2&gt;
  &lt;p&gt;Команда alias запускає будь-яку команду або групу команд, в тому числі з опціями, параметрами і файлами, за допомогою введення одного слова або символу. Тобто ви створюєте простіші, короткі версії звичайних команд, привласнюючи їм нові назви.&lt;/p&gt;
  &lt;blockquote&gt;Наприклад, для того щоб не вводити цілком команду &lt;code&gt;clear&lt;/code&gt;напишемо &lt;code&gt;alias c=&amp;quot;clear&amp;quot;&lt;/code&gt; і добавимо в кінці ~/.bashrc, щоб даний alias був завжи доступний. Тепер, при вводі всього лише одної букви &lt;em&gt;&lt;code&gt;c&lt;/code&gt;, буде очищатись весь термінал.&lt;/em&gt;&lt;/blockquote&gt;
  &lt;h2&gt;7) Використовуйте pushd, popd, cd -, ~ для переміщення по каталогу&lt;/h2&gt;
  &lt;p&gt;Основуючись на власному досвіді, можу сказати, що преміщення по оболонці UNIX займає 50% робочого часу, а якщо ви збираєтесь прописувати шлях до каталогу — можете зовсім забути про швидку роботу.&lt;/p&gt;
  &lt;blockquote&gt;Загалом, замість того, щоб вводити повне ім&amp;#x27;я команди, використовуйте вищенаведені поради і ефективно використовуйте команди &lt;em&gt;pushd, popd, cd- і cd ~&lt;/em&gt; для швидкого переходу між каталогами.&lt;/blockquote&gt;
  &lt;h2&gt;8) Мінімізуйте кількість натискань клавіш та збільште швидкість друку&lt;/h2&gt;
  &lt;p&gt;Чим менше ви друкуєте, тим швидше ви працюєте. &lt;/p&gt;
  &lt;p&gt;Якщо ви введете перші кілька букв імені файлу, команди або шляху, а потім натиснете клавішу Tab — відбудеться автозаповнення командного рядка.&lt;/p&gt;
  &lt;h2&gt;9) Продовжуйте вивчати нові команди&lt;/h2&gt;
  &lt;p&gt;Намагайтеся дізнатися якомога більше команд - це допоможе скоротити час для виконання самих різних завдань. І не забувайте використовувати ctrl + z, fg і bg, щоб призупинити процес.&lt;/p&gt;
  &lt;blockquote&gt;&lt;code&gt;Ctrl+Z&lt;/code&gt; призупиняє процес, для відновлення виконання процесу на передньому плані можна використовувати команду &lt;code&gt;&lt;em&gt;fg&lt;/em&gt;&lt;/code&gt;, команда &lt;code&gt;&lt;em&gt;bg&lt;/em&gt;&lt;/code&gt;запускает процес у фоновому режим.&lt;/blockquote&gt;
  &lt;p&gt;Надіюсь, що ці поради допоможуть вам зробити більше за меншу кількість часу, збільшать вашу продуктивність та збагатять ваш досвід роботи з UNIX.&lt;/p&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/0b/0c/0b0cf4ba-6fbd-4def-9ff7-660b38aed9c2.jpeg&quot; width=&quot;640&quot; /&gt;
  &lt;/figure&gt;
  &lt;h1&gt;Висновок&lt;/h1&gt;
  &lt;p&gt;Може здатися, що немає сенсу вивчати ці команди, але ви будете приємно здивовані, побачивши скільки часу можна заощадити, просто застосувавши мої поради на практиці. &lt;/p&gt;
  &lt;p&gt;Перевод статьи &lt;a href=&quot;https://hackernoon.com/@javinpaul?source=post_header_lockup&quot; target=&quot;_blank&quot;&gt;javinpaul&lt;/a&gt;: &lt;a href=&quot;https://hackernoon.com/10-basic-tips-on-working-fast-in-unix-or-linux-terminal-5746ae42d277&quot; target=&quot;_blank&quot;&gt;10 Basic Tips on Working Fast in UNIX or Linux Terminal&lt;/a&gt;&lt;/p&gt;

</content></entry><entry><id>gn_python:H6FyBYSPr</id><link rel="alternate" type="text/html" href="https://teletype.in/@gn_python/H6FyBYSPr?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=gn_python"></link><title>Flask Checkpoint 02. Підготовка до проекту з Docker</title><published>2020-06-23T16:05:32.769Z</published><updated>2020-06-24T14:28:53.307Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://teletype.in/files/46/c5/46c5acfc-2baf-476f-a421-69dd27863608.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://teletype.in/files/9b/54/9b549c77-6c26-4ed6-8845-3201a57c4257.png&quot;&gt;Зараз багато речей йдуть пліч-о-пліч з інструментами, які допомагають розвернути функціонал того чи іншого репозиторія на будь-якій платформі.</summary><content type="html">
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/9b/54/9b549c77-6c26-4ed6-8845-3201a57c4257.png&quot; width=&quot;1024&quot; /&gt;
  &lt;/figure&gt;
  &lt;h2&gt;Цілі&lt;/h2&gt;
  &lt;ol&gt;
    &lt;li&gt;Зрозуміти концепції віртуальних машин та контейнерів.&lt;/li&gt;
    &lt;li&gt;Ознайомитись з інструментом Docker.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;h2&gt;Основні терміни&lt;/h2&gt;
  &lt;p&gt;Зараз багато речей йдуть пліч-о-пліч з інструментами, які допомагають розвернути функціонал того чи іншого репозиторія на будь-якій платформі.&lt;/p&gt;
  &lt;p&gt;Раніше величезною популярністю користувались &lt;strong&gt;віртуальні машини&lt;/strong&gt;, я використовував VirtualBox для того, щоб запускати різноманітні генератори ключів чи інші вірусні програми. Я робив це для того, щоб в ізольованому просторі завантажувати потенційно шкідливий код в систему, аби це не шкодило основній.&lt;br /&gt;&lt;br /&gt;Якщо говорити про тестування моделей машинного навчання, то більшість цих репозиторіїв постачаються одразу з Dockerfile, що дозволить відтворити по образу &lt;strong&gt;контейнер&lt;/strong&gt; із робочим кодом та потрібними налаштуваннями. &lt;/p&gt;
  &lt;p&gt;Отже, розглянемо дві основні концепції: &lt;/p&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/b4/10/b41017ea-1eca-453e-b7dc-56422d756980.jpeg&quot; width=&quot;1280&quot; /&gt;
    &lt;figcaption&gt;Архітектура віртуальних машин та контейнерів&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p&gt;Конетейнери займають менше місця за рахунок перевикористання ресурсів на рівні операційної системи, тоді як VM робить це на апаратному рівні. Основні відмінності між контейнерами та VM заключаються саме в архітектурі, в той час як їхній функціонал дуже подібний, а саме ізоляція додатку, а також його залежностей в окремий модуль.&lt;br /&gt;&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Важливо знати: &lt;/strong&gt;ці інструменти усувають необхідність у використанні додаткового фізичного обладнання, що дозволяє більш ефективно використовувати обчислювальні ресурси.&lt;/p&gt;
  &lt;p&gt;Зважаючи на все це, ми будемо використовувати &lt;strong&gt;Docker&lt;/strong&gt;, як зручний спосіб оганізувати середовище для розробки.&lt;/p&gt;
  &lt;h2&gt;Must have Docker!&lt;/h2&gt;
  &lt;p&gt;Це програмне забезпечення для автоматизації розгортання та управління додатками в середовищах з підтримкою контейнеризації. Дозволяє &amp;quot;упакувати&amp;quot; додатки зі всім оточенням та залежностями в контейнер, який можна перенести на будь-яку Linux-cистему.&lt;/p&gt;
  &lt;p&gt;До основних переваг можна віднести:&lt;/p&gt;
  &lt;ol&gt;
    &lt;li&gt;&lt;strong&gt;Простота у використанні:&lt;/strong&gt; Docker значно полегшує використання розробникам, системним адміністраторам, архітекторам для швидкого створення та тестування додатків. Те, що створено локально на ноутбуці з легкістю можна перемістити у хмару для загального використання. Мантра звучить як: &amp;quot;Побудуй один раз, запускай де завгодно&amp;quot;.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Швидкість:&lt;/strong&gt; контейнери Docker легкі та швидкі. Оскільки контейнери - це просто ізольовані середовища, що працюють на ядрі Linux, вони споживають невелику кількість ресурсів. Можна створити та завантажити контейнер за лічені секунди, на відміну від інших віртуальних машин, яким доводиться кожен раз створювати повноцінну операційну систему.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Docker Hub:&lt;/strong&gt; користувачі Docker також отримують вигоду від багатої та постійно зростаючої екосистеми Docker Hub, яку можна розглянути як &amp;quot;магазин застосунків для Docker&amp;quot;. Спільнота Docker Hub має десятки тисяч образів, у вільному доступі, які ви можете вільно використовувати. З легкістю можна знайти готові та працюючі образи, які будуть відповідати всім вимогам, без потреби модифікації (хіба, що чуть-чуть).&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Модульність та масштабованість:&lt;/strong&gt; Docker дозволяє легко розбити функціональність вашого додатку на різні контейнери, які можна оновлювати як незалежні компоненти. Тобто в одному контейнері може бути база даних Postgres, коли в іншому сервер Redis, в той час як сервер на Python знаходиться у третьому.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/61/9e/619e93d0-efd4-4742-bfba-7d937c188ab4.png&quot; width=&quot;1585&quot; /&gt;
    &lt;figcaption&gt;Приклад того, як виглядає Docker Toolbox з-під Windows.&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p&gt;Рекомендую переглянути першу частину курсу на Stepik по Docker:&lt;br /&gt;&lt;a href=&quot;https://stepik.org/course/1612&quot; target=&quot;_blank&quot;&gt;Stepik: Управління обчисленнями&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;Стосовно того, яким чином застосовувати Linux термінал, в першій частині:&lt;br /&gt;&lt;a href=&quot;https://stepik.org/course/73&quot; target=&quot;_blank&quot;&gt;Stepik: Вступ до Linux&lt;/a&gt;&lt;/p&gt;

</content></entry></feed>