Schöne Seitenübergänge beim Navigieren im Browser

Um mit Internet Explorer (und wohl auch Firefox) schöne Seitenübergänge zu machen, reicht es, im HEAD der HTML-Seite folgende Transition-Befehle einzufügen:

<meta http-equiv=”Page-Enter” content=”blendTrans(Duration=0.02)” />
<meta http-equiv=”Page-Exit” content=”blendTrans(Duration=0.02)” />

Unter Google Chrome/Chromium geht das so nicht. Dort geht es (z.B.) ähnlich mit jQuery, so wie im Artikel “How to Use jQuery to Make Slick Page Transitions“.

Vom Prinzip her fügt er so was ein um beim Laden einzublenden:

<script type=”text/javascript”>
$(document).ready(function() {
$(“body”).css(“display”, “none”);
$(“body”).fadeIn(2000);
});
</script>

Beim Klicken der Links wird dann ausgeblendet. Im Gesamten schaut es dann grob so aus:

<script type=”text/javascript”>
$(document).ready(function() {
$(“body”).css(“display”, “none”);

$(“body”).fadeIn(2000);

$(“a.transition”).click(function(event){
event.preventDefault();
linkLocation = this.href;
$(“body”).fadeOut(1000, redirectPage);
});

function redirectPage() {
window.location = linkLocation;
}
});
</script>

Er empfiehlt dann noch, per CSS den Seitenhintergrund einzufärben, dass die Farbe nicht “flackert”, z.B. schwarz wenn die Seiten primär einen dunklen Hintergrund haben:

html {
/*If you had a black or close to black background*/
background-color: #000000;
}

Nett gemacht insgesamt, bin gespannt ob ich das mal brauche und so dann auch einsetzen kann.

Bandbreite und Paketumlaufzeit

Das hier ist sicher jetzt nicht-wissenschaftlich und ggf. auch in Teilen falsch/ungenau. Ich möchte das trotzdem mal für mich festhalten:

Eine Internetanbindung (z.B. zu einem Server) hat zwei Schlüssel-Parameter, die sie als “schnell” erscheinen lassen:

Anhand der Bandbreite ist quasi definiert, wie viele Daten in welcher Zeiteinheit übertragen werden können. Die Paketumlaufzeit beschreibt, wie lange es dauert, bis die Daten zum Server übertragen werden und eine Antwort wieder beim ursprünglichen Absender ist.

Aus meiner Sicht sind beide Werte wichtig um die Qualität einer Internetverbindung bewerten zu können; eine zwar hohe Bandbreite gepaart jedoch mit einer lange Paketumlaufzeit (“Lag“) ergibt wiederum ein unbefriedigendes Ergebnis, wenn ich z.B. via Remote Desktop auf einen Rechner zugreife, also viele kleine Pakete hin und hergehen.

Fastenwandern – so gelingt euch das Abnehmen

Fastenwandern in der schönen Natur – alleine oder lieber in der Gruppe?

Mit dem Fastenwandern verbinden wir das Heilfasten zusammen mit dem Wandern an der frischen Luft. Durch die körperliche Betätigung in der freien Natur wird der Effekt des Abnehmens merklich verstärkt und bringt gute Laune mit sich. Von der Gesellschaft gerne als Selbstquälerei abgetan, erzählen geübte und erfahrene Fastenwanderer genau das Gegenteil – es ist ein Zurückfinden zu sich selbst, macht klare Gedanken und der Körper wird angesammelte Schlacken los. Sogenannten Erstfastern wird unbedingt die Gruppe empfohlen, damit Hilfe da ist, wenn es, wider Erwarten, zu Zwischenfällen kommt. Das können beispielsweise anfängliche Kreislaufprobleme sein, oder Magenbeschwerden. In der Gruppe befindet sich immer ein Profi, der Anleitungen gibt und bestens mit der Thematik vertraut ist ebenso berichten erfahrene Fastenwanderer gerne von ihren Anfängen und können Fragen beantworten.

