Ну что, дебаггеры, продолжаю делиться статьями.
Свежесть статей: сентябрь-октябрь 2017, но актуальность высокая.
АННОТАЦИЯ:
Статья 3: «управление памятью, четыре вида утечек памяти и борьба с ними»
—> Для начала в статье обращается внимание на то, что в JS управление памятью происходит автоматически, то есть она сама выделяется, когда объекты/строки/прочее создаются, и когда созданное перестает использоваться, то память освобождается в ходе процесса, называемого сборщиком мусора), но несмотря на это, большой ошибкой будет полагать, что разработчик совсем не должен заботиться об управлении памятью.
—> Коротко о жизненном цикле памяти (выделение->использование->освобождение) и о том, что такое «память» в принципе (концептуально - это огромный массив битов, которые можно считывать и записывать).
—> Чуть-чуть о разнице между динамическим и статическим выделением памяти
—> Более подробно о том, как происходит освобождение памяти: основной фокус на работе «сборщика мусора».
—> Раз пошел разговор о памяти, не забыли уделить внимание «утечке памяти»
—> Автор затронул «Замыкания» (это внутренняя функция, у которой есть доступ к переменным, объявленным во внешней по отношению к ней функции) в контексте работы сборщика мусора и утечки памяти.
Статья 4: «цикл событий, асинхронность и пять способов улучшения кода с помощью async/await»
—> Начало данной статьи является продолжением размышлений, которые были в первой статье: какие ограничения у однопоточной модели выполнения кода (напомним, что JS однопоточен). Также говорится, почему нужна асинхронность.
—> Приводится очень хорошая для понимания схема работы движка, исполняющего JS код, и браузера. Особое внимание уделяется «циклу событий»(Event Loop). Прочитав этот кусок статьи, вы точно поймете, как там исполняется написанный вами код, хотя бы в общих чертах.
—> Коротко о том, как работает setTimeout(…)
—> Раз речь идет об асинхронности, разумеется не забыли про Коллбэки и про то, за что их не любят (коллбэковый ад)
—> Вторая часть статьи полностью посвящена промисам: почему в них появилась нужда, как с ними работать (с примерами), и про новшество ES8: async/await, которое позволяет писать синхронный код, работающий асинхронно.
—> В конце дается 5 советов по написанию надежного асинхронного кода, который легко поддерживать.
Свежесть статей: сентябрь-октябрь 2017, но актуальность высокая.
АННОТАЦИЯ:
Статья 3: «управление памятью, четыре вида утечек памяти и борьба с ними»
—> Для начала в статье обращается внимание на то, что в JS управление памятью происходит автоматически, то есть она сама выделяется, когда объекты/строки/прочее создаются, и когда созданное перестает использоваться, то память освобождается в ходе процесса, называемого сборщиком мусора), но несмотря на это, большой ошибкой будет полагать, что разработчик совсем не должен заботиться об управлении памятью.
—> Коротко о жизненном цикле памяти (выделение->использование->освобождение) и о том, что такое «память» в принципе (концептуально - это огромный массив битов, которые можно считывать и записывать).
—> Чуть-чуть о разнице между динамическим и статическим выделением памяти
—> Более подробно о том, как происходит освобождение памяти: основной фокус на работе «сборщика мусора».
—> Раз пошел разговор о памяти, не забыли уделить внимание «утечке памяти»
—> Автор затронул «Замыкания» (это внутренняя функция, у которой есть доступ к переменным, объявленным во внешней по отношению к ней функции) в контексте работы сборщика мусора и утечки памяти.
Статья 4: «цикл событий, асинхронность и пять способов улучшения кода с помощью async/await»
—> Начало данной статьи является продолжением размышлений, которые были в первой статье: какие ограничения у однопоточной модели выполнения кода (напомним, что JS однопоточен). Также говорится, почему нужна асинхронность.
—> Приводится очень хорошая для понимания схема работы движка, исполняющего JS код, и браузера. Особое внимание уделяется «циклу событий»(Event Loop). Прочитав этот кусок статьи, вы точно поймете, как там исполняется написанный вами код, хотя бы в общих чертах.
—> Коротко о том, как работает setTimeout(…)
—> Раз речь идет об асинхронности, разумеется не забыли про Коллбэки и про то, за что их не любят (коллбэковый ад)
—> Вторая часть статьи полностью посвящена промисам: почему в них появилась нужда, как с ними работать (с примерами), и про новшество ES8: async/await, которое позволяет писать синхронный код, работающий асинхронно.
—> В конце дается 5 советов по написанию надежного асинхронного кода, который легко поддерживать.
Кодинг в радость. Так как выходной, то предлагаю отвлечься от фундаментальных вещей и посмотреть на статью, предлагающую 13 приемов и трюков эффективной работы с массивами в JS. Хотя статья написана на довольно простом английском, я позволил себе перевести ее и дать более подробное объяснение. Более того, все примеры и пояснения выложены в codepen, так что вы можете «поковырять» код сами
Статья: «13 полезных советов и приемов для работы с массивами в JavaScript, которые вы должны знать»
Свежесть статьи: октябрь 2019
АННОТАЦИЯ:
—> Удаление повторяющихся элементов
—> Замена элементов в массиве
—> Функционал map() без map
—> Очистка всего массива
—> Конвертация массива в объект
—> Создание заполненного данными массива
—> Слияние 2х и более массивов
—> Поиск пересечений в двух массивах
—> Удаление «ложных» значений из массива
—> Получение рандомного элемента массива
—> Разворот массив
—> Поиск последнего вхождения элемента в массив
—> Сумма всех элементов массива
Оригинал статьи
Стоит ли продолжать постить подобный материал?
Статья: «13 полезных советов и приемов для работы с массивами в JavaScript, которые вы должны знать»
Свежесть статьи: октябрь 2019
АННОТАЦИЯ:
—> Удаление повторяющихся элементов
—> Замена элементов в массиве
—> Функционал map() без map
—> Очистка всего массива
—> Конвертация массива в объект
—> Создание заполненного данными массива
—> Слияние 2х и более массивов
—> Поиск пересечений в двух массивах
—> Удаление «ложных» значений из массива
—> Получение рандомного элемента массива
—> Разворот массив
—> Поиск последнего вхождения элемента в массив
—> Сумма всех элементов массива
Оригинал статьи
Стоит ли продолжать постить подобный материал?
R E F L E C T I O N S
Что я знаю о жизни? Все и ничего.
Все – это о понимании фундаментальных вещей, вроде осознания одновременной конечности и бесконечности жизни.
Ничего - это об ограниченности моего личного опыта.
Концентрируясь и зацикливаясь на конкретных ситуациях и людях, я ограничиваю своё «все»-знание. Я отделяюсь от потока и накапливаю своё «ничего».
Думая о вечном, я отделяюсь от эго и соединяюсь со всем остальным, всем, что вне меня.
Жизнь должна протекать в балансе и чередовании этих двух составляющих. Ибо дихотомия – неизменный и постоянный признак всего сущего: «life implies death, self implies other..»
Пространство между этими полярно-финальными точками – спектр жизни, её процесс, она сама.
Что я знаю о жизни? Все и ничего.
Все – это о понимании фундаментальных вещей, вроде осознания одновременной конечности и бесконечности жизни.
Ничего - это об ограниченности моего личного опыта.
Концентрируясь и зацикливаясь на конкретных ситуациях и людях, я ограничиваю своё «все»-знание. Я отделяюсь от потока и накапливаю своё «ничего».
Думая о вечном, я отделяюсь от эго и соединяюсь со всем остальным, всем, что вне меня.
Жизнь должна протекать в балансе и чередовании этих двух составляющих. Ибо дихотомия – неизменный и постоянный признак всего сущего: «life implies death, self implies other..»
Пространство между этими полярно-финальными точками – спектр жизни, её процесс, она сама.
Может быть кому-то будет интересно, как я попробовал устроиться в одну IT компанию.
В общем решил попробовать свои силы и начал откликаться на вакансии. На глаза попалась одна - Junior JS разработчик. Как раз я сейчас изучаю JS и веб в целом, учусь на этом направлении, почему бы не попробовать свои силы?
Тем более когда у них буквально написано, если ты увлекаешься прогой и хочешь быть в тренде, то дуй к нам. Требований нет, лишь пожелания (опыт работы с JS, HTML/CSS, NodeJS, ES6, ООП и знание HTTP протокола). Также указали, что большим плюсом будет наличие опыта работы с React.js, WebRTC, web-sockets.
Не стал тянуть питона за хвост, откликнулся и в этот же день мне перезвонили. Можно сказать, что сходу начали небольшое техническое собеседовение. Вопросов было около 10 штук, если по памяти:
– Как объявить переменную в JS (ответил)
– Что такое DNS (ответил)
– Что такое HTTP (ответил)
– Что такое Синглтон и MVC (ответил)
– Что такое веб-сокеты (не ответил)
– На каком порту работают серверы (ответил)
– Что такое NodeJS (ответил)
– Что такое ReactJS (ответил)
– Какой командой выполнить промисы параллельно (ответил)
– В теге <head> располагается скрипт, который обращается к div элементу в <body>. Вылезает ошибка, потому что div не успевает прогрузиться. Как исправить это (не ответил).
В общем и целом мне сказали, что на львиную долю вопросов я ответил (чему я и сам был рад), осталось выполнить тех.задание и отдать на проверку. Если оно им понравится, то меня пригласят на очный собес, где матерый программист будет спрашивать меня за код.
Вроде все справедливо… Судя по вопросам задание не должно быть сложным - именно так я думал, пока не открыл письмо на почте. Оказалось, что меня попросили сделать чат. И не простой, а JS-ной. Главные требования были примерно такими:
– User вводит свой ник
– Выбирает какую-нибудь комнату (да, их должно быть несколько)
– Должна быть возможность инвайтить в чат-комнату по ссылке
– Разумеется, сообщения должны отправляться и приниматься всеми участниками комнаты (и должно быть видно кто и когда отправил)
– User должен видеть, кто в данный момент сидит в чат комнате.
– И самое сладкое: должна быть видео связь (опционально, но будет большим плюсом)
Также ввели ограничения: писать преимущественно на JS с хорошими комментариями и используя ООП практики. Сервер на Node, UI на React, для коммутации использовать socket.io, а для видео связи WebRTC.
Прочитав это, я, разумеется, присел, ведь срок всего неделя. И хотя было ощущение того, что мне подобное не по зубам, я не сдался и решил попробовать хоть что-то сделать. Неделю свободными ночами я сидел и изучал каждую перечисленную технологию по отдельности, а позже пытался подружить их. Вы не поверите, но вот по этой теме реально мало годного материала. Большая часть статей однотипны и скупы. Авторы просто читают документацию (которая не всегда хорошая), перефразируют hello worldы и довольны. А твое понимание после прочтения к тебе так и не приходит.
В итоге я сумел таки сделать простой чат, где человек может войти под своим ником и переписываться с остальными в единственной комнате. Разумеется, этого было недостаточно и мне отказали. Но что я понял для себя?
Во-первых, так или иначе компетенцию я поднял. Я пощупал React, почувствовал его классовые и функциональные компоненты, а также работу с их состояними. Во-вторых, мне показалось, что я разобрался с тем, что такое веб-сокеты, побаловался с библиотекой socket.io и уловил суть. Ну и в конце концов я смог подружить сервер и клиента. Да, получилось довольно просто, но получилось. Чтобы прийти к этому состоянию я пересмотрел много чужих репозиториев, изучил много чужого кода, вынимая оттуда необходимое мне. А ведь где-то я слышал, что это полезный и необходимый навык.
В общем решил попробовать свои силы и начал откликаться на вакансии. На глаза попалась одна - Junior JS разработчик. Как раз я сейчас изучаю JS и веб в целом, учусь на этом направлении, почему бы не попробовать свои силы?
Тем более когда у них буквально написано, если ты увлекаешься прогой и хочешь быть в тренде, то дуй к нам. Требований нет, лишь пожелания (опыт работы с JS, HTML/CSS, NodeJS, ES6, ООП и знание HTTP протокола). Также указали, что большим плюсом будет наличие опыта работы с React.js, WebRTC, web-sockets.
Не стал тянуть питона за хвост, откликнулся и в этот же день мне перезвонили. Можно сказать, что сходу начали небольшое техническое собеседовение. Вопросов было около 10 штук, если по памяти:
– Как объявить переменную в JS (ответил)
– Что такое DNS (ответил)
– Что такое HTTP (ответил)
– Что такое Синглтон и MVC (ответил)
– Что такое веб-сокеты (не ответил)
– На каком порту работают серверы (ответил)
– Что такое NodeJS (ответил)
– Что такое ReactJS (ответил)
– Какой командой выполнить промисы параллельно (ответил)
– В теге <head> располагается скрипт, который обращается к div элементу в <body>. Вылезает ошибка, потому что div не успевает прогрузиться. Как исправить это (не ответил).
В общем и целом мне сказали, что на львиную долю вопросов я ответил (чему я и сам был рад), осталось выполнить тех.задание и отдать на проверку. Если оно им понравится, то меня пригласят на очный собес, где матерый программист будет спрашивать меня за код.
Вроде все справедливо… Судя по вопросам задание не должно быть сложным - именно так я думал, пока не открыл письмо на почте. Оказалось, что меня попросили сделать чат. И не простой, а JS-ной. Главные требования были примерно такими:
– User вводит свой ник
– Выбирает какую-нибудь комнату (да, их должно быть несколько)
– Должна быть возможность инвайтить в чат-комнату по ссылке
– Разумеется, сообщения должны отправляться и приниматься всеми участниками комнаты (и должно быть видно кто и когда отправил)
– User должен видеть, кто в данный момент сидит в чат комнате.
– И самое сладкое: должна быть видео связь (опционально, но будет большим плюсом)
Также ввели ограничения: писать преимущественно на JS с хорошими комментариями и используя ООП практики. Сервер на Node, UI на React, для коммутации использовать socket.io, а для видео связи WebRTC.
Прочитав это, я, разумеется, присел, ведь срок всего неделя. И хотя было ощущение того, что мне подобное не по зубам, я не сдался и решил попробовать хоть что-то сделать. Неделю свободными ночами я сидел и изучал каждую перечисленную технологию по отдельности, а позже пытался подружить их. Вы не поверите, но вот по этой теме реально мало годного материала. Большая часть статей однотипны и скупы. Авторы просто читают документацию (которая не всегда хорошая), перефразируют hello worldы и довольны. А твое понимание после прочтения к тебе так и не приходит.
В итоге я сумел таки сделать простой чат, где человек может войти под своим ником и переписываться с остальными в единственной комнате. Разумеется, этого было недостаточно и мне отказали. Но что я понял для себя?
Во-первых, так или иначе компетенцию я поднял. Я пощупал React, почувствовал его классовые и функциональные компоненты, а также работу с их состояними. Во-вторых, мне показалось, что я разобрался с тем, что такое веб-сокеты, побаловался с библиотекой socket.io и уловил суть. Ну и в конце концов я смог подружить сервер и клиента. Да, получилось довольно просто, но получилось. Чтобы прийти к этому состоянию я пересмотрел много чужих репозиториев, изучил много чужого кода, вынимая оттуда необходимое мне. А ведь где-то я слышал, что это полезный и необходимый навык.
В общем даже несмотря на отказ я рад, что не опустил сразу руки. Тем более что мне не просто отказали, а проверили мой код и указали на ошибки. Лишь одно тревожит: на позицию джуна за 40 (ну может быть 50к чеканных монет) они ищут явно мидла, который должен получать за такую фулстэк разработку куда больше, или я не прав?
Друзья! Несмотря на столь долгое отсутствие я ни в коем случае не сидел без дела. В рамках магистратуры я решил уйти в реактивное программирование. Собственно, с «небольшим» опозданием я закончил первую часть научно-исследовательской работы по теме «Эволюция реактивного программирования».
Работа получилась небольшая, но я старался делать ее более-менее на совесть. Прочтя ее, вы получите представление непосредственно о реактивном программировании. Конкретно я расписал предпосылки появления реактивности, рассмотрел реактивный манифест и его эволюцию, а также слегка коснулся самой имплементации реактивности в программировании.
Надеюсь, читающим материал покажется интересным.
Работа получилась небольшая, но я старался делать ее более-менее на совесть. Прочтя ее, вы получите представление непосредственно о реактивном программировании. Конкретно я расписал предпосылки появления реактивности, рассмотрел реактивный манифест и его эволюцию, а также слегка коснулся самой имплементации реактивности в программировании.
Надеюсь, читающим материал покажется интересным.
Помню, с месяц назад немного пообщался с одним знакомым, который работал кальянщиком. Как не сложно догадаться, из-за вируса этой работы он лишился, а ничего другого он по существу не умеет.
В процессе разговора им делался акцент на том, что сейчас вроде и времени появилось в разы больше, но и чем досуг занять не ясно. Я сказал, что можно смело вложить время в прогу. И речь не о курсах «вротэнд разработчик за 2 недели до мидла». Для начала стоит хотя бы познакомиться с общей теорией, посмотреть синтаксис какого-нибудь языка и ответить себе на вопрос «было ли мне интересно это изучать и есть ли желание продолжать»?
Знаете, что я услышал в ответ? Примерно следующее: «прога - это хорошо, но я слышал, что для проги нужно топовое железо, иначе все будет виснуть. Я не могу себе это позволить». Я конечно посмеялся с этого и спросил «неужели курьеры для своей работы берут топовые авто, чтобы справляться с ней»?. На этом мы и закончили разговор.
Понимаете, человек был занят кальянами и не имел времени переучиться и поменять сферу. Теперь у него появилось время, но нет топового мака для работы. Появится мак, не будет чего-то еще – это цикл собственной слабости и пиздежа.
Знаете, это как если дать бедняку сразу много денег, он просто не будет знать, как ими распоряжаться. Они у него столь же быстро исчезнут как и появились. Также и со свободой. Сначала идет нытье про то, что нет свободного времени, чтобы заняться чем-то стоящим, а потом человек думает, как от этой свободы избавиться. Она пугает людей.
В процессе разговора им делался акцент на том, что сейчас вроде и времени появилось в разы больше, но и чем досуг занять не ясно. Я сказал, что можно смело вложить время в прогу. И речь не о курсах «вротэнд разработчик за 2 недели до мидла». Для начала стоит хотя бы познакомиться с общей теорией, посмотреть синтаксис какого-нибудь языка и ответить себе на вопрос «было ли мне интересно это изучать и есть ли желание продолжать»?
Знаете, что я услышал в ответ? Примерно следующее: «прога - это хорошо, но я слышал, что для проги нужно топовое железо, иначе все будет виснуть. Я не могу себе это позволить». Я конечно посмеялся с этого и спросил «неужели курьеры для своей работы берут топовые авто, чтобы справляться с ней»?. На этом мы и закончили разговор.
Понимаете, человек был занят кальянами и не имел времени переучиться и поменять сферу. Теперь у него появилось время, но нет топового мака для работы. Появится мак, не будет чего-то еще – это цикл собственной слабости и пиздежа.
Знаете, это как если дать бедняку сразу много денег, он просто не будет знать, как ими распоряжаться. Они у него столь же быстро исчезнут как и появились. Также и со свободой. Сначала идет нытье про то, что нет свободного времени, чтобы заняться чем-то стоящим, а потом человек думает, как от этой свободы избавиться. Она пугает людей.
Вчера один из подписчиков скинул статью про то, как чувак описал опыт прохождения 4-летней программы курса Computer Science в MIT за 12 месяцев (даже с примерами своих конспектов).
Статья довольно лайтовая, читается быстро. Если вы периодически задаетесь вопросами о том, как учиться качественно и быстро, то можете глянуть. И речь не обязательно о программировании.
Основной посыл в том, что усваивая знание, необходимо стараться объяснить его кому-то другому (можно и воображаемому собеседнику). Блоги вроде моего, кстати, отлично помогают в этом. Ты в чем-то копаешься, а потом закрепляешь материал, пытаясь объяснить его людям. Здесь эффект большой аудитории срабатывает даже жестче, мотивируя тебя окунуться в тему по уши.
Статья довольно лайтовая, читается быстро. Если вы периодически задаетесь вопросами о том, как учиться качественно и быстро, то можете глянуть. И речь не обязательно о программировании.
Основной посыл в том, что усваивая знание, необходимо стараться объяснить его кому-то другому (можно и воображаемому собеседнику). Блоги вроде моего, кстати, отлично помогают в этом. Ты в чем-то копаешься, а потом закрепляешь материал, пытаясь объяснить его людям. Здесь эффект большой аудитории срабатывает даже жестче, мотивируя тебя окунуться в тему по уши.
Помните я как-то делал телеграм бота на питоне? Так вот я решил сейчас вспомнить былые времена.
Во-первых, периодически мне писали с вопросами подписчики и просто люди, которые натыкались на мою недописанную статью. Значит, тема интересная. Да и информации с гулькин нос.
Во-вторых, на этот раз появилась реальная и не очень сложная задача. Если коротко, то хочу написать бота, который позволил бы мне прикинуть, сколько стоит реклама в телеграме в зависимости от тематики. Такое уже, разумеется, есть, на том же телеметре, но это платно.
Думаю, будет не лишним сделать это самому, подняв свой скилл, раз уж я решил оживить канал. Да и с вами хочется чем-то полезным поделиться.
Бот буду на JS писать. На данным момент уже второй день копаюсь в библиотеке TelegrafJS. Док-я у нее не очень на мой взгляд, приходится копаться в исходниках и разбираться самому.
Во-первых, периодически мне писали с вопросами подписчики и просто люди, которые натыкались на мою недописанную статью. Значит, тема интересная. Да и информации с гулькин нос.
Во-вторых, на этот раз появилась реальная и не очень сложная задача. Если коротко, то хочу написать бота, который позволил бы мне прикинуть, сколько стоит реклама в телеграме в зависимости от тематики. Такое уже, разумеется, есть, на том же телеметре, но это платно.
Думаю, будет не лишним сделать это самому, подняв свой скилл, раз уж я решил оживить канал. Да и с вами хочется чем-то полезным поделиться.
Бот буду на JS писать. На данным момент уже второй день копаюсь в библиотеке TelegrafJS. Док-я у нее не очень на мой взгляд, приходится копаться в исходниках и разбираться самому.
Пока я разбираюсь с тем, как писать тг ботов, может имеет смысл вам накидать полезной информации, что я нашел, и описать некоторые крутые фичи самой библиотеки? Думаю, вы будете не против.
Вообще для JS, а конкретно Node.js, существует 7 библиотек. Если вас интересует библиотека для другого языка типа python или php, то можете заглянуть сюда. Тут приведен список с коротким описанием каждой отдельной библиотеки.
Вернемся к JS. Не буду расписывать про каждую из них, затрону лишь первые 4 по популярности библиотеки:
––> Node-Telegram-bot. На гитхабе 4.3к звезд. Сам лично ей не пользовался, лишь мельком глянул, но вразумительной документации не нашел, как и толковых примеров, поэтому обошел ее стороной.
––> Telegraf. На гите 3.3к звезд. Позиционируется как полностью поддерживающая Bot API библиотека (что очень круто). Документация не самая дружелюбная (по крайней мере для меня как нуба), но хотя бы есть хоть какие-то примеры использования.
––> telebot. На гите 926 звезд. Есть примеры реализации различных фич, и подобие документации.
––> botgram. На гите 178 звезд. При столь малой популярности на удивление имеется документация, туториалы и примеры.
Пораскинув мыслями, я выбрал TelegrafJS. Со всей документацией можно ознакомиться на сайте.
Мне понравилось, что она поддерживает самый последний Telegram Bot API (версия 4.8, от 24.04.20). Также следует отметить, что имеется приличное количество примеров, часть которых можно найти на гите, часть на сайте.
Есть куча фич, которые очень сильно помогают при разработке. К примеру:
• Имеются middlewares, которые позволяют модифицировать принятые через телеграм данные прежде, чем они попадут в контроллер.
• Есть сессии (Sessions), имеющие возможность хранить информацию без привязки к контроллеру.
• Есть Вебхуки. Их использование позволяет не трезвонить постоянно серверам телеграма с целью узнать, не обновились ли какие-нибудь данные. Наоборот, они сами вам сообщат, когда произойдут изменения. Конечно, другие либы тоже такое умеют, но все же приятно.
• Можно использовать html разметку для текста.
• И на последок: есть возможность создавать свои «сценарии» и вызывать их в зависимости от определенных условий. Также можно создавать цепочки событий, которые 100% выполнятся в нужном вам порядке.
В общем, библиотека имеет много полезного для разработки, но лично для меня порог вхождения высоковат. Понятно, что написать простого бота, который бы вас приветствовал, минутное дело. Но чтобы сделать что-то по-настоящему стоящее, нужно понять, как работает каждая функция по отдельности и в связке с другими, на что сейчас я и трачу время. Причем копаться приходится в исходниках. Может это и не плохо, но непривычно.
В скором времени поделюсь наработками с вами. Да пребудет с вами JavaScript.
Вообще для JS, а конкретно Node.js, существует 7 библиотек. Если вас интересует библиотека для другого языка типа python или php, то можете заглянуть сюда. Тут приведен список с коротким описанием каждой отдельной библиотеки.
Вернемся к JS. Не буду расписывать про каждую из них, затрону лишь первые 4 по популярности библиотеки:
––> Node-Telegram-bot. На гитхабе 4.3к звезд. Сам лично ей не пользовался, лишь мельком глянул, но вразумительной документации не нашел, как и толковых примеров, поэтому обошел ее стороной.
––> Telegraf. На гите 3.3к звезд. Позиционируется как полностью поддерживающая Bot API библиотека (что очень круто). Документация не самая дружелюбная (по крайней мере для меня как нуба), но хотя бы есть хоть какие-то примеры использования.
––> telebot. На гите 926 звезд. Есть примеры реализации различных фич, и подобие документации.
––> botgram. На гите 178 звезд. При столь малой популярности на удивление имеется документация, туториалы и примеры.
Пораскинув мыслями, я выбрал TelegrafJS. Со всей документацией можно ознакомиться на сайте.
Мне понравилось, что она поддерживает самый последний Telegram Bot API (версия 4.8, от 24.04.20). Также следует отметить, что имеется приличное количество примеров, часть которых можно найти на гите, часть на сайте.
Есть куча фич, которые очень сильно помогают при разработке. К примеру:
• Имеются middlewares, которые позволяют модифицировать принятые через телеграм данные прежде, чем они попадут в контроллер.
• Есть сессии (Sessions), имеющие возможность хранить информацию без привязки к контроллеру.
• Есть Вебхуки. Их использование позволяет не трезвонить постоянно серверам телеграма с целью узнать, не обновились ли какие-нибудь данные. Наоборот, они сами вам сообщат, когда произойдут изменения. Конечно, другие либы тоже такое умеют, но все же приятно.
• Можно использовать html разметку для текста.
• И на последок: есть возможность создавать свои «сценарии» и вызывать их в зависимости от определенных условий. Также можно создавать цепочки событий, которые 100% выполнятся в нужном вам порядке.
В общем, библиотека имеет много полезного для разработки, но лично для меня порог вхождения высоковат. Понятно, что написать простого бота, который бы вас приветствовал, минутное дело. Но чтобы сделать что-то по-настоящему стоящее, нужно понять, как работает каждая функция по отдельности и в связке с другими, на что сейчас я и трачу время. Причем копаться приходится в исходниках. Может это и не плохо, но непривычно.
В скором времени поделюсь наработками с вами. Да пребудет с вами JavaScript.
Пока рылся в интернете в поисках годных туториалов и исходников по ботам, нашел книгу Building Telegram Bots. Сразу скажу, что лично мне она не зашла, но вдруг кому-то она покажется полезной.
Книга свежая (2019 года), на английском языке. Ее суть в том, что она содержит простенькие и короткие примеры создания ботов на 12 языках (Ruby, Nim, Crystal, Rust, D, C++, Clojure, Java, Go, Elixir, Node.js и Python). Несмотря на такое обилие, каждый язык рассматривается бегло без особых пояснений.
Она может подойти на самом старте изучения, когда ты еще даже о существовании библиотек не вкуриваешь. Однако если говорить про углубленную разработку, то я бы не стал тратить время. Хотя претензия даже не в этом. Сказать в чем? Она стоит в среднем 2000 руб, но не понятно, за что? За такие деньги можно купить реально крутые технические IT книги.
Не может пдф’ка, в которой с открытых репозиториев вставлены примеры, стоить как серьезное полноценное издание.
В любом случае всем желающим читателям-дебагерам она достанется бесплатно. К ней также прилагается репозиторий с примерами.
С уважением, @arutemu_su
Книга свежая (2019 года), на английском языке. Ее суть в том, что она содержит простенькие и короткие примеры создания ботов на 12 языках (Ruby, Nim, Crystal, Rust, D, C++, Clojure, Java, Go, Elixir, Node.js и Python). Несмотря на такое обилие, каждый язык рассматривается бегло без особых пояснений.
Она может подойти на самом старте изучения, когда ты еще даже о существовании библиотек не вкуриваешь. Однако если говорить про углубленную разработку, то я бы не стал тратить время. Хотя претензия даже не в этом. Сказать в чем? Она стоит в среднем 2000 руб, но не понятно, за что? За такие деньги можно купить реально крутые технические IT книги.
Не может пдф’ка, в которой с открытых репозиториев вставлены примеры, стоить как серьезное полноценное издание.
В любом случае всем желающим читателям-дебагерам она достанется бесплатно. К ней также прилагается репозиторий с примерами.
С уважением, @arutemu_su
Друзья, хотите увидеть бота, сделанного за пол дня сухого времени? Можете оценить плод моих творений.
Сначала опишу, что к чему. В общем изначально хотел сделать бота для анализа рекламных характеристик (для закупов на канал). Оказалось, что задача почти невыполнимая, ибо парсить инфу мне надо было с закрытых каналов, что невозможно, если бот не в админке. Я как-нибудь подробней про подводные камни расскажу, суть в том, что эту идею отложил.
Но руки то чешутся. Собственно, один мой друг владеет агентством по продвижению, сейчас они делают себе сайт. Ну я и решил сделать им бота для приема заявок прямо с телеграма. Думаю, что им будет полезно, и я не абстрактными вещами займусь.
По сути получился интерфейс их сайта, только в тг. В целом задача бота – познакомить потенциального клиента с услугами агентства и дать возможность клиенту оправить заявку.
Пока что бот сыроват, но вот с чем уже успел поработать:
Вообще работы еще много. Предстоит разобраться со «сценами». Это очень крутая фича в telegraf.js, но я еще не до конца разобрался. Она позволяет создавать отдельные сцены, прописывать, когда пользователь входит в сцену и выходит из нее. То есть программно можно ограничить пользователя так, чтобы он ничего лишнего не натворил, при этом без тонны лишнего кода.
Также надо разбить код. Убрать его повторение, добавить обработку ошибок и прочее. В принципе, это довольно интересное дело, скажу я вам. Вот бы знать, сколько за таких ботов на рынке платят...
Собственно, сам бот @deepAnal_bot
С уважением, @arutemu_su.
Сначала опишу, что к чему. В общем изначально хотел сделать бота для анализа рекламных характеристик (для закупов на канал). Оказалось, что задача почти невыполнимая, ибо парсить инфу мне надо было с закрытых каналов, что невозможно, если бот не в админке. Я как-нибудь подробней про подводные камни расскажу, суть в том, что эту идею отложил.
Но руки то чешутся. Собственно, один мой друг владеет агентством по продвижению, сейчас они делают себе сайт. Ну я и решил сделать им бота для приема заявок прямо с телеграма. Думаю, что им будет полезно, и я не абстрактными вещами займусь.
По сути получился интерфейс их сайта, только в тг. В целом задача бота – познакомить потенциального клиента с услугами агентства и дать возможность клиенту оправить заявку.
Пока что бот сыроват, но вот с чем уже успел поработать:
• С обычными и inline клавиатурами. Обычная в данном случае служит как основное меню, где можно посмотреть услуги компании, ее портфолио, контакты, вернуться на главную, и , разумеется, оставить заявку. Inline клавиатура служит для переключения внутри вышеописанных вкладок. Это довольно удобно, ибо вместо засорения экрана сообщениями ты можешь с запросом пользователя постоянно редактировать предыдущее сообщение.• С реакциями бота на текст и команды.• С асинхронными запросами. Дело в том, что те показатели, которые отображены на главной странице их сайта, постоянно меняются. Я хочу парсить эту инфу с их сайта и выводить через бота, чтобы данные были постоянно актуальными. Пока что эта фича еще не до конца прикручена, но вопрос лишь времени.Вообще работы еще много. Предстоит разобраться со «сценами». Это очень крутая фича в telegraf.js, но я еще не до конца разобрался. Она позволяет создавать отдельные сцены, прописывать, когда пользователь входит в сцену и выходит из нее. То есть программно можно ограничить пользователя так, чтобы он ничего лишнего не натворил, при этом без тонны лишнего кода.
Также надо разбить код. Убрать его повторение, добавить обработку ошибок и прочее. В принципе, это довольно интересное дело, скажу я вам. Вот бы знать, сколько за таких ботов на рынке платят...
Собственно, сам бот @deepAnal_bot
С уважением, @arutemu_su.
Немного картинок бота на случай, если я уйду спать, и кто-то захочет потестить.
Друзья, слушайте! Есть мысли и дикое желание не просто показывать результат работы написанных ботов, но и некоторые подводные камни объяснять с точки зрения разработки. Или даже целый туториал запилить, где будет мой ход разработки, повторив который, вы получите и опыт и своего готового бота.
Кстати, сделанный за вчера бот ребятам понравился. Когда их сайт будет полностью готов, я доведу его до продакшн версии. Интересно, во сколько оценится моя работа с их точки зрения…
Сейчас, к слову, не теряю времени и делаю бота для своего чайного магазинчика. Хочу поработать с парсингом, асинхронными запросами и «сценами», а после поделиться с вами.
Спасибо, что читаете. Так что, писать мануалы?
Кстати, сделанный за вчера бот ребятам понравился. Когда их сайт будет полностью готов, я доведу его до продакшн версии. Интересно, во сколько оценится моя работа с их точки зрения…
Сейчас, к слову, не теряю времени и делаю бота для своего чайного магазинчика. Хочу поработать с парсингом, асинхронными запросами и «сценами», а после поделиться с вами.
Спасибо, что читаете. Так что, писать мануалы?