myDC.ru

Здравствуйте, гость ( Вход | Регистрация )

 
4 страниц V  « < 2 3 4  
Ответить в данную темуНачать новую тему

> Функции Для Разработчиков, склад полезных функций

alex82
сообщение 20.2.2011, 12:48
Сообщение #61


Местный
*******

Группа: Неактивированные
Сообщений: 908
Регистрация: 26.12.2008
Пользователь №: 1 574
Спасибо сказали: 1386 раз




Функция проверки пароля на безопасность:

Код
tSequence = {
    {"q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "a", "s", "d", "f", "g", "h", "j", "k", "l", "z", "x", "c", "v", "b", "n", "m",},
    {"m", "n", "b", "v", "c", "x", "z", "l", "k", "j", "h", "g", "f", "d", "s", "a", "p", "o", "i", "u", "y", "t", "r", "e", "w", "q",},
    {"й", "ц", "у", "к", "е", "н", "г", "ш", "щ", "з", "х", "ъ", "ф", "ы", "в", "а", "п", "р", "о", "л", "д", "ж", "э", "я", "ч", "с", "м", "и", "т", "ь", "б", "ю",},
    {"ю", "б", "ь", "т", "и", "м", "с", "ч", "я", "э", "ж", "д", "л", "о", "р", "п", "а", "в", "ы", "ф", "ъ", "х", "з", "щ", "ш", "г", "н", "е", "к", "у", "ц", "й",},
    {"1", "2", "3", "4", "5", "6", "7", "8", "9", "0",},
    {"0", "9", "8", "7", "6", "5", "4", "3", "2", "1",},
}

function CheckPassword(pass)
    local passlen = #pass
    if passlen < 2 then return true end

    local tpass = {}
    for i = 1,passlen do
        table.insert(tpass,pass:sub(i,i))
    end

    local success = false
    for i = 2,passlen do
        if tpass[i] ~= tpass[1] then
            success = true
            break
        end
    end
    if not success then
        return false, "Пароль не может состоять из одинаковых символов"
    end
    for i,v in ipairs(tSequence) do
        success = false
        local first
        for n,c in ipairs(v) do
            if c == tpass[1] then
                first = n
                break
            end
        end
        if first then
            for i = 2,passlen do
                first = first+1
                if not v[first] or v[first] ~= tpass[i] then
                    success = true
                    break
                end
            end
            if not success then
                return false, "Пароль не может состоять из клавиатурных последовательностей (qwerty, 123456, и.т.д.)"
            end
        end
    end
    return true
end

Функция возвращает false и сообщене об ошибке, если пароль состоит из одинаковых символов или клавиатурной последовательности. В противном случае возвращает true.

Обратите внимание: функция не приводит пароль к нижнему регистру. Вам необходимо сделать это самостоятельно перед вызовом функции.

Пример использования функции


Спасибо сказали:
Go to the top of the page
+Quote Post
ivan683
сообщение 25.9.2011, 21:32
Сообщение #62


Начинающий
*

Группа: Пользователи
Сообщений: 12
Регистрация: 15.7.2009
Пользователь №: 3 884
Спасибо сказали: 8 раз




Прикрепленный файл  serialize3.lua ( 8.28 килобайт ) Кол-во скачиваний: 21
Ловите монстра. ))

Собственно работает так:
Код
serialize(table, write_fnc)


С table я думаю понятно а вот write_fnc это функция которой по ходу выполнения передаются куски текста. Тем самым давая возможность оптимизировать способ его сборки.

Если результат нужно вывести в файл то делается так:
Код
local file = io.open("file_name.lua","w")
file:write("x = ")
serialize(_G, function(part) file:write(part) end)


Ну либо в сочетании со string_builder
Код
var builder = new_string_builder()
builder.add("return ")
serialize(_G, builder.add)
print(builder.get())


Ах да. Забыл сказать о преимуществах.
1 Генерирует красивый и понятный код.
2 Восстанавливает внутренние связи.
3 Проверяет особые случаи (бесконечность, -бесконечность, неопределённость).
4 Дампит функции если возможно.

P.S. совсем забыл что перед результатом деятельности этой функции надо записать либо "x=" либо "return " (Исправил примеры)

Используется мной здесь: https://github.com/ivan386/lua-dht


Спасибо сказали:
Go to the top of the page
+Quote Post
Enyby
сообщение 23.1.2012, 0:46
Сообщение #63


Освоившийся участник
*****

Группа: Пользователи
Сообщений: 391
Регистрация: 4.11.2009
Из: Дом
Пользователь №: 4 923
Спасибо сказали: 238 раз




Функции для создания лога быстрой отладки. Строки лога содержатся в памяти, причем не более чем iMaxFastDebug строк. При добавлении новой строки самый старый вариант удалятся, т. н. ротация сообщений.

Код
local tFastDebug = {}
local iMaxFastDebug = 30

function LogFastDebug(sMsg) if #tFastDebug >= iMaxFastDebug then table.remove(tFastDebug, 1) end table.insert(tFastDebug, sMsg) end
function GetFastDebug() local sRet = "" for i, sMsg in ipairs(tFastDebug) do sRet = sRet..i..". "..sMsg.."\n" end return sRet end


Пример использования
Сообщает раз в 10 секунд операторам лог входа/выхода пользователей.
Код
function UserConnected(tUser)
    LogFastDebug(os.time().." "..tUser.sNick.." connected")
end
OpConnected, RegConnected = UserConnected, UserConnected

function UserDisconnected(tUser)
    LogFastDebug(os.time().." "..tUser.sNick.." disconnected")
end
OpDisconnected, RegDisconnected = UserDisconnected, UserDisconnected

function OnStartup()
    for _, tUser in ipairs(Core.GetOnlineUsers()) do
        UserConnected(tUser)
    end
    TmrMan.AddTimer(10*1000, "CheckPtokaX")
end

function CheckPtokaX()
    Core.SendToOps(GetFastDebug())
end

local tFastDebug = {}
local iMaxFastDebug = 30

function LogFastDebug(sMsg)
    if #tFastDebug >= iMaxFastDebug then
        table.remove(tFastDebug, 1)
    end
    table.insert(tFastDebug, sMsg)
end

function GetFastDebug()
    local sRet = ""
    for i, sMsg in ipairs(tFastDebug) do
        sRet = sRet..i..". "..sMsg.."\n"
    end
    return sRet
end
Go to the top of the page
+Quote Post
Alexey
сообщение 30.1.2013, 20:56
Сообщение #64


7 квадратиков
*******

Группа: Модераторы
Сообщений: 792
Регистрация: 21.1.2009
Пользователь №: 1 895
Спасибо сказали: 298 раз




В Lua5.2 удалили функцию table.maxn и предлагают писать её на Луа самостоятельно, если она действительно нужна. Вот три варианта этой функции, если кому надо:
Код
table.maxn = function(t)
    local maxn = 0
    for i in pairs(t) do
        if type(i) == "number" and i > maxn then
            maxn = i
        end
    end
    return maxn
end
Код
table.maxn = function(t)
    local maxn, i = 0
    repeat
        i = next(t,i)
        if type(i) == "number" and i > maxn then
            maxn = i
        end
    until not i
    return maxn
end
Код
table.maxn = function(t)
    local maxn, i = 0, next(t)
    while i do
        if type(i) == "number" and i > maxn then
            maxn = i
        end
        i = next(t,i)
    end
    return maxn
end


PS: Понимаю, что в большинстве случаев можно прекрасно обойтись без этой функции, внося минимум правок, но не всегда хочется погружаться в глубины старого чужого говнокода.


Спасибо сказали:
Go to the top of the page
+Quote Post
Setuper
сообщение 31.1.2013, 9:05
Сообщение #65


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1706 раз




Эм... функцию ipairs похоже тоже удалили.

Интересно а оператор #t будет работать?
Go to the top of the page
+Quote Post
Alexey
сообщение 31.1.2013, 12:11
Сообщение #66


7 квадратиков
*******

Группа: Модераторы
Сообщений: 792
Регистрация: 21.1.2009
Пользователь №: 1 895
Спасибо сказали: 298 раз




