Sonntag, 26. Februar 2012

Neuere Artikel veröffentliche ich direkt im User-Archiv-Blog:
blog.user-archiv.de

Montag, 24. Oktober 2011

Eine einfach Loggin-Routine für php-Skripten

Eine einfache loggin-Routine, die zur kontrolle die Aufrufe in einer Datei speichert und wenn diese voll ist, per email versendet und die Datei leert. Ich habe sie in verschiedene Projekte eingebaut, und möchte sie hier vorstellen.

Hier am Beispiel eines Einbaus in einer index.php, die mit dem Parameter $seite aufgerufen wird:

$logtext=date("d.m.Y H:i:s")." - "; // aktuelles Datum
$logtext.="Seite: $seite \n"; // Seiten-Parameter
$logtext.="Query: ".$_SERVER['query']."\n\n"; // die gesamte query, die der User verwendet hat

##############

$logdatei="admin/data/tmplog.txt";

if(file_exists($logdatei)) {
 if(filesize($logdatei) > 100000) {
       $mailtext=file($logdatei);
       $mailempfaenger="kontakt@blablabla__blabla.de";
       $betreff="Zugrifflogs User Archiv admin/data/tmplog.txt ";
       $from="From: webmaster@".$_SERVER['SERVER_NAME'];
       $mailversendet=@mail($mailempfaenger, $betreff, $mailtext, $from);
       $fp=fopen($logdatei, "w");    // löscht inhalt
       @fclose($fp);
 }
}


if(!file_exists($logdatei)) {
 echo "$logdatei existiert nicht, lege sie an <br>"; // hier könnte man noch chmod-Abfragen einbauen
 $fp=fopen($logdatei, "w");
 @fclose($fp);
}

$fp="";

    $fp=@fopen($logdatei, "a");

    if($fp) {
      $ok=@fwrite($fp,$logtext);
      @fclose($fp);
    }

Samstag, 24. September 2011

Wie kann ich den freien Speicherplatz auf dem Server kontrollieren?

 Jeder sollte irgendwo in seinem Adminbereich eine Speicherplatzabfrage einbauen. Entweder als eigenes Skript, oder besser eingebunden in ein Administrationsskript, das ständig benutzt wird. Denn ein voller Speicherplatz sorgt für mysteriöse Probleme bei anderen Programmen, ohne dass man auf die Idee kommt, das könnte an einem vollen speicher liegen. Ein Wordpress-Update geht dann plötzlich nicht mehr, denn die Platte ist faktisch nicht mehr beschreibbar. Aber nicht mangels Rechten, sondern wegen "Überfüllung".

Wenn Ihr nun sagt, da bin ich noch weit entfernt davon ... na ja, es reicht, wenn man Speicherplatz für Dritte zur Verfügung gestellt hat, also auf seinem Server die Webprojekte anderer hostet, z.B. von einem Verein, den man betreut. Dann passiert schnell mal folgendes: Mitglieder laden Bilder oder Dateien hoch, die mehrere MB umfassen. Meist werden die nie wieder gelöscht, auch wenn sie nicht mehr eingebunden sind, denn weder Wordpress noch CK-Editor haben hier vernünftige Mechanismen. Und viele Leute wissen nicht, dass man ein Digicam-Foto erst mal runterrechnen muss, bevor man es weiter verwendet. In einem Fall hat ein von mir betreuter Musik-Verein mp3-Dateien in den Mitglieder-Dowloadbereich hochgeladen, die enorm groß waren. Dazu noch ein paar überdimensionierte PDF-Dateien und, im Laufe der Zeit war der Server voll. Dasselbe passiert mit ein paar Videos, die man in den Downloadbereich hochlädt - pro Video 1,5 GB und plötzlich ist der Server voll. Und das Gemeine ist, wie gesagt, dass man die anschließenden Probleme nicht damit in Verbindung bringt. es gibt keine Fehlermeldung "Platte voll", sondern allenfalls Meldungen über Schreibfehler.

Wie fragt man nun den freie Speicherplatz  ab? Mit diskfreespace.

<?php
$path = "speicherplatz.php"; // der Name dieses Skripts
$var = diskfreespace("$path");
echo "Freier Speicher: " . $var . " Bytes";
?>

Dieses Skript abspeichern und in ein Admin-Skript einbinden. Dann wird immer der Speicherplatz angezeigt.

Natürlich kann man jetzt noch zusätzlichen Code einbauen. Zum Beispiel ein rot eingefärbter Hinweis für den Fall, dass ein bestimmter Wert unterschritten wird. Oder eine email-Meldung. Im letzteren Fall ist eine Einbindung in eine vom User aufgerufene Seite (ohne echo-Befehl) sinnvoll, oder ein Cronjob-Aufruf.

Samstag, 10. September 2011

Eigene Texte oder ebooks veröffentlichen

