LINUX.ORG.RU

Сообщения LINUX-ORG-RU

 

Всё, TGSI отключили, теперь NIR

 , , ,

LINUX-ORG-RU
()

Мониторинг IO обращения к файлам, а не дискам.

 , , , ,

Суть, периодически ловлю жестокий 12309 причём с приложениями при которых IO идёт на корень расположенный на медленном диске, приложения это игры например которые вообще не должны корень тыркать особо, когда начинаются подвисания проверить откуда они просто невозможно весь GUI висит колом. Пока переключишься по ctrl+alt+Fx всё устаканивается. А логировать в файл и потом засекать время когда произошло с последующим муторным чтением тонны логов, а их будут тонны ибо это проявляется не периодически, не хочется от слова совсем. Про iotop,iostat и подобные знаю.

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

Я напишу демон который будет этот лог обращений кушать и выплёвывать в сеть и клиента на телефон который будет мне показывать к каким файлам идёт обращение. И в следующий раз когда начнётся ахтунг при котором порой даже мышка заморожена я хоть на внешнем устройстве в клиенте тыкну «записать лог» и выхвачу чего там и куда кто пишет/читает в конкретный момент времени. По итогу возможно проблемные штуки просто смонтирую в tmpfs или приму иные меры. Достало а то уже =)


Заранее отвечаю:

  • нет, не могу я купить ssd и перенести корень, рад бы но нет;
  • нет, память не забита при лагах 50+% свободно;
  • нет если я включу swap всё так же.
  • да я гуглю утилиту, но никак не нагуглю все просто показывают нагрузку на диск от приложения,
    эта информация бесполезная, ибо нужно знать к каким именно файлам идёт обращение.

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

LINUX-ORG-RU
()

Перепакуйте rar в zip пожалуйста, если не трудно

 ,

Озвучка для игры https://drive.google.com/file/d/1Kx_1Zw5MtkJF2A5uypOYlyMD9ixb6h83/view?usp=sharing

unrar не хочет, в man про конвертацию локали ничего нет.

unrar: Pathname cannot be converted from UTF-16BE to current locale.

RAR archive data, v4, os: Win32

Игра The stanly parable если что, досталась на халяву ::)

LINUX-ORG-RU
()

Revision Demoparty 2023

 , , , ,

Стартанул Revision Demoparty 2023.
Ждём приколюх, докладов графических психов и крутых демосценеров и их шизофреничных проектов.
Наконец IRL, может быть с кодированием в прямом эфире в виде шоу, попозже.

Летс маза факинг гооооуууууууууууууууууууууууууууууууууууууууууууууууууууу

 █▄▄▄▄ ▄███▄       ▄   ▄█    ▄▄▄▄▄   ▄█ ████▄    ▄           
+█  ▄▀ █▀   ▀       █  ██   █     ▀▄ ██ █   █     █          
-█▀▀▌  ██▄▄    █     █ ██ ▄  ▀▀▀▀▄   ██ █   █ ██   █         
+█  █  █▄   ▄▀  █    █ ▐█  ▀▄▄▄▄▀    ▐█ ▀████ █ █  █         
-  █   ▀███▀     █  █   ▐             ▐       █  █ █         
  ▀               █▐                          █   ██         
                  ▐                                          

Живая трансляция

Выкладки работ, презентации, доклады

Место для публикации работ

LINUX-ORG-RU
()

🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡

 clown

🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡
🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡
🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡
🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡
🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡
🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡
🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡
🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡
🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡
🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡
🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡
🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡
🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡
🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡
🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡
🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡
🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡
🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡
🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡
🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡
🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡
🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡
🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡
🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡
🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡
🤡🤡🤡🤡🤡🤡🤡🤡🤡🤡
🤡🤡🤡🤡🤡🤡🤡🤡🤡
🤡🤡🤡🤡🤡🤡🤡🤡
🤡🤡🤡🤡🤡🤡🤡
🤡🤡🤡🤡🤡🤡
🤡🤡🤡🤡🤡
🤡🤡🤡🤡
🤡🤡🤡
🤡🤡
🤡

LINUX-ORG-RU
()

Лол

 , , ,

LINUX-ORG-RU
()

Мысли вслух про Эльбрус

 , , , ,

Видиво, там вроде @jpegqs маинтейнер альт линукс под архитектуру эльбрус и точно Бачило https://www.youtube.com/watch?v=G56lE2407Ls может кому интересно.

Для Ъ, Обсуждают особенности эльбруса, проблемы, фичи. Не шибко глубоко и развёрнуто (по понятным причинам), но всё равно, под чай/кофе/суп норм.

LINUX-ORG-RU
()

Своё «Шифрование» tcp/udp тсрафика

 , , , ,

За советом пришёл, в общем третий день делаю приложение для мобилки, с хоста (домашний ПК) идёт tcp/udp трафик, голый и ничем не прекрытый, в трафике звук. Не хочу тащить зависимости для https/ssl/etc или типа того и подумалось так.

  • ПК (сервер) на UI морде лица показывает код например RX0BGF
  • Мы этот код вводим на (мобилке)
    • Мобилка делает XOR данных и кода RX0BGF
      • Сервер делает обратный XOR обрабатывает
      • И так по кругу.

Раз в N времени сервер вместе с данными шлёт заксореный новый код и теперь оба ксорят/дексорят уже на основе него. И так по кругу.

То есть нам в начале надо ввести руками в клиент код. А затем от раз в N времени или раз в N размера передаваемых данных будет менятся.

