HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-21
1 <p><a>#статьи</a></p>
1 <p><a>#статьи</a></p>
2 <ul><li>12 дек 2024</li>
2 <ul><li>12 дек 2024</li>
3 <li>0</li>
3 <li>0</li>
4 </ul><p>Выясняем, чем пахнет код, и печатаем реактивные компоненты.</p>
4 </ul><p>Выясняем, чем пахнет код, и печатаем реактивные компоненты.</p>
5 <p>Иллюстрация: Оля Ежак для Skillbox Media</p>
5 <p>Иллюстрация: Оля Ежак для Skillbox Media</p>
6 <p>Востоковед, интересующийся IT. В прошлом редактор раздела "Системный блок" журнала "Fакел", автор журналов Computer Gaming World RE, Upgrade Special, руководитель веб-ресурсов компании 1С-Softclub.</p>
6 <p>Востоковед, интересующийся IT. В прошлом редактор раздела "Системный блок" журнала "Fакел", автор журналов Computer Gaming World RE, Upgrade Special, руководитель веб-ресурсов компании 1С-Softclub.</p>
7 <p>В этом дайджесте, помимо уже привычных утилит для работы в терминале можно найти виртуального шахматного тренера, минималистичный калькулятор и Python-библиотеку для обработку видео.</p>
7 <p>В этом дайджесте, помимо уже привычных утилит для работы в терминале можно найти виртуального шахматного тренера, минималистичный калькулятор и Python-библиотеку для обработку видео.</p>
8 <p><a>Termshot</a> - утилита, с помощью которой можно сделать скриншот терминала. Особенно она полезна для тех, кто работает с операционной системой без пользовательского интерфейса, например на серверной версии. Удобно, что перед созданием скриншота можно отредактировать вывод терминала: удалить лишние строки или скрыть конфиденциальную информацию.</p>
8 <p><a>Termshot</a> - утилита, с помощью которой можно сделать скриншот терминала. Особенно она полезна для тех, кто работает с операционной системой без пользовательского интерфейса, например на серверной версии. Удобно, что перед созданием скриншота можно отредактировать вывод терминала: удалить лишние строки или скрыть конфиденциальную информацию.</p>
9 <p>Простой скриншот можно сделать с помощью команды termshot --show-cmd - lolcat -f &lt;(figlet -f big foobar). Выглядеть он будет так:</p>
9 <p>Простой скриншот можно сделать с помощью команды termshot --show-cmd - lolcat -f &lt;(figlet -f big foobar). Выглядеть он будет так:</p>
10 <em>Скриншот:</em><a><em>homeport</em></a><em>/</em><a><em>GitHub</em></a><p>Проект доступен для Linux и macOS. Установить его можно с помощью пакетного менеджера<a>Homebrew</a>или собрать самому.</p>
10 <em>Скриншот:</em><a><em>homeport</em></a><em>/</em><a><em>GitHub</em></a><p>Проект доступен для Linux и macOS. Установить его можно с помощью пакетного менеджера<a>Homebrew</a>или собрать самому.</p>
11 <p><a>Открыть репозиторий</a></p>
11 <p><a>Открыть репозиторий</a></p>
12 <p><a>Bad Code Smells</a> - репозиторий с коллекцией исходников сайта Code Smell Catalog, в котором хранится подборка разных "запахов" кода.</p>
12 <p><a>Bad Code Smells</a> - репозиторий с коллекцией исходников сайта Code Smell Catalog, в котором хранится подборка разных "запахов" кода.</p>
13 <p>Запахи кода (code smells) - термин, который популяризировали Мартин Фаулер и Кент Бек в книге<a>Refactoring: Improving the Design of Existing Code</a>. Он обозначает признаки потенциальных проблем в коде. Так же как неприятный запах может сигнализировать, например, о том, что еда испортилась, так и "запахи кода" указывают на возможные недостатки или проблемы в программе.</p>
13 <p>Запахи кода (code smells) - термин, который популяризировали Мартин Фаулер и Кент Бек в книге<a>Refactoring: Improving the Design of Existing Code</a>. Он обозначает признаки потенциальных проблем в коде. Так же как неприятный запах может сигнализировать, например, о том, что еда испортилась, так и "запахи кода" указывают на возможные недостатки или проблемы в программе.</p>
14 <p>Ниже пример кода "с запашком", который возвращает словарь с кодом статуса и данными, проводя при этом дополнительную проверку статуса при каждом вызове. Это нагружает проект и заставляет компьютер выполнять лишние действия.</p>
14 <p>Ниже пример кода "с запашком", который возвращает словарь с кодом статуса и данными, проводя при этом дополнительную проверку статуса при каждом вызове. Это нагружает проект и заставляет компьютер выполнять лишние действия.</p>
15 def create_foo() -&gt; dict: response = requests.get('https://api.github.com/events') if response.status_code != requests.codes.ok: return {'status_code': response.status_code, 'foo': None} return { 'status_code': response.status_code, 'foo': Foo(**response.json()) } foo_response: dict = create_foo() if foo['status_code'] != requests.codes.ok: foo: Foo = foo_response['foo'] ...<p>Лучше было бы использовать исключение для сигнализации об ошибке и сразу выбрасывать ошибку, если что-то пошло не так. Это упростит код и сделает его более читаемым.</p>
15 def create_foo() -&gt; dict: response = requests.get('https://api.github.com/events') if response.status_code != requests.codes.ok: return {'status_code': response.status_code, 'foo': None} return { 'status_code': response.status_code, 'foo': Foo(**response.json()) } foo_response: dict = create_foo() if foo['status_code'] != requests.codes.ok: foo: Foo = foo_response['foo'] ...<p>Лучше было бы использовать исключение для сигнализации об ошибке и сразу выбрасывать ошибку, если что-то пошло не так. Это упростит код и сделает его более читаемым.</p>
16 def create_foo() -&gt; Foo: response = requests.get('https://api.github.com/events') if response.status_code != requests.codes.ok: raise Exception('Что-то пошло не так') return Foo(**response.json()) foo: Foo = create_foo()<p>Проект пригодится как начинающим, так и опытным программистам. Новички могут изучить примеры плохого кода и стараться не делать так в своих проектах. Матёрые разработчики часто ссылаются на "запахи кода" во время код-ревью.</p>
16 def create_foo() -&gt; Foo: response = requests.get('https://api.github.com/events') if response.status_code != requests.codes.ok: raise Exception('Что-то пошло не так') return Foo(**response.json()) foo: Foo = create_foo()<p>Проект пригодится как начинающим, так и опытным программистам. Новички могут изучить примеры плохого кода и стараться не делать так в своих проектах. Матёрые разработчики часто ссылаются на "запахи кода" во время код-ревью.</p>
17 <p><a>Открыть репозиторий</a></p>
17 <p><a>Открыть репозиторий</a></p>
18 <p><a>Retro</a> - утилита для воспроизведения музыки с помощью командной строки. Она просто ищет и проигрывает аудиофайлы из разных источников.</p>
18 <p><a>Retro</a> - утилита для воспроизведения музыки с помощью командной строки. Она просто ищет и проигрывает аудиофайлы из разных источников.</p>
19 <p>Примеры команд Retro:</p>
19 <p>Примеры команд Retro:</p>
20 <ul><li>retro play "https://www.youtube.com/...." - воспроизводит трек по ссылке.</li>
20 <ul><li>retro play "https://www.youtube.com/...." - воспроизводит трек по ссылке.</li>
21 <li>retro play queue_music - запускает плейлист.</li>
21 <li>retro play queue_music - запускает плейлист.</li>
22 <li>retro play ~/Music/ - воспроизводит все файлы в папке по очереди.</li>
22 <li>retro play ~/Music/ - воспроизводит все файлы в папке по очереди.</li>
23 <li>retro play ~/Music/Despacito.mp3 - включает конкретный файл.</li>
23 <li>retro play ~/Music/Despacito.mp3 - включает конкретный файл.</li>
24 </ul>Так работает Retro<em>Изображение:<a>Malwarize</a>/<a>GitHub</a></em><p><a>Открыть репозиторий</a></p>
24 </ul>Так работает Retro<em>Изображение:<a>Malwarize</a>/<a>GitHub</a></em><p><a>Открыть репозиторий</a></p>
25 <p><a>SVG.js</a> - JavaScript-библиотека для работы с векторными изображениями в формате SVG. С её помощью можно анимировать картинки, менять их размер, цвета и другие свойства.</p>
25 <p><a>SVG.js</a> - JavaScript-библиотека для работы с векторными изображениями в формате SVG. С её помощью можно анимировать картинки, менять их размер, цвета и другие свойства.</p>
26 <p>Главный плюс библиотеке в небольшом размере, а это значит, что её можно использовать в проектах и не нагружать систему. Кроме того, она работает быстрее конкурентов, например<a>Snap.svg</a>.</p>
26 <p>Главный плюс библиотеке в небольшом размере, а это значит, что её можно использовать в проектах и не нагружать систему. Кроме того, она работает быстрее конкурентов, например<a>Snap.svg</a>.</p>
27 <p><a>Открыть репозиторий</a></p>
27 <p><a>Открыть репозиторий</a></p>
28 <p><a>Chessli2</a> - бесплатное приложение для обучения игре в шахматы. Инструмент анализирует партии, выявляет ошибки и подсказывает, как можно улучшить свои навыки. В основе проекта лежат материалы<a>Lichess</a> - популярного сайта для шахматистов. Также приложение может получать данные сыгранных матчей на Lichess и анализировать их.</p>
28 <p><a>Chessli2</a> - бесплатное приложение для обучения игре в шахматы. Инструмент анализирует партии, выявляет ошибки и подсказывает, как можно улучшить свои навыки. В основе проекта лежат материалы<a>Lichess</a> - популярного сайта для шахматистов. Также приложение может получать данные сыгранных матчей на Lichess и анализировать их.</p>
29 <p>Приложение можно запустить локально по инструкции в репозитории. Для интеграции с Lichess понадобится токен API.</p>
29 <p>Приложение можно запустить локально по инструкции в репозитории. Для интеграции с Lichess понадобится токен API.</p>
30 <p><a>Открыть репозиторий</a></p>
30 <p><a>Открыть репозиторий</a></p>
31 <p><a>Page UI</a> - коллекция бесплатных шаблонов и компонентов для разработки красивых лендингов с помощью React и Next.js. С её помощью можно быстро реализовывать популярные интерфейсы. Page UI совместима с Tailwind CSS, что упрощает кастомизацию шаблонов и тем.</p>
31 <p><a>Page UI</a> - коллекция бесплатных шаблонов и компонентов для разработки красивых лендингов с помощью React и Next.js. С её помощью можно быстро реализовывать популярные интерфейсы. Page UI совместима с Tailwind CSS, что упрощает кастомизацию шаблонов и тем.</p>
32 Лендинг, сделанный с помощью Page UI<em>Скриншот:<a>Shipixen</a>/ Page UI</em><p><a>Открыть репозиторий</a></p>
32 Лендинг, сделанный с помощью Page UI<em>Скриншот:<a>Shipixen</a>/ Page UI</em><p><a>Открыть репозиторий</a></p>
33 <p><a>ReactToPrint</a> - утилита, с помощью которой можно легко распечатать содержимое компонента React. Например, инструмент пригодится, если вы хотите добавить на свой сайт возможность распечатать статью или сохранить её в формате PDF.</p>
33 <p><a>ReactToPrint</a> - утилита, с помощью которой можно легко распечатать содержимое компонента React. Например, инструмент пригодится, если вы хотите добавить на свой сайт возможность распечатать статью или сохранить её в формате PDF.</p>
34 <em>Скриншот:<a>ReactToPrint</a>/ Skillbox Media</em><p>У проекта есть<a>демо</a>, в котором можно попробовать разные варианты печати компонентов.</p>
34 <em>Скриншот:<a>ReactToPrint</a>/ Skillbox Media</em><p>У проекта есть<a>демо</a>, в котором можно попробовать разные варианты печати компонентов.</p>
35 <p><a>Открыть репозиторий</a></p>
35 <p><a>Открыть репозиторий</a></p>
36 <p><a>Swapy</a> - JavaScript-библиотека, с помощью которой любой элемент веб-приложения можно сделать перетаскиваемым. При этом рядом стоящие элементы изменят свой размер или рассортируются так, чтобы вместе вписываться в заданную сетку.</p>
36 <p><a>Swapy</a> - JavaScript-библиотека, с помощью которой любой элемент веб-приложения можно сделать перетаскиваемым. При этом рядом стоящие элементы изменят свой размер или рассортируются так, чтобы вместе вписываться в заданную сетку.</p>
37 Перетаскивание элемента с помощью Swapy<em>Скриншот:<a>Swapy</a>/ Skillbox Media</em><p>Библиотеку можно использовать со всеми популярными фреймворками для фронтенда. Swapy доступен в пакетном менеджере PNPM.</p>
37 Перетаскивание элемента с помощью Swapy<em>Скриншот:<a>Swapy</a>/ Skillbox Media</em><p>Библиотеку можно использовать со всеми популярными фреймворками для фронтенда. Swapy доступен в пакетном менеджере PNPM.</p>
38 <p><a>Открыть репозиторий</a></p>
38 <p><a>Открыть репозиторий</a></p>
39 <p><a>Recharts</a> - React-библиотека, с помощью которой можно создавать графики и диаграммы на основе компонентов React. Готовые рисунки можно экспортировать в формате SVG, поэтому библиотека подходит как просто для визуализации данных, так и для разработки сервиса генерации графиков.</p>
39 <p><a>Recharts</a> - React-библиотека, с помощью которой можно создавать графики и диаграммы на основе компонентов React. Готовые рисунки можно экспортировать в формате SVG, поэтому библиотека подходит как просто для визуализации данных, так и для разработки сервиса генерации графиков.</p>
40 <em>Скриншот:<a>Recharts</a></em><p><a>Открыть репозиторий</a></p>
40 <em>Скриншот:<a>Recharts</a></em><p><a>Открыть репозиторий</a></p>
41 <p><a>Numara</a> - минималистичный калькулятор, который моментально считает выражения и выдаёт результат по мере ввода. Приложение построено на библиотеке Math.js и фреймворке Electron.</p>
41 <p><a>Numara</a> - минималистичный калькулятор, который моментально считает выражения и выдаёт результат по мере ввода. Приложение построено на библиотеке Math.js и фреймворке Electron.</p>
42 <em>Изображение:<a>bornova</a>/<a>GitHub</a></em><p>Помимо обычных функций калькулятора, Numara поддерживает переменные. Это значит, что можно посчитать промежуточный результат, сохранить его и после использовать для других подсчётов. Также приложение строит графики функций, конвертирует валюты и считает выражения с датами, например, "сегодня + 3 недели".</p>
42 <em>Изображение:<a>bornova</a>/<a>GitHub</a></em><p>Помимо обычных функций калькулятора, Numara поддерживает переменные. Это значит, что можно посчитать промежуточный результат, сохранить его и после использовать для других подсчётов. Также приложение строит графики функций, конвертирует валюты и считает выражения с датами, например, "сегодня + 3 недели".</p>
43 <p>Numara доступен для Windows, macOS и Linux. Есть<a>веб-версия</a>, которую можно открыть даже в мобильном браузере.</p>
43 <p>Numara доступен для Windows, macOS и Linux. Есть<a>веб-версия</a>, которую можно открыть даже в мобильном браузере.</p>
44 <p><a>Открыть репозиторий</a></p>
44 <p><a>Открыть репозиторий</a></p>
45 <p><a>Zoxide</a> - команда cd на стероидах. Она не просто помогает перемещаться по директориям компьютера, а запоминает, какие папки вы используете чаще всего. К ним можно переходить с помощью горячих клавиш, а не долгого ввода пути к папке. Утилита работает во всех популярных оболочках терминала.</p>
45 <p><a>Zoxide</a> - команда cd на стероидах. Она не просто помогает перемещаться по директориям компьютера, а запоминает, какие папки вы используете чаще всего. К ним можно переходить с помощью горячих клавиш, а не долгого ввода пути к папке. Утилита работает во всех популярных оболочках терминала.</p>
46 <p><a>Открыть репозиторий</a></p>
46 <p><a>Открыть репозиторий</a></p>
47 <p><a>Docling</a> - мощный конвертер, который получает на вход документы в форматах PDF, DOCX, PPTX, XLSX, HTML и AsciiDoc, а на выходе генерирует файл в формате Markdown или JSON. При этом утилита быстро обрабатывает даже огромные коллекции документов.</p>
47 <p><a>Docling</a> - мощный конвертер, который получает на вход документы в форматах PDF, DOCX, PPTX, XLSX, HTML и AsciiDoc, а на выходе генерирует файл в формате Markdown или JSON. При этом утилита быстро обрабатывает даже огромные коллекции документов.</p>
48 <p>Готовые файлы в JSON и Markdown нужны для нейросетей. Всё дело в том, что они не очень хорошо понимают привычные для человека форматы, поэтому документы надо чётко структурировать. Разработчики интегрировали LlamaIndex и LangChain, чтобы полученные файлы сразу отправлялись к языковой модели.</p>
48 <p>Готовые файлы в JSON и Markdown нужны для нейросетей. Всё дело в том, что они не очень хорошо понимают привычные для человека форматы, поэтому документы надо чётко структурировать. Разработчики интегрировали LlamaIndex и LangChain, чтобы полученные файлы сразу отправлялись к языковой модели.</p>
49 <p><a>Открыть репозиторий</a></p>
49 <p><a>Открыть репозиторий</a></p>
50 <p><a>MoviePy</a> - Python-библиотека для редактирования видеофайлов. С её помощью можно нарезать видео на фрагменты, склеивать их, добавлять титры, музыку и эффекты. Главное преимущество MoviePy в том, что каждый пиксель видео доступен для редактирования с помощью кода. Это значит, что можно реализовывать практически любые анимации и переходы.</p>
50 <p><a>MoviePy</a> - Python-библиотека для редактирования видеофайлов. С её помощью можно нарезать видео на фрагменты, склеивать их, добавлять титры, музыку и эффекты. Главное преимущество MoviePy в том, что каждый пиксель видео доступен для редактирования с помощью кода. Это значит, что можно реализовывать практически любые анимации и переходы.</p>
51 <p>Если вы не занимаетесь монтажом, но хорошо пишете код на Python, то можете стать участником проекта. Сейчас команда MoviePy ищет разработчиков.</p>
51 <p>Если вы не занимаетесь монтажом, но хорошо пишете код на Python, то можете стать участником проекта. Сейчас команда MoviePy ищет разработчиков.</p>
52 <p><a>Открыть репозиторий</a></p>
52 <p><a>Открыть репозиторий</a></p>
53 <p><a>Yazi</a> - файловый менеджер для терминала, написанный на Rust. Все операции ввода и вывода в нём выполняются асинхронно, а задачи распределяются на несколько потоков. Всё это делает Yazi невероятно быстрым.</p>
53 <p><a>Yazi</a> - файловый менеджер для терминала, написанный на Rust. Все операции ввода и вывода в нём выполняются асинхронно, а задачи распределяются на несколько потоков. Всё это делает Yazi невероятно быстрым.</p>
54 <p>Также в файловом менеджере есть продвинутый поиск, предпросмотр файлов, можно выбрать сразу несколько файлов и отображение папок в отдельных вкладках. Yazi доступен для Windows, Linux и macOS.</p>
54 <p>Также в файловом менеджере есть продвинутый поиск, предпросмотр файлов, можно выбрать сразу несколько файлов и отображение папок в отдельных вкладках. Yazi доступен для Windows, Linux и macOS.</p>
55 <p><a>Открыть репозиторий</a></p>
55 <p><a>Открыть репозиторий</a></p>
56 <a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>
56 <a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>