Wer als Blogger, Dozent, Webseitenbetreiber Texte in elektronischer Form anbieten will, sei es in PDF oder echte ebook-Formate, stellt erstaunt fest, dass das gar nicht so einfach ist. Auf welcher Plattform soll ich die Bücher einstellen? Welche technischen, rechtlichen und steuerlichen Aspekte gibt es, wenn ich das ebook auf meiner eigenen Webseite anbieten will?

Dieser Beitrag soll ein erster Ansatz sein, Material zu diesem Thema zu sammeln.

Gemäß den Erfahrungen, die in diversen Foren ausgetauscht werden, kommen derzeit folgende Verkaufsplattformen in Frage:
  • xinxii.com (Schwerpunkt Ratgeber; deutsche Plattform; )
  • lulu.com (bietet zusätzlich Printversionen; deutsche Plattform)
  • amazon (Kindle-Format; seit April 2011 auch deutsche Verkaufsplattform vorhanden)
  • beam-ebooks.de/
  • scribd.com
  • smashwords.com
  • libreka.com (nur wenn Autor auch Verlagsstatus hat und Buch eine ISBN hat)
  • Microsoft E-Book-Plattform wird Ende 2011 eingestellt. Microsoft nimmt seine E-Book-Software Microsoft Reader vom Markt.
Empfehlenswert aus rechtlicher und steuerlicher Sicht sind deutsche Portale. Entsprechend ist es bei internationalen Plattformen wie z.B. amazon empfehlenswert, den Verkauf auf Deutschland zu beschränken. Der USt-Satz für (in Deutschland vertriebene) ebooks ist 19 %, nicht 7 %. Werden die ebooks auf ausländischen Plattformen (amazon.com) zum Download angeboten, gelten u.U. andere USt-Sätze.

Von einen direkten Verkauf auf der eigenen Webseite in eigenem Namen würde ich abraten. Abgesehen davon, dass die Abwicklung, egal wie weit ihr sie automatisiert, zusätzlichen Zeitaufwand (und damit Geld) kostet, gibt es zu viele verkaufsrechtlichen und steuerrechtlichen Vorschriften zu beachten. Ferner müsste man sich ständig auf dem Laufenden halten, ob sich an den rechtlichen Vorschriften nicht etwas ändert oder etwas hinzukommt. Hier ist es sinnvoll, den Verkauf und die Abwicklung einer Plattform zu überlassen und 70 % Provision zu kassieren.  Übrigens: im Printbereich erhält man 10 bis max 15 Prozent für Sachbücher.


Als Standard für Provisionen scheinen sich derzeit einzubürgern:

70 % bei normalen Preisen
30 % bei sehr geringen Preisen (z.B. unter 2-3 Euro)



Links:


Ein interessanter Diskussionsthread aus jüngerer Zeit:
http://www.e-reader-forum.de/ebooks/self-publishing/3317-online-verkaufsplattformen-welche-sind-f/


Plattformen für Bücher und Dokumente
Ein Beitrag von: Sebastian Schürmanns
Die hier vorgestellten Text-Plattformen bieten die Dokumenten-Plattformen  keine Printversionen und auch keinen Vertrieb über den klassischen Handel an. Vorgestellt werden in diesem Beitrag die Anbieter Docstoc, Doktus, DoXtop, PEO, Txtr, Scribd und XinXii.

Software:

Autoren-Software ist nicht Gegenstand dieses Artikels. Allerdings laufen hierzu ebenfalls Recherchen. Geeignete Aufsätze registriere ich in der User-Archiv-Datenbank.  Gefunden habe ich z.B. interessante Software-Anleitungen auf den Seiten von Stephan Lamprecht, z.B,

http://www.autoren-infos.de/category/werkzeuge/
Rubrik: Sonstige Themen; Typ: Sonstige_Literatur

http://www.autoren-infos.de/2011/02/02/zeit-und-muhe-sparen-semantisches-schreiben-mit-markdown/
Rubrik: Sonstige Themen; Typ: Sonstige_Literatur


http://www.autoren-infos.de/2011/01/26/papyrus-autor-4-gutes-handwerkszeug-fur-alle-autoren/
Rubrik: Sonstige Themen; Typ: Sonstige_Literatur


http://www.autoren-infos.de/2011/06/03/vom-manuskript-zum-kindle-e-books-mit-sigil-und-calibre/
Rubrik: Sonstige Themen; Typ: Sonstige_Literatur


http://www.autoren-infos.de/2011/02/17/online-publizieren-mit-xinxii/
Rubrik: Sonstige Themen; Typ: Sonstige_Literatur


http://www.autoren-infos.de/2011/04/18/die-grose-ubersicht-software-fur-schriftsteller-autoren-und-drehbuchschreiber/
Rubrik: Sonstige Themen; Typ: Sonstige_Literatur


http://www.autoren-infos.de/2011/03/08/novel-writer-softwareunterstutzung-fur-romanautoren/
Rubrik: Sonstige Themen; Typ: Sonstige_Literatur

http://www.autoren-infos.de/2011/02/14/writeway-unterstutzung-fur-romanautoren-unter-windows/
Rubrik: Sonstige Themen; Typ: Sonstige_Literatur

