LINUX.ORG.RU

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

Персональный сервис для хранения фотографий

Форум — Talks

Недавно разбирал винты от старых ноутбуков и обнаружил у себя сотни гигабайт фотографий и видео. Изначально планировал записать все на диски, но понял, что с таким количеством мне не справится.

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

Пожелания:

  • хранить фото в s3,
  • уметь сохранять фото в несколько s3 корзин для резервирования,
  • уметь работать с s3 корзинами не из AWS (ex: DigitalOcean),
  • иметь приятную вебморду (js/ajax/дизайн),
  • иметь приложение для Android (желательно, чтобы его можно было собрать для работы только с персональным сервером).

Экономия ресурсов сервера - плюс, но не критично.

Желательно уметь в шифрование на стороне клиента, но я сомневаюсь что это хотя бы где-то нормально реализовано.


Update#1:

Nextcloud

Пробежался по их сайту. Наткнулся на скромную документацию, которая в итоге посылает на https://portal.nextcloud.com/article/nextcloud-deployment-recommendations-7.html, но прочитать страничку можно только после регистрации.

UPD: Нашел документацию по настройке S3 на https://docs.nextcloud.com/. Идея с зашитим в базу S3 access key/S3 secret key мне не очень нравится.

Буду рад услышать о других альтернативах.

 

trex6
()

Импорт svn в git с сохранением всей истории и всех веток

Форум — Development

Понадобилось мне тут для дружественного проекта импортировать старый svn репозиторий в git.

Задача не сложно решается, если в проекте одна ветка – trunk, и не понтяно как решается, если веток несколько, да еще и разработчики постоянно переключают trunk с ветки на ветку, перезаписью файлов (ну ладно, один раз они так сделали)

Корнем проблемы является тот факт, что в svn ветки, это просто директории более верхнего уровня, их можно импортировать как элементы рабочей директории. А вот так чтобы ветки в ветки, да еще с учетом переключений между ветакми.

Короче я в результате написал скрипт, который тупо повторяет последовательность коммитов которые были сделаны в svn, во вновь созданный git, создавая нужные ветки и т.п.

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

https://gitlab.com/dhyannataraj/svn-to-git-full-import

Может быть кому-то пригодиться

 , ,

shaplov
()

LOR. Февраль 2022

Новости — Linux.org.ru
Группа Linux.org.ru
  1. Мы против войн и насилия.
  2. Понимаем, что тема происходящих событий сейчас у всех на уме, и каждому хочется высказаться. К сожалению, все диалоги проходят на повышенных тонах и неконструктивны, и мы не справляемся с модерированием. Linux.org.ru это не политическая площадка. Мы просим всех пользователей воздержаться от обсуждения текущей ситуации. Обсуждения будут удалены, активно участвующие в них пользователи могут быть “заморожены” как минимум на одну неделю.
  3. У топиков по тематике сайта, связанных с происходящим, будут отключены комментарии.
  4. Не поддавайтесь на провокации. Сохраняйте спокойствие, проводите время с семьей, почаще бывайте на свежем воздухе и берегите себя.
  5. Мы надеемся, что эти ограничения на форуме – временные.

 

maxcom
()

Нет звука после компиляции ядра

Форум — General

Здравствуйте. Мне попал в руки старенький нетбук Asus Eee Pc 1000 с первым атомом на борту, который не умеет даже в 64 бит, 1 гигом оперативки и древним SSD на 40 гигабайт. Решил отчасти из спортивного интереса, отчасти из некоторых соображений вдохнуть в него жизнь, снёс установленную там XP и установил Lubuntu 18.04. Последнюю с поддержкой 32 бит. Решил также скомпилировать для него ядро по трём соображениям - во первых убрать по максимуму всё лишнее и оставить лишь то, что нужно для его работы. Во вторых оптимизировать под железо. В третьих - раз древний ssd, то и файловую систему хотелось использовать щадящую, то есть f2fs, для чего её поддержку пришлось включить в состав самого ядра, а не модуля. В результате всех мытарств получилось вполне шустрое компактное ядро. Загрузка происходит быстро, работа тоже настолько, насколько это вообще возможно для такого железа. Даже в интернете вполне сносно можно работать, разве что кроме просмотра видео в хорошем разрешении. Не ожидал, но оказывается Vivaldi до сих пор предоставляет 32 битные deb пакеты. Всё хорошо за исключением одного косяка - не работает аудио. Звуковых карт не обнаруживается вовсе ни одной. cat /proc/asound/cards выдаёт:

