LINUX.ORG.RU

Сообщения nvl

 

Как эстетически решить проблему долгой загрузки WEB-страницы?

Форум — Web-development

Проблема в следующем, есть WEB-страница управления контроллером. Ресурсов контроллера хватает на отдачу страницы в течение 3 секунд. Эстетически прорисовка всех элементов по мере загрузки выглядит не очень привлекательно. Попытался решить проблему путем показа спинера на время заргузки страницы, визуально все красиво, но спинер также показывается не сразу, т.к. сначала грузится head-блок, в котором относительно увесистый блок стилей.

<html>
  <head>
    <style>
      <!-- блок стилей-->
    </style>
  </head>
  <script>
   <!--код показа спинера, пока не загрузится полностью страница-->
  </script>
  <body>
    <div id="spinner"/>
    <div id="content">
      <!-- сожержание страницы-->
    </div>
  </body>
</html>

Какие есть варианты решения проблемы?

 ,

nvl
()

GDK Broadway backend, какие сценарии использования?

Форум — Desktop

Попробовал посмотреть как выглядит gnome-contacts на телефоне с android. В режиме «на весь экран» выглядит вполне, адаптивная верстка libadwaita делает gtk4-софт пригодным для отображения на телефоне https://i.postimg.cc/fbj4C4Zm/Screenshot-2022-10-12-15-20-27-410-org-mozilla-...

Смущает то, что если пытаться использовать это как web-приложение, нужен доступ к хосту для запуска самого приложения ( GDK_BACKEND=broadway BROADWAY_DISPLAY=:5 gnome-contacts)

Каковы реальные сценарии использования gtk-софта с бэкэндом Broadway?

 ,

nvl
()

Как сделать градиент по кривой в Inkscape?

Форум — Multimedia

Можно ли залить обводку градиентом так, чтобы на всем пути кривой цвет переходил от одного к другому:

https://i.postimg.cc/3wh2yd4Y/2021-09-05-08-38-59.png

 ,

nvl
()

Как правильно обработать потоковые данные?

Форум — Development

Контроллер посылает (нон-стоп) данные (uart 7e1) на 8-разрядный 7-сегментный дисплей с 4-мя статусными светодиодами.

Если логичкски сгруппировать данные, то каждая посылка начинается с 0x00 или 0x04, далее следуют 8 байт на индикаторы, байт на светодиоды и контрольная сумма:

0x00 0x3F 0x3F 0x3F 0x3f 0x3F 0x3F 0x3F 0x3F 0x00 0x78
0x00 0x3F 0x3F 0x3F 0x3f 0x3F 0x3F 0x3F 0x3F 0x00 0x78
0x00 0x3F 0x3F 0x3F 0x3f 0x3F 0x3F 0x3F 0x3F 0x00 0x78
0x04 0x3F 0x3F 0x3F 0x3f 0x3F 0x3F 0x3F 0x3F 0x00 0x7C
0x00 
0x00 0x3F 0x3F 0x3F 0x3f 0x3F 0x3F 0x3F 0x3F 0x00 0x78
0x04 0x3F 0x3F 0x3F 0x3f 0x3F 0x3F 0x3F 0x3F 0x00 0x7C
0x00 
0x00 0x3F 0x3F 0x3F 0x3f 0x3F 0x3F 0x3F 0x3F 0x00 0x78
0x04 0x3F 0x3F 0x3F 0x3f 0x3F 0x3F 0x3F 0x3F 0x00 0x7C
0x00 
0x00 0x3F 0x3F 0x3F 0x3f 0x3F 0x3F 0x3F 0x3F 0x00 0x21
0x04 0x3F 0x3F 0x3F 0x3f 0x3F 0x3F 0x3F 0x3F 0x21 0x1D
0x00 
0x00 0x3F 0x3F 0x3F 0x3f 0x3F 0x3F 0x3F 0x3F 0x21 0x19
0x04 0x3F 0x3F 0x3F 0x3f 0x3F 0x3F 0x3F 0x3F 0x21 0x1D
0x00 
0x00 0x3F 0x3F 0x3F 0x3f 0x3F 0x3F 0x3F 0x3F 0x21 0x19
0x00 0x3F 0x3F 0x3F 0x3f 0x3F 0x3F 0x3F 0x3F 0x21 0x19
0x00 0x3F 0x3F 0x3F 0x3f 0x3F 0x3F 0x3F 0x3F 0x00 0x78

Если строка начинается с 0x04, то просто нужно прочитать 11 байт включительно.

