LINUX.ORG.RU

Сообщения Shushundr

 

Идея по сохранению web-страниц в SVG

Форум — Web-development

По аналогии с web.archive.org

Суть такова:

  • можно HTML отрендерить в .svg
  • в svg можно вставлять растровые изображения непосредственно (элемент image), а данные в них в base64 через data uri.
  • svg позволяет гиперссылки изнутри куда попало
  • внутрь svg можно помещать JavaScript

Таким образом, можно

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

Можно было бы сохранять в HTML точно так же (как делала программа Teleport), но svg дополнительно позволяет зафиксировать формат рендеринга (например печать на A4).

А ты печатай страницы в .pdf сразу, там тоже можно гиперссылки, javascript, внедрять изображения и устанавливать формат, скажете вы. Ну так в .pdf уже везде печать есть, а в .svg ещё не сделали.

Кроме того, .svg отображается движками браузера (то есть быстрее), а .pdf отображается через pdf.js (то есть медленнее). Ещё поиск в svg наверное проще сделать, чем в pdf, так как первый формат текстовый, а второй бинарный.

SVG использует более открытый стандарт шрифтов WOFF, а не закрытые всякие TrueType от Apple с Microsoft

UPD: уже придумали до меня

 

Shushundr
()

Шелл на Груви

Форум — Admin

Существует ли какой-нибудь shell (типа bash) на основе Apache Groovy ?

«the Groovy repl-like shell»
https://groovy-lang.org/groovysh.html

Если да, то где почитать сравнение с MS PowerShell (pash - это его независимая опенсорсная реимплементация) ?

Это я к тому, что кто-то недавно тут хотел делать новый дистрибутив. Ну вот идея - заменить в Gentoo bash на groovish.

Лучше бы, конечно, вместо Java и всего такого там был бы JavaScript (например на Deno), но там я не знаю нужные имена (Bun Shell, zx.js).

 , , pash,

Shushundr
()

какие сейчас флешки модные?

Форум — Linux-hardware

Хотел такую купить - TS64GJF750K, но там какой-то софт (для парольной защиты) под андроид, и я не знаю, опенсорсный он или нет.

Ещё видел флешки по 1TB с двумя разъёмами - Type A и Type C.

В общем, что посоветуете для обновления криокамеры? Опенхардварное желательно, под линукс, надёжное и всё такое.

 

Shushundr
()

Запилят ли в Firefox поддержку PJVG?

Форум — Talks

«Portable JSON Vector Graphics specification»

https://opengraphics.github.io/pjvg/

Если да, то как вы оцениваете сроки?
(1996-1998 - начата разработка SVG, 2011 - SVG начал более-менее поддерживаться браузерами, всего 15 лет)

Ранее по теме:
Векторная графика в Mozilla

 ,

Shushundr
()

Как вообще пользоваться Flexbox-ами?

Форум — Web-development

Вот требования к коду:

  1. Форма должна иметь ширину, достаточную для размещения всех ее элементов без переноса строк.
  2. Внутри формы должно быть одно поле ввода и две кнопки.
  3. Элементы формы (поле ввода и кнопки) должны быть расположены в две строки.
  4. Поле ввода должно занимать всю ширину формы.
  5. Две кнопки должны быть одинакового размера, независимо от длины их содержимого.
  6. «white-space: nowrap;» надо оставить, чтобы тексты кнопок не разрывались на несколько строк
  7. Не должно быть лишних стилей или элементов, которые не требуются для достижения этих целей.

Вот код:

<form style="display: flex; flex-direction: column; flex-grow: 1; flex-basis: auto; width: max-content;">
  <input type="text" placeholder="Текст" style="width: 100%;">
  <div id="buttons" style="display: flex; flex-basis: auto; width: calc (2 * max-content);">
    <button type="submit" style="white-space: nowrap; width: 50%;">Кнопка 1</button>
    <button type="submit" style="white-space: nowrap; width: 50%;">Длинная Кнопка</button>
  </div>