--- no soundcards ---

Но при этом lspci -v:

00:1b.0 Audio device: Intel Corporation NM10/ICH7 Family High Definition Audio Controller (rev 02)
	Subsystem: ASUSTeK Computer Inc. NM10/ICH7 Family High Definition Audio Controller
	Flags: fast devsel, IRQ 16
	Memory at f7eb8000 (64-bit, non-prefetchable) [size=16K]
	Capabilities: [50] Power Management version 2
	Capabilities: [60] MSI: Enable- Count=1/1 Maskable- 64bit+
	Capabilities: [70] Express Root Complex Integrated Endpoint, MSI 00
	Capabilities: [100] Virtual Channel
	Capabilities: [130] Root Complex Link
	Kernel driver in use: snd_hda_intel

то есть модуль подгружается, ядро оборудование видит.

В dmesg вроде никаких ошибок нету. Подозреваю, что какие то опции в ядре не включил, но какие ? Буду очень благодарен за подсказку. PS При загрузке с Live образа Lubuntu звук есть.

 , , ,

eol3000
()

Safer Usage Of C++ (перевод)

Форум — Development

Разработчики Chromium/Chrome опубликовали обстоятельный документ Safer Usage Of C++. Это план работ по доработке кода, подходов и инструментов, чтобы создавать более безопасный и надёжный код. Документ недавно активно обсуждался, например, на Reddit. Наша команда решила перевести этот документ на русский язык. Задача оказалась непростая, так как сам оригинал документа написан в, так сказать, свободном стиле. Вот что получилось: Безопасное использование C++. Там много отсылок на другие интересные статьи и проекты. Надеюсь будет занимательно. Приятного чтения.

 , , , ,

Andrey_Karpov_2020
()

Переключится на русскую версию хабра

Форум — Talks

На хабре все сломали и меня теперь постоянно редиректит на https://habr.com/en/all/

Раньше похожее случалось, но чинилось правкой урла ручками на https://habr.com/ru/all/ или типа того. К сожалению трюк больше не работает :(

Кто-нибудь знает, есть ли какая-то возможность «вернуть все в зад»?

P.S. Аккаунта нет, айпишник из СШП.

 ,

trex6
()

Анализатор памяти, занимаемой приложением.

Форум — Development

Есть ли какой-нибудь анализатор, или может можно самому как-то это сделать, что бы увидеть структуры\данные итп, занимаемые всем приложением в RAM? Исходники при этом есть.

 ,

Landgraf
()

Нужны ли компиляторам универсальные парсеры?

Форум — Development

Доброй пятницы, ЛОР.

Вопрос в первую очередь тем, кто погружался в исходники компиляторов: gcc, clang, rustc, fpc, go… Используют ли они универсальные инструменты для лексического анализа и разбора — все эти flex, bison и др., которые рекомендуют учебники?

Или же там для разбора исходников написано что-то своё, более низкоуровневое?

И второй вопрос — что посоветуете человеку, который хочет что-то вытаскивать из написанного людьми (*) кода на C или C++? Пойти по классике и упороться flex-ом или?..

В первую очередь интересен первый вопрос, особенно в части gcc и clang. Жду рассказов людей, которые туда погружались и выплыли. :)

(*) - так-то понятно, что можно повесить вывеску «принимается только код, обработанный бьютифаером» и по-бырому сделать «парсер» на регулярках, а то и вручную. И «для себя» и даже для небольшого коллектива это будет вполне нормальное инженерное решение, даже в чём-то юниксвейное. А вот если задаться целью сделать как следует…

Upd: в обсуждении выяснилось, что со вторым вопросом, если не лезть внутрь функций, помогает CastXML. Пример:

castxml globals.cpp --castxml-gccxml -o ./out.xml -I ../core -I /usr/include/qt4

Upd2: gcc-xml, предшественник CastXML, тоже поддерживает ключ -I, но в имевшемся у меня мане он не описан. Выходной файл в этом случае задаётся ключом -fxml=...

Всем спасибо за помощь.

 , ,

hobbit
()

wayland server имплементация, создание глобальных объектов

Форум — Development

В ходе соединения ничего не происходит.

Как сделать так чтобы вызывалась wl_output_handle_bind() из wl_output_interface по запросу на биндинг от клиента?

