LINUX.ORG.RU

Избранные сообщения be_nt_all

GLM 1.0.0 — математическая библиотека для C++

Новости — Разработка
GLM 1.0.0 — математическая библиотека для C++
Группа Разработка

24 января, после почти четырёхлетней паузы, состоялся выпуск 1.0.0 header-only SIMD-оптимизированной библиотеки для C++ GLM (OpenGL Mathematics), основанной на спецификациях GLSL (pdf) (OpenGL Shading Language).

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

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

 , , header-only, ,

dataman
()

HTML: The Programming Language

Форум — Development

Я вам покушать принёс: HTML, the programming language

 , ,

ad0c
()

Как сделать свой QTableView

Форум — Development

В общем хочу поделится открыто классом QpTableView, который выводит ячейки в строке таблицы по шаблону в несколько рядов.

Небольшое видео для наглядности https://youtu.be/zgqkdXJhbpc?si=F0zMMr8oJgx69_47

По итогам работы понятно, что создавать свои виджеты на основе QAbstractItemView можно и нужно.

Но похоже придется из собирать свои виджеты в составе исходников Qt, что на самом деле не проблема (надо один раз попробовать только).

Надо сказать что на то, чтобы изучить исходный QTableView и QHeaderView и сделать свои варианты ушло 5 рабочих недель.

В основном время убило изменение ширины и высоты секций интерактивно мышкой (там отрисовка сразу идёт при перетаскивании края секции мышкой).

И ещё много ушло времени на модель выделения ячеек (selectionModel), что тоже оказалось не просто.

В общем, если кому интересно на гитхабе здесь: https://github.com/PavelDorofeev/How-to-create-own-QTableView-with-new-capabilities

 , ,

kkmspb
()

Makefile для сборки Love2d под Андроид/AppImage

Форум — Development

Сидел вот тут ковырялся, пересобирал и пердолился.
Подумал что стоит выложить, дабы другие пердолились поменьше.
Ниже описание, я его для себя писал и ещё ниже сам Makefile. Никаких изысков и красивостей. Собирает и ладно.
Кому надо под себя поправите, а кому не неадо, тому не надо.

- ИСПОЛЬЗОВАТЬ НА СВОЙ СТРАХ И РИСК, Я НЕ НЕСУ НИКАКОЙ ОТВЕТСТВЕННОСТИ
- ВСЁ ПРЕДОСТАВЛЯЕТСЯ КАК ЕСТЬ, ЛЮБЫЕ СОМНЕНИЯ ДОЛЖНЫ ВЕСТИ
- К ОТКАЗУ ОТ ИСПОЛЬЗОВАНИЯ, НЕ ПОНИМАЕШЬ ЧТО ЭТО, НЕ ТРОГАЙ

Love Distrib

Makefile упрощающий создание готовых Love2D сборок c включением вашего приложения позволяет

  • Собрать apk файл для Android
  • Собрать love файл для всех
  • Собрать AppImage файл для Linux x86_64

Положить Makefile в корень Love2D программы и отредактировать

  • app_name=имя программы
  • description=однострочное описание

Для Android дополнительно поправить

  • android_app_version_name=версия.приложения любая
  • android_app_version_code=число целое число

Важно android_app_version_code должно иметь значение
всегда увеличивающееся на 1 при каждой новой сборке, это
требуется для того чтобы при установке на Android apk
файла, уже установленное приложение обновлялось. Иначе
установка не произойдёт с выводом ошибки или вообще без неё.

Теперь однократно нужно развернуть зависимости для Android

  • make android-depends

Предполагается что sudo настроен, нужно установить java и
прочие мелочи, на запрос пароля ввести пароль для sudo затем
будут сгенерированны два ключа подписей и предварительно пароль

  • debug.keystore
  • release.keystore
  • .android_pass

На вопросы всякие можно просто нажимать ENTER, а когда спросят
всё ли верно Is CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown correct? написать yes и снова нажать ENTER. sdkmanager
тоже спросит, Review licenses that have not been accepted (y/N)?
согласны ли вы с условиями предоставления иструментов
для Android SDK/NDK тоже написать y и нажать ENTER
Ключи и пароль можно подменить на свои готовые
(только молю бога не совать основные ЗАТРЁТСЯ МОЖЕТ БЫТЬ!)
Пусть сгенерируется всё само. Суть в том что без подписей пакетов
Android просто молча не установит apk, просто не даст установить.

А вот теперь уже можно, редактировать свой код и пересобирать

  • make lovefile просто обычный app.love
  • make android выполнить сборку app.apk, app.abb
  • make appimage выполнить сборку app.AppImage

Первый раз apk будет собираться долго, но все последующие уже быстро
так как компиляции уже не будет, а просто будут обновляться lua файлики
из проекта. Вроде всё.