Функция ipairs на месте, но она тут не подходит, как и оператор #.
Стояла цель написать замену table.maxn с максимально похожим поведением, а не что-то другое. Проверка идентичности результатов работы функций на Lua 5.1.4:
Код
local t = {"aaa", "bbb", ["a1"] = "xxx", [5] = "zzz"}
print(table.maxn1(t), table.maxn2(t), table.maxn3(t), table.maxn(t), #t)

5       5       5       5       2

Предполагается, что авторы скриптов знали как работает эта функция и применяли её с умом, иначе — ССЗБ и не я им доктор.
Go to the top of the page
+Quote Post
Setuper
сообщение 31.1.2013, 20:18
Сообщение #67


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1706 раз




http://www.corsix.org/content/look-lua-52-work3

Цитата
19. ipairs, table.maxn, and math.log10 all deprecated
Go to the top of the page
+Quote Post
Alexey
сообщение 31.1.2013, 21:31
Сообщение #68


7 квадратиков
*******

Группа: Модераторы
Сообщений: 792
Регистрация: 21.1.2009
Пользователь №: 1 895
Спасибо сказали: 298 раз




Зачем ссылаться на обсуждение черновой версии, вышедшей за полтора года до релиза? Давай лучше посмотрим в официальное эталонное руководство по Lua 5.2.

Не все изменения из черновика попали в релиз
http://www.lua.org/manual/5.2/manual.html#8.2

ipairs осталась в 5.2
http://www.lua.org/manual/5.2/manual.html#pdf-ipairs
Go to the top of the page
+Quote Post
Tsd
сообщение 22.2.2014, 12:35
Сообщение #69


Продвинутый участник
****

Группа: Пользователи
Сообщений: 174
Регистрация: 11.7.2008
Пользователь №: 171
Спасибо сказали: 179 раз




Может кому пригодится...
Функция автоматически определяет кодировку (ansi\utf-8) в сообщении и возвращает сообщение в ansi, если оно в utf-8 или nil при ошибке конвертации.
Для правильной работы необходима библиотека iconv
Код
local tRus = {
"А","Б","В","Г","Д","Е",--[["Ё",]]"Ж","З","И","Й","К","Л","М","Н","О","П",--[["Р","С",]]"Т","У","Ф","Х","Ц","Ч","Ш","Щ","Ы","Ъ","Ь","Э","Ю","Я",
"а","б","в","г","д","е",--[["ё",]]"ж","з","и","й","к","л","м","н","о","п",--[["р","с",]]"т","у","ф","х","ц","ч","ш","щ","ь","ы","ъ","э","ю","я"
}

function DecodeMsg(s)
    for _,v in pairs (tRus) do
        if string.find(s,v) then return s end
    end
    s = (s:convert("utf-8","cp1251"))
    return s
end


Сообщение отредактировал Tsd - 23.2.2014, 11:45
Прикрепленные файлы
Прикрепленный файл  iconv.zip ( 34.76 килобайт ) Кол-во скачиваний: 18
 


Спасибо сказали:
Go to the top of the page
+Quote Post

4 страниц V  « < 2 3 4
Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

Collapse

> Похожие темы

  Тема Ответов Автор Просмотров Последнее сообщение
No New Posts Вопрос по функции
0 000000 380 7.1.2018, 12:55 Посл. сообщение: 000000
No new От: Функции Для Разработчиков
От темы с ID: 334
19 Nickolya 6 055 22.2.2014, 15:22 Посл. сообщение: Ksan
No New Posts От: Вызов функции без возврата
От темы с ID: 4632
1 LoT 2 535 3.2.2011, 8:08 Посл. сообщение: ScOol
No New Posts Вызов функции без возврата
1 dimajak 3 719 1.2.2011, 2:55 Посл. сообщение: Ksan
No New Posts ВАЖНО: Topic has attachmentsФункции ===> Читаем, Дабы Не Задавать Вопросов <===
Скрипт-интерфейс PtokaX Lua. ВСЕ СКРИПТОВЫЕ ФУНКЦИИ PtokaX API
6 Svyat 27 806 11.10.2010, 15:50 Посл. сообщение: Nickolya
No New Posts Общие функции
хочется меньше писанины и больше скорости
1 RAND(i)M 2 911 9.9.2010, 0:01 Посл. сообщение: alex82
Closed ВАЖНО: Topic has attachmentsLua Api Функции Hex Хаба
Описание функций
1 Jaska 6 578 22.6.2010, 22:07 Посл. сообщение: Saymon21
No new Topic has attachmentsИщу разработчиков ADC Хабов
обменяться мнениями.
28 SysMan 18 793 9.4.2010, 10:16 Посл. сообщение: Delion
No New Posts От: Функции ===> Читаем, Дабы Не Задавать Вопросов <===
От темы с ID: 118
1 Setuper 3 273 20.2.2010, 22:54 Посл. сообщение: _Герой_
Moved Ищу разработчиков ADC Хабов
обменяться мнениями.
0 SysMan 0 3.7.2009, 19:57 Посл. сообщение: SysMan
No New Posts Topic has attachmentsLua Api Функции Hex Хаба
Описание функций
3 Setuper 4 490 3.6.2009, 18:31 Посл. сообщение: Jaska
No New Posts Защта от функции грейлинка
Как обезопасить себя и хаб
2 valdis73 3 840 25.4.2009, 17:55 Посл. сообщение: valdis73
No New Posts Функции Irc бота
Написать функции
1 zangriEBP 3 694 25.4.2009, 10:48 Посл. сообщение: zangriEBP
No New Posts От: Функции ===> Читаем, Дабы Не Задавать Вопросов <===
От темы с ID: 118
1 MEXAHuK 2 904 27.1.2009, 19:32 Посл. сообщение: MEXAHuK
No New Posts От: Функции
От темы с ID: 118
9 Wariner 7 002 26.11.2008, 16:00 Посл. сообщение: Setuper

 



RSS Сейчас: 26.5.2018, 15:10