wl_global_create() шаблон исходя из /usr/include/wayland-server-core.h это:

struct wl_global *
wl_global_create(struct wl_display *display,
         const struct wl_interface *interface,
         int version,
         void *data, wl_global_bind_func_t bind);

Текущий вывод приложения таков:

client
  info: wl_output
  info: binding
server
  unable to lock lockfile /run/user/1000/wayland-0.lock, maybe another compositor is running
  running wayland display on wayland-1

Код серверной реализации:

// server.c
#include <stdlib.h>
#include <stdio.h>
#include <wayland-server.h>

struct server_state { void *data; };
struct composed_output { struct server_state *state; struct wl_resource *resource; };
// resource_container_flush () ..
// resource_container_add () ..

static void wl_output_handle_resource_destroy (struct wl_resource *resource) {
  struct composed_output *client_output = wl_resource_get_user_data (resource);
  // to do: clean up global{,s} resourcing
  // resource_container_flush (client_output->state->data, client_output);
}

static void wl_output_handle_release (struct wl_client *client,
                                      struct wl_resource *resource) {
  printf ("info: release event handler: processing global remove event\n");
  wl_resource_destroy (resource);
}

static const struct wl_output_interface wl_output_implementation = {
  .release = wl_output_handle_release,
};

static void wl_output_handle_bind (struct wl_client *client,
                                   void *data,
                                   uint32_t version, uint32_t id) {
  struct server_state *state = data;
  struct composed_output *client_output = calloc (1, sizeof (struct composed_output));
  printf ("info: binding event handler\n");
}

int main (int argc, char *argv[]) {
  struct wl_display *display = wl_display_create ();
  if (!display) {
    fprintf (stderr, "unable to create wayland display\n");
    return 1;
  }
  
  const char *socket = wl_display_add_socket_auto (display);
  if (!socket) {
    fprintf (stderr, "unable to add socket to wayland display\n");
    return 1;
  }
  
  struct server_state state = { .data = NULL };
  
  wl_global_create (display, &wl_output_interface,
                    1, &state, wl_output_handle_bind);
  
  fprintf (stderr, "running wayland display on %s\n", socket);
  wl_display_run (display);
  
  wl_display_destroy (display);
  return 0;
}

Код клиентской реализации:

// client.c
#include <stdint.h>
#include <stdio.h>
#include <wayland-client.h>

static void registry_handle_global (void *data,
                                    struct wl_registry *registry,
                                    uint32_t name,
                                    const char *interface,
                                    uint32_t version) {
  printf ("info: %s\n", interface);
  if (strcmp (interface, wl_output_interface.name) == 0) {
    printf ("info: binding\n");
    wl_registry_bind (registry, name, &wl_output_interface, 1);
  }
}

static void registry_handle_global_remove (void *data,
                                           struct wl_registry *registry,
                                           uint32_t name) {
  // this function implementation from handle is blank in this exercise
}

static const struct wl_registry_listener registry_listener = {
  .global = registry_handle_global,
  .global_remove = registry_handle_global_remove,
};

int main (int argc, char *argv[]) {
  struct wl_display *display = wl_display_connect ("wayland-1");
  struct wl_registry *registry = wl_display_get_registry (display);
  if (display == NULL) { fprintf (stderr, "can't connect to display\n"); return 1; }
  if (registry == NULL) { fprintf (stderr, "can't connect to registry\n"); return 1; }
  wl_registry_add_listener (registry, &registry_listener, NULL);
  wl_display_roundtrip (display);
  return 0;
}

Отладочный лог (в т.ч. и через coredump значения те же):

 export WAYLAND_DEBUG=1; ./server
unable to lock lockfile /run/user/1000/wayland-0.lock, maybe another compositor is running
running wayland display on wayland-1
[1960331.814] wl_display@1.get_registry(new id wl_registry@2)
[1960331.839]  -> wl_registry@2.global(1, "wl_output", 3)
[1960331.860] wl_display@1.sync(new id wl_callback@3)
[1960331.866]  -> wl_callback@3.done(0)
[1960331.871]  -> wl_display@1.delete_id(3)
[1960331.946] wl_registry@2.bind(1, "wl_output", 3, new id [unknown]@4)
info: wl_output binding event handler; interface version: 3
zsh: segmentation fault (core dumped)  ./server

 ,

fled04729
()

Latex - помогите создать стиль страниц(ы)

Форум — General

Добрый день.

в Latex я новичок, но хотелось бы в одной организации перевести весь документооборот через git. В идеале, чтобы все подразделения были обучены работы с git, latex, делали клон основного репозитория, создавали свои приказы и прочие документы и отсылали pull-request в основную ветку.

Что мне нужно?

  1. есть Правила документирования, управления документацией и использования систем электронного документооборота в государственных и негосударственных организациях. Нужно их придерживаться.
  2. В частности страницы должны выглядет так, дополнение.
  3. Вот пример как должно быть в итоге страница.

Вопрос - как можно быстро создать стиль страницы, чтобы стиль соответствовал требованию НПА?

 , ,

Nurmukh
()

Комп чтобы компилировать (Rust)

Форум — Linux-hardware

Всем привет!

В общем, затеял я тут из поганой Гермашки релокейт в зад, в святую Русь. И следующее время хочу находиться в Мск и в Влг обл. Работать буду на удаленке, скорее всего Rust. Но большие проекты на моём Dell m4800 собираются около двух минут. И это без тестов =(

Вот думаю, может поднять дома сервер и к нему подключаться через удаленный рабочий стол? А с другой стороны, какое железо нужно чтобы быстро компилял LLVM? Может что-то можно и на ноуте оптимизировать?

CPU: i7-4930MX 3.00GHz

DDR3: 16Gb

SSD: Samsung 850 pro

 ,

AntonyRF
()

Кто берет новых людей на удалёнку и что это может быть за работа?

Форум — Talks

Привет, ЛОР.

Лелею мечту, найти еще одну работу, так же на удалёнке как и сейчас, и спокойно перевезти семью в Питер, пока это сделать сложно, денег остается в обрез.

Подтягиваю хвосты на основной работе, надо стараюсь играть на опережение, поскольку я на удаленке, боюсь я первый кандидат теперь на сокращение, нужно отрабатывать каждый рубль.

Думаю уже через 1-2 месяца преступить к активному поиску второй работы, может быть на пол ставки, но так чтобы 50-60 мне платили, скажите насколько это реально? Я не представляю кого вообще берут на такую работу, что это за фирмы и можно ли рассчитывать на такие ставки в длинную?

Поделитесь историями успеха?

Резюме на hh.ru

 ,

Shulman
()

Вышел Cloud Hypervisor 0.11.0

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

Cloud Hypervisor (облачный гипервизор) — это монитор виртуальных машин, который работает поверх KVM и оптимизирован для решения задач, свойственных для облачных систем. Cloud Hypervisor написан на Rust и базируется на rust-vmm crates.

Новое в этой версии:

  • добавлена поддержка гостевой ОС Windows
  • добавлена поддержка по умолчанию io_uring для virtio-block
  • прекращена поддержка vhost-user
  • удалена поддержка использования транспорта virtio-mmio вместо PCI
  • добавлена поддержка снапшотов для ARM64
  • улучшено время загрузки Linux
  • изменён уровень ведения журнала по умолчанию
  • добавлен новый параметр –balloon для настройки virtio-balloon

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

 , ,

MaxPower
()

Поиск исполнителей и сбор донатов и на рефакторинг кода ядерной консоли.

Форум — Talks

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

Контакты можно публиковать не открытыми, а в виде команды пишущей их в терминале, например:
echo FM3SQOJSGEUTGNZQFUZDKLJVHEFA====|base32 -d

Создал в организации репозитарий, предлагаю обсуждение продолжить там:
https://github.com/Kernel-Crowdfunding/New-Linux-Console

Ссылка для записи разработчиков: Developers
Ссылка для записи спонсоров: Sponsors

Мотивация:

  1. Необходимость исправить указанные Линусом ошибки: Линуса гномеры покусали?
  2. Запуск иксов на дополнительной отдельной видеокарте нарушает работу консоли на основной видеокарте.
  3. Если раньше собственно консоль и иксы пользовались раздельными драйверами, и переключение в консоль при переполнении ОЗУ приводило к переключению на другой драйвер которому для нормальной работы хватало оставшейся памяти, что позволяло запустить htop и вручную удалить занимающий всю свободную память процесс, то теперь, когда благодаря KMS иксы и консоль используют один драйвер так уже сделать нельзя, распухшая графическая программа парализует работу графики и иксах, и в консоли.
    Подробнее можно прочитать здесь: Поиск исполнителей и сбор донатов и на рефакторинг кода ядерной консоли. (комментарий)

Что имхо надо, оно же ТЗ:

  1. Вынести код консоли в отдельный модуль ядра, который должен уметь принимать опции инициализации и как аргумент запуска модуля, и как опцию в командной строке ядра, при этом опции в командной строке ядра должны иметь приоритет, чтобы иметь возможность спасти положение при неправильном написании системных конфигов.
    При этом надо понимать то, что данное внесённое предложение предлагает не текущий ремонт подсистемы консоли, а полностью новый код для развития системы консоли с новым функционалом.
  2. В состав принимаемых модулем опций должны входить:
    2.1 Однозначная идентификация используемых видеопортов для подключения монитора должна осуществляться через указание конкретной используемой видеокарты по идентификаторам вендора, модели устройства,серийному номеру и идентификатору используемого для подключения монитора видеопорта.
    2.2 Аналогично однозначная идентификация назначаемых модулю клавиатуры и мыши, с указанием индентификаторов и типа подключаемого устройства ввода? Или может просто давать список устройств без указания их типа, а там модуль пусть разбирается сам, где мышь, а где клавиатура?
    2.3 Модуль должен использовать только статичное выделение памяти с запретом свопинга(Мотивация 3) и принимать в опциях размер буферов, под которые сразу должен выделять память и не менять самостоятельно её в процессе работы, но возможно создание в /proc или /sys отдельной директории с параметрами через которые можно будет поменять размер тех или иных буферов и поменять прочие настройки модуля.
  3. Должна быть предусмотрена возможность параллельной загрузки и работы нескольких таких модулей, на разных комплектах из видеокарты, клавиатуры и прочих USB устройств, этот модуль должен уметь проверять занятие устройств другими модулями и выдавать соответствующую ошибку и список со статусом, кто чем занят всех имеющихся устройств.
    Вообще надо подумать как этим модулем будут обрабатываться конфликты занятости того или иного устройства теми или иными модулями или программами ядра.
    Всё это надо за тем, чтобы за одним компом могло работать несколько человек с разных комплектов видеокарта + устройства ввода(клавиатура, мышь и пр.) и эти устройства не путались между различными модулями.
  4. Надо предусмотреть продолжение работы модуля при отключении или пропажи связи с тем иным устройством и возобновления работы с ним при его обратном подключении к системе.
    Должна быть предусмотрена возможность запуска модуля при отсутствии в системе назначенных ему устройств.
  5. Модуль должен использовать только общие стандартные интерфейсы видеокарт(Мотивация 3)
  6. При запуске на той или иной видеокарте иксервера модуль должен передавать и принимать управление видеокартой аналогично тому, как это происходило до появления KMS и modesetting.(Мотивация 3)
    Так же он должен суметь передать и все сопутствующие устройства ввода(тут возможно придётся попилить и икссервер)
  7. В принципе хорошо бы и сам графический сервер переписать так, чтобы при параллельном запуске нескольких экземпляров на разных видеокартах каждый экземпляр бы наследовал от модуля консоли привязанного к данной видеокарте назначенные этому модулю консоли устройства ввода, для этого надо предусмотреть экспорт информации о подключенных устройствах в файл на файловых системах /proc или /sys.
    (Сервер можно не переписывать, но механизм передачи и приёма устройств ввода предусмотреть нужно)
  8. Надо предусмотреть вывод консоли в стереорежиме при работе с устройством через VR шлем. Ничего сложного делать не надо, просто выводить текст на два экрана со смещением влево для левого и вправо для правого экрана для того чтобы при просмотре через VR шлем можно было просматривать текст обоими глазами, а не одним. Номера портов в видеокарте для вывода в стереорежиме и величина смещения кадров должна задаваться через параметр командной строке ядра и через специальные файлы в proc и sysfs.
  9. При подключении к видеокарте нескольких мониторов модуль должен вывести консоль на каждый монитор, при этом каждая выведенная консоль должна свободно переключатся на любую консоль, но при этом каждая консоль должна отобразатся только на одном экране, при этом при переключении консоли текущая консоль и консоль на которую переключаются должны менятся местами.

Перемещено leave из job

 , , , ,

torvn77
()

Mint не видит монитор подключенный по HDMI

Форум — Desktop

Не удается подключить монитор через HDMI. После подключения кабеля монитор загорается и тухнет. Но Mint не видит подключение по HDMI. Провод рабочий, монитор тоже. Проверял.

Подскажите, пожалуйста, как решить проблему?

Дано: Ноут с Linux Mint 20 и 1 HDMI разъемом.

Видео: Intel UHD Graphics 620

Вывод inxi -G:

Graphics:
  Device-1: Intel UHD Graphics driver: i915 v: kernel 
  Display: x11 server: X.Org 1.20.8 driver: intel resolution: 1920x1080~60Hz 
  OpenGL: renderer: Mesa Intel UHD Graphics (CML GT2) v: 4.6 Mesa 20.0.8

Вывод xrandr:

Screen 0: minimum 8 x 8, current 1920 x 1080, maximum 32767 x 32767
eDP1 connected 1920x1080+0+0 (normal left inverted right x axis y axis) 340mm x 190mm
   1920x1080     60.00*+  40.00  
DP1 disconnected (normal left inverted right x axis y axis)
HDMI1 disconnected (normal left inverted right x axis y axis)
HDMI2 disconnected (normal left inverted right x axis y axis)
VIRTUAL1 disconnected (normal left inverted right x axis y axis)

Содержимое /var/log/Xorg.0.log:

8.060] (II) intel(0): Output HDMI1 has no monitor section
[     8.060] (II) intel(0): Enabled output HDMI1
[     8.060] (II) intel(0): Output DP1 has no monitor section
[     8.060] (II) intel(0): Enabled output DP1
[     8.060] (II) intel(0): Output HDMI2 has no monitor section
[     8.060] (II) intel(0): Enabled output HDMI2
...
[     8.081] (==) intel(0): Display hotplug detection enabled
...
[     9.266] (II) config/udev: Adding input device sof-hda-dsp HDMI/DP,pcm=5 (/dev/input/event18)
[     9.266] (II) No input driver specified, ignoring this device.
[     9.266] (II) This device may have been added with another device file.
[     9.266] (II) config/udev: Adding input device sof-hda-dsp HDMI/DP,pcm=3 (/dev/input/event16)
[     9.266] (II) No input driver specified, ignoring this device.
[     9.266] (II) This device may have been added with another device file.

 ,

Katsumoto
()

Модный, молодежный язык

Форум — Development

Какой есть новый, крутой язык с возможностью создания GUI приложений? С растом ничего не получилось, так как ни один Gui контейнер на нем не заработал.

 , ,

LancerRevX
()

«Удаленный» рабочий стол на системе без встроенного видео-адаптера?!

Форум — Linux-hardware

Такой немного ламерский вопрос…, можно ли поднять графический рабочий стол на системе, где нет встроенного видео ни в каком виде (ни в матери, ни в проце, ни слотов расширения никаких нет), чтобы потом к нему подключиться, например по VNC? Допустим есть некий роутер с «мощным» железом, и задача подключаться к нему «графикой» (клиентом vnc как вариант) как к рабочей станции с интернетом, и чтоб с него интернет смотреть файрфоксом ? Или же у софтин типа tigervnc-server идет завязка именно на встроенный графический контроллер?

 ,

karasic
()

Universal UI for Rust

Форум — Development

Доброго времени суток.

Примерно полгода назад, когда я начинал изучать Rust, я обнаружил в нем фатальный недостаток - отсутсвие крейта, который бы реализовывал удобный и кроссплатформенный UI. Хотелось поддержки Linux/Windows/MacOS/WASM-web/Android/iOS и удобства использования уровня Qt с их сигналами-слотами.