Проблема для меня заключается в том, что данных начинающихся с 0x00 значительно больше и если их не читать, то обновления информации сильно запаздывают.
Как правильно распознать эту строку, начинающуюся с 0x00, с учетом того, что каждый 7-сегментный индикатор или светодиоды могут не гореть, т.е. соотвествующий байт тоже может быть 0x00?:

0x00 0x3F 0x00 0x00 0x3f 0x3F 0x3F 0x3F 0x3F 0x00 0x7A

 ,

nvl
()

Как определить формат UART: 8n1 или 7e1 или 5o2 или ...?

Форум — General

Контроллер передает информацию на дисплей по UART. Скорость известна. Есть возможность прослушать и сдампить обмен данными с помошью USB-UART адаптера. Как определить формат?

 

nvl
()

Посоветуйте редактор для рисования схем

Форум — Desktop

Посоветуйте простой редактор для рисования схем (гидравлических).

Желаемые возможности:

  • Возможность создания своей библитеки компонентов
  • Экспорт в svg

Т.е. linux-аналог sPlan

 , , ,

nvl
()

Нужен WEBный microCRM/календарь-планирощик/ToDo Manager

Форум — General

Посоветуйте, что сейчас актуально. Нужна онлайн-система на своем WEB-сервере. Все что нужно, это ведение клиентов/сделок, ToDo-лист с напоминаниями, контакты клиента, документация(файлы) связанная с клиентом. Что-то готовое сразу к использованию - распаковал в /web и можно работать.

 , ,

nvl
()

Где можно купить микросхемы TS100?

Форум — General

 

nvl
()

Как обрабатывать горячие клавиши?

Форум — Development

Английская «O»
в английской раскладке показывает
keysym = 111
keycode = 32
в русской раскладке показывает
keysym = 1757
keycode = 32

В коде, который видел для обработки используют keysym, при этом, например [Ctrl + O — открыть] или [f — fullscreen] не будут работать в русской раскладке.

Почему не используют keycode, если оно не меняется в зависимости от раскладки?
keycode может быть разным на разных клавиатурах?
Как вообще решается вопрос работы горячих клавиш в альтернативных раскладках?

 ,

nvl
()

В чем причина сегфолта?

Форум — Development

Если собрать софт так:

meson builddir --prefix=/usr && cd builddir && ninja
то работает нормально, никаких сегфолтов нет. Если собрать rpm или flatpak, то сегфолтится на строке prop_changed (p):
public signal void prop_changed (bool state);


if (prop.format == Format.FLAG) {
	int i = *(int*) ( ( (EventProperty<int>) prop).data);
	bool p = (i == 0) ? false : true;
	prop_changed (p); // Emit signal
}
Эквивалентный сгенерированный кусок на Си:
if (prop->format == FORMAT_FLAG) {
	gint i = 0;
	gboolean p = FALSE;
	i = *((gint*) ((gint) ((gintptr) ((struct event_property*) prop)->data)));
	if (i == 0) {
		p = FALSE;
	} else {
		p = TRUE;
	}
	g_signal_emit (self, prg_signals[PROP_CHANGED_SIGNAL], 0, p);
}
Если строку заменить на prop_changed (false), то сегфолт пропадает. Подскажите, что не так.
(gdb) run
Thread 1 "com.gitlab.prg" received signal SIGSEGV, Segmentation fault.
0x0000555555560c49 in event_handler (self=0x555555b7f340) at src/src@@com.gitlab.prg@exe/prg.c:581
581						g_signal_emit (self, prg_signals[PROP_CHANGED_SIGNAL], 0, _tmp31_);
(gdb) bt
#0  0x0000555555560c49 in prg_event_handler (self=0x555555c17330)
    at src/src@@com.gitlab.prg@exe/prg.c:581
#1  0x00007ffff7cc81cb in g_idle_dispatch () at /lib64/libglib-2.0.so.0
#2  0x00007ffff7ccb88d in g_main_context_dispatch () at /lib64/libglib-2.0.so.0
#3  0x00007ffff7ccbc58 in g_main_context_iterate.isra () at /lib64/libglib-2.0.so.0
#4  0x00007ffff7ccbcf0 in g_main_context_iteration () at /lib64/libglib-2.0.so.0
#5  0x00007ffff7980725 in g_application_run () at /lib64/libgio-2.0.so.0
#6  0x000055555555a211 in _vala_main (args=0x7fffffffd6e8, args_length1=1) at src/src@@com.gitlab.prg@exe/main.c:67
#7  0x00007ffff5ff2413 in __libc_start_main () at /lib64/libc.so.6
#8  0x000055555555a0ce in _start () at src/src@@com.gitlab.prg@exe/main.c:77

 , ,

nvl
()

Glade портит файлы в LC_NUMERIC=ru_RU.UTF-8

Форум — Desktop

После открытия файла и его сохранения, все дробные значения сбрасываются до целого. Т.е. проблема в десятичном разделителе. Если запускать так $ LC_NUMERIC=en_US.utf-8 flatpak run org.gnome.Glade то работает нормально. Это баг или проблема на моей стороне?

 ,

nvl
()

Где находится тема Gtk4?

Форум — Desktop

Gtk4-приложения используют тему Adwaita. В системе темы только для Gtk3: /usr/share/themes/Adwaita/gtk-3.0/*.css. При смене системной темы на Adwaita-dark, Gtk4-приложения остаются светлыми, т.е. явно не используют gtk-3.0 тему. В пакете gtk4 не нашел ничего связанного с темой. Никаких других пакетов с темами нет. Откуда Gtk4-приложения берут тему Adwaita? Или как сменить тему Gtk4?

 ,

nvl
()

Что случилось с rutracker.org?

Форум — Talks

Пишет

По техническим причинам форум временно недоступен

 

nvl
()

Можно ли в Vala объявить simple class как переменную, а не как указатель?

Форум — Development

Никак не могу правильно обернуть функцию в vapi. Функция из libmpv/client.h:

int mpv_get_property(mpv_handle *ctx, const char *name, mpv_format format, void *data);

Для базовых типов, работает

//mpv.vapi
[CCode (cname = "mpv_get_property", simple_generics = true, has_target = false)]
public Mpv.Error get_property_double (string name, Mpv.Format format, out double data);

//code
double pos;
Mpv.Error = er;
er = ctx.get_property_double ("time-pos", Mpv.Format.DOUBLE, out pos);

генерирует правильный код на C:

gdouble pos = 0.0;
enum mpv_error er;
er = mpv_get_property (self->priv->ctx, "time-pos", MPV_FORMAT_DOUBLE, &pos);

А для структуры не работает:

//vapi
[Compact]
[CCode (cname = "struct mpv_node")]
public class Node {
///////
}

[CCode (cname = "mpv_get_property", simple_generics = true, has_target = false)]
public Mpv.Error get_property_node (string name, Mpv.Format format, out Mpv.Node data);

//code
Mpv.Node node;
Mpv.Error = er;
er = ctx.get_property_node ("metadata", Mpv.Format.NODE, out node);

Проблема в том, что Vala генерирует в С переменную структуры как указатель:

struct mpv_node* node = NULL;
enum mpv_error er;
er = mpv_get_property (self->priv->ctx, "metadata", MPV_FORMAT_NODE, &node);
Т.е. должно быть объявление структуры как переменной mpv_node node; и передача адреса в функцию , а не адреса указателя mpv_node* node = NULL;

Как можно решить этот вопрос?

 ,

nvl
()

Gtk4 -> GtkVideo: видеоплеер в 2 строчки

Форум — Development

В Gtk4 добавлен виджет GtkVideo. Теперь свой плеер с контролами можно реализовать также просто как и «Hello World!»:

var window = new Gtk.Window ();
var video = new Gtk.Video.for_filename ("/path/to/video");
window.add (video);
video.autoplay = true;
window.show_all ();

В качестве бэкэнда gstreamer и ffmpeg. Круто однако!

 ,

nvl
()

Inkscape: Как центрировать 2-е фигуры по геометрическим центрам?

Форум — Desktop

Например, круг и треугольник. Если их выделить и в «Выровнять и расставить» выбрать «Центрировать по горизонтальной/вертикальной оси», то результат будет таким. Как это можно сделать средствами Inkscape?

 

nvl
()

page-dewarp: The 'cv2' distribution was not found. Как исправить?

Форум — Desktop

Пытаюсь воспользоваться https://github.com/mzucker/page_dewarp

$ python3
Python 3.6.5 (default, Mar 29 2018, 18:20:46) 
[GCC 8.0.1 20180317 (Red Hat 8.0.1-0.19)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> print (cv2.__version__)
3.4.1
>>>
$ page_dewarp notesB2.jpg
Traceback (most recent call last):
  File "/usr/bin/page_dewarp", line 6, in <module>
    from pkg_resources import load_entry_point
  File "/usr/lib/python3.6/site-packages/pkg_resources/__init__.py", line 3088, in <module>
    @_call_aside
  File "/usr/lib/python3.6/site-packages/pkg_resources/__init__.py", line 3072, in _call_aside
    f(*args, **kwargs)
  File "/usr/lib/python3.6/site-packages/pkg_resources/__init__.py", line 3101, in _initialize_master_working_set
    working_set = WorkingSet._build_master()
  File "/usr/lib/python3.6/site-packages/pkg_resources/__init__.py", line 574, in _build_master
    ws.require(__requires__)
  File "/usr/lib/python3.6/site-packages/pkg_resources/__init__.py", line 892, in require
    needed = self.resolve(parse_requirements(requirements))
  File "/usr/lib/python3.6/site-packages/pkg_resources/__init__.py", line 778, in resolve
    raise DistributionNotFound(req, requirers)
pkg_resources.DistributionNotFound: The 'cv2' distribution was not found and is required by page-dewarp

Что не так?

Собрал с таким setup.py:

#!/usr/bin/env python3
from __future__ import print_function

import os
import sys
from setuptools import setup


setup(
    name="page_dewarp",
    version="0.0.1",
    author="Matt Zucker",
    description="Page dewarping and thresholding using a cubic sheet model",
    url="https://github.com/mzucker/page_dewarp",
    py_modules=["page_dewarp"],
    install_requires=[
        "numpy>=1.1.0",
        "scipy",
        "pillow",
        "cv2",
    ],
    entry_points="""
        [console_scripts]
        page_dewarp=page_dewarp:main
    """,
)

 ,

nvl
()

Как определить, почему окно перестает отвечать?

Форум — Development

Любое из менение в интерфейсе после создания окна приводит к тому, что через некоторое время «Окно не отвечает». Например, на основе сигнала отображение прогресса. Пробовал ставить константу «0.5», как в примере ниже - также окно подвисает. Если закомментиhовать «progress.set_fraction (0.5);», то с окном все в порядке.
Что не правильно? И как определить причину зависания?

namespace Temp {
	[GtkTemplate (ui = "/org/gnome/Temp/window.ui")]
	public class AppWindow : Gtk.ApplicationWindow {

                PObject p;

		[GtkChild]
		private Gtk.ProgressBar progress;

		public AppWindow (Gtk.Application app) {
			Object (application: app);

                        p = new PObject ();
                        p.position_changed.connect (position_changed_cb);
		}
	}
	private void position_changed_cb (double pos) {
		    
                progress.set_fraction (0.5);

	}

}

 ,

nvl
()

kernel-4.15: артефакты и зависание

Форум — General

На новом ядре 4.15.3-300.fc27.x86_64: скриншот
dmesg:

[  154.758450] nouveau 0000:03:00.0: gr: 00200000 [] ch 1 [000fbb0000 DRM] subc 4 class 5039 mthd 0100 data 00000000
[  154.758459] nouveau 0000:03:00.0: fb: trapped read at 0040000000 on channel 1 [0fbb0000 DRM] engine 00 [PGRAPH] client 03 [DISPATCH] subclient 04 [M2M_IN] reason 00000006 [NULL_DMAOBJ]

Решение:

@@ -1354,7 +1354,7 @@ nvkm_vmm_get_locked(struct nvkm_vmm *vmm, bool getref, bool mapref, bool sparse,
 
 		tail = this->addr + this->size;
 		if (vmm->func->page_block && next && next->page != p)
-			tail = ALIGN_DOWN(addr, vmm->func->page_block);
+			tail = ALIGN_DOWN(tail, vmm->func->page_block);
 
 		if (addr <= tail && tail - addr >= size) {
 			rb_erase(&this->tree, &vmm->free);

https://github.com/skeggsb/nouveau/pull/1/commits/5d1166744dc6fe502ee692248ba...

 , , , ,

nvl
()

В чём разница между main внутри класса или снаружи?

Форум — Development
public class BasicSample : Object {

    public void run () {
        stdout.printf ("Hello World\n");
    }

    static int main (string[] args) {
        var sample = new BasicSample ();
        sample.run ();
        return 0;
    }
}

и

public class BasicSample : Object {

    public void run () {
        stdout.printf ("Hello World\n");
    }
}

static int main (string[] args) {
    var sample = new BasicSample ();
    sample.run ();
    return 0;
}

 ,

nvl
()

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