</form>

Что не так с этим кодом?
Почему элемент input не равен по ширине элементу с id=«buttons»?
как добиться одновременно ограниченного размером контента размера формы и кнопок одинаковой ширины?

 

Shushundr
()

Как создать БД при помощи FlyWay?

Форум — Development

я что-то её не вижу вообще:
http://gpo.zugaina.org/Search?search=flyway

чем flyway отличается от liquibase?
http://gpo.zugaina.org/Search?search=liquibase

Исходные тексты (для Maven) там:
https://github.com/flyway/flyway

Тема для Development, потому что предыдущая тема была про Web-Development.
А вот вопрос про включение в .war был в Development, а не в Web-Development.
Ещё тема.
Так-то для Admin, наверное, но это неточно.

 , ,

Shushundr
()

Экранный переводчик для иероглифов

Форум — Desktop

Читаете вы, к примеру, .pdf-файл, а в нём иероглифы картинками (не скопировать в поиск). Существует ли (опенсорсная) программа, в которой я мог бы выделить прямоугольником нужное место на экране, а она бы переводила этот иероглиф на русский язык. Какой пакет устанавливать в Gentoo ?

UPD: «Xrectsel» - это небольшая программа, которая позволяет пользователю выделять прямоугольник на экране мышью и выводить координаты этого прямоугольника в стандартный вывод.

Эти координаты можно затем использовать с программой «Capture2Text» для распознавания текста в выделенном регионе. «Capture2Text» - это консольная программа, которая позволяет пользователю указать координаты прямоугольника на экране, а затем она делает скриншот этого региона и распознает текст в нем с помощью Tesseract OCR.

Для работы с Tesseract OCR вам понадобится установить пакет «tesseract» в Gentoo. Кроме того, вам также понадобится пакет «tesseract-data-chi_sim» или «tesseract-data-chi_tra» для поддержки китайских иероглифов.

Ой-йёо, ОЙ-ЙЁО !!!

Нет в генте пакета для capture2text…

 ,

Shushundr
()

Как натренировать себе сеть?

Форум — General

Мне за последнее время локально гоняемые LLM’ки (llama, deepseek-coder, mistral и другие) очень бустанули прогресс

Что для этого нужно? У меня, допустим, есть библиотека в Calibre из .pdf и djvu-файлов.
Я же не смогу их загнать в такую сеть, потому что распознавание у tesseract низкокачественное, высококачественное надо руками доделывать и это гигантская работа.

Как потом использовать это локально, какие процессоры (только CPU или GPU тоже) и сколько памяти нужно?

Как долго займёт тренировка и можно ли её выполнить на арендованных мащностях, чтобы после себе только модель скачать? Где делать, сколько это стоит?

Если всё сложно, то организовывают ли люди для этого потребкооперативы, или может коммерческие организации какие есть?

UPD: Ещё нужен учебник, потому что люди вокруг разговаривают непонятными словами.

 ,

Shushundr
()

Что такое «денотационная семантика»?

Форум — Science & Engineering

Кто такой Окасаки и за что его надо почитать?

2016, Окасаки Крис, Чисто функциональные структуры данных
1996, Chris Okasaki, Purely Functional Data Structures, 162 страницы

Википедия совсем другое пишет:

Денотационная семантика (англ. denotational semantics) выражениям в программе ставит в соответствие настоящие математические объекты, то есть, выражения обозначают (англ. to denote — откуда «денотационная») их величины)
Важнейшие, в том числе пионерские, результаты построения денотационных семантик получены в работах Д. Скотта (Dana Scott) и К. Страчей (Christopher Strachey) в конце 1960-х — начале 1970-х в Оксфордском университете

Бестиповое λ-исчисление

