7 Trinklieder und Gassenhauer aus 2020 mit Evergreen-Potential

Als Kind der 80er kennt man mit Sicherheit die alten Gassenhauer, die auf den Kirmessen vermischt mit Uff-da-da-Musik rauf und runtergedudelt wurden:

Alte Trinklieder der 70er / 80er … :

  • Eingekühlter Bommelunder
  • 10 kleine Jägermeister
  • Das Altbierlied
  • Saufen, saufen, saufen, saufen … (Schröders)
  • Was wollen wir trinken 7 Tage lang
  • Johny Walker
  • Heute trinken wir richtig
  • Skandal im Sperrbezirk
  • u.v.m. …

Wer glaubt es gäbe keine aktuellen guten Trinklieder die sich mit den alten Gassenhauern messen können, den muss ich eines besseren belehren :-).
Ich stelle nachfolgend ein paar sehr gut gelungene Trinklieder vor und wenn man sich reingehört hat wird man mir recht geben und auch der Meinung sein, dass der eine oder andere Song das Potential hat die alten Lieder zu übertreffen.

Bitte bedenkt dabei, das ihr die alten Hits mehrfach gehört habt und euer Gehör darauf trainiert ist, so gebt den nachfolgenden Liedern eine Chance:

Aktuelle Trinklieder der 2020er:

Da ist zunächst die Band „Feuerschwanz“, eine Mittelalter-Comedy-Band, welche mit ansehnlichen Choreographinnen, einer Geigerin und 4 weitern jungen Männern Mittelalterrock spielen. Hier gibt es zahlreiche Trinklieder und ich möchte an dieser Stelle „Metfest“ vorstellen, welches mir persönlich gut gefällt:

Feuerschwanz – Metfest

Als nächsten wären „Mr. Hurley & Die Pulveraffen“ zu erwähnen, welche sich dem Fantasy-Piraten-Kult verschworen haben. Ein Song mit sehr eingängigem Text wäre „Blau wie das mehr“:

Mr. Hurley und die Pulveraffen – Blau wie das Meer

Hier sind nochmal 2 Lieder von Knasterbart, wo der Sänger von „Mr. Hurley und die Pulveraffen“ auch mitsingt. Man darf allerdings nicht so auf die Zähne achte 😀 😀 😀 :

Knasterbart – Gossenabitur
Knasterbart – Kneipenschlägerei
Mr. Hurley und die Pulveraffen – Booty Island

Schandmaul … die Band die Nachts in der Endlosschleife auf KIKA läuft (also Vater kennt man das wenn die Kinder die „Bernd das Brot“ Folgen nachplappern weil sie nachts heimlich Fernsehen geschaut haben):

Schandmaul – Der Teufel hat den Schnaps gemacht

Und sozusagen als eines seiner Abschiedskonzerte wenige Monate vor dem Tod von Udo Jürgens gab es von Santiano eine Eigeninterpretation von „Der Teufel hat den Schnaps gemacht“ welche ich sehr gelungen fand:

Santiano – The devil made the rum for us
Veröffentlicht unter Allgemein | Schreib einen Kommentar

C#.NET : Custom Collections anstelle von List erstellen über die mit foreach( … ) iteriert werden kann

Intention

Um die Klasse List<T> vor Zugriffen zu schützen / zu beschränken oder diese mit Notification-Events (z.B. ObservableCollection) auszustatten werden für den jeweiligen Verwendungszweck eigene Collections verwendet.

Ansatz

Um eine eigene Collection zu erstellen, welche mit foreach( … ) über die Elemente der eingekapselten Struktur (also z.B. List<T>) zu iterieren, benötigt man eine Enumerator-Klasse, welche die Methoden …

  • MoveNext()
  • Reset()
  • … und die Property „Current“ implementiert

implementiert (hier MyCollectionEnumerator) … sowie natürlich die gecustomizte Collection-Klasse selber, die die Datenstruktur enthält (hier MyCollection).

Lösung

using System;
using System.Collections.Generic;

namespace Irrsinn
{
    // Diese Klasse definiert mit MoveNext / Reset und der Property
    // Current aus dem Interface IEnumerator wie foreach(String s in col)
    // über die eingekapselte Liste iterieren darf.
    public class MyCollectionEnumerator : System.Collections.IEnumerator
    {
        private List<string> StringList;
        private int Counter = -1;

        // Im Konstruktor wird die Liste übergeben um die Operationen
        // MoveNext / Reset / Current darauf ausführen zu können
        public MyCollectionEnumerator(List<string> _StringList)
        {
            this.StringList = _StringList;
        }

        // Geht auf den nächsten Datensatz, der in der Liste 
        // gespeichert ist. Wenn MoveNext() false zurückgibt
        // ist das Ende der Liste erreicht
        public bool MoveNext()
        {
            Counter++;
            return Counter < StringList.Count;
        }

        // Setzt die Collection zurück.
        public void Reset()
        {
            Console.WriteLine("RESET!");
            Counter = -1;
        }

        // Gibt immer das aktuelle Element zurück, was mit 
        // MoveNext erreicht wurde
        public object Current
        {
            get
            {
                return StringList[Counter];
            }
        }
    }

    public class MyCollection
    {
        // Intern ist sind Collections meistens vom Typ List<T>
        // aber die eigene Implementierung gibt uns die Möglichkeit
        // den Zugriff auf die Liste anzupassen.
        private List<string> _StringList = new List<string>();

        // Hinzufügen eines Strings
        public void AddString(string newString)
        {
            this._StringList.Add(newString);
        }

        // GetEnumerator wird benötigt um mit foreach(...)
        // über die Collection zu iterieren
        public System.Collections.IEnumerator GetEnumerator()
        {
            return new MyCollectionEnumerator(_StringList);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            // Gecustomizte Collection
            MyCollection myCol = new MyCollection();
            myCol.AddString("Schatzi schenk mir ein Foto");
            myCol.AddString("schenk mir ein Foto vom Bier");
            myCol.AddString("Schatzi schenk mir ein Foto");
            myCol.AddString("Dann schenk ich Dir auch eins");
            myCol.AddString("vom Tier (also von den Muppets)");


            foreach (string s in myCol)
            {
                Console.WriteLine(s);
            }

            Console.ReadLine();
        }
    }
}
Veröffentlicht unter .NET, C#, Programmierung | Verschlagwortet mit , , | Schreib einen Kommentar

WPF MVVM: Was ist der Sinn hinter RelayCommand und wozu braucht man RelayCommand?

Problemfeld

RelayCommand (s) erfüllen den Zweck von Actions / Delegates und sind somit Funktionszeiger die es erlauben, zu einem späteren Zeitpunkt eine Methode aufzurufen.

Sie implementieren das Interface ICommand, welches von den WPF Controls genutzt wird, um bei Bedarf die Execute()-Methode aufzurufen. D.h. die Execute()-Methode soll nur dann aufgerufen werden, wenn das WPF Control das Ereignis tatsächlich auslöst und nicht bereits zur Bindung.

Ohne RelayCommands müsste man für jeden Command eine eigene Klasse schreiben, welche vom Interfache ICommand erbt. Sie helfen somit Code einzusparen.

Verwendung in einem MVVM Pattern

Häufige Verwendung: In einer XAML Datei wird ein Button definiert, der an einen RelayCommand gebunden wird, welcher zu einem späteren Zeitpunkt aufgerufen werden soll:

Das ViewModel, welches die View instanziert, muss einen RelayCommand „PerformCalibration“ definieren, der erst aufgerufen wird, wenn der Button geklickt wird (Relay) und nicht sofort bei der Bindung an den ButtonCommand.

Für diesen Zweck beinhaltet das ViewModel, welches die View instanziert, eine Funktion die den RelayCommand zurückgibt:
 

Der Button ruft die Funktion „Execute“ des implementierten RelayCommands auf, wenn er geklickt wird.

Da RelayCommands „Actions“ sind, haben Sie keinen Rückgabewert.

Veröffentlicht unter .NET, C#, Programmierung, WPF Windows Presentation Foundation | Schreib einen Kommentar

2020-08-02 Urlaubsbericht: Aqua Mundo Zugang im Center Park Het Merdaal zu Corona / COVID-19

