Kategorien
Allgemein

Kartenspiel

Kartenspiel, aber was macht das?

#!/usr/bin/perl
for (
    $C = 3636, $c = 0, $i = 0 $t = 0;
    $i < 1000 ;
    $i++, $n = int( rand(6) )*2
  )
{
    next if ( ( ( $C >> $n ) & 2 ) == 0 );
    ++$t;
    ++$c if ( ( ( $C >> $n ) & 3 ) == 3 );
}
print $c / ( 0.01 * $t ) . "%n";

oder auch:

@t=grep{++$n;$_&1}grep$_&2,map 111>>(2*int rand 6),(0..999);$p=100*$#t/$n;print"$p%n";
Kategorien
Allgemein

Dekoratoren in Python

In Java ein alter Hut. In Python ebenso.

In TurboGears bin ich über die folgende Syntax gestolpert:

@exposes('template.html')
def f(): pass

In der Doku steht dann, das @exposes die Methode f() dekoriert. Diese Art der Dekorierung ist mit Python 2.4 neu dazu gekommen und ermöglicht es eine Methode um weitere Funktionalität zu erweitern. Es ist sehr einfach möglich selber solche Dekorierer zu erstellen.

Dazu muss nur eine Funktion mit dem Namen des Dekorators (in unserem Falle exposes) erstellt werden. Diese Funktion erhält ein Argument, die zu dekorierende Funktion. Diese Funktion kann dann nach belieben weiterverarbeitet werden und wird zum Schluss zurückgegeben. Ein einfaches Beispiel wäre also:

>>> def exposes(func):
...	func.decorated=True
...	return func
...
>>> @exposes
... def f(): pass
...
>>> print f.decorated
True

Im Beispiel aus TurboGears erhält der Dekorator allerdings noch einen Parameter. Dekoratoren mit Parametern müssen einen Dekorator zurückliefern, der nur die zu dekorierende Funktion annimmt. Alles klar? Also zum Beispiel:

>>> def exposes(template='default.html'):
...	def newDeco(func):
...		func.template=template
...		return func
...	return newDeco
...
>>> @exposes()
... def f(): pass
...
>>> print f.template
'default.html'

Bei TurboGears passiert bei den Dekoratoren noch eine Menge mehr, so wird die dekorierte Funktion wirklich eingepackt, aber zum Verständnis von Dekoratoren sollte das obige erstmal ausreichen.

Kategorien
Allgemein

Java Vortrag 1.Teil

Im ersten Teil von Immo’s Vortrag ging es um die einfachsten Sprachkonstrukte in Java.

Immo hat uns ein wenig über Java erzählt. Zuerst nur die rudimentären Programmsteuerungs Konstrukte.

Simplestes Java-Programm. Ein Objekt mit einer statischen Start Routine:

public class Test {
  public static void main(String[] args) {
       /*Startroutine*/
  }
}

Methoden, Instanz und Klassenvariablen:

class Person {
  //Klassenvariable
  private static int anzahlPersonen = 0;
  //Instanzvariable
  private String name;

  public getName() {
    //Methodenvariable
    String defaultName = "niemand";
    return this.name!=NULL?this.name:defaultName;
  }
}

Schleifen:

int i=10;

while (i>0) {
  System.out.println(i);
  i=i-1;
}

for (i=0; i<10; i++) {
  System.out.println(i);
}

Bedingungen:

if (1==1) {
  /* wahr */
} else {
 /* falsch */
}
Kategorien
Allgemein

Spiegeln von PostScript Seiten

Wenn man mal wieder eine Seite gespiegelt ausdrucken will und der Druckertreiber dafür kein Knopf bereitstellt… Dann kann man ja ein wenig PostScript benutzen.

Heute hatte ich mal wieder das Problem, dass ich eine Datei spiegelverkehrt ausdrucken wollte. Manche Druckertreiber bieten dazu eine Option an. Andere nicht.

Die Datei habe ich erstmal in eine PostScript Datei gedruckt. Dann habe ich kurz hinter dem PageSetup Eine Zeile eingefügt, die bedeutet: Beweg deinen Seitenrand und denk ab dann spiegelverkehrt. In PostScript kann man das so ausdrücken:

6500 0 translate

-1 1 scale

Das muss auf jeder Seite eingestellt werden und sieht in meinem Beispiel dann in etwa so aus:

...

%%Page: 2 2

%%PageBoundingBox: 18 14 577 828

%%BeginPageSetup

%

%%EndPageSetup

gsave

[ 0 0.12 0.12 0 18 14] concat

gsave

6500 0 translate

-1 1 scale

-21 1461 moveto

0 setgray

(MinyaNouvelleBoldFID143HGSet1) cvn findfont 1250 -1250 matrix scale makefont setfont

...