Код
#статьи

GitHub digest #14: и посчитать, и в шахматы сыграть

Выясняем, чем пахнет код, и печатаем реактивные компоненты.

Иллюстрация: Оля Ежак для Skillbox Media

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

Скриншоты из терминала


Termshot

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

Простой скриншот можно сделать с помощью команды termshot --show-cmd — lolcat -f <(figlet -f big foobar). Выглядеть он будет так:

Скриншот: homeport / GitHub

Проект доступен для Linux и macOS. Установить его можно с помощью пакетного менеджера Homebrew или собрать самому.

Открыть репозиторий

Коллекция запахов плохого кода


Bad Code Smells

Bad Code Smells — репозиторий с коллекцией исходников сайта Code Smell Catalog, в котором хранится подборка разных «запахов» кода.

Запахи кода (code smells) — термин, который популяризировали Мартин Фаулер и Кент Бек в книге Refactoring: Improving the Design of Existing Code. Он обозначает признаки потенциальных проблем в коде. Так же как неприятный запах может сигнализировать, например, о том, что еда испортилась, так и «запахи кода» указывают на возможные недостатки или проблемы в программе.

Ниже пример кода «с запашком», который возвращает словарь с кодом статуса и данными, проводя при этом дополнительную проверку статуса при каждом вызове. Это нагружает проект и заставляет компьютер выполнять лишние действия.

def create_foo() -> 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']
...

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

def create_foo() -> 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()

Проект пригодится как начинающим, так и опытным программистам. Новички могут изучить примеры плохого кода и стараться не делать так в своих проектах. Матёрые разработчики часто ссылаются на «запахи кода» во время код-ревью.

Открыть репозиторий

Управление музыкой из терминала


Retro

Retro — утилита для воспроизведения музыки с помощью командной строки. Она просто ищет и проигрывает аудиофайлы из разных источников.

Примеры команд Retro:

  • retro play «https://www.youtube.com/....» — воспроизводит трек по ссылке.
  • retro play queue_music — запускает плейлист.
  • retro play ~/Music/ — воспроизводит все файлы в папке по очереди.
  • retro play ~/Music/Despacito.mp3 — включает конкретный файл.
Так работает Retro
Изображение: Malwarize / GitHub
Открыть репозиторий

Библиотека для работы с SVG


SVG.js

SVG.js — JavaScript-библиотека для работы с векторными изображениями в формате SVG. С её помощью можно анимировать картинки, менять их размер, цвета и другие свойства.

Главный плюс библиотеке в небольшом размере, а это значит, что её можно использовать в проектах и не нагружать систему. Кроме того, она работает быстрее конкурентов, например Snap.svg.

Открыть репозиторий

Бесплатный учитель шахмат


Chessli2

Chessli2 — бесплатное приложение для обучения игре в шахматы. Инструмент анализирует партии, выявляет ошибки и подсказывает, как можно улучшить свои навыки. В основе проекта лежат материалы Lichess — популярного сайта для шахматистов. Также приложение может получать данные сыгранных матчей на Lichess и анализировать их.

Приложение можно запустить локально по инструкции в репозитории. Для интеграции с Lichess понадобится токен API.

Открыть репозиторий

UI для лендингов


Page UI

Page UI — коллекция бесплатных шаблонов и компонентов для разработки красивых лендингов с помощью React и Next.js. С её помощью можно быстро реализовывать популярные интерфейсы. Page UI совместима с Tailwind CSS, что упрощает кастомизацию шаблонов и тем.

Лендинг, сделанный с помощью Page UI
Скриншот: Shipixen / Page UI
Открыть репозиторий

Распечатываем React


ReactToPrint

ReactToPrint — утилита, с помощью которой можно легко распечатать содержимое компонента React. Например, инструмент пригодится, если вы хотите добавить на свой сайт возможность распечатать статью или сохранить её в формате PDF.

Скриншот: ReactToPrint / Skillbox Media

