Biggle's Blog

Web- und Software Development

by Mario Priebe

C Programmieren für Anfänger

In diesem Artikel geht es mal “Back to the Roots”. C#, C++ und Konsorten sind  ja für eine fortgeschrittene Programmierung super aber was ist mit den Leuten, die beim Programmieren Lernen von NULL anfangen? Da ist eine elementare Programmiersprache wie C wohl verständlicher, um sich danach auf eine komplexere Sprache zu konzentrieren – wenn man nicht bei der C Programmierung im Linux- oder Hardwarebereich bleiben möchte.

C ist trotz seines Alters immer noch eine der meist genutzten Programmiersprachen, das darf man nicht vergessen. Viele höhere Sprachen, wie z.B. auch C#, nutzen den C-Style bei der Syntax. Eine Sprache mit dem gleichen Schreibstil zu lernen ist natürlich wesentlich einfacher. Für alle Programmier-Anfänger, die nun das C Programmieren lernen möchten, empfehle ich das C-HowTo.

Das ist ein kostenloses C Handbuch im Internet. Das Buch lehrt das Programmieren anhand der Sprache C. Nach meinem ersten Einblick zu urteilen, ist der Schreibstil alles andere als theorielastig und trocken, macht fasst schon Spaß zu lesen – aber schaut es euch selbst an
C-HowTo – Das C Handbuch für Anfänger

Für den ersten Geschmack gibt es das erste Kapitel als Webcast

YouTube Preview Image

Kapitel 2 und vielleicht später sogar mehr, findet man im Channel von C-HowTo

Schreibt man eine Rezension über das Online Buch, kann dieser an einer Verlosung teilnehmen, in der man das Buch in gedruckter Form gewinnen kann.

Achso, bevor ich das vergesse, ich hab hier noch 3 Gutscheincodes auftreiben können, die sind jeweils nur einmal auf der C Handbuch-Bestellseite einlösbar und haben einen Wert von 5,00 Euro.

Gutscheincodes:

  • CPROGRAMMIEREN38
  • CPROGRAMMIEREN91
  • CPROGRAMMIEREN17


Also, wer zuerst kommt, malt also zuerst : )

by Mario Priebe

Mehrfachvererbung – Ein Beispiel in C#

Angestichelt durch Ilker sein Blogpost, bin ich der Sache mit der Mehrfachvererbung unter .NET mal etwas auf den Grund gegangen. Der Ansatz mit Mixin, Interfaces und ExtensionMethods scheint ja schon seit .NET 3.0 zu bestehen und scheint mir bisher auch der Beste zu sein. Einen weiteren schönen Artikel kann man bei Galileo Computing lesen.

Hier ein Beispiel wie ich das verstanden habe und umsetzen würde.

Interfaces

1
2
3
4
public interface IMixinDateTime
{ }
public interface IMixinOneMoreInterface
{ }

ExtensionMethods

1
2
3
4
5
6
7
8
9
10
11
12
public static class MixinExtensionMethods
{
    public static int GetYearDiff(this IMixinDateTime mxDateMethod, DateTime dateTime)
    {
        return new DateTime(DateTime.Now.Subtract(dateTime).Ticks).Year - 1;
    }
 
    public static void OneMoreMethod(this IMixinOneMoreInterface mxOneMoreMethod)
    {
        //implement method here ...
    }
}

Klassen, welche die Interfaces erben (ggf. implementieren)

1
2
3
4
5
6
7
8
9
public class Car : IMixinDateTime
{
    public DateTime Baujahr { get; set; }
}
 
public class Person : IMixinDateTime, IMixinOneMoreInterface
{
    public DateTime Birthday { get; set; }
}

Verwendung

1
2
3
4
5
6
7
8
9
Person person = new Person();
person.Birthday = new DateTime(1973, 01, 23);
var personAge = person.GetYearDiff(person.Birthday);
 
