Archiv für die Kategorie ‘Allgemein’

Neue Webseite: scubapics.de

Dienstag, 13. Dezember 2011

Ich konnte es nicht lassen und habe mal wieder ein neues Weseitenprojekt gestartet…

Ausschlag hat das Stöbern nach schönen Unterwasser-Fotoseiten im Web gegeben, bei dem ich bis auf wenige Ausnahmen relativ erschüttert war… Entweder über die schlechten Bilder oder die schlechte Webseite. Oder beides.

Daher kam mir die Idee eine attraktive Webseite für Unterwasserfotografen zu machen, auf der nur gute Bilder zu finden sind. Sozusagen die “Best of” der Mitglieder. Und damit das so bleibt (mit den guten Bildern) wird diese Seite nicht für alle zur Registrierung offen stehen, sondern nur auf Einladung. Zum Start der Seite gibt es nur 5 Fotografen, die ich zur Mitbenutzung der Seite eingeladen habe weil ich deren Bilder kenne und schätze.

Zusätzlich zum gewünschten Ergebnis war die Seite mal wieder eine Spielwiese um neue Technologien (diesmal vorwiegend JQuery, JQuery UI und diverse Plugins) auszuprobieren. Ich wollte multiple Uploads per Drag&Drop, Sortieren per Drag&Drop und einfachstes Taggen von Bildern hinbekommen, um die Administration der Bilder und Galerien so einfach wie möglich zu machen. Beim Taggen bekam ich Unterstützung von einem geschätzten Kollegen, der eine schon recht gute JQuery Lösung (tagit) noch besser machte und um eine Callback-Methode erweiterte. Daher an dieser Stelle, danke an Krizzzn :-)

Hier das Ergebnis: scubapics.de

SQL Compact Edition (*.sdf) mit PHP auslesen

Sonntag, 23. Oktober 2011

Alles erfolgreiche in der Programmierwelt bekommt von Microsoft eine eigene Antwort. Meist völlig unnötigerweise, aber das soll nicht Kern dieses Artikels werden.

So war Microsofts Antwort auf das SQLite Datenbankformat die “SQL Server Compact Edition“, die .sdf Dateien ausspuckt. Vor allem in der .NET Welt soll dieses Format zum Einsatz kommen und erste Anwendungen enstehen, die statt auf Access Dateien die sdf Datenbanken verwenden. Auch ich bekam neulich eine Anfrage bei divelogs.de ob ich nicht die neue Mares Software “Dive Organizer” unterstützen könne. Kurz ein Blick darauf geworfen und das sdf Format entdeckt. Mares hatte bisher nur Access .mdb Dateien verwendet.

Die lange Suche nach einer Auslesemöglichkeit von SQL Compact Edition Dateien mit PHP brachte keine Ergebnisse, aber viele Fragen danach. Eine PHP Erweiterung dafür gibt es (bisher) nicht, daher musste eine andere Lösung her. Ich habe die Klasse class_mdb von Peter Klauer (knito.de), die Datenbankanfragen an mdb Dateien an die COM Schnittstelle von Windows weiterreicht umgeschrieben, damit die mit sdf Dateien umgehen kann. Dies bedeutet allerdings auch, daß die Lösung nur auf Windows Servern mit installierter SQL Server Compact Edition funktioniert. Meineswissens ist dies bei Windows Server 2008 (R2?) bereits der Fall, für Windows Server 2003 muss die Datenbankengine von diesem Link noch installiert werden. Danach steht die SQL Compact Edition als Data Provider zur Verfügung.

Ist die Klasse eingebunden, ist die Abfrage denkbar einfach:

<?php
 
// Example script for class_sdf
 
include("class_sdf.php");
 
$sdf = new sdf("testdatabase.sdf", "password@1"); 
 
$sdf->execute("SELECT id, text FROM test");
 
while( !$sdf->eof() )
{
    echo "The row with the id 
	".$sdf->fieldvalue('id')." 
	has the value: \"
	".$sdf->fieldvalue('text')."
	\"<br>";
    $sdf->movenext();
}
 
$sdf->close();
 
?>

Damit auch andere davon profitieren, stelle ich die Klasse class_sdf mit Beispielskript und Beispieldatenbank hier zum Download zur Verfügung:

class_sdf.zip

Die Verwendung erfolgt auf eigene Gefahr, ohne jegliche Gewähr und ohne Support meinerseits. Wenn es jemandem hilft, freue ich mich über einen Kommentar auf dieser Seite :-)

Sitemap Test Skript in PHP

Freitag, 30. September 2011

Google mag Sitemaps. Bevor man seine eigene Sitemap an Google übermittelt, macht es Sinn die Sitemap mal zu testen, um zu schauen, ob die Links nicht ins Leere führen.

Ich habe ein einfaches Skript geschrieben, um alle Links in der Sitemap mal auszuprobieren und die HTTP Header zurückzugeben:

<?php
set_time_limit(600);
$xml = simplexml_load_file("http://www.example.com/sitemap.xml");
foreach($xml->url as $child)
  {
    $res = get_headers($child->loc);
    echo $res[0]." for ".$child->loc."<br />";
  }
