понедельник, 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 (чи будь-який бінарний файл), бо у відповідь ви отримаєте повну кашу! (Але ж ви спробуєте, чи не так?)"        

суббота, 11 июня 2016 г.

7-й тиждень курсу #CS50



Сьогодні пройшов завдання 7-го тижня #CS50 від Прометеуса. Завдання було як на мене простіше, ніж позаминулого тижня. Необхідно було формувати власний словник за вказаним файлом а потім перевіряти текст в іншому файлі на наявність/відсутність слів в словнику (аля синтаксична перевірка). Оцінювалися часові показники роботи алгоритму. Для реалізації пропонувалося 2 варіанти: використання хеш-таблиці або префіксне дерево. Дане завдання більш направлено не на вивчення "С" а на теорію алгоритмів. Це те, чого явно бракує самоучкам в програмуванні, типу мене. Так що, користь звісно є. Отже, трохи висновків:       
1. Хеш-списки, дерева – це та штука яка точно потрібна всі програмістам, навіть програмістам-автоматчикам (чуєте самоучки!?).
2. Приклади з CS50 явно кращі ніж класичні "порахуйте формулу" та "знайдіть рішення рівняння", якими забивали на класичній інформатиці. Цікавість прикладу тримає студента не на "треба" а на "хочу".    
У описі завдання були застереження, які я не зрозумів. Наприклад "Крім регістру, ваша реалізація check повинна повертати true лише для слів, які дійсно є в словнику. Будьте обачні і не захардкодьте слова, які часто зустрічаються (наприклад the), щоб запобігти проблем якщо ми передамо вашій реалізації словник (dictionary) без них.)"  У таких випадках, я, як завжди залишив це нерозуміння не потім.  Але коли перевірка пройшла вдало, вже не переймався цим фактом. Те саме стосується і помилок на перевірку  valgrind. Отже:
3. При розробці курсів треба враховувати неоднозначність результатів і множину рішень. Якщо можна пройти простішим шляхом, люди завжди підуть по ньому. Можливо помилки в пам'яті треба створювати штучно в прикладах, щоб людина навчилася їх шукати за допомогою вказаних інструментів.   
Помічаю що не вистачає конспекту. Відео - це добре, але хочеться все тримати в одному файлі-конспекті. При такій великій кількості паралельних робіт (в тому числі програмуванні у інших середовищах) важко згадати що там в "С". Відео-уроки та відео-підказки (а їх там просто неміряно) не зручні в цьому плані. Тому користуюся Інтернетом, благо матеріалу там багато і знайти його простіше.  Це ще один досвід, який я отримав і буду враховувати в своїх курсах:
4. Повинен бути конспект! Або свій, або готовий, але  доступний для редагування.
Матеріали у відео повторюються. З одного боку - це добре, "повторение – мать учения!", але з іншого – потребує більше часу. Адже не знаєш, чи варто пропускати це відео, бо там може бути якась цінна інформація, яку ти не чув в попередньому. Це ще один мінус до відеоматеріалів , як мінімум матеріали треба дублювати текстом. У будь якому випадку:
5. Багато матеріалу це не плюс, а мінус, тим більше коли він дублюється. Весь додатковий матеріал, не потрібний для "поборення" завдання треба винести окремо. У своєму дист.курсі "пром. мережі" відео писав не для курсу, тому його там заздалегідь було більше ніж треба для даного курсу. Це я вже знав на початку курсу, але час піджимав, тому змирився з цим. Бачу, що лишнє треба рубати.
Чекаю наступного тижня. Виділяти час для курсу все важче, але  "лупайте сю скалу!"    
     

четверг, 9 июня 2016 г.

Проходження курсу #CS50

Вирішив пройти безкоштовний онлайн курс по основам програмування від Прометеуса. Зараз триває 7-й тиждень. На Фейсбуці вже запостив декілька своїх вражень. Тут зберу все до купи, потім буду згадувати і аналізувати. 
http://courses.prometheus.org.ua/courses/Prometheus/CS50/2016_T1/about  

