Mark ☢️
И оно делает как будто это указатель на чар
Igor
Хм, GCC варнингов не кидал
fgntfg
кажется в си нужно знать размер типа, чтоб к указателю прибавлять корректно. Но я не писал на си лет 10, точно не помню что к чему
Igor
Вот такой код, к примеру, не имеет ни единого варна
#include <stdio.h>
int main() {
void* test = (void*)100;
void* test2 = test + 10;
printf("%x", test2);
}
Mark ☢️
Igor
А, всё, понял. Спасибо за ответ.
Mark ☢️
Igor
Просто по быстрому накидал, чтобы показать, что варны отсуствуют
Mark ☢️
Mark ☢️
Anonymous
Наоборот луа строже оказалась чем гцц
Super
Ребята, подскажите плиз, как обработать через ngx.base64_decode большой имадж?
Super
я так понял есть какой-толимит и оно не хочет выше его обрабатывать
Snusmumriken
Пилите, Шура, пилите! На чанки!
Snusmumriken
Я тут успел хорошенько задуматься, как сбрасывать на клиент файлы на предельной скорости в опенресте. и у такой функции, на выходе — при большом bufsize — быстро но переполняется буфер отправки, а при маленьком — медленна.
local bufsize = 8192
local chunk = file:read(bufsize)
while #chunk > 0 do
ngx.print(chunk)
ngx.sleep(.01)
chunk = file:read(bufsize)
end
file:close()
Ну кароч нормальное решение — ngx.flush(true)
вместо sleep'а, оно типа ждёт когда текущий буфер отправится.
Super
так а как мне сделать base64 при этом?
Snusmumriken
А тебе — пилить на чанки.
Super
у меня пришел файл такой большой, я ему могу сделать echo, но не могу разбейзить
Snusmumriken
Ну смотри, тебе условно пришла строка:
0KjQu9CwINGB0LDRiNCwINC/0L4g0KjQvtGB0YHQtSDQuCDRgdC+0YHQsNC70LAg0YHRg9GI0LrRgw==
(Шла саша по Шоссе и сосала сушку)
Пилишь её на две части (добавляя "==" в конце):
0KjQu9CwINGB0LDRiNCwINC/0L4g0KjQvtGB0YHQtQ==
(Шла саша по Шоссе)
и
SDQuCDRgdC+0YHQsNC70LAg0YHRg9GI0LrRgw==
( и сосала сушку)
Надо только определить где нужен распил, потом можно клеить.
fgntfg
Тебе прилетел большой кусок в base64? Я точно не уверен, но вроде как если расбейзить каждый кусок по отдельности и склеить результаты, то получится тоже самое что разбейженный целый. Я бы проэксперементировал, но не на чём.
fgntfg
3 байта исходных = 4 символа бейзу
Snusmumriken
Хммм, я только что кажется обфукался, надо перепроверить.
Snusmumriken
Snusmumriken
Надо подумать на тему потокового декодера.
Super
видимо придется поменять логику и обойтись без base64
fgntfg
Snusmumriken
добавь пробел в первую строку
Да, таки с пробелом строка кардинально меняется, давно не смотрел b64, таки предыдущие символы влияют на последующие.
Super
странное ограничение конечно
Super
вывести я могу ее, в переменную или мемкеш загнать могу, а вот разбейзить нет
fgntfg
Snusmumriken
Хоба, надо затестить
fgntfg
Я не тестил, я читал википидоров
fgntfg
надо бы RFC почитать, но я стар для этого
Serezha
ну вы чо base64 тупая штука совсем 🙂
mva
minetest.register_tool("form:tool", {
description = "Tool",
inventory_image = "default_flint.png",
range = 0,
on_use = function(itemstack, user, pointed_thing)
local player = user:get_player_name()
local players = {}
local formspec = {
"size[7.4,7.1] bgcolor[#080808BB;true]box[0.075,0;7.05,0.65;#111111] label[3.5,0.1;TEST] background[5,5;1,1;gui_formbg.png;true]button[0.1,5.8;1.5,1.5;kick;kick] textlist[0.1,1;7.03,4.5;playerlist;"
}
local is_first = true
for _ , player in pairs(minetest.get_connected_players()) do
local player_name = player:get_player_name()
players[#players + 1] = player_name
if not is_first then
formspec[#formspec + 1] = ","
end
formspec[#formspec + 1] = minetest.formspec_escape(player_name)
is_first = false
end
formspec[#formspec + 1] = "]"
minetest.show_formspec(user:get_player_name(), "tool_form2",table.concat(formspec, ""), false)
end,
})
minetest.register_on_player_receive_fields(function(player, formname, fields)
if formname=="tool_form2" then
if fields.kick then
-- ...
end
end
end)
NB: если ты обращаешься к какой-то конструкции (например, #formspec+1) более одного раза в одном контексте, то вполне обычной практикой является создать переменную с таковым значением.
Snusmumriken
Snusmumriken
Надо ещё небось что-то вытаскивать из последнего символа первой строки, или завершать как-то хитро.
fgntfg
у тебе небось ещё и кирилица двубайтная
fgntfg
а пробелы однобайтные
Snusmumriken
utf8, ясен красен. Но в норме должно быть пофигу.
Snusmumriken
Так, дальнейшие эксперименты с роспилом (и откатом) показали, что при разной обрезке рядом с местом роспила (и отката) можно получить второй чанк но без начального символа. Копаем дальше!
Serezha
там надо корректно добавлять удалять паддинги (=) а может и еще химичить
Snusmumriken
Ненене, карочи, бинарные и ascii-данные нормально пилятся на числа кратные трём, а вот с русеком я как раз накосячил из-за многобайтности.
Super
это слишком сложно
Super
я подумаю как в байнари виде их передавать, так проще будет
Super
просто придется повозиться с заливкой в админке, хотел на скорую руку через форму сделать
Serezha
рубишь картинки на чанки по 1 мег например
Snusmumriken
это слишком сложно
Нене, всё оче просто.
function decode(str)
local res = {}
local bufsize = 1024 * 3
local i = 1
while i < #str do
local chunk = str:sub(i, i + bufsize)
res[#res + 1] = base64.decode(chunk)
i = i + bufsize + 1
end
return table.concat(res)
end
Прогнать-пофиксить эту фигню, и вот тебе потоковый декодер.
UPD: Кажись похоже но не совсем.
tou
Super
спасибо, сейчас попробую
Serezha
Snusmumriken
А то.
Snusmumriken
Serezha
Snusmumriken
Ужасть
Serezha
я ашипся про бейс64 - это заморочная кодировка
Serezha
В x16 все просто - один байт на входе два на выходе
Snusmumriken
Чот мне кажется все сложнее :)
Кстати, эта фигня уже должна быть в коде. Не будет тебе бейз64 в 1023 байта, оно типа так не закодирует (или закодирует, нацело делится на три, хе, а вот 1025 не будет).
Serezha
но это именно граничные случаи на конце - если с ними пошаманить то будет клеить дальше влет 🙂
Snusmumriken
Карочи, на самом деле, бейз64 действительно элементарная штука, но тем не менее, она довольно замороченная ))
Ууу, сложна.
Snusmumriken
Карочи, ща скочаю питоновый потоковый декодер и нахально перекатаю.
Snusmumriken
Спустя двадцать минут: слишком сложно, пойду посмотрю мультики и чуть позже покопаю
mva
крысы фчяти
NM
Super
я заморочился и обошелся без base64
Super
просто передаю как есть через прокси, оно как есть получает и кладет в мемкеш
Super
сделал форму, там выбор файла и заливка на js без сабмита формы через ajax запрос
Super
в ообщем пришлось чуть заморочиться, но даже лучше в итоге вышло )
Super
и теперь я знаю про это ограничение
Anonymous
Пацаны где правильный чат по машинлёрнингу?
Anonymous
Телеграмный
Super
мне тоже интересно, а еще интересно если на луа что-то для этого
Super
я знаю, что у редиса есть какая-то нейросетка и у луа к нему есть доступ соответсвенно
Anonymous
Написать несложно простенькую