Закінчив виконання 6-го практичного завдання (8-й тиждень) #CS50 від Прометеус. Це був нелегкий крок до
пізнання роботи з мережами в C під Linux та боротьбою між союзом "це
необов’язково робити" з "це можна робити тільки в тому обсязі, який
написано" проти "треба зробити
все і навіть більше". Нижче трохи роздумів, але для початку трохи про
завдання.
У загальних рисах: треба було дописати ВЕБ-сервер реалізований на
СІ щоб він виконував свою "мінімальну роботу" по поверненню
запрошуваного статичного (сторінки, рисунки) та динамічного (результат виконання
PHP)
контентів. Окрім недоробленого вихідного коду ВЕБ-серверу давалася папка public
з усіма необхідними файлами сайту:
cat.html, cat.jpg, hello.html, hello.php.
HTML
та
PHP
файли дуже прості,
тільки для введення в практичні основи одного та іншого та виконання певного
контенту на стороні клієнту та серверу.
Після
ознайомлення зі змістом файлів, пропонувалося потренуватися в перевірці роботи
існуючого (допиленого) скомпільованого серверного додатку. І тут дійсно були неважкі
але цікаві і дуже потрібні вправи, зокрема:
-
перевірка на
Chrome
з
використанням вбудованих інструментів розробника
-
перевірка через
telnet
в текстовому режимі, коли ти сам служиш движком
HTTP
-протоколу.
Далі
необхідно було поверхово ознайомитися з недописаним вихідним кодом. Слово ПОВЕРХОВО
виділяю жирним і курсивом, бо тут у мене нижче буде багато буковок з цього
приводу. Після ознайомлення треба було добавити трохи коду, який би:
-
повертав текстове значення типу
MIME
в залежності від шматка тексту в запиті
-
перевіряв текстовий запит на коректність, парсив його (розбирав на шматки) та
перевіряв/парсив ці шматки запиту
-
формував відповідь клієнту
Після
цих маніпуляцій виправлений сервер повинен був працювати аналогічно тому, який
приходив скомпільованим. Ось практично і все про завдання. А тепер … трохи
емоцій і думок.
1.
Завдання не перевіряється і не оцінюється!!! Це серйозний демотиватор виконання
цього завдання! І це не тільки моя думка, так говорять і на форумі
CS
50 від Прометеус
. Кажуть, що
у версії 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
), черговий досвід роботи з рядками,
вказівниками, пам’яттю, консольним виводом в СІ, певні навики в перевірці
роботи мережних сервісів.
Отже,
загальний висновок – робота проведена велика і не марно. Це я і про свою роботу
і про команду Прометеус а також авторів
CS
50.
Черговий раз висловлюю
спасибі команді Прометеус за локалізацію
CS
50 і підтримку курсу.
Хоч цей
тиждень показав, що над оригінальним курсом дійсно ще треба працювати (я так
розумію в 2016 році багато чого нового) він є хорошою основою для тих, кому просто
треба вказувати шлях. Також, судячи по форуму, відчувається брак волонтерів для
підтримки курсу на Прометеусі.
Вже
починається 10-й тиждень, а в мене ще непаханий 9-й, який теж не оцінюється
:(
.
Набираюся сил і вперед!
Трохи
гумору від
CS
50 про роботу через текстовий
terminal
"Проте
не варто робити запит на cat.jpg (чи будь-який бінарний файл), бо у відповідь
ви отримаєте повну кашу! (Але ж ви спробуєте, чи не так?)"