Blubb: Ein kleiner Webdienst von mir

Hallo!

Ich habe soeben meine kleine Testphase abgeschlossen und möchte nun hier mal meinen Webdienst myMemopad vorstellen.
Es ist mein erster, also ist er jetzt nicht mega-umfangreich, aber ich denke schon, dass er für den ein oder anderen ganz hilfreich sein wird.
(Auf die Idee kam ich nämlich, als ich selbst soetwas mal dringend gebraucht hätte. :-))

Die Internet-Adresse ist: http://mymemopad.de

Würde mich freuen, wenn ihr mal einen Blick drauf werfen würdet und mir ggf. Verbesserungsverschläge sagen würdet.
(Nicht wundern: Wenn ihr die Sprache auf Englisch stellt, dann werden die drei statischen Seiten der Webapplikation deutsch bleiben. Diese müssen noch übersetzt werden. Die eigentliche Applikation selbst (also alles dynamische) ist allerdings bereits komplett auf Deutsch und Englisch verfügbar.)

  1. Hi Blubb,

    Auch du hast ein sehr gutes, professionelles Design. Die Idee mit dem Memopad ist sicherlich gut, wenn man sich beispielsweise in einem Internetcaffee befindet und die Informationen nicht auf sein privates E-Mailkonto kopieren möchte.(z. B. wegen Sicherheitsbedeken)

    Gruss gary

    1. Hallo,

      Auch du hast ein sehr gutes, professionelles Design. Die Idee mit dem Memopad ist sicherlich gut, ...

      diesen beiden Aussagen möchte ich mich anschließen. Die Idee ist klasse, und das Design sehr gut umgesetzt.

      wenn man sich beispielsweise in einem Internetcaffee befindet und die Informationen nicht auf sein privates E-Mailkonto kopieren möchte.(z. B. wegen Sicherheitsbedeken)

      Das halte ich allerdings für eine verunglückte Argumentation. Wenn ich schon meinem eigenen Mail-Provider (oder dem Übertragungsweg dorthin) nicht traue, dann würde ich dem Online-Dienst eines beliebigen, unbekannten Dritten erst recht nicht trauen.

      So long,
       Martin

      --
      Die meisten Menschen werden früher oder später durch Computer ersetzt.
      Für manche würde aber auch schon ein einfacher Taschenrechner genügen.
      1. Hallo Martin,

        Das halte ich allerdings für eine verunglückte Argumentation. Wenn ich schon meinem eigenen Mail-Provider (oder dem Übertragungsweg dorthin) nicht traue, dann würde ich dem Online-Dienst eines beliebigen, unbekannten Dritten erst recht nicht trauen.

        Ich denke das es mir persönlich lieber wäre, meine gesammelten Webinfos in ein solches Memoboard einzuspeichern, als meine E-Mail zu öffnen. Im ersteren Fall hätte ein "Spion" nur die Zugangsdaten des Memoboards. Im Zweiten hätte er meine E-Mail Einlogdaten - und die ist mir persönlich eben viel "wertvoller".

        Gruss gary

        1. Hallo Gary,

          Ich denke das es mir persönlich lieber wäre, meine gesammelten Webinfos in ein solches Memoboard einzuspeichern, als meine E-Mail zu öffnen.

          was meinst du mit "öffnen?"

          Im ersteren Fall hätte ein "Spion" nur die Zugangsdaten des Memoboards. Im Zweiten hätte er meine E-Mail Einlogdaten

          nö, wieso? Ich würde doch nur eine Mail an meine eigene Adresse senden, dazu brauche ich doch keinerlei Login-Daten. Nur einen funktionsfähig installierten Mailclient. Dann erscheint das betreffende Internet-Café nachher bei mir als Absender, und gut.

          und die ist mir persönlich eben viel "wertvoller".

          Ja, die Priorisierung ist absolut nachvollziehbar - nur dass mir nicht klar ist, wozu du deine Login-Daten preisgeben musst, um dir selbst eine Mail zu schicken.

          So long,
           Martin

          --
          Wenn du beim Kochen etwas heißes Wasser übrig hast, friere es ein.
          Heißes Wasser kann man immer gebrauchen.
          1. Hi Martin,

            Ja, die Priorisierung ist absolut nachvollziehbar - nur dass mir nicht klar ist, wozu du deine Login-Daten preisgeben musst, um dir selbst eine Mail zu schicken.

            Na weil nicht alle Internetcaffee's einen Mail-Dienst anbieten (Bei uns nicht einer). Und um eine Mail abzuschicken muss eine gültige E-Mailadresse vorhanden sein. Also kann ich, wenn ich mehrere E-Mailadressen habe von E-Mail A nach E-Mail B verschicken. Oder auch von A nach A (das geht auch).

            Gruss gary

            1. nur dass mir nicht klar ist, wozu du deine Login-Daten preisgeben musst, um dir selbst eine Mail zu schicken.
              Na weil nicht alle Internetcaffee's einen Mail-Dienst anbieten

              ach so? Ich kenn' mich da nicht aus, habe noch nie ein Internet-Café genutzt, würde aber als selbstveständlich voraussetzen, dass ich da Dienste wie Surfen im WWW, Mail, News, Chat, und eventuell FTP nutzen kann. Sonst ist das ja nur 'ne halbe Sache. Das WWW ist schließlich nur ein Teilbereich des Internets (wenn auch ein mittlerweile bedeutender).

              Und um eine Mail abzuschicken muss eine gültige E-Mailadresse vorhanden sein.

              Genau[*]. Aber wenn es so ist, wie du es beschreibst, dann kannst du deine eigene Mailadresse im Internet-Café ja auch nur nutzen, wenn ein Webmail-Interface dazu existiert. Das ist zwar bei vielen Providern der Fall, ist aber nicht selbstverständlich.

              Ciao,
               Martin

              [*] Okay, es muss technisch gesehen nicht unbedingt eine existierende Mailadresse sein, ich könnte von der Firma aus auch Mails mit dem Absender nobody@microsoft.com verschicken. Unser Firmen-Mailserver "glaubt" mir das alles ohne nachzuprüfen. :-)

              --
              Es existiert kein Weg, "für" etwas zu optimieren, sondern nur gegen alles andere.
                (Cheatah)
  2. Hallo,

    Design ist ansprechend. Ist schnell und übersichtlich. Wenn du weiterhin daran arbeiten willst, habe ich hier ein paar (mitunter nicht ganz kleine ;) Anregungen:

    -Unicode-Zeichen funktionieren noch nicht ganz, die werden als Entities (챎) angezeigt, eine Maskierung zu viel (& zu &)
    -Die Notizen sollte man irgendwie ordnen können. Können schließlich auch mal mehr werden. Du könntest z. B. Tags ermöglichen.
    -Vielleicht sollte man die Notizen auszeichnen können (wie bei HTML), also Listen, Betonungen (em, strong), Bilder, etc. Braucht man nicht unbedingt, ist aber manchmal nützlich.
    -Du solltest die Nachrichten als Download anbieten, damit der Benutzer sie lokal speichern kann.
    -Zuletzt: Du kannst auch noch auf den Web-2.0-Zug springen, und ein paar AJAX-Features einbauen. Löschen ohne Neuladen, Suche beim Tippen... Spielereien :)

    Viel Spaß noch bei deinem Projekt :)

    Gruß, idubn

    1. Hallo idubn!

      -Unicode-Zeichen funktionieren noch nicht ganz, die werden als Entities (챎) angezeigt, eine Maskierung zu viel (& zu &)

      Danke für den Hinweis. Habe es ausgebessert.

      -Die Notizen sollte man irgendwie ordnen können. Können schließlich auch mal mehr werden. Du könntest z. B. Tags ermöglichen.

      Ich habe bereits über eine Tagging-Möglichkeit nachgedacht, nur irgendwie ist mir der Sinn davon nicht so ganz klar. :-)
      Ob man nun nach Tags oder nach Phrasen sucht... Hm, okay, da man die Tags selbst vergibt, ist das Suchergebnis unter Umständen präziser.
      Gibt es noch weitere Vorteile?

      -Vielleicht sollte man die Notizen auszeichnen können (wie bei HTML), also Listen, Betonungen (em, strong), Bilder, etc. Braucht man nicht unbedingt, ist aber manchmal nützlich.

      Darüber habe ich auch schon nachgedacht. Sicherheitshalber lasse ich zurzeit alle HTML-Steuerzeichen in ihre HTML-Entities umwandeln. Aber ich denke, dass ist gar nicht umbedingt nötig. Wenn man es drauf anlegen würde, das Layout der Seite zu zerschießen oder nervige JavaScripts einzuschleusen, dann würde man sich ja nur selbst Schaden. Andere User würden davon nichts mitbekommen.
      In den Einstellungen könnte man sich dann optional einen WYSIWYG-Editor (z.B. TinyMCE) aktivieren.

      -Du solltest die Nachrichten als Download anbieten, damit der Benutzer sie lokal speichern kann.

      Die Idee kam mir selbst noch nicht. Dankeschön! :-)
      Die Frage ist halt nur, in welchem Format...

      -Zuletzt: Du kannst auch noch auf den Web-2.0-Zug springen, und ein paar AJAX-Features einbauen. Löschen ohne Neuladen, Suche beim Tippen... Spielereien :)

      Ich verfolge eigentlich den Grundsatz, AJAX nur dort einzusetzen, wo es nötig ist. Im Moment funktioniert die Seite auch mit deaktiviertem JavaScript.

      Viel Spaß noch bei deinem Projekt :)

      Danke! :-)

      1. Hallo,

        Ich habe bereits über eine Tagging-Möglichkeit nachgedacht, nur irgendwie ist mir der Sinn davon nicht so ganz klar. :-)
        Ob man nun nach Tags oder nach Phrasen sucht... Hm, okay, da man die Tags selbst vergibt, ist das Suchergebnis unter Umständen präziser.
        Gibt es noch weitere Vorteile?

        Es ist eben bequemer einen Tag-Link zu klicken, als auf Suchen zu gehen und ein Wort einzutippen, wenn man ähnliche Notizen sucht ;)

        In den Einstellungen könnte man sich dann optional einen WYSIWYG-Editor (z.B. TinyMCE) aktivieren.

        Für den Laien bestimmt die beste Option. XSS kannst du einfach durch Ausfilterung des Script-Tags, von on*-Attributen und Javascript-URIs verhindern.

        -Du solltest die Nachrichten als Download anbieten, damit der Benutzer sie lokal speichern kann.

        Die Idee kam mir selbst noch nicht. Dankeschön! :-)
        Die Frage ist halt nur, in welchem Format...

        Nur-Text reicht normalerweise. Du kannst aber auch die Notizen als HTML-Dokument mit Inhaltsverzeichnis anbieten.

        -Zuletzt: Du kannst auch noch auf den Web-2.0-Zug springen, und ein paar AJAX-Features einbauen. Löschen ohne Neuladen, Suche beim Tippen... Spielereien :)

        Ich verfolge eigentlich den Grundsatz, AJAX nur dort einzusetzen, wo es nötig ist. Im Moment funktioniert die Seite auch mit deaktiviertem JavaScript.

        Natürlich sollte AJAX nicht zwingend sein. Aber es kann schön nützlich sein. Für Besucher ohne JS gibst du im HREF-Attribut eines Links eine Seite zum Neuladen an, bei JS-Usern ein onclick-Script mit "return false;", das verhindert, dass die HREF-URI geladen wird.

        Gruß, idubn

        --
        <meta name="selfcode" content="sh:( fo:| ch:? rl:? br:^ n4:{ ie:% mo:| va:} de:> zu:) fl:{ ss:) ls:[ js:|" />
      2. Hi Blubb,

        Ich verfolge eigentlich den Grundsatz, AJAX nur dort einzusetzen, wo es nötig ist. Im Moment funktioniert die Seite auch mit deaktiviertem JavaScript.

        Das ist auch vollkommen korrekt so, natürlich sollte alles auch mit deaktiviertem Javascript funktionieren. Trotzdem kannst du machen Aktionen mit AJAX lösen, sodass etwas mehr Komfort und schnellere Reaktionen der Seite geboten werden.

        Beispiel: Der Löschen-Link für eine Memo, im nachfolgenden gehe ich davon aus, dass du alle diese Löschen-Links mit der Klasse „memo-delete” versehen hast. Dann könntest du folgendes Script verwenden, basierend auf prototype.js, welche du natürlich vorher noch im Quellcode einbinden musst.

        // Ausführen, wenn die Seite fertig geladen ist  
        window.onload = function() {  
          // Für jeden Link mit der Klasse „memo-delete”  
          $$('a.memo-delete').each( function() {  
            this.onclick = function() {  
              // AJAX Request auf die URL im href-Attribut starten  
              new Ajax.Request(this.href, {  
                method: 'get'  
              });  
              // das eigene Memo löschen  
              this.parentNode.parentNode.remove();  
              // verhindern, dass der Browser dem Link noch folgt  
              return false;  
            }  
          });  
        }
        

        Hab ich jetzt nur mal so Quick'n Dirty hingeschrieben - sollte eigentlich so direkt funktionieren, kann aber auch gut sein, dass ich was übersehen habe ;-)

        Du könntest dein PHP-Script nun noch anpassen, dass es auf einen Aufruf von „/index.php?page=deletememo” in dem Fall, dass der Request-Header „X-Requested-With” den Wert „XMLHttpRequest” hat nicht mit einer Weiterleitung reagiert, sondern mit „204 No Content” antwortet.

        Viele Grüße,
          ~ Dennis.

        1. Hi,

          // Ausführen, wenn die Seite fertig geladen ist

          window.onload = function() {
            // Für jeden Link mit der Klasse „memo-delete”
            $$('a.memo-delete').each( function() {
              this.onclick = function() {

            
          Sag ich doch, da hab ich nicht aufgepasst und mich im Object-Irrgarten von Javascript verloren ;-)  
          this hat an dieser Stelle natürlich keinen Bezug bzw. ist nicht das Link-Object, als was ich es hier verwendet hatte. So sollte es klappen:  
            
              ~~~javascript
          $$('a.memo-delete').each( function(linkNode) {  
                linkNode.onclick = function() {
          

          ~~~javascript

          // AJAX Request auf die URL im href-Attribut starten

          new Ajax.Request(this.href, {
                  method: 'get'
                });
                // das eigene Memo löschen
                this.parentNode.parentNode.remove();
                // verhindern, dass der Browser dem Link noch folgt
                return false;

            
          Hier sollte this allerdings korrekt sein, da die Funktion ja nicht hier bereits ausgeführt wird, sondern später (beim Auftreten des onclick-Events) im Kontext des Link-Objects ausgeführt.  
            
          
          >     ~~~javascript
          
          }  
          
          >   });  
          > }
          
          

          Viele Grüße,
            ~ Dennis.

  3. Hi Blubb,

    (merkwürder Name, den du da hast *g*)

    Ich kann mich meinen Vorrednern eigentlich nur anschließen - sieht schön aus und ist in manchen Situationen sicherlich praktisch.

    Eine Sache kann ich allerdings nicht nachvollziehen. Du redest von kryptischen URLs die man sich nicht merken kann und nicht aufschreiben möchte, deine Seite verwendet aber selber solche „kryptischen” URLs wie ich finde, und dass, obwohl man sie so einfach schöner machen könnte:

    /index.php?page=mymemos         => /mymemos
      /index.php?page=recommendation  => /recommendation
      /index.php?page=search          => /search

    Eine ganz simple RewriteRule sollte dir helfen:

    [link:http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewriterule@title=RewriteRule] ^[a-zA-Z0-9]+$ /index.php?page=$1 [QSA]

    Und natürlich dann die Links noch überall anpassen ;-)

    Viele Grüße,
      ~ Dennis.

    1. Hallo Dennis!

      Vielen Dank für dein Feedback!

      Eine Sache kann ich allerdings nicht nachvollziehen. Du redest von kryptischen URLs die man sich nicht merken kann und nicht aufschreiben möchte, deine Seite verwendet aber selber solche „kryptischen” URLs wie ich finde

      Diese URLs muss man sich allerdings nicht merken. Behalten muss man sich nur mymemopad.de. Wenn man direkt mymemopad.de/?page=mymemos in die Adresszeile seines Browsers eingibt, wird man eh zur Startseite weitergeleitet, sofern man noch nicht eingeloggt ist. ;-)

      Eine ganz simple RewriteRule sollte dir helfen

      Trotzdem ist finde ich deinen Vorschlag gut! Ich werde das mir mal in naher Zukunft genauer angucken, denn bis jetzt habe ich noch nie etwas mit mod_rewrite gemacht.

      1. Hi Blubb,

        Diese URLs muss man sich allerdings nicht merken. Behalten muss man sich nur mymemopad.de. Wenn man direkt mymemopad.de/?page=mymemos in die Adresszeile seines Browsers eingibt, wird man eh zur Startseite weitergeleitet, sofern man noch nicht eingeloggt ist. ;-)

        Ja, mir geht es auch mehr um die Vorbildfunktion, wenn du schon kryptische ULRs kritisierst ;-)

        Trotzdem ist finde ich deinen Vorschlag gut! Ich werde das mir mal in naher Zukunft genauer angucken, denn bis jetzt habe ich noch nie etwas mit mod_rewrite gemacht.

        Setze einfach mal die von mir genannte RewriteRule in (d)eine .htaccess-Datei im DocumentRoot, eventuell noch mit einem „RewriteEngine On” davor.

        Dann probierst du mal z.B. http://mymemopad.de/contact aufzurufen. Wenn das wie gewollt klappt, kannst du dich dran machen alle Links in deinen Templates umzuschreiben ;-) (In so einem Fall wäre es übrigens praktisch, wenn man sich eine Klasse bastelt, welche einem basierend auf einer Basis-URL und einem Seitennamen die richtige URI zusammenbastelt.)

        Viele Grüße,
          ~ Dennis.

        1. Setze einfach mal die von mir genannte RewriteRule in (d)eine .htaccess-Datei im DocumentRoot, eventuell noch mit einem „RewriteEngine On” davor.

          Dann bekomme ich einen Error 500 - zumindest in meiner lokalen Testumgebung.

          1. Hi Blubb,

            Dann bekomme ich einen Error 500 - zumindest in meiner lokalen Testumgebung.

            Und was macht man in so einem Fall? Richtig, man schaut ins error.log (logs/error.log) und guckst was da steht ;-)

            Hast du dir den Apache frisch installiert? Dann gehe ich mal davon aus, dass du das Module mod_rewrite einfach noch nicht aktiviert hast, da dies standardmäßig nicht der Fall ist. Bei den allermeisten Providern dürfte dieses Modul allerdings aktiviert sein, so dass du es bedenkenlos verwenden kannst.

            Um das Modul bei dir lokal zu aktivieren, öffne die Datei httpd.conf (conf/httpd.conf, evtl. auch apache2.conf) und

            #LoadModule rewrite_module modules/mod_rewrite.so

            entferne die Raute (#) am Beginn dieser Zeiler. Datei speichern und den Apache neustarten nicht vergessen!

            Viele Grüße,
              ~ Dennis.

            1. Hallo Dennis!

              Ich habe nun das Modul aktiviert. Der Error 500 tritt folglich nicht mehr auf.
              In die .htaccess-Datei habe ich folgendes geschrieben:

              RewriteEngine On
              RewriteRule [1]+$ /index.php?page=$1 [QSA]

              Trotzdem funktioniert es nicht. Jetzt kommt halt nur kein Error 500 mehr, sondern ein Error 404.


              1. a-zA-Z0-9 ↩︎

              1. Hi Blubb,

                RewriteEngine On
                RewriteRule [1]+$ /index.php?page=$1 [QSA]

                Trotzdem funktioniert es nicht. Jetzt kommt halt nur kein Error 500 mehr, sondern ein Error 404.

                Kommt ein 404 vom Server, oder ein von deinem index.php generiertes 404? Letzteres ist verständlich, weil ich die Klammern im regulären Ausdruck vergessen habe ;-)

                RewriteRule ^([a-zA-Z0-9]+)$ /index.php?page=$1 [QSA]

                Nur geklammerte Ausdrücke des regulären Ausdrucks sind in der Ziel-URL über $<x> ansprechbar, wobei x die Zahl für die Position der Klammer ist, so steht $1 also für den ersten und $2 für den zweiten geklammerten Ausdruck.

                Kleines weiteres Beispiel:

                RewriteRule ^(de|en)/([a-zA-Z0-9]+)$ /index.php?page=$2&lang=$1

                Damit hättest du URLs à la /<sprache>/<seitenname>, wobei sprache hier nur de oder en sein kann.
                Anderes Beispiel:

                ~~~apache RewriteRule ^([a-zA-Z-]{2,5})/([a-zA-Z0-9]+)& /index.php?lang=$1&page=$2 [QSA]
                  RewriteRule ^([a-zA-Z0-9]+)$ /index.php?page=$1 [QSA]

                  
                Dies würde folgende URLs korrekt erkennen:  
                  
                  /seite  
                  /seiteMitGrossbuchstaben  
                  /seiteMit0123Zahlen  
                  /de/seite  
                  /de-at/seite  
                  /en-us/seite  
                  usw...  
                  
                Also optional ein Sprachkürzel am Anfang der URL, was 2 bis 5 Zeichen lang sein kann, gefolgt von dem Seitennamen, welcher aus Buchstaben und Zahlen bestehen darf, jedoch keine Sonderzeichen (z.B. deutsche Umlaute) enthalten darf.  
                  
                  
                Viele Grüße,  
                  ~ Dennis.
                
                -- 
                Mein [SelfCode](http://community.de.selfhtml.org/fanprojekte/selfcode.htm): [ie:{ fl:( br:> va:) ls:\[ fo:) rl:( n4:# ss:) de:\] js:| ch:{ sh:| mo:} zu:|](http://www.peter.in-berlin.de/projekte/selfcode/?code=ie%3A%7B+fl%3A%28+br%3A%3E+va%3A%29+ls%3A%5B+fo%3A%29+rl%3A%28+n4%3A%23+ss%3A%29+de%3A%5D+js%3A%7C+ch%3A%7B+sh%3A%7C+mo%3A%7D+zu%3A%7C)
                

                1. a-zA-Z0-9 ↩︎

                1. Jetzt funktioniert es, danke.
                  Vielleicht kannst du noch erklären, was das [QSA] bedeutet?

                  1. Hi Blubb,

                    Jetzt funktioniert es, danke.
                    Vielleicht kannst du noch erklären, was das [QSA] bedeutet?

                    So langsam solltest du wirklich mal etwas selbständiger werden ;-)
                    In diesem Fall: In das Apache Manual gucken.

                    Viele Grüße,
                      ~ Dennis.