Aufgrund der COVID-19 Situation ist der Zugang zum Aqua Mundo auf 2 Stunden beschränkt. Center Parcs informiert vor der Ankunft, dass man für das Buchen eines 2-Stunden Zeitfensters die Center-Parcs App benutzen kann, alternativ auch über die Rezeption, welche sich im Zentrum befindet, ein Zeitfenster buchen kann. Für die Nutzung der Center Parcs App benötigt man die E-Mailadresse, welche beim Tätigen der Buchung genutzt wurde. Außerdem wird darauf hingewiesen, dass jeder Besucher selbst dafür verantwortlich ist die Maßnahmen umzusetzen.

Die buchbaren Zeitfenster sind die folgenden:

  • Zeitfenster 1: 9.45h
  • Zeitfenster 2: 12.00h
  • Zeitfenster 3: 14.15h
  • Zeitfenster 4: 16.30h
  • Zeitfenster 5: 18.45h

Es wird darum gebeten keine Zeitfenster hintereinander zu buchen. Man soll vor jeder Aqua Mundo Nutzung frisch geduscht sein und die Badekleidung direkt unter den Klamotten tragen. Im Schwimmbad gibt es kleine Fächer in denen Platz für Geldbeutel / Handy und andere kleine Wertsachen ist. Für das Belegen des Faches ist eine 1-EURO-Münze erforderlich. Man muss seine Klamotten in eine mitgebrachte Tasche stecken und diese irgendwo im Aqua Mundo verstauen. Wir haben beim Einlass daher meistens die Badehose direkt angezogen und Badelatschen / Flip Flops getragen, die wir beim Einlass ausgezogen haben. Man wird im Prinzip über eine Route im Kreis durch das Aqua Mundo geschickt. Wenn man kleine Kinder dabei hat und etwas länger zum Umziehen braucht, hat man meistens keine Chance die Wildwasserbahn ohne längeres Anstehen / ohne längere Wartezeiten zu nutzen. Ist man im Schwimmbad mit den Badeschuhen durch rasches Entkleiden sofort schwimmfertig, lohnt sich der direkte Weg zur Wildwasserbahn, da dort keine Schlange existiert.

Abstände wurden zu unserer Zeit weniger eingehalten obwohl überall Schilder darauf hinweisen. Im Zentrum / Market Dome werden keine Masken getragen daher ist die erste Ankunft eher etwas gewöhnungsbedürftig da man das Gefühl hat man würde grobe fahrlässig handeln.

Wir haben natürlich die App genutzt um unsere Aqua Mundo Zeitfenster zu buchen, allerdings wird beim Eintritt in das Aqua Mundo nicht geprüft ob man wirklich eine Buchung zum aktuellen Zeitfenster hat. Wenn man die App nicht zum buchen benutzt, würde das keiner merken.

Es spielt im Grunde keine Rolle wie oft man ins Aqua Mundo geht. Wir haben für die Woche 3x 4 Karten für 4 Personen bekommen, sind allerdings 5x im Aqua Mundo gewesen, da wir nicht immer vollständig waren.

Veröffentlicht unter Allgemein | Schreib einen Kommentar

C# und Delegaten, Func, Action, Predicate

Was sind Delegates?

Beispiel:
public delegate string MeinDelegateName(string s);

Ein Delegate deklariert einen Datentyp (hier MeinDelegateName) anhand einer Funktionssignatur. Eine Funktionssignatur, welche den Aufbau einer Funktion darstellt, sieht folgendermaßen aus:

Rückgabewert DelegateName (Argumente)

Diesem Datentyp kann nun eine oder mehrere (siehe +=-Operator) Funktionen mit genau dieser Funktionssignatur zugewiesen werden, was das Aufrufen dieser Funktionen ermöglicht, ohne deren Namen zu kennen. Dadurch wird die Implementierung der Funktion von dem aufrufendem Code entkoppelt.

Ein Verwendungsbeispiel wären EventListener / Events, welchen über Delegates die Funktion übergeben wird, die beim Eintritt des Events aufgerufen werden soll. Über den += Operator können einem Event mehrere Funktionen zugewiesen werden (z.B. bei einem Windows-Fenster das OnLoad-Event).

