Kernel word recovery crack, Mobile themes website for samsung wave 525, Dekha ek khwab sony tv title song, Song zombies on your lawn, Bloody mary nerve endings mp3, Digittrade tv jukebox, Padosan songs mp3, Gold cup series 70 manual, Nieuwste versie van mozilla firefox en, Cant install spotify on mac, Web brute force password cracker, Belkin g peek driver windows 7

Archive for the ‘Programming’ category

Prochain passage de bus CTS à Strasbourg

February 28th, 2011

Un petit script en Perl qui affiche les prochains passages des bus et des trams dans la CUS Les codes sont affichés aux arrêts, ou peuvent être trouvés sur [cette page][code_arret].

Ce script est prévu pour fonctionner sous Linux et nécessite l’installation du module [HTML::TreeBuilder::Xpath][treebuilder_xpath]. Renommez le fichier joint en *prochainbus*, copiez le dans un répertoire d’exécutables comme */usr/local/bin*, et rendez le exécutable.

Spécifiez le code arrêt sur la ligne de commande, ou créez dans votre répertoire personnel un fichier appelé *.prochainbus* contenant le code d’arrêt.

$ prochainbus -v 272
Arrêt: Hôpital Civil (272)
15h50: 15 Lingolsheim Alouettes
16h05: 15 Lingolsheim Alouettes
15h51: 15 Robertsau Boecklin
16h05: 15 Robertsau Boecklin
$prochainbus 91320
Erreur renvoyée par le site:  Votre saisie comporte les anomalies 
suivantes :Le code arrêt saisie n'existe pas 

Attention, je ne saurais être tenu pour responsable si les informations ne correspondent pas, et que par ce fait vous arriveriez en retard !

*[CUS]: Communauté Urbaine de Strasbourg

[code_arret]: http://tr.cts-strasbourg.fr/CodeArretWeb/
[treebuilder_xpath]: http://search.cpan.org/~mirod/HTML-TreeBuilder-XPath/

Attached Files:

Linux tool to list open files

February 23rd, 2011

There is a tool named lsof that can display which file descriptors are opened by a process. Although it’s very useful, it can be a bit difficult to use, and doesn’t always output the information I need, thus urging me to write a new tool. It is called _of_, it is written in perl and uses the /proc filesystem to get its information. It requires a Linux system with a kernel 2.6.22 or more recent.

### Examples

Some examples to show what it does follow.

List the pid, process name and filename of the files opened by processes that match the name vim:

$of vim
10059 vim.gnome /home/stilgar/bin/.of.swp

List files opened by evolution and only display their filename:

$of --fields f evolution | grep "\.db$" | sort | uniq
/home/me/.evolution/mail/imap/my@mail.com/folders.db
/home/me/.evolution/mail/imap/more@mail.com@provider.net/folders.db
/home/me/.evolution/mail/local/folders.db
/home/me/.evolution/mail/vfolder/folders.db
/home/me/.pki/nssdb/cert9.db
/home/me/.pki/nssdb/key4.db

List all the pipes that are opened by ogmrip and its children (in this case mencoder). This allows us to see what information ogmrip exchanges with mencoder, and in this case retrieve information about mencoder’s progress:

$of --type p --children --show-fd ogmrip
...
2054 ogmrip 19 pipe:[15582]
2054 ogmrip 20 pipe:[15582]
2054 ogmrip 23 pipe:[912459]
2054 ogmrip 25 pipe:[912460]
16132 mencoder 1 pipe:[912459]
16132 mencoder 2 pipe:[912460]
$cat /proc/2054/23
 Pos: 216.6s   5415f (45%) 31.04fps Trem:   3min  45mb  A-V:0.000 [803:0]

Use an environment variable to set a default output format:

$export OF_RC=$'--fields pndlhsf --format "%5d %-15.15s %3d [%-3s] %-7s %-7s %s\n" --unit h'
$of gnome-session -c
...
1670 gnome-panel       2 [RW+] 2.0K    2.0K    /home/stilgar/.xsession-errors
1678 nautilus          1 [RW+] 2.0K    2.0K    /home/stilgar/.xsession-errors
1678 nautilus          2 [RW+] 2.0K    2.0K    /home/stilgar/.xsession-errors
 ...

Which devices does the totem media player open ?

$of totem -c -t v
20360 totem /dev/null
20360 totem /dev/snd/timer
20360 totem /dev/snd/pcmC0D0p

» Read more: Linux tool to list open files

Attached Files:

  • txt of

    List open files

Generate PHP accessors

July 29th, 2009

I’m working on a PHP project right now, and finally got tired of writing the same code over and over again (and a bit nostalgic of Perl, my first love), so here is gen_php_accessors.

#!/usr/bin/perl
# Martijn van der Kwast 2009
# Use and distribute freely
 
use Getopt::Std;
 
$indent = '    ';
$indent2 = $indent x 2;
 
