LINUX.ORG.RU

Избранные сообщения LINUX-ORG-RU

Дёргание SOшки из Love файла - обходной путь.

Форум — Development

Ну… не совсем из love файла, но около того.
В общем так, для начала сразу скажу что делать так не надо.
Но если очень хочется то можно.

В чём суть, вы например написали программу/игру на Love2D и вам вдруг ну очень хочется добавить к ней вашу библиотеку типа libcool.so в которой что-то делается и вы эту библиотеку вызываете из вашего lua кода, только вот беда. Если вы создали love файл mycoolgame.love и положили в него libcool.so ваш код не сможет загрузить библиотеку libcool.so ибо mycoolgame.love это zip архив. Ну, не получится и всё тут. Но если очень хочется то есть черезжопный метод, мы внутри нашего love файла создадим архив с нашей библиотекой и возможно дополнительными файлами, при запуске, мы монтируем этот архив и распаковываем в каталог игры и автоматически добавляем пути до распакованных файлов в cpath и path.

Например вот наша библиотека которую мы хотим распространять вместе с нашей игрой прямо в love файле.

#include <stdio.h>

#ifdef LUAJIT
#include <luajit-2.1/lua.h>
#include <luajit-2.1/lualib.h>
#include <luajit-2.1/lauxlib.h>
#else
#include <lua5.1/lua.h>
#include <lua5.1/lualib.h>
#include <lua5.1/lauxlib.h>
#endif

int example_c_function(lua_State* L)
{
    int a = lua_tointeger(L,1);
    a+=a;
    lua_pushnumber(L,a);
    lua_pushstring(L,"hello from c");
    return 2;
}

int luaopen_lib(lua_State* L)
{
    static const struct luaL_Reg nativeFuncLib [] =
    {
         {"example_c_function", example_c_function},
         {NULL, NULL}
    };
    luaL_register(L, "lib", nativeFuncLib);
    return 1;
}

Соберём её

gcc -DLUAJIT=1 main.c `pkg-config --libs --cflags luajit` --shared -o lib.so

Аахивируем её

mkdir libs
cp lib.so libs/lib.so
zip -r9 libs.zip libs

А вот собственно сама суть и сам механизм распаковки и импорта путей.

function autoreq(zip)
    if not zip then
       print("[autoreq] failed get zip archive for unpack, argument is 'nil'")
       return false;
    end
    local function unpack(dirname,mount_point,base)
        local items = love.filesystem.getDirectoryItems(mount_point)
        if items then
            for _,val in pairs(items) do
                local path = dirname..'/'..val;
                local path_mount = mount_point..'/'..val;
                if love.filesystem.getInfo(path_mount,'directory') then
                   package.path  = package.path  ..';'..base..'/'..path..'/?.lua;';
                   package.cpath = package.cpath ..';'..base..'/'..path..'/?.so;';
                   love.filesystem.createDirectory(path)
                   unpack(path,path_mount,base)
                 elseif love.filesystem.getInfo(path_mount,'file')then
                        print("[autoreq] unpack -> "..val)
                        love.filesystem.write(path,love.filesystem.read(path_mount));
                else
                   print("[autoreq] ok -> "..val)
                end
            end
        end
    end
    local base = love.filesystem.getSaveDirectory();
    print("[autoreq] check depends in '"..base.."'")
    local dirname = "libs"
    local mount_point = "_autoreq_libs_"
    local dir = love.filesystem.createDirectory(dirname)
    local dir = love.filesystem.createDirectory(mount_point)
    data, err = love.filesystem.newFileData(zip)
    if not data then
       print("[autoreq] failed get zip archive for unpack -> '"..zip.."'")
       return false;
    end
    local success,msg = love.filesystem.mount(data,mount_point)
    unpack(dirname,mount_point,base);
    love.filesystem.setRequirePath ( package.path  );
    love.filesystem.setCRequirePath( package.cpath );
    local success,msg = love.filesystem.unmount(data);
    love.filesystem.remove(mount_point);
    print("[autoreq] all done okey")
    return true;
end

autoreq("libs.zip"); -- вызываем распаковку архива с библиотекой и импорта путей
require('lib'); -- вызываем нашу библиотеку

