LINUX.ORG.RU

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

Kickstarter-кампания с целью открытия исходного кода Sciter

Новости — Проприетарное ПО
Группа Проприетарное ПО

На Kickstarter идёт кампания по сбору средств с целью открытия исходного кода Sciter. Период проведения: 16.09-18.10. Собрано: $2679/97104.

Sciter — это встраиваемый кроссплатформенный движок HTML/CSS/TIScript, предназначенный для создания GUI к настольным, мобильным и IoT приложениям, который уже долгое время используют сотни компаний по всему миру. Все эти годы Sciter был проектом с закрытым исходным кодом - его создатель, Андрей Федонюк, был его единственным разработчиком. Но, кажется, настало время привлечь других разработчиков для развития легковесной альтернативы Электрону!

Цели:

  • Открыть исходный код Sciter ориентировочно через 2 месяца после успешного завершения кампании.
  • Вариант Sciter на JavaScript - это тот же движок, но с JavaScript вместо используемого TIScript. Цель состоит в том, чтобы запустить популярные JS-фреймворки как есть или с минимальными усилиями по переносу. На данный момент планируется использовать QuickJS, чтобы движок оставался как можно более компактным, но при необходимости можно будет использовать V8. В планах сделать альтернативу Electron в духе Sciter.Quark.
  • Sciter.JS Inspector - проводник DOM и отладчик скриптов. Интеграция Sciter с другими языками, в частности, Sciter.Go, чтобы компилятор Go мог создавать монолитные распространяемые файлы Go/GUI. Другие проекты, которые придумает сообщество.

Планируется выпустить Sciter под лицензией GPL.

Дополнительные цели: Если кампания соберет вдвое больше средств, чем заявлено, то Sciter будет опубликован под лицензией BSD.

Презентация архитектуры Sciter.

Как помочь открыть код:

  • пожертвовать на кампанию или/и
  • распространять информацию о кампании: HackerNews, Reddit, ...

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

 , , ,

aserlor ()

почему команда dd пишет образ iso на флешку меньше чем за секунду?

Форум — Linux-hardware

размер 4 гига.

 

Zpp ()

репозиторий бинарных пакетов на git-хостинге

Форум — General

на каком сервисе лучше разместить несколько небольших репозиториев от 10 до 100 пакетов каждый? где выше скорость доступа? возможен ли бан? предполагается какой-нибудь gitignore и бамп раз в два-три месяца.

 ,

zombi_pony ()

Про qthread moveToThread

Форум — Development

Возможно ли создавать воркер прямо уже в созданном и qthread или я хочу слишком многого?

Например сейчас создаю поток и рабочий объект в нем так:

    m_eThread = new QThread();
    m_eWorker = new Extractor();
    m_eWorker->moveToThread(m_eThread);

    connect(m_eWorker, &Extractor::errorString, this, &U::errorString);

    connect(m_eWorker, &Extractor::extractionFinished, m_eThread, &QThread::quit);
    connect(m_eWorker, &Extractor::extractionFinished, m_eWorker, &Extractor::deleteLater);
    connect(m_eThread, &QThread::finished, m_eThread, &QThread::deleteLater);

    connect(m_eWorker, &Extractor::initialized, m_eWorker, &Extractor::extract);
    connect(m_eThread, &QThread::started, m_eWorker, [this, fileName, destDir]() {
        QMetaObject::invokeMethod(m_eWorker, [this, fileName, destDir]() { m_eWorker->initialize(fileName, destDir); });
    });

    m_eThread->start();
    m_eThread->setPriority(QThread::LowPriority);

Наркоманская магия (не уверен что последний connect правильно написан) в двух последних connect нужна чтобы Extractor создавал свои обьекты уже будучи перемещенным в m_eThread.
Выделение всего в конструкторе Extractor же приведет что moveToThread сломает, например, QNetworkAccessManager.

Напичкав код qDebug() << __FUNCTION__ << thread(); можно увидить:

U::createExtractionThread QThread(0x229d1b66cf0)
Extractor::Extractor QThread(0x229d1b66cf0)
Extractor::initialize QThread(0x229d5552870)
Extractor::extract QThread(0x229d5552870)
Extractor::extractDir QThread(0x229d5552870)
Extractor::extractFile QThread(0x229d5552870)

 ,

bhfq ()

Сбор подписей в поддержку финансирования Фонда открытых технологий (Open Technology Fund, OTF)

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

