Debug_Yourself – Telegram
Debug_Yourself
669 subscribers
87 photos
3 videos
7 files
80 links
Рассказываю про свой путь становления программистом.
Делюсь информацией, которую изучаю, проектами, которые делаю, шишками, которые набиваю. Также иногда проскакивает диванная философия.

Админ - @arutemu_su
Download Telegram
Честно, я понятия не имею, что есть медитация. И уж тем более не знаю, что за состояние необходимо испытывать, когда медитируешь. Я даже пробовал пребывать в тишине и покое и пытаться сконцентрироваться на своих мыслях, но это постоянно вызывало у меня дискомфорт, поэтому на долго меня не хватало никогда. Думается мне, что медитация не про сидение в тишине

Я заметил, что когда мое тело занято какой-либо активной физической, но однообразной деятельностью, то я испытываю такое состояние, словно все "внешнее" перестает существовать. К примеру, я занимаюсь каратэ, а это боевое искусство не про ломание досок и кирпичей, скорее про доведение до совершенства каждого движения. И каждое движение требует тысячи повторений. Я могу все два часа тренировки посвятить наработке одного удара, и такая тренировка пройдет незаметно. Зато я настолько погружаюсь в себя, что порою мысли, посещающие меня в этом состоянии, кажутся самыми гениальными.

Другой пример связан с косьбой травы. Каждую неделю я кошу по 20-30 соток. Это довольно тяжелое занятие, ибо изматывает как физически, так и морально (сколько не коси, оно растет). Но стоит взять в руки триммер, начать косить и перестать концентрироваться на том, сколько скошено и сколько осталось, это становится медитативным занятием. Ты входишь в транс и выходишь не когда устаешь, а когда кончается бензин.

Только сейчас я начинаю понимать всю прелесть этих занятий и того медитативного состояния, в котором пребываешь. Много хороших мыслей и идей пришло именно в эти моменты. Может быть медитация как раз про это? Чтобы побыть наедине с собой, надо абстрагироваться на время от "вне", и все вышеописанное дает такую возможность. Кому-то достаточно посидеть в тишине, а кому-то необходимо изматывать свое тело физически, чтобы получить возможность отдохнуть эмоционально/духовно.
Ищущий себя
Порою забывает,
Как прекрасен поиск

Я, как и, наверное, многие читатели-почитатели, ищу себя. Для моего возраста это довольно естественный процесс. Но вот что я недавно понял: в зависимости от того, через какую призму ты смотришь на этот процесс, он либо делает твою жизнь плодотворной, насыщая прекрасным, либо губит, оставляя следы ржавчины жизни.

Я окончил университет, но понял, что путь по профессии все-таки не мой. Потом заинтересовался чайной культурной да и востоком в целом - теперь мы можем наблюдать этот канал. Недавно познакомился с замечательным человеком, который занимается кожным ремеслом. Так как я сам по себе люблю изделия из кожи, то всегда было интересно, как изготавливаются все эти вещи. По итогу вчера с другом из соседней префектуры сходили и под чутким руководством мастера сделали себе по кардхолдеру. Теперь, когда спросят, где я взял свой кошелек, скажу, что лично сделал себе под свои нужны, ну разве не круто? Кстати, он нереально удобный: туда вмещаются и права, и 8-10 карт, и док-ты на авто, паспорт, снилс, мед.полис, и даже немного налички.

Это все я к чему? Очень много на свете интересного. Если относиться к поискам как к возможности обрести новый опыт, расширить свой самурайский кругозор, то такие поиски будут несомненно плодотворной почвой для обретения себя. Если же думать, что в процессе поисков ты какой-то неприкаянный, бродящий в бездне, то, скорее всего, этой бездной ты и будешь поглощен.
Ну что, в Питер?

Друзья, своим ли усердием, а может быть везением, я умудрился пройти по конкурсу "портфолио" в питерский универ ИТМО на магистратуру. Результаты были объявлены еще 20 июня, но я не спешил ими делиться тут.