function love.load()
print(lib.example_c_function()) -- вызываем функцию из неё
end

Создаём love файл с нашей программой и её зависимостями

zip -r9 coolgame.love  main.lua libs.zip

Запускаем

love coolgame.love 
[autoreq] check depends in '/home/dron/.local/share/love/coolgame'
[autoreq] unpack -> lib.so
[autoreq] all done okey
0	hello from c

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

dron@gnu:~/.local/share/love$ tree 
.
└── coolgame
    └── libs
        └── libs
            └── lib.so

4 directories, 1 file
dron@gnu:~/.local/share/love$ 

Ну вот собственно и всё. На деле можно в lib.zip насовать произвольные файлы, с произвольными каталогами, например выполнить сборку openssl/luasec/luasocket

luarocks --tree `pwd`/luasec install openssl
luarocks --tree `pwd`/luasec install luasec
zip -9 -r libs.zip luasec -x 'luasec/lib/luarocks*'

И получившийся libs.zip просто добавить в свой love файл тем самым получив всё что нужно для работы с https в вашей программе. Я так и сделал в своей проверялке новостей например. Работать будет всё абсолютно прозрачно, ничего в коде учитывать и менять не надо. В том и прелесть. Ну разве что один раз вызвать autoreq('libs.zip') и всё.

Да, теряется смысл в переносимости love файлов ведь теперь там платформоспецифичные библиотеки таскаются. Но это просто вариант таскания с собой soшки если уж надо, но без всяких appimage упаковок и прочего, по иному дёрнуть внешнюю библиотеку из своей поставки из архива, просто никак нельзя. Но порой вот надо бывает. Я голову ломал довольно долго если честно пока не допёрло. Может кому пригодится.

Вроде всё. Досвиданья.

 , , , ,

LINUX-ORG-RU
()

Воспроизведение ссылок через mpv на вашем ПеКа

Форум — Talks

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

  • фильмом
  • ютубом
  • музыкой
  • картинкой
  • порнух… ой!

Нажать горячую клавишу и всё.

Зависимости: apt install mpv lua xclip

#! /bin/env lua
---------------
local function play_mpv()
    local appclip = nil;
    local youtudl = nil;
    local session = os.getenv('XDG_SESSION_TYPE');
    local have_mpv  = os.execute('mpv --version 2>/dev/null');
    local have_xclip = os.execute('xclip -version 2>/dev/null');
    local have_ytdlp  = os.execute('yt-dlp --version 2>/dev/null');
    local have_wlpaste = os.execute('wl-paste --version 2>/dev/null');
    local have_youbedl  = os.execute('youtube_dl --version 2>/dev/null');
    if(not have_mpv) then
      os.execute('notify-send "Для работы требуется mpv плеер"');
      os.exit(1)
    end
    if(not session) then
      os.execute('notify-send "Неизвестный тип сессии, задайте x11 или wayland"');
      os.exit(2);
    end
    if(have_xclip and session == 'x11') then
       appclip = 'xclip -o';
    end
    if(have_wlpaste and session == 'wayland') then
       appclip = 'wlpaste -p';
    end
    if(not appclip) then
       os.execute('notify-send "Нужно установить xclip для X11 или wl-paste для Wayland"');
       os.exit(3);
    end
    if(io.popen(appclip):read('*l'):sub(1,4)~='http') then
       os.execute('notify-send "Это не ссылка для воспроизведения"');
       os.exit(4);
    end
    youtudl = have_youbedl and 'youtube_dl' or nil;
    youtudl = have_ytdlp   and 'yt-dlp'     or youtudl;
    if(youtudl) then
       os.execute('notify-send Воспроизводится "$('..
       youtudl..' --skip-download --get-title  "$('..appclip..')")\n"$('..appclip..')"" &');
    else
       os.execute('notify-send "Неизвестное название"');
    end
    local success, meta , code = os.execute('mpv --keep-open=yes --loop "$('..appclip..')" > /dev/null 2>&1');
    if tonumber(code) ~= 0 or success == nil then
       os.execute('notify-send -u normal Ошибка-mpv:'..meta..':'..code);
       os.exit(5);
    end
end
-- run run run
-- дрынь на-на
play_mpv();

Ну и предупреждение.

- ИСПОЛЬЗОВАТЬ НА СВОЙ СТРАХ И РИСК, Я НЕ НЕСУ НИКАКОЙ ОТВЕТСТВЕННОСТИ
- ВСЁ ПРЕДОСТАВЛЯЕТСЯ КАК ЕСТЬ, ЛЮБЫЕ СОМНЕНИЯ ДОЛЖНЫ ВЕСТИ
- К ОТКАЗУ ОТ ИСПОЛЬЗОВАНИЯ
- ТЕКСТ ИЗ БУФЕРА ОБМЕНА ПОПАДАЕТ В ИНТЕРПРЕТАТОР !!!!!!!!!
- В ОБОЛОЧКУ BASH КАК СТРОКА И ЕСЛИ ТАМ ЧТО НЕ ТАК ИЛИ ЭДАК
- И ВНЕЗАПНО ИСПОЛНИЛОСЬ ЧТО-ТО НЕ ТО, ТО ЭТО ИСКЛЮЧИТЕЛЬНО ВАША ВИНА И ВАШИ ПРОБЛЕМЫ

Тест: Выделить ссылку и нажать F8 (иксы автоматически копируют выделенное есчё)

Да, примитив. Но зато очень удобно.
Досвиданья :3

 , , , , удобное

LINUX-ORG-RU
()

Эталонные наборы данных для оценки сжатия

Форум — Development

Есть ли такие? Краткий поиск через поиск ничего не показал или я не знаю как искать. Суть проста, очередной дурак (я) играется с очередным своим (а на деле велосипедным наверное) «алгоритмом» сжатия, без цели, а просто за интерес. Ну, понятно что вся суть итоговая с какими данными то или иное работает лучше, универсальных алгоритмов сжатия не существует. Но чисто для своего удобства хотелось бы иметь некий набор, например данные состоящие только из уникальных значений, данные с последовательным повторением, оно же но с разной частотой повторений или размерами этих самых повторений, смешанные данные в разных пропорциях и так далее и так далее, как набор искусственных данных для синтетической оценки коэффициентов сжатия так и реальных наборов и их комбинаций так сказать типичных в повседневной практике.

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

Можно самому напридумывать конечно, но лень и возможно будет некорректно, может есть что? А то просто совать что под руку попадётся в целом прикидывая что внутри такое себе.

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

В целом не критично, но просто если такое есть было бы удобно.
Как-то так. Может кто знает? Где и куда копать.
Если такого не существует, то надо будет заняться.

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

 , , датасет, палата мер и весов, сжатие данных

LINUX-ORG-RU
()

Новая жизнь TheirBirthday

Форум — Desktop

С тех пор я каждый день пользуюсь этим великолепным творением и вспоминаю его замечательных создателей tiinn и hobbit с благодарностью :=)

И все было хорошо до тех пор, пока мне не пришлось перехать с Intel на ARM64, т.е. на aarch64.
И тут начались проблемы, потому что в основных репозитариях Arch и AUR этого напоминателя пока не нашлось.

В этом посте greenman выложил PKBUILD, который, если правильно понимаю, нужен для компиляции TheirBirthday под Arch.
Только я в ней не разбираюсь, и может, кто-то поможет портировать TheirBirthday в новую среду?

 

chukcha
()

Я выиграл!

Форум — Talks

Score: 777

Число попытоккомментариев: 13016

Курс скора по ЦентроЛОРБанку 0,059695759 за сообщение.


13016 - минимум столько же раз вы просрёте все свои деньги в лотереях, казино, одноруких бандитах и прочих ставки на… если будете соваться в это болото.
Поэтому не играйте в азартные игры и пусть всё будет хорошо =)

 

LINUX-ORG-RU
()

Идентификация строк (hash? не hash?). Не хватает матчасти.

Форум — Development

Перенося различную мета-информацию (например информацию о покрытии тестами, или комментарии) между немного разными комплектами исходников возникает желание идентифицировать строки не по номеру, который может легко сползти, а по какому-то идентификатору вычисленному из самой строки…

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

   }

будет встречаться немыслимое количество раз, и ее идентификатор явно должен вычисляться не только из самой строки, но и из ее окружения… Быть каким-то составным, скорее…

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

Нет ли какой-то метрики позволяющий оценить насколько строка «самобытна». Это скобка среди пробелов, или много разных слов. Чтобы можно было

Не решались ли подобные задачи ранее? Вдруг в недрах какого-нибудь git’а все уже придумано?

Где-бы почитать про разные метрики которые можно применить к текстовым объектам, в том числе с целью их идентификации… По каким ключевым словам искать? Мне однозначно не хватает базовой теории, а интернет полон искусственного интеллекта и блокчейна…

 

shaplov
()

Сервисы разовой ойти подработки для жопоруков

Форум — Talks

Я вааааааще не в курсе что сейчас актуально, адекватно, живо и всё такое. Короче кто чем пользуется?

Хочется:

  • Кучки мелких разовых подработок, аля
    • «сбацать скриптик на коленке за пясот рублей» :D
    • «исправить багу»
    • «доработать/переработать/добавить/выкинуть»
    • и прочие такие вот точечные штучки дрючки
  • Нет обязательной оплаты аккаунта к доступу отзываться на подработки, сразу в сраку такое.
  • Нет проблем с оплатой на обычные карточки и железобетонная работа в РФ.
  • Нет запросов аля «подтвердите аккаунт фотой с разворотом паспорта» и прочего дебилизма.

Для общего так сказать интереса и развития, кто чего использует и какие у вашего варианта минусы и плюсы для вас? Я конечно погуглить могу и фейковые отзывы на отзывиках почитать и проплаченые статьи на сайтах аля «10 лучших фриланс бирж!» и даже делаю это, но и тут думаю спросить будет не лишним.

Заранее спасиба 😊

 жопорук, , , ,

LINUX-ORG-RU
()

Идентификация переживающая очистку печенек и истории

Форум — Web-development

Есть такое? Вот зашёл я на rtings, а у них счётчик, капиталюги-жадюги. 3 девайса посмотрел - потом плоти. Очистка данных спасает, пока что. Не хочу дожить до момента когда перестанет спасать, хочу сам такую гадость сделать. Есть идеи?

 , ,

DumLemming
()

Та самая статистика

Форум — Linux-org-ru

Ко дню знаний:

linux=# select users_on.nick, count(*) from (select comments.userid, comments.reactions from comments join topics on comments.topic=topics.id where not comments.deleted and not topics.deleted union all select userid, reactions from topics where not deleted) as messages join users as users_on on (users_on.id=messages.userid), jsonb_each_text(reactions) join users as users_who on (users_who.id=key::int) where value=E'\U0001F921' and not users_on.blocked and not users_who.blocked group by users_on.nick order by count desc limit 20;

     nick     | count 
--------------+-------
 alex1101     |   415
 ox55ff       |   283
 Dimez        |   210
 ips2010      |   202
 xwicked      |   189
 windows10    |   186
 Shushundr    |   185
 LINUX-ORG-RU |   184
 hateyoufeel  |   180
 t184256      |   177
 papin-aziat  |   172
 wandrien     |   167
 serg002      |   163
 firkax       |   158
 sanyo1234    |   148
 Werenter     |   139
 monkdt       |   134
 dataman      |   126
 tempuser003  |   122
 SerW         |   118
(20 строк)


 ,

maxcom
()

TOTP 2FA приложения: для GitHub и не только

Форум — Mobile

В связи с тем, что GitHub ещё раз более настойчиво начал напоминать о необходимости включить 2FA, стало интересно: какими приложениями для этих пользуются пользователи ЛОР?

Какими ещё пользовались и что в них нравилось или не нравилось?

 , , ,

grem
()

Научите готовить бинарник, чтобы addr2line распознавал адреса функций

Форум — Development

Всем привет, хочу найти утечку с помощью функций mtrace/muntrace, но не могу понять, почему утилита addr2line не может перевести адрес в код и строку.

Вот демо-пример:

#include <mcheck.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char** argv) {
    mtrace();

    for (int j = 0; j < 2; j++)
        malloc(100);            /* Never freed--a memory leak */

    calloc(16, 16);             /* Never freed--a memory leak */
    exit(EXIT_SUCCESS);
}

Пробовал собирать с разными уровнями включения отладочных символов:

g++ -g test.cpp -o test
g++ -g3 -ggdb test.cpp -o test
g++ -g3 test.cpp -o test
g++ -O0 -g3 test.cpp -o test
g++ -g -rdynamic test.cpp -o test
g++ -g3 -rdynamic test.cpp -o test

Запускаю приложение: MALLOC_TRACE=/tmp/test.log ./test

Получаю вывод с помощью команды mtrace ./test /tmp/test.log:

Memory not freed:
-----------------
           Address     Size     Caller
0x00005586d69a6690     0x64  at 0x5586d6472190
0x00005586d69a6700     0x64  at 0x5586d6472190
0x00005586d69a6770    0x100  at 0x5586d64721a5

Утилита mtrace пытается конвертировать адреса в читабельные строки в коде с помощью addr2line, но ничего не выходит. Что я делаю не так?

Дополнительная информация:

  1. Когда в malloc включена трассировка, адреса вызывающих функцию malloc/realloc/free функций определяются через встроенную в gcc функцию: __builtin_return_address(0)
  2. Далее этот адрес через функцию dladdr преобразуется в пару <бинарник>[адрес]
  3. утилита mtrace использует далее парсит пару <бинарник>[адрес] и отдает addr2line

 ,

sotlef
()

Но зачем?

Галерея — Рабочие места

Вот так с помощью нехитрых приспособлений буханка черного или белого хлеба превратилась в троллейбус.

Вот еще ракурс. Have a nice day

bl
()

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

Форум — Talks

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

 clown

LINUX-ORG-RU
()

Простите бога ради ``\/^.^\/``

Форум — Development

Но что-то я туплю конкретно.

Есть к примеру такая сетка 8x8

 _0_1_2_3_4_5_6_7                         _0__1__2__3__4__5__6__7
0|0 0 0 0 0 0 0 0                        0|0  1  2  3  4  5  6  7
1|0 0 0 0 0 0 0 0                        1|8  9  10 11 12 13 14 15
2|0 0 0 0 0 0 0 0 (с вот таким порядком) 2|16 17 18 19 20 21 22 23
3|0 0 0 0 0 x 0 0 ---------------------> 3|24 25 26 27 28 x  30 31 
4|0 0 0 0 0 0 0 0                        4|32 33 34 35 36 37 38 39
5|0 0 0 0 0 0 0 0                        5|40 41 42 43 44 45 46 47
6|0 0 0 0 0 0 0 0                        6|48 49 50 51 52 53 54 55
7|0 0 0 0 0 0 0 0                        7|56 57 58 59 60 61 62 63 

Тут позиция по ординатам x = 3x5, номер x = 29

Как быстро преобразовывать позицию x в координату x:y и обратно, без циклов.

Ну например ячейка 43 вычисляем 5x3, есть позиция 5x3 вычисляем 43.

Реальная сетка у меня 255x255 то есть 65536 позиций. Так что switch() не прокатит.

