Программирование {BookFlow}
16.2K subscribers
1.58K photos
468 videos
145 files
2.1K links
Мы публикуем лекции и книги по программированию, видеоуроки, доклады с IT конференций, новости технологий.

Группа в https://vk.com/bookflow.

По всем вопросам @evgenycarter

РКН https://clck.ru/3KoAbH
Download Telegram
Игрушечная телеметрия на Arduino

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

https://habr.com/ru/articles/836334/

👉@Bookflow
👍10
Хотите уверенно проектировать гибкие, масштабируемые и надежные системы, используя современные архитектурные практики?

Присоединяйтесь к онлайн-курсу «Software Architect», где за 4 месяца под руководством практикующих экспертов вы разберёте:
✔️ актуальные тактики по работе с атрибутами качества архитектуры: доступность, отказоустойчивость, безопасность и многое другое;
✔️ основные паттерны и стили архитектуры, их плюсы, минусы и подводные камни;
✔️ технологические домены, включая бекенд, BigData, мобильную разработку, фронтенд и хранилища данных.

👨‍💻🛠👨🏻‍💻 Программа разработана для архитекторов, разработчиков и тимлидов.

Старт группы уже 30 августа. Доступна рассрочка и 🎁 10% скидка по промокоду otus10 до 31.08 включительно!

➡️ Пройдите тест прямо сейчас, чтобы чтобы активировать скидку и получить доступ ко всем открытым урокам курса: https://vk.cc/czYIF5

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
👎1
Чем опасен чистый RSA? Разбираем подводные камни

Алгоритм RSA является одним из первых представителей асимметричной криптографии, прошедший свой путь сквозь бурные дискуссии математиков, сквозь сотни успешных и безуспешных попыток взлома криптоаналитиками, сквозь тысячи неправильных применений и реализаций.

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

На хабре алгоритм RSA не раз обсуждался и критиковался, как например тут, тут, тут, но весь анализ сводился либо к анализу конкретного недостатка / уязвимости, либо к неправильному использованию / применению старого стандарта. Всё это неплохо, но не даёт полной картины того, чем всё же может быть опасна чистая математическая структура алгоритма RSA.

https://habr.com/ru/articles/838882/

👉@Bookflow
👍3
«Белое зеркало»: как AI улучшит жизнь в ближайшие 10 лет

2035 год кажется вам далеким будущим? А ведь он ближе, чем 2013-й…

В 2013-м было сложно представить, как AI-технологии изменят мир через десять лет. Но сейчас перспектива обрисовалась: к 2035-му искусственный интеллект проникнет везде, где сможет быть полезен. Как именно это произойдёт — лучше всех представляют люди, которые внедряют ИИ.

Для этой статьи мы попросили трёх наших экспертов провести нам экскурсию по нейросетевому будущему и по тому, как устроены процессы в ГПБ одиннадцать лет тому вперёд. Под катом: финтех, кодинг и наём сотрудников в 2035 году.

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

https://habr.com/ru/specials/831304/

👉 @bookflow
🤡9👍1🤔1
Советы по Spring 💡

Чтобы выполнять действия в транзакции базы данных, вы можете использовать шаблон Spring TransactionTemplate вместо @Transactional

👉 @bookflow
👍4
Нас часто просят разрабатывать системы с высокой доступностью, масштабируемостью и пропускной способностью. Что это именно означает?

Выше приведена шпаргалка по проектированию систем с распространенными решениями.

1. Высокая доступность
Это означает необходимость обеспечения высокого уровня времени работы. Обычно мы описываем целевой уровень дизайна как «3 девятки» или «4 девятки». «4 девятки» (99,99% времени работы) означает, что сервис может быть недоступен только 8,64 секунды в день.

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

- Горячий-горячий: два экземпляра получают один и тот же ввод и отправляют вывод в downstream-сервис. Если одна из сторон недоступна, другая сторона может сразу же взять на себя ее функции. Поскольку обе стороны отправляют вывод в downstream, downstream-система должна выполнять дедупликацию.

- Горячий-теплый: два экземпляра получают один и тот же ввод, но только горячая сторона отправляет вывод в downstream-сервис. Если горячая сторона недоступна, теплая сторона берет на себя функции и начинает отправлять вывод в downstream-сервис.

- Кластер с единственным лидером: один лидер получает данные от upstream-системы и реплицирует их на другие реплики.

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

2. Высокая пропускная способность
Это означает, что сервис должен обрабатывать большое количество запросов за определенный период времени. Обычно используются метрики QPS (запросов в секунду) или TPS (транзакций в секунду).

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

