Мы только что выпустили версию 1.0 нового проекта, qudtlib, который предлагает конвертацию единиц измерения и связанные с ней функции для более чем 1700 единиц измерения, при этом он довольно мал: размер jar с зависимостями составляет ~400 кБ. Проект основан на онтологии QUDT. В настоящее время она доступна только в Java, но в дальнейшем планируется расширение.
Например
Допустим, вы хотите перевести футы в световые годы, вот как будет выглядеть ваш java-код:
Qudt.convert(
new BigDecimal("1"),
Qudt.Units.FT,
Qudt.Units.LY);
--> 3.221738542107027933386435678630668E-17ly
Хорошо, откуда мы знаем, что это правильно? Легко: мы знаем, что свет проходит примерно один фут за наносекунду, поэтому если мы умножим это число на количество наносекунд в году, что составляет…
Qudt.convert(
new BigDecimal("1"),
Qudt.Units.YR,
Qudt.Units.NanoSEC);
--> 31557600000000000ns
… мы получим около 1. Давайте попробуем:
Qudt.convert(
new BigDecimal("1"),
Qudt.Units.FT,
Qudt.Units.LY).getValue()
.multiply(
Qudt.convert(
new BigDecimal("1"),
Qudt.Units.YR,
Qudt.Units.NanoSEC)
.getValue()));
--> 1.01670336216396744710635782571955168476800000000000
Получилось около 1. Кажется, работает 😉
Взлом
Нужная нам часть онтологии QUDT, включая некоторые дополнительные данные, которые мы генерируем, имеет размер около 3,5 МБ. Библиотеки, необходимые для доступа к данным для обеспечения нужной нам функциональности, имеют еще 30+ МБ. Мы посчитали, что это слишком много для такой простой задачи, как преобразование градусов Цельсия в градусы Фаренгейта (или футов в световые годы).
Поэтому мы перенесли всю тяжелую работу в препроцессор (т.е. maven), чтобы создать java-класс, который при запуске инстанцирует все объекты, представляющие соответствующую часть онтологии QUDT. Никаких SPARQL-запросов или другого мувинга RDF во время выполнения, ни одной внешней зависимости во время выполнения, всегда пожалуйста.
Большим плюсом такого подхода является то, что решение будет относительно легко перенести на другие языки.
Что в дорожной карте?
Typescript.
Что еще?
Ну, вы все еще не знаете, сколько футов составляет световой год, так почему бы вам не попробовать qudtlib и не узнать это?