Car car = new Car();
car.Baujahr = new DateTime(2000, 01, 01);
var carAge = car.GetYearDiff(car.Baujahr);
 
person.OneMoreMethod();

Da beliebig viele Interfaces geerbt werden können, erschließt sich hier, wie das Prinzip funktioniert. Weitere Meinungen, Ergänzungen oder Ansätze sind gerne als Kommentar gesehen.

Viel Spaß beim entwickeln : )

by Mario Priebe

Biggle ist kein Palindrom

Eine kleine Übungsaufgabe für mich, die es zu lösen gab. Es sollte heraus gefunden werden, ob es sich bei einem String um ein Palindrom handelt.

Mein Lösungsansatz lautet wie folgt:
Ich befreie zunächst die Buchstaben von Sonder- und Leerzeichen und konvertiere alle Zeichen zu Kleinbuchstaben. Dann durchlaufe ich eine for-Schleife mit eine Länge des Stringparameters.

Ich zerlege den String in ein CharArray und vergleiche innerhalb der Schleife, den vorderen mit den letzten Buchstaben. Sind diese gleich wird der nächste vordere und der nächste hintere Buchstabe verglichen. Das geht so lange bis diese sich in der Mitte treffen.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public static class ExtensionMethods
{
    public static bool IsPalindrome(this string value)
    {
        //von Leer- und Sonderzeichen befreien
        value = value.ToLower().RemoveSpecialCharacters();
 
        int minValue = 0;
        int maxValue = value.Length - 1;
 
        var charArray = value.ToCharArray();
 
        for (int i = 0; i < value.Length - 1; i++)
        {
            if (charArray[minValue] == charArray[maxValue])
            {
                minValue++;
                maxValue--;
                continue;
            }
            else
                return false;
        }
        return true;
    }
 
    public static string RemoveSpecialCharacters(this string value)
    {
        return Regex.Replace(value, @"[^a-zA-Z0-9]", string.Empty);
    }
}

Verwendung:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Program
{
    static void Main(string[] args)
    {
        PalindromFactory factory = new PalindromFactory();
        var palindrome = factory.GetPalindrome();
        string output = "{0} ist {1}ein Palindrom";
 
        foreach (var palindrom in palindrome)
        {
            Console.WriteLine(String.Format(output, palindrom, palindrom.IsPalindrome() ? "" : "k"));
        }
 
        var palindromSaetze = factory.GetPalindromSaetze();
        foreach (var palindrom in palindromSaetze)
        {
            Console.WriteLine(String.Format(output, palindrom, palindrom.IsPalindrome() ? "" : "k"));
        }
    }
}

Ich hoffe ich habe nichts vergessen, getestet jedoch habe ich diese Methode mit der Liste deutscher Palindrome aus Wikipedia. Nicht-Palindrome natürlich mit einbegriffen : )

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
/// Stellt eine Sammlung von Palindrome und Palindromsätze bereit
/// Quelle Wikipedia
/// http://de.wikipedia.org/wiki/Liste_deutscher_Palindrome
public class PalindromFactory
{
    private List<string> Palindrome { get; set; }
 
    public List<string> GetPalindrome()
    {
        Palindrome = new List<string>
        {
            "Aha",
            "Amokoma",
            "Amoralaroma",
            "Anina",
            "Anna",
            "Annasusanna",
            "Aua",
            "Bob",
            "Bub",
            "Burggrub",
            "Biggle", //kein Palindrom
            "Mario", //kein Palindrom
            "Mongognom",
            "Nebelleben",
            "neben",
            "Neffen",
            "nennen",
            "netten",
            "netzten",
            "Neozoen",
            "nun",
            "Omo",
            "Otto",
            "Priebe" //kein Palindrom
            };
 
        return Palindrome;
    }
 