Напомню, что подавал я на три программы:
1. Веб-технологии
2. Мобильные и сетевые технологии
3. Разработка ПО/Software Engineering

По итогу прошел на первые две. На разработку ПО по портфолио взяли всего одно человека, все-таки программа там серьезная. Хотя я недавно получил диплом доп.образования "переводчик англ. языка в сфере проф.коммуникации", возможно, будь этот документ раньше, я бы и его приложил, может быть это что-то изменило.

Но пост не о том, что я поступил, и давайте порадуемся вместе. Ни в коем случае! Своим примером я лишь хочу показать вам, что даже человек, рожденный в провинции и получивший бакалавриат "Теплоэнергетика", который еще пару лет назад был совершенно далек от программирования и IT в целом - взял и поступил в престижный ВУЗ страны на бюджет. Да еще и волен выбирать между двумя направлениями.

Казалось бы, прямой путь на ТЭЦ, иди и работай за небольшие деньги и большие негативные последствия для здоровья, да и жизни в целом. Будет стабильная жизнь, без корки хлеба, по крайней мере, не останешься. Но нет, разве это было бы самурайским решением? Знать, что ты способен на большее. Быть способным внести в эту жизнь гораздо больше полезного вклада, и пресечь это? Да это же просто преступление.

Но не подумайте, что меня взяли за пустословство или что-то в этом роде. В портфолио мне действительно было что указать про себя. Все-таки будучи бакалавром я не просиживал штаны, а участвовал в научных конференциях, занимался проектной деятельностью, ездил на молодежный форум, участвовал в летней школе вместе с немцами-студентами, да и просто хорошо учился. И благо, сохранил все эти дипломы и сертификаты, чтобы подтвердить слова.

Многие обычно говорят "не бойтесь пробовать". Я же скажу, бойтесь. Бойтесь, но пробуйте. Чтобы чего-то достичь, вам не надо себя мотивировать (кстати, про это хочу потом отдельно написать), просто следуйте двум пунктам:
1. Берешь
2. Делаешь
и тогда, по крайней мере, в результате вы будете знать, что предприняли попытку. И как знать, к чему приведет эта попытка. Сказали бы мне год назад, что я поступлю в питер, серьезно я бы точно это не воспринял.
Тут в преддверии поступления подумал, что надо бы скилл то свой начать повышать, чтобы полным нулем не казаться. Пару дней проходил курс по python на stepik, получил сертификат уже на 80%. Хотел до 100% добить до отъезда, но что-то пошло не так. По приезду надо бы добить.

А касаемо курса и платформы в целом, всем настоятельно рекомендую. Доступные и бесплатные курсы - что может быть лучше? Кстати, на некоторых программах поступления в ВУЗы видел, как прохождение и наличие сертификатов со stepika ценились и даже вместо вступительных испытаний засчитывались (речь, конечно, про IT). Так что все удачи, а я отправляюсь в долгий тернистый путь. Да пребудет с вами бусидо.
Из точки с бесконечной плотностью и экстремальной температурой в сущности была соткана вселенная; миллиарды лет блуждали кварки, не имеющие ни цели, ни смысла, а лишь подчинялись установленным законам, чтобы в конечном итоге сотворить человека — существо столь слабое, трусливое и несовершенное по своей природе. И тем не менее это существо находит в себе отвагу, чтобы бросить вызов самому себе, чтобы бросить вызов самой вселенной, и даже самой жизни. Разве это не абсолют романтики?

Нам хватает смелости преодолевать себя, а также наглости смотреть в небо и кричать "погляди, мать! Мне не скучно жить, ибо знаю я, чем себя занять. Да, я всего лишь сгусток звездной пыли, но такой, который может созидать. Мне выделен лишь миг, и посвящу его я рефлексии, творению и созерцанию того прекрасного, что создано тобою".

