Let's put this website on a git repo as well

This commit is contained in:
Yorhel 2011-01-27 13:59:04 +01:00
commit 3f1707622a
6 changed files with 935 additions and 0 deletions

91
dat/ncdu-changelog Normal file
View file

@ -0,0 +1,91 @@
1.7 - 2010-08-13
- List the detected hard links in file info window
- Count the size of a hard linked file once for each directory it appears in
- Fixed crash on browsing dirs with a small window size (#2991787)
- Fixed buffer overflow when some directories can't be scanned (#2981704)
- Fixed segfault when launched on a nonexistant directory (#3012787)
- Fixed segfault when root dir only contains hidden files
- Improved browsing performance
- More intuitive multi-page browsing
- Display size graph by default
- Various minor fixes
1.6 - 2009-10-23
- Implemented hard link detection
- Properly select the next item after deletion
- Removed reliance of dirfd()
- Fixed non-void return in void delete_process()
- Fixed several tiny memory leaks
- Return to previously opened directory on failed recalculation
- Properly display MiB units instead of MB (IEEE 1541 - bug #2831412)
- Link to ncursesw when available
- Improved support for non-ASCII characters
- VIM keybindings for browsing through the tree (#2788249, #1880622)
1.5 - 2009-05-02
- Fixed incorrect apparent size on directory refresh
- Browsing keys now work while file info window is displayed
- Current directory is assumed when no directory is specified
- Size graph uses the apparent size if that is displayed
- Items are ordered by displayed size rather than disk usage
- Removed switching between powers of 1000/1024
- Don't rely on the availability of suseconds_t
- Correctly handle paths longer than PATH_MAX
- Fixed various bugs related to rpath()
- Major code rewrite
- Fixed line width when displaying 100%
1.4 - 2008-09-10
- Removed the startup window
- Filenames ending with a tidle (~) will now also be hidden with the 'h'-key
- Fixed buffer overflow when supplying a path longer than PATH_MAX (patch by Tobias Stoeckmann)
- Used S_BLKSIZE instead of a hardcoded block size of 512
- Fixed display of disk usage and apparent sizes
- Updated ncdu -h
- Included patches for Cygwin
- Cursor now follows the selected item
- Added spaces around path (debian #472194)
- Fixed segfault on empty directory (debian #472294)
- A few code rewrites and improvements
1.3 - 2007-08-05
- Added 'r'-key to refresh the current directory
- Removed option to calculate apparent size: both the disk usage and the apparent size are calculated.
- Added 'a'-key to switch between showing apparent size and disk usage.
- Added 'i'-key to display information about the selected item.
- Small performance improvements
- configure checks for ncurses.h (bug #1764304)
1.2 - 2007-07-24
- Fixed some bugs on cygwin
- Added du-like exclude patterns
- Fixed bug #1758403: large directories work fine now
- Rewrote a large part of the code
- Fixed a bug with wide characters
- Performance improvements when browsing large dir
1.1 - 2007-04-30
- Deleting files and directories is now possible from within ncdu.
- The key for sorting directories between files has changed to 't' instead of 'd'.
The 'd'-key is now used for deleting files.
1.0 - 2007-04-06
- First stable release
- Small code cleanup
- Added a key to toggle between sorting dirs before files and dirs between files
- Added graphs and percentages to the directory browser (can be enabled or disabled with the 'g'-key)
0.3 - 2007-03-04
- When browsing back to the previous directory, the directory you're getting
back from will be selected.
- Added directory scanning in quiet mode to save bandwidth on remote connections.
0.2 - 2007-02-26
- Fixed compliance with some operating systems: replaced realpath() with with my own
implementation, and gettimeofday() is not required anymore (but still highly recommended)
- Added a warning for terminals smaller than 60x16
- Mountpoints (or any other directory pointing to another filesystem) are now considered to be
directories rather than files.
0.1 - 2007-02-21
- Initial version

135
dat/ncdu-man Normal file
View file

@ -0,0 +1,135 @@
ncdu(1) ncdu manual ncdu(1)
NAME
ncdu - NCurses Disk Usage
SYNOPSIS
ncdu [-hqvx] [--exclude PATTERN] [-X FILE] dir
DESCRIPTION
ncdu (NCurses Disk Usage) is a curses-based version of the well-known
'du', and provides a fast way to see what directories are using your
disk space.
OPTIONS
-h Print a small help message
-q Quiet mode. While calculating disk space, ncdu will update the
screen 10 times a second by default, this will be decreased to
once every 2 seconds in quiet mode. Use this feature to save
bandwidth over remote connections.
-v Print version.
-x Only count files and directories on the same filesystem as the
specified dir.
--exclude PATTERN
Exclude files that match PATTERN. This argument can be added
multiple times to add more patterns.
-X FILE, --exclude-from FILE
Exclude files that match any pattern in FILE. Patterns should be
separated by a newline.
KEYS
? Show help + keys + about screen
up, down j, k
Cycle through the items
right, enter, l
Open selected directory
left, <, h
Go to parent directory
n Order by filename (press again for descending order)
s Order by filesize (press again for descending order)
a Toggle between showing disk usage and showing apparent size.
d Delete the selected file or directory. An error message will be
shown when the contents of the directory do not match or do not
exist anymore on the filesystem.
t Toggle dirs before files when sorting.
g Toggle between showing percentage, graph, both, or none. Per-
centage is relative to the size of the current directory, graph
is relative to the largest item in the current directory.
e Show/hide 'hidden' or 'excluded' files and directories. Please
note that even though you can't see the hidden files and direc-
tories, they are still there and they are still included in the
directory sizes. If you suspect that the totals shown at the
bottom of the screen are not correct, make sure you haven't
enabled this option.
i Show information about the current selected item.
r Refresh/recalculate the current directory.
q Quit
HARD LINKS
Every disk usage analysis utility has its own way of (not) counting
hard links. There does not seem to be any universally agreed method of
handling hard links, and it is even inconsistent among different ver-
sions of ncdu. This section explains what each version of ncdu does.
ncdu 1.5 and below does not support any hard link detection at all:
each link is considered a separate inode and its size is counted for
every link. This means that the displayed directory sizes are incorrect
when analyzing directories which contain hard links.
ncdu 1.6 has basic hard link detection: When a link to a previously
encountered inode is detected, the link is considered to have a file
size of zero bytes. Its size is not counted again, and the link is
indicated in the browser interface with a 'H' mark. The displayed
directory sizes are only correct when all links to an inode reside
within that directory. When this is not the case, the sizes may or may
not be correct, depending on which links were considered as "duplicate"
and which as "original". The indicated size of the topmost directory
(that is, the one specified on the command line upon starting ncdu) is
always correct.
ncdu 1.7 has improved hard link detection. Each file that has more than
two links has the "H" mark visible in the browser interface. Each hard
link is counted exactly once for every directory it appears in. The
indicated size of each directory is therefore, correctly, the sum of
the sizes of all unique inodes that can be found in that directory.
Note, however, that this may not always be same as the space that will
be reclaimed after deleting the directory, as some inodes may still be
accessible from hard links outside it.
BUGS
Directory hard links are not supported. They will not be detected as
being hard links, and will thus be scanned and counted multiple times.
Some minor glitches may appear when displaying filenames that contain
multibyte or multicolumn characters.
Please report any other bugs you may find at the bug tracker, which can
be found on the web site at http://dev.yorhel.nl/ncdu
AUTHOR
Written by Yoran Heling <projects@yorhel.nl>.
SEE ALSO
du(1)
ncdu-1.7 Aug 13, 2010 ncdu(1)

BIN
img/bluecubes.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
img/grenamr.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

BIN
img/ncdu.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

709
index.cgi Executable file
View file

@ -0,0 +1,709 @@
#!/usr/bin/perl
use strict;
use warnings;
use TUWF ':html';
use Cwd 'abs_path';
our $ROOT;
BEGIN { ($ROOT = abs_path $0) =~ s{index\.cgi$}{}; }
TUWF::register(
qr{} => \&home,
qr{ncdu} => \&ncdu,
qr{ncdu/changes} => \&ncduchangelog,
qr{ncdu/man} => \&ncdumanual,
qr{tuwf} => \&tuwf,
qr{tuwf/man(?:/(db|misc|request|response|xml))?}
=> \&tuwfmanual,
qr{demo} => \&demo,
qr{dump} => \&dump,
qr{dump/awshrink} => \&dumpawshrink,
qr{dump/grenamr} => \&dumpgrenamr,
);
TUWF::set(
logfile => '/www/err.log',
error_404_handler => \&notfound,
);
TUWF::run();
# H O M E P A G E
sub home {
my $s = shift;
$s->htmlHeader(title => 'Yorhel\'s projects');
p;
lit <<' E;';
This site is an attempt to publish and organise my various opensource programs
and libraries on one central location, possibly documented as well as possible
so it might actually be useful to anyone. Some of these projects might end up to
be total crap, and some might not be useful to anyone at all. I'll simply try to
dump most of the things I create here, and leave it up to you whatever you decide
to do with it.
E;
end;
h2 'Updates';
b '2011-01-27'; txt ' Documented and uploaded one of my older projects: TUWF'; br;
b '2011-01-09'; txt ' Added my json.mll OCaml library to code dump'; br;
b '2010-08-13'; txt ' ncdu 1.7 released!'; br;
b '2009-12-22'; txt ' Added vinfo.c script to code dump'; br;
b '2009-10-23'; txt ' ncdu 1.6 released!'; br;
b '2009-09-21'; txt ' Tiny CSS fix to make this site look good in certain configurations.'; br;
b '2009-05-02'; txt ' ncdu 1.5 released!'; br;
b '2009-04-30'; txt " Site redesign and reorganisation."; br;
$s->htmlFooter;
}
# N C D U
sub ncdu {
my $s = shift;
$s->htmlHeader(title => 'NCurses Disk Usage', page => 'ncdu');
img style => 'float: right', src => '/img/ncdu.png', alt => 'ncdu';
p;
lit <<' E;';
Not quite happy with the available disk usage analyzers and looking for a fun
project to get used to C programming, I started working on ncdu: A disk usage
analyzer with an ncurses interface, aimed to be run on a remote server where
you don't have an entire gaphical setup, but have to do with a simple SSH
connection. ncdu aims to be fast, simple and easy to use, and should be able
to run in any minimal POSIX-like environment with ncurses installed.
E;
br; br;
b 'Latest version: ';
txt '1.7 (';
a href => 'http://dev.yorhel.nl/download/ncdu-1.7.tar.gz', 'download';
txt ' - ';
a href => '/ncdu/changes', 'changes';
txt ' - ';
a href => 'http://sourceforge.net/project/showfiles.php?group_id=200175', 'mirror';
txt ' - ';
a href => '/download/ncdu.md5', 'md5';
txt ' - ';
a href => '/download/ncdu.sha1', 'sha1';
txt ")"; br;
b 'Requirements: '; txt 'A POSIX-like system and the ncurses library'; br;
txt 'Entirely written in C and available under a liberal MIT license.';
end;
h2 'Packages and ports';
p 'ncdu has been packaged for various systems already, here\'s a list of the ones I am aware of:';
a href => 'http://www.archlinux.org/packages/community/i686/ncdu/', 'Arch Linux'; txt ' - ';
a href => 'http://crux.nu/portdb/?q=ncdu&a=search', 'CRUX'; txt ' - ';
a href => 'http://cygwin.com/packages/ncdu/', 'Cygwin'; txt ' - ';
a href => 'http://packages.debian.org/ncdu', 'Debian'; txt ' - ';
a href => 'https://admin.fedoraproject.org/pkgdb/acls/name/ncdu', 'Fedora'; txt ' - ';
a href => 'http://www.freshports.org/sysutils/ncdu/', 'FreeBSD'; txt ' - ';
a href => 'http://packages.gentoo.org/package/sys-fs/ncdu', 'Gentoo'; txt ' - ';
a href => 'http://www.ipcopaddons.org/addondb.php?action=detail&addonid=67', 'IPCop'; txt ' - ';
a href => 'http://www.openbsd.org/cgi-bin/cvsweb/ports/sysutils/ncdu/', 'OpenBSD'; txt ' - ';
a href => 'http://packman.links2linux.de/package/ncdu/182992', 'OpenSUSE'; txt ' - ';
txt 'Mac OS X (';
a href => 'http://ncdu.darwinports.com/', 'Darwin Ports'; txt '-';
a href => 'http://pdb.finkproject.org/pdb/package.php/ncdu', 'Fink';
txt ') - ';
a href => 'http://paketler.pardus.org.tr/info/2009/stable/source/ncdu.html', 'Pardus'; txt ' - ';
txt 'Solaris (';
a href => 'http://www.opencsw.org/packages/ncdu', 'CSW'; txt '-';
a href => 'http://www.sunfreeware.com/', 'sunfreeware';
txt ') - ';
a href => 'http://slackbuilds.org/repository/12.1/system/ncdu/', 'Slackware'; txt ' - ';
a href => 'http://packages.ubuntu.com/search?searchon=sourcenames&keywords=ncdu', 'Ubuntu'; txt ' - ';
a href => 'http://zur.zenwalk.org/view/package/name/ncdu', 'Zenwalk';
br;
p;
b 'Warning: ';
txt 'Some of these packages are extremely outdated. I highly recommend to use at least ncdu 1.6, anything older than that is hardly usable.';
end;
br; br;
txt 'Subscribe to ';
a href => 'http://freshmeat.net/projects/ncdu', 'freshmeat';
txt ' or to ';
a href => 'https://sourceforge.net/api/file/index/project-id/200175/mtime/desc/rss', 'this RSS feed at sf.net';
txt ' to receive notifications for new releases.';
h2 'Development access';
p;
txt 'The most recent code is available on a git repository and is ';
a href => 'http://g.blicky.net/ncdu.git/', 'available for online browsing';
txt '.';
end;
h2 'Similar projects';
a href => 'http://gt5.sourceforge.net/', 'gt5'; txt " - Quite similar to ncdu, but a different approach."; br;
a href => 'http://webonastick.com/tdu/', 'tdu'; txt " - Another small ncurses-based disk usage visualization utility."; br;
a href => 'http://treesize.sourceforge.net/', 'TreeSize'; txt " - Same goal, but in GTK this time."; br;
a href => 'http://www.marzocca.net/linux/baobab.html', 'Baobab'; txt " - Another GTK disk usage analyzer, comes with GNOME."; br;
a href => 'http://www.methylblue.com/filelight/', 'Filelight'; txt " - And one for KDE."; br;
$s->htmlFooter;
}
sub ncduchangelog {
my $s = shift;
$s->htmlHeader(title => 'Version history', page => 'ncdu', tab => 'changes');
$s->htmlChangeLog('ncdu');
$s->htmlFooter;
}
sub ncdumanual {
my $s = shift;
$s->htmlHeader(title => 'Manual page', page => 'ncdu', tab => 'man');
open my $F, '<', "$ROOT/dat/ncdu-man" or die $!;
pre;
txt $_ while(<$F>);
end;
close $F;
$s->htmlFooter;
}
# T U W F
sub tuwf {
my $s = shift;
$s->htmlHeader(title => 'The Ultimate Website Framework', page => 'tuwf');
lit <<' E;';
TUWF is a very small and lightweight web development framework for Perl. It
has evolved from being a few abstraction layers in two large websites to a
separate set of modules. While initially designed to be used for large and
complex websites, it is also perfectly suited for small single-file
websites.
E;
h2 'Main features';
ul;
li 'Very small, and no extra modules required,';
li 'Easy URI-to-function mapping using regular expressions,';
li 'Handy form validation functions,';
li 'Easy XML/XHTML output generation functions,';
li 'Response buffering and output compression,';
li 'Easy access to GET/POST data and cookies,';
li 'Support for CGI and FastCGI - optimized for FastCGI,';
li 'Uses UTF-8 for all text,';
li 'Convenient SQL execution functions and correct transaction handling,';
li 'Promotes code re-use,';
li 'Open source (duh!) and available under a liberal MIT license.';
end;
lit <<' E;';
Read the <a href="/tuwf/man#DESCRIPTION">description</a> in the
documentation for more information and details.
E;
h2 'Download';
lit <<' E;';
TUWF is available on a git repository at <a href="http://g.blicky.net/tuwf.git/">
http://g.blicky.net/tuwf.git/</a>.<br />
Easier-to-use packages will most likely be available here and on CPAN after
a testing period.
E;
h2 'Websites using TUWF';
txt '(Not a whole lot)';
ul;
li;
a href => 'http://vndb.org/', 'VNDB.org';
txt ' (the site that spawned TUWF - ';
a href => 'http://g.blicky.net/vndb.git/', 'open source';
txt ')';
end;
li;
a href => 'http://dev.yorhel.nl/', 'This website'; txt ' (also ';
a href => 'http://g.blicky.net/yorhel-dev.git/tree/index.cgi', 'open source';
txt ')';
end;
li; a href => 'http://yorhel.nl/', 'Yorhel.nl'; end;
end;
$s->htmlFooter;
}
sub tuwfmanual {
my $s = shift;
my $man = shift || '';
$s->htmlHeader(title => 'TUWF Documentation', page => 'tuwf', tab => 'man');
my %mod = (qw|db DB xml XML|);
for ('', qw|db misc request response xml|) {
my $n = 'TUWF'.($_ ? '::'.(($mod{$_} || ucfirst $_)) : '');
txt ', ' if $_;
a href => '/tuwf/man'.($_ ? "/$_" : ''), $n
if $_ ne $man;
b $n if $_ eq $man;
}
br; br;
my $mod = 'TUWF';
$mod .= '/'.($mod{$man} || ucfirst $man) if $man;
(my $f = $INC{"$mod.pm"}) =~ s/\.pm$/.pod/;
$s->htmlPOD($f);
$s->htmlFooter;
}
# D E M O S
sub demo {
my $s = shift;
$s->htmlHeader(title => 'Demos', page => 'demo');
p;
lit <<' E;';
Yes, I realise that the title is plural, suggesting there's more than one demo. That is
not quite true, unfortunately. The reason I chose to use plural form is simply in the
hopes that I do, in fact, write more demos, and that this page will actually get more
content in the future. I still happen to be a huge fan of the <a href="http://demoscene.info/">
demoscene</a>, and still wish to contribute to it... if only I could find the time and
self-discipline to do so. In the meanwhile, here's one demo I did write some time ago:
E;
end;
h2 'Blue Cubes';
img src => '/img/bluecubes.png', style => 'float: right', alt => 'Blue Cubes';
p;
lit <<' E;';
August 2006. My first demo - or more exact: intro. Blue Cubes is a 64kB intro written in
OpenGL/SDL with Linux as target OS. I wrote this intro within 10 days without any prior
experience in any of the fields of computer generated graphics or music. So needlessly to
say, it sucks. I am ashamed even of the thought of releasing it at a respectable demoparty
like <a href="http://www.evoke.eu/2006/">Evoke</a>. Still, it didn't feel I was unwelcome,
I did actually receive three prices: 3rd price in the 64k competition (there were only 3
actual entries, but oh well), best non-windows 64k intro (it was the only one in the
competition), and the Digitale Kultur newcomer award, which actually is something to be
proud of, I guess.
E;
br; br;
a href => '/download/yorhel~bluecubes.zip', 'download';
txt ' - ';
a href => 'http://scene.org/file.php?file=/parties/2006/evoke06/in64/yorhel_bluecubes.zip&fileinfo', 'mirror';
txt " (includes linux binaries, windows port, and sources)"; br;
a href => 'http://pouet.net/prod.php?which=25866', 'pouet'; txt ' - ';
a href => 'http://demoscene.tv/page.php?id=172&lang=uk&vsmaction=view_prod&id_prod=12653', 'demoscene.tv'; txt ' - ';
a href => 'http://demozoo.org/productions/32253', 'demozoo';
end;
$s->htmlFooter;
}
# C O D E D U M P
sub dump {
my $s = shift;
$s->htmlHeader(title => 'Code Dump', page => 'dump');
p 'Most of the things I write are simple perl/shell scripts or programs that only '
.'serve the purpose of learning something new. This page is a listing of those I '
.'thought might be of interest to others as well.';
h2 'bbcode.c';
p;
txt 'January 2006. Simple BBCode to HTML converter written in plain C, for learning '
.'puroses. ';
a href => '/download/code/bbcode.c', 'source';
end;
h2 'echoserv.c';
p;
txt 'February 2006. A simple non-blocking single-threaded TCP echo server, '
.'displaying how the select() system call can be used to handle multiple '
.'connections. ';
a href => '/download/code/echoserv.c', 'source';
end;
h2 'yapong.c';
p;
txt 'Feburary 2006. Yet Another Pong, and yet another program written just for testing/'
.'learning purposes. Tested to work with the ncurses or pdcurses libraries. ';
a href => '/download/code/yapong.c', 'source';
txt ' (';
a href => '/download/code/yapong-0.01.c', '0.01';
txt ')';
end;
h2 'Microdc2 log file parser';
p;
lit <<' E;';
June 2007. Simple perl script that parses log files created by
<a href="http://corsair626.no-ip.org/microdc/">microdc2</a> and outputs a simple and
ugly html file with all uploaded files. It correctly merges chunked uploads, calculates
average upload speed per file and total bandwidth used for uploads.
E;
a href => '/download/code/mdc2-parse.pl', 'source';
end;
h2 'vinfo.c';
p;
lit <<' E;';
November 2009. The <a href="http://vndb.org/d11">public VNDB API</a> was designed to be
easy to use even from low level languages. I wrote this simple program to see how much
work it would be to use the API in C, and as example code for anyone wishing to use the
API for something more useful. Read the comments for more info.
E;
a href => '/download/code/vinfo.c', 'source';
end;
h2 'json.mll';
p;
lit <<' E;';
December 2010. I was writing a client for the <a
href="http://vndb.org/d11">public VNDB API</a> in OCaml and needed a JSON
parser/generator. Since I wasn't happy with the currently available
solutions - they try to do too many things and have too many dependencies -
I decided to write a minimal JSON library myself.
E;
a href => 'http://g.blicky.net/serika.git/tree/json.mll', 'source';
end;
$s->htmlFooter;
}
sub dumpawshrink {
my $s = shift;
$s->htmlHeader(title => 'AWStats data file shrinker', page => 'dump', tab => 'awshrink');
p;
txt 'People who run AWStats on large log files have most likely noticed: the data files can '
.'grow quite large, resulting in both a waste of disk space and longer page generation '
.'times for the AWStats pages. I wrote a small script that analyzes these data files and '
."can remove any information you think is unnecessary.";
br; br;
b 'Download: ';
a href => '/download/code/awshrink', 'awshrink';
txt ' (copy to /usr/bin to install)';
end;
h2 'Important';
txt 'Do NOT use this script on data files that are not completed yet (i.e. data files of the '
.'month you\'re living in). This will result in inaccurate sorting of visits, pages, '
.'referers and whatever other list you\'re shrinking. Also, keep in mind that this is just '
.'a fast written perl hack, it is by no means fast and may hog some memory while shrinking '
.'data files.';
h2 'Usage';
pre class => 'code', q|awshrink [-c -s] [-SECTION LINES] [..] datafile
-s Show statistics
-c Overwrite datafile instead of writing to a backupfile (datafile~)
-SECTION LINES
Shrink the selected SECTION to LINES lines. (See example below)|;
h2 'Typical command-line usage';
p 'While awshrink is most useful for monthly cron jobs, here\'s an example of basic command line '
.'usage to demonstrate what the script can do:';
pre class => 'code', join "\n", grep s/^\s{4}//||1, split /\n/, <<' E;';
$ wc -c awstats122007.nedtlyrics.txt
29916817 awstats122007.nedtlyrics.txt
$ awshrink -s awstats122007.nedtlyrics.txt
Section Size (Bytes) Lines
SCREENSIZE* 74 0
WORMS 131 0
EMAILRECEIVER 135 0
EMAILSENDER 143 0
CLUSTER* 144 0
LOGIN 155 0
ORIGIN* 178 6
ERRORS* 229 10
SESSION* 236 7
FILETYPES* 340 12
MISC* 341 10
GENERAL* 362 8
OS* 414 29
SEREFERRALS 587 34
TIME* 1270 24
DAY* 1293 31
ROBOT 1644 40
BROWSER 1992 127
DOMAIN 2377 131
UNKNOWNREFERERBROWSER 5439 105
UNKNOWNREFERER 20585 317
SIDER_404 74717 2199
PAGEREFS 130982 2500
KEYWORDS 288189 27036
SIDER 1058723 25470
SEARCHWORDS 5038611 157807
VISITOR 23285662 416084
* = not shrinkable
$ awshrink -s -c -VISITOR 100 -SEARCHWORDS 100 -SIDER 100 awstats122007.nedtlyrics.txt
Section Size (Bytes) Lines
SCREENSIZE* 74 0
WORMS 131 0
EMAILRECEIVER 135 0
EMAILSENDER 143 0
CLUSTER* 144 0
LOGIN 155 0
ORIGIN* 178 6
ERRORS* 229 10
SESSION* 236 7
FILETYPES* 340 12
MISC* 341 10
GENERAL* 362 8
OS* 414 29
SEREFERRALS 587 34
TIME* 1270 24
DAY* 1293 31
ROBOT 1644 40
BROWSER 1992 127
SEARCHWORDS 2289 100
DOMAIN 2377 131
SIDER 3984 100
UNKNOWNREFERERBROWSER 5439 105
VISITOR 5980 100
UNKNOWNREFERER 20585 317
SIDER_404 74717 2199
PAGEREFS 130982 2500
KEYWORDS 288189 27036
* = not shrinkable
$ wc -c awstats122007.nedtlyrics.txt
546074 awstats122007.nedtlyrics.txt
E;
$s->htmlFooter;
}
sub dumpgrenamr {
my $s = shift;
$s->htmlHeader(title => 'GTK+ Mass File Renamer', page => 'dump', tab => 'grenamr');
p;
lit <<' E;';
GRenamR is a GTK+ mass file renamer written in Perl, the functionality is insipred
by the <a href="http://search.cpan.org/~rmbarker/File-Rename-0.05/rename.PL">rename</a>
command that comes with a Perl module.<br />
<br />
GRenamR allows multiple file renaming using perl expressions. You can see the effects
of your expression while typing it, and can preview your action before applying them.
The accepted expressions are mostly the same as the rename command (see above paragrah):
your expression will be evaluated with $_ set to the filename, and any modifications
to this variable will result in the renaming of the file. There's one other variable
that the rename command does not have: $i, which reflects the file number (starting from
0) in the current list. This allows expressions such as as <code>$_=sprintf'%03d.txt',$i</code>.
E;
br; br;
b 'Download: ';
a href => '/download/code/grenamr-0.1.pl', 'grenamr';
txt " (copy to /usr/bin/ to install)"; br;
txt "Requires the Gtk2 Perl module (most distributions have a perl-gtk2 package)"; br;
end;
h2 'Example expressions';
table;
Tr; td style => 'width: 40%'; code 'y/A-Z/a-z/'; txt ' or '; code '$_=lc'; end; td 'Convert filenames to lowercase'; end;
Tr; td; code 's/\.txt$/.utf8/'; end; td "Change all '.txt' extensions to '.utf8'"; end;
Tr; td; code q|s/([0-9]+)/sprintf'%04d',$1/eg|; end; td 'Zero-pad all numbers in filenames'; end;
Tr; td; code q|s/^.+\.jpg$/sprintf'%03d.jpg',$i+1/e|; end; td 'Replace each image filename with a zero-padded number starting from 1'; end;
end;
h2 'Caveats / bugs / TODO';
ul;
li q|Calling functions as 'sleep' or 'exit' in the expression will trash the program|;
li q|It's currently not possible to manually order the file list, so $i is not useful in every situation|;
li q|It's currently not possible to manually rename files or exclude items from being effected by the expression|;
li; lit q|The expression isn't executed in the opened directory, so things like
<a href="http://perldoc.perl.org/functions/-X.html">-X</a> won't work|; end;
end;
h2 'Screenshot';
img src => '/img/grenamr.png', alt => 'GRenamR';
$s->htmlFooter;
}
sub notfound {
my $s = shift;
my $u = lc $s->reqPath;
($_->[0] eq $u || $_->[0] eq "$u/") && return $s->resRedirect($_->[1], 'perm') for (
[ 'bluecubes', '/demo' ],
[ 'dump', '/dump' ],
[ 'dump/index2', '/dump' ],
[ 'dump/pmdc2-parse', '/dump' ],
[ 'dump/cbbcode', '/dump' ],
[ 'dump/cechoserv', '/dump' ],
[ 'dump/cyapong', '/dump' ],
[ 'dump/awshrink', '/dump/awshrink' ],
[ 'dump/grenamr', '/dump/grenamr' ],
);
return $s->resRedirect("/$u", 'perm') if $u =~ s/\/$//;
$s->resStatus(404);
$s->htmlHeader(title => 'Page Not Found');
$s->htmlFooter;
}
# U T I L I T Y M E T H O D S
package TUWF::Object;
use TUWF ':html';
sub htmlHeader {
my($self, %o) = @_;
$o{page} ||= '';
$o{tab} ||= '';
html;
head;
title $o{title};
style type => 'text/css';
lit $self->css;
end;
end;
body;
div id => 'menu';
a href => '/', !$o{page} ? (class => 'sel') : (), 'home'; txt ' ';
a href => '/ncdu', $o{page} eq 'ncdu' ? (class => 'sel') : (), 'ncdu'; txt ' ';
a href => '/tuwf', $o{page} eq 'tuwf' ? (class => 'sel') : (), 'tuwf'; txt ' ';
a href => '/demo', $o{page} eq 'demo' ? (class => 'sel') : (), 'demos'; txt ' ';
a href => '/dump', $o{page} eq 'dump' ? (class => 'sel') : (), 'code dump';
end;
if($o{page} eq 'ncdu') {
div id => 'mtabs';
a href => '/ncdu', !$o{tab} ? (class => 'sel') : (), 'main'; txt ' ';
a href => '/ncdu/changes', $o{tab} eq 'changes' ? (class => 'sel') : (), 'changelog'; txt ' ';
a href => '/ncdu/man', $o{tab} eq 'man' ? (class => 'sel') : (), 'manual'; txt ' ';
a href => 'http://sourceforge.net/tracker/?group_id=200175', 'bug tracker (sf)';
end;
}
if($o{page} eq 'tuwf') {
div id => 'mtabs';
a href => '/tuwf', !$o{tab} ? (class => 'sel') : (), 'main'; txt ' ';
a href => '/tuwf/man', $o{tab} eq 'man' ? (class => 'sel') : (), 'manual'; txt ' ';
end;
}
if($o{page} eq 'dump') {
div id => 'mtabs';
a href => '/dump', !$o{tab} ? (class => 'sel') : (), 'misc'; txt ' ';
a href => '/dump/awshrink', $o{tab} eq 'awshrink' ? (class => 'sel') : (), 'awshrink'; txt ' ';
a href => '/dump/grenamr', $o{tab} eq 'grenamr' ? (class => 'sel') : (), 'grenamr';
end;
}
div id => 'main';
h1 $o{title};
}
sub htmlFooter {
end 'div';
p id => 'footer';
lit 'feedback &raquo; ';
a href => 'mailto:projects@yorhel.nl', 'projects@yorhel.nl';
br;
a href => 'http://yorhel.nl', 'yh';
txt ' - ';
a href => 'http://g.blicky.net', 'git';
txt ' - ';
a href => 'http://svn.blicky.net', 'svn';
end;
end 'body';
end 'html';
}
sub htmlChangeLog {
my ($s, $p) = @_;
open my $F, '<', "$ROOT/dat/$p-changelog" or die $!;
ul style => 'margin-left: 0';
for my $v (split /\n\n/, join '', <$F>) {
$v =~ s/^([0-9]+\.[0-9]+)\s+-\s+([0-9]{4}-[0-9]{2}-[0-9]{2})//;
li style => 'list-style-type: none;';
b $1;
txt " - $2 - ";
a href => "/download/$p-$1.tar.gz", "$p-$1.tar.gz";
br;
ul;
for (split(/\r?\n\s+-\s+/, $v)) {
s/[\r\n\s]{2,50}/ /;
li $_ if $_;
}
end;
br;
end;
}
end;
close $F;
}
sub htmlPOD {
my($s, $file) = @_;
require Pod::Simple::HTML;
require Encode; # not really necessary, since the docs are ASCII anyway
my $p = Pod::Simple::HTML->new();
my $html = '';
$p->html_header_before_title('<!--');
$p->html_header_after_title('-->');
$p->html_footer('');
$p->output_string(\$html);
$p->{podhtml_LOT} = {
'TUWF' => '/tuwf/man',
'TUWF::DB' => '/tuwf/man/db',
'TUWF::Misc' => '/tuwf/man/misc',
'TUWF::Request' => '/tuwf/man/request',
'TUWF::Response' => '/tuwf/man/response',
'TUWF::XML' => '/tuwf/man/xml',
};
$p->parse_file($file);
h1 'Table of Contents';
lit Encode::decode_utf8($p->index_as_html());
div class => 'pod';
lit Encode::decode_utf8($html);
end;
}
sub css {
return <<__;
* { padding: 0; margin: 0; font: 15px "Lucida Grande", "Arial", "Helvetica", "Verdana", sans-serif; }
body { background: #222; text-align: center; color: #ccc }
a { text-decoration: none; color: #666 }
a:hover { text-decoration: underline }
#menu { background: #000; border-bottom: 1px solid #666; width: 100%; margin: 0; }
#menu a { line-height: 25px; padding: 5px 8px; margin: 0 2px; color: #ccc; }
#menu a:hover, #menu a.sel { background-color: #222; text-decoration: none }
#main { margin: 30px auto 5px auto; background-color: #000; width: 700px; border: 2px solid #666; text-align: left; padding: 5px 10px 10px 10px }
#mtabs { margin: 30px 0 -28px 0; }
#mtabs a { background-color: #222; color: #ccc; font-size: 13px; margin: 0 2px; padding: 0 10px 3px 10px; border: 1px solid #666; border-bottom: 2px solid #666 }
#mtabs a:hover { background-color: #000; text-decoration: none }
#mtabs a.sel { border-bottom: 2px solid #000; background-color: #000; }
#footer, #footer a { color: #444; margin-bottom: 10px }
h1 { font-size: 19px; color: #888; margin-bottom: 5px; }
h2 { font-size: 16px; color: #888; margin-top: 25px; margin-bottom: 1px; }
b { font-weight: bold; color: #fff }
ul { margin-left: 20px }
pre, code { font: 11px monospace; }
pre.code, .pod pre { background: #111; border: 1px dotted #666; margin: 5px 10px; display: block; padding: 5px; }
.indexgroup ul { margin-left: 5px; list-style-type: none }
.indexgroup ul ul { margin-left: 20px }
.pod p { margin: 3px 15px 13px 15px; text-align: justify }
.pod ul { margin-left: 30px }
.pod ul li { margin-right: 15px; text-align: justify }
.pod pre { padding-left: 0 }
.pod h1 a, .pod h2 a { color: #888; font-weight: bold; font-size: 19px }
.pod h1 { margin-top: 50px }
.pod h2 a { font-size: 16px }
.pod dd { margin-left: 15px }
.pod dt a { color: #888 }
.pod dt { margin-left: 10px }
.pod i { font-style: italic }
__
}