LINUX.ORG.RU

Сообщения RazrFalcon

 

resvg 0.3 - библиотека отрисовки SVG

Новости — Open Source
resvg 0.3 - библиотека отрисовки SVG
Группа Open Source
  • Добавлена поддержка расширенной разметки (advanced layout) текста (списки x, y, dx, dy, rotate). Примеры: 1, 2.
  • Добавлена поддержка элемента symbol.
  • Добавлена поддержка вложенных svg элементов.
  • Добавлена поддержка парсинга элементов из ENTITY.
  • Добавлена поддержка fallback цветов для типа paint. Пример: fill="url(#lg1) red"
  • Добавлена возможность отрисовки внешних и встроенных SVG(Z) файлов.
  • Добавлен Qt-враппер для C-API. Повторяет API и поведение QSvgRenderer.
  • Добавлено почти 100 новых тестов. Всего 634 теста.
  • Множество исправлений.
  • Снижен размер библиотеки. rendersvg с cairo бекендом теперь на 34% меньше, с Qt бекендом - на 19%.
  • Минимальная версия Rust снижена с последней стабильной до 1.22.

Ещё не реализовано:

  • Элементы: filter, marker, textPath.
  • Редко используемые атрибуты.

Результаты тестирования. Сравнительная таблица.

Если исключить dynamic SVG subset, фильтры и маркеры - resvg предоставляет лучшую поддержку SVG среди всех кроссплатформенных, FOSS библиотек. И, в том числе, является самой быстрой реализацией.

>>> Репозиторий

 ,

RazrFalcon
()

Ищу удобную альтернативу Bash

Форум — Development

Навеяно недавними новостями.

Собственно, я ищу примитивный, башеподобный язык для написания скриптов вида: выполнить n команд с парой условий.

Bash и его производные настолько ужасны, что тут даже обсуждать нечего. Легаси в 3-м поколении.

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

# запуск процесса
run(['ls', '-l'])
# получение расширения файла
splitext("text.txt")[1][1:]
# конкатенация путей
join('/home', 'user')
И это с реэкспортом функций, что не канон.

Fish выглядит самым адекватным решением, но работа с переменными просто ужасна. Например создание списка: set -l mylist 1 2 3. Или инкремент счётчика set i (math "$i + 1"). Зато условия пофиксили.

Поэтому ищу или удобный скриптовый язык или либы для питона.

PS: Ещё интересно было бы услышать что в Bash у вас вызывает самую сильную боль. Я бы, например, не отказался бы от встроенной фичи для проверки существования субкоманд, типа require grep

 , ,

RazrFalcon
()

Про распространение модифицированного Qt

Форум — Development

Есть задача распространять прогу на Qt с модифицированным QtSvg. Что мне нужно знать?

  • Сама прога может быть открытая или проприетарная.
  • Все модификации Qt либ будут доступны на гитхабе. Возможно нужно с собой их таскать?
  • Можно будет заменить мой QtSvg на родной и прога продолжит работать. То есть жесткой зависимости от модификаций нет.

Zmicier

 , ,

RazrFalcon
()

KDE не видит звуковую карту

Форум — Desktop

Есть Arch без pulseaudio, usb звуковая карта и gstreamer-phonon.

В хроме, deadbeef и gtk приложениях звук есть, а в KDE приложениях - нет. На вкладке System Setting - Multimedia нет никаких устройств кроме default.

В соседней генту всё работает и список устройств полный.

Куда копать?

PS: пульсу не предлагать

 ,

RazrFalcon
()

Криво грузится Арч

Форум — Desktop

Временно перекатился на арч и не могу осилить запуск. Точнее он работает, но криво.

Выглядит это так:

  1. Лог systemd доходит до [ OK ] Reached target Graphical Interface и зависает.
  2. Ждём секунд 10.
  3. Нажимаем Ctrl (именно это кнопку).
  4. KDE стартует как ни в чём не бывало.

Как побороть?

 , ,

RazrFalcon
()

Перестал запускаться KDE

Форум — Desktop

Сегодня включаю комп и получаю чёрный экран с курсором.

В dmesg, Xorg.log и тд ничего нет.

Максимум:

	(WW) warning, (EE) error, (NI) not implemented, (??) unknown.
[     4.909] (WW) The directory "/usr/share/fonts/misc/" does not exist.
[     4.910] (WW) The directory "/usr/share/fonts/TTF/" does not exist.
[     4.910] (WW) The directory "/usr/share/fonts/OTF/" does not exist.
[     4.910] (WW) The directory "/usr/share/fonts/Type1/" does not exist.
[     4.910] (WW) The directory "/usr/share/fonts/100dpi/" does not exist.
[     4.910] (WW) The directory "/usr/share/fonts/75dpi/" does not exist.
[     4.953] (WW) Warning, couldn't open module nouveau
[     4.953] (WW) Warning, couldn't open module nv
[     4.954] (WW) Warning, couldn't open module fbdev
[     4.954] (WW) Warning, couldn't open module vesa
[     4.962] (WW) Falling back to old probe method for modesetting
[     5.939] (WW) evdev: Logitech USB Keyboard: ignoring absolute axes.

modules-rebuild, preserved-rebuild и revdep-rebuild делал.

Советуют отключить ForceCompositionPipeline в xorg.conf, но не помогло.

Вчера что-то обновлял, но логов не осталось. Вроде x11 либы были.

Gentoo amd64 (не ~) + nvidia

Куда копать?

 ,

RazrFalcon
()

vcpkg теперь кроссплатформенный

Форум — Development

https://blogs.msdn.microsoft.com/vcblog/2018/04/24/announcing-a-single-c-libr...

Убийца conan'а подоспел. Кто пробовал, как оно?

 

RazrFalcon
()

resvg 0.2 — теперь лучше librsvg

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

resvg — библиотека отрисовки SVG.

Основные изменения:

  • Библиотека была почти полностью переписана.
  • Добавлена поддержка clipPath, mask, pattern и preserveAspectRatio.
  • Новый, написанный с нуля, набор тестов: сайт, репозиторий. На данный момент содержит 539 тестов/файлов svg.
  • Добавлена поддержка отрисовки элементов по ID.
  • Препроцессор был вынесен в отдельный проект: usvg.
  • Новая реализация C-API с полноценной документацией.
  • Множество мелких исправлений.

Краткую сводку о результатах тестирования можно посмотреть здесь.

В двух словах: на данный момент resvg не хуже librsvg, если вам не нужны фильтры (в любом случае тот же blur реализован в librsvg неверно). Производительность приблизительно одинаковая.

Inkscape, с другой стороны, в среднем в 10 раз медленнее и хотя поддерживает больше возможностей SVG (фильтры, маркеры и прочее редко используемое), при этом содержит массу ошибок в реализации базовых примитивов.

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

 ,

RazrFalcon
()

Ищу эталонную реализацию XML DOM

Форум — Development

Ищу эталонную реализацию XML DOM которая поддерживает все фишки XML, типа DTD, namespaces, xml:space, etc.

Желательно, чтобы в комплекте был широкий набор тестов. Чтобы понять как либа поступает в той или иной ситуации.

Язык роли не играет.

PS: да, именно DOM/дерево, не чисто парсер.

 

RazrFalcon
()

Ищу нормальную либу для работы с zip для c++11

Форум — Development

Что нашел:

  • ziplib - мак не поддерживается, репозиторий заброшен, не умеет в cmake
  • libzippp - мак не поддерживается, мутная сборка, какие-то патчи под винду...
  • zipper - самый привлекательный, но не пробовал ещё

Кто что использует?

 

RazrFalcon
()

Синхронизация чувствительности курсора между Linux и Win

Форум — General

Последнее время приходится часто работать на винде и дико раздражает разное поведение курсора: скорость перемещения, ускорение, и тд.