3. Высокая масштабируемость
Это означает, что система может быстро и легко расширяться, чтобы справляться с большим объемом (горизонтальная масштабируемость) или добавлением новых функциональностей (вертикальная масштабируемость). Обычно мы отслеживаем время отклика, чтобы решить, нужно ли масштабировать систему.

👉 @bookflow
👍6
Настраиваем iptables с нуля

Защита сетевых соединений сейчас просто необходима буквально на каждом устройстве, подключенном к Интернет. Тем более, на сервере. Расскажем и покажем конфигурирование штатного сетевого экрана Linux через интерфейс Iptables.


IPTables: NAT и Port forwarding

Продолжаем разговор про основополагающий инструмент управления трафиком, IPTables. Углубимся в реализацию таких технологий, как NAT и port forwarding.

👉 @sys_adminos
👍7
This media is not supported in your browser
VIEW IN TELEGRAM
Как выполняются SQL-запросы👨‍💻

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

Вот упрощенное объяснение порядка выполнения SQL:

• 𝐅𝐑𝐎𝐌/𝐉𝐎𝐈𝐍: Оператор FROM указывает таблицы, из которых будут извлечены данные. Клауза JOIN может использоваться для объединения данных из нескольких таблиц.
• 𝐖𝐇𝐄𝐑𝐄: Оператор WHERE используется для фильтрации данных на основе определенных условий.
• 𝐆𝐑𝐎𝐔𝐏 𝐁𝐘: Оператор GROUP BY используется для группировки данных по одной или нескольким колонкам.
• 𝐇𝐀𝐕𝐈𝐍𝐆: Оператор HAVING используется для фильтрации сгруппированных данных на основе определенных условий.
• 𝐒𝐄𝐋𝐄𝐂𝐓: Оператор SELECT указывает столбцы, которые будут возвращены в наборе результатов.
• 𝐃𝐈𝐒𝐓𝐈𝐍𝐂𝐓: Ключевое слово DISTINCT может использоваться для обеспечения возврата только уникальных строк в наборе результатов.
• 𝐎𝐑𝐃𝐄𝐑 𝐁𝐘: Оператор ORDER BY используется для сортировки набора результатов по возрастанию или убыванию.
• 𝐋𝐈𝐌𝐈𝐓: Оператор LIMIT может использоваться для ограничения количества возвращаемых строк.

👉 @bookflow
👍4
Проблема омографов в ударениях и как я ее решал

Это история о том, почему в опенсурсе нет TTS с нормальными ударениями, и как я пытался это исправить.

Обзор проблемы
Одной из немаловажных задач в синтезе речи является подготовка текста, а именно расстановка ударений в словах. Если по ударениям в обычных словах все более менее понятно (можно решать с помощью словарей), то с некоторыми "особенными" словами все немного сложнее. Эти особенные слова - омографы (за́мок/замо́к, ду́хи/духи́), а также ё-омографы (не́бо/нё́бо, все/всё́, пе́ред/перё́д, бе́рег/берё́г). Буква Ё часто используется в речи, но всё реже в текстах, потому найти качественные данные становится непростой задачей.

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

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

https://habr.com/ru/articles/767560/

👉 @bookflow
👍1
Ему не место на помойке: хакаем 15-летний электронный переводчик и пишем под него приложения

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

Я всегда любил находить новые применения стареньким девайсам, даже если обход защиты и разработка для них чего-то полезного занимала у меня некоторое время. И если с прошлыми моими статьями, где я привносил новую жизнь смартфонам на Android 2.3, а затем и на Android 1.5, всё понятно - девайсы получили возможность не только быть звонилками, но и вполне полноценными смартфонами, то в случае таких необычных девайсов, как электронные переводчики - всё гораздо интереснее, ведь по сути, это дешёвые альтернативы таким легендарным устройствам, как HP Jornada! Недавно я купил переводчик Ectaco за 1.500 рублей на Windows CE, обошел встроенную оболочку, написал программу, которая твикает реестр и даже портировал туда эмулятор NES. Интересно узнать об этом процессе во всех подробностях? Тогда добро пожаловать под кат!

https://habr.com/ru/companies/timeweb/articles/840418/

👉 @bookflow
👍5
Подборка Telegram каналов для программистов

Системное администрирование 📌

https://t.me/devops_star DevOps Star (Звезда Девопса)
https://t.me/i_linux Системный администратор
https://t.me/linuxchmod Linux
https://t.me/sys_adminos Системный Администратор
https://t.me/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
https://t.me/sysadminof Книги для админов, полезные материалы
https://t.me/i_odmin Все для системного администратора
https://t.me/i_odmin_book Библиотека Системного Администратора
https://t.me/i_odmin_chat Чат системных администраторов
https://t.me/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
https://t.me/sysadminoff Новости Линукс Linux