По-моему, одна лишь эта мысль воодушевляет жить...
Думаю, что вопрос поисков себя в той или иной степени остро стоит перед каждым. Пока он стоял передо мной, я долго рефлексировал по этому поводу и вроде даже нащупал для себя ответ. Он ни правильный, ни неправильный. Он просто есть, и я захотел им поделиться. Собственно, хотя сообщество и наполнено ароматом чая и сочиненными хокку, именно сейчас мне захотелось сконвертировать мысли в стих.
Давно по топтанной дороге
Бродил я ночи напролет,
И не принадлежащий телу,
Осознавая важность дела,
Взгляд устремлен был лишь вперёд.

Касание чужой руки
Мой взор мгновенно будоражит.
Безлик, бесформен силуэт
Провозглашает свой куплет
И мысль свою в меня втемяшит:

"Я был рожден здесь поневоле.
Себя найти я вожделел.
И, четверть века побывав,
Теперь, мотив сей оборвав,
Живу терпенье есть доколе."

Как жаждешь ты себя найти, не успев прежде потерять?
Я знаю, чем себя занять,
И от того мне не понять
Посеянных в тебе невзгод,
Способных душу отравлять.

Хотя и помню то мгновенье,
Когда себя найти не мог:
Ты яко бездну созерцаешь;
Не яркой вспышкою сверкаешь,
А тлеешь словно уголек.

Мечтами лишь обезображен
Жил я уже без детской прыти.
И плоть моя была измята,
Но чаша снадобья из мяты
Сплела в едино жизни нити.

Могу ошибку допускать,
Но дозволяю полагать,
Предмет искомый достигать
Не представляется возможным,
Если о нем не рассуждать.

Тотчас же правила игры
Сознал. И, жизни смысл обретя,
Сокрытое в листве узрел.
Мгновенно потерять сумел
Себя, потуже вицами сплотя.

Покой нарушил атомов своих
И ощутил возможность побывать за гранью
Клетки, сдерживающей нас самих.
Один из главных страхов вдруг утих.
Найдя себя, устроил я сознанью
Аффинаж. И ты найдёшь;
и силы обретёшь закончить этот стих.
Доброго. Решил тут разбавить философию прогой. Рефлексировать о жизни - занятие хорошее, но периодически хочется делиться тем, чему по идее посвящена львиная доля канала. Тем более периодически пишут люди с этого самого канала, спрашивают про тг-бота, которого я так и не домесил на питоне. Значит, это кому-то нужно.

Собственно, кто помнит/знает, я таки поступил в ИТМО СПБ на веб-технологии, и сейчас стараюсь закрыть все пробелы как по вебу, так и по computer science в целом.

На питон я временно положил свой питон, переключился на JS. Познаю как синтаксис, так и его синхронность, колбэки, промисы, nodejs и прочее... Сейчас мною движет желание не просто запомнить языковые конструкции, а понять весь этот абстрактный механизм; хочу знать, как оно работает под капотом. И в процессе чтения я нахожу некоторые довольно разъяснительные статьи, которые мог бы сам порекомендовать другим интересующимся.

Вот я и подумал, что могу периодически тут делиться статьей со своими короткими комментариями, чтобы вы перед прочтением имели примерное понимание. Можете считать, что я как фильтр, отсеивающий нечесть, чтобы именно знания доставались вам.

Итак. Статья Объясняем современный JavaScript динозавру.
Дата публикации: 27.10.17
Ее прелесть в том, что в ней очень простым языком на небольших примерах объясняется современный JS с кучей необходимых инструментов. К примеру:
– коротко освещается nodeJS;
– ипользование диспетчера пакетов npm;
– использование бандлера (Webpack), который предназначен для для сборки написанных модулей в единые пакеты;
– Что такое транспилирование, зачем оно нужно и как это помогает для использования будущих возможностей JS, а также про транспилятор babel;

После прочтения вам станет куда яснее, почему сейчас столько инструментов для разработки, а дальше уже сможете копать про каждый по отдельности.

