понедельник, 27 июня 2016 г.

Закінчив виконання 6-го практичного завдання #CS50 від Прометеус


Закінчив виконання 6-го практичного завдання (8-й тиждень) #CS50 від Прометеус. Це був нелегкий крок до пізнання роботи з мережами в C під Linux та боротьбою між союзом "це необов’язково робити" з "це можна робити тільки в тому обсязі, який написано"  проти "треба зробити все і навіть більше". Нижче трохи роздумів, але для початку трохи про завдання.

У загальних рисах: треба було дописати ВЕБ-сервер реалізований на СІ щоб він виконував свою "мінімальну роботу" по поверненню запрошуваного статичного (сторінки, рисунки) та динамічного (результат виконання PHP) контентів. Окрім недоробленого вихідного коду ВЕБ-серверу давалася папка public з усіма необхідними файлами сайту:  cat.html, cat.jpg, hello.html, hello.php. HTML та PHP файли дуже прості, тільки для введення в практичні основи одного та іншого та виконання певного контенту на стороні клієнту та серверу.

Після ознайомлення зі змістом файлів, пропонувалося потренуватися в перевірці роботи існуючого (допиленого) скомпільованого серверного додатку. І тут дійсно були неважкі але цікаві і дуже потрібні вправи, зокрема:
- перевірка на Chrome з використанням вбудованих інструментів розробника
- перевірка через telnet в текстовому режимі, коли ти сам служиш движком HTTP-протоколу.

Далі необхідно було поверхово ознайомитися з недописаним вихідним кодом. Слово ПОВЕРХОВО виділяю жирним і курсивом, бо тут у мене нижче буде багато буковок з цього приводу. Після ознайомлення треба було добавити трохи коду, який би:
- повертав текстове значення типу MIME в залежності від шматка тексту в запиті
- перевіряв текстовий запит на коректність, парсив його (розбирав на шматки) та перевіряв/парсив ці шматки запиту
-    формував відповідь клієнту
Після цих маніпуляцій виправлений сервер повинен був працювати аналогічно тому, який приходив скомпільованим. Ось практично і все про завдання. А тепер … трохи емоцій і думок.

1. Завдання не перевіряється і не оцінюється!!! Це серйозний демотиватор виконання цього завдання! І це не тільки моя думка, так говорять і на форумі CS50 від Прометеус. Кажуть, що у версії 2016-го року перевірка і оцінка вже проводяться. Очевидно в 2014-му році оригінальний курс був на стадії становлення, таке буває, і це нормально (кажу як викладач). Тому це був серйозний психологічний бар'єр до вибору "треба" проти "може не треба?". Але подумавши над тим, чого я взагалі проходжу цей курс, лінь в кінцевому випадку доволі швидко програла. Тим не менше, факт наявності подібних емоційних бар'єрів буду враховувати при розробці своїх дистанційних курсів. Так що, в цьому є певний позитивний досвід для мене, як викладача.

2.Поверховий аналіз коду – це серйозний, як на мене, бар'єр іншого характеру. Тобто, "не засмучуйтесь, якщо вам щось не зрозуміло" звісно трохи заспокоює. Але залишається цілий шмат незрозумілих, але головне - потрібних речей! Хочеться сьомого з половиною тижня (тут загадав Гаррі Потера), в якому би дали основи роботи з сокетами, пайпами та "цілою купою таких речей, яких я не розумію, просто не розумію". А головне, щоб дали ще один приклад роботи саме в мережі під С в Linux. Зараз ера Інтернету Речей, а комунікації на низькорівневому рівні – це одна із важливих компетенцій. Тому, набравшись духу, я почав лупати цей код, і протягом декількох вечорів робив свої коменти до нього.  Результат виклав на загальний огляд, може кому знадобиться. Враховуючи що я новачок в цій темі, очевидно десь є помилки (https://drive.google.com/file/d/0B2FfwwwweBSVenRSVTU0bUU1blk/view ).  Якщо комусь захочеться кодити в CI (і не тільки) раджу Notepad++ (https://notepad-plus-plus.org/download/v6.9.2.html). У результаті таких потуг підняв шмат нових для себе речей, ба навіть більше – пришвидшив виконання для себе завдання (якщо не враховувати що аналіз коду зайняв десь 400-500% від часу виконання самого завдання).

3. Кінцевий видимий результат – кіт в браузері та привітання того, чиє ім'я було введене в формі. Кінцевий "невидимий" результат – набагато краще розуміння (трохи до цього було) які діяльності відбуваються на ВЕБ-серверах, як працюють сокети в Лінукс (до цього трохи грався з WinSock), черговий досвід роботи з рядками, вказівниками, пам’яттю, консольним виводом в СІ, певні навики в перевірці роботи мережних сервісів.                       

Отже, загальний висновок – робота проведена велика і не марно. Це я і про свою роботу і про команду Прометеус а також авторів CS50. Черговий раз висловлюю спасибі команді Прометеус за локалізацію CS50 і підтримку курсу. Хоч цей тиждень показав, що над оригінальним курсом дійсно ще треба працювати (я так розумію в 2016 році багато чого нового) він є хорошою основою для тих, кому просто треба вказувати шлях. Також, судячи по форуму, відчувається брак волонтерів для підтримки курсу на Прометеусі.
Вже починається 10-й тиждень, а в мене ще непаханий 9-й, який теж не оцінюється :(. Набираюся сил і вперед!    

Трохи гумору від CS50  про роботу через текстовий terminal "Проте не варто робити запит на cat.jpg (чи будь-який бінарний файл), бо у відповідь ви отримаєте повну кашу! (Але ж ви спробуєте, чи не так?)"        

Комментариев нет:

Отправить комментарий