Archiv der Kategorie: Tutorial

Ein Papierkorb für Samba

Der Papierkorb für Windows ist eine unleugbar nützliche Sache. Leider arbeitet er nicht mit Netzlaufwerken zusammen, die man zum Beispiel per Samba eingebunden hat.

Aber man kann für Samba selbst einen Papierkorb installieren und versehentlich gelöschte Dateien daraus retten.

Zunächst bearbeiten wir die Konfigurationsdatei von Samba.

Ans Ende des betreffenden Absatzes, der mit [NAME] startet, fügen wir etwas hinzu.

Insgesamt sieht es (ungefähr) so aus:

Die Einträge dürften sich größenteils von selbst erklären. Aber hier noch einmal eine kleine Erläuterung.

recycle:repository = .recyclebin

Das ist der Ordner, der uns als Papierkorb nutzen wird. Er wird beim ersten Löschvorgang mit den richtigen Rechten angelegt. Bei diesem Beispiel: /var/www/.recyclebin

recycle:keeptree = Yes

Die Ordnerstruktur wird in den Papierkorb übernommen. Kann nicht schaden, weil es die Suche einfacher gestaltet.

recycle:touch = Yes

Setzt den letzten Zugriffszeitpunkt auf das Löschdatum. Das ist wichtig, da beim automatischen Leeren eines zu vollen Papierkorbes zu alte, versehentlich gelöschte Dateien sofort entsorgt werden. Wer den Papierkorb nicht automatisch leert, der kann die Option auch weglassen.

recycle:versions = Yes

Für eine Versionierung namensgleicher Dateien.

recycle:maxsixe = 0

Ab welcher Dateigröße soll der Papierkorb nicht gelten und stattdessen sofort gelöscht werden. 0 steht für keine Beschränkung.

recycle:exclude = *.tmp,*.temp,*.TMP,*.TEMP,*.log

Welche Dateien sollen vom Papierkorb ausgeschlossen werden und stattdessen sofort gelöscht werden? Ich empfehle neben den üblichen Verdächtigen wie „tmp“ und „log“ auch Binärdateien, die immer Resultat von anderen Dateien sind, und somit aus der Quelle selbst rekonstruiert werden können. JPEG-Dateien kann man z.B. aus den Photoshop-Dateien wieder herstellen.

recycle:excludedir = /recycle,/tmp,/temp,/TMP,/TEMP

Welche Ordner sollen vom Papierkorb ausgeschlossen werden? Hier gelten anlog meine Anmerkungen zu oben. Mehr Einstellungsmöglichkeiten werden hier: https://www.samba.org/… erläutert.

Zum Schluss starten wir den Samba-Server neu

Von nun an sollten alle Dateien und Ordner im geteilten Verzeichnis vor versehentlichen Löschen geschützt sind. Sie finden Sie nun, samt Verzeichnisstruktur, unter /var/www/.recyclebin

Test

Bitte unbedingt testen, denn exotische Rechtevergabe kann auch dazu führen, dass der Papierkorb schlicht nicht funktioniert.

VORSICHT: Damit keine Missverständnisse aufkommen, es werden natürlich nur die Dateien in den Papierkorb befördert, die über Samba gelöscht werden, also bspw. von einem unvorsichtigen Windows-Nutzer. Dateien, die direkt über die Shell oder über Skripte gelöscht werden, bleiben davon unberührt und landen weiterhin im Unix-Nirvana.

Automatisches Leeren des Papierkorbes

Das erledigt natürlich cron für uns.

Ans Ende setzen wir folgenden Eintrag:

Dann werden täglich um 00:01 alle Dateien und Ordner im Papierkorb gelöscht, die älter als sieben Tag sind. Das “ -mindepth 1″ verhindert, dass der Papierkorb selbst gelöscht wird, wenn er älter als sieben Tage ist.

Danke

Mein Dank geht an http://blog.is-a-geek.org/… für die Anregungen.

Minibian – Raspberry PI – Installieren

Ziel: ein minimales Linux für einen kompletten (Web)server auf Basis eines Raspberry Pi

Quelle: https://minibianpi.wordpress.com/features/

Software: Win32DiskImagerPuTTY

Hardware: Raspberry Pi 2B (oder 3), SD Mikro Karte 32 GB (oder größer)

Netzwerk: (W)LAN-Router mit LAN-Anschluss

Image auf SD-Karte installieren

  • Download https://sourceforge.net/projects/minibian/
  • Das Image (Endung: img) entzippen und mit Win32DiskImager auf SD-Karte schreiben. Vorsicht, nicht aus Versehen einen falschen Laufwerksbuchstaben wählen.
  • SD-Karte auswerfen, in Raspberry Pi packen
  • Pi per LAN mit Router verbinden
  • Pi mit Strom versorgen und einige Minuten warten, bis der Name im Netzwerk bekannt ist

Mit Maschine verbinden

  • PuTTY starten und mit „minibian“ verbinden.
    • Login: root
    • Passwort: raspberry

Festplatte voll ausreizen

  • p – Partitionen zeigen (i. d. R. zwei) – Startwert der zweiten, der Hauptpartition notieren (hier 125056)
  • d – zweite Partition löschen
  • n – neue Partition anlegen, Partition type: Primary, Partition number: 2, Startwert: 125056 (der notierte, NICHT der default Wert), Endwert: Default für volle Größe
  • p – überprüfen der Eingaben
  • w – schreiben der Partitionen (Fehlermeldung ignorieren)

Vorbereitungen

Bash-Tuning

alias +=’pushd .‘
alias ..=’cd ..‘
alias …=’cd ../..‘
alias beep=’echo -en „\007″‚
alias dir=’ls -l‘
alias gzcat=’gunzip -c‘
alias l=’ls -alF‘
alias la=’ls -la‘
alias ll=’ls -la‘
alias ls=’/bin/ls $LS_OPTIONS‘
alias ls-l=’ls -l‘
alias md=’mkdir -p‘
alias o=’less‘
alias rd=’rmdir‘
alias rehash=’hash -r‘
alias rm=’rm -i‘
alias unzip=’tar xfvz‘
alias which=’type -p‘
alias zip=’tar cfvz‘

Betriebssystem und Komponenten auf den neuesten Stand bringen

Firmware updaten

Benchmarks

Diese Befehle benötigt man natürlich nur, wenn man die aktuelle Rechenleistung mit anderen Systemen vergleichen möchte.

Sicherheitsupdates automatisieren

upgrade -y -o APT::Get::Show-Upgraded=true

dann

deb https://security.debian.org/ wheezy/updates main contrib non-free
deb-src https://security.debian.org/ wheezy/updates main contrib non-free

und

OPTIONS=“-o quiet=1 -o Dir::Etc::SourceList=/etc/apt/sources.d/security.sources.list -o Dir::Etc::SourceParts=\“/dev/null\““

abschließend

LAMP

Webmin

Test im Browser:

http://minibian/

http://minibian/phpmyadmin (Benutzer: root, Passwort: siehe oben)

https://minibian:10000/

Eine simple API für WordPress, Teil 4

Wir wissen jetzt, wie wir mit Hilfe unserer kleinen API einen Artikel anlegen und wie wir ihn mit einem Bild versorgen. Nun fügen wir einige Metadaten hinzu. Dazu benötigen wird die Funktion „add_post_meta„. Diese verlangt folgende Parameter:

  • post_id – Die eindeutige Artikel-ID aus Teil 2
  • meta_key – Der Name des Metadaten-Feldes
  • meta_value – Der Wert des Metadaten-Feldes

Wir packen also wieder einen Befehlsaufruf für unseren Server zusammen:

Und natürlich müssen wir auch unseren Server wieder ein wenig ergänzen.

Diese 3 Zeilen erweitern unseren Server um die Fähigkeit, mit Hilfe der Funktion „add_post_meta“ Artikel mit beliebigen Metadaten zu versorgen.

Und so sieht dann das neue benutzerdefinierte Feld aus.

Zusammenfassung

Server

Client

 

Eine simple API für WordPress, Teil 3

Kommen wir nun zum wichtigen Thema: Wie füge ich dem Artikel ein Bild bei?

Auch das wird in vielen Beiträgen im Internet gerne angerissen, aber mal ein paar schnelle, praktikable Lösungen werden selten präsentiert. Dabei ist es nicht so schwer, wenn man weiß, was zu tun ist.

Der Ablauf

Im Grunde müssen folgende Schritte abgearbeitet werden:

  1. Wir erzeugen einen Artikel und merken uns die ID (siehe Teil 2)
  2. Wir laden ein Bild per FTP auf den WordPress-Server
  3. Wir verbinden Artikel und Bild mit Hilfe der Funktionen: wp_generate_attachment_metadatawp_insert_attachment und set_post_thumbnail

Damit das funktioniert, müssen wir unseren Server gleich zweimal bemühen: Beim Erzeugen des Artikels und beim Verbinden des Bildes mit ersterem.

Der Upload per FTP

Keine Angst, das ist per PHP einfacher, als man denkt.

Zunächst benötigen wir auf dem WordPress-Blog einen Zielordner. Den kann man per Konsole oder FTP anlegen:

Auf diesen Server werden die Bilder (oder was immer man später mit den Artikeln verknüpfen möchte: ZIP-File, E-Book, PDF etc.) zwischengespeichert. Man sollte darauf achten, dass die Dateinamen dabei immer einzigartig sind, denn sonst werden sie gnadenlos überschrieben. Erreichen kann man das z.B. durch eine Ergänzung mit einer Time-id und einer laufenden Nummer.

Wir erweitern den Client um einige Zeilen:

Damit wird die Datei „bild.jpg“ vom lokalen Verzeichnis „/var/upload/bilder/“ auf das entfernte Verzeichnis „/var/www/domain.tld/wp-content/uploads/maschine/“ des Servers „domain.tld“ kopiert. Wenn Sie nicht wissen, wie das entfernte Verzeichnis lautet, fragen Sie ihren Provider.

Bevor wir nun an den Client gehen, packen wir dessen Kernaufgabe in eine Funktion, damit wir sie mehrfach benützen können.

Diese Funktion sendet ein Array an unseren Server und gibt dessen Antwort wieder zurück.

Die Aufgaben des Servers werden jetzt erweitert. Er kann nicht nur Artikel anlegen, sondern auch Bilder verarbeiten. Das geschieht durch folgende Zeilen:

Zeile 1 ermittelt den Mime-Type der Datei (hier: „image/jpeg“), das Array mit den Meta-Daten (Titel, eindeutiger Bezeichner etc.) wird automatisch gefüllt. Natürlich können Sie den Titel des Bildes auch aus den eigenen Daten erzeugen.

Zeile 10 fügt dann das eben hochgeladene Bild der Mediendatenbank des Blogs hinzu. Von nun an finden Sie das Bild dort, aber es ist noch nicht mit einem Artikel verbunden. Das erledigen wir gleich.

Zeile 12 versorgt das Bild in der Mediendatenbank mit den soeben festgelegten Metadaten und legt die einzelnen Vorschaubilder in den verschiedenen Größen an, die in den Medien-Einstellungen von WordPress festgelegt sind.

Zeile 14 macht die Magie: Das Bild wird mit dem Artikel verbunden.

Zusammengefasst

Der Server

Der Client

Das war ja nicht so schwer, wenn man weiß, wie es geht – aber das gilt wohl für alles im Leben. Im nächsten Schritt lernen wir, unseren Artikel nachträglich mit Daten anzureichern.

Eine simple API für WordPress, Teil 2

Wir kommen nun dazu, mit Hilfe unserer kleinen API einen WordPress-Artikel anzulegen.

Dazu müssen wir uns kurz mit den internen Funktionen beschäftigen, die WordPress für dieses Unterfangen zur Verfügung stellt.

Es ist zunächst die Funktion „wp_insert_post„.

Mit ihrer Hilfe kann man Artikel (oder auch Seiten) anlegen und bearbeiten.

Es gibt viele Parameter. Wir betrachten zunächst die wichtigsten:

  • post_content – der Inhalt des Artikels
  • post_title – die Überschrift des Artikels
  • post_status – der Status des Artikels und

Stellen wir uns ein simples Array zusammen:

Die Werte sollten sich von selbst erklären. Ich empfehle, wenn immer möglich beim Testen Umlaute zu nutzen, um später keine bösen Überraschungen zu erleben.