if ( ! getopts('csGatrh') || $opt_h ) {
	print STDERR <<HELP;
gen_php_accessors [-c] [-s] [-G] [-a] [-t] [-h] < variable_declarations.php
Generate PHP accessors from member variables.
 -c Also generate constructor
 -s Also generate setters
 -G Don't generate getters
 -a Generate getters, setters, static getters and constructor
 -t Generate static getters
 -r Generate static setters
 -h Display this help
HELP
	exit -1;
}
 
$opt_s = 1 if $opt_a;
$opt_c = 1 if $opt_a;
$opt_t = 1 if $opt_a;
 
$visibility = '(?:(?:var|public|private|protected)\s+)';
$identifier = '[a-z_]\w*';
 
while(<>) {
	if ( /^\s*(?:static\s+)${visibility}?\$($identifier)\s*[;=]/i ||
	     /^\s*${visibility}?(?:static\s+)\$($identifier)\s*[;=]/i )
	{
		push @static, $1
	}
	elsif ( /^\s*${visibility}?\$($identifier)\s*[;=]/i ) {
		push @fields, $1 
	}
	print;
}
 
if ( $opt_c ) {
	print "\n";
	if ( @fields ) {
		$args = join(', ', map { "\$$_" } @fields );
		print "${indent}public function __construct( $args ) {\n";
		print "${indent2}\$this->$_ = \$$_;\n"
			for @fields;
		print "${indent}}\n";
	}
	else {
		print "${indent}public __construct() {  }\n";
	}
}
 
if ( @fields ) {
	if ( ! $opt_G ) {
		print "\n";
		print "${indent}public function $_() { return \$this->$_; }\n"
			for @fields;
	}
	if ( $opt_s ) {
		print "\n";
		print "${indent}public function set_$_( \$$_ ) { \$this->$_ = \$$_; }\n"
			for @fields;
	}
}
 
if ( @static && $opt_t ) {
	if ( $opt_t ) {
		print "\n";
		print "${indent}public static function $_() { return self::\$$_; }\n"
			for @static;
	}
	if ( $opt_r ) {
		print "\n";
		print "${indent}public static function set_$_( $_ ) { self::\$$_ = $_; }\n"
			for @static;
	}
}

Put it in a directory in $PATH, chmod +x it, and use it as a filter on the member variables you just selected. (vim: '<,'>!gen_php_accessors -a ).

You may want to adapt a little to match your PHP coding style (indentation, function names).

(modified to include constructors and static members)

Gwaaaaaaah, this is brainfucked !

July 3rd, 2009

It’s hot. Very hot. So hot that the heat messed up the working of my brain and reduced my thinking power to that of a below average sized stranded dead blue whale, or maybe a rabbit,  and caused me to—instead of finishing the parser library that I was hoping to finish days ago—letting my drifting thoughts guide my mouse arm into the darker places of the web, or at least a fairly darkish yellowish one, namely Blog Jaune.

What I found there could be an eternal source of horror to some, yet an source of extreme hilarity to others. To me, it was a source of shameful amusement: GWAAAAAAAH, a brainfuck-like language. Shame because I never took the time to play with brainfuck which set back from the role of  überhacker to that of newbie brainfuck virgin. Amusement because the code sample looks like this:

DAAAAAAAAAAhhhhhh ?
Rooooaaahahhahah!!
GAAAAAAAGAAAAAAAAAAGAAAGAWWWWOM!
GAAH!!
GAH
AAAAAAAH!
Haaaaaooa
BrrooaAAAH
GAAH
WWAAAAAAAAAAAAAAAH!!!!!!!
GeeaaahH!
AAAH
OOOOOOH
BlOOOOOOOOpppH
GAH!
GobidoaaahH !

This of course displays “Hello World!”. Amused as I was, I still felt my amusement level  dwell a little on the low side of the amusement scale, and suddenly it came to me: GWAAAAAAAH needed an interpreter written in perl. And some time later I had one, nice and short as perl programs can be.

Of course it needed some testing. To achieve this I looked for some brainfuck programs, translated them to GWAAAAAAAH, and tried to run them. Some bugs later, I had a nice working perl interpreter.

#!/usr/bin/perl
die "syntax: perl gwaaaaaaah.pl <file.gwa>"
    unless defined $ARGV[0] && -f $ARGV[0];
$/=undef;
$|=1;
open F, '<', $ARGV[0];
 
@CODE = split //, <F>;      # read-only code segment
$PC = 0;                    # program counter points to the byte after the last
                            # executed instruction in @CODE.
 
@M = ();                    # heap
$X = 0;                     # data register points to a byte in the heap.
 
@S = ();                    # looping stack
 