1C разработка 📌
https://t.me/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С

Программирование C++📌
https://t.me/cpp_lib Библиотека C/C++ разработчика
https://t.me/cpp_knigi Книги для программистов C/C++
https://t.me/cpp_geek Учим C/C++ на примерах

Программирование Python 📌
https://t.me/pythonofff Python академия. Учи Python быстро и легко🐍
https://t.me/BookPython Библиотека Python разработчика
https://t.me/python_real Python подборки на русском и английском
https://t.me/python_360 Книги по Python Rus

Java разработка 📌
https://t.me/BookJava Библиотека Java разработчика
https://t.me/java_360 Книги по Java Rus
https://t.me/java_geek Учим Java на примерах

GitHub Сообщество 📌
https://t.me/Githublib Интересное из GitHub

Базы данных (Data Base) 📌
https://t.me/database_info Все про базы данных

Мобильная разработка: iOS, Android 📌
https://t.me/developer_mobila Мобильная разработка
https://t.me/kotlin_lib Подборки полезного материала по Kotlin

Фронтенд разработка 📌
https://t.me/frontend_1 Подборки для frontend разработчиков
https://t.me/frontend_sovet Frontend советы, примеры и практика!
https://t.me/React_lib Подборки по React js и все что с ним связано

Разработка игр 📌
https://t.me/game_devv Все о разработке игр

Библиотеки 📌
https://t.me/book_for_dev Книги для программистов Rus
https://t.me/programmist_of Книги по программированию
https://t.me/proglb Библиотека программиста
https://t.me/bfbook Книги для программистов
https://t.me/books_reserv Книги для программистов

БигДата, машинное обучение 📌
https://t.me/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning

Программирование 📌
https://t.me/bookflow Лекции, видеоуроки, доклады с IT конференций
https://t.me/coddy_academy Полезные советы по программированию
https://t.me/rust_lib Полезный контент по программированию на Rust
https://t.me/golang_lib Библиотека Go (Golang) разработчика
https://t.me/itmozg Программисты, дизайнеры, новости из мира IT
https://t.me/php_lib Библиотека PHP программиста 👨🏼‍💻👩‍💻
https://t.me/nodejs_lib Подборки по Node js и все что с ним связано
https://t.me/ruby_lib Библиотека Ruby программиста

QA, тестирование 📌
https://t.me/testlab_qa Библиотека тестировщика

Шутки программистов 📌
https://t.me/itumor Шутки программистов

Защита, взлом, безопасность 📌
https://t.me/thehaking Канал о кибербезопасности
https://t.me/xakep_1 Статьи из "Хакера"

Книги, статьи для дизайнеров 📌
https://t.me/ux_web Статьи, книги для дизайнеров

Английский 📌
https://t.me/UchuEnglish Английский с нуля

Математика 📌
https://t.me/Pomatematike Канал по математике
https://t.me/phis_mat Обучающие видео, книги по Физике и Математике

Excel лайфхак📌
https://t.me/Excel_lifehack

https://t.me/tikon_1 Новости высоких технологий, науки и техники💡
https://t.me/mir_teh Мир технологий (Technology World)

Вакансии 📌
https://t.me/sysadmin_rabota Системный Администратор
https://t.me/progjob Вакансии в IT
👍1
Media is too big
VIEW IN TELEGRAM
Реальное Собеседование на Junior Backend разработчика

0:00 - Какие вопросы задавали
1:58 - Как работает Интернет
4:10 - Как браузер формирует запрос
5:05 - Как передать файл
5:55 - Как безопасно передать банковскую транзакцию
7:14 - Что возвращает сервер
9:46 - Вопрос про авторизацию со звездочкой*
11:06 - Зачем нужна пара access и refresh токены
12:55 - JWT или сессии — что лучше?
14:11 - Проектирование авторизации (практический пример)
16:20 - Как улучшить Dockerfile
19:50 - Какую зарплату мне предложили

источник

👉 @bookflow
👍6🤝1
Логирование, трассировка и метрики — это три столпа наблюдаемости системы.

На диаграмме выше представлены их определения и типичные архитектуры.

🔹 Логирование
Логирование записывает дискретные события в системе. Например, можно зафиксировать входящий запрос или обращение к базе данных как события. Логирование имеет наибольший объем данных. Стек ELK (Elastic-Logstash-Kibana) часто используется для построения платформы анализа логов. Обычно мы определяем стандартизированный формат логирования для различных команд, чтобы можно было использовать ключевые слова при поиске среди большого количества логов.

🔹 Трассировка
Трассировка обычно ориентирована на запросы. Например, пользовательский запрос проходит через API-шлюз, балансировщик нагрузки, сервис A, сервис B и базу данных, что может быть визуализировано в системах трассировки. Это полезно при попытках выявить узкие места в системе. Мы используем OpenTelemetry для демонстрации типичной архитектуры, объединяющей три столпа в единую структуру.

🔹 Метрики
Метрики обычно представляют собой агрегируемую информацию из системы. Например, QPS сервиса, отзывчивость API, задержка сервиса и т.д. Исходные данные записываются в базы данных временных рядов, такие как InfluxDB. Prometheus извлекает данные и преобразует их на основе предопределенных правил оповещения. Затем данные отправляются в Grafana для отображения или в менеджер оповещений, который затем рассылает уведомления или предупреждения по электронной почте, SMS или в Slack.

👉 @bookflow
👍5
Зачем в iPhone чип, который убивает FaceID

Начнём с начала: как система FaceID выглядит, и как она работает:

Аппаратно эта система состоит из пары камер - ИК и RGB, и двух видов ИК-излучателей - обычной подсветки, и специализированного прожектора точек.

Снимаем с iPhone X шкурку, убираем всё лишнее, и видим блок фронтальных камер в голом виде. ИК подсветка существует отдельно, но все остальные компоненты у нас в руках — они надёжно закреплены в этой металлической рамке.

Тут мы видим ИК камеру и прожектор ИК точек. Именно на этой инфракрасной парочке держится работа систем TrueDepth и FaceID. И главный герой сегодняшнего

https://habr.com/ru/articles/841708/

👉 @bookflow
👍81
Кривые Безье

Кривые Безье были постоянной темой в моей карьере фронтенд-инженера. Я широко использовал их в своей работе - в анимации и SVG-путях иллюстраций и иконок. Однако только недавно я заинтересовался пониманием логики, лежащей в основе их поведения. Эта статья раскрыла для меня тайны, связанные с использованием команд кривых путей, и дала мне более глубокое понимание веб-анимации. В этой статье я поделюсь своими интересными открытиями в области кривых Безье.

В CSS-анимации функции смягчения задают скорость изменения свойства с течением времени. Существует 3 типа функций смягчения - линейная, ступенчатая и кубическая кривая Безье.

https://blog.richardekwonye.com/bezier-curves

👉 @bookflow
🔥3👍2
Как компании доставляют код в продакшн?

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

Шаг 1: Владелец продукта создает требования и пользовательские истории.

Шаг 2: Команда разработчиков определяет приоритеты для историй и организует спринты.

Шаг 3: Разработчики коммитят код в систему контроля версий.

Шаг 4: Сервер автоматизации собирает код и запускает тесты. Проводятся проверки покрытия кода и качества.

Шаг 5: Если сборка успешна, артефакты сохраняются в репозитории артефактов. Сборка затем разворачивается в среде разработчиков.

Шаг 6: Функции тестируются независимо в нескольких изолированных средах.

Шаг 7: Команда QA тестирует функции в средах для контроля качества. Проводятся различные виды тестирования.

Шаг 8: После проверки сборка разворачивается в среде для тестирования пользовательского принятия для окончательной валидации.

Шаг 9: Кандидаты на релиз, успешно прошедшие тестирование, могут быть развернуты в продакшене согласно графику выпуска. Для управления рисками используются фиче-флаги и методы постепенного развертывания.

Шаг 10: Команда по надежности сайта (SRE) мониторит продакшен и сообщает о проблемах. Команды приоритизируют и исправляют проблемы в соответствии с определенными политиками.

👉 @bookflow
👍4🥰1
Как поделить не деля или оптимизация деления компиляторам(и)

Если вы никогда не пробовали смотреть как код на C++ разворачивается компилятором в код Assembly – вас ждёт много сюрпризов, причём, не нужно смотреть какой-то замудренный исходный код полный templates или других сложных конструкций: рассмотрите следующий snippet:

uint8_t div10(uint8_t x)
{
return x/10;
}

https://habr.com/ru/articles/833470/

👉 @bookflow
🔥2
Шпаргалка по SQL

👉@Bookflow
👍5👎1
Микросервисы для тех, кто прикидывается разработчиком. Часть 1

«Скажите, какие основные преимущества микросервисов и почему?». Вероятно, это самый популярный вопрос последних 6–10 лет на любом собеседовании для бэкенд разработчика. Каким‑то чудом он даже обогнал: «Назовите три принципа ООП» и «Чем отличается класс от объекта?»

https://habr.com/ru/articles/833544/

👉@Bookflow
👍4