Bei der Verwendung von Delegates muss also der Delegate-empfangende Code den Namen der Funktion (bzw. Methode) nicht wissen und kann diese trotzdem aufrufen. Delegates anonymisieren also Funktions- bzw. Methodennamen. Ein ähnlicher Mechanismus für Klassen stellen Interfaces zur Verfügung. Interfaces anonymisieren allerdings nicht per se Namen der deklarierten Methoden/Funktionen sondern lediglich der Klassennamen. Wäre eine Anonymisierung von Funktions- und Methodennamen gewünscht, könnten die Delegates in den Interfaces deklariert werden.

Deklaration von Delegate-Typen mit dem normalen Delegate-Schlüsselwort

// Definition des Delegatentyps SageHalloWeltDelegate:  
// Eine Funktionssignatur, welcher ein string übergeben
// wird und welche einen String zurückgibt, wird festgelegt
public delegate string SageHalloWeltDelegate(string s); 

public string sageHalloWeltFunktion(string s)
{
    Console.Write("Hallo");
    return " Welt";
}

public Program()
{
    // Instanz der Funktion "delegateInstanzDerFkt" mit der 
    // Funktionssignatur "SageHalloWeltDelegate"
    SageHalloWeltDelegate delegateInstanzDerFkt = sageHalloWeltFunktion;
    
    // Aufruf der instanzierten Funktion 
    Console.WriteLine(delegateInstanzDerFkt("Hallo"));		
}

Durch .NET vordefinierte Delegattypen: Action / Func / Predicate

 .NET enthält jedoch eine Reihe von Delegattypen, die Programmierer verwenden können, damit sie keine neuen Typen (wie oben der Typ „SageHalloWeltDelegate„) erstellen müssen. Diese Typen lauten Func<>Action<> und Predicate<>

Die Deklarationszeile des Delegate-Typs
public delegate string SageHalloWeltDelegate(string s);
fällt somit weg.

  • Action<> wird verwendet, wenn eine Aktion mithilfe der Argumente des Delegaten ausgeführt werden muss. Die von dem Typ gekapselte Methode gibt keinen Wert zurück.
    Die Signatur darf maximal 16 Argumente enthalten.

    Bsp. für eine Action
    Action<string> delegateInstanzDerFkt = sageHalloWeltFunktion;

    Hier würde der Teil “ Welt“ aus dem obigen Beispiel nicht zurückgegeben werden.
  • Func<> wird üblicherweise verwendet, wenn eine Transformation ausgeführt werden muss, Sie also die Argumente des Delegaten in ein anderes Ergebnis transformieren müssen. Projektionen sind ein gutes Beispiel. Die von dem Typ gekapselte Methode gibt einen angegebenen Wert zurück.
    Die Signatur darf maximal 16 Argumente enthalten.

    Bsp. für Rückgabewert „string“ und Übergabewert „string“:
    Func<string, string> delegateInstanzDerFkt = sageHalloWeltFunktion;

    Der letzte Typparameter der Func-Deklaration ist jeweils der Rückgabewert.
    Func<string, string, int> delegateInstanzDerFkt = sageHalloWeltFunktion;
    würde einen Integer-Wert zurückgeben und ihr würden zwei Strings übergeben werden.
  • Predicate<> wird verwendet, wenn Sie ermitteln müssen, ob das Argument die Bedingung des Delegaten erfüllt. Sie können auch die Schreibweise Func<T, bool> verwenden. In diesem Fall gibt die Methode einen booleschen Wert zurück.
    Predicates werden meistens bei LINQ verwendet, wenn man zum Beispiel in Collections oder Listen etwas suchen möchte. Meistens wird Predicate dann als LAMBDA-Ausdruck geschrieben.
    Die Signatur darf maximal 16 Argumente enthalten.

    Func<string, bool> delegateInstanzDerFkt = sageHalloWeltFunktion;
    ist also äquivalent mit
    Predicate<string> delegateInstanzDerFkt = sageHalloWeltFunktion;
    und würde mit dem obigen Beispiel zu einem Fehler führen, da die Methode sageHalloWeltFunktion einen String zurückgibt.

Konvertieren von Lamda-Ausrücken in Delegateinstanzen

// Berechne quadrat
Func<int, int> square = x => x * x; 
Console.WriteLine(square(5));