Да пребудет с вами Бусидо.
В процессе познания JS, долго не мог понять, что имеется ввиду под синхронностью и асинхронностью. Почему, если код выполняется в лоб сверху вниз последовательно, то он называется синхронным? Ведь синхронность подразумевает параллельное/одновременное выполнение нескольких действий. В конеце концов даже плавание синхронное есть...

В итоге сейчас до мне стало доходить (надеюсь, правильно), что походу в контексте JS синхронность подразумевает одновременное выполенние кода с его вызовом. Иными словами, если вызывается, к примеру, функция
someFunc() { ... };
то она тут же выполняется, то есть как бы одновременно с ее вызовом. И проблема заключается в том, что пока вызванная функция не завершит свою работу, следующий за ней код не будет выполняться.

Вдруг мы делали запрос к БД для получения большого количества данных, чтобы их вывести? Или же вызвана функция для обработки изображений? Такие запросы могут занять приличное количество времени и блокировать call stack. То есть блокировать дальнейшее выполнение программы. Именно здесь приходит на помощь асинхронность.

Опять же, насколько я понял, при асинхронном подходе выполнение кода как бы откладывается на какое-то время, позволяя не блокировать выполнение программы в целом. То есть когда код, ну или приведенная выше в качестве примера функция
someFunc() { ... };
вызывается, она не обязательно будет выполнена в момент вызова. Отсюда и идет асинхронность.

Резюмируя, получается, что когда выполенение кода идет последовательно, и, что самое главное, он исполняется в момент вызова - это синхнонное выполнение. Когда же выполнение кода при вызове откладывается на какое-то время, это асинхронное выполнение. Последнее позволяет не блокировать процесс работы программы, если какой-либо участок код достаточно времязатратен.
Вашему вниманию предлагаю еще одну крутую статью по JavaScript'у: она нацелена на то, чтобы дать общее представление именно о том, как все работает под капотом. Из чего вообще состоит движок и по каким принципам он функционирует. Прочитав эту статью, базовое понимание к вам точно придет.

Как работает JavaScript
Дата публикации: 12.09.19
Эта статья поведует о том:
– что такое контекст выполнения (execution context - EC), в частности речь пойдет о контексте выполнения функции и глобального EC.
– Как EC создается движком JS и в чем разница между глобальным EC и EC функции. И как при этом ведет себя специальная переменная this (ссылка на текущий объект).
– Что такое Стек исполнения (Execution Stack) или, как его еще называют, Стэк вызовов (Call Stack). Разумеется, говорится, зачем он нужен.
– Что представляет из себя Очередь событий (Event Queue), что туда добавляется и в каком случае извлекается.
– Также рассказывается про два этапа контекста выполнения функции. Это этап создания и этап выполнения.
– Что есть область действия (Scope) и цепочка областей действия (scope chain).
– Совсем чуть-чуть уделили внимание замыканиям (Closure). Если хотите их понять, лучше почитать подробнее.
– Какие существуют способы задания функции и в чем и разница.
– И еще пару связанных со всем вышеперечисленным моментов.
Я к вам еще с одной хорошей статьей по JS, которая называется:
JavaScript: 12 вопросов и ответов

Статья прекрасна тем, что содержит ответы на вопросы, которые как минимум всплывают на собеседованиях, но если вы хотите стать разработчиком с большой буквы, то и этой мотивации достаточно, чтобы почитать ее.

Более того, каждый вопрос содержит в себе какую-либо важную тему, которая важна для понимания JS в целом. Поэтому как я сделал? Прочитал статью, чтобы ознакомиться бегло с каждой темой, а потом каждый вопрос гуглил отдельно для более детальной проработки.

Итак, аннотация:
– Коротко о том, что есть «прототипное наследование»

– Коротко про всплытие и перехват событий

– Слегка затрагиваются «замыкания», и дается пару рекомендаций при их использовании