Можно ли это унифицировать?

Мышка: MX Performance

На винде использую SetPoint, на лине xinput + настройки KDE.

 ,

RazrFalcon
()

Пропал Ruby 2.5 после даунгрейда

Форум — General

Сделал даунгрейд с ~ и теперь не могу установить ruby:

% sudo emerge -av dev-lang/ruby:2.5      

emerge: there are no ebuilds to satisfy ">=dev-ruby/net-telnet-0.1.1[ruby_targets_ruby25]".
(dependency required by "dev-lang/ruby-2.5.0-r2::gentoo" [ebuild])
(dependency required by "dev-lang/ruby:2.5" [argument])

Куда копать?

PS: Попутно сломалась сборка Qt Creator:

Project ERROR: Cannot find libclang's main header file, candidate: /clang-c/Index.h

 

RazrFalcon
()

Ищу лаконичную реализацию range-based итераторов

Форум — Development

Задача простая: реализовать range-based итератор для произвольной структуры. При этом он должен быть как можно проще и содержать строго необходимые методы.

Что получилось (вектор просто для примера):

#include <vector>
#include <iostream>

class Range
{
private:
	class Impl
	{
	public:
		using value_type = int;
		using const_reference = const int&;

		Impl(const size_t v, const std::vector<int> &values) : m_idx(v), m_values(values) {}

		const_reference operator*() const { return m_values[m_idx]; }
		Impl& operator++()
		{
			m_idx++;
			return *this;
		}
		bool operator!=(const Impl& rhs) { return m_idx != rhs.m_idx; }

	private:
		// Тут может быть что угодно.
		size_t m_idx;
		const std::vector<int> &m_values;
	};

public:
	Range(const std::vector<int> &values) : m_values(values) {}

	typedef Impl iterator;
	iterator begin() const { return Impl(0, m_values); }
	iterator end() const { return Impl(m_values.size(), m_values); }

private:
	// Тут может быть что угодно.
	const std::vector<int> &m_values;
};

int main(int argc, char *argv[])
{
	const std::vector<int> values = { 1, 2, 3, 4 };

	for (const int &v : Range(values))
	{
		std::cout << v << std::endl;
	}

	return 0;
}

Вопросы:

  • Что можно убрать? Что лишнее?
  • Что нужно добавить, чтобы даже самые злые линтеры не возмущались?

По факту, 90% кода - мусор. Всё что нужно, это своя реализация T& operator++().

То есть хотелось бы получить возможность использовать подход rust'a, где мне нужно реализовать только метод next():

struct Range<'a> {
    idx: usize,
    values: &'a Vec<i32>,
}

impl<'a> Range<'a> {
    fn new(values: &'a Vec<i32>) -> Self {
        Range {
            idx: 0,
            values,
        } 
    }
}

impl<'a> Iterator for Range<'a> {
    type Item = i32;
    
    fn next(&mut self) -> Option<Self::Item> {
        if self.idx == self.values.len() {
            return None;
        }
        
        self.idx += 1;
        Some(self.values[self.idx - 1])
    }
}

fn main() {
    let values = vec![1, 2, 3, 4];
    
    for v in Range::new(&values) {
        println!("{}", v);
    }
}

 

RazrFalcon
()

Selenium, Firefox и SVG

Форум — Web-development

Пытаюсь получить «скриншот» SVG изображения через headless firefox, но на выходе получаю файл размером 0 байт. При этом локальный html рисует нормально.

Код:

var webdriver = require('selenium-webdriver'),
    By = webdriver.By,
    until = webdriver.until;
var fs = require('fs');

var firefox = require('selenium-webdriver/firefox');

var firefoxOptions = new firefox.Options();
firefoxOptions.setBinary('/usr/bin/firefox');
firefoxOptions.headless();

var driver = new webdriver.Builder()
    .forBrowser('firefox')
    .setFirefoxOptions(firefoxOptions)
    .build();