Проблемы

  • make android валится с ошибкой Решения
  • Запускать make android ещё раз и ещё раз. Бывает отпускает.
  • Грохнуть java killall java (там несколько процессов может быть) и ещё раз запустить make android
  • Удалить /.love-android-build-dir и заного выполнить
    • make android-depends подготовку зависимостей
    • make android попытку сборки apk

Нельзя отменять сборку через CTRL+C это сломает всё,
придётся вышеописанный квест пройти опять, с большой долей вероятности.
Перемудрёные механизмы системы сборки для Android дают о себе знать. :3

SRC=$(shell pwd)
app_name=appname
description=app short description
##########################################################
android_app_name=$(app_name) for Android
android_app_version_name=0.1
android_app_version_code=1
android_enableJetifier=true
android_useAndroidX=true
android_app_application_id=org.$(app_name).android
android_app_orientation=portrait
#########################################################
SECRET_PASSWORD_FOR_KEYGEN=$(HOME)/.android_pass
#########################################################
android_sign_release=true
##########################################################
DEVELOPMENT_ROOT_DIR=$(HOME)/.love-android-build-dir
DEVELOPMENT_KEYS_DIR=$(HOME)/.love-android-keys-dir
##########################################################
ANDROID_SDK_ROOT_DIR=$(DEVELOPMENT_ROOT_DIR)/ANDROID-SDK/
ANDROID_LOVE_ROOT_DIR=$(DEVELOPMENT_ROOT_DIR)/LOVE-ANDROID/
APPIMAGE_LOVE_ROOT_DIR=$(DEVELOPMENT_ROOT_DIR)/APPIMAGE/
##########################################################
PROPERTIES=$(ANDROID_LOVE_ROOT_DIR)/gradle.properties

all:
	echo "make android-depends - create depends for android apk build"
	echo "make android         - build android apk/aabb pakages"
	echo "make lovefile        - create portable app.love file"
	echo "make appimage        - create portable x86_64 executable file"

android-depends:
	$(MAKE) install-love-android;
	$(MAKE) install-system-depends;
	$(MAKE) install-android-sdk-ndk;
	$(MAKE) generate-android-debug-keys;
	$(MAKE) generate-android-release-keys;

android:
	$(MAKE) generate-android-properties;
	$(MAKE) generate-application-icons;
	$(MAKE) packeges-build;
	$(MAKE) packeges-copy;
ifeq ($(android_sign_release),true)

	$(MAKE) packeges-sign-release;
else
	$(MAKE) packeges-sign-debug;
endif
	$(MAKE) packeges-sign-verify;

