Progbase


Гео и язык канала: Украина, Украинский
Категория: Образование


Основи програмування та веб. Навчальний сайт: http://progbase.herokuapp.com. Зв'язатись з автором: @rhadyniak

Связанные каналы

Гео и язык канала
Украина, Украинский
Категория
Образование
Статистика
Фильтр публикаций


HTTP 418 I'm a teapot

Сьогодні у репозиторії npm відкрили цікавий баг: при спробі встановити будь-який пакет npm валився із помилкою npm ERR! code E418 npm ERR! 418 I'm a teapot: commander@~2.3.0

https://github.com/npm/npm/issues/20791

Проблему вже закрили, але якщо вас здивував статус 418 Я чайник, то виявляється, що:

1) цей код був придуманий як першотравневий жарт ще у 1998 році у складі жартівливого протоколу Hyper Text Coffee Pot Control Protocol (HTCPCP):
Код помилки HTTP 418 I'm a teapot повідомляє, що сервер відмовляється готувати каву у зв'язку з тим, що він чайник.
https://developer.mozilla.org/uk/docs/Web/HTTP/Status/418

2) цей жартівливий код статусу навіть присутній у Node.js, Go, Python та ASP.NET

https://en.wikipedia.org/wiki/Hyper_Text_Coffee_Pot_Control_Protocol