    public List<string> GetPalindromSaetze()
    {
        Palindrome = new List<string>
        {
            "Die Liebe fleht: Helfe bei Leid!",
            "Die Liebe geht, hege Beileid!",
            "Die Liebe, ist sie Beileid?",
            "Die Liebe ist Sieger, rege ist sie bei Leid.",
            "Die Liebe ist Sieger, stets rege ist sie bei Leid.",
            "Die Niere bot Komik: nass sank im Oktober ein Eid.",
            "Die Rede — ist sie der Eid?",
            "Dreh Magiezettel um, Amulette zeig am Herd!",
            "Du, erfror Freud?",
            "Der Fred",
            "Eine güldne, gute Tugend: Lüge nie!",
            "Eine Horde bedrohe nie!",
            "Eine Hure ruhe nie.",
            "Eine Note betone nie.",
            "Eine so Kesse kose nie.",
            "Eine treue Familie bei Lima feuerte nie.",
            "Einhorn roh? Nie!",
            "Eins nutzt uns: Amore. Die Rederei da, die Rederei der Omas nutzt uns nie.",
            "Eis feil! Ei, wo Eis feil lief sie, o wie lief sie.",
            "Elietta hat Teile.",
            "Ella rüffelte Detlef für alle.",
            "Elly biss Sibylle.",
            "Emma, behend 'ne Hebamme!",
            "Emma, so litt Tilos Amme!",
            "Emmas Amme",
            "Er habe nie eine Bahre.",
            "Erhabene Bahre",
            "Erhöre nie eine Röhre.",
            "Erika feuert nur untreue Fakire.",
            "Erol, red nie in der Lore.",
            "Alles hat seine Zeit, nur die alten Weiber nicht.", //Kein Palindromsatz
            "Es eilt, immer ahnend Nebel, reger der Flegel Fred, reg' erlebend nen Harem mit Liese.",
        };
 
        return Palindrome;
 
    }
}

Für einen schnellen Verwendungszeck (weil man das auch so oft braucht oO)  habe ich das ganze als ExtensionMethod implementiert.

Wie schaut’s aus, hast du Verbesserungsvorschläge? Würdest du es anders machen, wenn ja wie? Du kannst im Kommentarfeld mit

<strong>var* </strong>deinCodeSnippet = 0;

posten.


Viel Spaß beim entwickeln : )


* = Var oder nicht var…

by Mario Priebe

70 coole Photoshop Text-Tutorials

70 coole Photoshop Text-Tutorials, wohl die beste Auswahl aus 2010 findest du bei slodive. Sind echt heisse HowTos dabei!

by Mario Priebe

PHP Entwicklungsumgebung unter Windows

Heute möchte ich gerne zeigen, wie man sich auf dem Windowssysstem eine PHP-Entwicklungsumgebung einrichtet. Ich verwende dazu die kostenlos verfügbaren Programme XAMPP und EasyEclipse for PHP.

Diese beiden Programme sollten herunter geladen und installiert werden. Die Reihenfolge sollte nicht relevant sein, schlage aber vor XAMPP als erstes zu installieren.

Nach Installation dieser, müssen wir EasyEclipse einrichten. Dazu gehen wir wie folgt vor.

Zuerst werden wir uns in Eclipse die PHP Umgebung einschalten. Hier geht man vorerst nach dem Start von Eclipse auf der rechten Seite auf Workbench und es werden alle Views der Umgebung geladen.

Wenn man nun rechts oben auf Resources / Other geht,

HowToPhpOnWindows6

findet man nachfolgend eine weitere Perspektive, wo wir dann PHP auswählen.

HowToPhpOnWindows7

Nun müssen wir XAMPP und EasyEclipse miteinander verknüpfen. (Wenn man C:\ als Installationspfad gelassen hat sollte eigtl. alles gut sein, jedoch schauen wir hier nochmal nach.)

Dazu selektieren wir Window/Preferences

HowToPhpOnWindows8

Und gehen im linken Menu auf den Punkt XAMPP, siehe Abbildung

HowToPhpOnWindows9

