LINUX.ORG.RU

Сообщения dataman

 

libarchive 3.7.5

Новости — Open Source
Группа Open Source

14 сентября состоялся корректирующий выпуск 3.7.5 библиотеки libarchive, с устранением многих ошибок и уязвимостей. Библиотека и сопутствующие утилиты написаны на языке C и распространяются по лицензии New BSD.

Исправления уязвимостей:

( читать дальше... )

>>> Подробности

 , , , ,

dataman
()

Unicode 16.0

Новости — Open Source
Unicode 16.0
Группа Open Source

10 сентября состоялся выпуск 16.0 стандарта кодирования символов Unicode.

В этой версии добавлено 5185 новых символов, включая:

  • 3995 дополнительных символов египетских иероглифов;
  • семь новых письменностей (тулу, албанский Тодри, гарай (Сенегал), сунвар Джентича, гурунг, кират и ол-онал);
  • семь новых символов эмодзи: лицо с «мешками» под глазами, отпечаток пальца, безлистное дерево, корнеплод, арфа, лопата и брызги;
  • флаг острова Сарк;
  • более 700 символов устаревшей вычислительной техники.

На данный момент стандарт содержит 154998 символов, 168 письменностей и 3790 эмодзи.

>>> Подробности

 , ,

dataman
()

Groonga 14.0.7

Новости — Open Source
Groonga 14.0.7
Группа Open Source

После месяца разработки состоялся выпуск 14.0.7 полнотекстовой поисковой системы и столбцовой системы управления базами данных Groonga, написанной на языках C и C++, и распространяемой по лицензии GNU LGPL 2.1.

( читать дальше... )

>>> Подробности

 , , , ,

dataman
()

Телеметрии в LLVM быть?!

Форум — Talks

 , , ,

dataman
()

Midnight Commander 4.8.32

Новости — Open Source
Midnight Commander 4.8.32
Группа Open Source

После почти семи месяцев разработки состоялся выпуск 4.8.32 консольного менеджера файлов Midnight Commander, написанного на языке C и рапространяемого по лицензии GNU GPL 3.

Список изменений:

  • реализована передача текущей директории в эмулятор терминала с помощью escape-последовательности OSC 7, что позволяет открывать в ЭТ новые вкладки с этой директорией;
  • сохранение атрибутов файлов при копировании или перемещении в файловой системе ext2;
  • имя временного каталога теперь уникально при каждом запуске;
  • скрытие пароля в диалоге прогресса выполнения файловых операций в виртуальных файловых системах (например, SFTP);
  • поддержка команды FTP reget при перемещении файлов;
  • до наносекундной точности улучшена поддержка времени для систем, отличных от Linux (macOS, BSD, AIX, Solaris);
  • удалено использование mmap для упрощения сопровождения кода;
  • добавлено корректное определение архивов RAR 7;
  • в mcedit улучшена подсветка синтаксиса кода на C и C++;
  • добавлена man-страница mcdiff.1;
  • уточнено экранирование пробелов и скобок в mc.ext.ini;
  • добавлены новые темы оформления: modarcon16-defbg-thin, modarcon16-thin, modarcon16root-defbg-thin, modarcon16root-thin, modarin256-defbg-thin, modarin256-thin, modarin256root-defbg-thin, modarin256root-thin, julia256root, xoria256-thin (на скриншоте) и xoria256root-thin;
  • исправлено падение при копировании файлов из архивов tar;
  • исправлено падение при входе в удаленный архив;
  • увеличена скорость открытия образов ISO;
  • исправлен ряд других ошибок.

>>> Подробности

 , , ,

dataman
()

bfs 4.0 и 4.0.1

Новости — Open Source
bfs 4.0 и 4.0.1
Группа Open Source

16 и 19 августа состоялись выпуски 4.0 и 4.0.1 многопоточной консольной утилиты поиска файлов bfs (Breadth-First Search, поиск в ширину), написанной на языке C и распространяемой по лицензии BSD.

( читать дальше... )

>>> Подробности

 , , , ,

dataman
()

Обновление подсветки синтаксиса

Форум — Linux-org-ru

В движке сайта – большое обновление подсветки синтаксиса. Добавлены:

ARMASM
AVRASM
AWK
Basic
Brainfuck
C
JSON
Julia
Lisp
LLVM
Makefile
MIPSASM
Nim
Nix
Ocaml
Scheme
TCL
TypeScript
Vim
WASM
X86ASM
YAML

Подробности

Перемещено hobbit из linux-org-ru

 , ,

dataman
()

trurl 0.14

Новости — Интернет
trurl 0.14
Группа Интернет

30 июля состоялся выпуск 0.14 консольной утилиты trurl (tr for URLs), написанной на языке C с использованием функции curl_url_set библиотеки libcurl. Утилита предназначена для разбора и других манипуляций с URL-адресами.

Список изменений:

  • вместо функции strncasemp используется собственная реализация;
  • добавлена поддержка префикса strict командой --get;
  • добавлена поддержка оператора условного присваивания ?= командой --set;
  • удалён лишний перевод строки при выводе предупреждения;
  • в документацию добавлены коды возврата.

>>> Подробности

 , , , ,

dataman
()

jdupes 1.28.0

Новости — Open Source
jdupes 1.28.0
Группа Open Source

27 июля состоялся выпуск 1.28.0 консольной утилиты jdupes, написанной на языке C и распространяемой по лицензии MIT.
Утилита предназначена для поиска дублирующихся файлов, с возможностью их удаления, блочной дедупликации или замены на ссылки.

В новой версии:

  • перенесены исправления безопасности из разрабатываемой версии 2;
  • исправлено падение при создании новой базы хешей;
  • увеличена производительность вычисления длины имени;
  • улучшены меры предосторожности при интерактивном запросе об удалении;
  • во избежание потери базы данных хешей, она не перезаписываетя при нехватке места на диске.

>>> Подробности

 , , , ,

dataman
()

dracut-ng

Форум — Talks

Тут увидел: https://github.com/void-linux/void-packages/pull/51344

Как пишут в NEWS:

Release 100 of dracut-ng serves as a drop-in replacement for the original dracut project. This release marks a significant milestone in our commitment to providing an alternative, community-driven solution for creating an initramfs image. The original dracut project is no longer actively maintained (its last tagged release dates back to 2022). Forking allows the community to take ownership of the project and address maintenance issues independently.

This release includes fixes for compatibility with the latest Linux kernel (v6.8), Linux firmware, and systemd (v255).

A new dracut module named net-lib has been added to enhance networking support.

Support for new Linux kernel modules have been added to support new devices, including the Surface Laptop 4 and MacBook Pro.

The project builds test containers daily for the following Linux distributions: Arch Linux, Debian, Fedora, Gentoo, openSUSE, and Ubuntu, in various configurations (systemd, OpenRC, glibc, musl). All enabled integration tests have passed at the time of this release.

  1. https://github.com/dracutdevs/dracut
  2. https://github.com/dracut-ng/dracut-ng

 , ,

dataman
()

Сколько нужно памяти для компиляции bmake?

Форум — Development

Пытаюсь скомпилировать (GCC 14.1) bmake (исходники). Свободных 6Gb не хватает, система намертво виснет.
Есть желающие попытаться? :)

 , , ,

dataman
()

GNU nano 8.1 «De dag van de bitterkoekjespudding»

Новости — Open Source
GNU nano 8.1 «De dag van de bitterkoekjespudding»
Группа Open Source

12 июля состоялся выпуск 8.1 «De dag van de bitterkoekjespudding» редактора текста GNU nano.

( читать дальше... )

>>> Подробности

 , , , ,

dataman
()

Уменьшить минимальный размер изображений

Форум — Linux-org-ru

Часто какое-нибудь лого программы или библиотеки имеет размер меньше, чем 400x400. Ещё чаще оно не квадратное.
Хотелось бы уменьшить до 200.

 , , ,

dataman
()

μt — C++20 библиотека модульного тестирования

Форум — Development

μt¹ – небольшая (~100 Кб), header-only (единственный файл ut.hpp) C++20 библиотека модульного тестирования.
В отличие от большинства аналогов (сatch³, doctest⁴, etc.) основана не на макросах, а на возможностях стандарта C++20.
Библиотекой поддерживаются техники TDD (разработка через тестирование), BDD (разработка через поведение) и язык BDD Gherkin.
Зависит только от std.

Примеры:

#include <boost/ut.hpp> // import boost.ut;

constexpr auto sum(auto... values) { return (values + ...); }

int main() {
  using namespace boost::ut;

  "sum"_test = [] {
    expect(sum(0) == 0_i);
    expect(sum(1, 2) == 3_i);
    expect(sum(1, 2) > 0_i and 41_i == sum(40, 2));
  };
}
#include <boost/ut.hpp>
#include <chrono>
#include <iostream>
#include <string>
#include <string_view>

namespace benchmark {
struct benchmark : boost::ut::detail::test {
  explicit benchmark(std::string_view _name)
      : boost::ut::detail::test{"benchmark", _name} {}