3) у 2017 році голова робочої групи IETF HTTPBIS закликав видалити цей код із вищенаведених мов та платформ, а у відповідь на це було створено рух Save 418 Movement (#save418):

http://save418.com/
https://twitter.com/hashtag/save418?lang=en


Сьогодні було опубліковано результати нового опитування розробників StackOverflow Developer Survey 2018:

https://insights.stackoverflow.com/survey/2018/


Теорія ігор - це математичне моделювання стратегічної взаємодії раціональних (і ірраціональних) агентів. Окрім "ігор" у звичному розумінні, вона включає в себе моделювання конфлікту між націями, політичні кампанії, конкуренцію між фірмами та торговельну поведінку на ринках.

Нещодавно натрапив на веб-гру "Эволюция доверия", що у простому інтерактивному режимі пояснює деякі принципи теорії ігор. Захоплива та повчальна 30-ти хвилинна історія із симуляціями взаємодії милих чоловічків не залишить вас байдужими:

https://notdotteam.github.io/trust/

Вступ до теорії ігор: https://habrahabr.ru/post/163681/
Два курси по теорії ігор на Coursera:
https://www.coursera.org/learn/game-theory-1
https://www.coursera.org/learn/game-theory-2


Google представили open-source бібліотеку cpu_features, що дозволяє під час виконання програми визначати підтримку центральним процесором певних інструкцій:

https://opensource.googleblog.com/2018/02/cpu-features-library.html

Бібліотека написана на мові С версії С89 для максимальної переносимості, досить компактна і проста. На даний момент вона підтримує процесори x86, ARM/AArch64 та MIPS, а розробники обіцяють додавати підтримку нових процесорів у майбутньому.

Посилання на репозиторій: https://github.com/google/cpu_features




А декілька днів тому Github представили можливість вказувати у комітах співавторів внесених змін. Це дозволить у одному коміті відмічати всіх учасників парного або колективного програмування (наприклад, за допомогою Teletype for Atom).

https://github.com/blog/2496-commit-together-with-co-authors

Про Teletype for Atom: https://teletype.atom.io/

І бонус: відео (і фотографії) з далекого 2012-го про Bitbucket Spooning (парне програмування 👫👬👭): https://bitbucket.org/spooning/


Вчора Telegram анонсували Telegram Database Library (TDLib) - кросплатформенну повнофункціональну клієнтську бібліотеку, за допомогою якої можна без особливих зусиль створити свою версію Telegram на будь-якій мові програмування, що підтримує виклики C функцій (з коробки є байндінги з Java та C#) та на будь-яку із популярних платформ.

Новина у блозі: https://telegram.org/blog/tdlib
Документація: https://core.telegram.org/tdlib/docs/


Natural Language Processing (NLP, обробка природньої мови) - напрямок, що вивчає проблеми комп'ютерного аналізу та синтезу природньої мови.

Розробки NLP вирішують багато практичних задач. Хороший і об'ємний гайд по NLP, що покриває такі теми як класифікація слів і документів та автоматична генерація резюме текстів:

https://tomassetti.me/guide-natural-language-processing/

В цій статті коротко описані пощирені алгоритми, методи та бібліотеки для вирішення конкретних задач.

Algorithmia - сервіс, що надає програмний інтерфейс (API), що виконує обробку користувацьких даних за допомогою Machine Learning/Artificial Intelligence алгоритмів. Їхній магазин алгоритмів містить чотири розділи: аналіз текстів, машинне навчання, комп'ютерний зір та глибоке навчання.

https://algorithmia.com/algorithms

Кожен розділ містить набір алгоритмів, деякі із інтерактивними демо, наприклад, колоризація ч/б зображень, визначення позитивності/негативності коментаря/рецензії, розпізнавання обличчя, наготи чи тексту на фото та багато іншого. Всі ці алгоритми можна викликати із власних програм через API, використання кожного алгоритму платне, але безплатному акаунту щомісяця нараховують віртуальну валюту, якої має бути достатньо для ознайомлення із цим сервісом.

А в блозі Algorithmia є гайд по NLP із посиланнями на інші гайди, книги, відео та курси - справжній клондайк для початківця:

https://blog.algorithmia.com/introduction-natural-language-processing-nlp/


Відповідно до TIOBE Index (рейтинг мов програмування) станом на січень 2018 року, C стала мовою, що показала найбільшу динаміку росту популярності протягом 2017 року:

https://www.tiobe.com/tiobe-index/

Як обчислюється TIOBE Index:

https://www.tiobe.com/tiobe-index/programming-languages-definition/


Дата і час у будь-якій мові програмування можуть створювати багато проблем, якщо поставитись до вивчення відповідних стандартних структур даних та функцій легковажно.

https://blog.mojotech.com/the-complexity-of-time-data-programming/

Також нерозуміння правил, за якими відбувається вимір дат і часу на нашій планеті призводить до хибних припущень щодо роботи із часом, наприклад, у цьому пості їх зібрано аж 79:

http://infiniteundo.com/post/25509354022/more-falsehoods-programmers-believe-about-time

Чотири поширені помилки, які допускають розробники при роботі із часом на прикладі мови C#:

https://blog.submain.com/4-common-datetime-mistakes-c-avoid/

Unix Time, Clock, and Calendar Programming In C:

http://www.catb.org/esr/time-programming/


Stack Overflow у своєму блозі опублікували порівняння "життєвих циклів" найпопулярніших JavaScript веб-фреймворків на основі активності їх обговорення на ресурсі:

https://stackoverflow.blog/2018/01/11/brutal-lifecycle-javascript-frameworks/

Для візуалізації даних використовувався інструмент Stack Overflow Trends:

https://insights.stackoverflow.com/trends?tags=typescript

Також нещодавно Stack Overflow відкрили форму опитування розробників для збору статиcтики протягом 2018 року:

https://stackoverflow.blog/2018/01/08/take-2018-developer-survey/

Результати опитувань попередніх семи років (також можна завантажити анонімізовані відповіді розробників як набір даних у форматі CSV та самостійно проаналізувати їх):

https://insights.stackoverflow.com/survey/


За останні декілька днів у моїй стрічці з'явилось багато новин про релізи нових версій інструментів та стандартів, якими я цікавлюсь як розробник:

Chrome 63: https://developers.google.com/web/updates/2017/12/nic63
Нові можливості для веб-розробників:
- можливість динамічно імпортувати JS код функцією import()
- Promise метод finally()
- Device Memory JavaScript API, що дозволяє із navigator.deviceMemory отримати кількість Гб RAM клієнта.
- Intl.PluralRules API, правила для множинних форм слів різних мов: https://developers.google.com/web/updates/2017/10/intl-pluralrules

Firefox Quantum (Firefox 57): https://blog.mozilla.org/blog/2017/11/14/introducing-firefox-quantum/
Нові можливості для веб-розробників:
- PerformanceObserver API: https://developer.mozilla.org/en-US/docs/Web/API/PerformanceObserver
- Abort API - дозволяє скасувати динамічне завантаження даних: https://developer.mozilla.org/en-US/docs/Web/API/AbortController
- інше: https://developer.mozilla.org/en-US/Firefox/Releases/57

Також нещодавно було опубліковано графік релізів нової LTS версії Ubuntu 18.04 (Bionic Beaver): http://www.omgubuntu.co.uk/2017/10/ubuntu-18-04-lts-release-schedule

Новини зі світу Qt:
Qt 5.10: https://blog.qt.io/blog/2017/12/07/qt-5-10-released/
QtCreator 4.5.0: https://blog.qt.io/blog/2017/12/07/qt-creator-4-5-0-released/
Qt 3D Studio 1.0: https://blog.qt.io/blog/2017/11/30/qt-3d-studio-1-0-released/

Компілятори С готуються підтримувати стандарт С17/C18. Оновлення мінорне, і лише виправляє баги C11:
https://www.phoronix.com/scan.php?page=news_item&px=LLVM-Clang-C17-Support
https://www.phoronix.com/scan.php?page=news_item&px=GCC-C17-Support-Coming
https://stackoverflow.com/a/47530004

А от у нещодавно опублікованому стандарті C++17 багато нових можливостей C++:
https://www.iso.org/standard/68564.html
http://www.bfilipek.com/2017/01/cpp17features.html
http://en.cppreference.com/w/cpp/compiler_support#C.2B.2B17_features


На замітку юним програмним інженерам та інженеркам: речі, які бісять користувачів ваших програм:

http://www.makeuseof.com/tag/stupid-things-programmers-drive-users-crazy/

Програма - це не тільки робочий (і красивий) код, більшість програм дозволяють користувачам взаємодіяти з ними через UI (User Interface). Хоча програмний код та компоненти живуть у глибоко технічному і формальному світі, але, виходячи за його межі, варто пам'ятати, що ззовні з програмою працюють люди, які можуть навіть не уявляти як все влаштовано всередині. Вони використовують ваш продукт для пришвидшення обрахунків, автоматизації якогось рутинного процесу, спрощення доступу до сервісів або для задоволення інших потреб і ваша програма повинна розкрити їм свої можливості максимально швидко, зручно та зрозуміло.

Звичайно, як і вказали у коментарях до наведеної статті, у проблемах взаємодії із програмами не завжди винні лише програмні розробники. За дизайн і взаємодію користувачів із програмою мають відповідати спеціальні люди у команді/організації. Але, якщо у вас є задача розробки будь-якого UI і ви можете приймати дизайнерські рішення щодо нього, вам варто знати про основні принципи UI та UX (User Experience) дизайну:

7 steps to become a UI/UX designer - Tips & resources to help you get started: https://blog.nicolesaidy.com/7-steps-to-become-a-ui-ux-designer-8beed7639a95

Памятка UX / UI дизайнеру. 19 принципов построения интерфейсов: https://habrahabr.ru/company/SECL_GROUP/blog/182208/

Principles of UI design: https://en.wikipedia.org/wiki/Principles_of_user_interface_design

Conversational UI Principles — Complete Process of Designing a Website Chatbot: https://medium.com/swlh/conversational-ui-principles-complete-process-of-designing-a-website-chatbot-d0c2a5fee376

Desktop App User Interface: https://msdn.microsoft.com/en-us/library/windows/desktop/ff657751%28v=vs.85%29.aspx


Популярні JavaScript бібліотеки для візуалізації даних у вебі:

https://blog.sicara.com/compare-best-javascript-chart-libraries-2017-89fbe8cb112d

У статті наводяться графіки популярності бібліотек у 2017 році, критерії вибору бібліотеки для вашого проекту, активність їх розробки і підтримки на GitHub та порівняння їх можливостей із прикладами коду.

Chart.js: http://www.chartjs.org/
Highcharts: https://www.highcharts.com/demo
Chartist.js: http://gionkunz.github.io/chartist-js/examples.html
D3.js: https://github.com/d3/d3/wiki/Gallery
C3.js: http://c3js.org/

20 best JavaScript charting libraries: https://thenextweb.com/dd/2015/06/12/20-best-javascript-chart-libraries/
"15 лучших JavaScript-библиотек для построения диаграмм и сводных таблиц": https://habrahabr.ru/post/246907/
"Просто о D3.js": https://habrahabr.ru/post/342106/.com.js70-tysyach-zvezdochek-na-g


Якщо ви активно використовуєте Git або інші VCS, то знаєте як інколи хочеться посквернословити у коментарях до комітів.
Twitter-бот Developers Swearing періодично шукає через GitHub API публічні git-коміти з коментарями, у яких розробники використовують нецензурну лексику:

https://twitter.com/gitlost

Місяць тому був опублікований звіт Octoverse 2017 із аналізом показників активності учасників GitHub спільноти.

https://octoverse.github.com/

Наприклад, за останній рік на GitHub було зроблено 1 мільярд лише публічних коммітів. По кількості створених Pull-Request за весь час існування сервісу лідерство з більш ніж двократним відривом тримає JavaScript (2.3 мільйона PR). Python (1 мільйон PR) цього року потіснив Java (986 тисяч PR) на третє місце. Також у звіті відмітили швидкий ріст активності мови TypeScript, яка зараз займає 11-ту позицію.
Список проектів із найбільшою кількістю форків очолюють TensorFlow, Bootstrap та GitIgnore. Найбільшу кількість розробників, що зробили свій внесок у кодову базу мають проекти VSCode, React Native та npm. Близько пів мільйона студентів і 5 тисяч викладачів використовують GitHub для навчання.
👍 став найпопулярнішим смайликом GitHub (7.2 мільйона використань), а Issue із найбільшою кількістю використаних смайликів - це cat-aclysm for Redis 😸:

https://github.com/antirez/redis/issues/3909


Про логування

Файл логу (log file) - файл, у який програма автоматично записує інформацію про події, що виникають в процесі її роботи. Логування програмної інформації використовується для аудиту, профілювання, збору статистики і, найчастіше, для виявлення причини збоїв у роботі програм.

https://dev.to/grhegde09/logging-done-right-makes-your-life-bright

Способи логування можуть відрізнятись в залежності від типу ПЗ, що генерує файли логу. Деякі desktop-додатки генерують такі файли лише при аварійному завершенні програми. Серверні додатки зазвичай логують будь-яку активність.

Логування дозволяє зберігати інформацію про стани та поведінку програмної системи до її аварійного завершення чи виявлення некоректної роботи.
Якщо у користувача з'явилися проблеми із вашою програмою, що встановлена на його комп'ютері, можна отримати від нього файли з логами для дослідження аномалій у роботі програми.
Якщо ваш веб-сервер аварійно завершив свою роботу - ви можете дослідити збережену інформацію про запити, що спричинили проблему і виправити її.

Звичайно, постає питання: що і коли логувати.
В залежності від важливості і типу події розподіляють по рівнях логування. На практиці найчастіше використовують рівні ERROR, WARN, INFO, DEBUG та TRACE:
https://stackoverflow.com/a/8021604

Не варто логувати конфіденційну інформацію користувачів: паролі, номери банківських карт, номери соціального страхування та ін.
Детально про те, що потрібно і непотрібно логувати можна почитати тут: https://www.owasp.org/index.php/Logging_Cheat_Sheet

Недостаток інформації у логах не дозволить виявити причину поломки, надлишок логів ускладнює їх обробку і може призвести до зниження швидкодії програми та до створення програмою лог-файлів, розмір яких може сягати гігабайтів (за словами знайомого працівника відділу підтримки користувачів, був випадок коли файл логів займав 50 Гб!).

Для вирішення проблеми зростання розміру логів можна використовують метод кільцевого буфера (ring buffer):
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.31.6746&rep=rep1&type=pdf

Перед тим як вам знадобиться додавати у програму свої перші логи прочитайте 10 заповідей логування: http://www.masterzen.fr/2013/01/13/the-10-commandments-of-logging/

Першим пунктом у заповідях йде дуже хороша порада: використовуйте стандартні можливості логування середовища або спеціалізовані бібліотеки. Наприклад, для розробки C#/.NET підійде чудовий NuGet пакет NLog, а для автоматичного логування HTTP запитів Express.js пакет morgan:
http://nlog-project.org/
https://github.com/expressjs/morgan

Для обробки згенерованих логів і пошуку інформації у них можна використовувати стандартні текстові редактори та силу регулярних виразів, або більш спеціалізовані засоби, наприклад, lnav:
http://lnav.org/


Mind Map з деталізацією всіх навиків та технологій, які повинен знати Senior Full-Stack JavaScript розробник у 2017 році:

https://coggle.it/diagram/WTRwZ7xh6AAB1qpu/79417a1e2ce30c0fa904e9b4a91118e736695937154db63acc821ac85cc05afc

Почитайте оригінальну статтю, у ній також наведено Mind Map із мінімальним набором технологій для початківців та декілька порад щодо освоєння нових навиків:

http://nodewebapps.com/2017/06/06/the-javascript-engineer-skill-tree/

Хто такий Full-Stack розробник і як ним стати у 2017 році, деталізований опис основних технологій і де можна про них почитати:

https://medium.com/coderbyte/a-guide-to-becoming-a-full-stack-developer-in-2017-5c3c08a1600c

Mind Map - ієрархічна діаграма для візуального впорядкування інформації, використовується як допоміжний засіб при навчанні, деталізації ідей, прийнятті рішень:

http://www.mindmapping.com/


Езотеричні мови програмування - комп'ютерні мови програмування, розроблені для експериментів з дивакуватими ідеями, спеціально для ускладнення програмування або як жарт і не призначені для практичного використання.

Одна із найстаріших езотеричних мов, INTERCAL (1972), створювалась з ціллю бути зовсім не схожою на всі існуючі тоді мови програмування. Містить непрактичні ускладнення синтаксису і кумедні команди, наприклад FORGET, PLEASE DO NOT, PLEASE ABSTAY OF CALCULATING та ін:
https://www.esolangs.org/wiki/INTERCAL

Brainfuck (1993) - найпопулярніша езотерична мова. Brainfuck працює на масиві із комірками пам'яті та має вказівник на поточну комірку. Синтаксис складається всього з 8 символів, що позначають команди для руху вказівника, зміни значення комірки, на яку вказує вказівник, вводу\виводу символів комірки, та умовних переходів по коду. Є Тюринг-повною, отже, на ній можна реалізувати будь-який алгоритм:
https://www.esolangs.org/wiki/Brainfuck

Whitespace (2003) - синтаксис складається лише з пробілів, символів табуляції та переходів на нові рядки:
https://en.wikipedia.org/wiki/Whitespace_(programming_language)

Malbolge (1998) - спроектована як найскладніша мова програмування, справжнє пекло для програміста:
https://en.wikipedia.org/wiki/Malbolge

А в мові TwoDucks (2023) можна подорожувати в часі і змінювати значення з минулого. У прикладах є код програми, яка не працює, оскільки в іншому випадку вона призвела б до часового парадоксу:
https://www.esolangs.org/wiki/TwoDucks

Синтаксис мови Chicken складається лише зі слова chicken:
https://esolangs.org/wiki/Chicken

І як тут не згадати про легендарну мову PETOOH:
https://github.com/Ky6uk/PETOOH

Серед езотеричних мов програмування існують і такі, що замість символів тексту використовують у якості вихідного коду зображення ( Piet, Brainloller, Mycelium ):
http://www.dangermouse.net/esoteric/piet.html
https://esolangs.org/wiki/Mycelium
https://esolangs.org/wiki/Brainloller
або музику ( Fugue, Velato ):
https://esolangs.org/wiki/Fugue
https://esolangs.org/wiki/Velato

Код програми "Hello world!" на різних езотеричних мовах програмування:
https://esolangs.org/wiki/Hello_world_program_in_esoteric_languages


На днях у спільноті Node.js знову відбувся розкол: група учасників розробки створили незалежний форк Ayo.js (звучить як англійське "IO"). Причина політична: один із членів TSC (керівний технічний комітет), на думку цієї групи, вів себе неналежне по мірках Code of Conduct (CoC), а коли відбулося голосування про його виключення із комітету, більшість членів комітету виступила проти цього:

https://sourcecontribute.com/2017/08/22/node-js-has-forked-into-ayo/

У голосуванні брали участь 10 із 13 членів TSC. 4 учасника, що проголосували за виключення, після цього вийшли зі складу комітету, а вчора виконавчий директор Node Foundation рекомендував TSC переглянути своє рішення:

https://github.com/nodejs/board/issues/67

Code of Conduct - це така збірка правил, що визначає соціальні норми, релігійні правила та практики поведінки індивідуумів, груп та організацій. Ці правила призначені для захисту учасників OpenSource спільноти від образ, домагань, дискримінації, використання нецензурних слів, тощо. Онлайн спільнота сама визначає чи потрібен їй CoC, і хоча його прийняття може покращити атмосферу та продуктивність цієї групи людей, але в його адресу також існує багато критики:

http://smallbusiness.chron.com/examples-disadvantages-employees-code-conduct-14061.html

Про комітет TSC: https://nodejs.org/en/foundation/tsc/
Node CoC: https://github.com/nodejs/TSC/blob/master/CODE_OF_CONDUCT.md

Незалежний форк (або "hard fork"), як інструмент вирішення суперечки, вже використовувався у спільноті Node.js у 2014 році. Тоді форк io.js було створено із технічних причин, серед головних те, що Node.js давно не оновлював двигун V8 до новіших версій, у яких JavaScript вже частково використовував можливості ECMAScript 6. В результаті io.js став швидко розвивати свою платформу, а в 2015 році технічним комітетом io.js було вирішено об'єднатись із Node.js та створити організацію Node Foundation. Таким чином, цей незалежний форк, який очолювали незадоволені учасники спільноти, дав поштовх до розвитку платформи Node.js.

Про розкол Node.js: https://habrahabr.ru/post/245013/
Про об'єднання Node.js та io.js: https://habrahabr.ru/post/258047/

Незалежні форки створюють і у інших спільнотах. Наприклад, цьогорічний форк криптовалюти Bitcoin відбувся через розбіжності щодо способу її подальшого розвитку:

https://www.bloomberg.com/view/articles/2017-08-02/bitcoin-s-split-is-good-for-progress


#відпідписників

@ZulusK поділився посиланням на статтю сайту DOU, у якій Senior розробники діляться з початківцями порадами щодо розвитку навиків Front-end/JavaScript. Почитайте, особливо якщо ви починаєте вивчати фронтенд веб-технології, там багато корисної інформації:

https://dou.ua/lenta/articles/senior-frontend-tips/

Серед цікавих посилань у статті:
- щотижневий дайджест зі світу фронтенд на Habrahabr: https://habrahabr.ru/users/alexzfort/topics/
- онлайн-посібник web-технологій Mozilla Developer Network (MDN): https://developer.mozilla.org
- онлайн підручник по JavaScript: http://learn.javascript.ru/
- збірка книг You Don't Know JS на GitHub: https://github.com/getify/You-Dont-Know-JS

Якщо ви також бажаєте поділитись у цьому каналі цікавими та корисними посиланнями, пишіть мені @rulline

Показано 20 последних публикаций.

173

подписчиков
Статистика канала