%inst = (
    G => sub { $X++ },
    W => sub { die '*___--- GAAAAAAA! ---___*' if --$X < 0 },
    A => sub { ++$M[$X]; $M[$X] %= 0xff },
    O => sub { --$M[$X]; $M[$X] %= 0xff },
    H => sub { print chr($M[$X]) },
    Z => sub { $M[$X]=getc; exit 0 unless defined $M[$X] },
    R => sub {
        if ( $M[$X] ) { push @S, $PC }
        else {
            $sb = 1;
            while ( $PC < @CODE ) {
                $mb = $CODE[ $PC++ ];
                if ( $mb eq 'R' ) {++$sb }
                elsif ( $mb eq 'M' ) { last unless --$sb }
            }
        }
    },
    M => sub { $M[$X] ? $PC = $S[ $#S ] : pop @S },
);
 
while ( $PC < @CODE ) {
    $op = $CODE[$PC++];
    next unless exists $inst{$op};
    $inst{$op}();
}

The 99 bottles of beer program was running very slowly though. Admittedly, it could count bottles of beer faster than any human could drink, but it was not *instantaneous*, like how a good computer would do it. It struck me: I needed a compiler ! Interpreters are slow, GWAAAAAAAH needed to be compiled directly to assembler.

Some more hacking, and the interpreter was transformed into a compiler that generates nasm code. Some Makefile magic allowed to transform a .bf file into .gwa, then into .asm, into .o and finally into an executable.

I still had a last reason to be unsatisfied: the generated code was fairly verbose, matching the verbosity of the source: GWAAAAAAAH source files tend to contain many repeated characters, and it was easy to replace the generated increment/decrement instructions with add/sub instructions.

Voilà, small linux executables from GWAAAAAAAH sources. Now I can go back to hacking on my universal programmer-friendly not-so-optimized parser design.

Attached Files:

Script idea

October 17th, 2008

I noticed I often tend to type the same sequences of commands when I look for files in a directory. For instance: “ls *mp3”, followed by “ls *ogg” if there aren’t any mp3s. Repeating such commands makes me feel like a cymbal-banging monkey, so what I need here is a script that does the boring stuff for me (and guesses my mind. and makes coffee. Damn, I’m hungry now.)

This is a (late night) attempt:

#!/usr/bin/perl
 
use strict;
use warnings;
 
use File::Glob qw(:globally :nocase);
 
my %types = (
    audio => [ qw/mp3 ogg wmv wav voc flac/ ],
    video => [ qw/divx avi wmv ogm flv mpg mpeg/ ],
    pictures => [ qw/jpg jpeg tiff tif pcx bmp png svg/ ],
    archives => [ qw/rpm deb tgz tar.gz zip rar iso/ ],
    docs => [ qw/txt nfo doc pdf/ ],
    web => [ qw/htm html css/ ],
    scripts => [ qw/pl py sh lua/ ],
    code => [ qw/c cpp h hpp/ ],
);
 
sub abort_with_help {
    print "Syntax: list <type>\nWhere type in:\n";
    print "* $_: " . join(', ', sort @{$types{$_}}) . "\n" for keys %types;
    exit -1;
}
 
abort_with_help unless my $type = shift;
 
unless (exists $types{$type}) {
    print "No such type.\n";
    abort_with_help;
}
 
my $glob = '*.{' . join(',', @{$types{$type}}) . '}';
 
if (my @files = glob($glob)) {
    print "$_\n" for (@files);
} else {
    print "No $type files found in the current directory.\n";
}

(Re-)Install script for Drupal 5

July 29th, 2008

To test some Drupal modules I had to perform some clean installs. The problem is that that quickly becomes a tedious task. So tedious even that I decided to automate the installation and configuration with a little shell script.

The script:

  • Drops and recreates a database
  • Unpacks drupal and sets the right directory permissions
  • Configures the database in Drupal
  • Creates an admin user and resets its password
  • Enables nice urls
  • runs the cron tasks in Drupal.

You will need:

  • wget
  • perl
  • sudo configured properly to be able to delete directories as root.

This script is only intended for testing purposes on a local system. Do not run in untrusted multiuser environments as the database password can be seen by other users through commands like ps. Edit it to change settings before running it.

Attached Files:

Introducing the beatplugin for audacious

July 22nd, 2008

A long time ago, in a country far far away, I once wrote a winamp plugin to detect rythms in the music and make an old traffic light react to the sound using the parallel port. Now this plugin has been ported to audacious, and has been improved quite a bit.

» Read more: Introducing the beatplugin for audacious

Attached Files:

Parallel port testing tool

July 20th, 2008

The parallel port is a very useful output if you’re tinkering with electronics. For one, it’s much easier to use than the USB port. And it has 12 digital outputs and 8 inputs, enough for many experiences.

To test the ppdev linux kernel module, and debug subsequent hardware projects relying on the aforementionned driver, I wrote a little tool using the Qt library. You can use it to toggle bits on the parallel port data register (D0-D7).

To use it, install the debian/ubuntu package with dpkg -i package.deb, then run qparport-test. If you have an atypic parallel port device, you can mention it on the command line.

Debian packages, auto{make,conf}

July 19th, 2008

I’ve been playing a little with automake and autoconf again. Nothing new, I still hate them, maybe more, even if I understand the vital role they play in the open source community.

I was about to write a rant-like post about the difficulties I encountered, but instead I’ll just post what I learnt.

» Read more: Debian packages, auto{make,conf}