driver.get('file:///home/razr/test.svg');

webdriver.WebDriver.prototype.saveScreenshot = function(filename) {
    return driver.takeScreenshot().then(function(data) {
        console.log(data) // empty
        fs.writeFile(filename, data.replace(/^data:image\/png;base64,/,''), 'base64', function(err) {
            if(err) throw err;
        });
    })
};

driver.saveScreenshot('out.png');

driver.quit();

Я во всём этом вебе ноль, поэтому вообще хз что не так. Ошибок никаких не выдаёт.

Firefox 58.0.1

selenium-webdriver 3.6.0

geckodriver-v0.19.1-linux64

 , , ,

RazrFalcon
()

SSD мёртв? Советы по выбору SSD.

Форум — Desktop

Дело было вечером... потух экран и всё повисло. После перезапуска попадаю в консоль. Пишет, что корень в read-only. Корень на SSD, которому уже 4.5 года. Видимо пришло его время.

dmesg:

[   85.992031] ata1.00: exception Emask 0x10 SAct 0xfc0000 SErr 0x400100 action 0x6 frozen
[   85.992035] ata1.00: irq_stat 0x08000000, interface fatal error
[   85.992038] ata1: SError: { UnrecovData Handshk }
[   85.992042] ata1.00: failed command: WRITE FPDMA QUEUED
[   85.992050] ata1.00: cmd 61/08:90:08:70:07/00:00:00:00:00/40 tag 18 ncq dma 4096 out
                        res 40/00:b8:b0:8d:87/00:00:00:00:00/40 Emask 0x10 (ATA bus error)
[   85.992052] ata1.00: status: { DRDY }
[   85.992054] ata1.00: failed command: WRITE FPDMA QUEUED
[   85.992061] ata1.00: cmd 61/08:98:a0:90:07/00:00:00:00:00/40 tag 19 ncq dma 4096 out
                        res 40/00:b8:b0:8d:87/00:00:00:00:00/40 Emask 0x10 (ATA bus error)
[   85.992062] ata1.00: status: { DRDY }
[   85.992064] ata1.00: failed command: WRITE FPDMA QUEUED
[   85.992070] ata1.00: cmd 61/08:a0:48:c6:07/00:00:00:00:00/40 tag 20 ncq dma 4096 out
                        res 40/00:b8:b0:8d:87/00:00:00:00:00/40 Emask 0x10 (ATA bus error)
[   85.992072] ata1.00: status: { DRDY }
[   85.992074] ata1.00: failed command: WRITE FPDMA QUEUED
[   85.992080] ata1.00: cmd 61/08:a8:80:d7:07/00:00:00:00:00/40 tag 21 ncq dma 4096 out
                        res 40/00:b8:b0:8d:87/00:00:00:00:00/40 Emask 0x10 (ATA bus error)
[   85.992082] ata1.00: status: { DRDY }
[   85.992084] ata1.00: failed command: WRITE FPDMA QUEUED
[   85.992090] ata1.00: cmd 61/08:b0:30:0c:09/00:00:00:00:00/40 tag 22 ncq dma 4096 out
                        res 40/00:b8:b0:8d:87/00:00:00:00:00/40 Emask 0x10 (ATA bus error)
[   85.992091] ata1.00: status: { DRDY }
[   85.992093] ata1.00: failed command: WRITE FPDMA QUEUED
[   85.992099] ata1.00: cmd 61/08:b8:b0:8d:87/00:00:00:00:00/40 tag 23 ncq dma 4096 out
                        res 40/00:b8:b0:8d:87/00:00:00:00:00/40 Emask 0x10 (ATA bus error)
