Программный код - качество и пояснения

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Программный код - качество и пояснения

Сообщение sergejey » Пт май 22, 2015 10:21 am

igk1972 писал(а):Запуск циклов стартует startup_maintenance.php (в нем делает бекап бд, бекап файлов, и еще ко-что)
Спрашивается зачем файл fix_linked_properties.php в котором основная часть кода из startup_maintenance.php (или наоборот)?
И еще есть файл periodical_db_save.php
fix_linked_properties.php не нужен, его код был перенесён в startup_maintenance
periodical_db_save.php для периодического сохранения базы данных, используется в некоторых специфичных конфигурациях
про код с календарём не прокомментирую, т.к. его даже не помню -- сам модуль рудимент и код его писался лет 10 назад наверное

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
LutsenkoDenis
Сообщения: 521
Зарегистрирован: Вс апр 07, 2013 9:30 pm
Откуда: Moscow
Благодарил (а): 2 раза
Поблагодарили: 58 раз
Контактная информация:

Re: Программный код - качество и пояснения

Сообщение LutsenkoDenis » Пт май 22, 2015 11:04 am

sergejey писал(а):сам модуль рудимент и код его писался лет 10 назад наверное
Сделал pull request на удаление этого модуля.
________________________________________________________
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
LutsenkoDenis
Сообщения: 521
Зарегистрирован: Вс апр 07, 2013 9:30 pm
Откуда: Moscow
Благодарил (а): 2 раза
Поблагодарили: 58 раз
Контактная информация:

Re: Программный код - качество и пояснения

Сообщение LutsenkoDenis » Вс сен 20, 2015 11:25 pm

Файл /lib/perfmonitor.class.php
1. В функции EndMeasure условие if ($save_to_db) и все что после него никогда не выполняется. Вопрос, а нафиг это в коде тогда?
2. В той же функции еще есть ошибка: вот так $perf_data[$mpoint]['NUM']++; делать нельзя. Т.к. нельзя прибавлять что-либо к не объявленной переменной или к не существующему элементу массива.

Код: Выделить всё

/**
* Ending measurement
*
* Ending measurement of time for specified block
*
* @param string $mpoint monitoring block name
*/
 function EndMeasure($mpoint, $save_to_db=0) {
  global $perf_data;
  if (!$perf_data[$mpoint]['START']) {
   return;
  }
  $perf_data[$mpoint]['END']=getmicrotime();
  if(!$perf_data[$mpoint]['MEMORY_END'] && function_exists('memory_get_usage')) {
   $perf_data[$mpoint]['MEMORY_END']=memory_get_usage(); 
  }
  $perf_data[$mpoint]['TIME']+=$perf_data[$mpoint]['END']-$perf_data[$mpoint]['START'];
  $perf_data[$mpoint]['NUM']++;
  return;
  if ($save_to_db) {
   global $db;
   if ($db->dbh) {
    $rec=array();
    $rec['OPERATION']=substr($mpoint, 0, 200);
    $rec['COUNTER']=1;
    $rec['TIMEUSED']=$perf_data[$mpoint]['TIME'];
    $rec['ADDED']=date('Y-m-d H:i:s');
    if ($_SERVER['REQUEST_URI']) {
     $rec['SOURCE']='web';
    } else {
     $rec['SOURCE']='cmd';
    }
    SQLInsert('performance_log', $rec);
   }
  }
 } 
________________________________________________________
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Программный код - качество и пояснения

Сообщение sergejey » Пн сен 21, 2015 12:20 pm

LutsenkoDenis писал(а):Файл /lib/perfmonitor.class.php
1. В функции EndMeasure условие if ($save_to_db) и все что после него никогда не выполняется. Вопрос, а нафиг это в коде тогда?
Чтобы было :)
Это функционал сбора статистики производительности в базу данных, в продакшене не используется, но оставлен для профилирования.
LutsenkoDenis писал(а):2. В той же функции еще есть ошибка: вот так $perf_data[$mpoint]['NUM']++; делать нельзя. Т.к. нельзя прибавлять что-либо к не объявленной переменной или к не существующему элементу массива.
Ну не красиво немножко, это да, но не так критично, что прямо нельзя -- работает же :)

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
LutsenkoDenis
Сообщения: 521
Зарегистрирован: Вс апр 07, 2013 9:30 pm
Откуда: Moscow
Благодарил (а): 2 раза
Поблагодарили: 58 раз
Контактная информация:

Re: Программный код - качество и пояснения

Сообщение LutsenkoDenis » Пн сен 21, 2015 7:42 pm