Auf der rechten Seite sind dann die Pfade vorgegeben, diese sollten mit der Installation von XAMPP übereinstimmen.

Nun starten wir XAMPP über die EclipseUmgebung.

HowToPhpOnWindows10

In der unten stehenden Konsole sollten wir dazu auch eine Erfolgsmeldung bekommen.

HowToPhpOnWindows13

Nun rufen  wir im Browser deiner Wahl die lokale URL auf, die 127.0.0.1 oder localhost lautet und sollten dann, nachdem wir unter dem XAMPP-Logo und auf Deutsch geklickt haben, folgende Meldung sehen.

HowToPhpOnWindows3

Nach einem Klick auf Status im linken Menü sollten wir eine Übersicht bekommen, welche Dienste denn alle aktiviert sind.

HowToPhpOnWindows11

Den Browser können wir jetzt wieder schließen und in der Umgebung uns die selbe URL im integrierten Browser aufrufen

HowToPhpOnWindows12

Wenn auch das geklappt hat, kann es eigentlich los gehen. Vorher jedoch müssen wir noch den “htdocs” Ordner als Dokumentenroot definieren.

Dazu gehen wir unter Window/Preferences auf das unten in der Abbildung markierte ”Item “ProjectDefaults und tragen hier auf der rechten Seite den Pfads zum htdocs-Verzeichnis innerhalb des XAMPP Verzeichnisses ein.

HowToPhpOnWindows14

Nun können wir uns ein PHP Projekt anlegen. Dazu gehen wir auf der linken Seite in den Navigator und klicken mit der rechten Maustaste und erstellen uns dieses.

HowToPhpOnWindows15

Wichtig ist, auch hier die Angabe, zu einem Ordner der sich im htdocs-Verzeichnis befindet, diesen müssen wir uns auch zuvor physikalisch anlegen.

HowToPhpOnWindows16

In diesem Projekt können wir uns nun die erste PHP-Datei anlegen, dazu wieder Rechtsklick im Navigator, auf das Projekt und auf PHP File

HowToPhpOnWindows17

Vergeben einen Namen, sinnvoll oder nicht, das ist egal : )

HowToPhpOnWindows18

und schreiben unseren ersten Code. Hier sieht man nach dem Speichern des Files auch gleich im PHP Browser das Ergebnis

HowToPhpOnWindows19

Das generierte Kommentartemplate kann man auch recht einfach anpassen. Hierzu geht wieder auf Window/Preferences und auf die unten in der Abbildung markierten Items bis zu CodeTemplates. Hier markiert man dann auf der rechten Seite New PHP Files und dann auf Edit.

HowToPhpOnWindows20

An dieser Stelle, kann man nun sein eigenes PHP-File HeaderTemplate einrichten.

HowToPhpOnWindows21

Zum Schluss noch einen letzten Screen, der zeigt das man vor dem Beenden von Eclipse auch den XAMPP wieder stoppen sollte.

HowToPhpOnWindows22

So nun steht einem nichts mehr im Wege, bei der Entwicklung von PHP mit Eclipse auf einem Windowssystem.

Btw, wie  man auf dem einen oder anderen Screenshot sehen konnte, haben wir uns mit dem XAMPP Paket auch MySQL installiert, was uns natürlich auch im vollen Umfang zur Verfügung steht.

So nun viel Spaß beim entwickeln : )

by Mario Priebe

MSDN Mediathek in Zahlen

Mittlerweile gibt es bei Microsoft Deutschland über 750 Webcasts, um die 480 Solves, über 420 HowTo-Guides sowie jede Menge Media-Dateien (~780) aus Konferenzen, wie der Technical Summit, der Cebit, Channel 8/9/10 und andere zu finden. Alle dort gelisteten Mediafiles sind auf Deutsch und führen auch zu englischsprachigen Videos und Tutorials.

msdn 

Einen Auszug von derer die mich interessieren und viele viele mehr, findet man in meinem ZweitBlog Videorial.