понедельник, 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

суббота, 19 марта 2016 г.

Draft translate of Draft ISA-88.01: Mission complete!?



Ось, нарешті, закінчив перший повний чорновий переклад чорнової версії стандарту ISA-88.01 2010-го року.  https://sites.google.com/site/isa88inua/
Для початку трохи емоцій: их нет у меня!  Згадую ту собачку з мультику, яка з сумною мордочкою піднімає прапорець з написом «Im Happy!».  Я вже звик до таких емоцій – кожна книжка та інша велика робота закінчувалася приблизно з однаковим відчуттям, вірніше без них. Перегорів! Але в даному випадку, це ще не кінець. Мало того - це тільки початок!

 

Що дає переклад даного стандарту?

1) Перш за все це моя (і маю сподівання - моїх молодих колег) методичка до створення програм для наступних проектів АСУТП. Певні елементи вже впроваджені і були апробовані ще до того, як я зрозумів що це вже зроблено по стандарту ISA-88. Це реально крута штука, вона ставить правильні рейси в голові (А.Левенчук(С)) , готовить проекти до легшого інтегрування в MES. Тобто, переклад навіть в такому чорновому варіанті вже працює на мене.

2) Маю сподівання, що таки поступово до процесу перекладу, просвіти і впровадження ISA-88 долучаться інші члени АСУшної спільноти. Я вважаю, що тільки разом ми можемо зробити щось суттєве і вибитися на зовнішні ринки (в т.ч. наукові) як сильні конкуренти. ISA-88 це один з важливих стандартів, який мусить бути взятий за практику при розробці АСУТП. До комплекту добавляється ряд інших: ISA 5.1, ISA95, ISA99, ISA18.2 та ін..

3) Вже впроваджую в універі, в дисципліні по MES. Ви скажете що це не MES? Вважаю, що спочатку треба починати з ISA-88 а потім MES (MESA, ISA-95…). Цього року вже намагаємося давати студентам щось практичне. Як воно вийде -  колись може відпишусь.  Переклад є хорошим путівником по лекціям (для лектора).  А ще я книгу задумав в найближчу 5-річку забацати.

4) Нагадую, що це переклад чорнової версії а не оригіналу. Можливо подивившись на переклад, якийсь добрий дядька оцінить важливість стандарту, заплатить 200$ за оригінал, а потім скине його мені по пошті. Хто зна… А в стандарті мабуть ще є багато цікавого.

 

Про «історії партій» і «партійне керування»

 Термінологія - це капець капецнутий! Прийшлося залишитися на якомусь маломальскому варіанті . Пропонуйте свої, а головне аргументуйте. Залишати кальку не вважав за потрібне. Понастворював купу тем на форумах і в ФБ щодо перекладу, ось наприклад 

Що далі?

При багатозадачності приходиться роздавати кванти різним потокам, зараз важко сказати коли переклади ISA-88 отримають свій квант.  В темі багато цікавих книг, ще в ISA-88 крім частини 01 є інші цікаві, що потребують хоча б ознайомлення. Однак, за подачі зацікавлених, даний потік може отримати вищий пріоритет, і долити азоту в двигун. Так що є важелі впливу :)  

понедельник, 8 февраля 2016 г.

Про перспективи АСУТПшного навчання




Замітки на ніч…