Was gilt es beim Fastenwandern zu beachten und welche Arten des Abnehmens gibt es hier?

Einige Grundregeln sollten beim Fastenwandern beachtet werden:

  • Wichtig ist, dass keine gesundheitlichen Einschränkungen vorliegen und der Hausarzt hier grünes Licht gibt – Kranke sollten nur unter ärztlicher Aufsicht fasten!
  • gute Wanderschuhe sind wichtig und möglichst Strümpfe aus Baumwolle tragen
  • ein paar Tage bevor es losgeht wenn möglich, schon mal einen Obsttag einlegen, viel Gemüse essen und Wasser trinken, damit die Nieren gut durchspült werden und der Darm sich entleeren kann
  • Abstand nehmen vom beruflichen Terminkalender, raus aus dem Alltagstrott und weg von negativem Stress
  • möglichst kein Nikotin und Alkohol während dieser Zeit, auch keine Abführmittel oder Entwässerungstabletten zu sich nehmen

Weiterführende Informationen hierzu finden sich hier.

Es gibt, neben dem angebotenen einwöchigen Fastenwandern, unterschiedliche Arten des Fastens, wie:

  • das sogenannte Tagesfasten, einmal pro Woche, eignet sich gut für Erstfaster, die hier gut beobachten können, wie es ihnen ergeht, feste Nahrung mal für einen Tag wegzulassen, oder es passt einfach mal, so einen Tag einzulegen – nicht erwiesen, aber gerne genutzt soll sich hier der Vollmond gut für den Start eignen, denn, danach geht es in die Abnehmphase und es heißt, das der Körper dann leichter abgibt. So eignet sich das Tagesfasten ganz gut zur allgemeinen Gesundheitsvorsorge
  • gefolgt vom Wochenendfasten, einmal im Monat, das dem Tagesfasten ähnlich ist, hier kann man sich zwei Tage länger auf das Fasten einlassen
  • dann gibt es das traditionelle 10-Tage-Fasten und das Langzeitfasten von zwei bis zu vier Wochen

Wo finde ich die schönsten Gegenden und passende Angebote zum Fastenwandern?

In ganz Europa wird das Fastenwandern angeboten. Es werden die Tageskilometer, die es zu erreichen gilt, angegeben, die Unterbringung, die gerne mit Saunanutzung angeboten wird, Geländeschwierigkeiten werden besprochen sowie die Fastenverpflegung und eventuelle Beiprogramme, wie beispielsweise Fahrrad fahren und Entspannungsübungen.
Wer mag begibt sich nach Mecklenburg und wandert an der wunderschönen Müritz, oder es geht in den Spreewald, das zu den schönsten Naturschutzgebieten Europas zählt, die Insel Rügen an der Ostsee gelegen lädt zum Fastenwandern ein und im Harz, in der Schweiz und in Thüringen erwarten erfahrene und kompetente Gruppenführer darauf, Euch beim Fastenwandern begleiten zu dürfen.
Das Ausland steht uns in dem Thema nicht nach, wer mag lässt sein Fastenwandern in Tunesien organisieren, wo es durch reich bewachsene Berglandschaften bei Ain Draham geht. Verbunden damit, kann eine Kulturreise daraus werden.

Wo auch immer Ihr sich zum Fastenwandern einfinden, sich ganzheitlich etwas Gutes zu tun möchten, eines bleibt: Die Stimmungen beim Gruppen-Fastenwandern sind einfach bombig.

4 Winterräder für Golf GTI 6 zu verschenken (73037 Göppingen)

++++ UPDATE: REIFEN SIND WEG UND IN GLÜCKLICHEN HÄNDEN ++++

Hat jemand Interesse an 4 Winterrädern (also die Reifen und die Felge) für einen Golf GTI 6?