lovefile:
	zip -9 -r $(app_name).love . -x Makefile -x ./*.apk -x ./*.aab -x ./*.AppImage


SRC_IMAGE_ICON="NONE"
ifneq ($(wildcard $(SRC)/icon.png),)
SRC_IMAGE_ICON=$(SRC)/icon.png
DST_IMAGE_PATH=$(ANDROID_LOVE_ROOT_DIR)/app/src/main/res/drawable
endif
ifneq ($(wildcard $(SRC)/assets/icon.png),)
SRC_IMAGE_ICON=$(SRC)/assets/icon.png
DST_IMAGE_PATH=$(ANDROID_LOVE_ROOT_DIR)/app/src/main/res/drawable
endif
ifneq ($(wildcard $(SRC)/assets/images/icon.png),)
SRC_IMAGE_ICON=$(SRC)/assets/images/icon.png
DST_IMAGE_PATH=$(ANDROID_LOVE_ROOT_DIR)/app/src/main/res/drawable
endif




appimage:lovefile
	mkdir -p $(APPIMAGE_LOVE_ROOT_DIR);
ifeq ($(wildcard $(APPIMAGE_LOVE_ROOT_DIR)/love-11.5-x86_64.AppImage),)
	wget https://github.com/love2d/love/releases/download/11.5/love-11.5-x86_64.AppImage -O $(APPIMAGE_LOVE_ROOT_DIR)/love-11.5-x86_64.AppImage
	wget https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage  -O $(APPIMAGE_LOVE_ROOT_DIR)/appimagetool-x86_64.AppImage
endif
	cd $(APPIMAGE_LOVE_ROOT_DIR);                       \
	-rm -rd squashfs-root;                              \
	chmod +x love-11.5-x86_64.AppImage;                 \
	chmod +x appimagetool-x86_64.AppImage;              \
	./love-11.5-x86_64.AppImage --appimage-extract;     \
	cat squashfs-root/bin/love $(SRC)/$(app_name).love > squashfs-root/bin/$(app_name); \
	rm  squashfs-root/bin/love;                         \
	chmod +x squashfs-root/bin/$(app_name);             \
	sed 's/love/$(app_name)/g' -i squashfs-root/AppRun; \
	convert $(SRC_IMAGE_ICON) -resize 256x256 squashfs-root/$(app_name).png;  \
	echo ""                                   > squashfs-root/love.desktop;   \
	echo "[Desktop Entry]"                   >> squashfs-root/love.desktop;   \
	echo "Name=$(app_name)"                  >> squashfs-root/love.desktop;   \
	echo "Comment=$(description)"            >> squashfs-root/love.desktop;   \
	echo "MimeType=application/x-love-game;" >> squashfs-root/love.desktop;   \
	echo "Exec=$(app_name) %f"               >> squashfs-root/love.desktop;   \
	echo "Type=Application"                  >> squashfs-root/love.desktop;   \
	echo "Categories=Game;"                  >> squashfs-root/love.desktop;   \
	echo "Terminal=false"                    >> squashfs-root/love.desktop;   \
	echo "Icon=/$(app_name)"                 >> squashfs-root/love.desktop;   \
	echo "NoDisplay=true"                    >> squashfs-root/love.desktop;   \
	./appimagetool-x86_64.AppImage squashfs-root $(SRC)/$(app_name).AppImage;



install-love-android:
	-`git clone --recurse-submodules https://github.com/love2d/love-android/ $(ANDROID_LOVE_ROOT_DIR)`

generate-android-properties:
	echo "" > $(PROPERTIES)
	echo "app.name=$(android_app_name)" >> $(PROPERTIES)
	echo "app.version_name=$(android_app_version_name)" >> $(PROPERTIES)
	echo "app.version_code=$(android_app_version_code)" >> $(PROPERTIES)
	echo "android.enableJetifier=$(android_enableJetifier)" >> $(PROPERTIES)
	echo "android.useAndroidX=$(android_useAndroidX)" >> $(PROPERTIES)
	echo "app.application_id=$(android_app_application_id)" >> $(PROPERTIES)
	echo "app.orientation=$(android_app_orientation)" >> $(PROPERTIES)

install-system-depends:
	sudo apt install imagemagick openjdk-17-jdk openjdk-17-jre-headless sdkmanager

install-android-sdk-ndk:
	mkdir -p $(ANDROID_SDK_ROOT_DIR);                \
	export ANDROID_SDK_ROOT=$(ANDROID_SDK_ROOT_DIR); \
	sdkmanager --install "platforms;android-33";    \
	sdkmanager --install "ndk;23.2.8568313";        \
	sdkmanager --install "platform-tools;33.0.0";   \
	sdkmanager --install "build-tools;33.0.0";      \
	sdkmanager --install "cmdline-tools;latest";    \
	sdkmanager --licenses;

generate-android-debug-keys:
	mkdir -p $(DEVELOPMENT_KEYS_DIR);
ifeq ($(wildcard $(SECRET_PASSWORD_FOR_KEYGEN)),"")
	uuidgen > $(SECRET_PASSWORD_FOR_KEYGEN)
endif
ifeq ($(wildcard $(DEVELOPMENT_KEYS_DIR)/debug.keystore),"")
	keytool -genkey  \
			-v -keystore $(DEVELOPMENT_KEYS_DIR)/debug.keystore \
			-storepass:file   $(SECRET_PASSWORD_FOR_KEYGEN)     \
			-alias debug      \
			-keyalg RSA       \
			-keysize 2048     \
			-validity 100000
endif

generate-android-release-keys:
	mkdir -p $(DEVELOPMENT_KEYS_DIR);
ifeq ($(wildcard $(SECRET_PASSWORD_FOR_KEYGEN)),"")
	uuidgen > $(SECRET_PASSWORD_FOR_KEYGEN)
endif
ifeq ("$(wildcard $(DEVELOPMENT_KEYS_DIR)/release.keystore)","")
	keytool -genkey  \
			-v -keystore $(DEVELOPMENT_KEYS_DIR)/release.keystore \
			-storepass:file  $(SECRET_PASSWORD_FOR_KEYGEN)        \
			-alias release    \
			-keyalg RSA       \
			-keysize 2048     \
			-validity 100000
endif

generate-application-icons:
ifneq ($(SRC_IMAGE_ICON),"NONE")
	convert $(SRC_IMAGE_ICON) -resize 72x72   $(DST_IMAGE_PATH)-hdpi/love.png
	convert $(SRC_IMAGE_ICON) -resize 48x48   $(DST_IMAGE_PATH)-mdpi/love.png
	convert $(SRC_IMAGE_ICON) -resize 96x96   $(DST_IMAGE_PATH)-xhdpi/love.png
	convert $(SRC_IMAGE_ICON) -resize 144x144 $(DST_IMAGE_PATH)-xxhdpi/love.png
	convert $(SRC_IMAGE_ICON) -resize 192x192 $(DST_IMAGE_PATH)-xxxhdpi/love.png
endif

packeges-build:
	rm $(SRC)/*.apk;                                                \
	rm $(SRC)/*.aab;                                                \
	rm $(SRC)/*.love;                                               \
	rm $(SRC)/*.AppImage;                                           \
	export ANDROID_SDK_ROOT=$(ANDROID_SDK_ROOT_DIR);                \
	export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64;            \
	cp /bin/python3 $(HOME)/.local/bin/python;                      \
	rm -rd $(ANDROID_LOVE_ROOT_DIR)/app/src/embed/assets;           \
	mkdir -p $(ANDROID_LOVE_ROOT_DIR)/app/src/embed/assets;         \
	cp -r $(SRC)/* $(ANDROID_LOVE_ROOT_DIR)/app/src/embed/assets;   \
	rm $(ANDROID_LOVE_ROOT_DIR)/app/src/embed/assets/Makefile;      \
	cp $(ANDROID_LOVE_ROOT_DIR)/license.txt $(ANDROID_LOVE_ROOT_DIR)/app/src/embed/assets/love-licenses.txt;\
	cd $(ANDROID_LOVE_ROOT_DIR);                                    \
	chmod +x gradlew;                                               \
	./gradlew assembleNormalRecord;                                 \
	./gradlew assembleEmbedNoRecordRelease;                         \
	./gradlew bundleEmbedNoRecordRelease;

packeges-copy:
	cp $(ANDROID_LOVE_ROOT_DIR)/app/build/outputs/apk/embedNoRecord/release/app-embed-noRecord-release-unsigned.apk $(SRC)/;
	cp $(ANDROID_LOVE_ROOT_DIR)/app/build/outputs/bundle/embedNoRecordRelease/app-embed-noRecord-release.aab $(SRC)/;
	cp $(ANDROID_LOVE_ROOT_DIR)/app/build/outputs/apk/normalRecord/release/app-normal-record-release-unsigned.apk $(SRC)/;

packeges-sign-debug:
	jarsigner -verbose -keystore $(DEVELOPMENT_KEYS_DIR)/debug.keystore -storepass:file  $(SECRET_PASSWORD_FOR_KEYGEN)  $(SRC)/app-embed-noRecord-release-unsigned.apk debug;
	jarsigner -verbose -keystore $(DEVELOPMENT_KEYS_DIR)/debug.keystore -storepass:file  $(SECRET_PASSWORD_FOR_KEYGEN)  $(SRC)/app-embed-noRecord-release.aab debug;
	jarsigner -verbose -keystore $(DEVELOPMENT_KEYS_DIR)/debug.keystore -storepass:file  $(SECRET_PASSWORD_FOR_KEYGEN)  $(SRC)/app-normal-record-release-unsigned.apk debug;

packeges-sign-release:
	jarsigner -verbose -keystore $(DEVELOPMENT_KEYS_DIR)/release.keystore -storepass:file  $(SECRET_PASSWORD_FOR_KEYGEN) $(SRC)/app-embed-noRecord-release-unsigned.apk release;
	jarsigner -verbose -keystore $(DEVELOPMENT_KEYS_DIR)/release.keystore -storepass:file  $(SECRET_PASSWORD_FOR_KEYGEN) $(SRC)/app-embed-noRecord-release.aab release;
	jarsigner -verbose -keystore $(DEVELOPMENT_KEYS_DIR)/release.keystore -storepass:file  $(SECRET_PASSWORD_FOR_KEYGEN) $(SRC)/app-normal-record-release-unsigned.apk release;

packeges-sign-verify:
	jarsigner -verify $(SRC)/app-embed-noRecord-release-unsigned.apk release;
	jarsigner -verify $(SRC)/app-embed-noRecord-release.aab release;
	jarsigner -verify $(SRC)/app-normal-record-release-unsigned.apk release;
.SILENT:all

 , , , ,

LINUX-ORG-RU
()

Дёргание SOшки из Love файла - обходной путь.

Форум — Development

Ну… не совсем из love файла, но около того.
В общем так, для начала сразу скажу что делать так не надо.
Но если очень хочется то можно.

В чём суть, вы например написали программу/игру на Love2D и вам вдруг ну очень хочется добавить к ней вашу библиотеку типа libcool.so в которой что-то делается и вы эту библиотеку вызываете из вашего lua кода, только вот беда. Если вы создали love файл mycoolgame.love и положили в него libcool.so ваш код не сможет загрузить библиотеку libcool.so ибо mycoolgame.love это zip архив. Ну, не получится и всё тут. Но если очень хочется то есть черезжопный метод, мы внутри нашего love файла создадим архив с нашей библиотекой и возможно дополнительными файлами, при запуске, мы монтируем этот архив и распаковываем в каталог игры и автоматически добавляем пути до распакованных файлов в cpath и path.

Например вот наша библиотека которую мы хотим распространять вместе с нашей игрой прямо в love файле.

#include <stdio.h>

#ifdef LUAJIT
#include <luajit-2.1/lua.h>
#include <luajit-2.1/lualib.h>
#include <luajit-2.1/lauxlib.h>
#else
#include <lua5.1/lua.h>
#include <lua5.1/lualib.h>
#include <lua5.1/lauxlib.h>
#endif

int example_c_function(lua_State* L)
{
    int a = lua_tointeger(L,1);
    a+=a;
    lua_pushnumber(L,a);
    lua_pushstring(L,"hello from c");
    return 2;
}

int luaopen_lib(lua_State* L)
{
    static const struct luaL_Reg nativeFuncLib [] =
    {
         {"example_c_function", example_c_function},
         {NULL, NULL}
    };
    luaL_register(L, "lib", nativeFuncLib);
    return 1;
}

Соберём её

gcc -DLUAJIT=1 main.c `pkg-config --libs --cflags luajit` --shared -o lib.so

Аахивируем её

mkdir libs
cp lib.so libs/lib.so
zip -r9 libs.zip libs

А вот собственно сама суть и сам механизм распаковки и импорта путей.

function autoreq(zip)
    if not zip then
       print("[autoreq] failed get zip archive for unpack, argument is 'nil'")
       return false;
    end
    local function unpack(dirname,mount_point,base)
        local items = love.filesystem.getDirectoryItems(mount_point)
        if items then
            for _,val in pairs(items) do
                local path = dirname..'/'..val;
                local path_mount = mount_point..'/'..val;
                if love.filesystem.getInfo(path_mount,'directory') then
                   package.path  = package.path  ..';'..base..'/'..path..'/?.lua;';
                   package.cpath = package.cpath ..';'..base..'/'..path..'/?.so;';
                   love.filesystem.createDirectory(path)
                   unpack(path,path_mount,base)
                 elseif love.filesystem.getInfo(path_mount,'file')then
                        print("[autoreq] unpack -> "..val)
                        love.filesystem.write(path,love.filesystem.read(path_mount));
                else
                   print("[autoreq] ok -> "..val)
                end
            end
        end
    end
    local base = love.filesystem.getSaveDirectory();
    print("[autoreq] check depends in '"..base.."'")
    local dirname = "libs"
    local mount_point = "_autoreq_libs_"
    local dir = love.filesystem.createDirectory(dirname)
    local dir = love.filesystem.createDirectory(mount_point)
    data, err = love.filesystem.newFileData(zip)
    if not data then
       print("[autoreq] failed get zip archive for unpack -> '"..zip.."'")
       return false;
    end
    local success,msg = love.filesystem.mount(data,mount_point)
    unpack(dirname,mount_point,base);
    love.filesystem.setRequirePath ( package.path  );
    love.filesystem.setCRequirePath( package.cpath );
    local success,msg = love.filesystem.unmount(data);
    love.filesystem.remove(mount_point);
    print("[autoreq] all done okey")
    return true;
end

autoreq("libs.zip"); -- вызываем распаковку архива с библиотекой и импорта путей
require('lib'); -- вызываем нашу библиотеку

function love.load()
print(lib.example_c_function()) -- вызываем функцию из неё
end

Создаём love файл с нашей программой и её зависимостями

zip -r9 coolgame.love  main.lua libs.zip

Запускаем

love coolgame.love 
[autoreq] check depends in '/home/dron/.local/share/love/coolgame'
[autoreq] unpack -> lib.so
[autoreq] all done okey
0	hello from c

Всё работает, наша soшка может распространяться в обычном love файле. Будет создана такая структура каталогов. В автоматическом каталоге игры.

dron@gnu:~/.local/share/love$ tree 
.
└── coolgame
    └── libs
        └── libs
            └── lib.so

4 directories, 1 file
dron@gnu:~/.local/share/love$ 

Ну вот собственно и всё. На деле можно в lib.zip насовать произвольные файлы, с произвольными каталогами, например выполнить сборку openssl/luasec/luasocket

luarocks --tree `pwd`/luasec install openssl
luarocks --tree `pwd`/luasec install luasec
zip -9 -r libs.zip luasec -x 'luasec/lib/luarocks*'

И получившийся libs.zip просто добавить в свой love файл тем самым получив всё что нужно для работы с https в вашей программе. Я так и сделал в своей проверялке новостей например. Работать будет всё абсолютно прозрачно, ничего в коде учитывать и менять не надо. В том и прелесть. Ну разве что один раз вызвать autoreq('libs.zip') и всё.

Да, теряется смысл в переносимости love файлов ведь теперь там платформоспецифичные библиотеки таскаются. Но это просто вариант таскания с собой soшки если уж надо, но без всяких appimage упаковок и прочего, по иному дёрнуть внешнюю библиотеку из своей поставки из архива, просто никак нельзя. Но порой вот надо бывает. Я голову ломал довольно долго если честно пока не допёрло. Может кому пригодится.

Вроде всё. Досвиданья.

 , , , ,

LINUX-ORG-RU
()

CadZinho 0.3

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

А вы не были в Бразилии, где в лесах не очень много диких САПР? Они к-а-а-к нарисуют на плоскости (пока)!

Но это не важно, ведь дон Ezequiel Rabelo de Aguiar приручил CadZinho с помощью языка C, лёгкой IMGUI-библиотеки Nuklear, SDL 2.0 , OpenGL, Lua и лицензии MIT.


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

  • улучшен интерфейс;
  • добавлена возможность локализации интерфейса;
  • портирование на Emscripten.

Ссылки:

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

 , , , ,

dataman
()

Интерпретатор GNU APL под Termux (ARM)

Форум — Development

Всем привет. Простите меня за эту относительно мусорную тему. Интересно вот, есть где-нибудь скомпиленый бинарник интерпретатора языка APL под архитектуру ARM? А то под Termux ./configure и make никак никогда не пашут.

 , , , ,

projectorist
()

OpenToonz 1.7.*

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

После более года разработки состоялись выпуски 1.7 и 1.7.1 программы создания двумерных анимаций OpenToonz.

Краткий список изменений:

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

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

 , , ,

dataman
()

fmt 10.0.0

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

После восьми месяцев разработки состоялся выпуск 10.0.0 библиотеки форматирования данных fmt — быстрой и безопасной альтернативы stdio и iostreams для C++.

#include <fmt/color.h>

int main() {
    fmt::print(fmt::emphasis::bold | fg(fmt::color::red),
           "Elapsed time: {0:.2f} seconds", 1.23);
}

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

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

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

 , ,

dataman
()

FTXUI 4.1.1 - библиотека в функциональном стиле для создания консольных приложений

Новости — Open Source
FTXUI 4.1.1 - библиотека в функциональном стиле для создания консольных приложений
Группа Open Source

После более трёх месяцев разработки состоялся выпуск 4.1.1 кроссплатформенной библиотеки для C++ (стандарт C++17) FTXUI (Functional Terminal (X) User Interface), предназначенной для создания приложений с текстовым интерфейсом и распространяемой по лицензии MIT.

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

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

 , , , ,

dataman
()

FINAL CUT 0.9.0 - библиотека для создания консольных приложений

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

22 мая, после более полутора лет разработки, состоялся выпуск 0.9.0 C++ библиотеки FINAL CUT, предназначенной для создания приложений с текстовым интерфейсом, не зависящей от библиотек ncurses, termbox или подобных, и распространяемой по лицензии LGPL-3.0.

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

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

 , , , ,

dataman
()

После года молчания, новая версия редактора TEA (50.1.0)

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

Несмотря на добавление одной только циферки к номеру версии, изменений в популярном текстовом редакторе много. Некоторые незримы – это исправления для старых и новых Clang’ов, а также вывод ряда зависимостей в разряд отключенных по умолчанию (aspell, qml, libpoppler, djvuapi) при сборке с meson и cmake. Также, в ходе безуспешной возни разработчика с манускриптом Войнича, TEA обзавелся новыми функциями сортировки, фильтрации и анализа текста. Например, можно фильтровать строки по образцу с заданными повторяющимися символами, что годно не токмо для упомянутого манускрипта, но и при расшифровке прочих каверзных текстов, язык коих заранее неведом.

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

 , ,

roxton
()

Broot v1.0.2 (консольная утилита для поиска и манипуляции с файлами)

Новости — Open Source
Broot v1.0.2 (консольная утилита для поиска и манипуляции с файлами)
Группа Open Source

Консольный файловый менеджер, написанный на языке rust.

Особенности:

  • Предприняты меры для комфортного просмотра больших каталогов.
  • Поиск файлов и каталогов (используется нечеткий поиск).
  • Манипуляция файлами.
  • Есть многопанельный режим.
  • Предварительный просмотр файлов.
  • Просмотр занимаемого места.

Лицензия: MIT
Установленный размер: 5,46 MiB

В зависимостях gcc-libs и zlib.

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

 , ,

greenman
()

fheroes2 0.8.2

Новости — Игры
Группа Игры

Привет всем любителям игры «Герои меча и магии 2»!

Рады сообщить Вам, что свободный движок fheroes2 обновился до версии 0.8.2, которая является небольшим, но уверенным шагом к версии 0.9.

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

>>> Подробности на нашей странице.

 , , ,

sirDranik
()

DuploQ - графический фронтенд для Duplo (детектор дублированного кода)

Новости — Разработка
DuploQ - графический фронтенд для Duplo (детектор дублированного кода)
Группа Разработка

DuploQ представляет собой графический интерфейс к консольной утилите Duplo (https://github.com/dlidstrom/Duplo), предназначенной для поиска дублированного кода в исходных файлах (т.н. «копипаста»).

Утилита Duplo поддерживает несколько языков программирования: C, C++, Java, JavaScript, C#, но также может быть использована для поиска копий в любых текстовых файлах. Для указанных языков Duplo старается игнорировать макросы, комментарии, пустые строки и пробелы, выдавая пользователю максимально «чистые» результаты.

DuploQ значительно облегчает работу по поиску дублированного кода, позволяя быстро указать, где производить поиск, настроить необходимые параметры и визуализировать результаты в простом для понимания виде. Также можно создавать и сохранять для последующего использования проекты, включая в них необходимые папки и указав параметры и шаблоны имён файлов для поиска дубликатов в данном наборе.

DuploQ является мультиплатформенным приложением, написанным с помощью фреймвока Qt версии 5. В настоящее время как минимум поддерживаются следующие платформы (при условии установленной Qt версии не ниже 5.10):

  • Microsoft Windows 10
  • Ubuntu Linux
  • Fedora Linux

Также высока вероятность работы DuploQ на иных платформах, которые официально поддерживаются Qt Company.

На странице релиза DuploQ (https://github.com/duploq/duploq/releases) можно скачать как исходные коды, так и бинарные пакеты для указанных выше систем (64 bit only).

DuploQ + Duplo лицензированы под GPL-лицензией.

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

 , duplo, , ,

ii-system
()

Вышла CinelerraGG 2020-08

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

CinelerraGG — форк нелинейного видеоредактора Cinelerra с наиболее частыми релизами (раз в месяц). Из полезного в этом выпуске:

  • Добавлены горячие клавиши для сохранения сессии (CTRL-S) и отмены (CTRL-Z), в добавление к уже существующим s и z.
  • Новый тип ключевых кадров — bump keyframes. Позволяют создавать резко изменяющиеся параметры, например затухания или скорости.
  • При использовании кривой скорости (перемещение ключевого кадра мышкой с зажатой левой кнопкой) наглядно отрисовывается будущая длина дорожки
  • Языки можно переключать через настройки, а не только через переменные окружения.
  • Улучшения в функции выравнивания по таймкоду.
  • Новые плагины из ffmpeg: minterpolate (смена fps, медленный), allrgb (все цвета из возможных в RGB), allyuv (все цвета из возможных в YUV), cellauto, pullup (обратный telecine), selectivecolor (делает то же, что одноимённый фильтр в Фотошопе), tonemap

Известные баги:

  • Если выделить на таймлайне область, где есть несколько ключевых кадров (например, затухания), но оставить ещё несколько вне зоны выделения — то при выборе пункта «Удалить ключевые кадры» и включённой опции «Ключевые кадры сопровождают правку» ключевые кадры съедут. Временное решение: отключить опцию «Ключевые кадры сопровождают правку» на время удаления ключевых кадров в выделенной области.

    Update: баг оперативно исправили в git.


Bugzilla проекта

Мой Слакбилд с патчами

RPM для Rosa 64-bit

Мануал на англ, 659 стр, сделано в LaTex

PS: исходники в git, но можно и в архиве найти тут

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

 ,

Andrew-R
()

Выпуск редактора CudaText 1.110.3

Новости — Open Source
Выпуск редактора CudaText 1.110.3
Группа Open Source

CudaText — это свободный, кросс-платформенный редактор кода, написанный на Lazarus. Редактор поддерживает расширения на Python, и имеет несколько особенностей, позаимствованных из Sublime Text. На Wiki-странице проекта https://wiki.freepascal.org/CudaText#Advantages_over_Sublime_Text_3 автор перечисляет преимущества над Sublime Text.

Редактор подойдет продвинутым пользователям и программистам (доступно больше 200 синтаксических лексеров). Некоторые возможности IDE доступны в виде плагинов. Репозитории проекта находятся на GitHub. Для запуска в Linux есть сборки на GTK2 и Qt5. CudaText отличается относительно быстрым запуском (около 0.3 секунды на CPU Core i3).

Изменения, сделанные за последние 2 месяца:

  • Улучшен движок регулярных выражений TRegExpr. Добавлены атомарные группы, именованные группы, lookahead+lookbehind assertions, поиск юникодных групп по \p \P, поддержка символов юникода больших U+FFFF. Это тот же движок, который входит в Free Pascal, но версия из upstream. Есть надежда, что изменения из upstream войдут и в Free Pascal.

  • Доработаны лексеры. Например, JSON теперь подчеркивает все неверные JSON конструкции, Bash подчеркивает неверные «числа», PHP сильно доработан для прохождения тестов из другого редактора.

  • Добавлены опции:

    • Шрифт статус-бара.
    • Элемент UI-темы для цвета статус-бара.
    • Разрешение показа полосы вкладок.
    • Разрешение показа нижней и боковой панелей при запуске.
  • Команда «Проверить обновления» работает во всех ОС.

  • Новый лексер RegEx, для раскраски ввода диалога Поиск в режиме «регулярных выражений».

  • Вертикальные блоки для режима «перенос строк» теперь работают примерно так же, как и в Sublime Text и VS Code. Подробнее описано в Вики, https://wiki.freepascal.org/CudaText#Behaviour_of_column_selection

  • Для пользователей ST3 сделан раздел в Вики, показывающий, как многие действия ST3 выполнять в CudaText: https://wiki.freepascal.org/CudaText#CudaText_vs_Sublime_Text.2C_different_answers_to_questions

>>> Сайт программы

 ,

Alexey_Tor
()

Emacs 27.1

Новости — GNU's Not Unix
Группа GNU's Not Unix

Свершилось, братие и сестрие!

Долгожданный (кроме шуток - процесс релиза настолько затянулся что про это начали хохмить даже сами разработчики в рассылке emacs-devel) релиз системы исполнения emacs-lisp, реализующей редактор текста, файловый менеджер, почтовый клиент, систему установки пакетов и множество различных функций.

В данном выпуске:

  • встроенная поддержка чисел целых чисел произвольного размера (в Emacs встроен великолепный калькулятор с поддержкой RPN и алгебраических вычислений)
  • встроенная поддержка JSON
  • для рендеринга шрифтов теперь используется библиотека HarfBuzz
  • добавлена поддержка табов
  • работа с изображениями без использования ImageMagick
  • Lexical-binding используется по-умолчанию (если вы не писали на Lisp данный пункт можно смело игнорировать)
  • поддержка дополнительного конфига для ранней инициализации (это может быть интересно пользователям spacemacs)
  • поддержка спецификаций XDG на размещение файлов в домашней директории (наконец-то!)

Лично меня особенно радует последний пункт, хотя изменения и не ограничиваются перечисленным.

Ценители архи-боянов приглашаются в комментарии - делать ставки кто первый «пошутит» про отсутствие в GNU/Emacs текстового редактора: когда ещё доведётся услышать шутку, которая старше большинства посетителей ЛОРа?

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

 , , ,

zabbal
()

Анонсирован выход Perl 7

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

Вчера вечером на «Perl and Raku Conference in the Cloud», Sawyer X анонсировал смену основной версии Perl с 5 на 7. Работы уже ведутся, новая версия выйдет в течение года. Большого количества изменений ждать не стоит, если коротко: Perl 7 это всё тот же Perl 5.32 с современными настройками по умолчанию. Вам больше не надо явно подключать возможности которые вы и так используете, их включат для вас!

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

Perl 5.32 переходит в режим долгой поддержки на срок от 5 лет.

Развёрнутый анонс от Брайана Д Фоя: https://www.perl.com/article/announcing-perl-7/
TL;DR версия от него же: http://blogs.perl.org/users/brian_d_foy/2020/06/the-perl-7-tldr.html

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

 , perl7

perl5_guy
()

Большой релиз LanguageTool 5.0!

Новости — Офисные приложения
Группа Офисные приложения

LanguageTool — это свободная система для проверки грамматики, стиля, орфографии и пунктуации. LanguageTool может использоваться как приложение для рабочего стола, командной строки или как расширение LibreOffice/Apache OpenOffice. Для работы требуется Java 8+ от Oracle или Amazon Corretto 8+. В рамках отдельного проекта созданы расширения для браузеров Mozilla Firefox, Google Chrome, Opera, Edge. И отдельное расширение для Google Docs.

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

  • Обновлены модули проверки для русского, английского, украинского, французского, немецкого, арабского, каталанского, нидерландского, эсперанто, словацкого, испанского и португальского языков.
  • Расширены возможности интеграции с LibreOffice.
  • Для расширения LibreOffice (LT 4.8 и 5.0) обеспечена возможность подключения к внешнему LT-серверу. Можно использовать либо локальный сервер, либо подключиться к центральному серверу аналогично браузерным расширениям. Но для обеспечения стандартной работы расширения не требуется подключение к серверу. Подключение может быть использовано, если на сервере реализована расширенная функциональность, например, правила, использующие n-граммы или word2vec. По умолчанию в расширении используется встроенный движок LanguageTool.
  • Для LibreOffice 6.3+ реализована возможность кастомизации различных вариантов подчёркивания ошибок: волнистое, жирное, полужирное, пунктирное подчёркивание. Возможен выбор цвета подчёркивания для каждой категории ошибок. По умолчанию используется зелёный и синий цвет для выделения ошибок.

Изменения для русскоязычного модуля включают:

  • Создано 65 новых и улучшены существующие правила для проверки пунктуации и грамматики (Java и xml).
  • Расширен и исправлен словарь частей речи.
  • Добавлены новые слова в словарь для орфографической проверки.
  • В состав версии для рабочего стола включено два варианта словаря для проверки орфографии. Основной вариант словаря не делает различий между буквами «Е» и «Ё», а в дополнительном они различаются.

Анонс LT-5.0

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

 , , ,

Yakov
()