Ich setze „post_status“ auf „publish„, da ich die Artikel sofort veröffentliche. Wer aber noch händisch nachkontrollieren oder erstmal sichergehen möchte, der setzt „post_status“ auf „draft„.

Der neue Client

Der Client muss entsprechend angepasst werden.

Der Aufbau hat sich nicht sehr gegenüber Teil 1 verändert.

Der neue Server

Beim Server hat sich ein wenig mehr getan.

Wir müssen nun die Verbindung unseres Servers zu WordPress herstellen. Das passiert ganz einfach durch die Zeile:

Die Datei „wp-load.php“ die sich im Hauptverzeichnis des Blogs befindet, stellt automatisch alle Daten und Komponenten zur Verfügung, die wir für den Umgang mit WordPress benötigen.

Die Zeile:

Sorgt noch dafür, dass wir keine Komponenten laden, die lediglich für das Frontend des Blogs benötigt werden.

Der Rest dürfte sich von selbst erklären. Interessant ist Zeile 10, in der der eigentliche Befehl zum Anlegen ausgeführt wird und als Ergebnis die ID des neuen Artikels (WordPress-Jargon: Post) an den Client zurückgegeben wird. Diese ID ist wichtig und sollte irgendwo auf Seiten des Clients gespeichert werden, denn später werden wir sie benötigen, um Artikel zu korrigieren, zu löschen oder mit anderen Daten anzureichern. Die ID ist immer eindeutig und wird niemals doppelt vergeben.

Rufen wir den Client auf:

Das Ergebnis gibt uns die ID 4025 zurück.

Und schauen wir mal ins Backend des Blogs.

Voilà – Das ist unser Artikel.

Bis dahin war es noch nicht ganz so schwer. Bisher hatten wir nur die Pflicht, jetzt folgt die Kür. Im nächsten Teil werde ich zeigen, wie man dem Artikel auch ein Bild zuordnet.

Eine simple API für WordPress, Teil 1

Ich benötig(t)e eine Methode, um von ferne (remote) meine verschiedenen WordPress-Blogs betreiben zu können. Artikel, Posts etc. sollen von einer Datenbank gefüttert werden.

Dazu hat es früher einmal im Kern von WordPress eine REST-API gegeben, die aber abgeschaltet wurde. Demnächst (ab WP 4.7) soll sie wieder implementiert werden. Ich habe mir die Dokumentation des Beta-Plugins durchgelesen und finde sie wie immer viel zu lang. Es dauert ewig, bis jemand auf den Punkt kommt. Typisch doppelter Overhead der OOP-verliebten Informatiker was Code und Dokumentation betrifft.

Auch wollte ich mich nicht auf eine Beta-API verlassen, deren Schnittstellen offen vorlegen. Da kann ich die Zeit stoppen, bis die ersten Hacker sich drauf einstellen. Dann eine Lücke und zack! ist mein Blog gekapert.

Also muss eine eigene Lösung her. WordPress liefert intern alle möglichen, bequemen Methoden, um Artikel anzulegen, zu bearbeiten oder zu löschen. Mehr brauchen wir erstmal nicht. Die Kunst besteht nur darin, diese Methoden anzusprechen.

Also bauen wir uns unsere eigene API. Wir benötigen:

  1. einen Server im WordPress-Blog, der auf Kommandos wartet, diese verarbeitet und Ergebnisse zurückmeldet.
  2. einen Client, der Befehle sendet, wartet und die Antworten des Servers auswertet.
  3. und natürlich sollte der Server geschützt sein, damit er nicht gehackt wird.

Der Server

Zunächst legen wir im Hauptverzeichnis des WordPress-Webservers einen Unterverzeichnis an. Ich nenne diese Verzeichnis „maschine“ – aber ihr könnt auch jeden anderen eindeutigen Namen nehmen.

(Natürlich kann man das Verzeichnis auch per FTP anlegen, wenn ihr keine Kommandozeile öffnen könnt.)

Nun heißt es erst einmal, das Verzeichnis gegen Unbefugte abzusichern. Das geht am einfachsten mit einer .htpasswd-Datei. Diese kann man online generieren. Dann einfach nur ins Verzeichnis „maschine“ kopieren.

Mit der User/Passwort-Kombination mueller/geheim sieht die Datei folgendermaßen aus:

Aufpassen: vor dem htpasswd steht ein Punkt, das macht die Datei normalerweise unsichtbar, daher muss man das Anzeigen von versteckten Dateien im FTP-Programm aktivieren.

Nun braucht es noch eine .htaccess-Datei mit folgenden Einträgen:

Der Eintrag in AuthUserFile kann bei euch natürlich ein anderer sein. Wichtig ist, dass er den absoluten Pfad (vom root des Servers aus) zur eben angelegten .htasswd-Datei beinhaltet. Diesen Pfad könnt ihr bei eurem Provider erfragen oder in den FAQ nachlesen. Meist liefern die Provider auch bequeme Funktionen (Stichwort: Verzeichnisschutz) gleich mit, um alles online zu generieren.

Nun ein kleiner Test. Wir rufen im Browser auf:

Ab jetzt steht „domain.tld“ natürlich für eure eigene Domain. Jetzt müsste sofort die Abfrage nach User und Passwort erfolgen. Wenn nicht, habt ihr etwas falsch gemacht. Dann nochmal von vorn, denn Sicherheit, besonders im produktiven Bereich ist wichtig.

In Zukunft erfolgt der Aufruf natürlich automatisiert, da ist eine Passwort-Eingabe nicht möglich. Zu diesem Punkt kommen wir gleich.

Jetzt programmieren wir den einfachsten Server. Dazu legen wir eine Datei „index.php“ im Verzeichnis „maschine“ an, die demnächst unsere Befehle verarbeitet.

Wir nutzen die multibyte-fähigen Funktionen, die man am Präfix „mb_“ erkennt, damit wir später keine Probleme mit Umlauten haben. Unseren kleinen Server kann man schon per Get-Parameter in der URL oder per Post (bspw. bei Formulareingaben) bedienen. Zurückgegeben wir ein einfacher utf8-kodierter Text. Das ist für unsere Belange absolut ausreichend und bietet bessere Debug-Möglichkeiten.

Was macht der Server? Er nimmt einen Parameter (Hier „befehl“) auf und wandelt den String in Großbuchstaben um. Das ist natürlich ein wenig sinnfrei, aber wir wollen ja erstmal testen.

Wir rufen also im Browser auf:

Mit den Angaben vor dem „@“ kann man User und Passwort gleich in der URL übergeben und muss diese nicht immer extra eingeben. Und wenn alles geklappt hat, müsste im Browser der Text „HALLO“ erscheinen.

Der Client

Jetzt geht es an einen kleinen, ersten Client. Wir legen eine Datei an, der Name ist egal, ich nenne sie „client.php“. Diese Datei kann irgendwo angelegt sein, sinnvollerweise nicht auf dem selben Server, auf dem unser API-Server läuft, denn sonst wäre die Arbeit ja sinnlos.

Das sieht schon etwas komplizierter aus. Im Grunde simulieren wir das, was wir vorhin im Browser händisch gemacht haben: Wir packen Daten zusammen (hier nur $befehl), authentifizieren uns am Server und geben die Rückgabe wieder aus.

Zeile 2+3 sind selbsterklärend. WICHTIG: Ohne das abschließende Slash in Zeile 4 wird es nicht funktionieren – also nicht vergessen.

Zeile 5 beinhaltet den „Befehl“, den wir absenden, wieder erstmal nichts besonderes.

Der Rest der Zeilen dient dazu, einen Stream zu generieren und damit das PHP-Skript zu einem kleinen Browser zu machen.

Zeile 21 legt einen Timeout in Millisekunden fest. Da die meisten Hoster nur 30 Sekunden an Ausführungszeit für ihre Skripte zulassen, lohnen sich Werte über 30 Sekunden gar nicht erst, denn der Server wird bereits vorher abbrechen.

Wir machen den Test und rufen den Client im Browser auf:

Etwas smarter, bitte!

Nun ist es auf Dauer etwas unbefriedigend, immer nur $befehl=blabla an den Server zu senden, daher machen wir jetzt die Datenübermittlung etwas smarter. Und zwar so, dass im Prinzip alles gesendet und empfangen werden kann, solang wir es in Variablen verpacken können.

Dazu passen wir zunächst den Client an:

Zeile 5 wird zu:

und Zeile 9 zu:

Und der Server wird auch angepasst.

Die Zeilen 3, 4 und 5 werden zu:

Welchen Sinn hat das? Wir packen alle Variablen, die wir übertragen wissen wollen, in ein Array, serialisieren es mit serialize und packen es auf der anderen Seite wir mit unserialize wieder aus. Der Name des zu transportierenden Arrays spielt dabei keine Rolle; array_shift ermittel automatisch das richtige Array.

Später werden wir serialize auch nutzen, um mehr als nur ein simples „Hallo Welt“ an den Client zurückzuliefern. Aber fürs erste sollte das genügen.

Wir fassen zusammen

Server

Client

Wenn wir jetzt den Client wieder aufrufen:

erhalten wir:

Und mehr benötigen wir für heute nicht. Der Server hat also das Array richtig empfangen.

Im nächsten Teil werden wir dann unseren kleinen Server dazu nutzen, um einen WordPress-Artikel anzulegen.

Und es geht doch: Linux, Skript ausführen beim Herunterfahren

Geradezu abenteuerlich sind die Aussagen einiger selbsternannter Experten beim Thema „Skripte ausführen beim Herunterfahren“. Von „Linux fährt man nicht herunter“ bis zu „ist überhaupt nicht möglich“ habe ich alles schon lesen dürfen.

Dabei ist es ganz einfach. Ich benutze diese Methode auf meiner virtuellen Entwicklungsmaschine, um Dateien und Datenbanken nach einem Arbeitstag auf dem Host zu sichern.

Hier also meine schnelle: „Klicken-und-vergessen“-Methode für

  • Oracle VM VirtualBox Manager
  • Host: Windows 7 64 Bit
  • Gast: Ubuntu Linux 14.04.1 – 64 Bit (Hostname: minlux)
  • Netzwerk: AVM FRITZ!Box 7390, Host über WLAN verbunden

Die auszuführenden Dateien befinden sich in /etc/init.d/.

Wir legen ein Skript an, das nichts anderes macht, als eine leere Datei namens goodbye.txt ins Home-Verzeichnis des Users zu schreiben. Das Skript, das das erledigen soll, erhält den Namen custom-shutdown.sh.

Wir machen die Datei ausführbar:

Prüfen, ob alles geklappt hat:

Nun legen wir in /etc/rc0.d/ einen Link zum Skript. Beachte: das Präfix K04 vor dem Dateinamen, ohne das geht es nicht.

Fertig. Nun starten wir die Maschine neu

Test, ob goodbye.txt auch wirklich angelegt wurde:

Man beachte, dass die Datei für den Nutzer root angelegt worden ist, falls man noch irgendetwas damit plant.

Skript beim Hochfahren ausführen

Wer möchte, kann Skripte auch ausführen lassen beim Hochfahren des Rechners. Dann muss der Link aber nicht in rc0.d sondern in rc6.d platziert werden.

WICHTIG: Server neu starten

Wenn man Datenbanksicherungen beim Herunterfahren anlegen möchte, so muss man natürlich beachten, dass die Datenbank schon längst selbst heruntergefahren ist. Also muss man diese kurz wieder starten:

Mein Dank geht an http://ubuntu.flowconsult.at/linux/ubuntu-14-10-shutdown-script-with-rc0-d-rc6-rcd/ und https://unix.stackexchange.com/questions/34963/running-script-before-shutdown-seemingly-not-working. Mehr Informationen zum Runlevel: https://en.wikipedia.org/wiki/Runlevel#Ubuntu

WordPress: Send Administrator E-Mails to all you users with Email Users 2 Plugin (Emu2)

Tested with WordPress 3.2.1!

Now schedule your mails.

WordPress: Send email to users, manually or on schedule (digest of newest posts). Users can send emails to each other. Export function included. A plugin for wordpress which allows you to send an email to the registered blog users. Users can send personal emails to each other. Power users can email groups of users and even notify group of users of posts. With ability to schedule mails of the newest post in digest form.

STILL BETA!!!

Download from WordPress repository

FAQ

Do you have other plugins?

Check out my other WordPress Plugins.

My provider/host/server does not seem to work with your plugin