?>

Bei sehr großen Sitemaps kann es auch Sinn machen, die Timeout Dauer weiter hochzusetzen (erste Zeile), da jeder URL Aufruf etwas dauert.

Viel Spaß damit…

divelogs WordPress Widget

Donnerstag, 07. Juli 2011

Jetzt wollte ich auch mal lernen wie WordPress Widgets funktionieren und habe kurzerhand für divelogs ein Widget geschrieben, das den letzten Tauchgang eines Users anzeigt.

Zu finden unter http://wordpress.org/extend/plugins/divelogs-widget/

Das Widget wird als Plugin installiert und stellt nach Aktivierung ein neues Widget zur verfügung, das nur noch kurz konfiguriert werden muss.

Wie das Ergebnis aussieht, seht ihr rechts unter der Navigation…

Neue Webseite: Diving Blues [update]

Montag, 07. Februar 2011

Endlich mal wieder eine neue Webseite, die ich erstellt habe!

Diving Blues in Ao Nang, Provinz Krabi in Thailand wird von Tony und Mariska geführt, die beide eine besondere Einstellung zum Tauchen haben. Nicht die Massen durchschleusen, sondern in kleinen Gruppen umweltverträglich tauchen und die Leidenschaft, die beide für die Unterwasserwelt empfinden vermitteln. Das ist kein Marketinggerede, denn ich habe mit den beiden selbst getaucht und kann es bestätigen.

Die Seite verwendet erstmals die dynamischen rotierten Grafiken mit Schatten aus meinem vorigen Posting. Hübsch, wie ich finde :-)

[Update:] Leider ist das Vorhaben der beiden vorübergehend auf Eis gelegt worden bis sich die Tauchindustrie in Thailand wieder von der Finanzkrise und der Korallenbleiche erholt hat. Wir hoffen das beste für die beiden!

Diving Blues Webseite

PHP: Rotierte Bilder mit Schatten und Transparenz

Freitag, 26. November 2010

Ein PHP Skript um Bilder mit einem Schatten zu versehen, das Ganze zu rotieren und Transparenzen zu behalten.

<?php
// file: rotatedimage.php
// mandatory parameter - The image to load
$graphic = $_GET['pic']; 
 
// Optional GET parameters
$max = $_GET['max']; // maximum image dimensions, the larger of width/height will be taken
$rotation = $_GET['rotation'];
$borderwidth = $_GET['bw'];
 
// The width and height of the image						 
list($width, $height) = getImageSize($graphic);  
 
// Calculate the image width - height ratio
$ratio = $width/$height;
 
// sets the optional parameters to defaults if not provided
if (!$rotation) $rotation = 0;
if (!$max) $max = max($width, $height);
if (!$borderwidth) $borderwidth = round($max/50);
 
// sets the maximum height / width to $max (optional)
if ($width > $height) // landscape image -> ratio > 1
{
    $resultw = $max;
    $resulth = $max/$ratio;
}
else // portrait image -> ratio < 1
{
    $resultw = $max*$ratio;
    $resulth = $max;   
}
 
// load the image
$image = imagecreatefromjpeg($graphic);
 
// Set the border color
$bordercolor = imagecolorallocate($image,255,255,255);
 
// Load the shadow images
$corner = imagecreatefrompng("images/corner.png");
$side  = imagecreatefrompng("images/side.png");
 
// Define the dimensions of the side images
$d = 10; // Border width (Gradient of shadow in pixels for top, left, right and bottom)
$c = 20; // dimensions of the corner images (should be double of border width)
 
// define the width & height of the canvas that holds the image
$canvasHeight = $resulth + (2*imagesx($side));
$canvasWidth  = $resultw + (2*imagesy($side));
 
// Create a blank canvas with these new dimensions and fill with transparent color
$canvas = imagecreatetruecolor($canvasWidth, $canvasHeight);
$siderans_colour = imagecolorallocatealpha($canvas, 0, 0, 0, 127);
imagefill($canvas, 0, 0, $siderans_colour);
 
// top, right, bottom, left shadows
imagecopyresized($canvas, $side,$c,0,0,0,$canvasWidth-($c*2),$d,$d,$d);
imagecopyresized($canvas, imagerotate($side,90,imagecolortransparent($side)),0,$c,0,0,$d,$canvasHeight-($c*2),$d,$d);
imagecopyresized($canvas, imagerotate($side,180,imagecolortransparent($side)), $c,$canvasHeight-$d,0,0,$canvasWidth-($c*2),$d,$d, $d);
imagecopyresized($canvas, imagerotate($side,270,imagecolortransparent($side)),$canvasWidth-$d,$c,0,0,$d,$canvasHeight-($c*2),$d,$d);
 
// cornershadows
imagecopy($canvas, $corner,0,0,0,0,$c,$c);
imagecopy($canvas, imagerotate($corner,90,imagecolortransparent($corner)),0,$canvasHeight-$c,0,0,$c,$c);
imagecopy($canvas, imagerotate($corner,180,imagecolortransparent($corner)),$canvasWidth-$c,$canvasHeight-$c,0,0,$c,$c);
imagecopy($canvas, imagerotate($corner,270,imagecolortransparent($corner)),$canvasWidth-$c,0,0,0,$c,$c);
 