abgerufen auf: http://www.user-archiv.de/newest.html

Mittwoch, 17. August 2011

Wordpress Update



Mir reicht's. Das ist jetzt der letzte Tropfen, der mein Fass zum Überlaufen bringt. Nach und nach werde ich meine blogs auf externe Anbieter wie blogspot verlegen. Denn es ist sowieso schon ein ständiges Risiko, dass über neue Sicherheitslücken der Server geknackt wird, wenn man nicht  täglich nachsehen kann, ob Updates vorliegen.

Aber wenn dann Updates existieren, und man kann nicht updaten, weil die neueste Version nicht abwärtskompatibel zur Mysql-Datenbank  ist, dann ist man hilflos ausgeliefert.


https://img.skitch.com/20110817-nud8macurusuuwffihewcee71p.jpg
 Zu dem Thema wird noch ein gesonderter Bericht kommen.

BSI weist auf massenhafte Kompromittierung von osCommerce-shops hin

Bonn, 15.08.2011.

Beobachtungen des Bundesamts für Sicherheit in der Informationstechnik (BSI) zufolge nutzen Angreifer derzeit verstärkt mehrere Sicherheitslücken in veralteten Versionen des Online-Shop-Systems "osCommerce" aus, um auf diesem System basierende Web-Präsenzen zu manipulieren. Die Angreifer fügen unter Ausnutzung der Sicherheitslücken schädlichen Code auf dem Shop-Server ein, welcher auf so genannte "Drive-by-Exploits" verweist. Beim Besuch eines so manipulierten Online-Shops wird automatisiert versucht, verschiedene Schwachstellen im Web-Browser, im Betriebssystem oder anderer auf dem PC des Besuchers der Webseite installierter Anwendungssoftware auszunutzen, um unbemerkt ein Schadprogramm auf dem PC des Nutzers zu installieren.

Nach Erkenntnissen des BSI sind inzwischen mehrere tausend Online-Shops weltweit betroffen, darunter auch viele deutschsprachige. Die von den Angreifern für die Manipulationen ausgenutzten Sicherheitslücken wurden bereits in der vom Hersteller im November 2010 veröffentlichten Version osCommerce 2.3 geschlossen. Viele Online-Shops setzen jedoch immer noch ältere Versionen ein.

In der Fachpresse wurde bereits Ende Juli 2011 über diese Angriffe berichtet. Beobachtungen des BSI zufolge haben Betreiber von Online-Shops bislang jedoch nur teilweise reagiert und Manipulationen behoben sowie ein Update der eingesetzen osCommerce Software durchgeführt. Das BSI weist daher aus diesem Anlass auf den akuten Handlungsbedarf hin.
Anbieter sollten Shop-System überprüfen und aktualisieren

Das BSI rät Betreibern von Online-Shops auf Basis von osCommerce, den Versionsstand der eingesetzten Shop-Software zu überprüfen und ggf. ein Update auf die aktuellen Versionen 2.3.1 bzw. 3.0.2 durchzuführen. Die aktuellen Versionen stehen unter http://www.oscommerce.com/solutions/downloads zum Download bereit. Wurde bislang noch eine ältere Version eingesetzt, sollte der Shop-Server dringend auf mögliche Manipulationen überprüft werden.
Schutzmaßnahmen vor Schadprogrammen

Internet-Nutzern empfiehlt das BSI, zum Schutz vor Infektionen ihres Rechners mit Schadprogrammen über Drive-by-Exploits auf die regelmäßige Aktualisierung der Signaturen des eingesetzen Virenschutzprogramms zu achten und zeitnah alle jeweils verfügbaren Sicherheitsupdates für das Betriebssystem und Anwendungssoftware zu installieren. Weitere Informationen zum Thema Drive-by-Exploits gibt es auf der Webseite "BSI für Bürger".

Donnerstag, 28. Oktober 2010

Beiträge aus Wordpress-Datenbank direkt abrufen

Um eine Liste von Beiträgen in einer eigenen Webseite anzeigen zu können, greifen die meisten Webmaster auf den wordpresseigenen Feed zurück, und lesen diesen mit einer entsprechenden PHP-Routine in die eigene Webseite ein. Dieser Umweg belastet aber nur das Wordpress-System und enthält Fehlerquellen bei den Formatierungen. Einfacher ist ein direktes Auslesen der Datenbank.

Mit folgender Routinen lese ich die die ersten sieben Einträge aus der Datenbank in gekürzter Form und die restlichen Artikel nur als Überschrift auf:

1. Routine (listet die ersten sieben Artikel in verkürzter Form auf)