В ходе парочки бессоных ночей (на самом деле намного больше) появилась некоторое количество крейтов, которые позволяет писать UI вот так:

#[derive(UWidget)]
struct MyWidget {
    #[uwidget]
    layout: LinearLayout,

    #[public_slot] // у структуры будет публичный метод, через который слот будет доступен снаружи
    #[uprocess(on_text_updated)]
    slot_set_text: SlotImpl<String>,

    slotproxy_set_text: SlotProxy<String>,

    #[uprocess(on_button_clicked)]
    slot_button_clicked: SlotImpl<()>,
}

impl MyWidget {
    pub fn new(placeholder: String) -> MyWidget {
        let slotproxy_set_text;
        let slot_button_clicked = SlotImpl::new();

        let mut layout = LinearLayout::new(Orientation::Horizontal);
        layout.push_widget({
           let textedit = TextEdit::new(placeholder);
           slotproxy_set_text = textedit.slot_set_text().proxy();
           textedit
        });

        layout.push_widget({
            let mut button  = Button::new("Push me");
            button.signal_clicked().connect(&slot_button_clicked);
            button
        });

        return MyWidget{
            layout,
            slot_set_text: SlotImpl::new(),
            slotproxy_set_text,
            slot_button_clicked,
        };
    }

    fn on_text_updated(&self, s: String) {
        self.slotproxy_set_text.exec_for(s);
    }

