Blog: Latest Entries (15):


HTML 5 vs. JavaFX: Ruhe in Frieden JavaFX?

Vor ein paar Monaten hatte ich einen Post über JavaFX und die Konkurrenz zu HTML5 geschrieben. Und dabei das Fazit gezogen, dass JavaFX gut ist um vorhandene Swing-Anwendungen zu erweitern und in Zukunft zu modernisieren, aber für Neuentwicklungen ich eher eine andere Technologie nutzen würde.
Jetzt gab es bei JAXenter den Artikel Ruhe in Frieden JavaFX, wo ähnliches Thematisiert wird.

Die dort angesprochenen Punkte kann ich meiner Erfahrung nach voll zustimmen. Die technischen Unzulänglichkeiten und Probleme sind nicht mal das eigentliche Problem, denn die Unterstützung von Oracle scheint wirklich kaum vorhanden zu sein. Mobile-Unterstützung gibt es nur dank der RoboVM. Der Scene Builder ist relativ instabil und durch händische Anpassungen schnell aus dem Tritt zu bringen. Updates und neue Versionen, die das Problem beheben, waren bis Sommer jedenfalls nicht verfügbar gewesen.

Die Programme von Oracle setzen auch jetzt meistens noch auf Swing und nicht auf JavaFX. Der große Wechsel wurde zwar an vielen Stellen beschworen, aber war nie sichtbar. Swing hat auch zum Großteil sehr ausgereifte Komponenten und die Anwendungen sind über viele Jahre gewachsen... da ist ein schneller Wechsel nicht möglich und eine einfache Migration ist auch nicht machbar. Anwendungen komplett auf JavaFX umzustellen ist viel Arbeit. Ich habe gesehen, dass man gut SWT und JavaFX in einer Anwendung verwenden kann, aber wenn man es nüchtern betrachtet, wird auch nur eine JavaFX GUI irgendwie in SWT rein gezeichnet. Eine echte Integration gibt es nicht. 2 Welten die in einer Anwendung existieren.
Es gibt also weniger Swing, aber nicht mehr JavaFX. Es gibt ein paar JavaFX Verfechter, die es aber wohl auch nur gibt, weil Swing ja irgendwie abgekündigt wurde. Ansonsten wären alle wohl einfach bei Swing geblieben. Ich habe auch seit meinen Anfängen in Java ein paar Swing-Programme geschrieben und empfand den ersten Kontakt mit JavaFX als sehr ernüchternd. Netbeans + Swing funktioniert einfach sehr gut und auch das skalieren der GUI-Element funktioniert relativ gut. JavaFX kann es zwar auch, aber die Bedienung ist hier weniger selbsterklärend und das CSS ist weit von dem entfernt, was man sich erhofft hatte und aus dem Web-Bereich gewohnt ist.

Das mit der Version 2 von JavaFX kein großer Anstieg der Nutzerzahlen kam, liegt meiner Meinung auch daran, dass JavaFX einen schon sehr schlechten Ruf hatte und Jahre auf der Kippe stand.
Als dann eine brauchbare Version kam, hatten die meistens sich schon anderweitig umgesehen und etwas mit Zukunft und größerer Unterstützung gewählt. Das Problem ist damit eben, dass JavaFX dadurch nicht mehr die Unterstützung bekommt, um weiter wachsen und sich entwickeln zu können. So wird alles auf einem minimal Level betrieben. Wenige Nutzer.. wenige Entwickler.

Betrachtet man dagegen JSF was mit der Version auch nicht das Gelbe vom Ei war, aber immer offizielle Unterstützung bekam (auch von Apache) und somit man auch Vertrauen in die Zukunft hatte, das sich gerade mit den neusten Versionen auch als gerecht fertig erwiesen hat. Vielleicht würde auch JavaFX mit breiterer Unterstützung sich genau so gut entwickeln können.

Ich kann mich dem Fazit voll und ganz anschließen: Sollte Oracle nicht plötzlich viel in JavaFX investieren, sollte man lieber sich etwas mit mehr Unterstützung suchen und auf eine ungewisse Zukunft vertrauen.

Die Angst dass der Java EE Markt dadurch gefährdet wird. Node.js ist vielleicht eine größere Gefahr als PHP, aber die letzten Jahre basierte der Wachstum und die Stabilität von Java EE nicht auf Swing oder dem Desktop-Markt. Microservices, Android-Apps, Frameworks für Reactive-Entwicklung oder gleichwertige Lösungen als Alternative zu Node.js. REST-Services, Portale und kleinere Container. Auch die WebSocket und Push-Services im Tomcat. DevOps Lösungen. Alles tolle Entwicklungen im Java-Bereich.. es gab viel Bewegung und Fortschritte, aber keiner davon hing groß mit der Entwicklung von Desktop-Clients zusammen. Ich glaube der Rückgang bei den Desktop-Clients ist normal und Dank Java Web-Frameworks, HTML5 und AngularJS oder ähnlichen Frameworks, muss sich die JEE-Welt keine Sorgen machen.

Aber ich fühle mich gerade sehr in meinen Ansichten und Äußerungen von vor einem halben Jahr sehr bestätigt :-)

Spontaner Weihnachts- Nikolausgeschenk-Tipp: SSD

Ist leider nur ein Tagesangebot bei Amazon. 25.11.2015

Aber auch ein gutes Weihnachts- oder Nikolausgeschenk. Es sollte auch gut in einen Schuh passen.. bei 3,5 Zoll Laufwerken kann es ja schon schwieriger werden.