– Пояснение строки ‘use strict’. Если совсем коротко: она нужна, чтобы использование неоднозначных конструкций из ранних версий языка выбрасывало ошибку, а не работало магическим образом.

– Совсем чуть-чуть про «поднятие переменных» - штуке, благодаря которой вы можете использовать функцию до ее объявления в коде (разумеется, объявить ее так или иначе нужно обязательно).

– Отличие стрелочных функций от обычных.

– Альтернатива var - let и const.

– Как и с чем есть функциональное программирование

– И в завершении автор пишет про улучшение производительности веб-страниц при помощи JS, а также про то, как писать код, который будет актуален. Кстати, тут он поднимает вопрос о том, что может стоит, по возможности, писать код, который будет меньше зависеть от фреймворков. Интересная мысля…

Подводя итог, лишь повторюсь, что статью стоит скорее рассматривать как указатель: каждый вопрос слегка вводит вас в курс дела и указывает направление более детальных поисков.

Знаю, меня читают не так много человек, просто хочу знать, такой формат вообще полезен кому-нибудь?
В последнее время я делюсь отдельными статьями в формате «читаю сам: если статья оказывается дико познавательная, то пишу к ней аннотацию и выкладываю на канал, чтобы вы могли решить для себя, стоит ли ее читать». Ну и так как сейчас я заинтересован именно в JS, то весь материал по нему.

Так вот пару дней назад я наткнулся на ряд крутейших статей по тому «Как работает JS». Всего их 19 штук, каждая обозревает конкретные моменты/принципы работы JS. Я подумал, что ими определенно стоит поделиться с вами, но расскажу лишь про те статьи, которые мне показались самыми интересными, и сделаю это порциями, так как сам еще не все дочитал.

Свежесть статей: сентябрь-октябрь 2017, но актуальность высокая.

АННОТАЦИЯ:

Статья 1: «Обзор движка, механизмов времени выполнения, стека вызовов»

—> Автор, опираясь на статистику гитхаба, говорит о дикой популярности JS
—> Упрощенно представляет движок V8, который используется в браузере Chrome и в Node.js.
—> Также упоминаются API, предоставляемые браузерами, вроде DOM, AJAX и Timeout.
—> Под конец уделяется внимание именно работе «Стека вызовов» (Call stack), который входит в ранее упомянутый движок V8, и про проблемы блокировки пользовательского интерфейса при выполнении тяжелых вычислений.

Статья 2: «О внутреннем устройстве V8 и оптимизации кода»

—> Сначала в статье упоминаются популярные JS-движки, такие как: V8 - написанный на С++ движок от Гугла с открытыми исходниками; Rhino - написанный на Java также с открытыми исходниками движок, поддерживаемый Mozila Foundation. SpiderMonkey - самый первый JS-движок, сейчас используется в Firefox; Chakra - движок для IE и M-t Edge и др.
—> Непосредственно о работе V8, его отличительной черте, заключающейся в том, что он не использует при исполнении JS-программ байт-код или любой другой промежуточный
—> Какие компиляторы использовались в V8 и потоки, занимающиеся оптимизацией кода
—> Совсем немного про встраивание кода: грубо говоря, первая оптимизация исполняемого кода заключается в том, что команды вызова функций заменяются на их тела.
—> Поясняется использование V8 «скрытых классов» для выяснения адресов свойств объектов в памяти и дается рекомендация по инициализации динамических свойств объектам.
—> Еще один механизм оптимизации, используемый движком - «Встроенное кэширование».
—> В двух словах объясняется механизм «Сборки мусора».
—> В конце статьи даются 5 подходов к оптимизации JS-кода для V8.
Ну что, дебаггеры, продолжаю делиться статьями.

Свежесть статей: сентябрь-октябрь 2017, но актуальность высокая.

АННОТАЦИЯ:

Статья 3: «управление памятью, четыре вида утечек памяти и борьба с ними»

