Serezha
640к памяти еше для всего хватит :)
Serezha
Вобщ не хочу спорить просто поделился опытом
Snusmumriken
Бейз64 используется для post payload, для ответов от сервера (кодирование бинарей) и ещё много для чего. Не для рест апи, но про него Никто Ничего Не Говорил. Зачем ты вообще в это полез?
Snusmumriken
Или ты увидел что тут урлы кодируют, и решил что раз урлы — значит низя б64?
Serezha
Я предупредил человека из личного опыта. Ему нужно быстро. Юрл енкоде дополнительная и не быстрая нимвикоем разе фунция
Serezha
Если ему не надо ну окей
Serezha
Ты любитель спорить
Snusmumriken
Ты любитель выдумать лишнего, а потом растекаться по древу ))
Snusmumriken
Я тоже люблю растекаться по древу (и это жутко бесит куба, начинаю понимать почему), но я стараюсь объяснять в рамках той темы, по которой задали вопрос.
Snusmumriken
Вот, уже правильный вопрос.
Super
для рэндомизации урлов
Super
чтобы на 2 разных сайтах один и тот же контент нельзя было по 1 урлу увидеть
Snusmumriken
То есть, урл основного сайта как ключ, а локейшн контента как шифруемая фигня?
Serezha
для рэндомизации урлов
Ну вот. А то меня затроллили уже
Super
ну да, грубо говоря есть хеш - по нему лежит картинка или какой-то другой контент
Super
а в урле совершенно другой хеш, но мы реально достаем контент оттуда, где он есть
Super
по поводу сдвига по словарю я думал, но тогда будет доступно всего несколько комбинаций
Super
по поводу словаря под каждый домен - наверное это было бы просто, но придется хранить словари
Serezha
Либо соль для каждой картинки либо стойкое шифрование
Snusmumriken
по поводу словаря под каждый домен - наверное это было бы просто, но придется хранить словари
Теперь расскажи немного про структуру-архитектуру. Потому что при запросах за контентом можно проверять хост, и в зависимости от хоста направлять на ту или иную директорию с контентом, или базу редиски или ещё чего.
Super
ну тут главное хеш, в нем все может содержаться - весь путь к контенту
Super
вообще я смотрю xor_convert, вроде бы и не такой он сложный на вид
Super
function xor_convert(str, key) if str ~= nil and key ~= nil then local res = "" for i = 1, #str do local keyIndex = (i - 1) % key:len() + 1 res = res .. string.char(bit.bxor(str:sub(i, i):byte(), key:sub(keyIndex,keyIndex):byte())) end return res end end
Super
единственное что после него приходится пользоваться base64, чтобы это можно было использовать в урл
Super
а hex сильно легче base64?
Serezha
вообще я смотрю xor_convert, вроде бы и не такой он сложный на вид
лучше пробенчмаркить 🙂 в нормальных языках компилятор завернет все в SIMD инструкции а вот как там луа работает я не знаю думаю тут вполне может притормаживать
Snusmumriken
единственное что после него приходится пользоваться base64, чтобы это можно было использовать в урл
Хм, во ещё накалякал, мб будет быстрее за счёт табличек, но не факт. Надо забенчать.
Serezha
а hex сильно легче base64?
строки будут длинее но зато case insensitive и не надо кодировать раскодировать при передаче в урлах
Super
ну base64 тоже можно передавать в урлах, я этим и пользовался
Super
function urlsafe_b64encode(string_raw) local string_encoded = ngx.encode_base64(string_raw) string_encoded = string_encoded:gsub("+", "-") string_encoded = string_encoded:gsub("/", "_") string_encoded = string_encoded:gsub("=", "") return string_encoded end
Snusmumriken
С заменой — да.
Super
да, надо попробовать бенчмарк сделать
Snusmumriken
А, у меня там мелкая ошибка, надо ковырнуть.
Serezha
function urlsafe_b64encode(string_raw) local string_encoded = ngx.encode_base64(string_raw) string_encoded = string_encoded:gsub("+", "-") string_encoded = string_encoded:gsub("/", "_") string_encoded = string_encoded:gsub("=", "") return string_encoded end
о майн гатт - насколько я знаю gsub работает на регулярках то есть ПИПЕЦ какой тормозной для твоих замен
Super
ну да, это старый код, я поэтому и хочу переделать красивее все
Snusmumriken
Не, кстати гсаб не такой тормозной, он с сишным ядром, а луёвые регулярки достаточно быстрые сами по себе. А вот замену можно было бы выполнить и за один гсаб.
Snusmumriken
Сишка, не факт что зайдёт :<
Super
спасибо, ну сишка же вроде быстрее будет?
Snusmumriken
Быстрее, да.
Super
я кстати использую частенько Lrexlib для замен - очень удобно, но подглючивает иногда
Super
не всегда находит шаблон такого вида слово.*слово, а если сделать слово[^~]+слово, то находит
Serezha
Не, кстати гсаб не такой тормозной, он с сишным ядром, а луёвые регулярки достаточно быстрые сами по себе. А вот замену можно было бы выполнить и за один гсаб.
я погуглил и оказываается string.find умеет работаеть без регулярок - и в этом случае он в 1000 раз быстрее летает на луаджите по бенчмаркам одного чувака
Serezha
но gsub вот не имеет специального ключика 🙁
Super
может быть есть на си готовое решение с xor_convert?
Super
тогда просто взять его + си бейс64 и уже будет быстрее
Snusmumriken
Твой ксор отличный, можешь смело его.
Snusmumriken
Верхний — мой, нижний твой
Super
да, что-то медленно вышло
Snusmumriken
Таблички. Моя фигня должна быть хорошей с кодированием офигенно длинных строк. Очень длинных, на много мегабайт. Там твоя фигня за счёт отсутствия стринг-буфера будет люто переполнять память (ибо строки иммутабельны, при каждом приклеивании символа генерится новая строка, а у меня нет).
Serezha
но все равно попробуй отдать миллион картинок за 17 секунд 🙂
Serezha
оба кода в целом пригодны имхо
Super
ну на одной странице ведь не 1 картинка
Super
на одной странице их может быть 200 например
Super
бывает такое
Serezha
ну пойнт в том что хеш посчитается за 0.001 секунды а потом сервер будет отдавать их секунд 20
Serezha
оптимизировать 0.001 до 0.00001 здесб бессмыслено
Snusmumriken
да, что-то медленно вышло
Во, на длинных строках моя выигрывает, хе. И чем длиннее тем больше выигрыш.
Super
ну тут строка не очень длинная, что-то вроде md5 по длине
Super
f4e2c4ff641d06c29ed34e09bffd794d
Snusmumriken
Тогда твоя вариация пойдёт, да.
Super
может быть есть на си такое решение готовое?
Super
еще более оптимальное
Super
пока что я сделаю так - возьму свою функцию по xor в том виде, что была + добавлю тот сишный модуль base64
Super
ну да, придется сделать тесты
Serezha
поделись с нами потом выводами 🙂
Super
да, хорошо
Super
не хочет этот модуль ставиться на си для base64
Super
/usr/bin/ld: lbase64url.o: relocation R_X86_64_32 against `.rodata' can not be u sed when making a shared object; recompile with -fPIC
Super
хотя это я решил, просто добавил флаг при компиляции
Super
вручную все получилось, чуть попозже протестирую бейс 64
Dima
Открыл исходники less нашел какойто необычный синтаксис определения фунции
Dima
Dima
Что это за сущность такая?
Dima
подскажите. как так тип функции. имя функции с аргументами, а потом опять тип чего-то. При этом файл filename.c
fgntfg
Мне кажется это тип для переменной name, которая передается в функцию. Но я не видел такой синтаксис никогда