  template <class Test>
  auto operator=(Test _test) {
    static_cast<boost::ut::detail::test&>(*this) = [&_test, this] {
      const auto start = std::chrono::high_resolution_clock::now();
      _test();
      const auto stop = std::chrono::high_resolution_clock::now();
      const auto ns =
          std::chrono::duration_cast<std::chrono::nanoseconds>(stop - start);
      std::clog << "[" << name << "] " << ns.count() << " ns\n";
    };
  }
};

[[nodiscard]] auto operator""_benchmark(const char* _name,
                                        decltype(sizeof("")) size) {
  return ::benchmark::benchmark{{_name, size}};
}

#if defined(__GNUC__) or defined(__clang__)
template <class T>
void do_not_optimize(T&& t) {
  asm volatile("" ::"m"(t) : "memory");
}
#else
#pragma optimize("", off)
template <class T>
void do_not_optimize(T&& t) {
  reinterpret_cast<char volatile&>(t) =
      reinterpret_cast<char const volatile&>(t);
}
#pragma optimize("", on)
#endif
}  // namespace benchmark

int main() {
  using namespace boost::ut;
  using namespace benchmark;

  "string creation"_benchmark = [] {
    std::string created_string{"hello"};
    do_not_optimize(created_string);
  };
}

BDD:

#include <boost/ut.hpp>

int main() {
  using namespace boost::ut::literals;
  using namespace boost::ut::operators::terse;
  using namespace boost::ut::bdd;

  "Scenario"_test = [] {
    given("I have...") = [] {
      when("I run...") = [] {
        then("I should have...") = [] { 1_u == 1u; };
        then("I should have...") = [] { 1u == 1_u; };
      };
    };
  };

  feature("Calculator") = [] {
    scenario("Addition") = [] {
      given("I have number 40") = [] {
        auto number = 40;
        when("I add 2 to number") = [&number] { number += 2; };
        then("I expect number to be 42") = [&number] { 42_i == number; };
      };
    };
  };

  // clang-format off
  scenario("Addition");
    given("I have number 40");
      auto number = 40;

    when("I add 2 to number");
      number += 2;

    then("I expect number to be 42");
      42_i == number;
}

Gherkin:

#include <boost/ut.hpp>
#include <fstream>
#include <numeric>
#include <streambuf>
#include <string>

template <class T>
class calculator {
 public:
  auto enter(const T& value) -> void { values_.push_back(value); }
  auto add() -> void {
    result_ = std::accumulate(std::cbegin(values_), std::cend(values_), T{});
  }
  auto sub() -> void {
    result_ = std::accumulate(std::cbegin(values_) + 1, std::cend(values_),
                              values_.front(), std::minus{});
  }
  auto get() const -> T { return result_; }

 private:
  std::vector<T> values_{};
  T result_{};
};

int main(int argc, const char** argv) {
  using namespace boost::ut;

  bdd::gherkin::steps steps = [](auto& steps) {
    steps.feature("Calculator") = [&] {
      steps.scenario("*") = [&] {
        steps.given("I have calculator") = [&] {
          calculator<int> calc{};
          steps.when("I enter {value}") = [&](int value) { calc.enter(value); };
          steps.when("I press add") = [&] { calc.add(); };
          steps.when("I press sub") = [&] { calc.sub(); };
          steps.then("I expect {value}") = [&](int result) {
            expect(that % calc.get() == result);
          };
        };
      };
    };
  };

  // clang-format off
  "Calculator"_test = steps |
    R"(
      Feature: Calculator

        Scenario: Addition
          Given I have calculator
           When I enter 40
           When I enter 2
           When I press add
           Then I expect 42

        Scenario: Subtraction
          Given I have calculator
           When I enter 4
           When I enter 2
           When I press sub
           Then I expect 2
    )";
  // clang-format on

  if (argc == 2) {
    const auto file = [](const auto path) {
      std::ifstream file{path};
      return std::string{(std::istreambuf_iterator<char>(file)),
                         std::istreambuf_iterator<char>()};
    };

    "Calculator"_test = steps | file(argv[1]);
  }
}

  1. https://github.com/boost-ext/ut
  2. https://boost-ext.github.io/ut – примеры, документация, бенчмарки
  3. https://github.com/catchorg/Catch2
  4. https://github.com/doctest/doctest
  5. https://boost-ext.github.io/ut/denver-cpp-2019 – слайд-презентация.
  6. https://www.youtube.com/watch?v=irdgFyxOs_Y – презентация на CppCon 2020.

 , , , ,

dataman
()

Intermediate Graphics Library 1.0.0

Новости — Разработка
Intermediate Graphics Library 1.0.0
Группа Разработка