Technische Daten, soweit ich das ablesen konnte:

  • 4 Räder. Reifen samt Leichtmetallfelgen
  • Reifen-Dimensionen 205/55R16
  • Reifen-Hersteller: Bridgestone
  • Felgen-Hersteller: “MSW designed by OZ”

Anhand der Verschleißanzeiger würde ich mal vermuten, dass die Reifen noch für mindestens eine Saison halten.

Das ganze gibt es bei mir hier in Eislingen (das ist neben Göppingen) zum Abholen. Bitte nur alle 4 Räder komplett.

Warum kostenlos?

Weil ich damals die Räder zu einem Leasing-Golf extra dazu gekauft hatte und das Leasing zu Ende ist und ich jetzt die Räder übrig habe. Und diese verschenke ich jetzt eben von privat an privat.

Falls Ihr mir doch was dafür geben wollt, natürlich gerne, ansonsten einfach mitnehmen und freuen.

Kontakt

Ihr erreicht mich idealerweise per E-Mail via uwe.keim@gmail.com.

++++ UPDATE: REIFEN SIND WEG UND IN GLÜCKLICHEN HÄNDEN ++++

Impressionen

Nachfolgend ein paar Fotos der Räder.

winterraeder-zu-verschenken-goeppingen-01

winterraeder-zu-verschenken-goeppingen-02

winterraeder-zu-verschenken-goeppingen-03

winterraeder-zu-verschenken-goeppingen-04

winterraeder-zu-verschenken-goeppingen-05

winterraeder-zu-verschenken-goeppingen-06

winterraeder-zu-verschenken-goeppingen-07

winterraeder-zu-verschenken-goeppingen-08

++++ UPDATE: REIFEN SIND WEG UND IN GLÜCKLICHEN HÄNDEN ++++

Bubble Mouse Move events from child controls up the hierarchy in Windows Forms

Windows Forms (or “WinForms” for short) does not know the concept of event bubbling (also called “event propagation” sometimes). To solve this in terms of command routing, I’ve written some small classes earlier.

To bubble up events from child controls to parent controls (or the form itself), the idea is to hook into the child control creation and hook up for those specific events and manually forward them.

Based on this idea and with the help of a forum answer on MSDN, I’ve written a small class that you can attach to a control and get all child control MouseMove events. The class looks like:

public sealed class MouseEventBubbler
{
    private readonly Control _attachTo;

    public MouseEventBubbler(Control attachTo)
    {
        _attachTo = attachTo;

        _attachTo.MouseMove += _attachTo_MouseMove;

        _attachTo.ControlAdded += _attachTo_ControlAdded;
        _attachTo.ControlRemoved += _attachTo_ControlRemoved;

        foreach (Control control in _attachTo.Controls)
        {
            AttachToControl(control);
        }
    }

    public void _attachTo_MouseMove(object sender, MouseEventArgs e)
    {
        OnMouseMove(e);
    }

    public event MouseEventHandler MouseMove;

    private void _attachTo_ControlAdded(object sender, ControlEventArgs e)
    {
        AttachToControl(e.Control);
    }

    private void _attachTo_ControlRemoved(object sender, ControlEventArgs e)
    {
        DetachFromControl(e.Control);
    }

    private void AttachToControl(Control c)
    {
        c.MouseMove += Child_MouseMove;
        c.ControlAdded += Child_ControlAdded;
        c.ControlRemoved += Child_ControlRemoved;
        AttachToChildren(c);
    }

    private void AttachToChildren(Control parent)
    {
        foreach (Control child in parent.Controls)
        {
            AttachToControl(child);
        }
    }

    private void DetachFromControl(Control c)
    {
        DetachFromChildren(c);
        c.MouseMove -= Child_MouseMove;
        c.ControlAdded -= Child_ControlAdded;
        c.ControlRemoved -= Child_ControlRemoved;
    }

    private void DetachFromChildren(Control parent)
    {
        foreach (Control child in parent.Controls)
        {
            DetachFromControl(child);
        }
    }

    private void Child_ControlAdded(object sender, ControlEventArgs e)
    {
        AttachToControl(e.Control);
    }

    private void Child_ControlRemoved(object sender, ControlEventArgs e)
    {
        DetachFromControl(e.Control);
    }

    private void Child_MouseMove(object sender, MouseEventArgs e)
    {
        var pt = e.Location;
        var child = (Control)sender;
        do
        {
            pt.Offset(child.Left, child.Top);
            child = child.Parent;
        }
        while (child != _attachTo);

        var newArgs = new MouseEventArgs(e.Button, e.Clicks, pt.X, pt.Y, e.Delta);
        OnMouseMove(newArgs);
    }

    private void OnMouseMove(MouseEventArgs newArgs)
    {
        var h = MouseMove;
        if (h != null)
        {
            h(this, newArgs);
        }
    }
}

I’ve also saved it as a PasteBin.

The class can be adjusted to match other events than the MouseMove event, if required.

Dateigrößenangaben in C# menschenlesbar formatieren

Um aus Byte-Angaben (z.B. von Dateigrößen) menschenlesbare Werte (z.B. “12.5GB”) zu machen, sowie den anderen Weg, habe ich mir ein bisschen Code geschrieben bzw. von Stack Overflow zusammen gesucht:

public static class SizeTranslationHelper
{
    /// <summary>
    /// Converts bytes to human-readable, e.g. "12.5GB".
    /// </summary>
    public static string MakeLazy(ulong byteCount)
    {
        string[] suf = { @"B", @"KB", @"MB", @"GB", @"TB", @"PB", @"EB" }; //Longs run out around EB
        if (byteCount == 0)
            return "0" + suf[0];
        var bytes = (ulong)Math.Abs((decimal)byteCount);
        var place = Convert.ToInt32(Math.Floor(Math.Log(bytes, 1024ul)));
        var num = Math.Round(bytes / Math.Pow(1024ul, place), 1);
        return (Math.Sign((decimal)byteCount) * num).ToString(CultureInfo.InvariantCulture) + suf[place];
    }

    /// <summary>
    /// Converts human-readable, e.g. "12.5GB", to bytes.
    /// </summary>
    public static ulong TranslateLazySize(string sizeLazy)
    {
        sizeLazy = sizeLazy.ToLowerInvariant();

        ulong result = 0;
        if (tryParse(ref result, sizeLazy, @"b", 1ul))
        {
            return result;
        }
        else if (tryParse(ref result, sizeLazy, @"kb", 1024ul))
        {
            return result;
        }
        else if (tryParse(ref result, sizeLazy, @"mb", 1024ul * 1024ul))
        {
            return result;
        }
        else if (tryParse(ref result, sizeLazy, @"gb", 1024ul * 1024ul * 1024ul))
        {
            return result;
        }
        else if (tryParse(ref result, sizeLazy, @"tb", 1024ul * 1024ul * 1024ul * 1024ul))
        {
            return result;
        }
        else if (tryParse(ref result, sizeLazy, @"pb", 1024ul * 1024ul * 1024ul * 1024ul * 1024ul))
        {
            return result;
        }
        else if (tryParse(ref result, sizeLazy, @"eb", 1024ul * 1024ul * 1024ul * 1024ul * 1024ul * 1024ul))
        {
            return result;
        }
        else
        {
            decimal r;
            if (decimal.TryParse(sizeLazy, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out r))
            {
                return (ulong)r;
            }
            else
            {
                throw new Exception(string.Format(@"Cannot parse '{0}' to number.", sizeLazy));
            }
        }
    }

    private static bool tryParse(ref ulong result, string sizeLazy, string suffix, ulong factor)
    {
        decimal r;
        if (
            sizeLazy.EndsWith(suffix) &&
            decimal.TryParse(sizeLazy.Substring(0, sizeLazy.Length - suffix.Length), NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out r))
        {
            result = (ulong)(r * factor);
            return true;
        }
        else
        {
            return false;
        }
    }
}