1557, Роберт Рекорд (Recorde Robert), The Whetstone of Witte, 332 страницы (Оксфордский университет)
ввёл знак (символ) для обозначения равенства = в 1557 году (в 16-м (XVI) веке).
«В континентальной Европе знак = был введён Лейбницем только на рубеже XVII—XVIII веков, то есть более чем через 100 лет после смерти Роберта Рекорда.»

1936, Алонзо Чёрч, An Unsolvable Problem of Elementary Number Theory (Принстонский университет)
представил безтиповое лямбда-исчисление в статье «Унифицированная теория формальных систем», опубликованной в апреле 1936 года в журнале American Journal of Mathematics.

Переменные: x, y, z, … являются λ-термами.
Абстракция: Если M λ-терм и x — переменная, то (λx.M) — λ-терм (называется абстракцией).
Аппликация: Если M и N λ-термы, то (M N) — λ-терм (называется аппликацией).

само по себе λ-исчисление — это лишь синтаксис, набор правил для работы с символами.

Чтобы оно «обрело смысл» или «семантику», нужно связать эти символы с чем-то осмысленным, например, с математическими объектами.

Смысл (семантика) в данном контексте означает, что каждый термин λ-исчисления будет интерпретироваться как некоторый математический объект, а операции над терминами будут соответствовать операциям над этими объектами.

Двоичное и десятичное

Можно определить функции:

  • добавления единицы
  • удвоения
  • удесятирения

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

Аппликативный синтаксис

Аппликативный синтаксис эволюционировал из работ Шёнфинкеля, Карри и Чёрча. Функции обозначаются переменными или лямбда-абстракциями. Именование функций в аппликативном синтаксисе безтипового лямбда-исчисления осуществляется через присвоение переменным абстракций. Алонзо Чёрч (Alonzo Church), хотя и известен своей нотацией с лямбда-абстракцией и явными скобками, в некоторых своих работах также использовал более компактные формы записи, близкие к аппликативному синтаксису, особенно при работе с комбинаторами. Например, вместо того чтобы постоянно писать λx.x+1, он мог ввести сокращение f для этой функции, это записывалось в духе:

f≡λx.x+1

Таким образом, Чёрч ввёл операцию именования как связь между лямбда-выражением и символическим именем. Однако он ещё не привязал это к конкретному синтаксису, так как его работа была сосредоточена на чистой теории. Именование как операция — это идея Чёрча, использование для неё знака равенства закрепилось благодаря разработчикам функциональных языков, создатель MetaLanguage (ML) - Робин Милнер (1970-е годы).
Лямбда-абстракция (определение анонимной функции) записывается как λx.t, где x — аргумент, а t — тело функции.
Определим переменную f и присвоим ей лямбда-выражение (имеющее в безтиповом λ-исчислении единственный возможный для переменных тип «функция») в качестве значения, например функцию, которая возвращает переданный аргумент:

f=(λx.x)
f=λx.x

Теперь мы можем использовать переменную f в выражениях. Применим f к другому лямбда-выражению, например, (λy.y):

((λx.x) (λy.y))
((f) (λy.y))

В аппликативном синтаксисе приложение функции f к аргументу x записывается как

f λy.y

без скобок, a применение функции g к двум аргументам w и z — как

g w z 

Бесскобочность достигается за счёт соглашения о левоассоциативности (см. также Каррирование). Выражение g w z интерпретируется как (g w) z, то есть сначала g применяется к w, а затем результат применяется к z.

Семантика

Теоретико-множественный подход
Категорный подход

В λ-исчислении любая функция может быть применена к самой себе. Это ключевая особенность, которая позволяет выражать рекурсию и другие сложные вычислительные конструкции.

нужно:

  • Определить множество D, элементы которого будут значениями λ-выражений
    Без такого множества D мы не можем корректно описать, что означают выражения λ-исчисления. Мы не можем сказать, какие у них значения. А без возможности приписать выражениям значения нельзя говорить об их смысле. Без подходящего D мы не можем задать интерпретацию термов и операций λ-исчисления.
  • Интерпретировать функции как элементы этого множества
    (D должно содержать все функции из D в D, то есть D должно содержать множество всех функций D → D)