—> Для начала в статье обращается внимание на то, что в JS управление памятью происходит автоматически, то есть она сама выделяется, когда объекты/строки/прочее создаются, и когда созданное перестает использоваться, то память освобождается в ходе процесса, называемого сборщиком мусора), но несмотря на это, большой ошибкой будет полагать, что разработчик совсем не должен заботиться об управлении памятью.
—> Коротко о жизненном цикле памяти (выделение->использование->освобождение) и о том, что такое «память» в принципе (концептуально - это огромный массив битов, которые можно считывать и записывать).
—> Чуть-чуть о разнице между динамическим и статическим выделением памяти
—> Более подробно о том, как происходит освобождение памяти: основной фокус на работе «сборщика мусора».
—> Раз пошел разговор о памяти, не забыли уделить внимание «утечке памяти»
—> Автор затронул «Замыкания» (это внутренняя функция, у которой есть доступ к переменным, объявленным во внешней по отношению к ней функции) в контексте работы сборщика мусора и утечки памяти.

Статья 4: «цикл событий, асинхронность и пять способов улучшения кода с помощью async/await»

—> Начало данной статьи является продолжением размышлений, которые были в первой статье: какие ограничения у однопоточной модели выполнения кода (напомним, что JS однопоточен). Также говорится, почему нужна асинхронность.
—> Приводится очень хорошая для понимания схема работы движка, исполняющего JS код, и браузера. Особое внимание уделяется «циклу событий»(Event Loop). Прочитав этот кусок статьи, вы точно поймете, как там исполняется написанный вами код, хотя бы в общих чертах.
—> Коротко о том, как работает setTimeout(…)
—> Раз речь идет об асинхронности, разумеется не забыли про Коллбэки и про то, за что их не любят (коллбэковый ад)
—> Вторая часть статьи полностью посвящена промисам: почему в них появилась нужда, как с ними работать (с примерами), и про новшество ES8: async/await, которое позволяет писать синхронный код, работающий асинхронно.
—> В конце дается 5 советов по написанию надежного асинхронного кода, который легко поддерживать.
Кодинг в радость. Так как выходной, то предлагаю отвлечься от фундаментальных вещей и посмотреть на статью, предлагающую 13 приемов и трюков эффективной работы с массивами в JS. Хотя статья написана на довольно простом английском, я позволил себе перевести ее и дать более подробное объяснение. Более того, все примеры и пояснения выложены в codepen, так что вы можете «поковырять» код сами

Статья: «13 полезных советов и приемов для работы с массивами в JavaScript, которые вы должны знать»

Свежесть статьи: октябрь 2019

АННОТАЦИЯ:

—> Удаление повторяющихся элементов
—> Замена элементов в массиве
—> Функционал map() без map
—> Очистка всего массива
—> Конвертация массива в объект
—> Создание заполненного данными массива
—> Слияние 2х и более массивов
—> Поиск пересечений в двух массивах
—> Удаление «ложных» значений из массива
—> Получение рандомного элемента массива
—> Разворот массив
—> Поиск последнего вхождения элемента в массив
—> Сумма всех элементов массива

Оригинал статьи

Стоит ли продолжать постить подобный материал?
R E F L E C T I O N S

Что я знаю о жизни? Все и ничего.

Все – это о понимании фундаментальных вещей, вроде осознания одновременной конечности и бесконечности жизни.

Ничего - это об ограниченности моего личного опыта.

Концентрируясь и зацикливаясь на конкретных ситуациях и людях, я ограничиваю своё «все»-знание. Я отделяюсь от потока и накапливаю своё «ничего».

Думая о вечном, я отделяюсь от эго и соединяюсь со всем остальным, всем, что вне меня.

Жизнь должна протекать в балансе и чередовании этих двух составляющих. Ибо дихотомия – неизменный и постоянный признак всего сущего: «life implies death, self implies other..»

Пространство между этими полярно-финальными точками – спектр жизни, её процесс, она сама.