MapSCII – World map in terminal
MapSCII — это инструмент для отображения карт мира прямо в терминале с использованием символов ASCII и Брайля. Для подключения на Mac и Linux достаточно выполнить команду telnet mapscii.me, предварительно установив telnet (например, через brew install telnet), а на Windows — использовать PuTTY.
Проект демонстрирует, как можно творчески подойти к визуализации данных в консоли, превращая географическую информацию в доступный и стильный текстовый формат. Это не только практично для быстрого просмотра карт без графического интерфейса, но и служит напоминанием о гибкости командной строки.
Комментарии (20)
- Обсуждение технических аспектов работы карты в различных терминалах и через Telnet, включая проблемы с отображением и поддержкой мыши.
- Упоминание о возрасте проекта (более 8 лет) и его доступности для vintage-компьютеров через Telnet.
- Сравнение проекта с другими известными работами, такими как Google Maps для NES и ежедневной игрой FoodGuessr.
- Восторженные отзывы о визуальной реализации и использовании OpenStreetMap для детализации до уровня улиц.
- Несколько комментаторов изначально спутали проект с чем-то связанным со StarCraft II из-за аббревиатуры SCII.
Introduction to Ada: a project-based exploration with rosettas
Ada в действии: рисуем розетки
Создадим консольную утилиту, генерирующую SVG-файл с анимированными розетками (гипотрохоидами, как в Spirograph™). Проект показывает, что Ada 2022 — не только для безопасно-критичных систем, но и для обычных задач.
Зачем Ada?
- Жёсткая проверка типов и компилятор как «партнёр».
- Читаемость вместо краткости, минимум неопределённого поведения.
- Отлично подходит для встраиваемых, авиа-, железнодорожных и автомобильных систем.
Как работает программа
- Принимает параметры из командной строки.
- Вычисляет координаты точек кривой.
- Записывает XML-совместимый SVG.
- Открывается в любом браузере без сторонних библиотек.
Структура проекта
rosetta/
├── alire.toml # зависимости Alire
├── src/
│ ├── rosetta.adb # точка входа
│ ├── svg.adb/.ads # генерация SVG
│ ├── curve.adb/.ads # математика кривой
└── Makefile
Ключевые типы
type Point is record
X, Y : Float;
end record;
type Rosetta_Params is record
R, r, d : Float; -- радиусы и смещение
Steps : Positive;
end record;
Генерация кривой
function Hypotrochoid(P : Rosetta_Params) return Point_Array is
Result : Point_Array(1 .. P.Steps);
Angle : Float := 0.0;
Delta : constant Float := 2.0 * Pi / Float(P.Steps);
begin
for I in Result'Range loop
Result(I) := (
X => (P.R - P.r) * Cos(Angle) + P.d * Cos((P.R - P.r) / P.r * Angle),
Y => (P.R - P.r) * Sin(Angle) - P.d * Sin((P.R - P.r) / P.r * Angle)
);
Angle := Angle + Delta;
end loop;
return Result;
end Hypotrochoid;
Создание SVG
procedure Write_SVG(Path : Point_Array; Filename : String) is
File : File_Type;
begin
Create(File, Out_File, Filename);
Put_Line(File, "<svg ...>");
Put(File, "<path d='M");
for P of Path loop
Put(File, Float'Image(P.X) & "," & Float'Image(P.Y) & " ");
end loop;
Put_Line(File, "' stroke='black' fill='none'/>");
Put_Line(File, "</svg>");
Close(File);
end Write_SVG;
Сборка и запуск
alr build
./bin/rosetta --R 100 --r 40 --d 80 --steps 360
# открыть rosetta.svg в браузере
Что дальше
- Добавить CLI-парсер
GNAT.Command_Line. - Анимировать через
<animate>в SVG. - Портировать на микроконтроллер и выводить на дисплей.
Полный код: github.com/AdaCore/rosetta-ada-demo
Комментарии (45)
- Пользователи просят чёткий список возможностей Ada, доступных бесплатно в GNAT, и тех, что требуют лицензию AdaCore; ответ: весь язык доступен в FSF-GNAT, а проприетарный вариант лишь обновляется чаще и сопровождается коммерчески.
- Участники вспоминают, что писали на Ada ещё в 90-е, отмечают приятный «паскалеподобный» синтаксис и интерес к новым фичам Ada 2022 и SPARK.
- Ada применяется в высоконадёжных системах (NVidia, автопром, проект Muen), но в коммерческой разработке её доля снизилась, уступив C/C++.
- Появились ресурсы для старта: learn.adacore.com, ada-lang.io и репозиторий awesome-ada.
- Обсуждается, помогут ли LLM вернуть Ada в мейнстрим: одни считают, что строгость языка полезна для проверки сгенерированного кода, другие — что LLM сделают все языки нишевыми.
Git-Annex
git-annex — управляет большими файлами в git, не храня их содержимое. Поддерживает синхронизацию, резервное копирование, шифрование и работу офлайн.
Для любителей командной строки — полный функционал; для остальных — git-annex assistant превращает всё в простую синхронизацию папок.
Быстрый старт
Ключевые темы
Примеры
Архиватор Боб хранит данные на множестве отключённых дисков. git-annex показывает, где лежит нужный файл, и позволяет безопасно переупорядочивать дерево. Ночью cron-команды добавляют новое и отслеживают дубликаты.
Кочевница Алиса синхронизирует ноутбук, USB-диск, сервер и облако как git-удалённые репозитории. В самолёте или кафе она выбирает, что скачать, что удалить, а при подключении всё автоматически сливается обратно.
Комментарии (51)
- git-annex отлично подходит для персонального управления большими файлами на множестве носителей, включая офлайн-диски, и гарантирует контроль целостности.
- Пользователи жалуются на сложность освоения, «тяжёлый» Haskell-стек зависимостей и проблемы с плагинами облачных провайдеров.
- В много-юзерных репозиториях «магические» ветви git-annex плохо масштабируются; для коллаборации чаще выбирают Git-LFS.
- Крупные репо (десятки ТБ и сотни тысяч файлов) замедляются до минут ожидания на каждую операцию, особенно при дефолтных «параноидальных» проверках.
- Git-annex и LFS решают разные задачи: первый — распределённое резервное хранение, второй — версионирование больших файлов в dev-репозиториях.
Code formatting comes to uv experimentally 🔥 Горячее 💬 Длинная дискуссия
uv format — экспериментальная команда в uv для форматирования кода. Под капотом вызывает Ruff, но не требует отдельной установки.
Как начать
# форматировать текущий проект
uv format
# проверить, без изменений
uv format --check
# только нужные файлы
uv format src/ tests/
Передача аргументов Ruff
Всё, что идёт после --, уходит напрямую в Ruff:
# исключить файлы
uv format -- --exclude="*_pb2.py"
# задать длину строки
uv format -- --line-length 100
Пока функция флажком --preview, но уже позволяет обойтись без отдельного бинарника ruff.
Комментарии (242)
- Пользователи спорят: стоит ли встраивать форматирование (
ruff format) вuvили это «feature-creep». - Одни рады единой команде
uv format, упрощающей жизнь новичкам и командам; другие требуют оставить инструменты раздельными, как в UNIX-way. - Создатели подчеркивают:
ruffиuvне сливаются;uv formatлишь удобный алиас, аналогичныйcargo fmt.