построение такого множества D - нетривиальная математическая задача (из-за парадокса Кантора). Ее решение привело к развитию теории доменов и других разделов математики.

идея фиксированной точки, когда D строится как фиксированное множество, удовлетворяющее

D≅D→D

И вот в этом месте я не осилил. Разъясните, бегом пожалуйста, люди злые добрые.

Как мне этим вашим лямбда-исчислением описать байт, его значения, и операции с ним? Нумералы Чёрча (функции с двумя параметрами) я могу написать, но дальше дело не идёт.

 ,

Shushundr
()

Категории пакетов и сторонние репозитории

Форум — Talks

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

Кроме этого ещё есть фича «репозитории сторонних разработчиков». Это когда команда дистрибутива настолько гадкая, что разработчики её сторонятся.

Сторонние репозитории делятся на два вида - либо по какой-нибудь технологии (типа Java, Haskell, Ruby), либо это персональные репозитории. Первые - командные, вторые - асоциальные.

Стандарта на то, как называть категории нет. Есть категория про текстовые редакторы, есть про серверы web-приложений и другие.

А что если категории называть по именам (командных) репозиториев? Какие ждут грабли, и чем это будет нехорошо?

 ,

Shushundr
()

Как работают сервисы youtube и rutube?

Форум — Talks

Хотелось бы опенсорсную утилиту, которая бы работала как сайт, я ей даю список URL-ов, она их там скачивает, я на следующий день получаю комплект файлов для просмотра. Мне на Java (а не через консоль с этими вашими youtube-dl).

Я спросил у LLM и она сказала мне:

  1. изучай протоколы DASH или HLS
  2. требуется собрать видео и аудио потоки вместе
  3. Некоторые видео защищены с помощью DRM, и их скачать практически невозможно
    (и это расстраивает меня)
  4. изучай YouTube Data API, YouTube Analytics API и YouTube Live Streaming API
    (а это сложно и надолго)
  5. ещё потребуется:
  • Использование HTTP-клиента (например, HttpURLConnection или библиотеки OkHttp).
  • Разбор HTML-кода страницы YouTube (с помощью библиотек вроде Jsoup).

Никто не видел готового для self-хостинга (чтобы без рекламы)?

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

 ,

Shushundr
()

Книги про то как пишут текстовые редакторы (посоветуйте)

Форум — Desktop

Я имею в виду графические текстовые редакторы, те, которые ещё не текстовые процессоры, но уже умеют изображать шрифты на экране (через X11).

По причинам неразвитости цифровых технологий, понятно, что по российским технологиям вроде редактора «Лексикон» таких книг нет.

Я даже не знаю, а существуют ли какие-то российские опенсорсные редакторы сейчас (как живые проекты).

Понятно, что софт в наше время продать нельзя (слишком много альтернатив, слишком мало российских магазинов, один только RuStore и есть).

Но можно было бы сделать веб-сервис. Хостинговые компании показывают, что в принципе на сайте принимать деньги можно.

 , , ,

Shushundr
()

Существуют ли альтернативы подсчёту количества ссылок?

Форум — Desktop

В составе Libre Office есть кусок
UNO Runtime Environment (URE)
который занимается тем, что обеспечивает взаимодействие между объектами разных процессов.

На мой взгляд в C# эта же штука (Remoting) была сделана лучше, так как позволяла плагинам работать в отдельных процессах и крашиться. Там были Lease, которые позволяли проверять - жив ещё соседний процесс или уже умер. Хотя в принципе без разницы, внутримашинная она или межмашинная, только типы каналов различаются - shared memory или tcp. При Reference Counting такого нет. Умер один процесс - легла вся программа. Что не позволяет допускать к разработке непроверенных разработчиков (например из России). Плохо, что в mono такую замечательную технологию протеряли.