$blogpath = "http://www.regensburger-tagebuch.de/artikel/";
$sql = "SELECT
post_name,
post_date,
post_title,
post_content,
post_excerpt
FROM
wp_posts //je nach Suffix abaendern!
WHERE
post_type = 'post' AND
post_status = 'publish'
ORDER BY
post_date DESC
LIMIT 7
";
$result = mysql_query($sql);
$menge = mysql_num_rows ( $result );
$result = mysql_query($sql);
if(mysql_num_rows($result)){
while($row = mysql_fetch_assoc($result)){

$post_name=$row['post_name'];
$url=$blogpath.$post_name;
$post_title=$row['post_title'];
$post_date=$row['post_date'];
$post_content=$row['post_content'];
$trenner="<"."!"."--more--".">";
$post_content=str_replace("<p>$trenner</p>", $trenner, $post_content);

$tmp=explode($trenner, $post_content);
$tmp2=count($tmp); // fuer spaeter zu gebrauchen

$post_content=$tmp[0];
$post_content=strip_tags($post_content, "<br>");
// beseitigt alle Formatierungen ausser br, so dass beim Abschneiden des Textes
// keine unvollendeten Elemente herauskommen können; eine Alternative waere
// der Rueckgriff auf evtl. vorhandene Exzerpte.
 
$readmorelink="";
if(!empty($tmp[1])) $readmorelink="<p class='weiterlesenlink'><a href='$url'>Zum Artikel (weiterlesen) ...</a></p>";

echo "<div class='artikelauszug'>";
echo "<p class='posttitle'><a href='$url'>$post_title</a></p>";
echo "<p class='postcontent'>$post_content</p>";
echo $readmorelink;
echo "</div>";

}

}




2. Routine: listet alle Artikel (hier ab dem siebten Artikel) nur mit Titel auf. 

Diese Routine ist wesentlich einfacher, weil man nicht auf Formatierungsprobleme eingehen muss, die beim Abschneiden des ersten Content-Teiles entstehen können.

$blogpath = "http://www.regensburger-tagebuch.de/artikel/";
$sql = "SELECT
post_name,
post_date,
post_title
FROM
wp_posts  // je nach suffix evtl. abaendern
WHERE
post_type = 'post' AND
post_status = 'publish'
ORDER BY
post_date DESC
LIMIT 7, 10000 // beginnt ab dem achten Datensatz und geht sicherhetshalber nur bis zum 10.000sten Datensatz; den LIMIT-Befehl kann man auch ganz weglassen, dann erhält man alles

$result = mysql_query($sql);
$menge = mysql_num_rows ( $result );
$result = mysql_query($sql);
if(mysql_num_rows($result)){
while($row = mysql_fetch_assoc($result)){
$post_name=$row['post_name'];
$url=$blogpath.$post_name;
$post_title=$row['post_title'];
$post_date=$row['post_date'];
$post_date=substr($post_date, 0, 11);

echo "<div class='artikelliste'>";
echo "<p><a class='listentitel' href='$url'>$post_title</a></p>";
echo "<p style='font-size:0.8em'>Datum: $post_date </p>";

//$readmorelink="<p style='text-align:right'><a href='$url'>Zum Artikel</a></p>";
//echo $readmorelink;

echo "</div>";

}

}

Anzusehen z.B. bei:
www.regensburger-tagebuch.de/startseite.html (keine Wordpress-Seite)
www.regensburger-tagebuch.de/Archiv.html (auch keine Wordpress-Seite)
www.burkes.de/startseite.html (keine Wordpress-Seite)

Dienstag, 10. August 2010

YoWindow-Wettermodul individualisieren und in Webseite einbauen.

Eine Anleitung für Webmaster zum Modifizieren des kultigen YoWeather-Wettervorhersage-Moduls.

Der Einbau des Wettervorhersage-Moduls ist einfach.  Den Quellcode erhält man KOSTENLOS und ohne Anmeldung oder sosntigen Aufwand auf Yowindow.com. Dort ist die Unterseite etwas versteckt, denn YoWindow ist hauptsächlich ein Desktop-Programm, das dafür sorgt, dass statt eines x-beliebigen Bildschirmhintergrunds oder Screen-Saver das Wetter für einen Ort in leicht animierter Form  angezeigt wird.

Das Programm


Das Desktop-Programm, das demnächst auch als Mac-Version herauskommen soll,  ist seriös, virenfrei und vielfach empfohlen. Die Betreiber der Webseite machen keinen kommerziellen TamTam umd das eigentlich geniale Modul, das m.E., wegen der Individualisierbarkeit bei entsprechender Mitarbeit der community, zum Renner werden könnte. Der Begriff "Window" in "YoWindow" hat übrigens nichts mit dem Betriebssystem zu tun.

Das Webseiten-Widget


Das Webseiten-Widget, so nennt sich das Modul zum Einbinden auf eine Webseite, findet man rechts über den Button "Add to Webpage"
oder direkt mit Hyperraumsprung, äh, Hypersprung auf die Unterseite
http://yowindow.com/weatherwidget.html
Living Weather for blog or website

Eine komplette Liste aller Parameter findet man hier (ich habe sie noch nicht ausprobiert):