// Konkateniere String
Func<string, string, string> concat = (a,b) => a + " " + b;
concat("Hello", "World");

// Einzelne Action wird ohne Übergabeparameter (Rückgabe hat sie nicht)
Action line = () => Console.WriteLine("Hello world!");
line();

// Einzelne Action wird ohne Übergabeparameter (Rückgabe hat sie nicht)
Action line = text => Console.WriteLine(text);
line("Hello world!");

Example:

Veröffentlicht unter .NET, C# | Verschlagwortet mit , , , , , , | Schreib einen Kommentar

VBA: Check if string StartsWith / StartWith or EndsWith / EndWith

Problem

Visual Basic for application does not have function to test, whether a string starts with or ends with another string like it is included in the .NET Framework

Approach

Those function can easily created by using the existing string functions

Solution

The following code can be pasted to a VBA project:

Public Function EndsWith(str As String, ending As String) As Boolean
     Dim endingLen As Integer
     endingLen = Len(ending)
     EndsWith = (Right(Trim(UCase(str)), endingLen) = UCase(ending))
End Function

Public Function StartsWith(str As String, start As String) As Boolean
     Dim startLen As Integer
     startLen = Len(start)
     StartsWith = (Left(Trim(UCase(str)), startLen) = UCase(start))
End Function

Example usage:

If StartsWith(„My string has something in it“, „My string“) Then Msg Box „It is in it!“
If EndsWith(„My string has something in it“, „in it“) Then Msg Box „It is in it!“

Veröffentlicht unter Programmierung, VBA | Verschlagwortet mit , , , | Schreib einen Kommentar

How to add CMDER (Console Emulation) on right-click to the context menu of the Windows Explorer

Problem

You want to see an entry that opens cmder.exe in Windows Explorer at the location where you use it.

Approach

Create or download the Windows registry key that enables to open CMDER on right-click with the parameters of the Directory that you are in passed.

Solution

As Code:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\Background\shell\Cmder]
@="Open in Cmder"
"Icon"="D:\\cmder\\Cmder.exe,0"

[HKEY_CLASSES_ROOT\Directory\Background\shell\Cmder\command]
@="\"D:\\cmder\\Cmder.exe\" \"%V\""

[HKEY_CLASSES_ROOT\Directory\shell\Cmder]
@="Open in Cmder"
"Icon"="D:\\cmder\\Cmder.exe,0"

[HKEY_CLASSES_ROOT\Directory\shell\Cmder\command]
@="\"D:\\cmder\\Cmder.exe\" \"%1\""

or download it here.

Veröffentlicht unter Batch / Bash / Ruby | Schreib einen Kommentar

J.B.O. veröffentlicht meinen Karaoketagbeitrag auf ihrer Fanseite und Facebookseite

Ich habe ein Video für den Karaoketag von Vito C. erstellt, was von J.B.O. auf ihrer Fanseite und Facebookseite veröffentlicht wurde 😀 …

Veröffentlicht unter Allgemein | Schreib einen Kommentar

Visual Studio 2013 : Show folders with *.cs files in the solution explorer after they suddenly disappeared / hidden

Problem

Sometimes it happens, that you have created folders in Visual Studio for your application and had put some *.cs C# Source Code files that suddenly disappeard in the solution explorer.

Analysis

I.e. that can happen when you have forgotten to save your Visual Studio application project, berfore you have closed the IDE.

Solution

Use the file explorer and navigate to your Visual Studio solution (alternatively you can right-click a source code file in your folder and select „Open contained folder“ from the context menu).

Open the .csproj file in your solution in a text editor of your choice:

.csproj files store the project structure of the solution explorer

Go to the section where the <ItemGroup /> tags are declared and add a new section with the folders and source code files you want to show in your solution like in the screenshot below

My folders Command, ViewModelBase, ViewModel and Model disappeard over night, so i readded the marked group

You can add all cs-files with a wildcard star like it is shown in the screenshot above.

Veröffentlicht unter .NET, C#, Programmierung | Verschlagwortet mit , , , , , | 1 Kommentar

Bei Popmusik ist es nicht die Musik selber, mit der wir ein positives Empfinden / Identifikation aufbauen. Die Geschichte und das Image der Band / des Musikers beeinflussen maßgeblich die Musikbewertung.