Вопрос - а существует ли альтернатива этому UNO/URE, которая работает не на основе глобального RC, а на основе сборки мусора (хотя бы внутри одной оси / машины).

UPD: предлагают протокол JERI с сайта https://river.apache.org/
что скажете?

 , ,

Shushundr
()

Сколько книг из серии ЖЗЛ вы прочитали?

Форум — Talks

https://ru.wikipedia.org/wiki/Список_книг_серии_«Жизнь_замечательных_людей»

Про Стивена Джобса есть, №1857

Какие из них наиболее полезны для члена опенсорс-сообщества, и почему?

 

Shushundr
()

Приложение для приёма таблеток

Форум — Mobile

Существует ли опенсорсное приложение, написанное для Android, которое напоминает когда что нужно съесть? Как оно называется?

Находится разное, неясно что выбрать, как собрать и как установить.
https://github.com/AdamGuidarini/MediTrak (GPL-2)
https://github.com/Futsch1/medTimer (MIT)
https://github.com/jclehner/rxdroid (Java, без лицензии, но free)

Оно не только напоминать должно, но и запоминать фактические моменты приёма, запоминать всю продолжительность курса приёма, отображать концентрацию веществ на протяжении времени курса.

 

Shushundr
()

Существует ли российская альтернатива Let's Encrypt?

Форум — Talks

Будут ли выдаваемые на нём сертификаты соответствовать требованиям ФАПСИ, ФСБ, использовать алгоритмы шифрования и подписей по ГОСТ и что там ещё бывает?

Если нет, то почему нет? Что мешает?

См. также Скандинавская альтернатива Let's Encrypt

 

Shushundr
()

Скрестить Qubes OS с докером

Форум — General

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

Или это как-то по-другому делается?

 ,

Shushundr
()

Бесплатные заменители разума

Форум — Talks

Какими чат-ботами вы пользуетесь? Алиса какая-то туповатая. Раньше был phind.com, но он теперь платный. Какие есть ещё без регистрации и sms?

 

Shushundr
()

Как синхронизировать файловые потоки?

Форум — Development

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

Вот первая программа:

$ clang-format main2.c
#include <stdio.h>

int main() {
  setbuf(stdout, NULL); // Отключение буферизации stdout
  setbuf(stderr, NULL); // Отключение буферизации stderr

  printf("Это stdout\n");
  fflush(stdout);
  fprintf(stderr, "Это stderr\n");
  fflush(stderr);
  fprintf(stderr, "Это stderr2\n");
  fflush(stderr);

  printf("Это stdout 2\n");
  fflush(stdout);
  fprintf(stderr, "Это stderr3\n");
  fflush(stderr);

  printf("Это stdout 3\n");
  fflush(stdout);
  printf("Это stdout 4\n");
  fflush(stdout);

  return 0;
}

Вот вторая программа:

$ clang-format main1.c
#include <errno.h>
#include <poll.h> // Для структуры pollfd и константы POLLIN
#include <pty.h>
#include <stdbool.h>
#include <stdio.h>
#include <sys/select.h>
#include <sys/types.h>
#include <unistd.h>

#include <time.h> // Для функции nanosleep
int nanosleep(const struct timespec *req, struct timespec *rem);

int max(int a, int b) { return (a > b) ? a : b; }