// This will make the border
imagefilledrectangle($canvas,imagesx($side),imagesy($side),$canvasWidth-imagesx($side) ,$canvasHeight-imagesy($side),$bordercolor);
 
// copy the image into the canvas (leaving the border free)
imagecopyresampled($canvas, $image, $d+$borderwidth, $d+$borderwidth, 0, 0, $resultw-$borderwidth*2+1, $resulth-$borderwidth*2+1, $width, $height);
 
// rotate the whole thing (optional)
$canvas = imagerotate($canvas, $rotation, imagecolortransparent($canvas));
 
// Output the result to the browser
header("content-type: image/png"); 	// This sets the header type
imagesavealpha($canvas, true); // saves the transparency
imagepng($canvas); // Outputs the image
ImageDestroy($canvas); // Frees up the memory
?>

Das schöne, an den beibehaltenen Transparenzen ist, daß man die Bilder übereinander legen kann. Nachteil: Das Format sollte dafür PNG sein, was bei Fotos deutlich größere Dateigrößen als bei JPG mit sich bringt.

folgender html Code:

<div style="width: 500px; text-align: center">
<img src="rotatedimage.php?pic=galerie/Rotes_Meer_2010_II/IMG_7937.jpg&amp;max=200&amp;rotation=14"><br>
<img src="rotatedimage.php?pic=galerie/Rotes_Meer_2010_II/IMG_7946.jpg&amp;max=200&amp;rotation=-12" style="position: relative; top: -60px;"><br>
<img src="rotatedimage.php?pic=galerie/Rotes_Meer_2010_II/IMG_7942.jpg&amp;max=200&amp;rotation=8" style="position: relative; top: -120px;">
</div>

würde zum Beispiel so aussehen:

bild1
bild2
bild3

Download des fertigen Skripts mit den benötigten Shattenbildern:
rotated.zip

Website Bewertungsportale

Sonntag, 24. Oktober 2010

Googelt man seine Seiten selbst, stößt man in letzter Zeit immer mehr auf Portale, die zu behaupten wissen was die Webseite wert sein soll.
Ich habe interessehalber mal 15 Minuten für meine Seite divelogs.de nach Bewertungen gesucht und habe mich so über die unterschiedlichen Ergebnisse amüsiert, daß ich sie hier mal auflisten möchte (Zeitpunkt der Abfrage: 24 Oktober 2010):

Bewertungsportal Wert in US$
Worthysite 723,-
Trendscape 1.606,-
ValueMySite 1.768.664,-
ReportMySite 153,-
WebSiteMark 107,-
Statsmogul 2.487,-
CubeStat 4.684,-
BizzInformation.de 13.532,-
BizInformation.org 3.589,-
Tweetvalue 164.111,-
Sites-rate 0,-

Die Spanne reicht also von 0,- US$ bis 1.768.664,- US$

Somit bleibt eigentlich nur festzuhalten, daß diese Bewertungsportale für die Tonne sind…
Sollte allerdings jemand divelogs kaufen wollen, bitte ich sich beim Angebot nach der Bewertung von ValueMySite zu richten  :-)

[UPDATE:] ValueMySite scheint nichts anderes als ein Zufallsgenerator zu sein, lädt man die Seite neu gibts andere Werte, die auch mal um eine Million Dollar vom Vorwert abweichen können

Breadcrumb für WordPress ohne Plugin

Donnerstag, 01. April 2010

Ich habe einen einfachen Breadcrumb für WordPress gesucht und nichts gefunden, das mir gefallen hat. Entweder funktionierte der Code nicht, bediente nur eine Ebene oder er war einfach zu kompliziert.

Daher habe ich schnell einen eigenen geschrieben. Folgende Funktion in die functions.php einfügen:

1
2
3
4
5
6
function rm_breadcrumb() {
$bca = array_reverse(get_post_ancestors($post));
foreach ($bca as $bc) $breadcrumb = $breadcrumb."<a href='".get_permalink($bc)."'>".get_the_title($bc)."</a> &raquo; ";
$breadcrumb = $breadcrumb.get_the_title($post);
return $breadcrumb;
}

Einfügen der Breadcrumbs in der page.php Deines Themes:

1
<?php echo rm_breadcrumb(); ?>

Das war’s auch schon, zu sehen auf den statischen Seiten dieser Homepage… Beispiel

Jetzt blogge auch ich

Samstag, 27. März 2010

nachdem meine alte Webseite Jahre lang vernachlässigt wurde, war es an der zeit etwas neues auszuprobieren. Dabei stieß ich auf das Open Source Programm WordPress, das mich sehr schnell überzeugt hat und auf dessen Basis ich jetzt meine  Webseite betreibe.

Ab und zu wird es jetzt auch Blog Einträge von mir geben, zu Themen die sich noch zeigen werden. Neue divelogs Funktionen, Unterwasserbilder oder was mir sonst noch wichtig erscheint.

Stay tuned…