[   85.992101] ata1.00: status: { DRDY }
[   85.992105] ata1: hard resetting link
[   86.306181] ata1: SATA link up 6.0 Gbps (SStatus 133 SControl 300)
[   86.314352] ACPI Error: [DSSP] Namespace lookup failure, AE_NOT_FOUND (20170831/psargs-364)
[   86.314361] ACPI Error: Method parse/execution failed \_SB.PCI0.SAT0.SPT0._GTF, AE_NOT_FOUND (20170831/psparse-550)
[   86.324326] ACPI Error: [DSSP] Namespace lookup failure, AE_NOT_FOUND (20170831/psargs-364)
[   86.324333] ACPI Error: Method parse/execution failed \_SB.PCI0.SAT0.SPT0._GTF, AE_NOT_FOUND (20170831/psparse-550)
[   86.325098] ata1.00: configured for UDMA/133
[   86.325127] ata1: EH complete
[   87.016024] ata1.00: exception Emask 0x10 SAct 0x40000 SErr 0x400100 action 0x6 frozen
[   87.016026] ata1.00: irq_stat 0x08000000, interface fatal error
[   87.016029] ata1: SError: { UnrecovData Handshk }
[   87.016034] ata1.00: failed command: WRITE FPDMA QUEUED
[   87.016040] ata1.00: cmd 61/20:90:a0:7d:0b/00:00:01:00:00/40 tag 18 ncq dma 16384 out
                        res 40/00:90:a0:7d:0b/00:00:01:00:00/40 Emask 0x10 (ATA bus error)
[   87.016042] ata1.00: status: { DRDY }
[   87.016046] ata1: hard resetting link
[   87.330176] ata1: SATA link up 6.0 Gbps (SStatus 133 SControl 300)
[   87.340372] ACPI Error: [DSSP] Namespace lookup failure, AE_NOT_FOUND (20170831/psargs-364)
[   87.340379] ACPI Error: Method parse/execution failed \_SB.PCI0.SAT0.SPT0._GTF, AE_NOT_FOUND (20170831/psparse-550)
[   87.350365] ACPI Error: [DSSP] Namespace lookup failure, AE_NOT_FOUND (20170831/psargs-364)
[   87.350371] ACPI Error: Method parse/execution failed \_SB.PCI0.SAT0.SPT0._GTF, AE_NOT_FOUND (20170831/psparse-550)
[   87.351139] ata1.00: configured for UDMA/133
[   87.351152] ata1: EH complete
[   87.351586] ata1.00: exception Emask 0x10 SAct 0x200000 SErr 0x400100 action 0x6 frozen
[   87.351587] ata1.00: irq_stat 0x08000000, interface fatal error
[   87.351588] ata1: SError: { UnrecovData Handshk }
[   87.351590] ata1.00: failed command: WRITE FPDMA QUEUED
[   87.351593] ata1.00: cmd 61/20:a8:a0:7d:0b/00:00:01:00:00/40 tag 21 ncq dma 16384 out
                        res 40/00:a8:a0:7d:0b/00:00:01:00:00/40 Emask 0x10 (ATA bus error)
[   87.351594] ata1.00: status: { DRDY }
[   87.351596] ata1: hard resetting link
[   87.666189] ata1: SATA link up 6.0 Gbps (SStatus 133 SControl 300)
[   87.676335] ACPI Error: [DSSP] Namespace lookup failure, AE_NOT_FOUND (20170831/psargs-364)
[   87.676342] ACPI Error: Method parse/execution failed \_SB.PCI0.SAT0.SPT0._GTF, AE_NOT_FOUND (20170831/psparse-550)
[   87.686333] ACPI Error: [DSSP] Namespace lookup failure, AE_NOT_FOUND (20170831/psargs-364)
[   87.686339] ACPI Error: Method parse/execution failed \_SB.PCI0.SAT0.SPT0._GTF, AE_NOT_FOUND (20170831/psparse-550)
[   87.687107] ata1.00: configured for UDMA/133
[   87.687119] ata1: EH complete
[   91.112026] ata1: limiting SATA link speed to 3.0 Gbps
[   91.112030] ata1.00: exception Emask 0x10 SAct 0xf SErr 0x400100 action 0x6 frozen
[   91.112031] ata1.00: irq_stat 0x08000000, interface fatal error
[   91.112034] ata1: SError: { UnrecovData Handshk }
[   91.112036] ata1.00: failed command: WRITE FPDMA QUEUED
[   91.112043] ata1.00: cmd 61/28:00:00:b0:83/00:00:00:00:00/40 tag 0 ncq dma 20480 out
                        res 40/00:18:38:c0:83/00:00:00:00:00/40 Emask 0x10 (ATA bus error)