sergejey писал(а):Чтобы было :)
Это функционал сбора статистики производительности в базу данных, в продакшене не используется, но оставлен для профилирования.
Подход конечно забавный, но как-то не правильный ни разу. Для профилирования чего??? там перед и условием RETURN из функции делается... До профилирования не доходит по-любому. А если этого нет в продакшене, то и не нужен этот код в продакшен-ветке исходников. Пользователи не должны сидеть на ветке, которая тестируется.
sergejey писал(а):Ну не красиво немножко, это да, но не так критично, что прямо нельзя -- работает же :)
Ну конечно работает! сначало орёт благим матом в виде ошибки, которая так же подавляется в настройках конфига, а потом да, как-то работает. Причем на сообщение об ошибке и на его подавление также выделяются ресурсы.
Ну т.е. логика понятна. Проще включить подавление ошибок и предупреждений, вместо того, чтобы уделить всего минуту времени на исправление или сразу нормально написать.
________________________________________________________
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
LutsenkoDenis
Сообщения: 521
Зарегистрирован: Вс апр 07, 2013 9:30 pm
Откуда: Moscow
Благодарил (а): 2 раза
Поблагодарили: 58 раз
Контактная информация:

Re: Программный код - качество и пояснения

Сообщение LutsenkoDenis » Вт сен 22, 2015 3:42 pm

Файл: /modules/application.class.php
Ошибка: Нужно UPDATE вместо UPDAE

Код: Выделить всё

if ($tmp['ID'])
      {
         SQLExec("UPDAE users SET ACTIVE_CONTEXT_ID=0, ACTIVE_CONTEXT_EXTERNAL=0 WHERE ID='".$tmp['ID']."'");
      }
________________________________________________________
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Программный код - качество и пояснения

Сообщение sergejey » Вт сен 22, 2015 5:02 pm

LutsenkoDenis писал(а):Файл: /modules/application.class.php
Ошибка: Нужно UPDATE вместо UPDAE
Ага, спасибо, исправил

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
LutsenkoDenis
Сообщения: 521
Зарегистрирован: Вс апр 07, 2013 9:30 pm
Откуда: Moscow
Благодарил (а): 2 раза
Поблагодарили: 58 раз
Контактная информация:

Re: Программный код - качество и пояснения

Сообщение LutsenkoDenis » Вт сен 22, 2015 11:27 pm

Файл: /lib/mysql.class.php
  1. Данная функция не всегда возвращает результат. По идее она должна в блоке где записывается ошибка возвращать пустой массив.
  2. Зачем в цикле каждый раз вычисляется кол-во строк данных из запроса к бд?

Код: Выделить всё

function Select($query)
   {
      if ($result = mysql_query($query, $this->dbh)) 
      {
         $res = array();
         
         for($i = 0; $i < mysql_num_rows($result); $i++) 
         {
            $rec = mysql_fetch_array($result, MYSQL_ASSOC);
            $res[] = $rec;
         }
         
         return $res;
      }
      else 
      {
         $this->Error($query);
      }
   } 
________________________________________________________
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Программный код - качество и пояснения

Сообщение sergejey » Вт сен 22, 2015 11:46 pm

LutsenkoDenis писал(а):Файл: /lib/mysql.class.php
  1. Данная функция не всегда возвращает результат. По идее она должна в блоке где записывается ошибка возвращать пустой массив.
  2. Зачем в цикле каждый раз вычисляется кол-во строк данных из запроса к бд?
  3. Зачем в массив res записываются в цикле одни и те же данные?
1. Не должна. Ошибка выборки останавливает выполнение скрипта.
2. Да, наверное это лишнее
3. Шутите?

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
LutsenkoDenis
Сообщения: 521
Зарегистрирован: Вс апр 07, 2013 9:30 pm
Откуда: Moscow
Благодарил (а): 2 раза
Поблагодарили: 58 раз
Контактная информация:

Re: Программный код - качество и пояснения

Сообщение LutsenkoDenis » Ср сен 23, 2015 3:30 am

1. Должна, т.к.:
  • а) смотрим описание функции(написано если что не мной :) )
    Это публичная функция (access public), которая на вход принимает строковый параметр с запросом к бд(string $query) и возвращает массив(return array).
    /**
    * Execute SQL SELECT query and return all records
    *
    * This method returns records as array of assosiated arrays (by field names)
    *
    * @param string $query SQL SELECT query
    * @return array execution result
    * @access public
    */
  • б) Исходя описания выше, в случае ошибки функция должна вернуть пустой массив.
  • в) ошибка выборки... если имеется в виду это $this->Error($query); - ничего не прерывает. То что в ней return 1 ни о чем не говорит, т.к. далее нигде не используется.
2. Пробежался по коду на предмет таких-же вычислений...многовато :( Исправил и отправил pull-reqest.
3. Ага, шучу конечно.. ночь все-таки. Вообще я удалял 3-й пункт, но видать ответ был быстрее :)
________________________________________________________
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
Ответить