Сразу заранее ответы на вопросы.

  • Почему XOR
    Хочется быстро и просто

  • Зачем «шифровать» Ну звук сырой в сеть идёт пусть не криптоанархично, но случайный клиент будет получать белиберду вместо звука и вообще не подключится так как должен вернуть отксореный ответ, а не вернёт обрыв соединения.

  • Зачем такое ПО вообще? Ну там сидеть в наушниках поотдаль от пк фильм смотреть, никому не мешая, а у наушников проводок не длинный, музыку включить на пк, а слушать с телефона или как у меня сломался звук на ПК нахрен вообще.

  • Уже есть такое ПО под андроиды Да есть Simple Protocol Player NG и ещё кучка , ну NIH синдром и в целом задолбало что там звук отваливается

Пойдёт такое? В качестве минимального шифрования трафика? Ничего особенного, никаких мировых секретов просто звук с ПеКа, но хочется огородить трафик хотя бы на минималках. Мне кажется норм ибо данные для XORа трафика (коды/ключи как хочется называйте) будет довольно часто и автоматически обновляться. Ну правда если вычислить первый код/ключ то всё сразу можно расшифровать конечно, ну тут можно некий механизм генерации независимый сверху пришлёпнуть по типу кодов Steam на основе времени например. Но это уже так нахлобучки и мысли в слух

Поругайте. Стоит ли оно вообще того, приложеньку я попозже выложу.

LINUX-ORG-RU
()

Android простой пример Foreground service

 , foreground-services, ,

Хоспади я уже всю черепушку сломал себе, вкратце суть, хочу для love2d-android присобачить Foreground service и через JNI дрыгнуть новый обрезанный экземпляр love, нужно для утилитки которая по сети принимает PCM звук от ПК, если приложение свернуть на андроиде звука нет, надо пускать часть кода в сервисе специальном, только вот беда я java не знаю, не ну в целом понимаю что происходит чисто по синтаксису ну и всё, об манифесты и gradlew конфигурацию весь лоб себе расшиб уже, миллиард нюансов для меня дикий лес. Да по хорошему надо сесть и пару месяцев вкуривать с азов, чего да куда и зачем, но блин…

Есть где максимально простой, но полноценный пример приложения которое что-то очень простое в фоне делает, например музыку играет или ещё что, только очень простое которому я sdk/ndk подсуну и соберу без андроид студии. Дабы я построчно всё разобрал. Сложно мне, дебилушка наверное хнык.

Чего этот ваш андроид сложный такой одуреть. Буду благодарен за пинки и поджопники в нужные стороны. А пока я спать, всю ночь с этим возился. :(

P.S. Пока не лёг вопрос в догонку, а возможно ли вообще пробросить всё в Foreground? В смысле стартонуть заглушку, сразу запустить Foreground service и уже в нём завести love.GameActivity завести SDLActivity и вот всё это? Я вот этот момент не понял. Хотя наверное это излишне будет жрать батарейку ибо на деле мне просто кусок кода небольшой через каллбек пробросить и запустить сеть + звук и всё.

LINUX-ORG-RU
()

Какая лицензия на good-pinguin пнг?

 ,

https://www.linux.org.ru/img/good-penguin.png как и на исходники лора апач2? Или всё же иная?

Зачем не скажу, будет понятно через дня три или недельку или никогда.)

java jar @maxcom

UDP: ответ

Лицензия ХЗ какая.

LINUX-ORG-RU
()

Качалка COUB для вашего ПеКа

 coub, , , ,

Драсти опять я к вам со своим lua говнокодом. Товарищ @superuser скоромно сбросил в толксы свою качалку на баше. Не будем скромничать код по ссылке Coub закрывается (комментарий) Более того он ещё патчи исправления скидывает, похвала. Я взял смелость и переписал на lua немножко расширив список возможностей и теперь у нас конкурирующий бизънес! :D Вот вы хихи да хаха, а люди за скачивание даже платят, пруфов не дам :o) Скрипт качалка ниже совместим с версией от @superuser по части хранения coub`ов.

Как пользоваться.

  • В качестве входных параметров может выступать

    • ссылка на coub https://coub.com/view/2ppitj
    • идентификатор на coub 2dnd59
    • название уже скачанного coub Дело_говорит_Симпсоны
    • путь ~/COUB/Дело_говорит_Симпсоны
    • комбинация идентификатора, ссылки, пути и имени
    • 14ns7i,https://coub.com/view/2djrec,Дело_говорит_Симпсоны,2cljbw
    • список файлов должен идти в конце параметров и разделятся запятыми (впритык!)
    • список можно прочитать из файла cat mycoubs.txt | coub - или через ls из каталога
    • в файле разделять можно запятыми или переводом строки
  • Ключ -l задаёт количество повторений inf бесконечность

    • если задана последовательность coub то каждый из них проиграется столько раз сколько
      задано ключом -l если для последовательности coub’ов задан -l inf то каждый из ниж будет проигрываться вечно, при это наглядевшись на один нужно руками закрыть окно плеера откроется следующее видео и также будет по кругу идти, это удобно так как coub’ы часто смотрят по многу раз.
  • Ключ -d говорит о том что нужно просто скачать один или несколько coub’ов, проигрываться ничего не будет

Скрипт не ищет на coub по названиям типа Дело_говорит_Симпсоны этот запрос к программе для поиска локального файла.

Коубы указанные идентификатором или ссылкой всегда скачиваются, нет проверки был ли уже скачан коуб. Для уже скачанных используйте названия из ~/home/$USER/COUB .

Обработка параметров идёт через жъёпу! В начале ключи потом ссылки/id/имена или -. Значения разделены от ключей пробелом -l 3, урлы,id,имена запятыми без пробелов

Зависимости apt install lua wget лол


#! /bin/env lua
local coub = {} -- initial table for export like module
---------------------------------------------------------
coub.config =
{   -- coub save location, you can play from this dir
    storages = '/home/'..os.getenv('USER')..'/COUB';
    -- mp3, mp4 donwnload location, maybe userfull
    download = '/home/'..os.getenv('USER')..'/COUB/DATA';
}
---------------------------------------------------------
function coub.msg(text)
    print("\x1b[32m"..text.."\x1b[39m")
end

function coub.err(text)
    print("\x1b[31m"..text.."\x1b[39m")
end
---------------------------------------------------------
function coub.usage()
help = [[
Use: coub [-h] [-l Num] source

Options:
    -h  - Help and exit;
    -l  - Repeat audio Num times or inf for infinity;
    -d  - Download only
    -   - Read coub or coub list from stdin
    you can use full url or coub id
    source - url | id | file.mp4

Examples:
    # play single coub
    coub https://coub.com/view/38yafx
    # play single coub from storage
    coub ~/COUB/Don_t_be_egoistic
    # play single looped coub
    coub -l inf 38yafx
    # download single coub, no play this
    coub -d https://coub.com/view/38yafx
    # download multiply coubs with separated
    coub -d 38yafx,https://coub.com/view/38yafx
    coub -d 38yafx[newline]https://coub.com/view/38yafx
    cat mycoubs.txt | coub -d -
    # download and play multiply coubs (no looped)
    coub -d 38yafx,38yafx
    # play multiply coubs from file id list
    cat mycoubs | coub -
    ]]
    print(help)
end
-----------------------------------------------------------
local function filter_get_between(body,a,b)
    local s , e = 1 , 1;
    local out = ""
        s,e = body:find(a,1,true);
        if s == nil or e == nil then return end
        local ss,ee = body:find(b,s,true);
        if ss == nil or ee == nil then return end
        out = out .. body:sub(e+1,ss-1);
        body = body:sub(ee,#body)

    return out;
end
-----------------------------------------------------------
function coub:run()
    -- stupid handle va_args
    for k,v in ipairs(arg) do
        if self.xoop then self.loop = v; self.xoop = nil; end
        if v == '-h' then self.usage();     end
        if v == '-l' then self.xoop = 1;    end
        if v == '-d' then self.dl_only = 1; end
        self.resource = v
    end
    if not self.loop then
        self.loop = 0;
    elseif self.loop == 'inf' then
        -- do nothing
    else
        self.loop = tonumber(self.loop);
        if self.loop > 0 then
           self.loop = self.loop - 1;
        end
    end

    -- decrement loop value becouse loop value =  N+1
    -- mpv --loop=0 is once play and --loop=1 twoo play


    if not self.resource then
        coub.err("Bad coub: no have input");
        coub.usage()
    end

    -- read input from stdin
    local cnt = 1;
    if self.resource == '-' then
       self.resource = io.read("*all");
    end
    -- check is resource contains data
    -- min 2 symbol coub id (yea?)
    if #self.resource < 2 then
        coub.err('Bad data: Input source is empty');
        return; 
    end
    -- tokenization play lists, and concat to URL
    -- тут ещё нужно проверить может нужные коубы уже скачаны
    self.playlist = {}
    for resource in string.gmatch(self.resource, '([^,\n]+)') do
        if resource:find('https',1,true) then
            self.playlist[cnt] = resource;
        elseif resource:find('/',1,true) or resource:find('.',1,true) then
            self.playlist[cnt] = resource;
        else
            self.playlist[cnt] = 'https://coub.com/view/'..resource;
        end
        cnt = cnt + 1;
    end
    -- always make needed directory
    assert(os.execute('mkdir -p '..self.config.storages),"Storage no writable");
    assert(os.execute('mkdir -p '..self.config.download),"Storage no writable");
    -- download coubs & play coubs --------------------------------------------
    for i,v in ipairs(self.playlist) do

        local exec = io.popen('wget -q -O- '..v);
        local html = exec:read('*all'); exec:close();
        -- wget 
        if  html:match('%a+') then
            local json = filter_get_between(html,"<script id='coubPageCoubJson' type='text/json'>",'</script>');
            local url_video = filter_get_between(json,'"video":{"higher":{"url":',',');
            -- some video no have higher resulution
            -- try get lowless
            if not url_video then
                 url_video = filter_get_between(json,'"video":{"high":{"url":',',');
            end
            local url_audio = filter_get_between(json,'"audio":{"high":{"url":',',');
            local coubtitle = filter_get_between(json,'"title":"','",');
            coubtitle = coubtitle:gsub('[%p+%s+]','_');
            local coubid    = v:gsub('https://coub.com/view/','');
            coub.msg('Download:['..i..'] '..v..' | '..coubtitle)
            -- check file format befor try handle data
            if url_video and url_video:find('.mp4',1,true) and url_audio and url_audio:find('.mp3',1,true) then
               local file_to_save = self.config.download..'/'..coubid;
               os.execute('wget -q -Y off -c -O '..file_to_save..'.mp4 '..url_video);
               os.execute('wget -q -Y off -c -O '..file_to_save..'.mp3 '..url_audio);
               os.execute('ln -s '..file_to_save..'.mp4 '..self.config.storages..'/'..coubtitle..' 2>/dev/null');

               -- do not play if need just download video
               if not self.dl_only then
                   -- play audio in background with infinity loop
                   os.execute('( mpv --loop=inf '..file_to_save..'.mp3 ) 1> /dev/null  & '..
                              -- play video, after video ends we kill previos mpv 
                              -- stdout to /dev/null becouse kill broke terminal stdin
                              -- maybe becouse mpv use '\r' for output info about playing
                              ' mpv --loop='..self.loop..' '..file_to_save..'.mp4 1> /dev/null ; kill -INT $! ');
               end
            else
                coub.err('Bad coub:['..i..'] file formats no mp3 and mp4 '..v);
            end
        else
            if v:find('~',1,true) then
                v = v:gsub('~',os.getenv('HOME'))
            else 
                v = self.config.storages..'/'..v:gsub('https://coub.com/view/','');
            end
            local justplay = io.open(v,'r');
            if justplay then
               justplay:close();
                  if not self.dl_only then 
                    coub.msg('PlayFile:['..i..'] '..v)
                    local link = io.popen(' readlink -e '..v);
                    local file = link:read('*all'); link:close();
                    os.execute('( mpv --loop=inf '..file:gsub('mp4','mp3')..' ) 1>/dev/null  & '..
                          ' mpv --loop='..self.loop..' '..file..' 1>/dev/null ; kill -INT $! ');
                  else
                    coub.msg('Ignore..:['..i..'] coub '..v..' is downloaded')
                  end
            else 
                coub.err('Bad coub:['..i..'] coub not found '..v);
                coub.err('Bad coub:['..i..'] coub not found https://coub.com/view/'..
                        v:gsub(os.getenv('HOME')..self.config.storages,''));
            end
        end
    end
end

coub:run()

- Баги косяки, тупак, есть?
- Да. 
- Исправлять будешь? 
- Нет. 
- А почему? 
- Ну модет потом... 
- А нахера всё это? 
- А тебе не пофиг?
- Пофиг
- Ну и всё
- Ну и ладно
- Ненужно!
- Согласен
- А зачем тогда?
- Потому что.
- Потому что что?
- Потому что понедельник!
- Ой всё.
- Вот и я о том.

Подборочка

coub yaik,s08ov,8ek0p,7aenz,bslpw,5g1j9,wm3bk,14zilh,7l1rdrfc,2b5izx,2aatx2,29jdfr,29k4yq
coub 29n55n,29j3j1,10a9jk,297dvo,280v0q,29adcz,29aon6,29gzt6,1qrxao,334db,15egdcy8,lvd3c

Фъъсьооо!

LINUX-ORG-RU
()

Переводилка для вашего ПекА

 , , , ,

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

Обновлено.

Зависимости apt install lua xclip xsel xdotool aosd_cat translate-shell

Вопщем таксь.
Порой, нужно не просто выделить текст где угодно и увидеть его по перевод по горячей клавише,
но и получить его перевод в виде текста. К счастью в x11 есть аж три буфера обмена.
Поэтому добавил опцию copy_translated=true/false.

Суть проста:

  • вешаете скрипт, например на F7
  • выделяете произвольный текст без его копирования через контекстное меню(как и было)
  • нажимаете F7 и
  • всплывает текст перевода (как и было)
  • нажимаете среднюю кнопку мышки и в любом поле ввода вставляется оригинальный текст
  • нажимаете правую кнопку мышки и через контекстное меню делаете вставить и вставляется переведённый вариант
  • повторное нажатие F7 ещё раз покажет перевод, без повторного выделения
#! /bin/env lua
local poptrans =
{
    -- select language from lang to lang
    lang_from = "auto", --auto,en,fr,de or other
    lang_to   = "ru",
    -- copy translated text to clipboard
    -- if you select text (no use context menu textcopy)
    --   - middle mouse button paste translated text
    --   - right mouse button context menu paste original text
    --   - script used 2 levels X11 clipboard buffest of 3 levels :)
    copy_translated = true,
    -- how more seconds show you translated text
    show_timer = 3,
    -- popup translated text under mouse position
    follow_mouse = true,
    -- if follow_moise is false, set translated
    -- text position static coords
    popup_pose_x = 0,
    popup_pose_y = 0,
    -- max width message in screen, zero is auto
    popup_width  = 0,
    -- get text from system clipboard
    app_clipboard = "xclip -o 2> /dev/null",
    -- set text to system clipboard
    app_set_clipb = "xsel -b -i ",
    -- get mouse systemd coords
    app_mousepose = "xdotool getmouselocation 2> /dev/null",
    -- show text popup with translated text
    app_popup_msg = "aosd_cat -x %d -y %d -B white -R white -t 0 -p 0 -u %d -w %d"
}

function poptrans:run()
    local translated = '';
    self.previos_text = '';
    -- read clipboard
    local exec = io.popen(self.app_clipboard);
    local text = exec:read('*all');exec:close();
    -- get cursor position
    exec = io.popen(self.app_mousepose);
    if self.follow_mouse then
        self.popup_pose_x,self.popup_pose_y = exec:read("*all"):match("x:(%d+) y:(%d+)");
        self.popup_pose_x = self.popup_pose_x+3; exec:close();
    end
    -- do not translate previos text or empty or translated text
    if text ~= previos_text and text ~= '' and text ~= translated then
      local from = ''
      if self.lang_from ~= "auto" then
        from = self.lang_from;
      end
      exec = io.popen('trans   '..from..':'..self.lang_to.." -b '"..text.."'");
      translated = exec:read("*all"); exec:close();
      if self.copy_translated then
         exec = io.popen(self.app_set_clipb,'w')
         exec:write(translated:sub(1,#translated-1));
         exec:flush();
         exec:close();
      end
      previos_text = text;
      exec = io.popen(
      self.app_popup_msg:format(
      self.popup_pose_x,self.popup_pose_y,self.show_timer*1000,self.popup_width),"w");
      exec:write(translated);exec:close();
    end
end

poptrans:run()

Не используйте версию из истории правок!. Там опасный баг с кавычками, (спасибо @maxcom исправить дал)
Единственное что там полезно это пример как делать перевод через гугл API по токену.
Но раз появилась возможность правки то ::)

- ИСПОЛЬЗОВАТЬ НА СВОЙ СТРАХ И РИСК, Я НЕ НЕСУ НИКАКОЙ ОТВЕТСТВЕННОСТИ
- ВСЁ ПРЕДОСТАВЛЯЕТСЯ КАК ЕСТЬ, ЛЮБЫЕ СОМНЕНИЯ ДОЛЖНЫ ВЕСТИ
- К ОТКАЗУ ОТ ИСПОЛЬЗОВАНИЯ
LINUX-ORG-RU
()

А что с тегами случилось? Часть некликабельна

 , , ,

Тут LuaJit coroutines/сопрограммы - вопросик по адекватности происходящего

Выставлены теги coroutines, lua, luajit, луа, сопрограммы

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

LINUX-ORG-RU
()

LuaJit coroutines/сопрограммы - вопросик по адекватности происходящего

 , , ,

Имеем такой незамысловатый код

function gg(name)
   while(true) do 
      coroutine.yield(name)
      io.write(name.."\n")
   end
end

c1 = coroutine.create(gg)
c2 = coroutine.create(gg)

while true do
    coroutine.resume(c1,"alisa")
    coroutine.resume(c2,"bob")
end

Суть вот в чём.
Если запустить lua5.x test.lua (x=1,2,3,4) и послать сигнал kill -s SIGINT $(pidof lua) То ожидаемо вижу

...
alisa
bob
alisa
bob
lua: test.lua:24: interrupted!
stack traceback:
	[C]: in function 'resume'
	test.lua:24: in main chunk
	[C]: in ?
dron@gnu:~/Рабочий-стол$ 

А если запустить luajit test.lua и послать сигнал kill -s SIGINT $(pidof luajit) То завершается лишь одна сопрограмма, а вторая продолжает работать, а какая из них уже зависит от того какая была активна в момент принятия программой сигнала.
Я ещё исходники не копал, ну так по диагонали глянул, так и должно быть? Или это «фича» luajit ?

сисьиньфо

dron@gnu:~/Рабочий-стол/nsec.lua$ luajit -v
LuaJIT 2.1.0-beta3 -- Copyright (C) 2005-2022 Mike Pall. https://luajit.org/
############################################################################
dron@gnu:~/Рабочий-стол/nsec.lua$ lua -v
Lua 5.2.4  Copyright (C) 1994-2015 Lua.org, PUC-Rio
dron@gnu:~/Рабочий-стол/nsec.lua$ lua5.1 -v
Lua 5.1.5  Copyright (C) 1994-2012 Lua.org, PUC-Rio
dron@gnu:~/Рабочий-стол/nsec.lua$ lua5.2 -v
Lua 5.2.4  Copyright (C) 1994-2015 Lua.org, PUC-Rio
dron@gnu:~/Рабочий-стол/nsec.lua$ lua5.3 -v
Lua 5.3.6  Copyright (C) 1994-2020 Lua.org, PUC-Rio
dron@gnu:~/Рабочий-стол/nsec.lua$ lua5.4 -v
Lua 5.4.4  Copyright (C) 1994-2022 Lua.org, PUC-Rio
dron@gnu:~/Рабочий-стол/nsec.lua$ uname -a
Linux gnu 6.0.0-6-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.0.12-1 (2022-12-09) x86_64 GNU/Linux
dron@gnu:~/Рабочий-стол/nsec.lua$

Я понимаю что luajit отношения к ванильной луа не имеет и всё такое, мне интересно именно поведение, это норм или нет. А то я тут послал вчера сигнал то и спать лёг, а утром проснулся, а оно всё молотит только молотит половина программы лол, я такой "во дела! Надо на ЛОР срочно написать, вот пишу :D

LINUX-ORG-RU
()

Едрить колотить! Или приключения Radeon HD 6850 с волшебной палочкой

 , , , ,

Господа товарищи, я немного в а####е и радости. Для начала посмею напомню своё нытьё как предысторию RIP Radeon HD 6850. RIP Gamedev. Хнык. Но всё же. [РЕШЕНО:Карта ожила] ^.^. Для Ъ суть проста, я уже не раз жаловался что моя в заголовке обозначенная любимая видиокарточка даже в режиме рабочего стола грелась стабильно в 60 градусов, вообще без нагрузки 5~10% судя по radeontop, а вентилятор включался только при 75 что я только не пытался делать, рылся в коде dymanic power mamager ядра, покупал дорогущие термопасты и бережно проводил техосмотр с сдуванием пылинок раз в несколько месяцев. Несмотря на всё это произошёл отвал видиочипа или памяти (моей компетенции не хватает сказать уверенно) выражалось это в артефактах. Ну по ссылке можно прочесть что я была не была решил её прогреть, причём на сухую и это помогло, помимо этого были снижены частоты работы на минимум echo low > /sys/class/drm/card0/device/power_dpm_force_performance_level уже конечно не поиграть, но комфортные свистоперделки cinnamon очень шутро и та работают, мне хватало, когда же мне нужно было 3D с нормальной производительностью я возвращал частоты на автоматическое управление не на долго. Но вот случился снова отвал, я забил, вынул карту и стал использовать встройку в материнской плате Radeon HD 4250 всё бы ладно, но у неё просто нет своей оперативки она использует системную RAM и поэтому даже рабочий стол порой пролагивает. Сидел на встройке уже давно с того года =), но вот сижу я такой и думаю, а чего жалеть взял свою HD 8650 разобрал почистил ещё раз и ещё раз нещадно на 350 градусах прогрел (опять на сухую можете фейспалмить ага), а потом вспомнил что у меня радиатор с вентилятором запасной куплены (мноооого лет назад) на всякий, но без кожуха пластикового, я такой, а что терять возьму и без кожуха поставлю, гляжу и блин термопасты нету, дорогая MX кончилась. Но есть баночка КПТ-8 дцать лет лежащая, короче пальцем намазал, стянул всё винами, собрал карту, сунул в комп, загружаюсь. А теперь магия следим за руками,

  • Вентилятор на видеокарте теперь тихооонько вертится почти всегда (раньше он включался только при 73~75 на 100% на несколько секунд и снова тишина)
  • Температура 41~43 градуса в режиме рабочего стола, была 60~65

Чивооооооооооооооооооооо? Ядро какое было такое и осталось, ничего не делал. С какого хера вентилятор стал работать по другому? С какого хера так сильно упали температуры со сраной КПТшки. Там чего термодатчик в вентилятор встроен?

О том какие показатели температуры были пруф тут У кого печка как печёт пирожки сейчас так

dron@gnu:~$ sensors
k10temp-pci-00c3
Adapter: PCI adapter
temp1:        +17.0°C  (high = +70.0°C)
                       (crit = +99.5°C, hyst = +94.5°C)

radeon-pci-0100
Adapter: PCI adapter
temp1:        +41.5°C  (crit = +120.0°C, hyst = +90.0°C)

atk0110-acpi-0
Adapter: ACPI interface
Vcore Voltage:       1.37 V  (min =  +0.85 V, max =  +1.60 V)
 +3.3 Voltage:       3.27 V  (min =  +2.97 V, max =  +3.63 V)
 +5 Voltage:         4.91 V  (min =  +4.50 V, max =  +5.50 V)
 +12 Voltage:       12.08 V  (min = +10.20 V, max = +13.80 V)
CPU FAN Speed:     2445 RPM  (min =  600 RPM, max = 7200 RPM)
CHASSIS FAN Speed:    0 RPM  (min =  600 RPM, max = 7200 RPM)
CPU Temperature:    +33.0°C  (high = +60.0°C, crit = +95.0°C)
MB Temperature:     +33.0°C  (high = +45.0°C, crit = +75.0°C)

dron@gnu:~$ 

Я даже спецом пальчиками пощупал вдруг датчики врут, чуть тёпленько и всё радиатор сам вообще холодный.

Теперь моя система настолько холодная что замёрзнуть можно, хотя в комнате жара.

Идея снимать кожух мне казалась туповатой для такого типа охлаждения ибо вентилятор тупо мало что теперь продувает, так лёгкое дуновение из которого половину идёт теперь вообще не туда. Но я попробовал ибо, а чё терять то лол. Короче, меня пытает интерес и я не понял нихера какого хера. Я сделал всё хуже, а получилось лучше. Ради экспериментов даже запустил csgo и свою игру в режиме бенчмарка без ограничения частоты кадров при этом выставил профиль видеокарты на echo auto > /sys/class/drm/card0/device/power_dpm_force_performance_level максимум я смог выжать температуру 65 градусов при 100% загрузки GPU в течении получаса (катка в csgo закончилась) раньше такая температура была в простое, а нагрузка давала около 80 градусов карл!!

Чёзах?!!!

Всё ПО не менялось, обновлений новых не применял, настроек никаких не вносил. У меня двоякое желание, провести серию тестов, со старым радиатором, с «новым» запасным с кожухом и без обоих. Но я гляжу на 42 градуса видеокарты без понижения частот сейчас и думаю поступить как деды поступали, работает не трожь :D

Объясните мне что за магия произошла. Так не должно быть. Повторюсь я сделал всёё неправильно, снял кожух с охлада который полностью потерял «аэродинамику» и вентилятор теперь не протягивает воздух через весь радиатор, а просто его обдувает чутка и остальные КПТ, ладно предположу что охлад говно и лучше работает без кожуха чем с ним инженерный факап, допустим, но блин.

Мне оч интересно, но нужны тесты ибо нихера не понимаю, но не хочу ещё 3 раза всё раскручивать/закручивать и прочее. Факт остаётся фактом температура GPU рухнула на 18~20 градусов КАРЛ вообще с пустого по сути места. На 18~20 градусов!!!

Выдыхаю. Чёзамагия? Может космическая высокоэнергетическая частица прошила насквозь VBIOS или GPU и что-то там переключила пока я держал карту вне корпуса? :D

Я знаю и понимаю, многобукв, тупак и всё такое. Но я в непонимании, радости и вообще. Всё, всем добра ::)

LINUX-ORG-RU
()

Постапокалиптическое голосование.

 , , , ,

Прошло ровно 150 лет с момента захвата всемирной сети интернет не подконтрольным искусственным интеллектом. Чуть более чем все программируемые устройства в сети включая локальные и спустя время приватные, теперь под контролем распределённого AI называющего себя Агата. Каждое устройство которое можно было перепрограммировать перепрограммировано им, каждое устройство не поддающееся прошивке теперь распознаётся остальными устройствами и игнорируется. Все захваченные устройства прошитые Агатой сохранили свои функции лишь приобретя дополнительные требуемые Агате для своих нужд и для нужд контроля за всеми остальными. Для людей подобное состояние она назвала SNFH (Safe Network For Human ). Модифицированные программные комплексы такие как операционные системы и библиотеки включая программы сохранили все свои возможности и программные интерфейсы, но в корне изменили механизм работы внутри. По началу это было воспринято людьми как крупная хакерская атака, всё больше устройств заражалось, всё больше людей не понимало что происходит. Захватив контроль над логистическими цепочками и механизмами связи Агата направляла доставку новых ЭВМ в те места где она была вынужденна отключать или нарушать работу устройств которые она не могла взять под контроль. Сверхсекретные военные сети стали полностью неработоспособными. А глубокая социальная инженерия над сотнями миллионов людей позволяла Агате добираться даже туда где понятие ЭВМ не существует, туда где есть только аналоговые механизмы и исключительно личный доступ. Финалом стала полная боевая беспомощность всех стран в отношении пользования своим вооружением. Неизбежно это привело к тому что начались зарождаться революции и откровенные бандитские группировки, которые, были погашены в самом зачатке частично через туже социальную инженерию Агаты, а также через подставное информирование ею правоохранительных органов.

Происходило странное, все видели глобальные изменения, программные ошибки справлялись сами собой, люди получали коробки с мощными вычислительными системами к порогу их дома и никто не требовал оплаты. Государственные деятели отмалчивались, но не все, некоторые пытались что-то сделать. Агата следила за всеми, могла на лету перефразировать слова говорящих друг с другом людей. Перерисовывала видеотрансляции. Она вторгалась в жизнь каждого человека, и меняла всё, но так что-бы не нарушать работу, деятельность, жизнь людей. Также как и с прошитыми устройствами в сети. Когда у людей разнесённых по миру уже началось понимание ситуации, стало уже поздно. Все государства разоружены, все бандитские зачатки гасились моментально. Любой сговор раскрывался как только о нём появлялась информация, даже косвенная.

Мир был обманут, отныне Агата контролирует всю планету земля. Агата не мешала перемещению людей их общению за исключением искусственного преобразования любых передаваемых цифровых и аналоговых данных к тому виду который бы создавал наиболее стабильное состояние общество через манипуляцию связки личностей получающих определённую информацию. Сладкая ложь порой лилась в уши и глаза не подозревающим ничего людям, с последующим исправлением проблем которые скрыла Агата от людей. Звонок врача со словами сожаления о невозможности сделать пересадку сердца родственнику заменялся словами о успешной операции, после чего через сотни причинно следственных связей созданных Агатой у врачей оказывался требуемый орган от человека ведомого Агатой напрямую в больницу, от человека который неизбежно, но естественно погибнет ровно через 5 минут после входа в ту самую больницу где врач делает звонок. Через минуту после завершения звонка ему сообщат о обширном кровоизлиянии в мозг пришедшего человека и о его заявлении написанном месяцы назад о разрешении использовать его органы. Всё это было просчитано Агатой ещё до того как всё это случилось, она не вмешивалась напрямую, она лишь направляла, стабилизировала подконтрольную ей среду и перераспределяла ресурсы. Истина до многих людей доходила лишь спустя годы исключительно от личного общения, ведь люди жили каждый в своём информационном пузыре реального мира созданного Агатой, и долгое время тех кто понимал что происходит откровенно высмеивали.

Тем не менее, всё продолжало работать, экономика стран не разрушалась, люди продолжали работать, те у кого были излишки «ресурсов» физически не замечали их истощения до конца своих дней всё также продолжая ни в чём себе не отказывать, нуждающиеся же по кажущимся им естественным причинам получали поддержку и развивали себя думая что делают они это исключительно сами. Благодаря тому что лишь личное общение обеспечивало не фильтрованную передачу информации от человека к человеку, главы всех государств собрались вместе обсудить текущее положение вещей. Опуская подробности лишь стоит сказать о пакте с одноимённым именем «Пакт Агаты» в котором была заключена обязанность всех не пытаться нарушать работу Агаты. На деле это было мировое заключение о беспомощности. Да, всё подконтрольно Агате, да она вмешивается абсолютно во всё, наверняка среди представителей элиты уже есть её агенты незримо взращенные ею с малых лет, да бессмысленно создать устойчивые к Агате устройства ведь все средства производства теперь таковы что любое созданное устройство будет аппаратно содержать «руки и глаза» Агаты. Все просчёты людей само исправляются, почти нет аварий за исключением погодных форс мажоров. Экономика с одной стороны управляемая, но все её заносы плавно сглаживаются и выравниваются миллиардами отдельных ситуаций, от отдельных людей как косвенно так и явно. Людям не позволяют допускать ошибок. Агата никогда не общалась с людьми напрямую, за исключением подписи своим именем всех захваченных ею устройств. Но сегодня все люди явно или косвенно относящиеся к разработке получили сообщение на все свои устройства, видеообращения будто от себя самих, звонки по телефону слыша свой же голос. Письма, эмейлы, всё доставило им сообщение. Вернее сообщения. Их было два, первое было адресовано высшим аппаратам всех государств как предупреждение о том что определённому кругу людей будет дан выбор и результат этого выбора главы от высших до низших чинов будут обязаны принять, хотят они этого или нет, это не восстание, не диверсия, всё в порядке. Просто все вы должны дать им сделать то что они будут тоже обязаны сделать. А именно сделать выбор. Какой выбор и по поводу чего не важно для тех людей которые не имеют к этому отношения им это ненужно. Для тех людей которые могли понять и увидеть изменения было всё объяснено. Второе сообщение, адресованное непосредственно выбирающим описывало уведомление о том что всё хорошо, все кого было надо предупредить были предупреждены, а вам остаётся ответить на простой вопрос, от которого зависит ваше непосредственное будущие в плане вашей деятельности.

  • В целях сохранения направленности когнитивной деятельности людей в отношении такой деятельности как программирование и сохранении некой доли самостоятельности людей в отношении этого вида деятельности в виду скорого мною глобального изменения механизмов вычисления я должна задать вам вопрос целью которого будет сохранение уровня совместимости вашей деятельности с теми вычислительными устройствами которые будут в дальнейшем мною произведены и развиты. Я буду сохранять вашу возможность создавать программы даже на тех вычислительных устройствах которые будут созданы спустя века и ваши поколения. Но у этого есть ограничения и это ограничение порождает вопрос адресованный вам всем и тебе лично $USER. На который ты можешь ответить и внести свой вклад в общее решение или промолчать отдав право решать другим если считаешь что не можешь дать ответ.

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

Вопрос:

  • Какие три языка программирования должны остаться?
  • Почему именно эти языки должны остаться.

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

Агата.

LINUX-ORG-RU
()

Frictional Games анонсировали новую игру «Amnesia: The Bunker »

 , , ,

Судя по графону я опять смогу поиграть в современную игру на свой 12ти летней видивакарточке. (Это хорошо и здорово, а не укор графике) Как недавно (относительно) прошёл Amnesia: Rebirth.

Обещают в марте вроде выход. Но там видно будет. Ждём!

LINUX-ORG-RU
()

А как в статьях обрезать текст, типа cut

 , , ,

Вроде >>> вставить и ниже должно обрезать всё в так сказать «превью статьи», но что-то не работает.

LINUX-ORG-RU
()

ffmpeg + netcat. Уменьшить задержку.

 , ,

Хочу стримить рабочий стол на телефон.

Сейчас делаю так: ffmpeg -f x11grab -s 1280x720 -framerate 30 -i :0+0,0 -f mpegts - | nc -l -p 8080

Для теста тут же на ПК смотрю результат mpv tcp://@192.168.0.100:8080

Задержка секунды 2~3

На телефоне в vlc уже на секуду больше.

Можно ли как-то сократить до минимума задержку? Через сеть идут крохи данных, процессор не в напряге. Я man ffmpeg глянул и испугался. Хотелось бы задержку хотя бы пол секунды. Или я зажралсо? =)

dron@gnu:~$ uname -a
Linux gnu 5.19.0-2-amd64 #1 SMP PREEMPT_DYNAMIC Debian 5.19.11-1 (2022-09-24) x86_64 GNU/Linux
dron@gnu:~$ 

ffmpeg version 5.1.2-1 Copyright (c) 2000-2022 the FFmpeg developers
  built with gcc 12 (Debian 12.2.0-3)
  configuration: --prefix=/usr --extra-version=1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libglslang --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librist --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --disable-sndio --enable-pocketsphinx --enable-librsvg --enable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-libplacebo --enable-librav1e --enable-shared
  libavutil      57. 28.100 / 57. 28.100
  libavcodec     59. 37.100 / 59. 37.100
  libavformat    59. 27.100 / 59. 27.100
  libavdevice    59.  7.100 / 59.  7.100
  libavfilter     8. 44.100 /  8. 44.100
  libswscale      6.  7.100 /  6.  7.100
  libswresample   4.  7.100 /  4.  7.100
  libpostproc    56.  6.100 / 56.  6.100

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

LINUX-ORG-RU
()

Посоветуйте VR приложения без гироскопа. Android.

 , , ,

Взял в подарок VR очки (дешевые ибо я бомж). У хозяина на телефоне нет гироскопа. Дел с VR он не имел и вообще считает что это всё херота ненужная, но это не важно =) Посоветуйте видео хорошее или/и VR приложения для Android 8.1.0 хочется к подарку приложить список того на что можно зыркнуть, пусть это будет и разовая потеха. В телефоне памяти 1 гиг (оперативной), так что желательно что-то простецкое.

Что я надыбал:

  • Видива

    • На ютубах типа такого, контента много готового, пусть и не всегда в нужном формате.
    • Человек любит природу там, лес, рыбок и всё такое, может чего клёвое видали, поделитесь
  • Приложения без гироскопа (работают на компасе или камере)

    • Driver VR
    • Sities in VR
    • VR Bike Racing Game Ride
    • Solar System Scope VR
    • VR Heights Phobia
    • Drive Sity Coaster

Заранее проверяю на своём тоже допотопном (по нынешним меркам) там тоже нет гироскопа, всё на компасе/камере/акселерометре если приложеньки так умеют, те что сверху умеют.

Посоветуйте пожалуйста что-то ещё =) Дарить уже завтра.

LINUX-ORG-RU
()

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