Сотни организаций и тысячи частных лиц, имеющих непосредственное отношение к разработке открытого ПО или правозащитной деятельности, обратились к Конгрессу США с просьбой не лишать открытые проекты фонда OTF финансирования из бюджета. Опасения по этому поводу у подписантов вызвал ряд недавних кадровых решений президента США Дональда Трампа, в результате которых приоритетную поддержку могут получить решения с закрытым исходным кодом. Это негативно скажется на безопасности и доступности ПО.

Фонд открытых технологий выступает в роли посредника между правительством США и рядом проектов с открытым исходным кодом. С 2012 г. фонд получает государственное финансирование через Агентство США по глобальным медиа (US Agency for Global Media, USAGM) и раздает гранты проектам с открытым исходным кодом, целью которых декларируется «защита демократии и свободы слова по всему миру».

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

 ,

Lzzz ()

Посоветуйте аудиоплеер который может в webdav

Форум — Talks

Добрый день ЛОР. Собственно разыскиваю плеер могущий в webdav для интеграции с nextcloud, желательно на qt.

 , , ,

xaTa ()

Загрузка любого дистрибутива в RAM

Форум — Talks

Здравствуйте мои юные кали-хакеры и любители оставаться анонимными. С утра, ковыряя VDS (пользуюсь услугами ру-провайдера), [ДАННЫЕ УДАЛЕНЫ] запрос, и [ДАННЫЕ УДАЛЕНЫ] дамп диска [ДАННЫЕ УДАЛЕНЫ].

А теперь скрипт, который из кастомного, т.е. созданного и настроенного вами chroot'а создаёт initramfs образ, готовый к загрузке и работе в tmpfs.

С ним вы можете на любой системе прямо «на лету» свичнуться в tmpfs, хоть прямо сейчас, на своём компьютере. Предварительно установив в chroot любой дистрибутив по желанию и настроив его под себя. А потом скриптом упаковать его в initramfs образ и свичнуться, да.

Для создания минимального (от слова «маленький», а не «огрызок») образа потребуется squashfs-tools. Чтобы свичнуться «на лету» нужен kexec-tools. Установите их. В ядре должны быть включены опции: CONFIG_OVERLAY_FS=y, CONFIG_SQUASHFS=y и CONFIG_SQUASHFS_XZ=y. [личное мнение: ZSTD получается размером больше, чем XZ]

Например. Хотите генту?

# mkdir gentoo_chroot/
# cd gentoo_chroot/
# wget https://bouncer.gentoo.org/fetch/root/all/releases/amd64/autobuilds/20200519T155804Z/stage3-amd64-20200519T155804Z.tar.xz
# tar xf stage3-amd64-*.tar.xz
# rm stage3-amd64-*.tar.xz
# cd ..

На этом этапе мы получили ванильную генту в gentoo_chroot/. Рекомендую её настроить, хотя бы сделать chroot gentoo_chroot/ /bin/bash и установить passwd для root, иначе в систему вы не войдёте. Я не знаю, что это за особенность такая, не давать установить пароль если его нет. В моём CRUX когда пароль на root отсутствует и ты логинишься первый раз (в tty или в ssh по ключу), оно просто предлагает установить пароль. Какая тут может быть дыра в безопасности на свежеустановленной системе? Не знаю...

Предлагаю так же в gentoo_chroot/ скопировать модули и фирмварь для корректной работы текущего ядра и железа.

# cp -a /lib/modules gentoo_chroot/lib/modules
# cp -a /lib/firmware gentoo_chroot/lib/firmware

Ну и создадим образ наконец.

# ./mkchrootrd gentoo_chroot/ ~/gentoo_initrd

Усё. У нас теперь целая настоящая гента в gentoo_initrd файлике упакована. Давайте загрузимся же в неё скорее с текущим ядром.

# eval $(cat /proc/cmdline | cut -f 1 -d \ )
# kexec -l $BOOT_IMAGE --initrd=gentoo_initrd --reuse-cmdline
# kexec -e

Если вы не хотите делать kexec по каким-то причинам, то положите этот же образ в свой /boot, а в параметрах загрузки укажите initrd /gentoo_initrd. Перезагрузитесь и получите тот-же результат.

Ура! Гента загрузилась. Тоже самое можно проделать с любым дистрибутивом, просто установите его, настройте как вам угодно, а затем скриптом создайте initramfs образ. Я уж взял для примера Gentoo, не стал лишний раз приводить в пример CRUX.

Жмём Reset чтобы сбросить всё и загрузиться в свою систему с морально устаревшего M.2 NVMe накопителя обратно.

Перевёл свою VDS на работу в tmpfs. Диск /dev/vda отформатировал в NTFS. Рекомендую всем. 👍👍👍👍👍👍

Скрипт:

#!/bin/bash
#
# Author: Sp00f1ng <sp00f1ng@sp00f1ng.com>
# License: Public Domain
#
################################################################################
#
# mkchrootrd chroot_directory/ [initrd_image]
#
################################################################################
# 
# Depends on: squashfs-tools
# Optional:   kexec-tools
# Kernel:
#
# File systems  --->
#    <*> Overlay filesystem support
#    [*] Miscellaneous filesystems  --->
#       <*> SquashFS 4.0 - Squashed file system support
#          [*] Include support for XZ compressed file systems
#
################################################################################
#
# Example usage:
#
# mkdir gentoo_chroot/
# cd gentoo_chroot/
# wget https://bouncer.gentoo.org/fetch/root/all/releases/amd64/autobuilds/20200519T155804Z/stage3-amd64-20200519T155804Z.tar.xz
# tar xf stage3-amd64-*.tar.xz
# rm stage3-amd64-*.tar.xz
#
# [.. do something else with gentoo_chroot/ like additional configuration ...]
# [ cp -a /lib/modules ./lib/modules ]
# [ cp -a /lib/firmware ./lib/firmware ]
#
# cd ../
#
# ./mkchrootrd gentoo_chroot/ ~/gentoo_initrd
#
# eval $(cat /proc/cmdline | cut -f 1 -d \ )
# kexec -l $BOOT_IMAGE --initrd=gentoo_initrd --reuse-cmdline
# kexec -e
# 
# Have fun and happy hacking day 1 <3 <3 7 !

panic() {
	if [ -e "$TMP" ]; then
		rm -rf $TMP 2>/dev/null
	fi
	exit ${1:1}
}

got_help() {
	grep ^\# "$0"
}

got_cmdline() {
	while [ "$1" ]; do
		if [ ! -n "$CHROOT_DIR" ]; then
			CHROOT_DIR="$1"
			shift
			continue
		fi
		if [ ! -n "$INITRD_IMG" ]; then
			INITRD_IMG="$1"
			shift
			continue
		fi
		shift
	done
}

cp_bin() {
	local src="$1"
	local dst="$2"
	local dep=""

	if [ "$dst" = "" ]; then
		dst="$src"
	fi

	if [ -e "$TMP$dst" ]; then
		return
	fi

	install -D -m 0755 "$src" "$TMP$dst"

	for dep in $(ldd "$src" 2>/dev/null | grep -o '/.* '); do
		cp_bin "$dep"
	done
}

mk_env() {
	for dir in proc sys dev run mnt overlay; do
		install -d $TMP/$dir
	done

	for dev in console tty tty1 null; do
		cp -a "/dev/$dev" "$TMP/dev/$dev"
	done

	for bin in sh switch_root mount umount mkdir rmdir; do
		cp_bin "$(which $bin)"
	done

	touch $TMP/init
	chmod +x $TMP/init

	cat > $TMP/init << EOF
#!/bin/sh
mount -t proc none /proc
echo "0" > /proc/sys/kernel/printk
mount -t sysfs none /sys
mount -t devtmpfs devtmpfs /dev
mount -t tmpfs none /run
mount -t tmpfs tmpfs /overlay
lowerdir="/lower"
upperdir="/overlay/upper"
workdir="/overlay/work"
mkdir -p \$lowerdir
mkdir -p \$upperdir
mkdir -p \$workdir
mount -t squashfs -o ro /root.sqfs \$lowerdir
mount -t overlay -o ro,lowerdir="\$lowerdir",upperdir="\$upperdir",workdir="\$workdir" overlay /mnt
umount /proc
umount /sys
umount /dev
umount /run
exec switch_root /mnt /sbin/init
EOF
}

main() {
	CHROOT_DIR=""
	INITRD_IMG=""

	got_cmdline "$@"

	if [ ! -n "$CHROOT_DIR" ] || [ ! -n "$INITRD_IMG" ]; then
		got_help
		panic 0
	fi

	if [ ! -d "$CHROOT_DIR" ]; then
		echo "'$CHROOT_DIR' is not directory."
		panic 1
	fi

	if [ ! -x "$(which mksquashfs)" ]; then
		echo "'mksquashfs' squashfs-tools not found."
		panic 1
	fi

	mk_env

	mksquashfs $CHROOT_DIR $TMP/root.sqfs \
		-b 1048576 -comp xz -Xdict-size 100%

	cd $TMP
	echo "Building Initial RAM Disk [$INITRD_IMG]"
	find . -print0 | cpio --null --create --format=newc --verbose > "$INITRD_IMG"
	echo "Done [$INITRD_IMG]"
}

