Matthias Apsel: Der Elixir-Adventskalender

Hallo alle,

es ist sicher dem einen oder anderem aufgefallen: Der Adventskalender diesen Jahres musste täglich von Hand aktualisiert werden. Hinter dem 22. Türchen verbirgt sich dann auch ein Blick hinter die Kulissen. Mit relativ geringem Aufwand lässt sich der Prozess des Freischaltens der Türchen automatisieren. Das 23. Türchen enthält ein Tutorial für eine Umsetzung mit PHP.

@Christian Kruse hat einen Adventskalender für SELFHTML geschrieben, der eine bequeme Administration im Vorfeld oder auch im Nachgang ermöglicht und alle im Tutorial beschriebenen Annehmlichkeiten bietet, wie das zufällige Mischen aller und das Merken der geöffneten Türchen.

Der 2019er Kalender ist unter https://advent.selfhtml.org/2019 erreichbar, was einfach eine Weiterleitung auf https://forum.selfhtml.org/advent/2019 darstellt. Die Kalender der vergangenen Jahre können ebenfalls übertragen werden, sodass diese auch leichter auffindbar sind.

Vielen Dank an @Christian Kruse für seine Arbeit.

Bis demnächst
Matthias

--
Du kannst das Projekt SELFHTML unterstützen,
indem du bei Amazon-Einkäufen Amazon smile (Was ist das?) nutzt.
  1. Hallo Matthias,

    da auf diese Weise nun ein Fiddle von mir etwas mehr Aufmerksamheit bekommen könnte (12. Dezember), und das Fiddle relativ klein ist, würde ich den Inhalt gerne in den Thread übertragen.

    Kann man Threads de-archivieren?

    Rolf

    --
    sumpsi - posui - clusi
    1. Hallo Rolf,

      Kann man Threads de-archivieren?

      Nein. Admins können aber archivierte Beiträge bearbeiten, wenn das die eigentliche Absicht war.

      Freundliche Grüße,
      Christian Kruse

    2. Servus!

      Hallo Matthias,

      da auf diese Weise nun ein Fiddle von mir etwas mehr Aufmerksamheit bekommen könnte (12. Dezember), und das Fiddle relativ klein ist, würde ich den Inhalt gerne in den Thread übertragen.

      Kann man Threads de-archivieren?

      Christian hat schon einen Weg aufgezeigt. Ich habe nachträglich einige Beispiel ins Wiki übertragen. z.B. 06.Dez:

      Das SELF-Wiki hat imho drei Vorteile:

      • Die Beispiele sind passend einsortiert (idealerweise in zusammenhängenden Kurse)
      • Die Texte sind um das Persönliche, evetnuelle Tippfehler und die schlechten Beispiele vorher gekürzt worden.
      • Es gibt Querverlinkungen.

      Herzliche Grüße

      Matthias Scharwies

      --
      25 Jahre SELFHTML → SELF-Treffen 05.-07. Juni 2020 in Mannheim
  2. Lieber Matthias,

    ein wunderbares Projekt für Tutorials! Ich finde diese sehr ansprechend gemacht!

    Beim Lesen kam mir die Idee, ob man die Speicherung der Reihenfolge zusätzlich (lies: ergänzend) mit einem Cookie realisieren sollte, damit die mit PHP ausgelieferten CSS-Grid-Verwürfelungen auch schon ohne JavaScript in der vom User erwarteten Reihenfolge angezeigt werden. Meines Wissens kann JavaScript auch Cookies lesen und könnte sein localStorage mit dem Cookie-Inhalt abgleichen sofern vorhanden.

    Wer keine Cookies mag und auch noch JavaScript verbietet, der darf dann wirklich neu suchen.

    Was meinst Du dazu?

    Liebe Grüße

    Felix Riesterer

    1. Hallo Felix Riesterer,

      ein wunderbares Projekt für Tutorials! Ich finde diese sehr ansprechend gemacht!

      Dankeschön.

      Beim Lesen kam mir die Idee, ob man die Speicherung der Reihenfolge zusätzlich (lies: ergänzend) mit einem Cookie realisieren sollte,

      Ich hab tatsächlich auch an Cookies gedacht, dann aber davon Abstand genommen, vor allem, weil ich mir nicht sicher bin, ob man nun die Verwendung von Cookies anzeigen oder gar vor der Verwendung die Erlaubnis zur Verwendung einholen muss.

      Bis demnächst
      Matthias

      --
      Du kannst das Projekt SELFHTML unterstützen,
      indem du bei Amazon-Einkäufen Amazon smile (Was ist das?) nutzt.
      1. Lieber Matthias,

        Ich hab tatsächlich auch an Cookies gedacht, dann aber davon Abstand genommen, vor allem, weil ich mir nicht sicher bin, ob man nun die Verwendung von Cookies anzeigen oder gar vor der Verwendung die Erlaubnis zur Verwendung einholen muss.

        in diesem Beispiel würden keine persönlichen Daten gespeichert. Die Verwendung ist völlig transparent. Ein Hinweistext wäre vielleicht "nett", aber keinesfalls zwingend notwendig, da in dem Cookie keine Session-artige Identität gespeichert wird, um einen Besucher auf der Serverseite wieder zu erkennen.

        Oder liege ich damit völlig falsch? Ist eine Verwürfelung der Zahlen 1-24 bereits ein ausreichend kollisionsfester Hash-Wert? 24! Ist das genügend Entropie?

        Liebe Grüße

        Felix Riesterer

        1. Hallo Felix Riesterer,

          Oder liege ich damit völlig falsch? Ist eine Verwürfelung der Zahlen 1-24 bereits ein ausreichend kollisionsfester Hash-Wert? 24! Ist das genügend Entropie?

           620.448.401.733.239.439.360.000
                             7.750.000.000
          

          Oben 24! unten die geschätzte Anzahl der Menschen im November 2019.

          Bis demnächst
          Matthias

          --
          Du kannst das Projekt SELFHTML unterstützen,
          indem du bei Amazon-Einkäufen Amazon smile (Was ist das?) nutzt.
          1. Lieber Matthias,

             620.448.401.733.239.439.360.000
                               7.750.000.000
            

            Oben 24! unten die geschätzte Anzahl der Menschen im November 2019.

            sieht sehr beeindruckend aus! Aber da ich kein Security-Fuzzy bin, habe ich nicht die mindeste Ahnung, ob das reicht. Ein Bauchgefühl kann da täuschen, auch wenn es recht eindeutig auszusehen scheint.

            Also kann man anhand der Verwürfelung einen Besucher ziemlich sicher wieder erkennen. Das sollte im Cookie-Hinweis stehen. Da man das aber nicht auswertet (kein Session-Mechanismus vorhanden), ist das völlig OK. Die Sache mit localStorage birgt ja ein identisches Risiko. Beide Risiken kann man nur durch das passende Deaktivieren im Browser vermeiden - sowohl Cookies als auch JavaScript.

            Liebe Grüße

            Felix Riesterer

            1. Hallo Felix Riesterer,

              Die Sache mit localStorage birgt ja ein identisches Risiko.

              Ähm, nein. Der localSorage bleibt lokal.

              Bis demnächst
              Matthias

              --
              Du kannst das Projekt SELFHTML unterstützen,
              indem du bei Amazon-Einkäufen Amazon smile (Was ist das?) nutzt.
              1. Hallo Matthias,

                Die Sache mit localStorage birgt ja ein identisches Risiko.

                Ähm, nein. Der localSorage bleibt lokal.

                Nur, wenn er lokal bleibt. fetch() existiert.

                Freundliche Grüße,
                Christian Kruse

                1. Hallo Christian Kruse,

                  Ähm, nein. Der localSorage bleibt lokal.

                  Nur, wenn er lokal bleibt. fetch() existiert.

                  So ganz ohne Zutun des Seitenbesuchers?

                  Bis demnächst
                  Matthias

                  --
                  Du kannst das Projekt SELFHTML unterstützen,
                  indem du bei Amazon-Einkäufen Amazon smile (Was ist das?) nutzt.
                  1. Hallo Matthias,

                    Ähm, nein. Der localSorage bleibt lokal.

                    Nur, wenn er lokal bleibt. fetch() existiert.

                    So ganz ohne Zutun des Seitenbesuchers?

                    Ja?

                    async function postLocalStorage() {
                      const data = {};
                    
                      for (let i = 0; i < localStorage.length; i++){
                        const key = localStorage.key(i);
                        data[key] = localStorage.getItem(key);
                      }
                    
                      const response = await fetch('/api/foo', {
                        method: 'POST',
                        credentials: 'same-origin',
                        headers: { 'Content-Type': 'application/json' },
                        body: JSON.stringify(data)
                      });
                    
                      return await response.json();
                    }
                    
                    postLocalStorage();
                    

                    Freundliche Grüße,
                    Christian Kruse

                    1. Ähm, nein. Der localSorage bleibt lokal.

                      Nur, wenn er lokal bleibt. fetch() existiert.

                      So ganz ohne Zutun des Seitenbesuchers?

                      Ja?

                      So ganz ohne Zutun des Seitenbetreibers?

                      1. Hallo Mitleser,

                        Ähm, nein. Der localSorage bleibt lokal.

                        Nur, wenn er lokal bleibt. fetch() existiert.

                        So ganz ohne Zutun des Seitenbesuchers?

                        Ja?

                        So ganz ohne Zutun des Seitenbetreibers?

                        Ich verstehe nicht, warum du mich das fragst. (Fast) kein Tracking passiert ohne Zutun des Betreibers. Ich kann auch Cookies verwenden ohne den User damit zu tracken. Matthias fragte aber nach dem Zutun des Besuchers.

                        Freundliche Grüße,
                        Christian Kruse

                        1. Hallo Mitleser,

                          Ähm, nein. Der localSorage bleibt lokal.

                          Nur, wenn er lokal bleibt. fetch() existiert.

                          So ganz ohne Zutun des Seitenbesuchers?

                          Ja?

                          So ganz ohne Zutun des Seitenbetreibers?

                          Ich verstehe nicht, warum du mich das fragst. (Fast) kein Tracking passiert ohne Zutun des Betreibers. Ich kann auch Cookies verwenden ohne den User damit zu tracken. Matthias fragte aber nach dem Zutun des Besuchers.

                          Ich gehe schwer davon aus, dass Matthias auf den Betreiber statt auf den Besucher abzielte und sich schlicht vertippt hat. Das wollte ich nur spitzfindig ausmachen - erfolglos ;-)

                          Der Besucher könnte den Request aber auch selbst abfeuern, wenn er möchte ;-)

                          1. Hallo Mitleser,

                            Ich gehe schwer davon aus, dass Matthias auf den Betreiber statt auf den Besucher abzielte und sich schlicht vertippt hat. Das wollte ich nur spitzfindig ausmachen - erfolglos ;-)

                            Ah – ja, das könnte natürlich sein.

                            Ohne Zutun des Seitenbetreibers passiert natürlich gar nichts. Habe ich aber auch nicht behaupten wollen 😉 ich schrieb ja nicht ohne Grund „nur, wenn er lokal bleibt“ 😛

                            Der Besucher könnte den Request aber auch selbst abfeuern, wenn er möchte ;-)

                            Das kommt auf den Besucher an, möchte man meinen 😂

                            Freundliche Grüße,
                            Christian Kruse

                            1. Hallo Christian Kruse,

                              Ich gehe schwer davon aus, dass Matthias auf den Betreiber statt auf den Besucher abzielte und sich schlicht vertippt hat. Das wollte ich nur spitzfindig ausmachen - erfolglos ;-)

                              Ah – ja, das könnte natürlich sein.

                              Nein, nein, ich meinte schon den Besucher. Mir war nicht bewusst, dass es möglich ist, den localStorage ohne Einwilligung an den Seitenbetreiber zu übertragen.

                              Bis demnächst
                              Matthias

                              --
                              Du kannst das Projekt SELFHTML unterstützen,
                              indem du bei Amazon-Einkäufen Amazon smile (Was ist das?) nutzt.
    2. Beim Lesen kam mir die Idee, ob man die Speicherung der Reihenfolge zusätzlich (lies: ergänzend) mit einem Cookie realisieren sollte, damit die mit PHP ausgelieferten CSS-Grid-Verwürfelungen auch schon ohne JavaScript in der vom User erwarteten Reihenfolge angezeigt werden. Meines Wissens kann JavaScript auch Cookies lesen und könnte sein localStorage mit dem Cookie-Inhalt abgleichen sofern vorhanden.

      Wer keine Cookies mag und auch noch JavaScript verbietet, der darf dann wirklich neu suchen.

      Alternativ könnte man auch den PHP Zufallsgenerator mit einem fixen Seed initialisieren. Dann bräuchte man keine Cookies. Alle Seitenbesucher*innen bekämen dann wohl die selbe Reihenfolge angezeigt, aber das kann ja auch gewollt sein.

      Dazu müsste lediglich die Zeile srand(42); vor shuffle($order); ergänzt werden.