eslint-plugin-more 1.0
Мне часто задают вопрос по поводу TypeScript. Я вижу смысл в использвания TypeScript далеко не во всех проектах.
Основная идея, что нельзя сравнивать JS vs TypeScript, нужно сравнивать JS+Tooling+Tests vs TypeScript+Tooling+Tests и тут TypeScript теряет множество своих преимуществ. Писал тут - https://t.me/jabascript/19
Это не значит, что я против статического анализа, скорее наоборот. Мы в WebbyLab используем строгие правила по статическому анализу. Мы используем eslint и множество плагинов к нему. Также, если мы видим повторяющиеся ошибки во время ревью, то мы стараемся эту проверку автоматизировать. Так когда-то появился eslint-plugin-more.
Сегодня зарелизили версию 1.0 с двумя новыми правилами (в сумме уже 12):
✅ more/no-hardcoded-password - проверяет, что вы не захардкодили пароль в вашу кодовую базу.
✅ more/no-hardcoded-configuration-data - проверяет, что в ваших исходниках нет конфигурационных данных, типа ip-адресов, доменов, UUID, токенов.
Возможно этот плагин будет полезен и в твоем проекте :)
ССЫЛКА НА ПЛАГИН - https://github.com/WebbyLab/eslint-plugin-more/
Мне часто задают вопрос по поводу TypeScript. Я вижу смысл в использвания TypeScript далеко не во всех проектах.
Основная идея, что нельзя сравнивать JS vs TypeScript, нужно сравнивать JS+Tooling+Tests vs TypeScript+Tooling+Tests и тут TypeScript теряет множество своих преимуществ. Писал тут - https://t.me/jabascript/19
Это не значит, что я против статического анализа, скорее наоборот. Мы в WebbyLab используем строгие правила по статическому анализу. Мы используем eslint и множество плагинов к нему. Также, если мы видим повторяющиеся ошибки во время ревью, то мы стараемся эту проверку автоматизировать. Так когда-то появился eslint-plugin-more.
Сегодня зарелизили версию 1.0 с двумя новыми правилами (в сумме уже 12):
✅ more/no-hardcoded-password - проверяет, что вы не захардкодили пароль в вашу кодовую базу.
✅ more/no-hardcoded-configuration-data - проверяет, что в ваших исходниках нет конфигурационных данных, типа ip-адресов, доменов, UUID, токенов.
Возможно этот плагин будет полезен и в твоем проекте :)
ССЫЛКА НА ПЛАГИН - https://github.com/WebbyLab/eslint-plugin-more/
Жабаскрипт (веде Віктор Турський)
Ask Me Anything Всем привет. В эту пятницу проведу онлайн трансляцию в формате "Ask Me Anything" 🙂 Расскажу про Starter App для NodeJS, про будущее канала. Ну, и готовьте любые вопросы. Проводить буду в Zoom, у меня там лимит в 100 человек, но можно будет…
Ask Me Anything #1 Видеозапись на Youtube
Наконец-то залил видеозапись на ютуб. Спасибо всем за вопросы и замечания. Было круто! :)
https://youtu.be/g2_JWxWNigE
Наконец-то залил видеозапись на ютуб. Спасибо всем за вопросы и замечания. Было круто! :)
https://youtu.be/g2_JWxWNigE
YouTube
Ask Me Anything #1 | Viktor Turskyi
Отвечаем на вопросы относительно будущего канала Жабаскрипт (https://t.me/jabascript) и делимся опытом разработки на JavaScript
Ребята, завтра провожу онлайн доклад "How to create a high performance Excel engine in JavaScript"
👉Завтра проходит JavaScript Odessa #TechTalks. Расскажу о том, как мы создавали собственный движок электронных таблиц, совместимый с MS Excel, который позволил им запустить любую модель Excel без Excel. Расскажу об архитектуре, алгоритмах, оптимизации производительности JavaScript.
Было уже обсуждение и небольшое демо движка в чате канала. Если у тебя были сомнения, что такое возможно сделать на JS, то регистрируйся на доклад 🙂
🔹Где: онлайн
🔹Когда: 30.07.2020 в 19:00
🔹Язык доклада: русский
🔹Регистрация обязательна
🔹Вход: donation.
👉 Присоединяйся ➡️ https://bit.ly/2AN6pv1 на ФБ: https://www.facebook.com/events/933132910446896/
👉Завтра проходит JavaScript Odessa #TechTalks. Расскажу о том, как мы создавали собственный движок электронных таблиц, совместимый с MS Excel, который позволил им запустить любую модель Excel без Excel. Расскажу об архитектуре, алгоритмах, оптимизации производительности JavaScript.
Было уже обсуждение и небольшое демо движка в чате канала. Если у тебя были сомнения, что такое возможно сделать на JS, то регистрируйся на доклад 🙂
🔹Где: онлайн
🔹Когда: 30.07.2020 в 19:00
🔹Язык доклада: русский
🔹Регистрация обязательна
🔹Вход: donation.
👉 Присоединяйся ➡️ https://bit.ly/2AN6pv1 на ФБ: https://www.facebook.com/events/933132910446896/
Google Docs
How to create a high performance Excel engine in JavaScript | JavaScript Odessa #TechTalks 30/07/2020 – Online Streaming
When: 30.07.2020 at 19:00
Level: Middle +
Speaker: Viktor Turskyi
Language: Russian
У вас есть сложные математические модели (миллионы ячеек, сотни тысяч формул) в Excel. И вам необходимо запустить все это с мобильного и браузера без экселя. Виктор Турский…
Level: Middle +
Speaker: Viktor Turskyi
Language: Russian
У вас есть сложные математические модели (миллионы ячеек, сотни тысяч формул) в Excel. И вам необходимо запустить все это с мобильного и браузера без экселя. Виктор Турский…
👉 20-го августа мой первый воркшоп на тему "Эффективная разработка NodeJS приложений".
Первый раз в жизни провожу онлайн воркшоп (уже переживаю). Организовывают это все ребята из OdessaJS (https://odessajs.org/). 20-го августа онлайн воркшоп, а 29-го августа буду делать доклад на эту же тему непосредственно в Одессе. Буду рад встрече и онлайн на воркшопе и в Одессе на конференции 🙂.
В этот раз буду не только рассказывать, но и попробуем совместно написать реальное приложение. При разработке софта, вы должны четко понимать куда нужно поместить тот или иной кусок кода и понимать почему он именно там, а не где-то в другом месте. Команда разработки должны быть максимально эффективна с первых дней, а не через месяц после старта. Проект должен подниматься за минуты, а не за часы/дни. Деплоймент и тестирования должны быть простыми. Попробуем пройти весь путь от старта проекта до деплоймента за 2 часа 😎
🔹Где: онлайн
🔹Когда: 20.08.2020 в 18:00-20:00 (EEST)
🔹Язык воркшопа: русский
🔹Регистрация обязательна
ССЫЛКА ДЛЯ РЕГИСТРАЦИИ: https://docs.google.com/forms/d/e/1FAIpQLSfIoi6oz86gcT3TCeBmxD-PAih9jBxCFLCvkaI6CF0RAVGI9A/viewform
Первый раз в жизни провожу онлайн воркшоп (уже переживаю). Организовывают это все ребята из OdessaJS (https://odessajs.org/). 20-го августа онлайн воркшоп, а 29-го августа буду делать доклад на эту же тему непосредственно в Одессе. Буду рад встрече и онлайн на воркшопе и в Одессе на конференции 🙂.
В этот раз буду не только рассказывать, но и попробуем совместно написать реальное приложение. При разработке софта, вы должны четко понимать куда нужно поместить тот или иной кусок кода и понимать почему он именно там, а не где-то в другом месте. Команда разработки должны быть максимально эффективна с первых дней, а не через месяц после старта. Проект должен подниматься за минуты, а не за часы/дни. Деплоймент и тестирования должны быть простыми. Попробуем пройти весь путь от старта проекта до деплоймента за 2 часа 😎
🔹Где: онлайн
🔹Когда: 20.08.2020 в 18:00-20:00 (EEST)
🔹Язык воркшопа: русский
🔹Регистрация обязательна
ССЫЛКА ДЛЯ РЕГИСТРАЦИИ: https://docs.google.com/forms/d/e/1FAIpQLSfIoi6oz86gcT3TCeBmxD-PAih9jBxCFLCvkaI6CF0RAVGI9A/viewform
Жабаскрипт (веде Віктор Турський)
Эффективная разработка NodeJS приложений Не так давно я делал доклад на fwdays на тему "Эффективная разработка NodeJS приложений." Это был мой первый онлайн доклад. Впечатления конечно смешанные. Тяжело, когда не видишь аудитории, но зато удобно было показывать…
Для тех, кто хотел полную версию доклада на ОдессаЖС
Вернулся с ОдессаЖС. В этом году было много сильных спикеров и учасников, удалось классно пообщаться на тех.корнерах (отдельное спасибо за это) и на автепати, отличная атмосфера, хорошая организация, локация на свежем воздухе возле моря. Единственное, мне удалось донести только 30% контента во время доклада. В любом случае выбирал самое полезное, но для тех, кто подписался на канал после доклада и хочет посмотеть полную версию есть видео запись на полтора часа.
Ребята, кто подписался на канал на ОдессаЖС, можете посмотреть полную версию с FW Days.
Также я проводил на прошлой неделе воркшоп на 3 часа, там более глубокое погружение в код (в публичном доступе нет, но организаторы дают доступ всем, кто зарегистрировался по ссылке) .
Вернулся с ОдессаЖС. В этом году было много сильных спикеров и учасников, удалось классно пообщаться на тех.корнерах (отдельное спасибо за это) и на автепати, отличная атмосфера, хорошая организация, локация на свежем воздухе возле моря. Единственное, мне удалось донести только 30% контента во время доклада. В любом случае выбирал самое полезное, но для тех, кто подписался на канал после доклада и хочет посмотеть полную версию есть видео запись на полтора часа.
Ребята, кто подписался на канал на ОдессаЖС, можете посмотреть полную версию с FW Days.
Также я проводил на прошлой неделе воркшоп на 3 часа, там более глубокое погружение в код (в публичном доступе нет, но организаторы дают доступ всем, кто зарегистрировался по ссылке) .
How to build notification service for a scalable multi-tenant application using RabbitMQ and NodeJS
Вышел новый пост в нашем блоге (давно уже не было 🙂). Как всегда это реальный опыт, которым коллеги из WebbyLab хотят поделиться с комьюнити.
Большинство NodeJS разработчиков допускают одну и ту же ошибку. Они считают, что будет только один процесс их приложения и это особенно больно, когда используются веб-сокеты.
Допустим нужно сделать чат. Реализация чаще всего такая: бэкенд ждет пока подключаться несколько пользователей через веб-сокеты и держит в памяти соединения. Когда один пользователь пишет другому, то бэкенд получает сообщение, сохраняет его в базу и отправляет его другому пользователю через другое соединение, если тот подключен. Локально все работает, но в продакшене работать не будет. Почему? Потому, что вам нужно масштабироваться. И у вас либо будет запущенно несколько docker контейнеров вашего приложения, либо pm2 в режиме cluster. В итоге один пользователь может подключиться через веб-сокеты к одному процессу, а второй к другому.
Как с этим быть? Нужен message broker. И это только один из сценариев, когда может понадобится message broker. У нас стояла немного другая задача, но проблематика похожая - масшабирование и уведомления.
Пост должен быть полезным, если вы решаете схожие задачи)
ССЫЛКА НА ПОСТ - https://blog.webbylab.com/notificator-using-rabbitmq-and-nodejs/
👉 Сейчас в Киеве мы активно набираем разработчиков различного уровня, включая младших разработчиков, которые не боятся учиться. За вакансиями можно следить в отдельном канале. Подписывайтесь - http://t.me/webbylab
Вышел новый пост в нашем блоге (давно уже не было 🙂). Как всегда это реальный опыт, которым коллеги из WebbyLab хотят поделиться с комьюнити.
Большинство NodeJS разработчиков допускают одну и ту же ошибку. Они считают, что будет только один процесс их приложения и это особенно больно, когда используются веб-сокеты.
Допустим нужно сделать чат. Реализация чаще всего такая: бэкенд ждет пока подключаться несколько пользователей через веб-сокеты и держит в памяти соединения. Когда один пользователь пишет другому, то бэкенд получает сообщение, сохраняет его в базу и отправляет его другому пользователю через другое соединение, если тот подключен. Локально все работает, но в продакшене работать не будет. Почему? Потому, что вам нужно масштабироваться. И у вас либо будет запущенно несколько docker контейнеров вашего приложения, либо pm2 в режиме cluster. В итоге один пользователь может подключиться через веб-сокеты к одному процессу, а второй к другому.
Как с этим быть? Нужен message broker. И это только один из сценариев, когда может понадобится message broker. У нас стояла немного другая задача, но проблематика похожая - масшабирование и уведомления.
Пост должен быть полезным, если вы решаете схожие задачи)
ССЫЛКА НА ПОСТ - https://blog.webbylab.com/notificator-using-rabbitmq-and-nodejs/
👉 Сейчас в Киеве мы активно набираем разработчиков различного уровня, включая младших разработчиков, которые не боятся учиться. За вакансиями можно следить в отдельном канале. Подписывайтесь - http://t.me/webbylab
Agile developer
How to build notificator service for scalable multi-tenant application using RabbitMQ and NodeJS
80% percent of NodeJS developers do the same mistake - they assume that their application will work as a single process. You can say that you application is one service but if you use pm2 in cluster mode then you have multiple processes already. This article…
Онлайн конференция JavaScript fwdays'20 Аutumn
Началась "JavaScript fwdays'20 Аutumn" https://fwdays.com/event/javascript-fwdays-2020 - онлайн конфереция про JavaScript. Много интересных докладов. К примеру, я очень хочу послушать доклад Саши Соловьёва "Выкидываем ReactJS" 🙂
✅ Архитектурный ком
Уже в этот понедельник я и Андрей Мелихов участвовали в 2х-часовом онлайн обсуждении про архитектуру. Получилось классно! Видео уже доступно для участников конференции (если когда-то будет в общем доступе, то тоже закину сюда в канал).
✅ Docker для JavaScript разработчиков
В следующий четверг делаю deep dive про докер. В докладе пройдусь по следующим моментам:
🔹Как устроен Docker?
🔹Безопасен ли Docker?
🔹Существую ли контейнеры в Linux?
🔹Как насчет использования shared libraries в докер контейнерах?
🔹Откуда берутся зомби в контейнерах 🧟♂️⚰️?
🔹Как минимизировать размер Docker образов?
🔹Как использовать Docker в ежедневной разработке?
✅ Промокод для подписчиков канал
ПРОМОКОД - jabascript (скидка 15%)
✅ Бесплатный билет
У меня есть один бесплатный билет. Решил разыграть его среди подписчиков. Чтоб принять участие достаточно
1. Порекомендовать канал друзьям/подписчикам в соц. сетях, в другом канале, в любом чате (где посчитаете уместным).
2. Написать "+" в этом чате https://t.me/jabascript_fwdays
3. В эту субботу рандом определит победителя
Началась "JavaScript fwdays'20 Аutumn" https://fwdays.com/event/javascript-fwdays-2020 - онлайн конфереция про JavaScript. Много интересных докладов. К примеру, я очень хочу послушать доклад Саши Соловьёва "Выкидываем ReactJS" 🙂
✅ Архитектурный ком
Уже в этот понедельник я и Андрей Мелихов участвовали в 2х-часовом онлайн обсуждении про архитектуру. Получилось классно! Видео уже доступно для участников конференции (если когда-то будет в общем доступе, то тоже закину сюда в канал).
✅ Docker для JavaScript разработчиков
В следующий четверг делаю deep dive про докер. В докладе пройдусь по следующим моментам:
🔹Как устроен Docker?
🔹Безопасен ли Docker?
🔹Существую ли контейнеры в Linux?
🔹Как насчет использования shared libraries в докер контейнерах?
🔹Откуда берутся зомби в контейнерах 🧟♂️⚰️?
🔹Как минимизировать размер Docker образов?
🔹Как использовать Docker в ежедневной разработке?
✅ Промокод для подписчиков канал
ПРОМОКОД - jabascript (скидка 15%)
✅ Бесплатный билет
У меня есть один бесплатный билет. Решил разыграть его среди подписчиков. Чтоб принять участие достаточно
1. Порекомендовать канал друзьям/подписчикам в соц. сетях, в другом канале, в любом чате (где посчитаете уместным).
2. Написать "+" в этом чате https://t.me/jabascript_fwdays
3. В эту субботу рандом определит победителя
Fwdays
JavaScript fwdays'20 autumn онлайн-конференція
Найбільші IT конференції в Україні: Software Architecture, Highload, DevOps, Management (leads, C-level), JavaScript, Frontend, React, Data Science та AI, PHP, Python та ін.
Лучший инженерный подкаст
Хочу сделать доклад про то, как стать хорошим инженером. И один из пунктов - нужно смотреть за рамки. Вы можете писать только на JS, но должны смотреть вокруг. Мне нравится концепция T-Shaped people. Я часто пишу про инженерию, а не только про чистый JS. Сегодня хочу порекомендовать мой любый подкаст не про JS, но для инженеров - "Software Engineering Daily". Я переслушал много различных технических подкастов, но этот самый крутой.
ССЫЛКА НА ПОДКАСТ - https://softwareengineeringdaily.com/category/all-episodes/exclusive-content/Podcast/
Хочу сделать доклад про то, как стать хорошим инженером. И один из пунктов - нужно смотреть за рамки. Вы можете писать только на JS, но должны смотреть вокруг. Мне нравится концепция T-Shaped people. Я часто пишу про инженерию, а не только про чистый JS. Сегодня хочу порекомендовать мой любый подкаст не про JS, но для инженеров - "Software Engineering Daily". Я переслушал много различных технических подкастов, но этот самый крутой.
ССЫЛКА НА ПОДКАСТ - https://softwareengineeringdaily.com/category/all-episodes/exclusive-content/Podcast/
Запись диалога "Архитектурный ком"
Наконец-то появилась видео запись моего обсуждения вопросов архитектуры с Андреем Мелиховым. Спасибо Андрею, Сергею, Ире - получилось круто! 🙂
Участники диалога:
Андрей Мелихов (Yandex.Money), Виктор Турский (WebbyLab).
Модератор - Сергей Фролов (Front-End Technical Lead)
ССЫЛКА НА ВИДЕО: https://www.youtube.com/watch?v=ueds8WfEgSE
Наконец-то появилась видео запись моего обсуждения вопросов архитектуры с Андреем Мелиховым. Спасибо Андрею, Сергею, Ире - получилось круто! 🙂
Участники диалога:
Андрей Мелихов (Yandex.Money), Виктор Турский (WebbyLab).
Модератор - Сергей Фролов (Front-End Technical Lead)
ССЫЛКА НА ВИДЕО: https://www.youtube.com/watch?v=ueds8WfEgSE
YouTube
Архитектурный ком [ru] / Андрей Мелихов, Виктор Турский, Сергей Фролов
Это видео — диалог, который состоялся в рамках онлайн-конференции JavaScript fwdays'20 autumn, 14 сентября 2020 года.
Участники диалога:
Андрей Мелихов (Yandex.Money), Виктор Турский (WebbyLab).
Модератор - Сергей Фролов (Front-End Technical Lead)
Больше…
Участники диалога:
Андрей Мелихов (Yandex.Money), Виктор Турский (WebbyLab).
Модератор - Сергей Фролов (Front-End Technical Lead)
Больше…
Видео доклада "Docker Deep Dive"
Я провел сотни собеседований и заметил, что большинство разработчиков не понимают, что такое Docker. К примеру, люди удивляются тому, что Docker медленее на маке, чем на линуксе. И даже считают, что это какой-то баг. Для многих Docker это какая-то магическая штука.
В связи с этим, я решил сделать небольшой дипдайв в Docker. Идея доклада не в том, чтобы научить слушателей командам Docker, а дать понимание того, что такое Docker на самом деле. Погрузится глубже в реализацию. Попробовать сделать свой Docker на коленках.
Надеюсь, что доклад будет полезен тем, кто хотел немного глубже понять, как работает Docker.
ССЫЛКА НА ВИДЕО: https://www.youtube.com/watch?v=CgbijhDEAgs
Как вам доклады в таком формате?
Я провел сотни собеседований и заметил, что большинство разработчиков не понимают, что такое Docker. К примеру, люди удивляются тому, что Docker медленее на маке, чем на линуксе. И даже считают, что это какой-то баг. Для многих Docker это какая-то магическая штука.
В связи с этим, я решил сделать небольшой дипдайв в Docker. Идея доклада не в том, чтобы научить слушателей командам Docker, а дать понимание того, что такое Docker на самом деле. Погрузится глубже в реализацию. Попробовать сделать свой Docker на коленках.
Надеюсь, что доклад будет полезен тем, кто хотел немного глубже понять, как работает Docker.
ССЫЛКА НА ВИДЕО: https://www.youtube.com/watch?v=CgbijhDEAgs
Как вам доклады в таком формате?
YouTube
Docker deep dive for JavaScript developers [ru] / Виктор Турский
Видео с онлайн-конференции JavaScript fwdays'20 autumn, которая прошла 24 сентября 2020 года.
Описание deep dive:
Вы понимаете, что такое Docker? Он безопасен? Существуют контейнеры в Linux? А как насчет потребления памяти и общих библиотек? В каких случаях…
Описание deep dive:
Вы понимаете, что такое Docker? Он безопасен? Существуют контейнеры в Linux? А как насчет потребления памяти и общих библиотек? В каких случаях…
Через 10 минут онлайн интервью со мной про архитектуру и не только. Можно будет задать любые вопросы. Кому интересно, подключайтесь https://youtu.be/eN7Gq3WBQhg :)
YouTube
JavaScript. Open Tech Week, December 2020
Open Tech Week — це серія мітапів від Sigma Software, присвячена різним технологіям та актуальним темам в ІТ індустрії України.
На цьому мітапі ми говоримо про JavaScript.
Теми мітапу:
🔹 Як не перетворити проект в велику купу бруду
📍 Доповідач: Віктор…
На цьому мітапі ми говоримо про JavaScript.
Теми мітапу:
🔹 Як не перетворити проект в велику купу бруду
📍 Доповідач: Віктор…
Как мы создавали высокопроизводительный движок электронных таблиц на JavaScript
Наконец-то появилось видео моего оновленного доклада про Excel на JavaScript.
Это самая полная версия доклада. Немного прошелся по архитектуре и показал реальные демо.
Представьте, что перед вами стоит задача сделать движок электронных таблиц (без UI), совместемый с MS Excel. И задача движка запускать огромные математические модели на сотни тысяч формул с производительностью близкой к оригинальному движку Excel. Нам пришлось выжимать все до последнего с JavaScript. Это тот проект, который нельзя реализовать без знания алгоритмов, структур данных, внутренностей V8.
Если интересно на что способен JS, то доклад должен понравиться 😀
ССЫЛКА НА ВИДЕО: https://www.youtube.com/watch?v=08bkGZTGxjM
Наконец-то появилось видео моего оновленного доклада про Excel на JavaScript.
Это самая полная версия доклада. Немного прошелся по архитектуре и показал реальные демо.
Представьте, что перед вами стоит задача сделать движок электронных таблиц (без UI), совместемый с MS Excel. И задача движка запускать огромные математические модели на сотни тысяч формул с производительностью близкой к оригинальному движку Excel. Нам пришлось выжимать все до последнего с JavaScript. Это тот проект, который нельзя реализовать без знания алгоритмов, структур данных, внутренностей V8.
Если интересно на что способен JS, то доклад должен понравиться 😀
ССЫЛКА НА ВИДЕО: https://www.youtube.com/watch?v=08bkGZTGxjM
YouTube
"How to create a high performance Excel engine in JS – Odessa #TechTalks, Viktor Turskyi
Приглашаем вас поговорить об архитектуре, алгоритмах, оптимизации производительности JavaScript. Также Виктор Турский расскажет, как он со своей командой создали собственный движок электронных таблиц, совместимый с MS Excel, который позволяет им запускать…
Зачем знать, как вещи работают внутри?
Многие разработчики считают, что им не нужно понимать, как вещи работают внутри, а достаточно просто знать API. Я считаю, что с таким подходом есть проблема.
Изначально я думал, что понимание внутренностей системы или ее компонента помогает в дебаге. И это правда, ты можешь находить причины проблем в десятки раз быстрее, чем если бы ты не знал, что внутри. Но через какое-то время я понял, что есть еще более полезный эффект. Понимания внутренностей дает тебе понимания свойст компонента/подсистемы. А понимание свойств - это обязательный атрибут проектирования.
Не зная внутренностей, вы не понимаете свойств систем и следовательно не можете грамотно проектировать. Да, можно опираться на маркетинговый материал, но это очень наивный подход.
Примеров масса:
✅ Если вы знаете, как устроены бызы данных, то вы можете выбрать подходящую. Понимание индексов позволяет предсказать, что произойдет с выборками, если объем данных увеличиться в несколько раз. Или почему добавление индексов может снизить производительность вашего приложения.
✅ Если вы знаете, как работает Docker, то можете оценить риски изоляции и возможно начать использовать виртуалки.
✅ Если вы знаете, как работает HTTPS, то без проблем найдете проблему, когда корпоративный прокси заказчика делает man-in-the-middle и выкусывает CORS заголовки.
✅ Если вы знаете, что xslx файлы на самом деле zip с xml внутри, то вы можете предсказать, что конвертация в CSV может помочь решить проблему с со скоростью парсинга.
✅ Если вы понимаете, как работает JWT, то вы будете знать, что клиент и без "секрета" извлечь все данные с токена.
✅ Если вы понимаете, как внутри устроена файловая система, то поймете, почему лучше не хранить большое количество файлов в одной директории в ext2.
✅ Я встречал сениор разработчиков, которые, к примеру, думали, что React Native компилируется в нативных код и в результате не могли понять, когда стоит использовать RN, а когда нативные приложения.
✅ etc
Что думаете?
Многие разработчики считают, что им не нужно понимать, как вещи работают внутри, а достаточно просто знать API. Я считаю, что с таким подходом есть проблема.
Изначально я думал, что понимание внутренностей системы или ее компонента помогает в дебаге. И это правда, ты можешь находить причины проблем в десятки раз быстрее, чем если бы ты не знал, что внутри. Но через какое-то время я понял, что есть еще более полезный эффект. Понимания внутренностей дает тебе понимания свойст компонента/подсистемы. А понимание свойств - это обязательный атрибут проектирования.
Не зная внутренностей, вы не понимаете свойств систем и следовательно не можете грамотно проектировать. Да, можно опираться на маркетинговый материал, но это очень наивный подход.
Примеров масса:
✅ Если вы знаете, как устроены бызы данных, то вы можете выбрать подходящую. Понимание индексов позволяет предсказать, что произойдет с выборками, если объем данных увеличиться в несколько раз. Или почему добавление индексов может снизить производительность вашего приложения.
✅ Если вы знаете, как работает Docker, то можете оценить риски изоляции и возможно начать использовать виртуалки.
✅ Если вы знаете, как работает HTTPS, то без проблем найдете проблему, когда корпоративный прокси заказчика делает man-in-the-middle и выкусывает CORS заголовки.
✅ Если вы знаете, что xslx файлы на самом деле zip с xml внутри, то вы можете предсказать, что конвертация в CSV может помочь решить проблему с со скоростью парсинга.
✅ Если вы понимаете, как работает JWT, то вы будете знать, что клиент и без "секрета" извлечь все данные с токена.
✅ Если вы понимаете, как внутри устроена файловая система, то поймете, почему лучше не хранить большое количество файлов в одной директории в ext2.
✅ Я встречал сениор разработчиков, которые, к примеру, думали, что React Native компилируется в нативных код и в результате не могли понять, когда стоит использовать RN, а когда нативные приложения.
✅ etc
Что думаете?
System Design: Real-Time Delivery Architecture at Twitter
В течении месяца я 2 раза в неделю буду скидывать классные видео про System Design. Не просто теория, а инженерные доклады про то, как устроены те или иные вещи в больших компаниях. Доклады отбираю сам и постить буду только те, что мне самому понравились.
Начну с отличного доклада про таймлайны Твиттера (26 млрд запросов на таймлайны в день).
Что было интересно узнать:
✅ Твиттер использует денормализацию для оптимизации производительности и хранит таймлайны в Redis кластере.
✅ Текст твитов добавляется на последнем этапе выборки.
✅ Интересная проблема с аккаунтами у которых десятки миллионов подписчиков.
Доклад очень рекомендую!
ССЫЛКА НА ВИДЕО: https://www.youtube.com/watch?v=J5auCY4ajK8
Интересен такой контент?
В течении месяца я 2 раза в неделю буду скидывать классные видео про System Design. Не просто теория, а инженерные доклады про то, как устроены те или иные вещи в больших компаниях. Доклады отбираю сам и постить буду только те, что мне самому понравились.
Начну с отличного доклада про таймлайны Твиттера (26 млрд запросов на таймлайны в день).
Что было интересно узнать:
✅ Твиттер использует денормализацию для оптимизации производительности и хранит таймлайны в Redis кластере.
✅ Текст твитов добавляется на последнем этапе выборки.
✅ Интересная проблема с аккаунтами у которых десятки миллионов подписчиков.
Доклад очень рекомендую!
ССЫЛКА НА ВИДЕО: https://www.youtube.com/watch?v=J5auCY4ajK8
Интересен такой контент?
YouTube
Real-Time Delivery Architecture at Twitter
With hundreds of millions of users, Twitter operates one of the world's largest real-time delivery systems, large enough and pervasive enough to exert noticeable "pressure" on the overall internet itself. At steady state, Twitter receives thousands of tweets…
System Design: The Evolution of Reddit.com's Architecture
Еще одно хорошее видео про system design. В этот раз это доклад про эволюцию архитектуры Reddit. Это одна из немногих компаний, которая использует EAV модель под такой нагрузкой. Но, что еще более интересно - это рассказы про фейлы, которые у них случались. Крутая история с read репликами, когда они стали терять данные и проблема оказалась в паре очень простых строчках кода.
ССЫЛКА НА ВИДЕО: https://www.youtube.com/watch?v=nUcO7n4hek4
Еще одно хорошее видео про system design. В этот раз это доклад про эволюцию архитектуры Reddit. Это одна из немногих компаний, которая использует EAV модель под такой нагрузкой. Но, что еще более интересно - это рассказы про фейлы, которые у них случались. Крутая история с read репликами, когда они стали терять данные и проблема оказалась в паре очень простых строчках кода.
ССЫЛКА НА ВИДЕО: https://www.youtube.com/watch?v=nUcO7n4hek4
YouTube
The Evolution of Reddit.com's Architecture
QCon San Francisco, the international software conference, returns November 17-21, 2025. Join senior software practitioners from early adopter companies as they share real-world insights and actionable advice to help you adopt the right technologies and practices.…
System Design: Scaling Instagram Infrastructure
Хороший доклад про масшабирования Instagram. От инфраструктуры до масштабирования команды разработки.
В Инстаграм достаточно стандартный стек технологий:
🔸 Бекэнд на Django
🔸 Postgres для пользователей, медиа, списков друзей
🔸 Cassandra с пользовательскими лентами и списками активностей
🔸 RabbitMQ для асинронных задач
🔸 Memcached для кеширования
Ежедневная нагрузка (2017-й год):
🔸400 млн. пользовалей
🔸4 млрд. лайков
🔸100 миллионов фото/видео загрузок
Изначально все это было в одном регионе и возникла необходимость мульти региональной инфраструктуры.
Решение:
✅ RabbitMQ: Django+RabbitMQ+Workers деплоится вместе, как одна сущность. Все асинхронные задачи выполняются в рамках одного региона.
✅ Postgres: просто read реплики переехали в другие датацентры и осталась синхронная репликация.
✅ Cassandra: просто настраивается нужное количество реплик
✅ Memcached: это самое интересное, но тут лучше смотреть видео 🙂
ССЫЛКА НА ВИДЕО: https://www.youtube.com/watch?v=hnpzNAPiC0E
Хороший доклад про масшабирования Instagram. От инфраструктуры до масштабирования команды разработки.
В Инстаграм достаточно стандартный стек технологий:
🔸 Бекэнд на Django
🔸 Postgres для пользователей, медиа, списков друзей
🔸 Cassandra с пользовательскими лентами и списками активностей
🔸 RabbitMQ для асинронных задач
🔸 Memcached для кеширования
Ежедневная нагрузка (2017-й год):
🔸400 млн. пользовалей
🔸4 млрд. лайков
🔸100 миллионов фото/видео загрузок
Изначально все это было в одном регионе и возникла необходимость мульти региональной инфраструктуры.
Решение:
✅ RabbitMQ: Django+RabbitMQ+Workers деплоится вместе, как одна сущность. Все асинхронные задачи выполняются в рамках одного региона.
✅ Postgres: просто read реплики переехали в другие датацентры и осталась синхронная репликация.
✅ Cassandra: просто настраивается нужное количество реплик
✅ Memcached: это самое интересное, но тут лучше смотреть видео 🙂
ССЫЛКА НА ВИДЕО: https://www.youtube.com/watch?v=hnpzNAPiC0E
YouTube
Scaling Instagram Infrastructure
Lisa Guo overviews Instagram's infrastructure, its history, multi-data center support, tuning uwsgi parameters for scaling, performance monitoring and diagnosis, and Django/Python upgrade.
Download the slides & audio at InfoQ: http://bit.ly/2uljG8j
This…
Download the slides & audio at InfoQ: http://bit.ly/2uljG8j
This…
System Design: Evolution of Financial Exchange Architectures
Для многих не самая привычная тема, но доклад крутой и отлично показывает проблемы мира финансовых бирж.
10 лет назад мы могли говорить про 100 тыс транзакций в секунду и отработку запроса в 1ms. Что поменялось за 10 лет? Ускорислось ли все в 10 раз. Ответ - да, мы сегодня видим 1млн транзакций в секунду и обработку запросов за 0.1ms на запрос (или даже до 0.001ms)
За 10 лет поменялось многое в мире фин. бирж:
🔸Архитектура
🔸Отказоустойчивость
🔸Производительность
🔸Деплоймент
Рекомендую доклад как минимум для расширения кругозора.
ССЫЛКА НА ВИДЕО: https://www.youtube.com/watch?v=qDhTjE0XmkE
Для многих не самая привычная тема, но доклад крутой и отлично показывает проблемы мира финансовых бирж.
10 лет назад мы могли говорить про 100 тыс транзакций в секунду и отработку запроса в 1ms. Что поменялось за 10 лет? Ускорислось ли все в 10 раз. Ответ - да, мы сегодня видим 1млн транзакций в секунду и обработку запросов за 0.1ms на запрос (или даже до 0.001ms)
За 10 лет поменялось многое в мире фин. бирж:
🔸Архитектура
🔸Отказоустойчивость
🔸Производительность
🔸Деплоймент
Рекомендую доклад как минимум для расширения кругозора.
ССЫЛКА НА ВИДЕО: https://www.youtube.com/watch?v=qDhTjE0XmkE
YouTube
Evolution of Financial Exchange Architectures
Video with transcript included: https://bit.ly/2ESvLJz
Martin Thompson looks at the evolution of financial exchanges and explores what is considered state of the art today.
This presentation was recorded at QCon London 2020: http://bit.ly/2VfRldq
#Fi…
Martin Thompson looks at the evolution of financial exchanges and explores what is considered state of the art today.
This presentation was recorded at QCon London 2020: http://bit.ly/2VfRldq
#Fi…
Речь Джона Кармака в родном университете в Канзасе
Кармак один из самых крутых инженеров. Если вдруг не знаете кто это, то обязательно почитайте про его проекты 😉
8-ми минутное видео для мотивации в выходной день.
ССЫЛКА НА ВИДЕО: https://www.youtube.com/watch?v=YOZnqjHkULc
В комментах оставлю ссылку на видео с оптимизацией Quake 3 по вычислению квадратного корня (один из лучшех разборов этой оптимизации)
Кармак один из самых крутых инженеров. Если вдруг не знаете кто это, то обязательно почитайте про его проекты 😉
8-ми минутное видео для мотивации в выходной день.
ССЫЛКА НА ВИДЕО: https://www.youtube.com/watch?v=YOZnqjHkULc
В комментах оставлю ссылку на видео с оптимизацией Quake 3 по вычислению квадратного корня (один из лучшех разборов этой оптимизации)
YouTube
John Carmack Receives Honorary Degree
Enjoy the videos and music you love, upload original content, and share it all with friends, family, and the world on YouTube.
Шифрование/кодирование/хеширование
Часто разработчики путают эти понятия.
К примеру, человек смотрит на JSON Web Token(JWT) и думает, что данные в нем зашифрованы. Или что логин и пароль в HTTP Basic Auth зашифрован, поскольку выглядит как набор случайных символов.
Давайте разберемся в теории, а потом посмотрим на примеры.
Шифрование
Что такое шифрование мы обычно все понимаем. Тут важно только заметить, что есть симметричные шифры (для шифрования и расшифровывания используется один и тот же ключ) и асимметричного шифры (когда у нас есть пара ключей, открытый и закрытый). Также асимметричная криптография может использоваться для цифровой подписи.
Примеры: AES, chacha20, RSA
Хеширование
Основная идея, что есть некая функция (хеш-функция), которая преобразовывает произвольной длины набор данных в набор данных фиксированной длины. То есть, мы можем 1ТБ захешировать в 10 байт (например, посчитать контрольную сумму данных). Главное отличие от шифрования - это то, что хеш-функция работает в одну сторону. Мы не можем из 10 байт контрольной суммы потом получить назад наши исходные данные.
Примеры: md5, bcrypt, MurmurHash
Кодирование
Кодирование не имеет целью сокрытие информации, а просто представление данных в другой форме. Обычно это делается для более удобной передачи, более удобного хранения и тд. (можно шифрование и сжатие отнести кодированию, но часто именно говорят "сжатие", "шифрование", поскольку тогда сразу понятны дополнительные свойства алгоритмов кодирования).
Примеры: base64, multipart/form-data, urlencoded
ЧАСТЫЕ НЕДОПОНИМАНИЯ
🔸JWT пейлоад закодирован base64 и подписан, но не зашифрован
JWT состоит из трех секций, разделенных точкой.
header.payload.signature. Каждая часть закодированы base64.
Идея base64 в том, чтобы бинарные данные представить в виде печатаемых символов таблицы ASCII и соответственно клиент может считать все данные из JWT.
🔸Пароли в базе хешируются, а не шифруются
Пароли в базе должны храниться в виде хешей . Из хеша нельзя получить пароль назад (только перебором) и для усложнения перебора используются соль и хеш-функции, предназначенные для хеширования именно паролей (scrypt, argon2 etc)
🔸HTTP BasicAuth кодирует логин и пароль в base64, но не шифрует
Передает в base64 = передает в открытом виде.
Digest Authentication работает по другому и использует уже md5 хеширование.
🔸В SSH при аутентификации по ключу мы не передаем приватный ключ на сервер
Если вас просят предоставить приватный и публичный ключ, чтобы настроить доступ к серверу, то никогда не давайте приватный. Нужен только публичный. Кроме того, даже во время аутентификации, приватный ключ всегда остается только на вашем компьютере.
🔸Для шифрования трафика в HTTPS используется симметричный шифр, а не пара из публичного и приватного ключей
Многие думают, что для шифрования трафика используется пара из публичного и приватного ключей, но на самом деле используется сессионный ключ и симметричный шифр (типа AES или Chacha20). Публичный и приватный ключ используется только во время установки TLS соединения.
Стоит ли углубляться в детали в следующих постах?
Делать разбор работы HTTPS, base64, хеш-таблиц и тд
Часто разработчики путают эти понятия.
К примеру, человек смотрит на JSON Web Token(JWT) и думает, что данные в нем зашифрованы. Или что логин и пароль в HTTP Basic Auth зашифрован, поскольку выглядит как набор случайных символов.
Давайте разберемся в теории, а потом посмотрим на примеры.
Шифрование
Что такое шифрование мы обычно все понимаем. Тут важно только заметить, что есть симметричные шифры (для шифрования и расшифровывания используется один и тот же ключ) и асимметричного шифры (когда у нас есть пара ключей, открытый и закрытый). Также асимметричная криптография может использоваться для цифровой подписи.
Примеры: AES, chacha20, RSA
Хеширование
Основная идея, что есть некая функция (хеш-функция), которая преобразовывает произвольной длины набор данных в набор данных фиксированной длины. То есть, мы можем 1ТБ захешировать в 10 байт (например, посчитать контрольную сумму данных). Главное отличие от шифрования - это то, что хеш-функция работает в одну сторону. Мы не можем из 10 байт контрольной суммы потом получить назад наши исходные данные.
Примеры: md5, bcrypt, MurmurHash
Кодирование
Кодирование не имеет целью сокрытие информации, а просто представление данных в другой форме. Обычно это делается для более удобной передачи, более удобного хранения и тд. (можно шифрование и сжатие отнести кодированию, но часто именно говорят "сжатие", "шифрование", поскольку тогда сразу понятны дополнительные свойства алгоритмов кодирования).
Примеры: base64, multipart/form-data, urlencoded
ЧАСТЫЕ НЕДОПОНИМАНИЯ
🔸JWT пейлоад закодирован base64 и подписан, но не зашифрован
JWT состоит из трех секций, разделенных точкой.
header.payload.signature. Каждая часть закодированы base64.
Идея base64 в том, чтобы бинарные данные представить в виде печатаемых символов таблицы ASCII и соответственно клиент может считать все данные из JWT.
🔸Пароли в базе хешируются, а не шифруются
Пароли в базе должны храниться в виде хешей . Из хеша нельзя получить пароль назад (только перебором) и для усложнения перебора используются соль и хеш-функции, предназначенные для хеширования именно паролей (scrypt, argon2 etc)
🔸HTTP BasicAuth кодирует логин и пароль в base64, но не шифрует
Передает в base64 = передает в открытом виде.
Digest Authentication работает по другому и использует уже md5 хеширование.
🔸В SSH при аутентификации по ключу мы не передаем приватный ключ на сервер
Если вас просят предоставить приватный и публичный ключ, чтобы настроить доступ к серверу, то никогда не давайте приватный. Нужен только публичный. Кроме того, даже во время аутентификации, приватный ключ всегда остается только на вашем компьютере.
🔸Для шифрования трафика в HTTPS используется симметричный шифр, а не пара из публичного и приватного ключей
Многие думают, что для шифрования трафика используется пара из публичного и приватного ключей, но на самом деле используется сессионный ключ и симметричный шифр (типа AES или Chacha20). Публичный и приватный ключ используется только во время установки TLS соединения.
Стоит ли углубляться в детали в следующих постах?
Делать разбор работы HTTPS, base64, хеш-таблиц и тд
🔥7
Немного офтопа про гонки 🙂
У меня есть хобби - гонки на треке (участвую в "Carrera Time Attack Series"). Поскольку я начинающий пилот, то приходится много всего изучать и прокачиваться.
Чтобы не терять ссылки, я сделал еще один телеграм канал, в которые забрасываю ссылки на полезный контент, связанный с гонками и моим прогрессом. Канал решил вести на английском.
Подписывайся, если интересно 🙂
ССЫЛКА НА КАНАЛ: https://t.me/newbie_racer
У меня есть хобби - гонки на треке (участвую в "Carrera Time Attack Series"). Поскольку я начинающий пилот, то приходится много всего изучать и прокачиваться.
Чтобы не терять ссылки, я сделал еще один телеграм канал, в которые забрасываю ссылки на полезный контент, связанный с гонками и моим прогрессом. Канал решил вести на английском.
Подписывайся, если интересно 🙂
ССЫЛКА НА КАНАЛ: https://t.me/newbie_racer
Мой переход в Google Cloud (и на позицию Non-Executive Director в WebbyLab) 😎
Не так давно кто-то в одном из чатов спрашивали не думаю ли я пойти в какую-то компанию из FAANG. На самом деле, мысли такой не было, но иногда приходили предложения пройти собеседования. И вот в ноябре 2020 года поступило предложение пройти собеседование в команду Google Cloud. Мне нравится Google, интересны их подходы, я постоянно использую их продукты, а работа в Google Cloud еще близко к моим интересам. Я решил попробовать свои силы. В Google есть 2 вертикали - техническая и менеджерская. Думаю, что мне проще было бы собеседоваться на менеджерскую позицию, но мне интересна была именно техническая позиция. Суммарно у меня было около 20 созвонов до получения оффера, с них 6 собеседований по типу экзаменов, 3 Google Team Fit созвона и разнообразные другие онлайн встречи.
Все собеседования, где нужно было писать код, я писал на JavaScript. Можно выбрать и любой другой язык. К примеру, в 2014-году я использовал Perl на собеседованиях. В тот раз это была позиция Google SRE в главном офисе в Mountain View. Тогда я зафейлил 4-е собеседование, но это отдельная история 🙂
Если вкратце, то занял весь процесс 4 месяца. Я не знал пройду ли до последнего момента, но в результате получил хороший оффер и классную позицию в крутой команде. В результате решил согласиться :) В WebbyLab же я перехожу с должности CEO на позицию Non-Executive Director.
Старт через неделю. Лето я пока еще в Киеве работаю удаленно, а вначале осени релокейт в Варшаву.
Руки чешутся приступить к задачам 🙂. Я не знаю, что из моей работы можно будет обсуждать публично, поэтом пока ничего не могу обещать. Но ожидаю, что качество контента только вырастет. История с youtube каналом тоже не стоит на месте 😉
Не так давно кто-то в одном из чатов спрашивали не думаю ли я пойти в какую-то компанию из FAANG. На самом деле, мысли такой не было, но иногда приходили предложения пройти собеседования. И вот в ноябре 2020 года поступило предложение пройти собеседование в команду Google Cloud. Мне нравится Google, интересны их подходы, я постоянно использую их продукты, а работа в Google Cloud еще близко к моим интересам. Я решил попробовать свои силы. В Google есть 2 вертикали - техническая и менеджерская. Думаю, что мне проще было бы собеседоваться на менеджерскую позицию, но мне интересна была именно техническая позиция. Суммарно у меня было около 20 созвонов до получения оффера, с них 6 собеседований по типу экзаменов, 3 Google Team Fit созвона и разнообразные другие онлайн встречи.
Все собеседования, где нужно было писать код, я писал на JavaScript. Можно выбрать и любой другой язык. К примеру, в 2014-году я использовал Perl на собеседованиях. В тот раз это была позиция Google SRE в главном офисе в Mountain View. Тогда я зафейлил 4-е собеседование, но это отдельная история 🙂
Если вкратце, то занял весь процесс 4 месяца. Я не знал пройду ли до последнего момента, но в результате получил хороший оффер и классную позицию в крутой команде. В результате решил согласиться :) В WebbyLab же я перехожу с должности CEO на позицию Non-Executive Director.
Старт через неделю. Лето я пока еще в Киеве работаю удаленно, а вначале осени релокейт в Варшаву.
Руки чешутся приступить к задачам 🙂. Я не знаю, что из моей работы можно будет обсуждать публично, поэтом пока ничего не могу обещать. Но ожидаю, что качество контента только вырастет. История с youtube каналом тоже не стоит на месте 😉