Es ist ein ideales Geschenk für ITler mit älteren Notebooks oder PCs, Fallout 4 Spielern, die sich über die hohen Ladezeiten aufregen (ich hab es gesehen, wärend meine Frau es spielte.. die Ladezeiten sind shcon wirklich alles andere als optimiert).
Eclipse sollte beim Bauen des Workspaces auch sehr davon profitieren können.

Eine 120GB SSD. Kein Highend und nicht so viel Speicher (4-5 Spiele oder das Betriebssystem sollten aber ohne Probleme passen).. aber sehr günstig.

bbcode-image
SanDisk SSD PLUS 120GB Sata III

520MB/s beim Lesen ist schon eine brauchbare Leistung, wir sind ja auch mit Festplatten ausgewachsen die 20MB groß waren. Man kann sich ja mal ausrechnen wie viele dieser Festplatten da pro Sekunde ausgelesen werden würden.

Hannes installiert sich seine Entwickler-Werkzeuge:

Gehen wir mal davon aus, ich hätte doch mal das Geld für einen neuen PC und würde alles neu installieren müssen.
Was wäre das alles? Bei vielen Programmen nehme ich die portable-Version wenn vorhanden, weil man dann einfach das
Programm inkl. alle Einstellungen und Daten kopieren kann und sich nicht über die Migration der Daten Gedanken machen braucht.

* Notepad++ (Portable): Seit man einfach den Editor schließen kann und er speichert auch nicht gespeicherte Texte automatisch mit, ist er ideal für Notizen, kleine Text und schnelle Bearbeitungen einzelner Dateien. EmEditor kann es nicht, dafür paar andere tolle Dinge, wie Zeilen mit Such-Treffen in ein neues Dokument extrahieren, aber gerade dass ich EmEditor nicht einfach schließen kann ohne zu speichern, empfinde ich als großen Nachteil.

* WinSCP (Portable): Der eingebaute Editor ist kein Highlight, aber besser als wenn per Default immer der von Windows verwendet werden würde. Das Programm läuft auch stabil und hat mich bis jetzt nie im Stich gelassen. Bitvise finde ist als SFTP oder SSH Client irgendwie schlechter zu bedienen und es ist eben nicht Opensource.

* Eclipse + PDT: Bei Eclipse reicht es auch die ZIP-Datei zu entpacken. Über das Software-Menü dann einfach PDT nach installieren und vielleicht nochmal die Zuordnung der *.php-Dateien zum entsprechenden Editor bearbeiten.Wie man Unterstützung für Getter und
Setter installiert findet man hier: PDT-Extensions. PHPStorm kann auch einiges. Ich finde es aber auch unübersichtlich. RemoteHost-View.. ist unter Deployment zu finden. An sich ja nicht verkehrt, wenn man das weiß. Bei Eclipse einfach bei den Views gucken. Da kann man auch suchen und findet alles innerhalb von Sekunden. Vielleicht liegt es auch daran dass ich Jahre mit Eclipse verbracht habe und es lieben und auch oft
genug hassen gelernt habe, aber bei PHP ist es mein Favorit und es ist eben Opensource.

* Oracle SQLDeveloper: Wenn man mal mit Oracle zu tun hat oder keine Lust auf phpMyAdmin hat, ist es immer noch meine Lieblingssoftware für Datenbank-Entwicklung. phpMyAdmin ist eben sehr träge (für eine Webanwendung aber noch wirklich schnell.. nur im Vergleich). HeidiSQL ist einfach nicht so professionell. Man merkt dass Oracle sich mit Datenbanken auskennt.

* Source Tree für GIT-Repositories. Die GIT-Integration in Eclipse war jedenfalls nie wirklich toll, wie ich fand. Der Konsolen-Client funktionierte,war aber für Nicht-Programmierer wirklich zu umständlich. Tortoise.. ja.. hat bei mir noch aus Delphi+SVN Zeiten einen schlechten Nachgeschmack hinterlassen. Auch wenn deren SVN Client manchmal durch mergen zerstörte Projekte wieder retten musste zusammen mit Notepad++.

* XAMPP oder Bitnami... Benutze ich beides und am Ende mag ich XAMPP minimal lieber. Deren Kontroll-GUI ist etwas aufgeräumter und ich kann auch hier einfaches von einem PC auf den anderen kopieren. Aber funktionieren tun beide gut.

* ein aktuelles JDK: Weil viele der oben genannten Programme Java-Programme sind und ich unter Umständen auch mal ein kleines Java-Programm schreiben oder pflegen muss. Eine aktuelle JDK8-Version installieren und die reicht erst einmal lange ohne Updates. Sollte ich nicht doch plötzlich wieder voll auf Java setzen. Dann aber nur mit Tomcat und vielleicht der aktuellsten JSF-Version oder meinen REST-Framework und das Frontend entsteht komplett in AngularJS (habe ich so schon benutzt und funktioniert extrem gut und ist PHP mit dem Application-Scope und echten Singletons teilweise
weit voraus bei der Performance.. mal PHP7 abwarten).

Und dann eben noch der ganze Rest wie Firefox Developer Edition (64-Bit), Thunderbird, Chrome, etc. Was man auch zum Testen und dem Alltag so
braucht.

Weichnachtsgeschenke für ITler - Bücher

Es nähert sich die besinnliche Weihnachtszeit. Kerzenlicht, Dominosteine und .. nein kleiner Scherz.. jetzt beginnt der Stress. Was soll man schenken. Gerade bei IT und Nerd Personen ist so etwas nicht ganz einfach. IT-Leute lieben IT Themen, aber zur Weihnachtszeit sollten sie auch mal abschalten können. Projektplanung kommt immer gut.. aber niemand sollte Weihnachten an so etwas denken müssen.