trap "panic" INT HUP QUIT TERM EXIT

readonly MKCHROOTRD_COMMAND="$0"
readonly MKCHROOTRD_VERSION="1.0"

TMP=$(mktemp -d)

main "$@"

# EOF

 ,

Spoofing ()

FlightGear 2020.1

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

Вышла в свет версия 2020.1 свободного авиасимулятора FlightGear. Авиасимулятор разрабатывается с 1997 года и используется как фанатами авиасимуляторов, так и в учебных и научных целях в вузах или в качестве интерактивных выставок в различных музеях.

Улучшения после версии 2019.1:

  • Фреймворк рендеринга Compositor вынесен в отдельный бинарник.
  • Улучшена поддержка авианосцев.
  • Улучшены модели полётной динамики JSBSim и YASim.
  • Улучшены опции вида.
  • Улучшено отображение строений OpenStreetMap.
  • Обновлены модели Boeing 777, Airbus A320, Ан-24, F-16, Piper J3Cub, Saab JA37 Viggen, Piper PA28 Cherokee, Bombardier Q-400, Space Shuttle.

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

 , ,

gedisdone ()

Golang book

Форум — Development

Посоветуйте plz сабж, ну или какой-нибудь ресурс. Это https://tour.golang.org/welcome/1 прочел и базовые понятия есть, но хочется углубить знания. Спасибо!

 

dissident ()

Передача данных через DMA и PCIe

Форум — Development

Всем привет.

Подскажите пожалуйста, что я делаю не так.

Задача: передать массив данных в ПЛИС через PCIe и DMA.

Пока данные могу слать и читать с помощью ioread и iowrite, так же можно переслать через memcry, это говорит что девайс на pci жив и с ним можно работать, dma в пределах ПЛИСА так же отлично работает.