int main() {
  int master_fd_stdin, slave_fd_stdin;
  int master_fd_stdout, slave_fd_stdout;
  int master_fd_stderr, slave_fd_stderr;

  openpty(&master_fd_stdin, &slave_fd_stdin, NULL, NULL, NULL);
  openpty(&master_fd_stdout, &slave_fd_stdout, NULL, NULL, NULL);
  openpty(&master_fd_stderr, &slave_fd_stderr, NULL, NULL, NULL);

  pid_t pid = fork();
  if (pid == 0) {
    // В дочернем процессе
    close(master_fd_stdin);
    close(master_fd_stdout);
    close(master_fd_stderr);

    dup2(slave_fd_stdin, 0);
    dup2(slave_fd_stdout, 1);
    dup2(slave_fd_stderr, 2);

    close(slave_fd_stdin);
    close(slave_fd_stdout);
    close(slave_fd_stderr);

    execl("./main2", "main2", NULL);
  } else {
    // В родительском процессе
    close(slave_fd_stdin);
    close(slave_fd_stdout);
    close(slave_fd_stderr);

    char buffer[1024];
    ssize_t bytes_read;
    bool is_stdout_expected = true;
    bool is_stderr_expected = true;

    fd_set read_fds;
    int max_fd = max(master_fd_stdout, master_fd_stderr);

    struct pollfd fds[2];
    fds[0].fd = master_fd_stdout;
    fds[0].events = POLLIN;
    fds[1].fd = master_fd_stderr;
    fds[1].events = POLLIN;

    while (is_stderr_expected || is_stdout_expected) {
      FD_ZERO(&read_fds);
      if (is_stdout_expected) {
        FD_SET(master_fd_stdout, &read_fds);
      }
      if (is_stderr_expected) {
        FD_SET(master_fd_stderr, &read_fds);
      }

      select(max_fd + 1, &read_fds, NULL, NULL, NULL);

      if (FD_ISSET(master_fd_stdout, &read_fds)) {
        bytes_read = read(master_fd_stdout, buffer, 1024);
        if (bytes_read > 0) {
          buffer[bytes_read] = '\0'; // Добавляем нулевой символ в конец строки
          printf("\033[0;37m%s\033[0m", buffer);
        } else {
          is_stdout_expected = false;
        }
      }

      if (FD_ISSET(master_fd_stderr, &read_fds)) {
        bytes_read = read(master_fd_stderr, buffer, 1024);
        if (bytes_read > 0) {
          buffer[bytes_read] = '\0'; // Добавляем нулевой символ в конец строки
          printf("\033[0;31m%s\033[0m", buffer);
        } else {
          is_stderr_expected = false;
        }
      }
    }
  }

  return 0;
}

При выводе строки выводятся в неправильном порядке. Как сделать, чтобы выводились в правильном?

Пока у меня мысль такая:

  1. нужно сделать библиотеку, которая содержит функции printf, fprintf и что там ещё бывает. Делать она ничего не должна, должна загрузить системную и все вызовы туда пересылать, кроме особоинтересных.
  2. загрузить эту библиотеку в дочерний процесс вместо системной
  3. каждый факт вывода оборачивать в «пакет», к которому добавлять момент времени (и номер процесса/нити?).

 

Shushundr
()

В чём разница между консолью и терминалом?

Форум — Talks

Можно ли сказать, что консоль - физическая, а терминал - программная компонента?

Так вроде нельзя, вон, википедия пишет, что консоль это интерфейс («Linux-консоль — интерфейс ядра Linux»), т.е. абстрактное понятие. Ещё в википедии написано: «Консоль может быть реализована как физический терминал». Так кто из них физический?

Значит мы имеем дело с многозначными терминами. Где-бы были выписаны их разные значения, не как в википедии, а конкретно для линукса?

«виртуальные консоли — сеансы работы с консолью, между которыми можно переключаться»

a /dev/pts dir with devpts filesystem mounted
CONFIG_UNIX98_PTYS=y «pseudo terminal (PTY) is a software device consisting of two halves: a master and a slave.»

Вот эти виртуальные консоли и псевдотерминалы - это одно и то же, или разные понятия?

Как называется книжка, где это всё разобрано? man vcs

Ранее по теме:
2019-01-15, TesterTester, Может кто то простыми словами объяснить разницу между консолью и терминалом
2004-03-18, anonymous, в чем разница между «консолью» и «буквенно-цифровым терминалом»

Перемещено hobbit из general

 ,

Shushundr
()

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