Was kann man also einen ITler schenken.. z.B. ein Buch aber welches Buch? Neben Klassikern wie Per Anhalter durch die Galaxis und Dirk Gently, die meistens alle schon haben, habe ich hier ein paar Bücher zusammen gestellt, die mir sehr gut gefielen und wirklich gute Unterhaltung bieten.

Schattenjagd - Hohlbein
Cyberspace, Cyber-Helme, Warcraft, 486er und schlechte Wortspiele. So ein Buch kommt dabei raus wenn Hohlbein zu viel Warcraft 2 spielt aber keine Lizenz hat dazu ein Buch zuschreiben. Technisch solide aber nicht tiefer gehend und eine Warcraft Rip-Off hoch n-1. Ich hab es in 2 Tagen durch gelesen und es ist immer noch gute Unterhaltung. In den heutigen Tagen mit einen zusätzlichen Extra an Retro-Feeling. Für mit neben 13 das beste Buch von Hohlbein.. also in Hohlbein-Niveau gemessen... ein B-Movie der Cyber-Punk Romane.

bbcode-image

Kuckucksei - Clifford Stoll
Wer die Inhaltsangabe liest, wird sich denken: "Nicht noch so ein pseudo Hacker-Krimi". Wer die ersten 3 Seiten liest, erfährt erst einmal etwas über die Struktur des Rechenzentrums, in desen Kontext dieser Roman spielt. Unix-Kisten, VAXe und VMS. Da merkt manschon, dass jemand das geschrieben hat, der was von der Thematisk versteht. Das Interessante hier ist, dass die Hackerseite in Deutschland angesiedelt ist. Spannend und mit dem UUCP-Trick kam ich mal in eine alte Bull DPX/2 des Roten-Kreuzes, die ich bei Ebay ersteigert hatte.
Aus deutscher Sicht wurde die Geschichte in 23 verarbeitet. Der Film ist Rotz.. das Buch über die Recherchen zum Film dafür sehr gut.

Jeder der sich für Hacker und IT-Geschichte interessiert, sollte dies lesen.

bbcode-image

iWoz - Wozniak
Muss man dazu viel sagen? Woz ist ein Genie.. inspiriert durch seinen Vater der an Dingen gearbeitet hat, über die er nicht sprechen durfte. Die Hacker-Szene der 70er Jahre im Silicon-Valley und viel Humor. Wer von Steve Jobs genervt ist, sollte sich dann lieber dieses Buch antun. Technischer, weniger Gelaber und sehr unterhaltsam. Wer mal die Doku
Triumph of the Nerds gesehen hat, sollte es sowie so lesen. (Achtung die DVD von Triumph of the Nerds ist Region 1.. also erstmal als MKV-Rippen und als MP4 dann auf dem TV gucken.)

bbcode-image

Accidental Empires - Robert X. Cringely
Das Buch auf dem Triumph of the Nerds basiert. Alt aber gut. Mit der Doku-Version von 3-Sat bin ich aufgewachsen und Buch vertieft alles noch mal sehr. Aber dies ist wirklich was für Hardcore ITler. Aber man sollte doch mit der DVD anfangen. (momentan kostet die DVD 270 Euro.. warten.. ist öfters auch für 16 Euro drin... aber .. ein Klassiker. "Allen is richer than god and Gates is richer than Allen.")

bbcode-image

Wenn jemand etwas hier von interessant findet und jemanden schenken möchte, wäre ich natürlich sehr glücklich, wenn die Link aus diesem Beitrag benutzt werden würden.

Eigene Validierung für Inputs

Ein kleines Beispiel wie man sich eine eigene Validierung für Inputs in JavaScript basteln kann. Man kann es natürlich beliebig komplex machen und es sollte auch super mit Ajax funktionieren. Nur mit nicht required Inputs habe ich so mein Problem, da ich die gerne in neutraler Farbgebung hätte, wenn nichts eingegeben ist. So wären sie momentan einfach "valid" und damit grün. Falls dort jemand eine Lösung kennt, wäre es echt toll.


<html>
<head>
<style type="text/css">
input:valid{
border-color:#00FF00;
}

input:invalid {
box-shadow: none;
border-color:#FF0000;
}
</style>
</head>
<body>
<label>Test (should be 'allo')</label> <input id="blubb" type="text" required/>
<script type="text/javascript">
var func=function(){
var el=document.getElementById("blubb");
if(el.value=="allo"){
el.setCustomValidity("");
}
else{
el.setCustomValidity("value is not allowed");
}
}
document.getElementById("blubb").onchange=func;
</script>
</body>
</html>

Hilfe GnuPG

Hier eine kleine Hilfe wie man GnuGP mit PHP verwenden kann und wie man einen vorhandenen Key importiert.

http://46dogs.blogspot.de/2007/11/setting-up-gnupg-gpg-for-use-with-php.html
https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/3/html/Step_by_Step_Guide/s1-gnupg-import.html
https://www.gnupg.org/gph/en/manual/c14.html

Die Umgebungsvariable brauchte ich nicht extra setzen, wenn ich das PHP-Script über CLI ausführte.

Also installieren (das Verzeichnis /home/benutzer/.gnupg muss auf 0700 stehen!) und dann:


gpg --import key.asc
gpg --list-keys
gpg --fingerprint