Das System hat mich so begeistert, dass ich  es (trotz des Erfordernisses von Flash beim User) vor ein paar Wochen  testweise eingebaut habe, z.B. auf meinem Regensburger Blog (http://regensburger-tagebuch.de/Wetter.html) oder auf dem eMagazin in einem Artikel zur WM-Fußballweltmeisterschaft: ((Wie ist sieht das aktuelle Wetter in Südafrika aus?), aber jeweils nur im Standardformat:

Beispiel aus Regensburger-Tagebuch.de


Navigieren Sie durch Uhrzeit und Datum, und sehen Sie was herauskommt. Benutzen Sie den oberen Rand und klicken oder ziehen Sie mit der Maus auf eine bestimmte Uhrzeit.
YoWindow.com Forecast by yr.no
Das hier verwendete Standardbild lässt sich durch ein eigenes ersetzen und einbinden. Yowindow blendet dann in dieses Bild den jeweiligs passenden Himmel ein  und lässt im Vordergrund den Regen, den Hagel oder den Schnee fallen. Gemacht haben das schon viele User aus der Wetterbranche, z.B. http://www.luckysnet.de/Php/dwdforecast.php (Wetterseite von Fam. Luckner)
http://wetter.altenessen.info/animation.html (Wetterseite von Dietmar Hollenberg)
http://wetter.toernover.com/ (Wetterstation von Werner Heidotting auf Mallorca)
oder, aus dem YoWindow-Forum:


Die Individualisierung durch landscapes


Wie bekomme ich aber nun ein eigenes Vorhersage-Bild? Durch "landscapes". Jeder kann eigene landscapes basteln, indem er Fotos oder andere Bilder entsprechend präpariert und zusammen mit einer speziellen Datei hinterlegt. Das hört sich schlimmer an, als es ist. Auch ein Nicht-Programmierer kann das. Es gibt eine Anleitung auf YoWindow, sogar in deutscher Version.
Die bereits hinterlegten Landscapes und die Anleitung findet man im Forum, und zwar auf
http://yowindow.com/forum/viewforum.php?f=22

Die landscapes können sowohl im Desktop-Programm als auch im Webseitenwidget verwendet werden.

Beim Einbau des Widgets wird  als Parameter die URL zu den Landscape-Datei angefügt (Beispiel:  … landscape=http://www.deinedomain.de/wetter/landscapes/regensburg.ywl).

Beispie:
… http://yowindow.com/online.html?location_id=gn:360630&ln=Cairo&tf=24&us=metric&landscape=http://landscape.yowindow.com/landscapes/pyramids/pyramids1.ywl

Dort im Forum versteckt  findet Ihr auch die Anleitung, wie man solche landscapes selbst erstellt.


Eigene Anmerkungen


Diese Anleitung möchte ich nicht wiederholen, sondern nur ergänzen:
I
m Wesentlichen geht es darum, ein Stadt- oder Landschaftsbild mit Himmel zu erstellen, bei der Himmel entfernt bzw. transparant gemacht wurde. Dazu wird das Bild als .png-Datei abgespeichert. Speziell in PNG und GIF-Dateien kann man bestimmte Farben (bzw. farbige Flächen) transparent machen, bei JPG oder BMP-Dateien funktionart as nicht. Das PNG-Format ist dabei weniger bekannt, aber schon lange in Gebrauch. Es wurde speziell zum Einsatz in Webseiten erfunden.
Gelegentlich lesen Sie den Begriff "freistellen" oder "maskieren". Gemeint ist genau das oben gesagte: dass man Objekte freistellt, indem man den Hintergrund transparent macht.
Hat man in einem  Bild den Himmel "entfernt" speichert man es zusammen mit einer kleinen Datei im Internet ab.

Die Datei mit der Endung .YWL ist schnell erstellt; sie enthält die Information, wo im Bild die Sonne aufgeht, also den "horizonlevel". Die Datei kann dann so aussehen
<landscape name="Live Sky example" type="picture"  id="com.yowindow.pyramids">
    <data src="http://www.deinedomain.de/landscapes/pyramids.png" horizonLevel="382">
        <about>The original photo by Ed Yourdon</about>
    </data>
</landscape>

Diese YWL-Datei enthält die Angabe, wo das Bild gespeichert ist. Die YWL-Datei und Bilddatei müssen im Internet auf irgendeinem Server gespeichert sein. Bei der Einbindung des Widgets in die Webseite muss dann nur noch bei der Einbindung des Flash-Applikation als zusätzlicher Parameter der Pfad zur YWL-Datei (=landscape-Datei) angegeben werden

  …landscape=http://landscape.yowindow.com/landscapes/pyramids/pyramids1.ywl


Für diejenigen, die das KnowHow zum Erzeugen maskierter Bilder haben, dürfte das Ganze  jetzt kein Problem mehr sein. Sie müssen nur wissen, dass maskierte Bilder auch als PNG-Datei statt als GIF-Datei gespeichert werden können. Im PhotoImpact (meinem haushohen Favoriten) ist es am besten, über den Bildoptimierer im Menüpunkt WEB zu gehen, dort gibt es auch eine PNG-Variante.
Für diejenigen, die bezüglich der Bildfreistellung noch Lernende sind: benutzten Sie das im YoWindowtutorial genannte Opensource-Programm GIMP oder das von mir genannte PhotoImpact (Version 11 ist für ein paar Euro originalverpackt auf ebay erhältlich, das reicht vollkommen). Verlieren Sie keinesfalls Zeit, indem Sie versuchen, das  das ebenfalls im Tutorial genannte Programm PHOTOSHOP zu organisieren, es sei denn, Sie haben dieses (völlig überteuerte) Programm bereits. Und PhotoshopElements, die nur scheinbar leichtgewichtige Variane von Photoshop, können Sie hier sowieso vergesen.

Installieren Sie GIMP und gehenSie auf youtube.com. Geben Sie dort als Suchbegriff ein "GIMP Tutorial freistellen".

Ein Beispiel wäre: The Gimp / Objekt frei stellen

Das von mir genannte Tutorial berücksichtigt die Möglichkeiten des neuesten Version von GIMP, weshalb ältere Tutorials unnötig aufwändig sind. Falls Sie noch einfachere Anleitungen finden oder wissen, melden Sie sie hier.

Zu dem Thema Bildbearbeitung möchte ich demnächst noch etwas schreiben. Ein bisschen Geduld.


Aus der Homepage von YoWindow


Das Tool wird bisher ganz überwiegend von Betreibern von Wetterstationen benutzt, ist aber für jedermann erhältlich. Die Selbstbeschreibung auf der Homepage von YoWindow sieht übrigens so aus.
Aus der YoWindow-Webseite (Stand August 2010): What is YoWindow?
YoWindow is a weather application.
A new kind of a weather application.
YoWindow displays weather conditions over a nice and peaceful landscape. So you can watch the weather looking at the landscape.
Naturally – just like looking out of your window.
That makes YoWindow special.
You see the picture instead of bare weather data.
In your window you can watch current weather only.
YoWindow is able to display the weather forecast.
You can point at any time you wish and enjoy the weather picture.
You can even scroll the time.
At the moment, there are no weather application of this kind.
YoWindow is a next generation interface for weather application

YoWindow Editionen, Stand August 2010
Eine Apple-Mac-OS X Version ist laut der Webseite in Vorbereitung.


Die Erfinder von YoWindow


Ich persönlich finde es wichtig, bei nicht-kommerziellen Projekten dieser Art auch immer die Initiatoren zu nennen, das sind hier:
  • Pavel Repkin
  • Yuri G. Elshin
Näheres hierzu: http://yowindow.com/team.html

Donnerstag, 5. August 2010

Chaos bei Multiuser-Funktion von Wordpress 3.x

Trotz 10 Jahren Erfahrung mit HTML und Serverkonfiguration war die Umstellung des Blogs haarig. Wegen einer ausreichenden deutschen Anleitung musste ich stellenweise raten, was zu tun ist. Ich habe das domainmapping-Plugin besorgt, alle vorher aktivierten und jetzt zu deaktivierenden Plugins notiert (damit ich das rekonstruieren kann), htaccess und config geändert und es irgendwann geschafft, dass die alte Seite wieder lief.

Neue habe ich noch nicht angelegt. Nach ein paar Tagen stellte ich fest, dass nur die Startseitie lief, alle Einzelposts, Kategorien und der Feed erzeugten Fehlermeldung.

In diesen paar Tagen sind dann auch alle meine Aufsätze zum Thema Steuern und Recht, die ich auf diesem Blog in den letzten Monaten geschrieben hatte, aus google verschwunden. Restlos, ohne Spuren. Es ist, als hätte es den Blog nie gegeben (außer der Startseite, natürlich).

Bei einem kostenlosen Opensource-Projekt darf man sich nicht beschweren. Ich kann die Developer und Übersetzer nur anregen, für hier eine ordentliche und vollständige (auch deutsche) Dokumentation zu sorgen und bis dahin ganz gründlich vor einer Umstellung zu warnen. Bei einer Neuinstallation kann man den User den gegenwärtigen Zustand zumuten, muss er halt lesen und basteln, aber bei einer Umstellung eines schon bestehenden Blogs steht mehr auf dem Spiel.

Bis zu einer flüssigen Prozedur sollten die Developer so vorsichtig sein wie beim Umgang mit dem internen Cache-System.

Da helfen auch alle Sicherungen nicht, die ich natürlich gemacht hatte. Die Daten waren aber nie verloren, sondern die google-Einträge.

Das nächste Problem: Ich war mir nicht ganz sicher, wie ich auf diese Blog die Permalinkstruktur eingestellt hatte, bzw. ob ich sie jetzt so wie früher konfiguriert habe. Kann sein, dass meine Artikel wieder in google sind, aber schon bestehende Links von anderen Blogs/Webseiten zu meinem Blog gehen jetzt möglicherweise in’s Leere.

Umgekehrt kann ich alle Blogger, die schon mit Wordpress arbeiten, vor einer Umstellung nur dringend warnen. Liest, liest liest. Sichert nicht nur die reinen Datenbanken, notiert Euch auch, welche Plugins Ihr aktiviert hattet und speichert am besten alle Einstellungsseiten im Dashboard als HTML-Seiten, damit ihr nicht blind rücksichern müsst.

Überschreibt auch nicht Euere alten wp-config und htaccess-Dateien, sondern sichert sie (umbennen ist das einfachste, aber nur Fortgeschrittene, damit nicht lesbare Textdateien entstehen, die als Textleichen liegen bleiben). Wenn ich nicht so vorgegangen wäre, hätte ich meinen Blog nicht so schnell wieder zum Laufen gebracht.

Nachtrag (Februar 2011):

Mittlerweile habe ich das Arbeiten mit der Multifunktion strikt aufgegeben. Es ist zu riskant, hat zu viele Nachteile und es gibt weitaus mehr Probleme als oben genannte. Wer sich näher dafür interessiert: auf den Webseiten von Matthias Griesbach, alles-mit-links.de, findet sich ein mittlerweile achtteiliger Bericht über das "Abenteuer WordPress 3 Multi-User Installation". Der letzte  Teil 8
erschien unter der URL: http://www.alles-mit-links.de/index.php/2010/09/abenteuer-wordpress-3-multi-user-installation-teil-8/

Dort sind die ständig neu auftauchenden Probleme geschildert. Damit scheidet ein Einsatz definitiv aus und ich kann nur jedem zur Vorsicht raten, der auf diese Multiuserfunktion setzen will.

Donnerstag, 21. Februar 2008

PHP- und HTML-Baustein: Kontaktformular (formmailer)

Gerade habe ich wieder eine Webseite fertiggestellt, in die ich ein Kontaktformular einzubauen hatte. Und wie immer dasselbe: Lösung aus dem letzten Projekt heraussuchen, überfliegen und Änderungen vornehmen. Entsprechend meinem Vorsatz, künftig solche Bausteine zu bereinigen und zu bearbeiten, sie dann anschließend als Baustein im Webworker-Archiv zu hinterlegen, habe ich eine Extrastunde investiert und das Skript überarbeitet. Alle Editierleichen mussten raus und der Code wurde auskommentiert. Nachfolgender Code ist das Ergebnis.

Das Thema taucht laufend in den Foren auf. Gefragt wird nach Konzept, Struktur und geeigneten formmailer-Skripten.

Nachfolgendes Skript wird in diejenige Seite eingebaut, in der das Kontaktformular erscheinen soll. Es verweist auf sich selbst, verarbeitet dort auch die übergebenen Daten und gibt Fehlermeldungen aus. Das Formular wird wiederholt, und im Falle eines Errors die fehlerhaften Daten voreingetragen. Vom Konzept her entspricht es den üblichen Empfehlungen auf entsprechende Foren-Fragen.

Das Skript ist bereits längere Zeit in mehreren Projekten im Einsatz. Es kann beliebig abgeändert und natürlich frei verwendet werden kann.


##### Ziel-email-Adresse, unbedingt ändern ######
$mailto = "irgendwer@irgendwas.de"; // ÄNDERN


##### Allgemeine Variablen vorbereiten
$formactionziel= $_SERVER["PHPSELF"];
$zeit=strftime("%c", time());
$mail_text="Anfrage vom $zeit \n \n";
$betreff= "Anfrage";
$from="From: Kontaktformular@".$_SERVER['SERVER_NAME'];
$meldung="";


######### Die HTML-Ausgabe beginnt
// es beginnt der gesamte HTML-Abschnitt, in welchem Formular und oder Meldungen erscheinen
echo "<div style='margin-left:2cm; font-family:Arial; font-size:10pt'>";

########## Abschnitt 1 ##########
// folgt ein Abschnitt, der nur greift, wenn bereits Daten übersandt wurden; die Daten werden verarbeitet, um sie entweder zur Speicherung oder, bei Fehlern im erneut aufzurufenden Formular voreinzutragen.

if (isset($_POST["submit"])) {

// übergebene Variablen ermitteln:
$felder="absendername strasse plz ort tel absenderemail anmerkung";
$felder=explode(" ", $felder);
unset($errors);
foreach($felder as $tmp) {

if(trim(stripslashes($_POST[$tmp]))=="asdf") $errors[]="$tmp = asdf? Was soll das!?";
// kleines Gimmick für den Fall, dass jemand rumspielt und asdf eingibt

$$tmp=trim(stripslashes($_POST[$tmp]));
}


// Sicherheits-Überprüfung der Daten aus Übervorsicht,
// eigentlich nicht nötig, sofern $mailto oben fest definiert ist

if ($mailto != "" and !preg_match("/^[^@]+@.+\.\D{2,5}$/", $mailto)) {
$errors[] = "die E-Mail-Adresse sieht nicht richtig aus<br />";
$absenderemail="!!??!!";
}

// Pflichtfelder checken ----------------------------------------------------------- evtl. ÄNDERN -----------------
// soweit eine der folgenden Felder KEIN Pflichtfeld ist, muss man
// die entsprechende Zeile löschen oder auskommentieren

if(empty($ort)) $errors[]="Ort fehlt<br />";
if(empty($plz)) $errors[]="Postleitzahl fehlt<br />";
if(empty($strasse)) $errors[]="Straße fehlt<br />";
if(empty($tel)) $errors[]="Telefonnummer fehlt<br />";
if(trim($anmerkung)=="asdf") $errors[]="Hast Du nichts Besseres zu tun?";


// Wenn keine Fehler da sind, kann die Post abgehen.
if (empty($errors)) {
$mail_text="
Anfrage
-------
Name: $absendername
Strasse: $strasse
Ort: $plz $ort
Telefon: $tel
Email: $absenderemail
Nachricht:
$anmerkung ";
// keine HTML-Zeilenumbrüche; die hier notierten Zeilenumbrüche erscheinen 1:1 im email-Text

// Refererdaten vorbereiten, um sie der email-Nachricht hinzufügen zu können
$referer=$_SERVER["HTTP_REFERER"];
$IP=$_SERVER['REMOTE_ADDR'];
$remotehost=$_SERVER['REMOTE_HOST'];

$refererdaten="
http_referer: $referer
IP=$IP
remote_host=$remotehost
";

// referer-Daten an den email-Text anhängen

$mail_text.="
--------------
Protokollierung interner Daten für Kontrollzwecke:
$refererdaten
";

// mail versenden
if (@mail($mailto, $betreff, $mail_text, $from)) {
$sent = true;
}else {
$errors[] = "keine Verbindung zum Mailserver - bitte nochmal versuchen<br />";
}

}
}

// Bestätigungsanzeige für den User

if($sent===true) {
echo "<p style='color:green; font-size:13pt'><b>Danke!</b><br />Nachricht erfolgreich versandt.</p>";

// hier könnte man auch abbrechen und link zurück auf die eigene Seite mit dem blanken Formula setzen,
// anderenfalls muss man zunächst die Formularinhalte wie folgt löschen
foreach($felder as $tmp) {
$$tmp="";
}
// Ende des Löschens der Formularinhalte
}

echo "Neue Nachricht: <br /><hr><br />";

###### Ende Abschnitt 1 ############

###### Abschnitt 2 #############
// Dieser Abschnitt schließt am Abschnitt 1 an, und greift nur, wenn dort ein Fehler bemerkt wurde
// sie bereitet im Falle einer Fehlermeldung die Fehlerhinweise vor
// und bereitet die übersandten Daten auf, um sie im Formula voreinzutragen

if (empty($sent)) {
if(isset($errors)) {
echo "<p>Hoppla. Fehler aufgetreten:</p><ul>";
foreach($errors as $f) {
echo "<li>".$f."</li>";
}
echo "</ul><br /><br />";

$action=$_SERVER["PHP_SELF"];

// folgendes wird in ähnlichen Skripten gern übersehen; wenn in Eingabefeldern ein Apostroph war, wurde das beim Übersenden mit slashes maskiert, und diese Slashes würden im Eingabefeld erscheinen. Diese müssen entfernt werden. Beim erfolgreichen Speichern in eine Datenbank dagegen übernimmt das php-Programm die Entfernung automatisch, so dass obige Routine nur notwendig ist, wenn die Variablen auf der Webseite wiedergegeben werden müssen

$absendername=htmlentities(stripslashes($absendername));
$absenderemail=htmlentities(stripslashes($absenderemail));
$strasse=htmlentities(stripslashes($strasse));
$anmerkung= htmlentities(stripslashes($anmerkung));
$ort=htmlentities(stripslashes($ort));


} // ende errors
}
####### Ende Abschnitt 2 ########

####### Abschnitt 3 #############
// ab hier der normale Content dieser Seite, der beim Erstaufruf erscheint, der Content besteht
// aus dem Formular, evtl. mit voreingetragenen Daten im Falle einer misslungenen Absendung
echo "
<form action='$formactionziel' method='post'>
<INPUT TYPE='TEXT' NAME='absendername' value='$absendername' SIZE='42'> Name, Vorname<br />
<INPUT TYPE='TEXT' NAME='strasse' value='$strasse' SIZE='42'> Straße und Hausnr.<br />
<INPUT TYPE='TEXT' NAME='plz' value='$plz' SIZE='6'> PLZ<br />
<INPUT TYPE='TEXT' NAME='ort' value='$ort' SIZE='42'> Ort<br />
<INPUT TYPE='TEXT' NAME='tel' value='$tel' SIZE='42'> Telefon<br />
<INPUT TYPE='TEXT' NAME='absenderemail' value='$absenderemail' SIZE='40'> E-Mail (optional)<br /><br />
Nachricht:<br />
<textarea name='anmerkung' cols='40' rows='10'>$anmerkung</textarea><br />
<br />
<INPUT TYPE='SUBMIT' name='submit' VALUE='Absenden'>
</form>
<br />
</div>";