Skip to content
Link

Subtitle offset shifter for out of sync SRT files

Subtitle offset shifter for out of sync SRT files

Advertisements

Adding touch to context menu in Windows Explorer for Windows 7

I wanted to add touch functionality to Windows Explorer in Windows 7.  After searching around and some tweaking, I figured out how to add it to the context menu.  Below is the code.  Save it as a .reg file and double-click it to import it to the registry:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\Touch\command]
@="cmd.exe /c copy /b \"%1\" +,,"

I had a lot of trouble with the double quotes around the %1 parameter.  I was trying to escape the quotes with ^.  I finally had to open Regedit.exe and type the command in manually.  I then exported the key.

Aside

Logwatch and Apache error reporting in Fedora 18

I recently upgraded to Fedora 18 and realized that Logwatch was not reporting all the errors from my webserver.  The problem was that the time stamp for the error log had milliseconds instead of seconds.  I changed a few regular expressions in the original files and put these two files in /etc/logwatch/scripts/services to remedy the matter.  They override the default scripts in /usr/share/logwatch/scripts/services

http-error: changed lines 38, 51-53 and 66

#!/usr/bin/perl -w
#
# $Id$
#
# Logwatch service for http error logs
# To be placed in
#       /etc/logwatch/scripts/http-error
#
# Processes all messages and summarizes them
# Each message is given with a timestamp and RMS
#
########################################################
##(C) 2006 by Jeremias Reith <jr@terragate.net>
## Modified 2009 by Michael Baierl
## Covered under the included MIT/X-Consortium License:
##    http://www.opensource.org/licenses/mit-license.php
## All modifications and contributions by other persons to
## this script are assumed to have been donated to the
## Logwatch project and thus assume the above copyright
## and licensing terms.  If you want to make contributions
## under your own copyright or a different license this
## must be explicitly stated in the contribution an the
## Logwatch project reserves the right to not accept such
## contributions.  If you have made significant
## contributions to this script and want to claim
## copyright please contact logwatch-devel@lists.sourceforge.net.
#########################################################

#my $BaseDir = "/usr/share/logwatch";
use lib "/usr/share/logwatch/lib";

use strict;
use Logwatch ':dates';
use Time::Local;
use POSIX qw(strftime);

my $date_format = '%a %b %d %H:%M:%S....... %Y';
my $filter = TimeFilter($date_format);
my $detail = exists $ENV{'LOGWATCH_DETAIL_LEVEL'} ? $ENV{'LOGWATCH_DETAIL_LEVEL'} : 0;

# we do not use any Date:: package (or strptime) as they are probably not available
my %month2num = ( Jan => 0, Feb => 1, Mar => 2, Apr => 3,
May => 4, Jun => 5, Jul => 6, Aug => 7,
Sep => 8, Oct => 9, Nov => 10, Dec => 11 );

# array of message categories (we do not use a hash to keep the order)
# first element: catorory name
# second element: matching regexp ($1 should contain the message)
# third element: anonymous hash ref (stores message  counts)
my @message_categories = (['Errors', qr/\[\w+:error\] (.*)$/o, {}],
['Warnings', qr/\[\w+:warn\] (.*)$/o, {}],
['Notices', qr/\[\w+:notice\] (.*)$/o, {}]);

# skipping categories depending on detail level
pop(@message_categories) if $detail < 10;
pop(@message_categories) if $detail < 5;