Dieser Fingerprint ist das was man in der Encrypt-Methode angeben muss.


$gpg = new gnupg();
$gpg->seterrormode(GNUPG_ERROR_WARNING); //should be setted!
$gpg->addencryptkey($fingerprint);
$result = $gpg->encrypt($toEncryptContent);


einen neuen Key anlegen geht mit:

gpg --gen-key

PHP Projekte bauen mit ANT

Privat arbeite ich ja mit Eclipse und PDT. An sich gefällt mir das auch sehr viel besser als PHPStorm. Genauso wie ich auch immer WinSCP Bitvise vorziehen würde.

Aber zurück zum Thema. Wenn man schon mit einer eigentlich auf Java ausgelegten IDE arbeitet, kommt man beim Build-System als erstes auf Apache ANT. Ich mag ANT und es funktioniert echt super.
Da ich demnächst etwas über Datenbanken, Mapping und Reflections in meinem Blog verfassen will und diesmal auch direkt komplett lauffähigen Code mit liefern möchte, musste ich alles in eine Zip-Datei packen. Per Hand ist es doof, aber mit 6 Zeilen XML kann man mit ANT einfach eine Zip-Datei mit Datum im Dateinamen erstellen.

build.xml

<project name="build aoop" default="copy">
<!-- hier ist normal der Code zum Bauen von aoop.. ist hier aber uninteressant -->
<target name="buildPDBC">
<tstamp>
<format property="tstamped-file-name" pattern="yyyy_MM_dd" locale="de,DE"/>
</tstamp>
<zip destfile="../pdbc_${tstamped-file-name}.zip" basedir="system/PDBC/"/>
</target>
</project>


bbcode-image

bbcode-image

bbcode-image


PS: PDBC steht für PHP DataBase Connectivity. Began vor 10 Jahren in der Berufsschule und der Name ist wie man merkt sehr an JDBC angelehnt.

Kleine SEO Checkliste

Ein paar Dinge auf die Ich geachtet habe und am Ende wohl auch etwas gebracht haben. Jedensfalls gehen Klicks und Impressions seit den Änderungen weiter nach oben. Jetzt nicht so dass man dieSeiten als erfolgreich bezeichnen könnte.
Aber die Seiten werden gefunden!

* ist der Viewport über ein <meta>-Tag gesetzt? (Wegen Mobile-frundlichern Setien und Google)
* Hat der Title alle 4-5 wichtigen Keywords und ist auf für Menschen noch gut lesbar? (kein zu langer Name am Anfang!)
* enthalten Links als Text und Title Keywords?
* Wird Mapping über Rewrites verwendet um nciht immer auf index.php oder zu verlinken? (in der URL Keywords verwenden)
* werden <nav>-Tags verwendet?
* werden <article>,<header>,<section> Tags verwendet? (Gerade bei Blogs und Newsseiten)
* Ist der meta-Description Text für Besucher ansprechend? (Der Text ist eher für Menschen als für die Suchmaschinen-Bots)
* Wurde eine Sitemap bei Google eingereicht?
* sind die Ladezeiten der Seite ok? (nicht so wichtig, aber ist für die Besucher schöner. Zur Not.. Profiling und Code-Analyse)

Projekt - Online Adventskalender

Bald kommt wieder die Weihnachtszeit. Manch einer könnte auf die Idee kommen seine Familie, Freunde, Kunden, Follower, Fans oder einfach die Welt mit einem Bilder-Adventskalender im Internet zu beglücken. Egal ob es nun Bilder von einem selbst, von den eigenen Kindern, Katzen oder Hunden sein sollen.

Dafür habe ich ein kleines Projekt gestartet, dass es jedem ermöglicht einen solchen Online-Adventskalender zu erstellen und zu teilen.

bbcode-image

Online Adventskalender

Neben den Bildern (die man auch in einer Großansicht betrachten kann), kann man jedem Bild einen zusätzlichen Text hinzufügen und auch dem gesamten Kalender neben einem eigenen Titel auch einen Text geben in dem man die Besucher seines Kalenders direkt ansprechen kann.

Wer seine Bilder nicht mit der gesamten Welt teilen möchte, kann den Adventskalender auch mit einem Passwort versehen, so das nur Personen Zugriff erhalten, die die Bilder sehen sollen dürfen.

Jeder Adventskalender ist kostenlos, hat 24 Türchen, kann einen Text und ein zusätzliches Hintergrundbild enthalten und lässt sich jeder Zeit anpassen und ändern. Auch Bilder und Texte schon offener Türchen lassen sich weiterhin bearbeiten. Dadurch kann man den Kalender auch während er schon läuft weiter aufbauen und man muss nicht gleich am Anfang seine 24 Bilder heraus gesucht haben.

Über Videos und Texte die nur am passenden Tag zusehen sind, denke ich momentan noch nach, wobei Video oder animierte Gifs ein komplexeres Thema sind. Wenn man jetzt kommerziell denken würde, wären diese Tages-Texte ideal für Gutschein-Codes und so etwas.

Jeder der es mal ausprobieren möchte ist herzlich dazu eingeladen und ich würde es toll finden, wenn dann doch ein paar Adventskalender wirklich ihrer Bestimmung nach andere Menschen beglücken können. Wenn jemand es testet und auch Fehler stößt oder Verbesserungsvorschläge hat.. immer her damit.

Eine bebilderte Anleitung wie für MP4toGif.com werde ich in den nächsten Tagen zusammen basteln.

Lernen wärend der Arbeitszeit

Es ist zwar schon etwas her, dass ich diesen Artikel gelesen habe, aber irgendwie lies mir das Thema bis jetzt keine Ruhe. Am Anfang dachte ich mir: "Klar, wenn eine Firma einen verbietet etwas neues zu lernen ist sie eine schlechte Firma." Denn jeder Arbeitgeber will, dass man viel kann und immer auf dem neusten Stand ist, deswegen sollte er einen auch dabei unterstützen dieses Ziel zu erreichen.
Ich habe in einer Firma gearbeitet, da war so etwas kein Problem. Es konnte sein dass plötzlich das Thema auf eine neue Technologie oder eine Alternative zum momentan benutzen kam und der Teamleiter oder Chef einem Anwesenden den Auftrag erteilte sich mal damit zu beschäftigen. Das ist super und ermöglicht einen auch mal einen Blick über den Tellerrand. Ohne so etwas hätte ich mir nie JBoss Seam angesehen oder verschiedene Application-Server. Meistens ist man bei dem geblieben was man hatte. Aber wenn man der Meinung war man hätte etwas, was einen voran bringt oder viel Zeitsparen könnte oder
einfach ein Hype darum gerade zu merken war und man wissen wollte, ob es wirklich so toll sei.... alles kein Problem sich mal 1-2 Stunden dafür Zeit zu nehmen.

Wenn man interne Software entwickelt oder diese verkauft ist das auch möglich. Wenn man für Kunden entwickelt ist oft die Lösung das zunehmen was man hat und kennt. Die Zeit in der man nicht für Kunden arbeitet bringt aber auch kein Geld, deswegen ist diese Zeit möglichst gering zu halten. In den seltensten Fällen wird ein Kunde einem auch die Zeit für die Forschung bezahlen wollen.

Trotzdem würde ich immer dafür sein, jedem Mitarbeiter pro Woche 1-3 Stunden Zeit einzuräumen, wenn nicht extremer Zeitdruck vorliegt, in denen er sich weiterbilden kann. Natürlich sollte dabei im Auge behalten werden, was der Firma auch was bringt. Eine neue Programmiersprache? Wenn man mit Java entwickelt und jemand möchte sich Scala ansehen.. klar. Jemand will Rust oder Swift angucken.. da muss man schon gucken, ob man wirklich Vorteile drauf ziehen kann.

Es geht auch selten um konkrete Sprachen oder Frameworks, die man dann auch einsetzen wird, aber es ist immer gut neue Konzepte kennen zu lernen.

Sollte es aber so sein, dass man bei der Arbeit ein neues Framework verwenden soll und dann so etwas wie "Guck dir das mal zu Hause ausführlich an" dann ist hier klar zu sagen: Was man für die Arbeit lernen muss ist genauso Arbeit wie das Programmieren und Entwickeln selbst und muss natürlich einem genauso angerechnet werden.
Aber bis jetzt habe ich so etwas noch nie erlebt.. nur mal davon gelesen oder mir etwas angesehen, wo ich selbst großes Interesse dran hatte und dann auch gleich ein kleines Projekt hatte, wo ich auch nicht wollte, dass es etwas mit meinem Arbeitgeber zu tun hat.

Fazit:
Sollte ich mal Teamleiter oder Chef sein, würde ich jedem nicht nur diese Stunden pro Woche gönnen, sondern es fast schon verlangen, das sich der Mitarbeiter weiter bildet und lernt. Lernen hält das Gehirn fit!

mp4togif.com im Edge

Jetzt läuft auch alles im Microsoft Edge. Das Problem war dass das "canplay" Event im Edge nicht bei einem Wechel der Zeit gefeuert wird wie beim Firefox oder Chrome. "timeupdate" löst aus bevor das Bild verfügbar ist und sorgt für ein ruckeliges GIF. Die Lösung war: seeked. Damit läuft MP4toGIF.com jetzt im Edge, Chrome und Firefox.

bbcode-image


Wer auch Probleme mit den Events des Video-Elements hat kann ich diese Seite empfehlen http://www.w3.org/2010/05/video/mediaevents.html


Enums in PHP

Ich habe mal etwas rumgepsielt und versucht so etwas wie die Enums auf Java in PHP abzubilden. Es ist mir mehr oder weniger gut gelungen. Aber für einfache Status und Fehler-Fälle sollte es funktionieren.


<html>
<body>
<?php
class ErrorCodesEnum{
private static $instance=null;

public $code='';
public $name='';
public $message='';

public $error1 = null;
public $error2 = null;

private function __construct($code='',$name='',$message=''){
if($code!=''){
$this->code=$code;
$this->name=$name;
$this->message=$message;
}
else{
$this->error1=new ErrorCodesEnum('0001','#1','run into error 1');
$this->error2=new ErrorCodesEnum('0002','#2','run into error 2');
}
}

static public function instance(){
if(self::$instance==null){
self::$instance=new ErrorCodesEnum();
}
return self::$instance;
}
}

$test=ErrorCodesEnum::instance();

$var=$test->error1;
if($test->error1===$var){
echo '[var1] '.$test->error1->message.'<br>';
}
if($test->error2===$var){
echo '[var2] '.$test->error2->message.'<br>';
}

$test2=ErrorCodesEnum::instance();
if($test->error2===$test2->error2){
echo '[getInstance] '.$test->error2->message.'<br>';
}
?>
</body>
</html>

Projekte bewerten und abschalten können

Was gibt es für Gründe ein Side-Project zu haben? Spaß, Lernen, Angeben, als Referenz verwenden und vielleicht ja auch etwas Geld damit verdienen. Der letzte Punkt ist irgendwie immer mit dabei, aber man weiß selbst wie unrealistisch der doch ist. Ich gehe mal davon aus, dass 50% der angefangenden Projekt nie weiter weiter als Prototyp-Status kommen wird.
Meistens hat man dann einen Beweis, dass etwas funktioniert oder nicht funktioniert. Im besten Falle hat man bei Facebook einen Link gepostet, der sagt: "Guckt mal, so etwas ist doch in relativ kurzer Zeit zu machen.. mal gucken ob ich das zu einer echten Anwendung ausbaue". In 50% dieser Fälle wird man es nicht machen. Oft ist die Idee doch nicht so gut, oder die Zeit fehlt.
Auch ist vielleicht die Idee gut und die Zeit wäre auch da, aber es gibt so eine Anwendung schon und weiß nicht, ob man die Zeit dann doch nicht lieber für was anderes verwenden sollte.

Also werden schon 75% alles Projekte von einem sowie nie zu Ende gebracht bzw vorher aussortiert.

Aber dann bleiben die 25% übrig, die man dann wenigstens soweit bringt, dass sich jemand das angucken kann oder man versucht die erste Version einer App irgendwo einzureichen. Hier trennt sich dann der Rest. Wenn die App oder Website nicht angenommen wird, verschwindet auch diese in der Versenkung. Aber ganz so einfach klar und einfach ist es an dieser Stelle dann doch oft nicht.
Man könnte ja nochmal nachbessern oder die Präsentation ist nicht gut genug. Gerade im Bereich vom Webdevelopment mit Websites und Web-Apps muss man sich gleich richtig präsentieren. Eine kryptische Subdomain? Damit findet doch niemand die Seite und wirklich seriös wirkt es damit auch nicht. Also erst einmal eine Domain bestellen. Domains sind zum Glück ja günstig. Erstes Jahr meistens nur 12 Euro. Dann braucht man noch die Zeit, damit Google die Seite crawled und in den Index aufnimmt. Danach muss man abwarten wie sich alles entwickelt. Das dauert natürlich viel zu kurz, um fest zu stellen, ob das Projekt eine Zukunft hat oder nicht. aber die Zeit ist auch zu lang, um das Rückgaberecht in Anspruch nehmen zu können.

Irgendwann guckt man auf seine Rechnung und guckt mal wie viel man Zahlt und wie viel wirklich einen noch was bringt oder einfach schon tot ist.

Privat hat man einfach zu wenig Zeit, um sich um viele Projekte zu kümmern und man kann die Zeit nicht so einteilen, dass alle Projekte wirklich die Aufmerksamkeit bekommen, die sie bräuchten.
Die neuen Projekte sind spannender und und durch die eigene Erfahrung auch viel leichter zu pflegen. Die alten sind nicht so toll. Gleiche Änderungen brauchen viel mehr Zeit und Aufwand. Also lässt man die lieber erst einmal so wie sie sind und sagt sich, dass man die noch mal komplett überarbeiten wird.
Projekte die man selbst nicht mehr pflegt, die auch von niemand anderen verwendet oder besucht werden, verbrauchen am Ende nur Geld. PHP 5.2 zu verwenden kostet bei einigen Hostern Geld. Ältere PHP Versionen auch. Wenn man also nicht mindestens auf PHP 5.5 wechseln kann, kostet es noch mehr Geld als eine Domain.

Private Side-Projects zu haben ist toll. Man lernt viel, zeigt sich der Welt, sieht mal eine andere Welt als die Enterprise-Welten bei der Arbeit. In Bewerbungen gehören diese Projekt schon eigentlich mit dazu. Man kann sich auch mal mit neuen Technologien befassen, die für einen ernsthaften Einsatz noch zu "neu" sind.

Aber diese Projekte sollen auch nicht Zeit und Geld rauben, wenn klar ist, dass sie keinen der oben genannten längerfristigen Ziele dienen. In Bewerbungen kommen alte Projekte nicht gut, weil man sich ja möglichst von der neusten und tollsten Programmierer-Seite zeigen möchte. Das man früher mal schlechten Code produziert hat glaubt einen jeder auch ohne einen Beweis dafür gesehen zu haben.

Jeder hat mal JavaScript ohne Closures geschrieben. Funktioniert wohl auch alles noch gut, aber zeigen mag man es dann doch auch nicht mehr so wirklich. Ich müsste da auch noch mal ein alte Projekte
überarbeiten.

Also.. auch wenn es einem schwer fallen mag, alten Projekte aus dem Internet entfernen. Bei mir waren mp4togif.com und webm-maker.com so ein Fall. Die erste Anwendung lief nicht schlecht, aber sie waren alt und optisch so wie bedienerfreundlich nicht ganz auf der Höhe meines Könnens. Webm-Maker konnte mehr, lief auf mobilen Geräten und war einfach sehr viel besser strukturiert und entwickelt worden. Nur die
Domain war wirklich brauchbar. Also die Anwendung gelöscht und durch eine Kopie des Webm-Maker Codes ausgetauscht. Seit dem läuft es ganz ok und ich überlege eher die Webm-Maker Seiten wieder einzusparen.

Andere Domains wo nur noch Test-Projekte liefen oder auch die einfach durch Namenswechsel nicht mehr aktuell waren und nicht wirklich benutzt wurden, habe ich dann auch vor kurzen gekündigt. Über 24 Euro mehr im Jahr sind jetzt nicht so viel, aber einmal Pizza bestellen oder einmal klein Essengehen sind da schon drin.

Wenn Projekte schon kein Geld oder Spass/Freude/Erkenntnis bringen, sollen sie auch kein Geld verbrauchen.

Jedes halbe Jahr sollte man die eigenen Projekte nochmal bewerten und gucken, welche keine Zukunft haben und wo man sparen kann. Das ist privat genau so sinnvoll wie bei Firmen. Hier sollte man so denken als wäre man eine kleine Firma und auch mal etwas wirtschaftlich denken.

Frameworks schreiben.. aber richtig

In meinen 11 Jahren habe ich schon einige Frameworks geschrieben. Ich mag Frameworks und lieb es so etwas zu entwickeln. Aber Frameworks sind schwer richtig zu entwickeln. Die meisten Framework-Entwicklungen Enden ohne etwas Brauchbares in der Hand zu halten. 50% der Frameworks, die ich im Laufe der Zeit geschrieben habe waren einfach Schrott.
Neben diesen gibt es dann die, die am Ende nutzlos sind. Das kann damit zusammen hängen, dass die Vorteile und die Arbeitszeitersparnis einfach nicht eintreten. Die wirklich brauchbaren kann ich an paar Fingern abzählen. Aber auch viele große Frameworks haben ihre Probleme, es ist also kein Problem was nur die Arbeit einzelner Entwickler oder kleiner Gruppen betrifft. Ein gutes Beispiel für so ein Framework ist JavaFX 1.x. Viele Ideen, viel Arbeit wurde investiert und am Ende wollte es niemand verwenden. JSF 1.x war auch noch weit davon entfernt wirklich rund zu laufen bei der Entwicklung und zeigte oft Unzulänglichkeiten. Allein dass mit Tomahawk alle möglichen HTML-Tags wie DIV nochmal für JSF implementiert wurden, weil es kaum möglich war JSF und HTML sinnvoll zu mischen.
Aber das Scheitern großer Frameworks soll hier gar nicht das Thema sein. Es soll darum gehen, wie man es richtig macht bzw. wie man weniger falsch macht.

Ich hatte vor einiger Zeit APF2 (annonyme php framework 2) angefangen. Es sollte alles richtig machen was ich bei aoop falsch gemacht hatte. Es sollte nicht der Content direkt raus geschrieben werden beim Funktionsaufruf. Es war so nicht möglich über den Content-Bereich aus den Title zu ändern und so war auch die Möglichkeit nicht da einen Titel eines Blog-Post zu setzen, wenn man den BLog-Post geladen hatte, weil dann der HTML-Head schon gesendet worden war.

Es sollte ein richtiges Routing haben, um so zum Zend Framework 2 aufschließen zu können. Damit sollte SEO einfacher werden, weil nicht alles auf die index.php ging.

APF2 ist tot. Es fehlte einfach viel was aoop schon hatte, denn ein unvollständiges Framework ist sinnlos und aoop zu "reparieren" ging schneller als gedacht. Alles komplett neu und besser zu machen braucht viel Zeit und man kann es nicht alles besser machen und dabei kompatibel bleiben. ZF1 zu ZF2, JSF 1.x zu JSF 2.x, AngularJS 1.x zu AngularJS 2.x.. JavaFX. Ein Framework neu zu schreiben lohnt sich nur wenn man auch etwas komplett neues damit entwickeln will. Das Framework nur neu zuschreiben und die darauf basierende Anwendung portieren zu wollen endet eigentlich immer damit dass man die Anwendung auch fast komplett neu schreibt. Man hat ja damals nichts auf Hinsicht eines neuen noch nicht existenten entwickelt. Deswegen werden alte Framework Versionen auch ewig weiter gepflegt, weil das Portieren auf ein komplett neues Konzept nicht so einfach möglich ist, weil man sich eben auf das alte Konzept eingelassen hat und sich daran orientiert hat bei der Entwicklung.

Also der erste Punkte: Man muss für die Zukunft etwas neues machen und nicht versuchen alte Sachen zu reparieren. Eine neue Version ist auch ein neues Framework.

Auch die Frage, ob es in einem bestimmten Bereich wirklich ein noch ein weiteres Framework braucht, dass wieder nur Nuancen anders macht. Ja.. die Konzepte sind alle sehr ähnlich, die meisten kommen bei den selben Problemen zu den selben Lösungen. Es gibt viele Lösungen aber nur wenig gute und man ist nicht so genial, dass nicht auch viele andere zu der Lösung kommen. Außerdem ist man durch viele bekannte Konzept schon so geprägt, dass man diese auch aufgreifen wird. MVC und MVVM... am Ende kann
man noch so viel nachdenken.. die Konzepte sind schon gut. MVC, MVC2 oder MVVM sind auch sehr ähnlich und oft ist es auch Interpretation ob nicht eines der Konzepte, dass andere schon vorweg genommen hat und es nur nicht in der Masse erkannt wurde.
Würde ich heute noch cJS neu entwickeln? Nein. Es funktioniert echt toll und als ich vor paar Tagen mp4togif.com doch mal wieder erweitert habe, ging es einfach, schnell und problemlos. Aber AngularJS kann das auch alles und noch mehr und gerade das Handling von Arrays "item.name for item in items tracking by item.id".. so eine kleine Sache macht es für mich so toll. Das Wichtigste ist aber, dass AngularJS aktiv und mit soviel Man-Power weiter entwickelt wird, wie ich es nicht neben bei leisten könnte. Ich entwickle aoop aktiv weiter. Das ist schon viel Arbeit.

Also Punkt Nummer 2: Wenn man nicht die Zeit hat es durch gehend weiter zu entwickeln, sollte man es lassen und eines von jemanden verwenden, der oder besser die die Zeit investieren. Also auch mal an die Framework Entwickler denken und diese auch bei Gelegenheit etwas unterstützen. Denn die geben ihre Arbeit meistens kostenlos ab und sparen uns damit so viel Zeit, die wir wieder in etwas investieren, mit dem wir Geld machen oder es jedenfalls hoffen mal Geld zu machen :-)

Aber was ist, wenn es kein anderes Framework gibt, das das macht was ich brauche? Dann sollte man versuchen möglichst viele Leute zu finden, die es verwenden und somit den Bedarf schaffen, Zeit zu investieren. Gerade in Teams mit einem eigenen Framework (bei mir war es eins um XML-Templates in PDFs umzuwandeln, man also kein iText lernen musste sondern HTML und CSS reichte) muss es sich wirklich durch setzen. Wenn man nicht den Rückhalt hat, wird jede investierte Zeit als verschwendete Zeit gesehen.
Wenn man HTML + CSS Templating für ein Team entwickelt, dass zum großen Teil nie mehr als Java-Code und dort nur SWT für GUI gesehen hat, hat man schon einmal einen schlechten Start. Wenn das Framework dann besonders schnell entwickelt wurde, an einigen Stellen noch Probleme hat und nicht besonders schnell ist, hat es es sehr schwer sich jemals wieder von diesem Ruf zu erholen.
CSS ist teilweise etwas undurchsichtig und wenn sich dann Entwickler nicht merken können ob # nun sich auf eine Id oder eine Class bezieht, hat das Framework einfach keine Chance.

Damit wäre Punkt 3: Das Framework muss von den Entwicklern benutzt werden können. Wenn man nur ein Framework für sich selbst schreibt, scheint dieses egal zu sein, aber man weiß nie, ob nicht doch jemand anderes mal ein Projekt von einem übernehmen wird. Wenn man in einem festen Team arbeiten, muss man sich nach dem Wissen und den Vorlieben des Teams richten, damit das Framework angenommen wird.

Wenn wir nun ein neues Projekt mit einem Framework beginnen wollen, wollen wir nicht erst einmal viel Doku lesen oder einrichten müssen. Wir wollen (ich gehe mal vom Webbereich aus) das Framework deployen, es aufrufen und eine kleine Seite sehen. Vielleicht weißt das Framework einen nochauf eine fehlende Datenbank-Verbindung hin. Was wir an sich nicht machen wollen ist, den Server erstmal umständlich konfigurieren zu müssen. Erstmal die Config des Tomcats oder Apaches ändern zu müssen nervt. Wenn wir aber nun das Framework an sich zum Laufen bekommen haben, wollen wir unsere Anwendung anfangen zu entwickeln. ZF2 braucht gefühlt sehr viel Konfiguration und es müssen viele Dateien angelegt werden. Die Modul-Klasse, das Mapping des Namespaces, das Laden der Config-Dateien, was man alles in PHP umsetzen muss. Als Anfänger hat man sehr damit zu kämpfen, wil man oft auch nicht genau weiß, in welcher der Dateien nun was noch mal stand. Default-Werte sind unbekannt und die endlose Verschachtelung der Arrays ist
alles andere als übersichtlich.
Ich habe ein SWT-Framework erlebt wo man erst einmal 5 Klassen ableiten musste, mindestens 6 Methoden überschreiben sollte, die aber auch nicht abstract waren und man sowie so noch alle möglichen Pfade und Klassen an den richtigen stellen anpassen musste. Das war schon keine Konfiguration mehr sondern wirkliches Ändern und Anpassen von elementaren Code-Teilen.
Ein Update auf eine aktuellere Version des Frameworks,war also auch kein einfaches Kopieren von Dateien sondern man musste wieder den Code anpassen und hoffen, dass es immer noch die selben Stellen waren, wo es zu ändern war.

Punkt 4: Die Installation sollte an sich lauffähig sein und das Anlegen eines eigenen Moduls oder ähnlichen sollte über eine einzige Datei möglich sein. Diese Datei sollte kein Programm-Code sein und deutlich strukturiert sein. Auch Default-Werte sollten immer vorhanden sein, falls man einen Wert nicht in der Config setzt.

Und gleich Punkt 5 dazu: Wenn man ein Update macht sollte man die Dateien einfach kopieren können ohne eine der Dateien ändern zu müssen oder Angst haben zu müssen die momentane Config ausversehen wieder mit der mitgelieferten Default-Config zu überschreiben. Am besten ist ein zentrales Verzeichnis für die Config und dass ohne Inhalt einfach auf die default-Config zurück springt.

Fazit: Wenn man diese Punkte beachtet, steigen die Chancen, dass das eigene Framework brauchbar ist und auch von anderen Entwicklern angenommen wird. Zusätzlich sollte das Framework natürlich gut, schnell und möglichst fehlerfrei sein. Aber meistens scheitert das eigene Framework einfach daran, dass man zu wenig Zeit investiert, nur auf den momentanen eigenen Bedarf hin entwickelt und sich zu wenig Gedanken macht wie man selbst oder andere beim nächsten Projekt damit einen möglichst einfachen und entspannten Einstieg haben.

Older posts:

Möchtest Du AdSense-Werbung erlauben und mir damit helfen die laufenden Kosten des Blogs tragen zu können?