Intention

Es gibt heute sehr viel richtig gute und anspruchsvolle Musik, die professionell und mit viel Herzblut produziert wird und dennoch wird vielen Titeln niemals Gehör geschenkt. Warum ist das so? Nachdem ich nun einige Studien und Artikel über Musik-Image gelesen habe, möchte ich in diesem Blog-Eintrag meine persönlichen Gedanken und Interpretation niederschreiben.

Analyse

Warum gibt es anspruchsvolle, perfekt aufgenommene und abgemischte Musik, die niemals gehört wird und weitere primitive Werke, welche die deutschen Charts stürmen?

Um dies zu beleuchten kann man sich vor Augen führen, dass unkomplizierte, weniger anspruchsvolle Musik für das untrainierte Gehör eingängiger ist, als komplexe und durchdachte Harmonie-Strukturen. Man könnte nun meinen, dass ein ausgebildeter Musiker einem 3 bis 4 Akkordschema Folge leisten muss um eingängige Songs zu schreiben. Ist es wirklich so einfach?

Die Antwort ist: „Nein!“ – wieso erleben wir zur Zeit eine Gangster-Rap/Gangster-Hip Hop Herrschaft in den deutschen Charts wenn es wirklich um Harmonien ginge? Könnte man sich nicht einfach eine Loopstation kaufen und fette gesamplete Beats in einen Lautheits-maximierenden Limiter drücken, während man ein bisschen rappt und die Sprachmelodie mit einer Autotune-gefütterte Schlangenbeschwörermusik (oder orientalischem Gedudel) belegt, so wie es in den deutschen Charts z.Zt. Gang und gebe ist?

Die Antwort ist: Nein!“. Es ist nicht alleine die Fähigkeit des guten Musikers, sich für niedere Zwecke zu prostituieren, es ist viel mehr die Art wie er seine Geschichte vermarktet. Über die Geschichte des Musikers baut das Publikum eine Identifikation zu ihm auf. Wenn man über die eigenen Idole nachdenkt, so hatte jedes dieser Idole eine ganz besondere Geschichte die den Zuhörer fasziniert hat und zu der er eine Bindung aufgebaut hat.

Denken wir mal über einige 80er/90er Klassiker nach …

  • Bob Marly
  • Jimi Hendrix
  • Queen
  • …. oder wie wärs mit Böhse Onkelz…?

Jeder der oben genannten Chart-Stars verkörpert eine ganz spezielle Geschichte die das Publikum angesprochen hat. Bei den modernen Gangstar-Rap/Hip Hop-Stars ist das ähnlich …

  • Capital Bra
  • Bushido
  • Kollegah …

Die jüngeren Künstler sind Personen, die dem älteren Publikum nichts sagen. Sie haben in der Regel keinerlei instrumentelle Kenntnisse sondern beherrschen lediglich ihre Rap-Betonung und den Rythmus (über „gute“ Texte mag man streiten).

Hauptaufgabe von Musiker-Images

Viele der nachfolgend genannten Hauptaufgaben beziehen sich hauptsächlich auf Jugendliche, da bei diesen die Musik maßgeblich zur Identitätsfindung beiträgt. Menschen ab einem Alter von 31 Jahren hingegen versperren sich oftmals neuer Musik.

  • Soziale Identität / Identitätsbildung
    • Die Musik hilft die eigene Identität auszudrücken
  • Selbstkategorisierung / Abgrenzung
    • Individualität zeigen
  • Gruppenprozesse
    • Abgrenzung zu anderen Gruppen
    • Gruppenzugehörigkeit
    • Gruppennorm
    • Gruppenzwang

Fazit

Wie wir damals eine Bindung zu unseren Idolen aufgebaut haben, bauen vielen Menschen auch nur eine Bindung zu Musik auf, indem sie durch die Geschichte des Musikers oder das Musiker-Image beeinflusst werden. Ein Pop-Musiker ohne Geschichte wird in den seltensten Fällen Erfolg haben, weil er seinem Publikum nicht die Möglichkeit zum Aufbau einer Identifikation oder Bindung ermöglicht.

Veröffentlicht unter Musik | Schreib einen Kommentar