Вот теперь пытаюсь выделить кусок физической памяти в хосте, проинитеть его тестовыми данными (я просто решил её полностью заполнить константным значением), затем передать адрес этой памяти в pcie ПЛИСА и забрать от туда данные через dma (те pcie заберет по адресу данные, положит их к себе в выделенный бар (axi bar) и даст команду dma что можно забирать и складывать в ddr.

регистры ddr и pcie ПЛИСА так же пишутся, проверял. По всей видимости, косяк в коде.

Изначально область BAR0 (axi bar) со стороны ПЛИС обнулена, область для тестовых данных в DDR я тоже зануляю по включению питания. Когда шлю данные из хоста в BAR0 (axi bar) появляются странные, но достаточно не хаотичные цифры, но отличные от тех что шлю. Это говорит о том что что-то всётаки приходит из хоста.

Посмотрите пожалуйста код и подскажите что исправить.

#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/module.h>
#include <linux/pci.h>
#include <linux/delay.h>
#include <linux/interrupt.h>
#include <linux/dma-mapping.h>

#include "vi_cntr.h"

MODULE_LICENSE("GPL");
MODULE_AUTHOR("Drakonof");
MODULE_DESCRIPTION("PCI");
MODULE_VERSION("0.1");
 

#define CDMA_BAR  0
#define PCI_BAR   1
#define DDR_BAR   2


#define DEVICE_NAME "drakonof_pci"

static dma_addr_t dma_handle = 0;
static void * dmabuf = NULL;
static volatile uint32_t *pci_reg_mem = NULL, *cdma_reg_mem = NULL;
static volatile uint32_t  *ddr_mem = NULL;
static resource_size_t cdma_start,cdma_len,pci_start,pci_len,ddr_start,ddr_len;


static struct pci_device_id vi_cntr_pci_id[] = {
{ PCI_DEVICE(VI_CNTR_VENDOR, VI_CNTR_ID), },
{ 0, }
};


MODULE_DEVICE_TABLE(pci, vi_cntr_pci_id);


static int vi_cntr_probe(struct pci_dev *pDev, const struct pci_device_id *id);
static void vi_cntr_remove(struct pci_dev *pDev);


static struct pci_driver vi_cntr_pci = {
    .name = DEVICE_NAME,
    .id_table = vi_cntr_pci_id,
    .probe = vi_cntr_probe,
    .remove = vi_cntr_remove
};


static int __init pci_init(void)
{
    struct pci_dev *p_pci_dev = NULL;

    if((p_pci_dev = pci_get_device(VI_CNTR_VENDOR,VI_CNTR_ID,                     p_pci_dev)) == NULL)
    {
        printk(KERN_NOTICE "PCI device not finded\n");
    }

    return pci_register_driver(&vi_cntr_pci);
}


static void __exit pci_exit(void)
{
    pci_unregister_driver(&vi_cntr_pci);
}


static int vi_cntr_probe(struct pci_dev *p_pci_dev, const struct pci_device_id *pId)
{
    u16 vendor = 0,
        id = 0;

    u32 i = 0;


    if(pci_enable_device(p_pci_dev))
    {
        printk(KERN_INFO "pci_enable_device error\n");
    }

    pci_read_config_word(p_pci_dev, PCI_VENDOR_ID, &vendor);
    pci_read_config_word(p_pci_dev, PCI_DEVICE_ID, &id);

    printk(KERN_INFO "\n----------------------------------\n");
    printk(KERN_INFO "Device vendor: 0x%X\nDevice id: 0x%X\n", vendor, id);

    cdma_start = pci_resource_start(p_pci_dev,CDMA_BAR);
    cdma_len = pci_resource_len(p_pci_dev,CDMA_BAR);
    pci_start = pci_resource_start(p_pci_dev,PCI_BAR);
    pci_len = pci_resource_len(p_pci_dev,PCI_BAR);
    ddr_start = pci_resource_start(p_pci_dev,DDR_BAR);
    ddr_len = pci_resource_len(p_pci_dev,DDR_BAR);

    if(pci_set_dma_mask(p_pci_dev, DMA_BIT_MASK(64)))
    {
        printk(KERN_INFO "pci_set_dma_mask error.\n");
        return -1;
    }


    if((dmabuf=dma_alloc_coherent(&p_pci_dev->dev,8192,&dma_handle,GFP_USER)) == NULL)
    {
        printk(KERN_INFO "dma_alloc_coherent error.\n");
        return -1;
    }

    if(pci_request_regions(p_pci_dev, DEVICE_NAME))
    {
        printk(KERN_INFO "pci_request_regions error.\n");
        return -1;
    }

    pci_set_master(p_pci_dev);

    if((cdma_reg_mem = ioremap(cdma_start,cdma_len)) == NULL)
    {
        printk(KERN_INFO "ioremap pci_reg_mem error.\n");
        return -1;
    }

    if((pci_reg_mem = ioremap(pci_start,pci_len)) == NULL)
    {
        printk(KERN_INFO "ioremap pci_reg_mem error.\n");
        return -1;
    }

    if((ddr_mem = ioremap(ddr_start,ddr_len)) == NULL)
    {
        printk(KERN_INFO "ioremap pci_reg_mem error.\n");
        return -1;
    }

    // здесь я заполняю массив для передачи константой
    dma_sync_single_for_cpu(&p_pci_dev->dev, dma_handle, 8192, DMA_TO_DEVICE);
    for(i = 0; i < 256; i++)
    {
        *(u32*)(dmabuf + i)= 0xABCDEF89;
    }
    dma_sync_single_for_device(&p_pci_dev->dev, dma_handle, 8192, DMA_TO_DEVICE);

    // передаю адрес выделенной физической памяти в pcie ПЛИСА
    pci_reg_mem[0x208/4]=(dma_handle >> 32);
    pci_reg_mem[0x20c/4]=(dma_handle & 0xFFFFFFFF);

    // заполняю регистры cdma ПЛИС
    cdma_reg_mem[0x18/4]=0x30000000; // из BAR0 (axi bar)
    cdma_reg_mem[0x20/4]=0x80000000; // в ddr
    // передать 256 байт, это так же запускает копирование 
    // данных из BAR0 (axi bar) в ddr
    cdma_reg_mem[0x28/4]=256;

    // жду статуса конца передачи от cdma
    i = 0;
    while(!(cdma_reg_mem[0x4/4] & 0x2))
    {
        if(i == 100000)
    { 
        printk(KERN_INFO "SR ERR %X\n",cdma_reg_mem[0x4/4]);
        break;
    }
        else i++;
    }

    iounmap(pci_reg_mem);
    iounmap(cdma_reg_mem);
    iounmap(ddr_mem);
    pci_release_regions(p_pci_dev);
    pci_disable_device(p_pci_dev);
    dma_free_coherent(&p_pci_dev->dev, 8192, dmabuf, dma_handle);

  return 0;
}

Спасибо!

 , ,

Drakonoff ()

Осваиваемся с Vulkan

Форум — Development

Примерно за пол-года вроде как разобрался с Vulkan.

Пишу сейчас рендерер плагин для своего графического движка

https://gitlab.com/KawaiiGraphics/KurisuRenderer

После OpenGL, для которого всё есть GLint либо GLuint, очень порадовала типизация. Также командные буферы – действительно крутая вещь – в них мало того, что можно писать из нескольких потоков (хотя и с ограничениями), так ещё и записанные однажды, они могут использоваться многократно! Возможность обеспечить более полную загрузку железа с меньшим временем на ожидание вертикальной синхронизации, например, через явное управление очередями тоже впечатляет.

В общем Vulkan в целом мне зашёл. Но есть несколько «но».

Во-первых непонятно зачем перекорёжили гомогенные координаты – ось y зачем-то направили вниз, а глубину и вовсе загнали в интервал от 0 до 1, вместо -1 до 1. Насколько я понимаю, то как направлены оси, в общем-то, ни от чего не зависит. Просто решили, что они направлены вот так и всё. А потому не ясно зачем было менять их – если бы оси были направлены как в OpenGL, можно было бы кормить Vulkan теми же матрицами и мешами, что и OpenGL без всяких плясок с бубном в шейдерах. Ну да ладно, направили оси иначе и направили.

Во-вторых и в главных – SPIRV. В OpenGL замечательная система шейдерных модулей, для которых компиляция отделена от линковки, которая позволяет приложению конструировать шейдерные программы (а в последних версиях OpenGL стадии) из функциональных взаимозаменяемых блоков. Совершенно не ясно, зачем было её херить :( В Vulkan стадии стали неделимыми, так ещё и бинарными. У нас всё ещё графический API и ли какой-нибудь уродский .NET с промежуточным байт кодом? Видимо разработчикам движков так ненавязчиво предлагается иметь некоторый набор заданных заранее семейств материалов и не давать пользователям в руки шейдеры в принципе? Но это же дно-о-о. Мы так в 90-е – 00-е вернёмся, когда был только фиксированный графический конвейер – и всё. В 20-х у нас будет чуть больше моделей освещения/затенения, парочка интересных эффектов водной поверхности, огня и т.д. Но всё так же никакой гибкости.

В общем будущее светло, но не безоблачно. Многопоточный рендеринг, кеширование сцен и возможность безбубенной многооконности, сияют, превращая ночь в день, а днём затмевая Солнце; а маячащая на горизонте возможность multi GPU через DMABUF звучит как гимн разума и изобретательности :D Но отношение Khronos к шейдерам, как минимум, настораживает..

Кто уже тоже успел повулканить? Что думаете о наступившем будущем?

 , , , ,

robus ()

Программный MCU сервер для видео конференций

Форум — Admin

Есть в природе нормальный опенсорсный, либо халявный MCU для SIP-клиентов ? Нагрузка будет небольшая, до 4 терминалов.

 ,

ovax ()

Принцип работы webrtc?

Форум — Web-development

Где можно найти подробное описание?
Вот браузер отправляет запрос к серверу по tcp.
Ответ идет с ip stun сервера к которому браузер подключается по udp, чтобы получить свой внешний ip?
Что потом?

 

yoholo ()

Ядро Linux в Eclipse CDT

Галерея — Скриншоты

Решил открыть в последнем (4.14) Eclipse CDT проект на C, использующий Makefile в свободной форме.

Что ж, проиндексировалось и открылось всё весьма быстро и, как видно, сам Eclipse в памяти занимает меньше 1 ГБ. И да, я могу вручную (ни о каком автоопределении целей, как это умеет remake, речи не даже идёт) добавить произвольные цели make (make targets) и собрать их (см. окно «Build Targets» справа).

Но на этом плюсы заканчиваются.

Eclipse не обрабатывает Makefile’ы и не строит базу данных компиляции в процессе создания проекта и потому индексирует тупо всё, что попадётся под руку. Это значит, что список включённых в проект файлов (часть модулей же обычно исключена из .config), равно как и #define’ы, ему априори неизвестны, и ни о каком точном рефакторинге говорить нельзя.

Более того, часть (включённого) кода в редакторе «сияет красным», и мне сообщают об ошибках, которых нет. Так, на снимке на 324-й строке fs/btrfs/async-thread.c Eclipse не может определить тип переменной work, хотя и ежу понятно, что это тип struct btrfs_work *, и этот тип определён в лежащем рядышком хедере. При попытке навигации к объявлению переменной work (хотя это локальная переменная в btrfs_work_helper()) мне предлагается 100500 кандидатов, разбросанных по всему проекту (диалог Open Declaration).

Вердикт – текстовый редактор, не более. Я, как давний пользователь и поклонник Eclipse, реально разочарован.

Несколько обязательных комментариев:

  • WM – WindowMaker
  • Тема оформления GTK3 – Greybird. К сожалению, только в «штатных» темах Adwaita, Greybird и Numix Eclipse выглядит удовлетворительно (в силу того, что разработчики SWT сделали ряд «хаков» для поддержки этих конкретных тем оформления), хотя, напр., поля ввода по-прежнему выглядят гигантскими. Сами разработчики рекомендуют попробовать отключить вышеупомянутые «хаки» (-Dorg.eclipse.swt.internal.gtk.noThemingFixes, см. bug 527729) и включить Clearlooks-Phénix, но, на мой взгляд, там работы ещё непочатый край: кнопки панели инструментов становятся раза в полтора больше и «уезжают» вправо.
  • Да, ШГ. Да, «кровь из глаз». Да, я всё это уже не раз слышал.

>>> Просмотр (1920x1200, 146 Kb)

 , ,

Bass ()

Детский вопрос про DNS (systemd-resolve)

Форум — General

Настраиваю подключение для eth0

auto lo
iface lo inet loopback

        iface eth0 inet static
                address 192.168.1.201
                netmask 255.255.255.0
                gateway 192.168.1.1
                dns-nameservers 192.168.1.1 8.8.8.8
        auto eth0

пробую ping 8.8.8.8 работает, а ping www.ya.ru - нет. понятно, что проблема в dns, но я ведь в настройе указал dns-nameservers.

Установлен systemd-resolve, если в настройке /etc/systemd/resolved.conf указать DNS=192.168.1.1 8.8.8.8, то все пингуется и по имени.

вопрос, почему dns, которые указаны в настройке сетевой карты игнорируются?

 , ,

krendelw ()

Подскажите нормальную БД для которой существует неблокирующий сишный API

Форум — Development

Суть — доступ к базе в event-loop при большом количестве входящих http соединений — over 30k.

event-loop подразумевается на базе libuv.

 , , ,

cvv ()

Рабочий стол юриста

Галерея — Скриншоты

Юристы, как водится, почти всегда сидят на оффтопике. Я не исключение, потому как очень многие вещи там делаются привычнее и быстрее, плюс ряд задач решается сильно быстрее (электронная подпись в их числе). А время - деньги. Однако я делаю шаги (аж с 2006 года) в сторону организации своего рабочего места полностью на Linux, потому как оффтопик последнее время меня не радует ни новостями, ни функционалом, ни багами. Если менять привычки, то не все ли равно - на новый оффтопик или на Linux?

В данный момент у меня установлена Xubuntu 18.04.3, тема Sierra-compact-light-solid-alt, значки McMojave-circle и plank в качестве дока. Шрифты везде Noto Sans Display.

Я сторонник здорового минимализма, хотя и люблю всякие спецэффекты. Xfce в этом плане меня покорил - есть все, что нужно, работает быстро, смотрится красиво. И да, это закос под Mac. Просто мне нравится и все тут.

Для работы я в основном использую либо LibreOffice, либо SoftMaker Office, в зависимости от того, как сложен документ или таблица. Совместимость с заказчиками меня мало волнует, т.к. итоговый документ как правило они открывают на Mac, а там оно почему-то даже в родном MS Office иногда едет по форматированию. Кроме того, ряд заказчиков использует Google Docs, в котором, на мой взгляд, управление форматированием сделано хуже некуда. Ну и на крайний случай всегда есть PDF, в котором ничего нигде не поедет и есть удобная функция комментирования, которая дает моим заказчикам ставить замечания тем или иным пунктам в документах.

Для работы с цифровой подписью у меня стоит КриптоАРМ ГОСТ, который вы можете увидеть в трее. Где-то в фоне крутится КриптоПро, который удачно подхватил мой Рутокен Лайт. Все это добро удалось настроить вместе с Chromium так, что я могу подписывать документы и на сайте арбитражных судов, судов общей юрисдикции, авторизовываться на госуслугах и подписывать файлы локально отсоединенной подписью. Единственное, что не работает - авторизация в личном кабинете ЮЛ на сайте ФНС. Тупо потому, что там при проверке выясняется, что у меня не Windows. А так бы и это работало. Что точно не работало бы - сайты ЭТП, где идет ориентация на подписание через ActiveX. Но я не занимаюсь торгами и слышал, что таких ЭТП становится все меньше.

Вопрос с кроссплатформенностью Консультанта Плюс я решил радикально - купив веб-версию. Она хоть и сильно урезана, даже в максимальной версии, но мне хватает.

Какие-то конфиги и что-то там еще не вижу смысла показывать - что-то я правил (конфиг libinput недавно, например), а что-то осталось дефолтным. Все ж надо учитывать, что это не компьютер программиста, а всего лишь юриста.

>>> Просмотр (1366x768, 1692 Kb)

 , ,

mshewzov ()

Запускалка BMPN для скриптовой автоматизации?

Форум — Admin

В чём загвоздка: есть груда скриптов, связанных друг с другом событиями. Некоторые скрипты вызывают другие просто так, некоторые ждут, пока что-нибудь не появится (почтовое сообщение, например), некоторые запускаются через интервал времени X после завершения предыдущего. Есть логические ветвления, всё как в обычной BPMN-диаграмме.

Сейчас всё сделано на «кроне», т.е. выполняется по каким-то не всегда понятным законам по расписанию периодически. Как это всё взаимосвязано, какими событиями, какие могут быть ветвления - понятно только из текста скриптов после очень долгого разбора полётов с чтением текста и общением с разработчиками.

Хотелось бы всё это задвинуть на BMPN executor, разбив весь процесс на связанные событиями куски. Например, скрипт шлёт почту удалённой системе - следующий шаг будет сделан только тогда, когда удалённая система ответит почтовым сообщением (вот как-то так оно всё сделано, к сожалению). В этом случае можно и замониторить через REST API, на каком этапе процесс находится, можно легко настроить процесс, а главное - это самодокументированная вещь, поскольку документацию никто писать не любит.

Посмотрел Camunda, у него тотальная привязка скриптов к Groovy/Java, что мне не очень нравится. Посмотрел Bonita - там можно /bin/sh запускать, вроде подходит. Сервер BPM Executor’а должен быть там же, где всё это запускаемое по крону хозяйство.

Ну мало ли вдруг кто уже сталкивался с подобным… Печально конечно, что все BPM-системы написаны на Java - а значит, живут в своём собственном мире и не знают ни про какие STDIN, STDOUT, параметры командной строки и всё прочее. Между тем, нужен в идеале инструмент «поближе к системе», менее абстрактный что ли.

Заранее Гигантское СПАСИБО!

 , , ,

DRVTiny ()

Как можно пропатчить исходники ядра?

Форум — General

Здравия! Есть на арм исходники ядра от sunxi, но в них в драйверах ввода-вывода проблема-если пишет на диск например видео с камер или с нета загрузка идёт, то система виснет, да так, что логгировать нереально, два года я с этой проблемой мучаюсь, но вот попробовал гентушные сорцы-там этого нет, не виснет. Но из гентушных сорцов собирается без рабочего eth0, потому подумал я, а можно пропатчить драйвер? По идее исходники же текстовые файлы? Только не знаю я, как это сделать, надеюсь подскажут здесь.

 ,

burato ()

Кросс компиляция qt

Форум — Development

Пытаюсь собрать qtbase-5.7.1 на debian 10 (amd64) для win32, при выполнении ./configure получаю ошибку:

./configure \
	-v \
	-xplatform win32-g++ \
	-device-option CROSS_COMPILE=i686-w64-mingw32- \
	-prefix ../qtbase-everywhere-win32_5.7.1/ \
	-opensource \
	-confirm-license \
	-release \
	-strip \
	-shared \
	-gui \
	-widgets \
	-no-opengl \
	-nomake tests \
	-nomake examples \
	-qt-sql-mysql \
	-qt-sql-odbc \
	-qt-sql-sqlite \
	-qt-sql-sqlite2
...
i686-w64-mingw32-g++ -Wl,-s -Wl,-subsystem,windows -mthreads -o mysql.exe mysql.o  -L/usr/lib/i386-linux-gnu -lmariadb -lmysqlclient 
/usr/bin/i686-w64-mingw32-ld: cannot find -lmariadb
collect2: error: ld returned 1 exit status
make: *** [Makefile:62: mysql.exe] Ошибка 1

libmariadb-dev:i386 и libmariadb-dev-compat:i386 установлены, libmariadb.so лежит на месте:

ls /usr/lib/i386-linux-gnu/*mariadb*
364K -rw-r--r-- 1 root root 361K фев  2 19:33 /usr/lib/i386-linux-gnu/libmariadbclient.a
   0 lrwxrwxrwx 1 root root   15 фев  2 19:33 /usr/lib/i386-linux-gnu/libmariadbclient.so -> libmariadb.so.3
   0 lrwxrwxrwx 1 root root   15 фев  2 19:33 /usr/lib/i386-linux-gnu/libmariadb.so -> libmariadb.so.3
272K -rw-r--r-- 1 root root 269K фев  2 19:33 /usr/lib/i386-linux-gnu/libmariadb.so.3

Как побороть данную проблему?

 , ,

MIV ()