Sunday, May 31, 2009

LOOP

At the moment I try to practice my skills in PL/SQL. Like these old Chinese monks I believe that you can only be a master, if you really practice steadily. And while learning I discovered that the LOOP statement in PL/SQL is something really cool, because it would substitute the always famous
while(true):
  if expr:
    break
  do_smth
for implementing the sentinel. For the sake of this blog I implemented this thing :)
class List:
    def __init__(self, node, next): self.node, self.next = node, next

class Block:
    def __init__(self, xs): self.xs = xs

    def body(self):
        print("%d" % self.xs.node)
        self.xs = self.xs.next

    def cond(self):
        return False if self.xs == None else True

class Loop:
    def __init__(self, block):
        if block.cond():
            block.body()
            Loop(block)

Loop(Block(List(23, List(42, List(5, None)))))

Saturday, May 30, 2009

C♯ or Implement That Stack

A friend of mine reminded me of the importance to implement the stack ADT for the sake of learning a new programming language. CS really feels strange to me, so I implemented the stack. To test the program, I implemented a small postfix-notation parser -- like 1 1 + 2 * = 4, too.
using System;
using System.Collections;

public class Stack 
{
  ArrayList xs;
  
  public Stack()
  {
    xs = null;
  }
  
  bool empty()
  {
    return (xs == null);
  }

  void push(int x)
  {
    if (empty() == true) {
      xs = new ArrayList();
    }
    xs.Add(x);
    Console.WriteLine("PUSH " + x);
  }
  
  int pop()
  {
    Console.WriteLine("POP " + (int) xs[xs.Count - 1]);
    return (int) xs[xs.Count - 1];
  }

  private static int ctoi(char c)
  {
    return int.Parse(c.ToString());
  }

  private static bool number(char c)
  {
    try {
      ctoi(c);
      return true;
    } catch (FormatException f) {
      return false;
    }
  }

  public static void Main(string[] args)
  {
    string cs = args[0];
    Stack s = new Stack();

    for (int i = 0; i < cs.Length; i++) {
      switch (cs[i]) {
      case '+':
        s.push(s.pop() + s.pop());
        break;
      case '*':
        s.push(s.pop() * s.pop());
        break;
      case ' ':
        break;
      default:
        s.push(ctoi(cs[i]));
        i++;
        while (number(cs[i])) {
          s.push(10 * s.pop() + ctoi(cs[i]));
          i++;
        }
        break;
      }
    }
    Console.WriteLine(s.pop());
  }
}

Friday, May 8, 2009

la und vancouver

nach dem schoenen hostel mit meerblick in LA, ist es einfach schrecklich schon wieder in so ein tolles abzusteigen. backpackerurlaub, anyone? morgen geht es raus into the wild nach clearwater, bc. canoefahren ... sunset in LA war mal ganz anders im vergleich zu mexiko. die staaten gefallen mir schon sehr. vor allem, weil man da kulinarisch nichts erklaeren braucht. an jeder ecke schoene restaurants mit vegan stuff. natuerlich die sehr netten leute gibt es nur in mexiko. der taxifahrer hat uns ein abschiedsgeschenk uebereicht. aber in LA gibt es eben die ganze filmgeschichte und so viele dinge, die ich kulturell liebe.

Sunday, May 3, 2009

Mexiko -- Noch drei Tage

... sind es bis zum naechsten Meilenstein in LA. Heute war der Tag gepraegt von unmotivierten Nachtfahrten und gelegentlichen Zwischenstopps in der Wueste. Acapulco hatte sich nicht als so traumhaft schoen herausgestellt, besonders in Anbetracht der letzen Erlebnisse am Strand von Zipolite. Bier trinken, benommen von der Feuchtigkeit und Hitze durch das Meer watend, durch den Nebel aus der gespeicherter Waerme blickend.

Thursday, April 23, 2009

Mexiko Tage 1--2

Gegen Abend sind wir in Cancun angekommen. Der Flug stellte sich als furchtbar lang dar, wurde aber durch die Vielzahl an koestlich portionierten Speisen verfeinert. Es gab sogar immer mal wieder Tee, aber zum Earl Grey natuerlich keine Zitrone. Nur durch solche Zeiten kommt man dazu die komplette aktuelle Ausgabe der FAZ zu lesen und dieses Yelle-Album endlich entnervt durchzuhoeren. Die Schreckenseiten des Sitzens sind natuerlich ein entspannter Ruecken, der es erst einmal durch eine Vielzahl von Massagen, auf einen ordentliche Stand zu bringen ist. Das Wetter war schon am ersten Tag so klischeehaft schoen, dass meine Bekanntschaft mit dem mexikanischen Verkehr nur ebenso aufallen konnte. Es ist so viel mehr mein Fahrstil -- chaotisch, ohne Organisation und leicht verrueckt. Die Nacht haben wir dann am Strand verbracht, mit einem schoenen Sonnenaufgang am Morgen. Der Jet-Lag hat es wirklich geschafft mich dazu zu bringen gegen vier Uhr aufzuwachen, so dass wir gegen acht Uhr an zwei verschiedenen Straenden waren. Kaese in Form eines Stueckes Kots rundete die morgendliche Erfahrung ab. Das Brot war, wie es sich fuer solch frueh aufstehende Menschen gehoert, gehoerig suess. Oh und heute Mittag gab es ein Brot mit Nuessen in der Mitte. Dazu die, wie bekannt, extraordinairen Chilis. Diese regten in mir auch den Verdacht des Hamsterns der Bewohner. Im Supermarkt begegneten uns Menschen mit mehreren Tonnen Kohl, oder eben Chilis. Sonderbar dieses kleine Volk, denn genauso verhielt es sich mit kleinen T-Shirts, die auch in Unmengen gekauft wurden. Mit dem Automobil ging es weiter Richtung Merida, mit Zwischenstopp an der Suedkueste. Dabei hatten wir uns tuechtig verfahren. Schoen anzusehen sind die Bauten der Ureinwohner direkt an der wunderbaren Landstrasse. Waelder werden in wilder Landschaft einfach gerodet. Alles, was zwei Jahre besetzt wird gehoert den Menschen. Und jetzt Fiesta am Strand.

Monday, April 20, 2009

10 things I like about python

-- OO is easy. You can easily have as many public classes in your module. Create classes on the fly. -- List-comprehension This is clearly stolen from Haskell, but even this seems to be enhanced. Thought I miss the underscore. -- self self is your friend. With referring explicitly to the namespace, in the long run, this clears things up. -- Special methods You don't have to use getters and setters. This is simply great! -- Aesthetics You don't need no braces around if, you can do 0 < x < 1, Python is sexy code. -- Procedures are first class citizens because you can * store them in variables, * use them as arguments, * or results. -- Jython, IronPython, CPython You can use different platforms. You can even use it as a stored procedure in your Oracle-Database. -- Nested functions lambda is really out if you want documented code. Just nest a function inside of the function. It is called packaging. -- SciPy and matplotlib My other major is Econ, so I need to do computing for a living. What is nicer, than to use your favorite PL for this. -- Dynamics Store the code as text in a database, reuse it, deploy it. If you are creative, you can do a lot more than with a static language.

Dispatch the method

# I hate it, when I see something like this:
class Ape:
    def __init__(self):
        self.cnt = 0
        
    def scream(self):
        if self.cnt == 0:
            print "uhgauhga!"
            self.cnt += 1
        else:
            print "ahahah!"
        return self
# Meh! You are programming OO.  Let me alone with your dirty flow logic.
Ape().scream().scream()

# This monkey is doing it right.
class Monkey:
    def scream(self):
        print "uhgauhga!"
        self.scream = self.scream2
        return self

    def scream2(self):
        print "ahahah!"
        return self

Monkey().scream().scream()

# Please just dispatch, after the first use!