lilalo

diff l3-frontend @ 57:187b6636a3be

l3-agent:
Исправлен микробаг с uid
Раньше он не отправлялся в поток

l3-cgi:
При генерировании не CGI-версии
в таблице отсутствуют поля "инструктор" и "все"
На текущий момент они указывали в никуда,
поэтому я отключил их

l3-frontend:
Выводятся новые команды в начале каждого дня.
Команды сортируются по убыванию частоты использования.

l3scripts:
в письмо в одном месте е заменил на ё
author devi
date Wed Dec 28 18:44:42 2005 +0200 (2005-12-28)
parents 43aeb3036aaa
children 4d7e45bc659b
line diff
     1.1 --- a/l3-frontend	Wed Dec 28 01:01:00 2005 +0200
     1.2 +++ b/l3-frontend	Wed Dec 28 18:44:42 2005 +0200
     1.3 @@ -26,6 +26,7 @@
     1.4  my %mywi_cache_for;         # Кэш для экономии обращений к mywi
     1.5  
     1.6  sub make_comment;
     1.7 +sub make_new_commands_table;
     1.8  sub load_command_lines_from_xml;
     1.9  sub load_sessions_from_xml;
    1.10  sub sort_command_lines;
    1.11 @@ -301,9 +302,10 @@
    1.12          $$cl->{"class"} =   $$cl->{"err"} eq 130 ?  "interrupted"
    1.13                          :   $$cl->{"err"} eq 127 ?  "mistyped"
    1.14                          :   $$cl->{"err"}        ?  "wrong"
    1.15 -                        :                           "";
    1.16 +                        :                           "normal";
    1.17  
    1.18 -        if (!$$cl->{"euid"}) {
    1.19 +        if ($$cl->{"cline"} =~ /[^|`]\s*sudo/
    1.20 +            || $$cl->{"uid"} eq 0) {
    1.21              $$cl->{"class"}.="_root";
    1.22          }
    1.23  
    1.24 @@ -389,6 +391,8 @@
    1.25  
    1.26      my $current_command=0;
    1.27  
    1.28 +    my @known_commands;
    1.29 +
    1.30      my %filter;
    1.31  
    1.32      if ($Config{filter}) {
    1.33 @@ -460,9 +464,9 @@
    1.34              $note = join ("\n", map ("<p>$_</p>", split (/-\n/, $note)));
    1.35              $note =~ s@(http:[a-zA-Z.0-9/?\_%-]*)@<a href='$1'>$1</a>@g;
    1.36              $note =~ s@(www\.[a-zA-Z.0-9/?\_%-]*)@<a href='$1'>$1</a>@g;
    1.37 -            $result .= "<tr><td colspan='6'>";
    1.38 -            $result .= "<h4 id='note$note_number'>".$cl->{note_title}."</h4>" if $cl->{note_title};
    1.39 -            $result .= "".$note."<p/><p/></td></td>";
    1.40 +            $this_day_result .= "<tr><td colspan='6'>"
    1.41 +                             .  "<h4 id='note$note_number'>".$cl->{note_title}."</h4>" if $cl->{note_title}
    1.42 +                             .  "".$note."<p/><p/></td></tr>";
    1.43  
    1.44              if ($cl->{note_title}) {
    1.45                  push @{$toc[@toc]},"<a href='#note$note_number'>".$cl->{note_title}."</a>";
    1.46 @@ -508,11 +512,6 @@
    1.47          $hour = "0".$hour if $hour =~ /^.$/;
    1.48          $sec  = "0".$sec  if $sec  =~ /^.$/;
    1.49  
    1.50 -        #my @new_commands;
    1.51 -        #my @new_files;
    1.52 -        #@new_commands = split (/\s+/, $cl->{"new_commands"}) if defined $cl->{"new_commands"};
    1.53 -        #@new_files = split (/\s+/, $cl->{"new_files"}) if defined $cl->{"new_files"};
    1.54 -
    1.55          $class=$cl->{"class"};
    1.56          $Stat{ErrorCommands}++          if $class =~ /wrong/;
    1.57          $Stat{MistypedCommands}++       if $class =~ /mistype/;
    1.58 @@ -521,8 +520,25 @@
    1.59  # DAY CHANGE
    1.60          if ( $last_day ne $day) {
    1.61              if ($last_day) {
    1.62 +
    1.63 +# Вычисляем разность множеств.
    1.64 +# Что-то вроде этого, если бы так можно было писать:
    1.65 +#   @new_commands = keys %CommandsFDistribution - @known_commands;
    1.66 +
    1.67 +
    1.68                  $result .= "<h3 id='day$last_day'>".$Day_Name[$last_wday]."</h3>";
    1.69 -                #$result .= "Новые команды<br/>";
    1.70 +
    1.71 +                my $new_commands_section = make_new_commands_table(\@known_commands);
    1.72 +                @known_commands = keys %CommandsFDistribution;
    1.73 +
    1.74 +                if ($new_commands_section) {
    1.75 +                    $result .= "<h5>Новые команды</h5>"
    1.76 +                            .  "<table class='new_commands_table'>"
    1.77 +                            .  "<tr class='new_commands_header'><td>Команда</td><td>Описание</td></tr>"
    1.78 +                            .  $new_commands_section 
    1.79 +                            .  "</table>"
    1.80 +                }
    1.81 +
    1.82                  $result .= "<table width='100%'>\n";
    1.83                  $result .= $this_day_result;
    1.84                  $result .= "</table>";
    1.85 @@ -614,17 +630,53 @@
    1.86          $this_day_result .= "</td>\n";
    1.87          $this_day_result .= "</tr>\n";
    1.88      }
    1.89 +    last: {
    1.90 +        my $new_commands_section = make_new_commands_table(\@known_commands);
    1.91 +        @known_commands = keys %CommandsFDistribution;
    1.92  
    1.93 -    $result .= "<h3 id='day$last_day'>".$Day_Name[$last_wday]."</h3>";
    1.94 -    $result .= "<table width='100%'>\n";
    1.95 -    $result .= $this_day_result;
    1.96 -    $result .= "</table>";
    1.97 +        $result .= "<h3 id='day$last_day'>".$Day_Name[$last_wday]."</h3>";
    1.98 +        if ($new_commands_section) {
    1.99 +            $result .= "<h5>Новые команды</h5>"
   1.100 +                    .  "<table class='new_commands_table'>"
   1.101 +                    .  "<tr class='new_commands_header'><td>Команда</td><td>Описание</td></tr>"
   1.102 +                    .  $new_commands_section 
   1.103 +                    .  "</table>"
   1.104 +        }
   1.105 +
   1.106 +        $result .= "<table width='100%'>\n";
   1.107 +        $result .= $this_day_result;
   1.108 +        $result .= "</table>";
   1.109 +   }
   1.110  
   1.111      return ($result, collapse_list (\@toc));
   1.112  
   1.113  }
   1.114  
   1.115 +sub make_new_commands_table
   1.116 +{
   1.117 +    my @known_commands = @{$_[0]};
   1.118  
   1.119 +    my %count;
   1.120 +    my @new_commands = ();
   1.121 +    for my $c (keys %CommandsFDistribution, @known_commands) {
   1.122 +        $count{$c}++
   1.123 +    }
   1.124 +    for my $c (keys %CommandsFDistribution) {
   1.125 +        push @new_commands, $c if $count{$c} != 2;
   1.126 +    }
   1.127 +
   1.128 +    
   1.129 +    my $new_commands_section;
   1.130 +    if (@new_commands){
   1.131 +        my $hint;
   1.132 +        for my $c (reverse sort { $CommandsFDistribution{$a} <=> $CommandsFDistribution{$b} } @new_commands) {
   1.133 +                $hint = make_comment($c);
   1.134 +                my ($command, $hint) = $hint =~ m/(.*?) \s*- \s*(.*)/;
   1.135 +                $new_commands_section .= "<tr><td>$command</td><td>$hint</td></tr>"  if $hint;
   1.136 +        }
   1.137 +    }
   1.138 +    return $new_commands_section;
   1.139 +}
   1.140  
   1.141  
   1.142  #############
   1.143 @@ -796,7 +848,7 @@
   1.144          LastCommand         => "Время последней команды журнала",
   1.145          TotalCommands       => "Количество командных строк в журнале",
   1.146          ErrorsPercentage    => "Процент команд с ненулевым кодом завершения, %",
   1.147 -        MistypesPercentage  => "Процент синтаксически неверное набранных команд, %",
   1.148 +        MistypesPercentage  => "Процент синтаксически неверно набранных команд, %",
   1.149          TotalTime           => "Суммарное время работы с терминалом <sup><font size='-2'>*</font></sup>, час",
   1.150          CommandsPerTime     => "Количество командных строк в единицу времени, команда/мин",
   1.151          CommandsFrequency   => "Частота использования команд",
   1.152 @@ -914,6 +966,21 @@
   1.153      должна быть указана программа script.
   1.154      </p></li>
   1.155      <li><p>
   1.156 +    Команды, при наборе которых были допущены синтаксические ошибки, 
   1.157 +    выводятся перечёркнутым текстом:
   1.158 +<table>
   1.159 +<tr class='command'>
   1.160 +<td class='script'>
   1.161 +<pre class='mistyped_cline'>
   1.162 +\$ l s-l</pre>
   1.163 +<pre class='mistyped_output'>bash: l: command not found
   1.164 +</pre>
   1.165 +</td>
   1.166 +</tr>
   1.167 +</table>
   1.168 +<br/>
   1.169 +    </p></li>
   1.170 +    <li><p>
   1.171      Если код завершения команды равен нулю, 
   1.172      команда была выполнена без ошибок.
   1.173      Команды, код завершения которых отличен от нуля, выделяются цветом.
   1.174 @@ -921,12 +988,14 @@
   1.175  <tr class='command'>
   1.176  <td class='script'>
   1.177  <pre class='wrong_cline'>
   1.178 -\$ l s-l</pre>
   1.179 -<pre class='wrong_output'>bash: l: command not found
   1.180 +\$ test 5 -lt 4</pre>
   1.181  </pre>
   1.182  </td>
   1.183  </tr>
   1.184  </table>
   1.185 +    Обратите внимание на то, что код завершения команды может быть отличен от нуля
   1.186 +    не только в тех случаях, когда команда была выполнена с ошибкой.
   1.187 +    Многие команды используют код завершения, например, для того чтобы показать результаты проверки
   1.188  <br/>
   1.189      </p></li>
   1.190      <li><p>
   1.191 @@ -1003,6 +1072,22 @@
   1.192      Для того чтобы получить краткую справочную информацию о команде, 
   1.193      нужно подвести к ней мышь. Во всплывающей подсказке появится краткое
   1.194      описание команды.
   1.195 +    </p>
   1.196 +    <p>
   1.197 +    Если справочная информация о команде есть, 
   1.198 +    команда выделяется голубым фоном, например: <span class="with_hint" title="главный текстовый редактор Unix">vi</span>.
   1.199 +    Если справочная информация отсутствует,
   1.200 +    команда выделяется розовым фоном, например: <span class="without_hint">notepad.exe</span>.
   1.201 +    Справочная информация может отсутствовать в том случае, 
   1.202 +    если (1) команда введена неверно; (2) если распознавание команды LiLaLo выполнено неверно;
   1.203 +    (3) если информация о команде неизвестна LiLaLo.
   1.204 +    Последнее возможно для редких команд.
   1.205 +    </p></li>
   1.206 +    <li><p>
   1.207 +    Большие, в особенности многострочные, всплывающие подсказки лучше 
   1.208 +    всего показываются браузерами KDE Konqueror, Apple Safari и Microsoft Internet Explorer.
   1.209 +    В браузерах Mozilla и Firefox они отображаются не полностью, 
   1.210 +    а вместо перевода строки выводится специальный символ.
   1.211      </p></li>
   1.212      <li><p>
   1.213      Время ввода команды, показанное в журнале, соответствует времени