До завтра
У вас осталось меньше 15ти минут. Я бы таймер повесил на главной. Прикольно бы было.
У вас осталось меньше 15ти минут. Я бы таймер повесил на главной. Прикольно бы было.
Сидел свою коллекцию ссылок разбирал, в том числе на видео по разной тематике, оно разбросано по разным плейлистам и хуже того по разным площадкам, вопщем проще было тематические плейлисты из разных мест объединить в один M3U файлик, выкинуть ненужное и смотреть уже на локальном плеере, а не прыгать в браузере туда сюда. Для этой специфической хотелки вот утилитка, может кому надо , это просто обёртка над yt-dlp.
Пример
m3u-tube 'https://youtube.com/playlist?list=PL4FxkpKzI-TpB2seZeP4IZ8_NSad7G9hm&feature=shared'
Вывод
#EXTM3U
#EXTINF:-1,'Bill Gates - Deposition Part 4 of 12:'
https://www.youtube.com/watch?v=HhdDZk45HDI
#EXTINF:-1,'Bill Gates - Deposition Part 5 of 12:'
https://www.youtube.com/watch?v=n_yI27mVHc4
#EXTINF:-1,'Bill Gates - Deposition Part 6 of 12:'
https://www.youtube.com/watch?v=GDjAYvnKL8c
#EXTINF:-1,'Bill Gates - Deposition Part 7 of 12:'
https://www.youtube.com/watch?v=aqNE7qGHiLQ
#EXTINF:-1,'Bill Gates - Deposition Part 8 of 12:'
https://www.youtube.com/watch?v=v8QbaOvFHyk
#EXTINF:-1,'Bill Gates Deposition Part 9 of 12:'
https://www.youtube.com/watch?v=odJNphz9GPg
#EXTINF:-1,'Bill Gates Deposition Part 11 of 12:'
https://www.youtube.com/watch?v=YBPITEcCYb0
#EXTINF:-1,'Bill Gates Deposition Part 12 of 12:'
https://www.youtube.com/watch?v=is0LVBlYPsM
Справка
[Usage: m3u-tube -u [URL] -o [FILENAME]
This simple util generate M3U playlist from
youtube, rutube playlists or maybe other web sites.
Multiple playlists can be combined into one M3U playlist.
yt-dlp does all the work, m3u-tube just generates the output.
Argsuments:
- Read one or more URL from pipe
-h --help This help message
-u --url [URL] One or more playlist URL links
-i --input [FILENAME] Filename for read URL links
-o --output [FILENAME] Falename for save M3U playlist
-v --verbose Show processing log, and enable yt-dlp warnings
[URL] One or more playlist URL links, divide space
If use multiple URL links, they combine in single M3U playlist.
Multiple links are separated by a space or new line. Bad links or
links without playlists ignored with information message.
Examples:
m3u-tube -i urls.txt -o play.m3u # create M3U from file with URL links
m3u-tube 'url' -v > out.m3u # create M3U from link, show processing
m3u-tube 'url1' 'url2' 'url3' # concat three playlists to one M3U
cat urls.txt | m3u-tube - # create M3U from pipe data
cat urls.txt | m3u-tube url1 - url2 # combine pipe and argumens
Notice:
If playlists not collected... Well, sometimes websites broken,
You need update yt-dlp to latest or add changes in yt-dlp for support.
For check what is broken try run it:
yt-dlp --flat-playlist --print url 'your_url_playlist'
See also:
yt-dlp(1)
Исходники
git clone https://gitflic.ru/project/blogdron/m3u-tube.git
Всё я спать. В 5 утра огород копать :(
Досвиданья
Только заметил, прямая трансляция.
Может кому интересно. Сейчас что-то про науку
Наговнокодил вот, может кому пригодится, работает под
LuaJitLua5.1 с дополнительным внешним модулем bit32Lua5.2Lua5.3Lua5.4Пример:
local base64 = require("base64")
local base = base64.encode("Hello World!")
local text = base64.decode("SGVsbG8gV29ybGQh")
print(base,text)
Свой алфавит кодирования
local base64 = require("base64")
local basename = 'mybase64'
local alphabet = 'ABCDEFGcdefghijHIJKLMN0123456789*?abkOPQRSTUVWXYZlmnopqrstuvwxyz'
local endcode = '@'
assert(base64.register(basename,alphabet,endcode))
local base = base64.encode("Hello World!","mybase64")
local text = base64.decode("KGNV5Gw*Nqxm5GI?","mybase64")
print(base,text)
Днищекод:
Вроде правильно работает.
Всякую фигню принимал в base64 из сети, вроде норм.
Досвиданья
Перемещено leave из talks
Ой всё! Устал, надоело пока, ничего не работает! Наверное заброшу но буду пытаться!, поэтому вываливаю как есть.
Работает кое-как только под Cinnamon и конечно X11
Валва она же Wallwa это дура на Lua которая позволяет запускать окошечки в режиме «обоев», это скрипт использующий другие программы для свое работы, может жрать ссылки, видеофайлы, картинки и прочее что умеет жрать mpv и показывать как живые обои, запускать просто программы и программы в прозрачном терминале. После запуска приложения хранит их состояния, можно поставить всё на паузу, закрыть и открыть разом, вернуть в обычный режим для позиционирования, позиционировать выжделением мышкой, прозрачность там, центрирование и прочее. Каждой программе даётся имя начинающиеся с @ а далее либо имя программы, либо ссылка или файл. Для запуска программы в прозрачном терминале нужно написать + передименем программы.
Видео презентация на память
Негодники (+пердолинг со сборкой вспомогательных утилит там ещё)
Расписывать и описывать что да как лень, один фиг это не до конца готовое, поэтому просто скопирую сюда выхлоп --help.
Usage: wallwa [URL|FILE|APPLICATION|+APPLICATION]
This utilite execute GUI application or open mediafile
or execute CLI application in transparent terminal and
move any this variants to desktop background like wallpaper.
Working only under X11 Xorg.
Wallwa command line options give maximum 2 arguments
first afrument is string ID started at '@' symbol it
wallwa item name, after item can be URL,FILE or executable app
wallwa use mpv for play mediacontent every time in fullscreen mode
as wallpaper, wallwa use urxvt terminal in transparent mode for CLI.
If first argument not set, automanicly set and use @default item
Arguments:
-h --help Show this help message
-i --info Show items list
-l --load Load selected item
-la --load-all Load all items
-m --mouse Select item position and size uses mouse
-g --get Get selected item as normal window
-ga --get-all Get all active items as normal window
-s --set Set selected item to background
-s --set-all Set all active items to background
-t --top In background mode move selected item to up
-t --top-all In background mode restack all items in forward range
-b --back In background mode move selected item to down
-b --back-all In background mode restack all items in backward range
-k --kill Kill selected item
-ka --kill-all Kill all active items
-d --del Delete selected item and kill
-da --del-all Delete all items and kill
-p --pause Pause selected item
-pa --pause-all Pause all active items
-r --resume Resume selected item
-ra --resume-all Resume all items from "pause"
-c --center Reposition selected item in screen center
-ca --center-all Rereposition all items in screen center
-f --full Resize selected item to fullscreen
-fa --full-all Resize all items in fullscreen
[FILE] Open mediafile in mpv
[URL] Open mediastream in mpv
application Execute any* GUI applications in background mode
+application Execute any CLI applications in transparent terminal
[NUMBER]% Set opacity for selected item
[NUMBER]%% Set opacity for all items
[NUMBER]x[NUMBER] Set size for selected item
[NUMBER]:[NUMBER] Set pose for selected item
[NUMBER]x[NUMBER]-center Set item size for selected item
and centred item in screen
*[NUMBER]x[NUMBER] Relative change size for selected item
*[NUMBER]:[NUMBER] Relative change pose for selected item
In relative mode +[NUMBER] add value, -[NUMBER] sub value, [0] no change
For example:
@itemname *+50:0 #move window to left on 50px
@itemname *-10x+20 #sub in window width size 10px and add 20px height
More examples:
This example show case when you have live video wallpaper and htop in
background mode, you have 2 items @default and @wallpaper and manipulate
this items resize, move, restack, pause, resume, close and open again, you
can make many @items and manipulate each individually or all of them at once
wallwa +htop #execute htop in transparent terminal as @default item
wallwa -m #resize and repose htop window
wallwa -k #kill @default item
wallwa -l #load again @default item
wallwa @wallpaper w.mp4 #play video wallpaper in fullscreen mode
wallwa @default -t #raise htop above the wallpaper
wallwa @wallpaper 50% #set transparent value for wallpaper
wallwa -pa #pause @default and @wallpaper
wallwa -ra #resume @default and @wallpaper
wallwa -ka #close
wallwa -la #run again
wallwa -da #delete all items and start playing again :D
If you command for wallwa have multiple words use quotes
For example you can run another (not urxvt) terminal
wallwa @myhtop "xterm -fg white -bg black -e htop"
Wallwa save size and cood position for item you can
execute another application in current pose and size item
./wallwa @myhtop "xterm -fg white -bg black -e htop"
./wallwa @myhtop "xterm -fg red -bg blue -e htop"
./wallwa @myhtop +htop
./wallwa @myhtop +btop
./wallwa @myhtop "xterm -e top"
Current wallwa implemented as Lua script and uses
other awesome applications for its work such as
* mpv for playing any media content
* urxvt for transparent terminal for CLI applications
* ps for get PIDs
* slop for use mouse for repose and resize item window
* xprop for set and get window parameters
* wmctrl for get WID from PID (no used now)
* xwidpid for get WID from PID (used now)
* xlower for move window to low stack
* xdotool for relative change size and pose
* xwininfo for information about window visible
* realpath for give absolute path for files and applications
Notice:
WALLWA EXECUTE PROGRAMS FROM COMMAND LINE, NO RUN DANGER
COMMANDS, YOU SELF CHECK VALID URL, PLEASE BE CAREFUL WHAT
COMMANDS YOU PASS TO RUN. This doesn't just apply to any terminal input.
wallwa can make "Bad Window" erros, becouse Xorg async.
If you see "Bad Window" error try
#reload all items
wallwa -ka ; #kill all
wallwa -la ; #load all
#or delete all items
wallwa -da
*Some GUI applications work uncorrect in background mode, for example
chromium,firefox,tilix,gnome-terminal and maybe other applications
not work correctly in background mode or no change state to background
This windows have multiple WID`s and now correctly spawn in background
but uncorrect behavior with options -g, -s, -b, -t manipulations.
If window have single WID all works fine
wallwa is prototype util, maybe reimplemented in future.
Под Cinnamon тоже есть косяки, иногда окно продолжает держать фокус
и нужно кликнуть по рабочему столу куда-то. С другими WM/DE бедные беды
на большиснтве идёт перекрытие рабочего стола, в xfce4 всё проваливается под него.
Там делает кто как у некоторых рабочие столы без _NET_WM_WINDOW_TYPE_DESKTOP пашут.
Не всё так красиво под иксами тоже. Пока думаю, может чего и придумаю. Идеи есть, но…
А иногда всё нормально, может генерировать Bad Window
Может быть кому-то пригодится
Досвиданья :(
Запускаю через скрипт приложение
(appname 2>&1 > /dev/null) & echo $!$! получив PID отпочковавшейся дочкиwmctrl -lp ищу в строке PID и забираю соответствующий WIDWID манипулировать окном и пришибать процесс через PID точно зная что есть активная пара PID/WID и я не пришибу случайно что-то иное.Всё работает. Но с некоторыми приложениями например glxgears беда. PID я его получаю, а вот WID найти не могу, да я могу wmctrl без параметров запустить, мышкой кликнуть на окошечко и получить WID, но это не то, не получается зная лишь PID получить WID. С большинством приложений проблем нет, а тут уже не знаю где искать. Сейчас ситуация такая что я запускаю приложеньку, жду несколько секунд пытаясь получить WID окна, если не получилось, грохаю процесс, ну и типа фиг с ним, не судьба :(
Не сообщает _NET_WM_PID оно, жопка такая. Выхода нет? Ключ поверни и по-ле-те-ли И однозначно не определить?
Варианты поиска по заголовкам окон и по содержанию командной строки не прокатят, заголовка может не быть вовсе и могут быть много окон с пустыми заголовками. Блин :(
Решение:
В прошлый раз данные на домашних ПеКа захренакались, настало время их расхренакать обратно с помощью квинтэссенции говнокода, обычно все хвалятся что пишут brainfuck интерпретатор там в 200 байт, а то и меньше, но у инвалидов мозга типа меня своя олимпиада, поэтому размер интерпретатора 1200+ строк и 45+ килобайт весом. И это я ещё сократил, оставив попытки раскручивать циклы поняв что это глупая затея лишь тогда когда сделал действительно корректную раскрутку циклов во время исполнения через собственно генерацию раскрученных трасс циклов. Ну и ладно.
Собственно вот зачем интерпретатор
Для возможности непрерывно исполнять код который генерируется через Браинфакалка данных вашего ПеКа по мере его генерации , а не просто загрузить всё и потом выполнять.
Конечно Lua не для этого и тормоза, но в режиме исполнения под Luajit вполне себе терпимо
mandelbrot.b - 10.9s код (github.com)golden.b - 0.25s код (github.com)nahoi.b - 1.6s код (gist.githubusercontent.com)Да, это в режиме тупой транcляции в Lua код и его исполнения.
Всё вроде бы я наигрался, эксперимент закончен. Может кому надо, есть утилита и модуль который можно использовать самостоятельно, дебаг, трассировка исполнения, возможность отключать часть или все оптимизации, и запускать из под разных реализаций Lua не через правку исходника, а через ключик. Всякая хрень с учётом типа конца строк EOL ,\r,\r\n,\n и поведения окончания данных EOF ибо некоторые браинфук программы хотят специфичных вещей.
Описание параметров
Usage: braintractor -i [FILE] -o [FILE]
braintractor -e ',+.+.+.+.+.+.+'
cat mandelbrot.bf | braintractor
Execute input brainfuck code with or without
different optimisations like transplitter to
lua code and execute him, repeated operations
optimisation and cycles jump optimisation.
Cheking brainfuck syntax is correct.
Handle debug symbol `#` and allow trace all code
in execution time with trace lua function.
This brainfuck language interpretor not very faster but flexibly.
Arguments:
-h --help This help information
- Execute brainfuck source code from stdin
-i [FILE] Execute filename with brainfuck source code
-e [TEXT] Execute brainfuck source code from string
-o [FILE] Output filename for write execution output
if output not set out writed to stdout
-fi [FILE] Send data to brainfuck programm from file
-si [TEXT] Send data to brainfuck programm from string
-dj Disable cycles jump optimisation
-dr Disable repeated operations optimisation
-dt Disable transplitter to lua optimisation
-dz Disable zero cell [+] [-] [<] [>] optimisations
-da Disable all optimisations
-ds Disable stream execution
-dl Disable set newline after terminal ouput
-dd Disable '#' symbol in brainfuck source code
-do Disable (force) any output (tracer worked)
-sb [NUMBER] Source buffer size for stream execution
minimum=1, maximum=2^31. (Default:100)
If posible braintractor execute this
chunks size or load more source code
-tr [TEXT] Lua function for trace brainfuck execution
-dn Disable check newline in input reader.
By default enabled checking '\n' if
input data ended but no have '\n' force
add this EOL LF symbol as last input symbol
this useful for varian set input as string
like -s 'someinput' -> 'someinput\n' you
can set other variant for EOL not '\n'
-l [TEXT] Select lua implementation for execute
lua5.1, lua5.2, lua5.3, lua5.4, luajit
By default used system '#!/usr/bin/env lua'
Some brainfuck programs expect different behavior for
end of line. Setting bottom transparent fix input for
different behavior end of line. LF , CR, CRLF. You can
enable only one variant. If set more last disable other
By default enabled -eof_lf if input no have '\n' in line end
force added '\n' in last input data. Use -dn for disable it
-eol_lf Enable check end of line and force set LF == '\n'
if input have '\r' or '\r\n' this option
change it to single '\n'. (nix way)
-eol_cr Enable check end of line and force set CR == '\r'
if input have '\n' or '\r\n' this option
change it to single '\r'. (old osx way)
-eol_crlf Enable check end of line and force set CRLF == '\r\n'
if input have '\n' or '\r' this option change
it to two end of line symbols '\r\n'. (windows way)
Some brainfuck programs expect different behavior for end of file
some expect write '0' in memory cell, some need save cell value
and skip write other value in cell and some needed write -1 in cell
Options bottom can enable one of varians. By default enabled -eol_zero
You can enable only one varian. If set more last disable other.
-eof_zero If no have data to read, write 0 in memory cell m[i]=0
-eof_eof If no have data to read, write -1 in memory cell m[i]=-1
-eof_skip if no have data save cell value m[i]=m[i] (it like clamp)
-eof_same same as -eof_skip, just alias, it's easier to remember :)
Notice about default execution mode and configuration:
By default execute source maked in strem mode, brainfuck
source load in small chunck, chunck optimised and executed
this makes it possible to execute code as it is received,
without waiting for it to be fully loaded. Also, this is
only possible if it is possible to isolate independent parts
from the flow that are not included in the body of any loop
You can set minimal buffer for load or disable stream mode
By default debug symbol '#' executed, you can disable it
No cell memory limit, you can use over 30000 cells
No memory position limit, brainfuck code can use
negative cell indexes. If you need check memory limit
or check index allowed ranges you can use tracer -tr
Notice about optimisations:
By default all optimisations is enabled.
You can disable some one or all. The more
you disable, the slower the code will run
Notice about input data variants:
If input data taked from PIPE and brainfuck
have read ',' command need use -fi or -si options
for send data in brainfuck reader ',' command.
If input data from file -i or string -e
brainfuck read from stdin. Imposible
use PIPE for load source code and for
take input for brainfuck code. Or or.
braintractor -e ',..' # ok - you take interactive input
braintractor -i code.b # ok - you take interactive input
echo ',..' | braintractor -fi /dev/tty # ok - you take interactive input
echo ',..' | braintractor -fi input.txt # ok - input from file
echo ',..' | braintractor -si 'a' # ok - input from string
echo ',..' | braintractor # error, stdin empty after PIPE
# need direct send input data
# need directly use -f or -s
About trace function:
If you set trace function, this function be executed
in brainfuck execution loop for any operations. But
if you no disable repeater optimisation -dr, tracer miss
some repeated operations, for example this code
'+++.+++' in tracer show 3 trace becouse +++ combine
to single '+' next one '.' and again single '+'
if you set -dr tracer show full 7 operations per symbol.
Example tracer:
c - brainfuck code symbol
i - brainfuck cell memory index
v - brainfuck cell memory value
r - repeated counter after operations or 1
p - source code position, depend of optimisations, set -da -ds for correct
-tr 'function(c,i,v,r,p) print(c,i,v,r,p) end'
For example you can disable output -do and all optimisations
and just use custom tracer debugger for you brainfuck code
For example check memory usage no more 10 cells, and check negative index
-tr 'function(_,i) if i > 10 then error('MEM OVERFLOW!') end end'
-tr 'function(_,i) if i < 0 then error('NEGATIVE INDEX!') end end'
Warning: tracer execute any lua code, ANY LUA CODE! This mean
you need set correct code, no use copypaste code from internet.
If tracer function incorrect this application crashed.
Код и документация тут:
Запускать можно прям из каталога, модуль подхватится который рядом лежит.
Локальные установка и удаление в $HOME/.local/
#Установка
make PREFIX=$HOME/.local install install-cli
#Удаление
make PREFIX=$HOME/.local uninstall uninstall-cli
Баги и чиcтка кода, оооой всё потом. Потому что нет времени очередная поделочка в процессе. Так и живём, тяп ляп и готово :)
Досвиданья.
Было бы неплохо, если возможно. Нужно редко, зато
Чисто для справки ссылки:
Test
>+++++[<++++>-]<--[>++++++++++++<-]>--------.>+++++++[<------->-]<+++.>+++++++[<
+++++++>-]<---.>++++++[<----->-]<+++.>++++++[<+++++>-]<--.>++++++++++++[>+++++++
++++<-]>---.>>+++++[<++++>-]<--[>++++++++++++<-]>-------.>++++++++++++[>++++++++
+++<-]>--.>+++++++[>+++++<-]>---.>>+++++[<++++>-]<--[>++++++++++++<-]>--------.>
+++++[<---->-]<+++.>+++++[<++++>-]<---.>+++++[<---->-]<++.>+++++[<++++>-]<--.>++
++++[<----->-]<++.>+++++[<++++++>-]<-.>++++++++++++[>+++++++++++<-]>---.>>+++++[
<++++>-]<--[>++++++++++++<-]>--------.>+++++[<------>-]<.>+++++[<++++++>-]<.>+++
+++[<----->-]<+++.>++++++[<+++++>-]<--.>++++++++++++[>+++++++++++<-]>--.>>+++++[
<++++>-]<--[>++++++++++++<-]>--------.>+++++[<----->-]<+++.>+++++[<+++++>-]<---.
>+++++[<----->-]<+.
Сокращение для указания подсветки ```bf норм было бы.
Отмена:
Геморная реализация и некому будет поддерживать. Ну и ладна
Договнокодил очередное ненужно. А именно транслятор произвольных данных в код на brainfuck который будучи исполненным выводит закодированные в нём данные. Текст, картинка, чво угодно.
Типа cat /dev/random | brainfucktor -o bigbrainfuck.b
Или устроить «матрицу» brainfucktor -i /dev/random
Так то это просто ради экспериментов, но может кому надо я фиг знаю, кодировщик в виде модуля Lua конечно же и утилита командной строки покрывающая все его возможности, из возможностей просто игра генерирования разного brainfuck кода из одних и тех же данных. Работает на любой версии Lua от 5.1 до 5.4+
Код тормоз, такой же как и я. Для оптимизации его надо целиком переписывать и на Сях, но в этом нет смысла, это забава для небольших данных, хотя жрать может любые размеры, перегнать 10 мегабайт уже вечность, так что это просто для мелочи, если вдруг надо :D
Описание параметров
Usage: brainfucktor -i [FILE] -o [FILE]
brainfucktor -e 'encode this text to brainfuck'
cat file | brainfucktor - #read from pipe
brainfuck photo.png -o photo.bf
Encode input data to code in brainfuck language
Arguments:
-h --help This help information
- Input read from stdin
-i [FILE] Input filename for read
-o [FILE] Output filename for write
-e [TEXT] Input from command line argument
-cb [NUMBER] Cycle body size factor (>=1 default=2 )
-cs [NUMBER] Cycle split factor (>=1 default=16)
-cd [NUMBER] Cycle distance factor (>=1 default=64)
-vd [NUMBER] Value distance factor (>=1 default=8 )
-ch [NUMBER] Separate input by chunks size (>=1 default=1024 bytes)
-ml [NUMBER] Set max line size for split output ( >=1 default 80 bytes)
-sl Create single line output (this disabled -ml option)
-pc Print currect configuration for code generation
You can skip -i option and just set filename, but filename expect first
Пример вывода Hello World! с немного разными настройками генерации
brainfucktor -e 'Hello World!'
+++++++++++[>+++++++<-]>-----.>+++++[<++++++>-]<-.+++++++..+++.>+++++++[>+++++<
-]>---.>++++++++++[<++++++>-]<-----.>+++++[<+++++>-]<-.+++.------.--------.>+++
+++[>++++++<-]>---.
brainfucktor -e 'Hello World!' -vd 50
+++++++++++[>+++++++<-]>-----.+++++++++++++++++++++++++++++.+++++++..+++.>+++++
++[>+++++<-]>---.>++++++++++[<++++++>-]<-----.++++++++++++++++++++++++.+++.----
--.--------.>++++++[>++++++<-]>---.
brainfucktor -e 'Hello World!' -cd 4
+++++++++++[>+++++++<-]>-----.>++++++++++++[>+++++++++<-]>-------.+++++++..+++.
>+++++++[>+++++<-]>---.>++++++++++[>+++++++++<-]>---.>+++++++++++++[>+++++++++<
-]>------.+++.------.--------.>++++++[>++++++<-]>---.
brainfucktor -e "Hello World!" -vd 128
+++++++++++[>+++++++<-]>-----.+++++++++++++++++++++++++++++.+++++++..+++.-------
------------------------------------------------------------------------.+++++++
++++++++++++++++++++++++++++++++++++++++++++++++.++++++++++++++++++++++++.+++.--
----.--------.------------------------------------------------------------------
-.
brainfucktor -e "Hello World!" -vd 1 -cs 8
>+++[<++++>-]<-[>+++++++<-]>-----.>+++++[<++++++>-]<-.>+++[<+++>-]<--..>+[<+++>-
]<.>+++++++[>+++++<-]>---.>++++++++++[<++++++>-]<-----.>+++++[<+++++>-]<-.>+[<++
+>-]<.>++[<--->-]<.>+++[<--->-]<+.>++++++[>++++++<-]>---.
Если использовать модуль напрямую, то он гибкий, может жрать таблицу, файл, строку
и выплёвывать возвратом строки от функции или писать в таблицу, файл, функцию.
Ввод обрабатывается поблочно, чанками его размер регулируется от 1 до 2^31.
Сгенерированный код при исполнении жрёт ячеек памяти в максимуме N*2 где N количество
закодированных байт, в минимуме жрёт всего 2 ячейки памяти, а дальше их переиспользует.
Для исполнения больших 50+ мегебайт блоков кода с циклами нужен интерпретатор brainfuck
без ограничений на память в 30000 ячеек. :D
Код жирный, прям как я, поэтому сюда не влезет несмотря на то что я влез.
Как мы недавно узнали нейроидиоты не могут в браинфук,
а это значит у нас есть средство борьбы со скайнетом, когда терминаторы придут и роботы заполонят эту плонету, мы будем общаться на этом простом и красивом языке :)
- использовать на свой страх и риск
Код и документация тут
Запускать можно прям из каталога, модуль подхватится который рядом лежит.
Локальные установка и удаление в $HOME/.local/
#Установка
make PREFIX=$HOME/.local install install-cli
#Удаление
make PREFIX=$HOME/.local uninstall uninstall-cli
Хоп и твой дистрибутив стал почти как Slackware :D
Изначально было всего 15 строчек. Но я нахлобучил дублирующегося кода и лапши на ifах до ~500 строк :D
Двойные комментарии ваще шедевр, надо было ещё и на китайском написать лол. Вроде всё.
Досвиданья.
Блин, Vim а точнее GVim большой я в нём запутался. Короче использую встроенный в вим терминал :term всё хорошо, но захотелось вывод скролить мышкой, а он не скролится. Полез узнать почему вобщем надо перейти в обычный режим, но по Esc он не переходит туда ибо у терминала отдельное пространство чего-то там, ладно есть комбинации мышки ctrl+w N я не псих чтобы это каждый раз прожимать надо повесить на Esc, ладно повесил tnoremap <ESC> <C-W>N, теперь всё почти хорошо, а именно ввёл что надо в терминале нажал Esc вим захватил буфер терминала и перешёл в режим Normal теперь это просто буфер который я могу что хочу делать и мышкой скролить, но вот беда если теперь нажать i или a для ввода то эта дура при нажатии и одновременном входе в режим ввода в этом терминале выполняет последнее что было введено в шелл оболочке и надо после выхода из терминала по Esc входить в него через заглавную I тогда этой фигни нету. Блин, чё этот терминал так черезжопно там встроен. Не мне нравится, прям няяяяяяя, оч удобно, но ну вот захотел я мышкой в нём скролить и выходит в нём в обычный режим по Esc, но случается то что выше описал. Как нормально сделать и без побочных эффектов?
:term открыть терминалEsc выйти в терминале из режима ввода в режим NormalNormal режиме терминалаi войти в терминале в режим ввода и писать туда командыtnoremap <ESC> <C-W>N [ОК]set mouse=a полная поддержка мышки [ОК]i исполняется команда в терминале последняя, надо жать I [НЕЕЕЕ ОК]
I, я хочу жать i так же как для всего остального
i на I из за этого для всегоСейчас либо жать I для нормального перехода в режим ввода в терминале, или жать i и получать внезапно исполнение комманды в нём которая в башхистори последняя.
100 лет уже в конфиг вима не залезал, всё устраивало, но вот полез хотелки делать и застрял :( Я что-то, где-то не вижу или недопонимаю, хотелка с виду простая, но то что у терминала там свой скоуп, свои назначения клавиш только геморой дают. Блин. Как быть то.
dron@gnu:~$ vim --version
VIM - Vi IMproved 9.1 (2024 Jan 02, сборка от Apr 27 2024 15:01:43)
Исправления: 1-377
dron@gnu:~$ uname -a
Linux gnu 6.7.12-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.7.12-1 (2024-04-24) x86_64 GNU/Linux
Язык Lua – это мощный, переносимый, легковесный, встраиваемый и простой язык
программирования, разработанный и развиваемый Роберту Иерузалимски в PUC-Rio вот уже более 30 лет.
Это минорный релиз посвящённый исправлению ошибок и улучшению документации. К использованию приглашаются все, кого затронули ошибки прошлой версии и все, кто имеет желание протестировать текущую. Если вы заметили ошибку или желаете связаться с авторами языка, это возможно исключительно через список рассылки. Любые патчи и рекомендации приветствуются, но важно помнить что они с вашей стороны будут всегда нести рекомендательный характер и будут так восприняты.
( читать дальше... )
>>> Подробности (google.com)
Я внезапно открыл для себя утилиту slop, очень удобная и полезная в домашних делах. Ага я слоупок.
Надо было записать кусочек экрана несколько раз и удобно выделять мышкой область на экране для записи видео.
Наваял вот, может кому пригодится.
use_recorder задаёт то чем вы ходите записывать
ffmpegrecordmydesktoprecord --no-sound если используется recordmydesktop
Ключи под себя
ffmpeg быстро пишет и сразу кодирует без звука.recordmydesktop со звуком и отложенным долгим кодированиемСам использую нубский recordmydesktop так как вокруг него не надо с бубном бегать по поводу звука (он меня сломан на ПК и чисто программный идёт по сети)
touch $HOME/.local/bin/record
#copy-paste code
chmod +x $HOME/.local/bin/record
ctrl+CЕсли кажется многословным перепишете на bash, всё можно переписать на bash :)
#!/usr/bin/env lua
-----------------------------------------
-- Depends for recordmydesktop: ogv out
-- apt install lua slop recordmydesktop
-----------------------------------------
-- Depends for ffmpeg: mp4 out
-- apt install lua slop ffmpeg
-----------------------------------------
-- Use ffmpeg or recordmydesktop recorder
--local use_recorder = 'ffmpeg'
local use_recorder = 'recordmydesktop'
-------------------------------------------------------------------------------
local separator = ' '
local arguments = table.concat({...},separator)
local visualfmt = '-b 5 -c 0.5,1.0,0.5,0.8 -o'
local slop_pipe = io.popen('slop -f "%x %y %w %h" '..visualfmt)
local x,y , w,h = slop_pipe:read('*l'):match('(%d+) (%d+) (%d+) (%d+)')
-------------------------------------------------------------------------------
local out_filename = os.date('%Y-%m-%H-%M-%S');
-------------------------------------------------------------------------------
local command = {};
-------------------------------------------------------------------------------
if use_recorder == 'ffmpeg' then
command = table.concat(
{
'ffmpeg ','-f x11grab';
'-video_size',w..'x'..h;
'-grab_x',x;
'-grab_y',y;
'-i :0.0';
'-framerate 60';
'-vcodec libx264';
arguments;
out_filename..'.mp4';
},separator)
print('Run command:\n'..command)
os.execute(command)
return 0
end
-------------------------------------------------------------------------------
if use_recorder == 'recordmydesktop' then
command = table.concat(
{
'recordmydesktop','-x='..x;
'-y='..y;
'--width='..w;
'--height='..h;
'--fps=60';
arguments;
'-o',out_filename..'.ogv';
},separator)
print('Run command:\n'..command)
os.execute(command)
return 0
end
-------------------------------------------------------------------------------
print("[ERROR]: Bad 'use_recorder' value.")
return 1
Вроде мелочёвка, а очень и очень удобно.
Всё. Досвиданья.
Очень просто! Нужно встретить задачу которая понятна буквально на интуитивном уровне. Открыть редактор и не суметь её решить сходу.
В голове переклинивает, ты точно знаешь что тебе надо делать и ступоришься на том как делать. Замираешь и смотришь на экран как додик последний. Кабзда, если извилины шевелятся то у моих кататония. Это фиаско братан :D Я не знаю с чем это сравнить, это как налить чаю, взять ложку и думать, тебе туда соль сыпать или сахар и офигевать от того что ыт об этом вообще задумываешься. Это просто пример, такой шизы у меня нету. Но хотелось яркого сравнения.
Короче сижу я такой и думаю дай полистаю PIL четвёртое издание для Lua, а то память у меня как решето постоянно всё забываю и надо по кругу гонять одно и тоже, ну типа листаю и листаю, типа ну ага, ну эге и тут задачка банальная как банан.
Exercise 6.5: Write a function that takes an array and prints all combinations of the elements in the array.
(Hint: you can use the recursive formula for combination: C(n,m) = C(n -1, m -1) + C(n - 1, m). To generate
all C(n,m) combinations of n elements in groups of size m, you first add the first element to the result and
then generate all C(n - 1, m - 1) combinations of the remaining elements in the remaining slots; then you
remove the first element from the result and then generate all C(n - 1, m) combinations of the remaining
elements in the free slots. When n is smaller than m, there are no combinations. When m is zero, there is
only one combination, which uses no elements.)
Упражнение 6.5: Напишите функцию, которая принимает массив и выводит все комбинации элементов в массиве.
(Подсказка: вы можете использовать рекурсивную формулу для комбинации: C (n,m) = C(n -1, m -1) + C(n - 1, m). Чтобы сгенерировать
все C(n, m) комбинаций из n элементов в группах размером m, вы сначала добавляете первый элемент к результату и
затем генерируете все C(n - 1, m - 1) комбинации оставшихся элементов в оставшихся ячейках; затем вы
удаляете первый элемент из результата и затем генерируете все C(n - 1, m) комбинации оставшихся
элементов в свободных ячейках. Когда n меньше, чем m, комбинаций не существует. Когда m равно нулю, существует
только одна комбинация, в которой не используются элементы.)
Для таких же тупых как я, нужно вывести все комбинации из элементов массива, комбинации должны быть заданного размера, а не просто длинны массива, исходный массив не должен быть модифицирован, реализация должна быть на основе хвостовой рекурсии, которую Lua автоматически устраняет.
И йя не смог. Вот прям сразу взять и написать. Истории успеха это конечно здорово, когда всё получается, когда всё складно и ладно, выезжаешь во всё лишь получив вводные. Вот про это все пишут все это смакуют. А вот провалы, спотыкания на ровном месте, затупы вселенских масштабов. Они у вас бывают? А как часто? Есть тру стори, похожего характера, когда вас прям переклинивало/ет? В расчёт не берутся случаи когда вы я фиг знаю дебажите неизвестный вам протокол или делаете что-то для области знаний где для вас вся терминология в новинку, там то понятно сходу по определению невозможно ничего сделать. Но вот в обыденных ситуациях, ну или не совсем оных. Признавайтесь! Чё я один такой глупый? :D
А линукс тут при том что линукс для умных.
Ну не сугробы, но пару сантиметров уже навалило. Метель стоит как в феврале.
Беседа с физиком теоретиком: Анатолием Григорьевичем Шкловским и его теоретические выкладки по поводу отрицательной массы и как она проявляется. Влияя и объясняя как фундаментальные так и макроскопические процессы и явления.
Кратко – Допущение существования элементарных частиц с отрицательной массой. И объяснение через них таких вещей к примеру как наличие воды на земле как косвенное следствие вытеснения протонов из земного ядра и регистрируемые сверх энергетические космические лучи с энергиями в терраэлектронвольт и многое многое другое включая прямое объяснение огромного количества других уже существующих физических эффектов, явлений, наблюдений. То есть при должной теоретической части уже подтверждается текущими экспериментами (вернее теория объясняет то что в них происходит)
Исходя из описания имеет базу достаточную для экспериментальной проверки, а так же имеет теоретический фундамент вписывающийся в текущую фундаментальную модель мира, дополняя её, но явно заявленная как альтернативная теория в качестве основы которой стоит принцип наименьшего действия по модулю из которого следует лавина эффектов проявляющаяся в виде того что мы называем вселенная и тех явлений что мы пытаемся объяснить через науку называемую физикой. Принцип наименьшего действия по модулю это ключевая особенность теории (по мнению меня) позволяющая не нарушая законов и не создавая парадоксов дать новый взгляд (или проявить истинный) на фундаментальные механизмы образования и строения материи как таковой.
Ты физик? Жопа горит? :) Опровергни или бабабол :D
Дискас.
Не ставится gnumeric полез поискать пакет
Service Unavailable
The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.
Apache Server at packages.debian.org Port 443
А до этого микродрама
И там сообщения ниже по ходу драмы.
Раньше такой фигни не было. Есть новости? Мол «Мы там что-то обновляем блабла»? Не могу найти.
Полез уточнять
Да удалили из testing. Но без причины (вернее она есть, но не повод для удаления)
Чёблин опять на stable отказываться или на до unstable обновляться? :)
Смысла в этом посте нет, я просто побубнить. И apt новый == дура!
Я всё понимаю это testing специально на нём и сижу, но чёт со всех сторон по мелочи, то это то сё. Для меня всё это дикость, *ть лет всё как часы, и на тебе кучка мелких пакостей разом. Gnumeric через пару дней (или прямо сейчас) вернут, не страшно. Эт я так к слову что поисковик падать стал.
Сама новость и описание на gamedev.ru
DOOM2.WADMEGAWAD по ссылке из новостиGZDOOM https://zdoom.org/downloads
AppImage https://zdoom.org/files/gzdoom/bin/Закидываете в один каталог
30years.wadDOOM2.WADGZDoom-g4.11.1-x86_64.AppImageИ запускаете
./GZDoom-g4.11.1-x86_64.AppImage -file 30years.wad
DOOM2.WAD подхватится сам
UDP: Тут ниже чёт панику наводят про звонки от киркоровых и шифровальщики. Помнитя, бинарники левые эта всегда апасна. А то мало ли… Ну и есть firejail (не советую с appimage люто тормозит, обычные архивы брать) или вируталки если что, а то мало ли чё! Воть
КС2 вышла, но непоиграть вулкана нету да и эмуляцию опкодов я ещё не допилил в форке op_emu. Но захотелось хоть в паблике побегать полчасика, качнул CSGO Legacy сменив параметрах бета версии в настройках запуска, а оно мне Ошибка сегментирования :( Смысла писать куда то им нет, поддержки игры больше нет.
Запустил под strace у меня валится после vfork
Пока не особо разбирался, но пока разбираюсь может у кого вдруг работает и это чисто у меня проблемы.
Решение
cp "/home/$USER/.steam/steam/ubuntu12_32/steam-runtime/amd64/lib/x86_64-linux-gnu/libpng12.so.0.46.0" \
"/home/$USER/.steam/debian-installation/steamapps/common/Counter-Strike Global Offensive/bin/linux64/libpng12.so.0"
Путь до ubuntu12_32/... и steamapps/... может быть чуть разный
Игру запускать через терминал из каталога игры
./csgo.sh Игра только с ботамиили
./csgo.sh -steam Игра на паблик серверахВ ServerBrowser поломаны шрифты, оно прогружает список серверов но показывает пустоту, если кликнуть туда где должны быть названия сереров происходит подключение и можно гамать онлайн с людьми. Пока не знаю как шрифты пофиксить.
Через кнопку в стиме не запускается и через стимовое подключение к серверам не работает пишет что неправильный номер приложения, а через саму игру подключается, но не показывает, надо в пустоту просто кликнуть… Во казлы специально всё поломали :(
Зашёл я значит сюда
Взял скрипт, перевёл его в Makefile.
#----------------------------------------#
THIS_DIR=$(shell pwd)
ANDROID_API=31
ANDROID_ARCH=x86_64
ANDROID_HOME=$(THIS_DIR)/emulator
PHONE_MODEL=Nexus_5
#----------------------------------------#
mkdir:
mkdir -p $(ANDROID_HOME);
#----------------------------------------#
tools:
export ANDROID_HOME=$(ANDROID_HOME); \
sdkmanager "emulator" \
"cmdline-tools;latest" \
"platforms;android-31" \
"platform-tools"
#----------------------------------------#
imgdep:
export ANDROID_HOME=$(ANDROID_HOME); \
$(ANDROID_HOME)/cmdline-tools/latest/bin/sdkmanager \
"system-images;android-$(ANDROID_API);default;$(ANDROID_ARCH)"
#----------------------------------------#
create:
export ANDROID_HOME=$(ANDROID_HOME); \
$(ANDROID_HOME)/cmdline-tools/latest/bin/avdmanager create avd \
--tag default --package "system-images;android-$(ANDROID_API);default;$(ANDROID_ARCH)" --sdcard 64M \
--device "$(PHONE_MODEL)" --name $(PHONE_MODEL)_API_$(ANDROID_API)
#----------------------------------------#
start_emulator:
export ANDROID_HOME=$(ANDROID_HOME); \
$(ANDROID_HOME)/emulator/emulator @Nexus_5_API_$(ANDROID_API)
#----------------------------------------#
create_emulator: mkdir tools imgdep create
Жму такой make create_emulator start_emulator и такой думаю, ща я буду устанавливать все игрыapk, а не копировать по тормозному bluetooh на железо… А оно мне, «Где мои 17 лет на большой каретной», предъявите говорит SSE4. Ну вот :(
Некоторые пишут что можно задать эмулятор как x86, но оно валится всё ещё на этапе загрузки. А не запуска как с x86_64
Ладна, попёрся сюда
Накатил в qemu android-x86-9.0-r2.iso пересобрал apk с поддержкой x86 и всё работает. Но!!!
Великая беда и я не нашёл в интернете ответа.
Может ли qemu сказать запущенной в нем ОС что экран перевернулся?
Или в android x86 что-то дёрнуть? Может через ndk как что дрыгнуть можно?
Просто в qemu android x86 работает в каком-то режиме планшета,
изменение размера окна просто растягивает пропорционально картинку и всё.
Запускается всё если что вот так, может важно.
В ~/.bashrc функция
kvm-qrun()
{
kvm -drive file=$1,format=raw --device virtio-vga-gl -display gtk,gl=on -m 4096 -cpu host -smp 4 --enable-kvm -net user,hostfwd=tcp::9922-:22 -net nic
}
kvm-qrun android.qcow2
Есть мысли? Как экран то повернуть?
Я понимаю что если получится оно реально будет верх ногами например так как откуда qemu знает что надо перевёрнутую картинку ещё раз перевернуть уже чисто для показа, но хоть как, или никак? :(
Если нет то ладно, хоть запускать можно всякое для проверки и то хорошо. Но, всё же вдруг как то можно.
UPD: Никак
| ← назад | следующие → |