# counting messages
while(<>) {
my $line = $_;
# skipping messages that are not within the requested range
next unless $line =~ /^\[($filter)\]/o;
# skip PHP messages (have a separate script)
next if $line =~ / PHP (Warning|Fatal error|Notice):/o;
$1 =~ /(\w+) (\w+) (\d+) (\d+):(\d+):(\d+\.\d+) (\d+)/;
my $time;

{
# timelocal is quite chatty
local $SIG{'__WARN__'}  = sub {};
$time = timelocal(int($6), $5, $4, $3, $month2num{$2}, $7-1900);
}

foreach my $cur_cat (@message_categories) {
if($line =~ /$cur_cat->[1]/) {
my $msgs = $cur_cat->[2];
$msgs->{$1} = {count => '0',
first_occurrence => $time,
sum => 0,
sqrsum => 0} unless exists $msgs->{$1};
$msgs->{$1}->{'count'}++;
# summing up timestamps and squares of timestamps
# in order to calculate the rms
# using first occurrence of message as offset in calculation to
# prevent an integer overflow
$msgs->{$1}->{'sum'} += $time - $msgs->{$1}->{'first_occurrence'};
$msgs->{$1}->{'sqrsum'} += ($time - $msgs->{$1}->{'first_occurrence'}) ** 2;
last;
}
}
}

# generating summary
foreach my $cur_cat (@message_categories) {
# skipping non-requested message types
next unless keys %{$cur_cat->[2]};
my ($name, undef, $msgs) = @{$cur_cat};
print $name, ":\n";
my $last_count = 0;

# sorting messages by count
my @sorted_msgs = sort { $msgs->{$b}->{'count'} <=> $msgs->{$a}->{'count'} } keys %{$msgs};

foreach my $msg (@sorted_msgs) {
# grouping messages by number of occurrence
print "\n", $msgs->{$msg}->{'count'}, " times:\n" unless $last_count == $msgs->{$msg}->{'count'};
my $rms = 0;

# printing timestamp
print '[';

if($msgs->{$msg}->{'count'} > 1) {
# calculating rms
$rms = int(sqrt(
($msgs->{$msg}->{'count'} *
$msgs->{$msg}->{'sqrsum'} -
$msgs->{$msg}->{'sum'}) /
($msgs->{$msg}->{'count'} *
($msgs->{$msg}->{'count'} - 1))));

print strftime($date_format, localtime($msgs->{$msg}->{'first_occurrence'}+int($rms/2)));

print ' +/-';

# printing rms
if($rms > 86400) {
print int($rms/86400) , ' day(s)';
} elsif($rms > 3600) {
print int($rms/3600) , ' hour(s)';
} elsif($rms > 60) {
print int($rms/60) , ' minute(s)';
} else {
print $rms, ' seconds';
}
} else {
# we have got this message a single time
print strftime($date_format, localtime($msgs->{$msg}->{'first_occurrence'}));
}

print '] ', $msg, "\n";
$last_count = $msgs->{$msg}->{'count'};
}

print "\n";
}

php: changed lines 42 and 68

#!/usr/bin/perl -w
#
###############################################################################
# $Id: php,v 1.2 2008/03/24 23:31:26 kirk Exp $
###############################################################################
# $Log: php,v $
# Revision 1.2  2008/03/24 23:31:26  kirk
# added copyright/license notice to each script
#
# Revision 1.1  2006/11/12 18:28:31  bjorn
# New php service, by Jeremias Reith.
#
###############################################################################
#
# Logwatch service for php error logs
#
# Processes all messages and summarizes them
# Each message is given with a timestamp and RMS

#######################################################
## Copyright (C) 2006 by Jeremias Reith <jr@terragate.net>
## Covered under the included MIT/X-Consortium License:
##    http://www.opensource.org/licenses/mit-license.php
## All modifications and contributions by other persons to
## this script are assumed to have been donated to the
## Logwatch project and thus assume the above copyright
## and licensing terms.  If you want to make contributions
## under your own copyright or a different license this
## must be explicitly stated in the contribution an the
## Logwatch project reserves the right to not accept such
## contributions.  If you have made significant
## contributions to this script and want to claim
## copyright please contact logwatch-devel@lists.sourceforge.net.
#########################################################

use strict;
use Logwatch ':dates';
use Time::Local;
use POSIX qw(strftime);

my $date_format = '%a %b %d %H:%M:%S....... %Y';
my $filter = TimeFilter($date_format);
my $detail = exists $ENV{'LOGWATCH_DETAIL_LEVEL'} ? $ENV{'LOGWATCH_DETAIL_LEVEL'} : 0;

# we do not use any Date:: package (or strptime) as they are probably not available
my %month2num = ( Jan => 0, Feb => 1, Mar => 2, Apr => 3,
May => 4, Jun => 5, Jul => 6, Aug => 7,
Sep => 8, Oct => 9, Nov => 10, Dec => 11 );

# array of message categories (we do not use a hash to keep the order)
# first element: catorory name
# second element: matching regexp ($1 should contain the message)
# third element: anonymous hash ref (stores message  counts)
my @message_categories = (['Fatal errors', qr/\] PHP Fatal error: (.*)$/o, {}],
['Warnings', qr/\] PHP Warning: (.*)$/o, {}],
['Notices', qr/\] PHP Notice: (.*)$/o, {}]);

# skipping categories depending on detail level
pop(@message_categories) if $detail < 10;
pop(@message_categories) if $detail < 5;

# counting messages
while(<>) {
my $line = $_;
# skipping messages that are not within the requested range
next unless $line =~ /^\[($filter)\]/o;
$1 =~ /(\w+) (\w+) (\d+) (\d+):(\d+):(\d+\.\d+) (\d+)/;
my $time;

{
# timelocal is quite chatty
local $SIG{'__WARN__'}  = sub {};
$time = timelocal(int($6), $5, $4, $3, $month2num{$2}, $7-1900);
}

foreach my $cur_cat (@message_categories) {
if($line =~ /$cur_cat->[1]/) {
my $msgs = $cur_cat->[2];
$msgs->{$1} = {count => '0',
first_occurrence => $time,
sum => 0,
sqrsum => 0} unless exists $msgs->{$1};
$msgs->{$1}->{'count'}++;
# summing up timestamps and squares of timestamps
# in order to calculate the rms
# using first occurrence of message as offset in calculation to
# prevent an integer overflow
$msgs->{$1}->{'sum'} += $time - $msgs->{$1}->{'first_occurrence'};
$msgs->{$1}->{'sqrsum'} += ($time - $msgs->{$1}->{'first_occurrence'}) ** 2;
last;
}
}
}

# generating summary
foreach my $cur_cat (@message_categories) {
# skipping non-requested message types
next unless keys %{$cur_cat->[2]};
my ($name, undef, $msgs) = @{$cur_cat};
print $name, ":\n";
my $last_count = 0;

# sorting messages by count
my @sorted_msgs = sort { $msgs->{$b}->{'count'} <=> $msgs->{$a}->{'count'} } keys %{$msgs};

foreach my $msg (@sorted_msgs) {
# grouping messages by number of occurrence
print "\n", $msgs->{$msg}->{'count'}, " times:\n" unless $last_count == $msgs->{$msg}->{'count'};
my $rms = 0;

# printing timestamp
print '[';

if($msgs->{$msg}->{'count'} > 1) {
# calculating rms
$rms = int(sqrt(
($msgs->{$msg}->{'count'} *
$msgs->{$msg}->{'sqrsum'} -
$msgs->{$msg}->{'sum'}) /
($msgs->{$msg}->{'count'} *
($msgs->{$msg}->{'count'} - 1))));

print strftime($date_format, localtime($msgs->{$msg}->{'first_occurrence'}+int($rms/2)));

print ' +/-';

# printing rms
if($rms > 86400) {
print int($rms/86400) , ' day(s)';
} elsif($rms > 3600) {
print int($rms/3600) , ' hour(s)';
} elsif($rms > 60) {
print int($rms/60) , ' minute(s)';
} else {
print $rms, ' seconds';
}
} else {
# we have got this message a single time
print strftime($date_format, localtime($msgs->{$msg}->{'first_occurrence'}));
}

print '] ', $msg, "\n";
$last_count = $msgs->{$msg}->{'count'};
}

print "\n";
}

# vi: shiftwidth=3 tabstop=3 et
# Local Variables:
# mode: perl
# perl-indent-level: 3
# indent-tabs-mode: nil
# End:

After the addition of these files, Logwatch returned output from the error logs for my web server.