Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 2 из 4 ПерваяПервая 1 2 3 4 ПоследняяПоследняя
Показано с 11 по 20 из 31
  1. #11
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от Fallen A. Посмотреть сообщение
    ORM априори говно. Хочешь им обмазаться? Дерзай.
    Цитата Сообщение от Fallen A. Посмотреть сообщение
    Ты тратишь больше времени и памяти на отправку запроса. Взять хотя бы то, что ORM, это тот же макрос или функция, не более.

    И да, олдфаги мускула любят ручками составлять запросы, а не одной функцией. ИМХО.
    Чушь. Удобство, предоставляемое возможностями ORM не сравнится с незначительными потерями производительности. Но потери производительности при использовании ORM быть не может, ибо самые ресурсозатратные операции (конструирование запроса) выполняются на быстром C++, а не в медленном (относительно C++) Pawn с помощью format и strcat. Более того, тебе никто не запрещает использовать SQL одновременно используя ORM.

    Так что выражения вида "ORM априори говно" лучше оставить для разговоров в подъезде, а здесь принято "отвечать за базар".

    Цитата Сообщение от Fallen A. Посмотреть сообщение
    Паблики
    PHP код:
    OnPlayerFindInBanlistOnPlayerUnban 
    вообще не нужны.

    Объясню почему: в данном случае тебя не нужна "псевдомногопоточность" и с ней, в данном случае, скорее всего, ты больше проиграешь, чем выиграешь. Можно все оформить в одну функцию и несколько раз обращаться к ней, нежели нагромождать код.
    Это совсем не "псевдо", а нормальная многопоточность. Зачем заставлять зависать весь сервер на время ожидания результата запроса? Пусть это и будет практически незаметно, но зачем?

    В каком месте ты увидел нагромождение? Всю систему можно поместить в один inlude файл, тогда всё будет опрятно и удобно.

    А автора можно отругать за хранение времени в виде строки и за бардак, устроенный из-за склонений.

    PHP код:
    stock GetDeclensionWord(result[], const size sizeof(result), numword_1[], word_2[], word_3[])
    {
        
    num %= 100;

        if (
    num 19) {
            
    num %= 10;
        }

        
    result[0] = '\0';
        switch (
    num) {
            case 
    1: {
                
    strcat(resultword_1size);
            }
            case 
    2..4: {
                
    strcat(resultword_2size);
            }
            default: {
                
    strcat(resultword_3size);
            }
        }

    Использовать так:
    PHP код:
    GetDeclensionWord(day_stringsizeof(day_string), days"день""дня""дней"); 
    Последний раз редактировалось ziggi; 29.08.2016 в 09:03.

  2. #12
    Аватар для $continue$
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Пропущен 3 аргумент в функции. (в примере)
    Цитата Сообщение от ziggi Посмотреть сообщение
    PHP код:
    stock GetDeclensionWord(result[], const size sizeof(result), numword_1[], word_2[], word_3[]) 
    PHP код:
    GetDeclensionWord(day_stringsizeof(day_string), "день""дня""дней"); 
    Value your freedom or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn. (c) Richard Stallman

  3. #13
    Аватар для Fallen A.
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.09.2015
    Адрес
    Минск, БССР
    Сообщений
    236
    Репутация:
    19 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    Чушь. Удобство, предоставляемое возможностями ORM не сравнится с незначительными потерями производительности. Но потери производительности при использовании ORM быть не может, ибо самые ресурсозатратные операции (конструирование запроса) выполняются на быстром C++, а не в медленном (относительно C++) Pawn с помощью format и strcat. Более того, тебе никто не запрещает использовать SQL одновременно используя ORM.

    Так что выражения вида "ORM априори говно" лучше оставить для разговоров в подъезде, а здесь принято "отвечать за базар".



    Это совсем не "псевдо", а нормальная многопоточность. Зачем заставлять зависать весь сервер на время ожидания результата запроса? Пусть это и будет практически незаметно, но зачем?

    В каком месте ты увидел нагромождение? Всю систему можно поместить в один inlude файл, тогда всё будет опрятно и удобно.

    А автора можно отругать за хранение времени в виде строки и за бардак, устроенный из-за склонений.

    PHP код:
    stock GetDeclensionWord(result[], const size sizeof(result), numword_1[], word_2[], word_3[])
    {
        
    num %= 100;

        if (
    num 19) {
            
    num %= 10;
        }

        
    result[0] = '\0';
        switch (
    num) {
            case 
    1: {
                
    strcat(resultword_1size);
            }
            case 
    2..4: {
                
    strcat(resultword_2size);
            }
            default: {
                
    strcat(resultword_3size);
            }
        }

    Использовать так:
    PHP код:
    GetDeclensionWord(day_stringsizeof(day_string), "день""дня""дней"); 
    PHP код:
    stock get_Word(totalform1[32], form2[32], form3[32])
    {
        
    #define abs(%1) %1<0?~%1+1:%1
        
    total abs(total) % 1000;
        if(
    total ) return form2;
        if( 
    total == 1) return form1;
        return 
    form3;
        
    #undef abs


    Что касается нагромождения, то я бы не стал использовать кучу public для минимального набора действий.

    Для меня ORM как было говном априори, так им и осталось.

  4. #14
    Аватар для 123
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.02.2014
    Сообщений
    93
    Репутация:
    8 ±
    PHP код:
    CMD:unban(playeridparams[])
    {
    //    if(!IsPlayerAdmin(playerid)) return 1;
        
        
    if(isnull(params)) // зачем тратить процессорное время, когда строка уже передана через params?
            
    return SendClientMessage(playerid, -1, !"Использование: /unban [Ник]");

        if(
    strlen(params) > 24// без этой проверки, твой автоматический подсчет строк рухнет;(
            
    return SendClientMessage(playerid, -1, !"Длина ника не должна превышать 24-символов.");
            
        static const 
    auto_query_string[] =
            
    "SELECT * FROM `banlist` WHERE `Name` = '%e'";
        new
            
    query_string[sizeof(auto_query_string) - MAX_PLAYER_NAME 1];

        
    mysql_format(1query_stringsizeof(query_string), auto_query_stringparams); // SQL-инъекция?
        
    mysql_function_query(1query_stringtrue, !"OnPlayerUnban""ds"playeridparams);
        return 
    1;

    И много всего в таком духе. Да и подобный подсчет строк в стиле Daniel_Cortez, здесь совсем неуместен. Система бана, как уже выражался автор, очень проста и содержится в каждом моде, и она одна из таких функций - которую сделал и забыл. И жертвовать временем компиляции ради непонятного "удобства" - мне не понятно. И код бы смотрелся гораздо меньше и приятней.
    Последний раз редактировалось 123; 29.08.2016 в 06:17.

  5. #15
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от Fallen A. Посмотреть сообщение
    Что касается нагромождения, то я бы не стал использовать кучу public для минимального набора действий.
    Не кучу, а два. Ты бы не стал, а я стал. Кто прав? Никто, поэтому навязывать свои убеждения того "как надо" не стоит.

    Цитата Сообщение от Fallen A. Посмотреть сообщение
    Для меня ORM как было говном априори, так им и осталось.
    Какой смысл об этом писать без каких-либо убедительных доводов? Не можешь чем-то подкрепить слова - лучше их и не писать.

    Цитата Сообщение от 123 Посмотреть сообщение
    PHP код:
        if(strlen(params) > 24// без этой проверки, твой автоматический подсчет строк рухнет;(
            
    return SendClientMessage(playerid, -1, !"Длина ника не должна превышать 24-символов."); 
    О чём ты? Ничего не рухнет.

    Цитата Сообщение от 123 Посмотреть сообщение
    PHP код:
        mysql_format(1query_stringsizeof(query_string), auto_query_stringparams); // SQL-инъекция?} 
    Где? mysql_format защищает от этого.

    Цитата Сообщение от 123 Посмотреть сообщение
    И много всего в таком духе. Да и подобный подсчет строк в стиле Daniel_Cortez, здесь совсем неуместен. Система бана, как уже выражался автор, очень проста и содержится в каждом моде, и она одна из таких функций - которую сделал и забыл. И жертвовать временем компиляции ради непонятного "удобства" - мне не понятно. И код бы смотрелся гораздо меньше и приятней.
    Дак и подсчёт очень прост, сделал и забыл. И кому есть дело до времени компиляции? Тем более, что разница будет не более миллисекунды.

  6. #16
    Аватар для 123
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.02.2014
    Сообщений
    93
    Репутация:
    8 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    Не кучу, а два. Ты бы не стал, а я стал. Кто прав? Никто, поэтому навязывать свои убеждения того "как надо" не стоит.



    Какой смысл об этом писать без каких-либо убедительных доводов? Не можешь чем-то подкрепить слова - лучше их и не писать.



    О чём ты? Ничего не рухнет.



    Где? mysql_format защищает от этого.



    Дак и подсчёт очень прост, сделал и забыл. И кому есть дело до времени компиляции? Тем более, что разница будет не более миллисекунды.
    Посмотри оригинальный вариант и мой, я уже все исправил, а так отметил причину. А по поводу проверки на длину - как раз таки рухнет, поскольку в оригинальном варианте -

    PHP код:
    if(sscanf(params, !"s[120]"params[0])) 
    Выделяется 120 ячеек, а подсчет идет c MAX_PLAYER_NAME + 1 (25 ячеек).
    Последний раз редактировалось 123; 29.08.2016 в 09:56.

  7. #17
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от 123 Посмотреть сообщение
    А по поводу проверки на длину - как раз таки рухнет, поскольку в оригинальном варианте -

    PHP код:
    if(sscanf(params, !"s[120]"params[0])) 
    Выделяется 120 ячеек, а подсчет идет c MAX_PLAYER_NAME + 1 (25 ячеек).
    Согласен, не заметил.

    P.S. Лучше воспользоваться MAX_PLAYER_NAME, вместо числа в чистом виде.

  8. #18
    Аватар для 123
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.02.2014
    Сообщений
    93
    Репутация:
    8 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    P.S. Лучше воспользоваться MAX_PLAYER_NAME, вместо числа в чистом виде.
    Согласен, но даже 24 ячейки смысла нет использовать. Если длина ника больше 20, человека в игру не пустит. Поэтому во всех модах (где есть система регистрации), ограничение в 20 символов при смене ника, а выкидывать 4 ячейки в воздух, не в духе микрооптимизаторов этого форума))

  9. #19
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от 123 Посмотреть сообщение
    Согласен, но даже 24 ячейки смысла нет использовать. Если длина ника больше 20, человека в игру не пустит. Поэтому во всех модах (где есть система регистрации), ограничение в 20 символов при смене ника, а выкидывать 4 ячейки в воздух, не в духе микрооптимизаторов этого форума))
    Лучше перестраховаться и использовать максимальный размер.
    Последний раз редактировалось ziggi; 29.08.2016 в 11:04.

  10. #20
    Аватар для Skull
    Пользователь

    Статус
    Оффлайн
    Регистрация
    18.07.2016
    Сообщений
    17
    Репутация:
    3 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    Чушь. Удобство, предоставляемое возможностями ORM не сравнится с незначительными потерями производительности. Но потери производительности при использовании ORM быть не может, ибо самые ресурсозатратные операции (конструирование запроса) выполняются на быстром C++, а не в медленном (относительно C++) Pawn с помощью format и strcat. Более того, тебе никто не запрещает использовать SQL одновременно используя ORM.

    Так что выражения вида "ORM априори говно" лучше оставить для разговоров в подъезде, а здесь принято "отвечать за базар".



    Это совсем не "псевдо", а нормальная многопоточность. Зачем заставлять зависать весь сервер на время ожидания результата запроса? Пусть это и будет практически незаметно, но зачем?

    В каком месте ты увидел нагромождение? Всю систему можно поместить в один inlude файл, тогда всё будет опрятно и удобно.

    А автора можно отругать за хранение времени в виде строки и за бардак, устроенный из-за склонений.

    PHP код:
    stock GetDeclensionWord(result[], const size sizeof(result), numword_1[], word_2[], word_3[])
    {
        
    num %= 100;

        if (
    num 19) {
            
    num %= 10;
        }

        
    result[0] = '\0';
        switch (
    num) {
            case 
    1: {
                
    strcat(resultword_1size);
            }
            case 
    2..4: {
                
    strcat(resultword_2size);
            }
            default: {
                
    strcat(resultword_3size);
            }
        }

    Использовать так:
    PHP код:
    GetDeclensionWord(day_stringsizeof(day_string), days"день""дня""дней"); 
    Спасибо. Не знал, что так можно реализовать. Исправил.

    - - - Добавлено - - -

    Цитата Сообщение от 123 Посмотреть сообщение
    PHP код:
    CMD:unban(playeridparams[])
    {
    //    if(!IsPlayerAdmin(playerid)) return 1;
        
        
    if(isnull(params)) // зачем тратить процессорное время, когда строка уже передана через params?
            
    return SendClientMessage(playerid, -1, !"Использование: /unban [Ник]");

        if(
    strlen(params) > 24// без этой проверки, твой автоматический подсчет строк рухнет;(
            
    return SendClientMessage(playerid, -1, !"Длина ника не должна превышать 24-символов.");
            
        static const 
    auto_query_string[] =
            
    "SELECT * FROM `banlist` WHERE `Name` = '%e'";
        new
            
    query_string[sizeof(auto_query_string) - MAX_PLAYER_NAME 1];

        
    mysql_format(1query_stringsizeof(query_string), auto_query_stringparams); // SQL-инъекция?
        
    mysql_function_query(1query_stringtrue, !"OnPlayerUnban""ds"playeridparams);
        return 
    1;

    И много всего в таком духе. Да и подобный подсчет строк в стиле Daniel_Cortez, здесь совсем неуместен. Система бана, как уже выражался автор, очень проста и содержится в каждом моде, и она одна из таких функций - которую сделал и забыл. И жертвовать временем компиляции ради непонятного "удобства" - мне не понятно. И код бы смотрелся гораздо меньше и приятней.
    И Вам спасибо. Не учёл о возможности инъекции (кстати, почему-то ругается на 4 аргумент (auto_query_string), пришлось использовать без автоподсчёта) и совсем забыл, что можно использовать isnull.

 

 
Страница 2 из 4 ПерваяПервая 1 2 3 4 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •