---

Wechsel zu Drupal
· 2009-12-07 14:32

Mir gefaellt Textpattern: sehr gut, aber andererseits ist es doch problematisch, wenn man mehrere Blogs und dazu noch statischen Content fuer meine Projekte auf einer einzigen Seite verwalten moechte. Nachdem ich erfolglos probiert hatte, Textpattern in ein anderen System einzubetten und sogar schon mit Frames rumgespielt hatte, kam ich schiesslich zu dem Entschluss, dass ein neues und flexibleres System her muss.

Ich habe mir auf opensourceCMS ein paar Systems angesehen, aber letztendlich hat mich der Chaosradio Express Podcast zum Thema Drupal ueberzeugt.

Die Hauptseite (livoris.de) laeuft jetzt mit Drupal und dieser Blog wird dort nun auch in englisch weitergefuehrt werden, wobei ich moeglicherweise auch ein paar Sachen recylcen werde. Jedenfalls wird das hier der letzte Eintrag im Livoris Coding Blog sein.

— Webmaster

Kommentare

MonoDevelop laueft jetzt auf Windows
· 2009-06-09 01:21

Wenn man C#/.NET unter Windows entwickeln moechte ohne Geld auszugeben hat man nun drei verschiedene Moeglichkeiten:

  1. Visual C# 2008 Express
  2. SharpDevelop 3.0
  3. MonoDevelop 2.1

Mehr darueber in diesem Blogeintrag von Migual de Icaza.

Konkurrenz belebt den Wettbewerb und es ist immer gut, freie Alternativen zu haben.

— Webmaster

Kommentare

C# kann keine Kovarianz
· 2009-05-27 03:46

Wenn man objekt-orientiert programmiert, dann ist Vererbung ein gutes Mittel um ein Objekt wie eines der Oberklasse erscheinen zu lassen und dabei aber trotzdem noch zusaetliche Funktionalitaet einzubauen.

In diesem simplen Beispiel gibt es Vehikel und ein ganz besonderer Vehikel ist z.B. ein Auto. Wenn eine Fabrik nun Autos produziert, so ist natuerlich logisch, dass diese Fabrik damit implizit auch Vehikel produziert. Auf OOP angewendet heisst das, dass man bei einer ueberschriebenen Methode den Typ noch genauer spezifieren kann als in der gleichen Methode der Oberklasse. Das bringt keinerlei Probleme mit sich und kann im Zweifelsfall einen Typ-Cast vermeiden.

In C# sehe das Beispiel so aus:
class Vehicle { }
class Car : Vehicle { }

class VehicleFactory {
    public virtual Vehicle Produce() {
        return new Vehicle();
    }
}

class CarFactory : VehicleFactory {
    public override Car Produce() {
        return new Car();
    }
}

class Program {
    static void Main(string[] args) {
        VehicleFactory vf = new CarFactory();
        Vehicle vehicle = vf.Produce();
        // do something with the vehicle
        CarFactory cf = new CarFactory();
        Car car = cf.Produce();
        // do something with the car
    }
}

Leider hat die aktuelle Version von C# keine Unterstueztung fuer diese Art der Kovarianz und somit kompiliert dieser Code nicht. Gluecklicherweise ist es in C# 4.0 geplant

In Java wiederum sehe das Beispiel so aus:

public class Program {

    class Vehicle { }
    class Car extends Vehicle {}

    class VehicleFactory {
        public Vehicle produce() {
            return new Vehicle();
        }
    }

    class CarFactory extends VehicleFactory {
        public Car produce() {
            return new Car();
        }
    }

    public Program() {
        VehicleFactory vf = new CarFactory();
        Vehicle vehicle = vf.produce();
        // do something with the vehicle
        CarFactory cf = new CarFactory();
        Car car = cf.produce();
        // do something with the car
    }

    public static void main(String[] args) {
        new Program();
    }
}

und laesst sich problemlos kompilieren!

— Webmaster

OpenSUSE-Update ohne CD/DVD
· 2009-01-08 13:35

Wenn man OpenSUSE updaten moechte, dann kann sich entweder von der offiziellen Seite ein CD-/DVD-Image runterladen, dann brennen, davon booten und installieren.

Alternativ kann man aber auch einfach eine Netzwerkinstallation machen und vom aktuellen SUSE booten.

Schritt 1

Als root folgendes ausfuehren:
$: cd /boot
$: wget http://download.opensuse.org/distribution/\
11.1/repo/oss/boot/i386/loader/linux -O suselinux
$: wget http://download.opensuse.org/distribution/\
11.1/repo/oss/boot/i386/loader/initrd -O suseinitrd

Schritt 2

In der Datei /boot/grub/menu.lst folgenden Eintrag hinzufuegen:
title Rescue system
    root(hdX,X)
    kernel /boot/suselinux
    initrd /boot/suseinitrd

Wobei hdX,X durch die richtige Root-Partition ersetzt werden muss. Am besten die anderen menu.lst-Eintraege ansehen.

Schritt 3

Beim naechsten Booten den Eintrag “Rescue system” auswaehlen und warten bis man das Installationsmedium auswahlen kann.

Schritt 4

Beim Installationsmedium waehlt man dann HTTP als Typ, download.opensuse.org als Server und distribution/11.1/repo/oss/ als Pfad.

Schritt 5

Die Installations ganz normal durchfuehren.

— Webmaster

System.Uri-Klasse (URL) als Beispiel
· 2008-11-03 15:56

Die Dokumentation der Uri-Klasse in .Net ist nicht gerade besonders gut. Z.B. geht daraus nicht eindeutig hervor, ob Uri.Schema nun das Protokoll oder das Protokoll inc. Doppelpunkt liefert. Deswegen hier nun ein Zusammenfassung ueber alle wichtigen Eigentschaften einer Uri am Beispiel.

https://user:pass@example.org:80/page.html?param=value

AbsolutePath /page.html
AbsoluteUri https://user:pass@example.org:80/page.html?param=value
Authority example.org:80
DnsSafeHost example.org
Fragment
Host example.org
IsAbsoluteUri True
IsDefaultPort False
IsFile False
IsLoopback False
IsUnc False
IsWellFormedOriginalString True
LocalPath /page.html
OriginalString https://user:pass@example.org:80/page.html?param=value
PathAndQuery /page.html?param=value
Port 80
Query ?param=value
Scheme https
Segments[0] /
Segments[1] page.html
ToString https://user:pass@example.org:80/page.html?param=value
UserEscaped False
UserInfo user:pass

file:C:/File.txt

AbsolutePath C:/File.txt
AbsoluteUri file:///C:/File.txt
Authority
DnsSafeHost
Fragment
Host
IsAbsoluteUri True
IsDefaultPort True
IsFile True
IsLoopback True
IsUnc False
IsWellFormedOriginalString False
LocalPath C:\File.txt
OriginalString file:C:/File.txt
PathAndQuery C:/File.txt
Port -1
Query
Scheme file
Segments[0] /
Segments[1] C:/
Segments2 File.txt
ToString file:///C:/File.txt
UserEscaped False
UserInfo

ftp://127.0.0.1/file.txt

AbsolutePath /file.txt
AbsoluteUri ftp://127.0.0.1/file.txt
Authority 127.0.0.1
DnsSafeHost 127.0.0.1
Fragment
Host 127.0.0.1
IsAbsoluteUri True
IsDefaultPort True
IsFile False
IsLoopback True
IsUnc False
IsWellFormedOriginalString True
LocalPath /file.txt
OriginalString ftp://127.0.0.1/file.txt
PathAndQuery /file.txt
Port 21
Query
Scheme ftp
Segments[0] /
Segments[1] file.txt
ToString ftp://127.0.0.1/file.txt
UserEscaped False
UserInfo

— Webmaster

Kommentare

älter