    fn on_button_clicked(&self, _:()) {
        info!("button clicked!");
    }
}



В ближайшем будущем планирую еще немного посидеть над макросами, чтобы можно было писать вот так:

pub fn new(placeholder: String) -> MyWidget {
    let layout = layout!(
        orientation: Horizontal,
        widget: text_edit!(
        	placeholder: placeholder,
        	slot_set_text: proxy!(slotproxy_set_text),
        ),
        widget: button!(
        	signal_clicked: connect!(slot_button_clicked),
        ),
    );

    return MyWidget{
        layout,
        slot_set_text: SlotImpl::new(),
        slotproxy_set_text,
        slot_button_clicked,
    };
}


Немного технических подробностей:
* Уже работает для Linux (Qt) и WASM (web-sys).
** В ближайших планах минимальная поддержка Windows/MacOS через Qt и поддержка Android (Java-jni, нативные виджеты).
** В среднесрочных планах поддержка нативных виджетов Win/Mac, поддержка iOS.
* Система сборки на build.rs-скриптах для cargo, которая позволяет из одних и тех же исходников собирать проект для любой платформы. Небольшой (2-5 строк) скрипт придется написать самому, используя готовые функции из библиотеки.
* В самой библиотеке есть еще Property, которые умеют хранить состояние и обладают встроенными сигналами/слотами. И немного других улучшалок.
* Никаких unsafe в интерфейсах для пользователя (внутри - только для работы с native-кодом).
* Никаких RefCell, Rc и прочих Arc в интерфейсах. Внутри их тоже практически нет, к релизу хочу выпилить совсем.


В основном вдохновлялся Qt, но изначально все писалось под web-sys, с последующим прикручиванием Desktop'а.


Тут хотелось бы обсудить 2 вещи (на самом деле 3):
1. Интересна ли вам такая библиотека.
2. Насколько удобным выглядит интерфейс.
3. Насколько Rust ущербен, порекомендуйте уже готовые библиотеки, и вот это вот все.

P.S. Буду держать вас в курсе, так что можете сразу ставить uniui тег в игнор.

 , , , uniui

trex6
()

Еще одна распределенная социальная сеть. Но на этот раз есть шанс, что оно выстрелит.

Форум — Talks

https://twitter.com/jack/status/1204766078468911106

Джек Дорси (тот, который глава твиттера и один из создателей Square), анонсировал разработку протокола для распределенной социальной сети.

Пообещал, что твиттер будет частью этой сети, так что в отличии от других РСС, у этой есть шанс выстрелить.

Ниже есть его размышления о том, почему это правильно. Тоже интерсно почитать.

Twitter is funding a small independent team of up to five open source architects, engineers, and designers to develop an open and decentralized standard for social media. The goal is for Twitter to ultimately be a client of this standard.

Вольный перевод:

Твиттер профинансирует небольшую независимую группу из пяти архитекторов, инженеров и дизайнеров, которые будут разрабатывать открытый и децентрализованный стандарт для социальных медиа. Выжная цель Twitter - быть клиентом этого протокола.

 , , , ,

trex6
()

Интерфейс минта для убунту

Форум — Desktop

Прив, аноны, такая вот проблемс: Я перешёл с ubuntu на mint, потому что на минте ну прям прикольный интерфейс. Но потом выяснилось, что 50 процентов времени нужно скакать по квартире с бубном около компа и вызывать мудрейших духов предков. А це не хорошо, т.к. за компом я не могу сидеть по 100500 минут в сутки, получается, ubuntu оптимальный вариант. Вопрос: как поставить тему оформления взятую с минта на ubuntu, и законно ли такое вообще?(и там и там DE MATE) P.S. Сообщения о том, что я неосилятор в этом топе не нужны

 , , ,

Zuzuk-null
()