У проекта есть демо, в котором можно попробовать разные варианты печати компонентов.

Открыть репозиторий

Универсальный перетаскиватель


Swapy

Swapy — JavaScript-библиотека, с помощью которой любой элемент веб-приложения можно сделать перетаскиваемым. При этом рядом стоящие элементы изменят свой размер или рассортируются так, чтобы вместе вписываться в заданную сетку.

Перетаскивание элемента с помощью Swapy
Скриншот: Swapy / Skillbox Media

Библиотеку можно использовать со всеми популярными фреймворками для фронтенда. Swapy доступен в пакетном менеджере PNPM.

Открыть репозиторий

Рисуем графики


Recharts

Recharts — React-библиотека, с помощью которой можно создавать графики и диаграммы на основе компонентов React. Готовые рисунки можно экспортировать в формате SVG, поэтому библиотека подходит как просто для визуализации данных, так и для разработки сервиса генерации графиков.

Скриншот: Recharts
Открыть репозиторий

Калькулятор


Numara

Numara — минималистичный калькулятор, который моментально считает выражения и выдаёт результат по мере ввода. Приложение построено на библиотеке Math.js и фреймворке Electron.

Изображение: bornova / GitHub

Помимо обычных функций калькулятора, Numara поддерживает переменные. Это значит, что можно посчитать промежуточный результат, сохранить его и после использовать для других подсчётов. Также приложение строит графики функций, конвертирует валюты и считает выражения с датами, например, «сегодня + 3 недели».

Numara доступен для Windows, macOS и Linux. Есть веб-версия, которую можно открыть даже в мобильном браузере.

Открыть репозиторий

Умный навигатор по папкам


Zoxide

Zoxide — команда cd на стероидах. Она не просто помогает перемещаться по директориям компьютера, а запоминает, какие папки вы используете чаще всего. К ним можно переходить с помощью горячих клавиш, а не долгого ввода пути к папке. Утилита работает во всех популярных оболочках терминала.

Открыть репозиторий

Конвертер в Markdown и JSON


Docling

Docling — мощный конвертер, который получает на вход документы в форматах PDF, DOCX, PPTX, XLSX, HTML и AsciiDoc, а на выходе генерирует файл в формате Markdown или JSON. При этом утилита быстро обрабатывает даже огромные коллекции документов.

Готовые файлы в JSON и Markdown нужны для нейросетей. Всё дело в том, что они не очень хорошо понимают привычные для человека форматы, поэтому документы надо чётко структурировать. Разработчики интегрировали LlamaIndex и LangChain, чтобы полученные файлы сразу отправлялись к языковой модели.

Открыть репозиторий

Редактор видео


MoviePy

MoviePy — Python-библиотека для редактирования видеофайлов. С её помощью можно нарезать видео на фрагменты, склеивать их, добавлять титры, музыку и эффекты. Главное преимущество MoviePy в том, что каждый пиксель видео доступен для редактирования с помощью кода. Это значит, что можно реализовывать практически любые анимации и переходы.

Если вы не занимаетесь монтажом, но хорошо пишете код на Python, то можете стать участником проекта. Сейчас команда MoviePy ищет разработчиков.

Открыть репозиторий

Консольный файловый менеджер


Yazi

Yazi — файловый менеджер для терминала, написанный на Rust. Все операции ввода и вывода в нём выполняются асинхронно, а задачи распределяются на несколько потоков. Всё это делает Yazi невероятно быстрым.

Также в файловом менеджере есть продвинутый поиск, предпросмотр файлов, можно выбрать сразу несколько файлов и отображение папок в отдельных вкладках. Yazi доступен для Windows, Linux и macOS.

Открыть репозиторий

Больше интересного про код — в нашем телеграм-канале. Подписывайтесь!

Изучайте IT на практике — бесплатно

Курсы за 2990 0 р.

Я не знаю, с чего начать
Научитесь: Профессия Python-разработчик Узнать больше
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована