Martin Lantzsch
Software Entwickler
24. November 2011

Excel CSV, CSV phpMyAdmin

24. November 2011 - Geschrieben von Martin - Ein Kommentar

Aus Excel kann man ja schöne CSV Dateien exportieren, die man bequem weiterverwenden kann. Wie zum Beispiel mittels phpMyAdmin in eine MySQL Datenbank importieren.

Soweit klappt das auch ganz gut, wenn da nur die fiesen Umlaute nicht wären. Nach dem Import wird ein String entweder am Umlaut abgeschnitten oder selbiger fällt heraus. Um dies zu umgehen muss man in Excel das Sheet als UTF-8 Enkodiert exportieren. Doch importiert man es nun auch als UTF-8 kodiertes CSV mit phpMyAdmin hat man das selbe Fehlverhalten wie vorher.

Stellt man nun beim Import die Kodierung auf „latin2“ (auch bekannt als ISO 8859-2) um, sind die Umlaute da. Klingt komisch, ist aber so.

23. November 2011

Weniger ist manchmal mehr, oder wenn error_reporting nicht greift

23. November 2011 - Geschrieben von Martin - Keine Kommentare

error_reporting('E_ALL');

Klar, hiermit wird eigentlich dem PHP Interpreter gesagt alle auftauchende Fehler, Notizen, etc. anzuzeigen. Doch komischerweise bewirkt das bei manchen Hostern, das bei einem Fehler die Ausführung des Script’s „abstirbt“ und nur eine weiße Seite ausgegeben wird.

Haue ich nun diese Funktion raus, gibt es keine Probleme mehr und dank

ini_set('display_errors', 1);

sehe ich die Fehler dennoch.

13. November 2011

Hobby Browsergame Entwicklung – noch sinnvoll?

13. November 2011 - Geschrieben von Martin - 7 Kommentare

Wie die meisten hier sicher wissen entwickle ich mit Elan Hobbymäßig Browsergames und bin auch ziemlich aktiv in der Szene. Zumindest war ich das bisher immer. In letzter Zeit hingegen frage ich mich immer öfter ob es das überhaupt „bringt“. Ich meine es gibt so viele kommerzielle Browsergame Firmen – gut, ich kenne zwei an der Zahl – die ein ganzes Großraumbüro voller Entwickler haben, die Tag ein, Tag aus nichts anderes machen als Browsergames zu programmieren, Designer die Bilder einer Qualität machen die mich selbst mit den Ohren schnackeln lässt.

Die Browsergame Zielgruppe von heute (meiner Erfahrung nach Kinder zwischen 10 und 16) fahren voll auf so was ab. Spielinhalt der so primitiv wie nur irgendwie möglich sein kann, bombasitische realitätsfremde Bilder und Integration zu Fratzenbuch und Co mit an Bord.

Bei uns Hobby Entwicklern sieht es ganz anders aus. Wir Schustern an unseren Spielen ein paar Stunden die Woche, malen Bilder mit den selben Händen aus denen auch vorher der Code entsprang und wir betreiben Linux Server die wir uns gerade so von unserem Einkommen leisten können.

Doch wir stampfen Spiele aus dem Boden, die Spaß machen – vielleicht sind sie nicht so schön anzusehen, tut uns leid, wir sind nun mal keine Grafiker doch wir haben eine Idee, eine Vision, ein Ziel. Und das lautet nicht so viel Kohle mit den Nutzern wie nur irgendwie möglich zu machen, sondern ein Spiel an den Mann zu bringen das sich lohnt zu Spielen.

Aus diesem Grund, JA es lohnt sich Hobbymäßig Browsergames zu entwickeln. Einerseits hat die Welt dann wieder Spiele die sich lohnen zu spielen, andererseits lernt man dabei sehr viel, da dieses „Geschäft“ sehr Facettenreich ist.

9. November 2011

Joomla eigenes Basis Template – Teil 2

9. November 2011 - Geschrieben von Martin - 2 Kommentare

Im letzten Artikel habe ich die Entwicklung eines Basis Templates für Joomla begonnen, welches als Entwicklungsgrundlage für eigene Templates ganz dienlich ist.

Die tempalteDetails.xml
Wie ich bereits angesprochen habe ist die „templateDetails.xml“ zu vergleichen mit einer „manifest.xml“. Um es kurz zu machen Zeige ich euch einfach mal die fertige „templateDetails.xml“ die ihr nach belieben anpassen könnt.

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE install PUBLIC "-//Joomla! 1.5//DTD template 1.0//EN" "http://www.joomla.org/xml/dtd/1.5/template-install.dtd">
<install version="1.5" type="template">
	<name>basis_template</name>
	<creationDate>2011-11-09</creationDate>
	<author>Dein Name</author>
	<authorEmail>deine@email.tld</authorEmail>
	<authorUrl>http://deinedomain.tld</authorUrl>
	<copyright>Dein Name 2011</copyright>
	<license>Deine Lizenz</license>
	<version>1.0.0</version>
	<description>Basis Template für eigene Entwicklungen</description>
	<files>
		<filename>index.php</filename>
		<filename>templateDetails.xml</filename>
		<folder>images</folder>
		<folder>css</folder>
	</files>
	<positions>
		<position>sidebar</position>
		<position>footer</position>
	</positions>
</install>

Ich denke die meisten Knoten sind selbstverständlich, lediglich „files“ und „positions“ würde ich noch ein mal gern explizit ansprechen. Ach genau, „name“ muss exakt den Ordner Name beinhalten, also heißt euer Template Ordner „basis_template“ so muss auch „name“ genau so heißen.

<files>
	<filename>index.php</filename>
	<filename>templateDetails.xml</filename>
	<folder>images</folder>
	<folder>css</folder>
</files>

„filename“ springt direkt eine eine Datei an. „folder“ hingegen schnappt sich den ganzen Ordner mit Inhalt. Oft sieht man wie „verzweifelte“ Entwickler alle CSS und Bild Dateien von Hand mit „filename“ aufführen, aber warum kompliziert wenn’s auch einfach geht ;-)

<positions>
	<position>sidebar</position>
	<position>footer</position>
</positions>

Joomla holt sich von hier die verfügbaren Positionen, d.h. es werden in den Klappboxen nur die hier definierten Positionen angezeigt, das Template selbst wird nicht nach ihnen abgegrast!

Die templte.css – Struktur für unser Template
Bisher würde das Template nach gar nichts aussehen:


Nicht mal eine Struktur hat es, deshalb machen wir das nun mit CSS:

body {
	margin : 0;
	padding: 0;
}
 
#wrapper {
	width: 900px;
	margin: 0 auto;
}
 
#wrapper #header {
	width: 100%;
	height: 80px;
	background-color: #e5e5e5;
}
 
#wrapper #sidebar {
	float: right;
	width: 20%;
}
 
#wrapper #content {
	float: right;
	width: 80%;
}
 
#wrapper #footer {
	clear: both;
	width: 100%;
}


Das nun in die „template.css“ kopieren, abtippen oder wie es sein sollte. Selbst schreiben ;-) Here we go:

Okay nicht so der Brüller aber für ein Basis Template ausreichend, schließlich ist das hier kein Design Tutorial ;-)

Für Joomla publizieren
Packt einfach das Template Verzeichnis „basis_template“ als .zip. Das ist alles, nun könnt ihr das Tempalte in jeder Beliebigen Joomla Installation installieren.
Damit es nicht so leer wie bei mir aussieht, müsst ihr natürlich noch Module an die entsprechenden Positionen packen. Also z.B. eine Navigation an die „Sidebar“ Position, einen Footer Text an die Position „footer“, etc.

Und jetzt?
Jetzt könnt ihr das Template nach belieben anpassen, nur wem das jetzige noch zu unflexibel ist, sprich wer die Joomla Ausgabestruktur ändern möchte, der sollte den nächsten Teil lesen, in dem ich zeige wie man eigene Views erstellt und damit die Standard Views überschreibt.

9. November 2011

Joomla eigenes Basis Template – Teil 1

9. November 2011 - Geschrieben von Martin - Ein Kommentar

In der folgenden Serie werde ich euch anhand eines Praxisbeispiels zeigen wie man sich sein eigenes „Basis“ Template für Joomla schmiedet. Dieses Template kann dann später als Grundlage für eigene Entwicklungen verwendet werden. Meine verwendete Joomla Version ist übrigens 1.5, in wie fern man das auf andere Versionen abwälzen kann, weiß ich nicht.

Die Joomla Template Struktur
Die Templates werden bei Joomla – wie sollte es auch anders sein – im Unterordner „templates“ des root Verzeichnisses abgelegt. Jedes Template bekommt seinen eigenen Ordner in den später alle Stylesheets, JavaScript Dateien, Bilder und natürlich die Views kommen. Als Ausgangspunkt legen wir uns folgende Ordner an:

- templates
-- basis_template
--- css
--- images

Natürlich nützen uns die Ordner allein noch nichts, deshalb kommen hierzu noch folgende Dateien:

- templates
-- basis_template
--- css
---- template.css
--- images
-- index.php
-- templateDetails.xml

In den CSS Ordner kommt das Stylesheet namens „template.css“, in das Root Verzeichnis packen wir die „index.php“, welche später das HTML Gerüst beinhält und die „templateDetails.xml“, die Joomla benötigt um mit dem Template arbeiten zu können. Der images Ordner bleibt erst mal leer.

Das HTML Grundgerüst
Ich gehe jetzt einfach mal davon aus, das meine Leser ein Grundverständnis von HTML mitbringen, wenn nicht, solltet ihr euch erst mal in dessen Thematik einarbeiten.

Wir füllen nun die „index.php“ mit folgendem Inhalt:

<?php defined( '_JEXEC' ) or die( 'Restricted access' );?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $this->language; ?>" lang="<?php echo $this->language; ?>" >
    <head>
        <jdoc:include type="head" />
        <link rel="stylesheet" href="<?php echo $this->baseurl ?>/templates/system/css/system.css" type="text/css" />
        <link rel="stylesheet" href="<?php echo $this->baseurl ?>/templates/system/css/general.css" type="text/css" />
        <link rel="stylesheet" href="<?php echo $this->baseurl ?>/templates/<?php echo $this->template ?>/css/template.css" type="text/css" />
    </head>
    <body>
        <div id="wrapper">
            <div id="header">
                <h1><?php $conf =& JFactory::getConfig(); echo $conf->getValue('config.sitename'); ?></h1>
            </div>
            <div id="sidebar">
                <jdoc:include type="modules" name="sidebar" />
            </div>
            <div id="content">
                <jdoc:include type="component" />
            </div>
            <div id="footer">
                <jdoc:include type="modules" name="footer" />
            </div>
        </div>
    </body>
</html>

Ist euch das zu schnell gegangen? Gut, dann noch mal langsam.

<?php defined( '_JEXEC' ) or die( 'Restricted access' );?>

Dieses PHP Konstrukt verbietet den direkten Zugriff auf das „pure“ Template, indem es die Ausführung abbricht, wenn die Konstante „_JSEXEC“ nicht definiert ist.

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $this->language; ?>" lang="<?php echo $this->language; ?>" >

Hier definieren wir den HTML Tag und geben ihm die Systemsprache mit, bzw. die Sprache, die der User im Joomla gerade eingestellt hat.

<jdoc:include type="head" />

Dieser Pseudo HTML Tag der Joomla Template Engine bindet alle Geschichten wie title Tag, JS Files, etc. automatisch ein.

<link rel="stylesheet" href="<?php echo $this->baseurl ?>/templates/system/css/system.css" type="text/css" />

Hier binden wir das System Stylesheet ein. Besonders ist der PHP Teil „$this->baseurl“, hier wird die URL zum aktuellen Joomla ausgegeben, gut zu wissen wenn man später selbst noch etwas einbinden möchte.

<link rel="stylesheet" href="<?php echo $this->baseurl ?>/templates/<?php echo $this->template ?>/css/template.css" type="text/css" />

Hier wird das Herzstück unseres Templates geladen. Das Stylesheet. Eigentlich wie oben, nur wird hier noch der Name des Templates verwendet um den richtigen Ordner zu finden „echo $this->template“

<jdoc:include type="modules" name="header" />

Der altbekannte Pseudo Tag mit anderen Attributen. Hier Laden wir den typ modules mit dem Name header. Das heißt, wir laden alle Module die im System an der Position „header“ Registriert sind.

<jdoc:include type="component" />

Hier rufen wir die Inhaltskomponente der aktuellen Seite auf. Also z.B. „com_content“, „com_contacts“, etc..

Was wir bisher haben
Jetzt haben wir ein eigentlich bereits Funktionsfähiges Template. Doch es fehlt noch die „tempalteDetails.xml“, die mit einer manifest.xml zu vergleichen ist. Hier werden alle verwendeten Dateien aufgeführt, im Template verwendete Positionen registriert, Authorangaben gespeichert und noch ein paar Schmankerl mehr. Doch das machen wir im nächsten Teil, der im Anschluss erscheint.

Joomla eigenes Basis Template – Teil 2

24. Oktober 2011

Limonade – mein Lieblings PHP Framework

24. Oktober 2011 - Geschrieben von Martin - 2 Kommentare

Habe ich euch schon von Limonade erzählt? Nein das ist nicht mein neuer Mediaplayer, sondern ein cooles PHP Framework. Es ist simpel, leichtgewichtig, flexibel und na klar kostenlos.

<?php
require('libs/limonade.php');
dispatch('/', function() {
    echo 'Hallo Welt!';
});
run();

nicht mehr und nicht weniger.

Also falls ihr für ein kleines, oder auch ein großes Projekt noch ein Framework benötigt, das im Gegensatz zu Zend, Codeigniter und Co schnell (und natürlich leicht) zu installieren und handzuhaben ist, ist Limonade auf jeden Fall einen Blick wert.

Warum es so klein ist kann ich natürlich auch beantworten. Es wurden einfach Dinge weggelassen, bzw. eingespart die nicht jeder benötigt. Aber z.B. ein Login ist doch kein Ding. Mit Limonade programmiert man das einfach ruck zuck selbst und hat dann genau das was man will – ohne groß an bestehendem rumbasteln zu müssen.

13. Oktober 2011

Firefox PDF Upload falscher Mime Type

13. Oktober 2011 - Geschrieben von Martin - 3 Kommentare

Heute hatten wir das Problem, das beim Kunden keine PDFs auf den Server hochgeladen werden konnten. Es hat sich herausgestellt, das ein aktueller Firefox verwendet wurde, aber auf dem Windows PC kein Adobe Reader installiert war. Das hatte zu folge, das der Firefox nichts mit der .pdf Datei anzufangen wusste und sendete einfach mal den Mime Type

application/octet-stream

anstatt

application/pdf

Es ist zwar nachvollziehbar, das der Firefox sagt er kennt diese Datei nicht, aber in allen anderen Browsern hat es funktioniert – einschließlich dem Internet Explorer 6.

Der Upload hat dann übrigens nicht funktioniert, da mittels PHP der Mime Type der Datei erfragt wird und alles was nicht auf „application/pdf“ passt wird weggeworfen.

UPDATE!
Ich habe soeben festgestellt, das Firefox desweiteren folgende Mime Types sendet:

application/download

application/x-download

Kommt also immer auf die Client Konfiguration an…

8. Oktober 2011

What If Car Drivers Were Hired Like Programmers?

8. Oktober 2011 - Geschrieben von Martin - Keine Kommentare

Job title: Car driver

Job requirements: Professional skills in driving normal- and heavy-freight cars, buses and trucks, trolley buses, trams, subways, tractors, shovel diggers, contemporary light and heavy tanks currently in use by NATO countries.

Skills in rally and extreme driving are obligatory!
Formula-1 driving experience is a plus.

Knowledge and experience in repairing of piston and rotor/Wankel engines, automatic and manual transmissions, ignition systems, board computer, ABS, ABD, GPS and car-audio systems by world-known manufacturers – obligatory!

Experience with car-painting and tinsmith tasks is a plus.

The applicants must have certificates by BMW, General Motors and Bosch, but not older than two years.

Compensation: $15-$20/hour, depends on the interview result.

Education requirements: Bachelor’s Degree of Engineering.

Quelle