Hier noch der Pastebin-Eintrag dazu.

Zeig mir deine Grill-Hardware, und ich sag dir, wer du bist

Wer hätte gedacht, dass der Sommer wie aus dem Nichts auftaucht? Den Frühling haben wir wohl gekonnt übersprungen, und nun werden die Wiesen in Parks und an Ufern von Grillvölkern bewohnt. Und wenn man da durch die Schlachtfelder der Schaschlik-Spieße schlendert, merkt man schnell: Die verschiedenen Grillvölker definieren sich durch ihre Hardware. Ganz unähnlich sind sie da uns Computer-Aficionados also nicht … Die Inspektion der physischen Bestandteile der konkurrierenden Grills (und wir sprechen hier natürlich von Holzkohlegrills) erfolgt bei den meisten Wiesennomaden aus dem Blickwinkel heraus – man will ja nicht auffallen. Vorlieben werden dabei mit einem wohlwollenden Nicken honoriert, Abneigungen hingegen mit einem spöttischen Lächeln im Mundwinkel quittiert. Holzkohlegrill ist schließlich nicht gleich Holzkohlegrill. So mannigfaltig die Ausführungen des Grills sind, so variabel definieren sie auch den dahinter stehenden Brutzler. Edingershops.de bietet verschiedene Modelle von Weber Grill, die zur Typologie der hier vorgestellten Grillmeister passen.

Bratwurst-pixelio

Der tragbare Kugelgrill, zum Beispiel, hat eine äußerst niedrige Höhe. Er ist der perfekte Begleiter für den entspannten Zeitgenossen, der die Sonnenseite des Lebens liebt. Und das nicht nur sprichwörtlich. Wohin auch immer die Sonne wandert, der gechillte Grillmeister geht mit ihr mit. Er wird niemals im Schatten stehen. Oder besser: sitzen. Denn der tragbare Grill ist vor allem ein Allrounder für hippieeske Wiesen-Sit-Ins. Am Grill vegetarische Würstchen wendend herumstehen, während alles anderen liegend entspannen? Nö. Zu anstrengend.

Einen Grill von der Tankstelle guckt der professionelle Premiumgriller nur mit verzogener Miene an. Er ist jeden Sommer in seiner Grill-Montur (Schürze mit einem kecken Sprücheklopfer-Aufdruck und hitzeresistente Ofenhandschuhe) und mit seiner „Software“ (zwei verschiedene Grill-Roste, Spezial Briketts) vor Ort, um allen zu demonstrieren, wer der Grill-König ist. Wie viel PS sein unverwüstlicher Edelstahl-Grill hat, stellt er gern zu Schau: Komfortable Stehhöhe, Lenkrollen und Räder an den Stehfüßen, eine Ablagefläche für das argentinische Rindersteak, und ein Deckelthermometer. Durch neidische Blicke fühlt er sich in seiner Überlegenheit bestätigt. Doch Achtung: Niemand sonst darf seinen Premiumgrill befeuern, also Finger weg!

Der Durchschnittsbrutzler hingegen hat es leicht. Er bleibt im Kampf der Grillvölker schweizerisch neutral und ist nur des Grillens wegen ein Wiesenbewohner. Er macht seinen Grillabend weder zu einem Happening noch zu einem Exklusiv-Event und betrachtet seinen Grill als Arbeitstier, das genau das machen soll, wozu es gedacht ist: Lebensmittel lecker machen. Im Vorhinein eine Grillkunde zu studieren, würde ihm nicht mal im Traum einfallen, und so brät er seine Würstchen nach einem Rezept aus Bauchgefühl und Erfahrung auf einem Grill, den er schon seit Jahren besitzt und liebevoll pflegt.

Also nichts wie raus auf die Wiesen der Republik mit Bier und Grillgut im Gepäck. Welchen Grill auch immer ihr besitzt: Viel Vergnügen und guten Appetit!

Bildquelle: Katharina Wieland Müller / pixelio.de