тиждень 2-й, вірніше 1-й
усім рекомендую пройти цей курс, навіть якщо ви програмер, попереду багато чого цікавого, ось одна з відеолекцій тижняhttps://www.facebook.com/pupena.san/posts/863365180456587
Сьогодні пройшов повністю заняття 2-го (1-го) тижня ‪#‎CS50‬ на Prometheus. Після проходження завдань пройшовся по форуму. Люди реально не цінять халявну освіту, починають жалітися, сваритися, вимагати і т.д. Це черговий раз змушує задуматися, а чи варто робити її повністю безкоштовною? Декілька раз помічав, що на платній основі люди більше стараються і уважніше ставляться до вимог (двосторонніх).
У будь якому випадку, все-таки кльово, що є люди, які зробили цей курс доступним для широкої маси українців. За що їм щиро дякую!
Всім викладачам раджу приєднатися, щоб принаймні побачити як це виглядить, ну і програмуванню не завадить повчитися. https://www.facebook.com/pupena.san/posts/863602863766152
2-гий (з нуля) тиждень ‪#‎CS50‬ пройдено. Мені здається цей тиждень був по кількості поданого матеріалу не дуже насиченим, порівняно з попереднім. Тобто відеоматеріалів дуже багато, але такого форсажу як минулого тижня явно не було. Мабуть це затишок перед наступним шаленим стрибком.
Баги, змінні та області визначення, масиви, робота з рядками, трохи створення своїх функцій, навіть з'являються де-не де пойнтери.
Серверу Прометеуса явно тяжко, він перевантажений. Завдання сприймає на перевірку далеко не завжди. Тим не менше, працює.
Адміністратори курсу дуже гнучкі, за проханнями збільшили кількість спроб до 100. Це добре, так як тут важлива не бумажка а знання. Враховуючи, що сервер не завжди адекватно приймає завдання (сьогодні за першою спробою виплюнув мій код як помилку, а за другою той самий код з'їв), а також те, що є локальні засоби перевірки (очевидно більшість перевіряється ним), такий захід вважаю за конче необхідний.
Політ нормальний. Чекаю наступного тижня і нового курсу по C#.  https://www.facebook.com/pupena.san/posts/868045249988580
Невже я пройшов перше завдання 5-го тижня #CS50 (від Прометеуса)?!
Завдання реально потрепало нерви! Треба було зробити програму в СІ яка масштабує BMP зображення з вхідного файлу та записує його у вихідний. Хороше тренування для вводу/виводу з/в файли, розуміння вказівників (гуляння по адресам), розбору формату файлу BMP. А ще - це тест на розуміння доки (нюанси пояснень), впертості (програм ерам без цього нікуди) та для тих, кому СІ нерідний, вміння перемикатися на інші парадигми.
Для автоматників: черговий раз для себе відмітив, що якщо вказівники будуть прийняті в мовах МЕК-61131, життя експлуатації пром. автоматики стане важчим. Все таки, хоч гнучкість це класно, надійність – це важливіше.
А йде вже 6-й тиждень. Блін, треба наганяти…
 Пройшов 2-ге (вірніше 3-тє) завдання 5-го тижня (а ще шостий треба встигнути!) ‪#‎CS50‬ від Прометеуса. Постановку завдання краще послухати (даю посилання). Слід відмітити, що, як на мене, попереднє (2-ге) завдання тижня, де треба було змінити розмір бітмапа, було набагато складнішим, але не таким цікавим. Все таки, «шпигунські» ігри трохи інтригують, і я черговий раз для себе відмітив, що треба таки десь виділити час на створення квесту для автоматників (елементи квесту вже впроваджував в дистанційному курсі по пром.мережам).
Так от, завдання наче не складне, і фотки я отримав доволі швидко. Земайлу (помічницю) вирішив не слухати, хотілося самому пошурупати, а потім вже, якщо не вийде - звернутися до неї. Через організацію ВЕБ-проксі на роботі не міг перевіритися локально (особливості роботи віртуалок) і кинув прогу прямо на Прометеус. І тут мене чекав облом, - "Невірно"! Та як "невірно", файли ж є і розпізнаються! Потім таки вирішив послухати Themail’у, і яке було моє здивування – лишні нулі з 512-байтних сегментів видаляти не треба. Блін, перемудрив. Бот-верифікатор – штука дерев’яна. :)
Висновок: слухай Земайлу!
Далі буде…https://www.facebook.com/pupena.san/posts/885165554943216

Цього тижня на ‪#‎CS50‬ від Прометеуса в лекційних заняттях вже пішли TCP/IP, http, html та PHP. Стільки нових тем і за один тиждень! Завдання ще поки на СІ. Я його ще не виконував, тому враженнями поділюсь після виконання. Ніколи не думав, що за такий малий проміжок часу можна дати стільки матерілау. Подумаю над тим, як можна в майбутньому інтенсифікувати (та створити нові за новим підходом) свої дистанційні курси.
Усіх технарів закликаю до проходження курсу, навіть кщо Ви вважаєте себе крутим програмером. Викладачі тут отримають свій досвід, наприклад, як можна обіграти деякі моменти на лекційних заняттях, або як зацікавити студентів на практичних. Звісно, мені не все подобається в курсі, але це мої ІМХО, та і не буває все ідеальним.
Автоматчикам курс є обов'язковим для проходження, навіть якщо це залізячний автоматчик.
Реєструйтеся! Все безкоштовно і доступно 24/7. Курс буде доступним навіть після його завершення.
Хорошого дня!   https://www.facebook.com/pupena.san/posts/888345531291885