Состоялся выпуск 1.0.0 C++ библиотеки Intermediate Graphics Library (IGL). Это кроссплатформенная библиотека для управления графическим процессором. Она предоставляет единый низкоуровневый кроссплатформенный интерфейс поверх различных графических API.

( читать дальше... )

>>> Подробности

 , , , ,

dataman
()

yyjson 0.10.0

Новости — Разработка
yyjson 0.10.0
Группа Разработка

Состоялся выпуск 0.10.0 высокопроизводительной библиотеки yyjson, написанной на языке C (стандарт C89), распространяемой по лицензии MIT и предназначенной для чтения и модификации данных в формате JSON (RFC 8259).
Библиотека также поддерживает RFC JSON Pointer, JSON Patch и JSON Merge Patch.

( читать дальше... )

>>> Подробности

 , , ,

dataman
()

ugrep 6.2.0

Новости — Open Source
ugrep 6.2.0
Группа Open Source

Состоялся выпуск 6.2.0 быстрой консольной утилиты поиска текста ugrep, написанной на языке C++ и распространяемой по лицензии BSD-3.

( читать дальше... )

>>> Подробности

 , , , ,

dataman
()

lug — DSL с расширенным PEG для C++17

Форум — Development

После 6.5 лет забвения автор выпустил версию 0.2.0 header-only библиотеки lug.

using namespace lug::language;
		rule JSON;
		rule ExponentPart   = lexeme[ "[Ee]"_rx > ~"[+-]"_rx > +"[0-9]"_rx ];
		rule FractionalPart = lexeme[ "."_sx > +"[0-9]"_rx ];
		rule IntegralPart   = lexeme[ "0"_sx | "[1-9]"_rx > *"[0-9]"_rx ];
		rule Number         = lexeme[ ~"-"_sx > IntegralPart > ~FractionalPart > ~ExponentPart ];
		rule Boolean        = lexeme[ "true"_sx | "false" ];
		rule Null           = lexeme[ "null" ];
		rule UnicodeEscape  = lexeme[ 'u' > "[0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]"_rx ];
		rule Escape         = lexeme[ "\\" > ("[/\\bfnrt]"_rx | UnicodeEscape) ];
		rule String         = lexeme[ "\"" > *("[^\"\\\u0000-\u001F]"_rx | Escape) > "\"" ];
		rule Array          = "[" > JSON > *("," > JSON) > "]";
		rule Object         = "{" > String > ":" > JSON > *("," > String > ":" > JSON) > "}";
		JSON                = Object | Array | String | Number | Boolean | Null;
		grammar_ = start(JSON);

https://github.com/jwtowner/lug

 , , , ,

dataman
()

RTranslator 2.0.0 и 2.0.1

Новости — Android
Группа Android

После почти трёхлетней паузы состоялись выпуски 2.0.0 и 2.0.1 оффлайн-переводчика для Android RTranslator, написанного на языках C++ и Java и распространяемого по лицензии Apache 2.0.
Для работы приложению необходим достаточно быстрый смартфон с, как минимум, 6GB памяти.
Поддерживаемые языки: арабский, болгарский, каталонский, китайский, чешский, датский, немецкий, греческий, английский, испанский, финский, французский, хорватский, итальянский, японский, корейский, голландский, польский, португальский, румынский, русский, словацкий, шведский, тамильский, тайский, турецкий, украинский, урду и вьетнамский.

( читать дальше... )

>>> Подробности

 , , ,

dataman
()

Расширение smartUp Gestures удалено из Chrome Web Store

Форум — Talks

Недавно обнаружил, что перестали работать жесты мышью.
Оказалось, что smartUp Gestures было удалено из Chrome Web Store, и автоматически отключено.
За несколько дней так и не нашёл годной замены.

Репозиторий https://github.com/zimocode/smartup заархивирован.
Но нашёлся форк: https://github.com/Germxu/smartup-relay.

Видимо, причина удаления в этом:

-                               const oninstallAd = sub.cons.reason!="install" || sub.cons.donateData?.ad[0]?.find(ad => ad.type === "ad-oninstall_popup" && !ad.on);
-                               if (oninstallAd) break;
-                               chrome.tabs.create({url:"https://www.usechatgpt.ai/partner-referral?ref=smartupgestures"});
+                               // const oninstallAd = sub.cons.reason!="install" || sub.cons.donateData?.ad[0]?.find(ad => ad.type === "ad-oninstall_popup" && !ad.on);
+                               // if (oninstallAd) break;
+                               // chrome.tabs.create({url:"https://www.usechatgpt.ai/partner-referral?ref=smartupgestures"});

 , , , ,

dataman
()

RSS подписка на новые темы