[   91.112044] ata1.00: status: { DRDY }
[   91.112047] ata1.00: failed command: WRITE FPDMA QUEUED
[   91.112053] ata1.00: cmd 61/40:08:30:b0:83/00:00:00:00:00/40 tag 1 ncq dma 32768 out
                        res 40/00:18:38:c0:83/00:00:00:00:00/40 Emask 0x10 (ATA bus error)
[   91.112054] ata1.00: status: { DRDY }
[   91.112056] ata1.00: failed command: WRITE FPDMA QUEUED
[   91.112062] ata1.00: cmd 61/08:10:10:b1:83/00:00:00:00:00/40 tag 2 ncq dma 4096 out
                        res 40/00:18:38:c0:83/00:00:00:00:00/40 Emask 0x10 (ATA bus error)
[   91.112064] ata1.00: status: { DRDY }
[   91.112066] ata1.00: failed command: WRITE FPDMA QUEUED
[   91.112072] ata1.00: cmd 61/40:18:38:c0:83/00:00:00:00:00/40 tag 3 ncq dma 32768 out
                        res 40/00:18:38:c0:83/00:00:00:00:00/40 Emask 0x10 (ATA bus error)
[   91.112073] ata1.00: status: { DRDY }
[   91.112079] ata1: hard resetting link
[   91.426181] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 320)
[   91.434360] ACPI Error: [DSSP] Namespace lookup failure, AE_NOT_FOUND (20170831/psargs-364)
[   91.434368] ACPI Error: Method parse/execution failed \_SB.PCI0.SAT0.SPT0._GTF, AE_NOT_FOUND (20170831/psparse-550)
[   91.444352] ACPI Error: [DSSP] Namespace lookup failure, AE_NOT_FOUND (20170831/psargs-364)
[   91.444358] ACPI Error: Method parse/execution failed \_SB.PCI0.SAT0.SPT0._GTF, AE_NOT_FOUND (20170831/psparse-550)
[   91.445126] ata1.00: configured for UDMA/133
[   91.445148] ata1: EH complete

SATA 2 - это проверял входы.

SMART:

ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  5 Reallocated_Sector_Ct   0x0032   100   100   000    Old_age   Always       -       0
  9 Power_On_Hours_and_Msec 0x0032   000   000   000    Old_age   Always       -       918778h+27m+32.720s
 12 Power_Cycle_Count       0x0032   098   098   000    Old_age   Always       -       2796
170 Available_Reservd_Space 0x0033   100   100   010    Pre-fail  Always       -       0
171 Program_Fail_Count      0x0032   100   100   000    Old_age   Always       -       0
172 Erase_Fail_Count        0x0032   100   100   000    Old_age   Always       -       0
174 Unexpect_Power_Loss_Ct  0x0032   100   100   000    Old_age   Always       -       2794
184 End-to-End_Error        0x0033   100   100   090    Pre-fail  Always       -       0
187 Uncorrectable_Error_Cnt 0x000f   120   120   050    Pre-fail  Always       -       0
192 Power-Off_Retract_Count 0x0032   100   100   000    Old_age   Always       -       2794
225 Host_Writes_32MiB       0x0032   100   100   000    Old_age   Always       -       149228
226 Workld_Media_Wear_Indic 0x0032   100   100   000    Old_age   Always       -       65535
227 Workld_Host_Reads_Perc  0x0032   100   100   000    Old_age   Always       -       53
228 Workload_Minutes        0x0032   100   100   000    Old_age   Always       -       65535
232 Available_Reservd_Space 0x0033   100   100   010    Pre-fail  Always       -       0
233 Media_Wearout_Indicator 0x0032   100   100   000    Old_age   Always       -       0
241 Host_Writes_32MiB       0x0032   100   100   000    Old_age   Always       -       149228
242 Host_Reads_32MiB        0x0032   100   100   000    Old_age   Always       -       172337
249 NAND_Writes_1GiB        0x0013   100   100   000    Pre-fail  Always       -       7201

Судя по всему - дело плохо.

SSD, последний раз, выбрал лет 5 назад, не слежу за ними. Какой поcоветует лор? Гугл предлагает брать Samsung 860 PRO (текущий - Intel 520). Разьем только SATA.

 

RazrFalcon
()

Хочу запретить обновление если конфиг sys-kernel/linux-firmware устарел

Форум — General

У sys-kernel/linux-firmware есть возможность ставить только нужные блобы, но при каждой смене версии нужно обновлять конфиг.

Как бы сделать «хук» на обновление, чтобы emerge не давал обновить без наличия конфига с актуальной версией?

 

RazrFalcon
()

Ищу специфическую реализацию фильтра размытия по Гауссу

Форум — Development

Нужен фильтр асимметричного (для каждой оси свой коэффициент) размытия по Гауссу с поддержкой linearRGB. Именно такое чудо-юдо требует спека SVG.

Насколько я знаю, только Inkscape и Chrome умеют это. Возможно уже и лиса научилась, не проверял. Инфа тут.

Проблема в том, что мало того, что для этого нужен fixed-point arithmetic, так ещё и примеров/манов для простых смертных я найти не смог.

Есть реализация Inkscape, но она под GPL.

Поэтому вопроса ровно два:

  1. Есть ли у кого-то готовая реализация на любом языке и под удобной лицензией?
  2. Считается ли нарушением GPL если я портирую код на другой язык?

 , ,

RazrFalcon
()

Проблема экосистемы C++

Форум — Talks

Во время гугления, случайным образом нашел либу для «отрисовки» SVG на C++. Беглый осмотр показал все симптомы «синдрома С++»:

  1. Синдром eao197 - собственная система сборки.
  2. Собственная либа для работы с fs.
  3. Собственная либа для работы с xml (я понимаю когда в молодом языке нет батареек, но в старце уровня C++ - позор).
  4. Собственная либа для логирования.
  5. Отсутствие инструкции по сборке. Только автор знает, как это чудо собирать. issue
  6. Почти полное отсутствие документации.
  7. Почти полное отсутствие тестов.

И эти люди рассказывают как в C++ всё хорошо?

PS: либа содержит внушительные 530 коммитов, при этом ничего не умеет.

 ,

RazrFalcon
()

Ищу гайдлайны по написанию C-API

Форум — Development

Нужно написать API к либе на Rust (ну или C++, суть не меняется). Проблема в том, что в сишке я 0. Посоветуйте хорошие гайдлайны по написанию API.

Интересует:

  • именование структур, полей, функций
  • кто должен отвечать за выделение/освобождение памяти? Нужны ли свои init/destroy или пусть человек сам мучается?
  • какие типы лучше использовать? int vs int32_t.
  • как возвращать ошибки?
    • void method(char **error)
    • const char* method()
    • int/char/enum?
  • нужны ли фукнции для инициализации нетривиальных структур?
  • и тд.

Нужно чтобы сишники камнями не закидали.

 ,

RazrFalcon
()

Медленная прокрутка в less

Форум — Desktop

После последнего обновления (kde, xf86-input-libinput и всякая мелочь) прокрутка в less стала 0.5 строки за один тик колёсика, а было 3. Из-за чего пользоваться им теперь невозможно.

Кто-то сталкивался с этим багом?

 , , ,

RazrFalcon
()

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