OK, there are some administrator outside which treat their services very strict. Mass mailing can always be misused for spamming. That’s why you should ask your admin for current restrictions on mail sending. Pass their answers to me. And by the way, if you are starting a serious business than you should not put your website on a cheap mass web host without any personal support.

Problems with automatic sending. Why are some mails send by the hour instead daily or even three times in a row?

The build in scheduler of WordPress which I use in this plugin is not 100% reliable. This seems to be a bug. It’s already an issue in the bug tracking system of the WordPress developers. Have a look: http://core.trac.wordpress.org/. Emu2 is still beta. If you don’t want to get into trouble with your users I advice you to turn this automatic function off until the bug is fixed.

How can I give certain users the ability to use EMU2?

Scroll down in settings menu and you will find the different capabilities. You can assign them to different roles, hence to your users. I would advice you to use the plugin [User Role Eitor].

Where do I post my feedback?

Here

How can I support you?

That is nice of you. Donation link: https://1manfactory.com/donate

Will there ever be a real manual?

I don’t know. Maybe.

Changelog

0.83b (23.11.2011)

  • adding spanish version – Thanks to Pablo Olave from Chile

0.82b (06.07.2011)

  • tested with WordPress 3.2 -> ok
  • fixed HTML link problem in visual editor

0.81b (10.06.2011)

  • not sending empty mail without digest
  • sending success mail to admin

0.80b (09.06.2011)

  • NEW: Schedule a digest mail of the newest posts
  • Put sender into to field when sending problems (optional)
  • editing of templates moved to additional section

0.73b (30.05.2011)

  • Bugfixing on sending of test mails

0.72b (30.05.2011)

  • Test with WordPress 3.1.3 -> ok
  • Bugfixing on missing Url information in sent mails
  • changed default values from 0 to NULL to prevent possible errors

0.71b (24.04.2011)

  • enhancing administration of user capabilities

0.70b (16.04.2011)

  • some bug fixing with invalid from field values
  • bcc limit variable
  • choose your own sender name and address
  • more translations

0.65b (07.04.2011)

  • setting Return-Path
  • setting Message-Id

0.64b (05.04.2011)

  • implementing debug mode
  • tested with WordPress 3.1

0.63b (09.02.2011)

  • tested with WordPress 3.0.5
  • additional translation

0.62b (04.02.2011)

  • Translation of user roles

0.61b (04.02.2011)

  • Debug Info in subject line removed (sorry for that)

0.60b (03.02.2011)

  • UTF-8 Bug with german Umlauts fixed
  • Ability to chose between server mail function and wordpress mail function
  • new icon

0.54b (02.02.2011)

  • Solving Dashboard Folding Bug

0.53b (02.02.2011)

  • Some new translating.
  • Improving Error messages when using different roles

0.52b (01.02.2011)

  • fixed redeclare of function error

0.50b (27.01.2011)

  • using build in wordpress function so sent mail
  • adding screenshots
  • translation update
  • now with traceless deinstallation routine

0.42b (26.01.2011)

  • HTML-Editor: fixing problems with media upload

0.41b (26.01.2011)

  • Fixing small HTML-Editor bug

0.40b (22.01.2011)

  • Using HTML-Editor (TinyMCE)
  • Fixing small mail sending bug
  • making screenshots

0.32b (10.01.2011)

  • UTF-8

0.31b (10.01.2011)

  • PLEASE UPDATE!!!

0.3b (10.01.2011)

  • PLEASE UPDATE!!!
  • wrong folders

0.2b (10.01.2011)

  • first version, please test before productive using
global $qrcodetag; echo $qrcodetag->getQrCodeUrl($content, $size, $encoding, $ecc, $margin, $version);

Unbekannte Zeichensätze finden mit „WhatTheFont“

Heute war ich auf der Suche nach einem bestimmten Zeichensatz.

Leider hatte ich nur ein Bild von der Schrift aus dem Internet.

Und da habe ich WhatTheFont entdeckt.

Dort lädt man einen möglichst genauen und scharfen Ausschnitt des Textes als Bild hoch, kontrolliert, ob die Zeichen auch korrekt erkannt worden sind. Und am Ende spuckt die Website möglichst gut passende Zeichensätze raus.

Was will man mehr?