Beiträge der Kategorie default

LesMixer – Playlists für LesMills Kurse

Schon von ca. einem Jahr hatte ich die Idee zu einer (für mich sinnvollen) Anwendung. Als Hobby unterrichte ich Kurse im Fitnessstudio: BODYPUMP und BODYCOMBAT. Beides sind Fitnessprogramme von Les Mills. Das besondere: sie sind vorchoreografiert. Alle 3 Monate gibt es eine neue Release (neue Musik und neue Bewegungen), diese lerne ich dann und unterrichte sie. Nach ca. 6 bis 8 Wochen sorge ich für Abwechslung in den Kursen, in dem ich „mixe“, d.h. ich ersetze Tracks aus dem aktuellen Programm durch ältere Tracks. Beim Austauschen den Tracks gibt es einiges zu beachten, da der programmtypische Stundenablauf beibehalten werden soll. Jeder Track hat eine Funktion. So ist bei BODYPUMP der 2.Track immer Squats (d.h. es werden die Beine trainiert). Beim Austauschen des Tracks kann ich dann nur einen Squat-Track aus einer älteren Release verwenden. Dann sollten die ausgetauschten Lieder gemeinsam auch musikalisch Kontraste bilden und die Länge aller Lieder sollte zusammen eine bestimmte Zeit nicht überschreiten.

Bis vor kurzem mixte ich „manuell“. Ich überlegte mir, welche Lieder ich machen könnte, hörte kurz rein (klickte mich vorher durch Ordner) und überprüfte die Gesamtlänge der Auswahl. Also dachte ich mir, da kann ich doch eine kleine Anwendung schreiben, die mir die Liedauswahl erleichtert. Zunächst braucht man eine Datenbasis: ich muss bisherige Releases einpflegen können. Danach wäre es noch praktisch, diese Daten durchsuchen zu können: nach Künstler, Musiktitel oder Bewegungen.

Ich hätte es auch in TYPO3 implementieren können. Manchmal möchte ich meinen Horizont erweitern und ein neues Framework oder eine neue Anwendung kennenlernen. Das geht am besten mit Learning-by-Doing. Von einigen habe ich schon gehört, wie toll Laravel ist und wollte es selbst ausprobieren. Nachdem ich mir einen kurzen Überblick über Laravel verschafft habe (Video-Tutorials), ging es an die Umsetzung meiner Applikation names „LesMixer“.

Um mir die Datenpflege zu erleichtern, habe ich einige sinnvolle Funktionen eingebaut. Da ich die Musik in Ordner abgelegt hatte, konnte ich automatisch beim Auswählen eines Programms und einer Release die Mp3-Dateien im Ordner einlesen und zur Auswahl anbieten. Sobald eine Datei ausgewählt wird, werden Künstler, Titel und Länge (Mp3-Metadaten) und in die entsprechenden Felder eingesetzt. d.h. Tracks für eine neue Release einzupflegen ist denkbar einfach. Sobald die Tracks eingepflegt sind, kann man sie direkt in der Applikation abspielen. Die Suche oben durchsucht Künstler und Track-Titel.

Eine Playlist (Mix) zu erstellen, ist einfach. Sobald man ein Programm ausgewählt hat, werden die Tracktypen gelistet (der Ablauf ist ja immer gleich) und man kann für jeden Tracktyp einen konkreten Track auswählen. Irgendwann möchte ich diesen Vorgang automatisieren. Da ich ein Rating eingebaut habe, könnte ich mir vorstellen, in Zukunft eine Playlist generieren zu lassen unter Berücksichtigung bestimmter Einschränkungen.

Geschrieben in default | Kommentare deaktiviert für LesMixer – Playlists für LesMills Kurse

Datum in Sublime umformatieren

Für ein Projekt brauchte ich ein paar Demo-User, die ich mir mit dem Fake Name Generator habe erstellen lassen. Das Format für Geburtsdatum in der Datei ist dd/mm/yyyy, meine Datenbank erfordert aber yyyy-mm-dd. Da ich mit Sublime entwickele und es dort die Möglichkeit gibt, Suchen und Ersetzen auch mit regulären Ausdrücken durchzuführen, kann man es so machen.

Suchen und Ersetzen, dann RegEx aktivieren.
Find What: (\d{1,2})/(\d{1,2})/(\d{4})
Replace With: ${3}-${2}-${1}

Geschrieben in default | Kommentare deaktiviert für Datum in Sublime umformatieren

Bilder mit PHP gemäß EXIF-Daten drehen

Nachdem ich ein Gästebuch-Plugin für WordPress implementiert hatte, bei dem Besucher Bilder hochladen können, ist aufgefallen, dass Bilder gedreht im Gästebuch dargestellt werden, was man anhand des Motivs erkennen kann. Sobald man das Bild separat aufruft, werden sie im Browser zwar richtig rum dargestellt, sind aber verzerrt. Auf dem iPhone werden die Bilder auch im Gästebuch in der „korrekten“ Ausrichtung dargestellt.

Wenn die Bilder mit dem iPhone gemacht werden (gefühlt betrifft das heutzutage ca. 80% aller Bilder), wird in den EXIF-Daten des Bildes die Ausrichtung gespeichert. Der iPhone-Besitzer bekommt nichts davon mit, lädt das Bild ins Gästebuch hoch und wundert sich dann, warum es falsch ist.

Als Lösung habe ich mich entschlossen, die Bilder beim Upload zu drehen (und zu skalieren). Mit der Funktion exif_read_data kann man die EXIF-Daten entsprechend auslesen. Das Bild wird auf maximal 800 Pixel Breite oder Höhe skaliert.

$image = imagecreatefromstring(file_get_contents($_FILES['picture']['tmp_name']));
$exif = exif_read_data($_FILES['picture']['tmp_name']);
if(!empty($exif['Orientation'])) {
	switch($exif['Orientation']) {
		case 8:
			$image = imagerotate($image,90,0);
			break;
		case 3:
			$image = imagerotate($image,180,0);
			break;
		case 6:
			$image = imagerotate($image,-90,0);
			break;
	}
}
 
// scale image
$ratio = imagesx($image)/imagesy($image); // width/height
if($ratio > 1) {
	$width = 800;
	$height = round(800/$ratio);
} else {
	$width = round(800*$ratio);
	$height = 800;
}
$scaled = imagecreatetruecolor($width, $height);
imagecopyresampled($scaled, $image, 0, 0, 0, 0, $width, $height, imagesx($image), imagesy($image));
 
imagejpeg($scaled, $targetFilePath);
imagedestroy($image);
imagedestroy($scaled);

Tags:

Geschrieben in default | Kommentare deaktiviert für Bilder mit PHP gemäß EXIF-Daten drehen

Virtual Hosts unter Windows / XAMPP

Dieser Artikel mit einer detaillierten Beschreibung hat mir sehr geholfen. Wobei bei mir nur der Teil funktioniert hat, der unter Update angegeben ist.
Kurzversion:

  • Apache stoppen
  • Konfigurationsdatei httpd.conf suchen (wahrscheinlich c:\xampp\apache\conf\httpd.conf)
  • dort nachschauen, ob die Virtual Hosts in eine separate Datei ausgelagert sind (wahrscheinlich ja unter extra\httpd-vhosts.conf)
  • Die Datei httpd-vhosts.conf zum Bearbeiten öffnen
  • Zeile NameVirtualHost *:80 entkommentieren
  • dann folgendes eintragen (Domain und Ordner durch eigene ersetzen):
<VirtualHost *:80>
    DocumentRoot "C:/xampp/htdocs"
    ServerName localhost
</VirtualHost>
 
<VirtualHost *:80>
    DocumentRoot "C:/xampp/htdocs/devdomain/"
    ServerName mydevdomain.local
    <Directory "C:/xampp/htdocs/devdomain/">
	Options Indexes FollowSymLinks ExecCGI Includes
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

Danach den Apache neu starten. Dann muss noch ein Eintrag in der Hosts-Datei von Windows gemacht werden. Da es unter Windows 7 nicht so einfach ist, hat mir dieser Beitrag geholfen. Denn es ging tatsächlich nur so.

Geschrieben in default | Kommentare deaktiviert für Virtual Hosts unter Windows / XAMPP

Relaunch Webseite Phantasialand

Es ist schon ca. einen Monat her, seit dem das Phantasialand mit einer neuen wunderschönen Seite online gegangen ist. Ich bin schon ein wenig stolz daran mitgearbeitet zu haben. Aus der Marketingsicht wurde der Relaunch und die neue Webseite auf kernpunkt.de ausführlich betrachtet. Aus Entwicklersicht hat die Seite auch einiges zu bieten gehabt, hier einige Highlights:
Die Navigation wurde mit HTML und CSS und ein wenig Hilfe von jQuery umgesetzt. Ist es nicht schön, wie der blaue Schein dazukommt, wenn sie aufgeklappt ist und wie z.B. die Park-Themenwelten beim RollOver in den Bildern hervorgehoben werden – pure CSS Magic.
Für die Sushibar (ich wusste auch nicht, dass man es so nennen kann, für mich ist es ein Carousel), die man z.B. auf der Seite Fantasy bestaunen kann, musste ein jQuery-Plugin entwickelt werden. Vom CSS her war es in der Sushibar eine Herausforderung, dass die Elemente teilweise nach oben rausragen.
Auch sehr schön geworden ist der Parkplan – zu finden auf den Themenwelt-Seiten als Link in der rechten Spalte. Attraktionen der ausgewählten Themenwelt werden im Parkplan hervorgehoben.
Und auch der Erlebnisplaner hat ein paar nette Features: Attraktionen können am Anfang über einen Hinzufügen-Button in der Attraktion in den Erlebnisplaner gelegt werden. Sobald eine Attraktion im Erlebnisplaner ist, macht er auch schon Vorschläge. Diese Vorschläge kann man per Drag & Drop ebenfalls in die Liste der geplanten Attraktionen ziehen. Wenn man fertig ist, wird auf Wunsch eine Anfahrtbeschreibung generiert und ein personalisierter Parkplan, auf dem die gewählten Attraktionen zu sehen sind.

Geschrieben in default | Kommentare deaktiviert für Relaunch Webseite Phantasialand

htaccess – Authetifizierung per IP und Passwort kombinieren

Man kann per .htaccess Ordner vor unbefugten Zugriffen schützen einmal mit einer Benutzer-Authentifizierung und einmal per IP. Es ist aber möglich beides zu kombinieren. Dabei werden bestimmte Abrufe per IP zugelassen, und wenn die IP nicht in der Liste vorkommt, dann wird eine htaccess-Login-Aufforderung angezeigt. Die Lösung sieht so aus:

Order Deny,Allow
Deny from all
Allow from 192.168.
AuthType Basic
AuthUserFile /full/path/to/.htpasswd
AuthName "Restricted Area"
Require valid-user
Satisfy any

Gefunden habe ich es hier bei Coding Forums

Geschrieben in default | Kommentare deaktiviert für htaccess – Authetifizierung per IP und Passwort kombinieren

Nach dem Anlegen eines Inhaltselementes im Formular bleiben

Mich hat das ein wenig gestört, dass man nach dem Erstellen eines neuen Inhaltselements in Drupal auf die Seite katapultiert wird. Diese Funktion kann sinnvoll sein, da man dann ja gleich in der Vorschau für das Element landet, kann aber auch stören, wenn sie sich nicht umgehen läßt. Dank dem Forum auf Drupal Central kenne ich nun dieses Modul Save & Edit, mit dem sich durch hinzufügen neuer Buttons diese Funktionalität zumindest umgehen läßt.

Geschrieben in default | Kommentare deaktiviert für Nach dem Anlegen eines Inhaltselementes im Formular bleiben

Zend Command Line Befehle

Das Zend Command Line Interface ermöglicht es, sich Module, Controller etc. anlegen zu lassen. Dabei wird die Ordnerstruktur bereits korrekt angelegt.

Modul erstellen mit Namen meinmodul:
zf create module meinmodul

Controller mit Namen meincontroller im Modul meinmodul erstellen, wenn index-action-included=1 nicht angegeben wird, dann wird der Controller nicht korrekt dem Modul zugewiesen:
zf create controller meincontroller index-action-included=1 meinmodul

Voraussetzung ist, dass zf als Alias für das Zend Command Line Tool hinterlegt ist:
alias zf=/home/../ZendFramework-1.8.0b1/bin/zf.sh

Tags: ,

Geschrieben in default | Kommentare deaktiviert für Zend Command Line Befehle

IE Conditional Comments in XSL

Um einen Conditional Comment im Quellcode stehen zu haben

<!--[if IE]>
According to the conditional comment this is Internet Explorer<br />
<![endif]-->

braucht man folgendes im XSL, denn würde man es so reinscheiben wie oben, dann wäre es ja ein Kommentar im XSL-Code 😉

<xsl:comment><![CDATA[[if IE]>
	<link rel="stylesheet" type="text/css" href="/media/css/styles-ie.css" />
<![endif]]]></xsl:comment>

UPDATE: Dieser Codeschnipsel hat den Nachteil, dass der Inhalt nicht geparst wird, damit kann man in dem Schnipsel keine Variablen verwenden oder Knotenwerte. Da hilft dieser Schnipsel weiter:

<xsl:comment>[if IE 7]<![CDATA[>]]>
	<xsl:value-of select="concat( '&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; media=&quot;all&quot; href=&quot;', $webbasepath, /resources/browser_specific_styles/styles_ie7.css, '&quot; />')" />
<![CDATA[<![endif]]]></xsl:comment>

Tags: ,

Geschrieben in default | Kommentare deaktiviert für IE Conditional Comments in XSL