Я вот прям чёт не догоняю и меня переклинило уже, аж прям бесит и ощущение что я придурок =(


UDP: >>>>>> Решено

UDP:2 >>>> Фикс косяка

 , , , ,

LINUX-ORG-RU
()

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

Форум — General

Озвучка для игры 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

Форум — Games

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

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

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

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

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

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

 , , , ,

LINUX-ORG-RU
()

Почтальонов 20 лет по ошибке сажали в тюрьму из-за «кривого» ПО

Форум — Talks

Британская почтовая компания Post Office десятками лет использовала ПО Horizon с ошибкой в коде. Оно применялось для учета всех продаж и вело неверные подсчеты. Программа указывала на недостачу денег, и сотрудники компании, «ответственные» за нее, попадали в тюрьму или лишались личных сбережений, а некоторые даже кончали с собой. Количество пострадавших исчисляется сотнями.

Без вины виноватые

Сотрудники британской почтовой компании Post Office Ltd. на протяжении последних 20 лет рисковали оказаться за решеткой или как минимум без жилья и средств к существованию из-за ошибок в программном обеспечении. Как пишет портал The Verge, компания использовала специализированный софт Horizon, принадлежащий японской Fujitsu. За ее разработкой стоит британская ICL – она создала Horizon в 1995 г. В 1998 г. Fujitsu стала единственным акционером ICL, а в 2002 г. она перестала существовать под своим именем и была переименована в Fujitsu.

В Horizon присутствовала фатальная ошибка, из-за которой ПО вело неправильные подсчеты и раз за разом показывало недостачи денег, которые руководители почтовых отделений Post Office затем приписывали сотрудникам отделений. В компании были уверены в том, что Horizon работает безупречно.

BBC пишет, что случай с Post Office стал крупнейшей судебной ошибкой за всю историю Великобритании, поскольку из-за бага в Horizon пострадали без преувеличения сотни невиновных людей. Сама компания существует с 1986 г., и на начало 2019 г. ее штат насчитывал свыше 5000 сотрудников.

Сломанные судьбы
BBC пишет, что из-за программистов ICL и руководства Post Office жизнь многих сотрудников почтовых отделений была разрушена. От кого-то ушел супруг, а кто-то, как, например, Джанет Скиннер (Janet Skinner), лишился возможности растить своих детей.

Скиннер не просто разлучили с детьми – ее посадили в тюрьму на девять месяцев после того, как злополучное детище Fujitsu выявило в отделении, в котором она работала, недостачу в размере 59 тыс. фунтов стерлингов (6,148 млн руб. по курсу ЦБ на 26 апреля 2021 г.).

Но случай Джанет Скиннер далеко не самый вопиющий. Уверенность британских руководителей в том, что японское ПО безупречно, привело к тому, что свободы лишилась ни в чем не повинная беременная женщина. И даже это, как выяснилось, не предел – в одном из офисов компании Post Office программа Horizon выявила недостачу почти в 100 тыс. фунтов стерлингов (10,42 млн руб.). Ее «повесили» на сотрудника отделения, и тот, узнав об этом, покончил жизнь самоубийством. Это не надоумило руководство Post Office проверить, все ли в порядке с ПО Fujitsu. В итоге всего несколько месяцев спустя новый сотрудник, заменивший покончившего собой, тоже пострадал из-за ошибок в работе Horizon.

Британская судебная система была беспощадная не только к беременным женщинам, но и к пожилым мужчинам. Так, 62-летний Виджай Парех (Vijay Parekh), пишет The Guardian, провел в тюрьме полгода. Его обвинили в краже 72 тыс. фунтов стерлингов (7,5 млн руб.), и адвокат посоветовал ему признать вину.

Тюрьма или потеря жилья
По информации BBC, ошибочные подсчеты, производимые Horizon, привели, в общей сложности, к судебному преследованию почти 740 сотрудников Post Office за период с 2000 по 2014 гг. Число людей, получивших повестки в течение последних семи лет, еще подлежит уточнению.

Вариантов у работников Post Office, оказавшихся «под прицелом» ПО Horizon, было не так уж много. Кто-то отправлялся в тюрьму, а кто-то мог остаться без единого фунта сбережений в попытке покрыть недостачу, которой на самом деле не было, из своего кармана.

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

Horizon все еще работает...
https://www.cnews.ru/news/top/2021-04-26_krivoj_soft_krupnoj_pochtovoj

https://en.wikipedia.org/wiki/Horizon_(IT_system)

 

novus
()

Потестируйте мою игрушку?

Форум — Games

Написал свой карточный сим - игрушку типа Stacklands, картинки по ссылке:
https://imgur.com/a/hoSITMv

Бета-билды есть для Lin/Win/Mac/Android. Пока интерфейс только на английском, переводом на все языки еще не озадачился.

Есть желающие потестить?

Магазин (itch.io):
https://stacksengine.itch.io/stacks-space

 ,

Shadow_Walker
()

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

Форум — Talks

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

Обновлено.

Зависимости 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
()

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

Форум — Talks

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

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

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

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

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

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

Вопрос:

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

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

Агата.

 , , , ,

LINUX-ORG-RU
()