Загальні
Ця тема вариться вже довго, і навіть виливалася у свій час в філософську працю, яка так і повисла без закінчення (http://asu.in.ua/viewtopic.php?f=9&t=95). Тим не менше, в голові потихеньку визріває більш конкретна і вузька модель. Зараз коротко про модель підвищення кваліфікації, яку я бачу сьогодні. Буду писати і думати, або навпаки…
Курсера, Прометеус та недавній запуск дистанційної освіти в НУХТі зробили своє коварне діло і поставили остаточні рельси в напрямку мого подальшого планування подій:  буду запускати АСУТПшні курси як я це неодноразово пропонував і навіть пробував. Буду запускати в дистанційній, або дистанційно-очній формі.
Раніше я намагався донести колегам зі свого та інших ВУЗів про необхідність і вигідність такої діяльності. Зараз помітив за собою, що я ні від кого вже нічого не чекаю. То мабуть прийшло вже давно, але тільки недавно я це усвідомив, коли зрозумів що мене не колише чиясь пасивність, або нерозуміння. Все робив сам і буду робити сам. Хто зі мною – завжди радий!
Отже, думаю найкращий варіант – це дистанційна форма. Чому? Бо вона розв’язує руки по багатьом параметрам. З цього приводу вже написано, переписано, тому не буду.
Думаю для початку треба вибрати один із самих затребуваних курсів. Звичайно тут проситься якась автоматизація виробничих процесів. І цей курс мабуть буде першим, за який можна буде брати гроші і тотально розкручувати. Причина банальна – курс самий затребуваний, так як направлений на загальну освіченість інженерів-НЕавтоматчиків (технологів, електриків, механіків…). А загальна тенденція до IoT та гаджетоманія в кінці кінців приведе до того що автоматика увіллється ще в IT чи навпаки. Тобто АВП – це те, де можна підвищити рівень компетенції всіх ІТРовців, а їх в Україні багато. Так чому ж тоді не буду? Бо це не мій курс. Я до нього не готовий, не читав. Але якщо найдеться хороший КІПовець (нижній рівень автоматики в мене трохи прихрамує) – все може бути. Основи ТАУ, ПЛК, ЛМІ і проектування взяв би на себе.
Отже з моїх курсів сюди може лягти: пром. мережі, програмування контролерів, ЛМІ. Пром. мережі вже готовий, але практика показала, що це не дуже затребуваний курс. Тим не менше, він уже практично компліт, а допилювати можна як японці - до нескінченості.
Залишились контролери і ЛМІ. За популярністю думаю краще взяти ЛМІ. Нижче подумаю чому:
- левел 1 потрібен всім і може потім лягти в основу того ж АВП (основи ЛМІ, тренди, аларми, звіти, шедулери, логи…)
- з нього можна зробити ляльку, ЛМІ це завжди те на чому можна погратися так, що стало цікаво і інтригувало
- лабораторки мабуть будуть самими цікавими, а це зробить ресурс більш популярним

Програмування контролерів – курс потрібний, але кількість потенційних слухачів значно менша. Ще є певна «брендова» зафарбованість . Тим не менше я вже визначився з платформами:
- універсальна CoDeSys – від нуля_але_післяАВП до готового програмера з 5-ма МЕКовськими мовами, плюси:
- популярна
- використовується в багатьох платформах
- середовище розробки безкоштовне
- дуже МЕКовський
- на нього «садяться» всі інші курси в т.ч. пром.мережі і ЛМІ
- …   
- як ловлевел для електриків – Zelio, плюси:
- вже є готові матеріали (можна спробувати підключити Кузьміча)
- легка
- середовище безкоштовне
- дві мови FBD+LD
- мені знайомий
- досить популярний
- з брендових думаю ТіА+1200 як комбінована (дистанційно-очна), але тут є багато проблем з інсталяцією продукту, якщо слухач з цим розбирається сам - то чому б і ні, плюси:
- дуже затребуваний
- мені вже доволі добре знайомий
- ШнейдерЕлектрик залишаю для авторизованого центру

Гроші та рівні.
Гроші будуть згодом … може. Але думати треба зараз.
Спочатку розкрутка, перевірка, все безкоштовно. Треба запустити хоча б один курс. Масовості як в Прометеуса тут не буде і не може бути. Контингент значно менший. Але хоча б пару десятків набрати було б непогано. Все можна відточувати паралельно на студентах. Головне зробити курс потрібним, цікавим і популярним.
Мова українська, але потім можна подумати про перехід на інші мови, спочатку російська і за значно більші гроші. З англійською важче, я не зможу (принаймні в найближчому майбутньому) обслуговувати англомовних студентів. Але хто зна…. це мене вже в далеке майбутнє заносить.
Один з варіантів, який крутиться в моїй голові – це багаторівневість. Перший модуль завжди безкоштовний. Він є візитівкою, а також вирівнює усіх нерівних на порозі другого рівня по знанням. Другий та інші рівні мають два пороги: пройшов тест (на вирівнювання) і перевів гроші на рахунок з отриманням логіна-паролю або відкриттям доступу. І т.д.

Оцінки та сертифікація.
Я вже давно казав, що навчання та перевірка знань повинні бути гальванічно розв’язані. Інакше в структурі назріває корупційна компонента. Сертифікація знань штука дуже серйозна і за неї братися не буду. А сертифікат про проходження навчання особливо нічого не дає окрім свідоцтва про те, що ти колись оплатив ен-ну суму і можливо щось навіть вчив.
Тести, самостійні – це тільки елементи самоперевірки.

Платформа.
Все та ж – Moodle. Для початку буду моститися на безкоштовних хостингах. Але треба питання вирішувати з власним хостингом. От тут я вже сам не подужаю. Треба когось шукати.  

Десь так…