Blog: Latest Entries (15):


Linux zum Arbeiten

In meinem Job und auch privat, bin ich jetzt teilweise auf Linux umgestiegen. Auch den Post hier schreibe ich auf meinem Notebook mit Linux Mint. Ok.. trotzdem benutze ich dafür noch Notepad++. Für den habe ich unter Linux noch keinen Ersatz gefunden, bei dem ich den Editor einfach schliesen kann, ohne alles speichern zu müssen und bei dem alles wieder so ist wie als ich ihn geschlossen habe, wenn ich den Editor wieder öffne.

Aber insgesamt, habe ich festgestellt, dass ich mit Linux sehr gut auskomme. Die meisten Programme die ich verwende gibt es für Linux und für fast alle anderen gibt es einen guten Ersatz. Sowohl Eclipse als auch PHPStorm laufen perfekt unter Linux. In PHPStorm macht das Konsolen-Fenster jetzt auch richtig Sinn, weil die Linux Konsole doch sehr sinnvoller da ist als die primitive Konsole von Windows.
GIT läuft wie gewohnt. SourceTree vermisse ich auf Linux etwas, wenn auch die GIT-Integration von Eclipse sehr gut funktioniert und für das normale Arbeiten vollkommen ausreicht.

Firefox, MySQL, Apache.. alles unter Linux genau so wie unter Windows.

Wärend ich bei der Arbeit Ubuntu benutze, verwende ich privat Linux Mint. Wenn ich wählen kann, würd ich immer zu Linux Mint greifen. Es scheint mir etwa runder zu sein und der Cinnemon-Desktop gefällt mir sehr viel besser als die Unity-GUI von Ubuntu.

Auf meinem PC läuft weiterhin Windows 10 und ich werde dort auch erstmal dabei bleiben, weil um mal ein Spiel zwischen durch zu spielen ist Windows doch noch die bessere Wahl.

Auf jeden Fall ist Linux eine gute Umgebung um darin zu entwickeln und ich habe momentan mit Job und anderen Projekten sehr viel zu tun. Deswegen werden es im Blog wohl auch in den nächsten Monaten weniger Beiträge werden. Dafür werde ich versuchen mal wieder ein oder zwei längere Post zu verfassen und auch mal ein oder zwei kleine Tutorial-Videos dazu reinstellen.

Hier der erste Versuch: Wie man Notepad++ unter Linux verwendet.


Sei Professionell.. oder so

Ich habe in den letzten Tag Soft Skills etwas weiter gelesen. Eines der Kapitel dreht sich darum professionell zu sein. Aber die Frage, was genau professionell ist wird da nicht wirklich ausreichend beantwortet.
Es wird das Beispiel gegeben, dass eine Person bei einem morgendlichen Scrum Stand-up Meeting (was eine super Sache ist und wirklich von jedem Team gemacht werden sollte!) immer schriftlich festgehalten hat, was die Person gemacht hat und was sie vorhat an dem Tag zu machen. Ich nehme auch täglich an so einem Meeting teil und finde, dass in so einer Situation als professionell gilt.

Mir kann niemand erzählen, dass man sich nicht an alles was man am vorherigen Tag getan hat erinnern könnte, wenn man es nicht aufschreibt. Auch ohne Notizen kann man dabei sehr professionell sein. Ich würde die Professionalität eher an solchen Dingen fest machen:

* Man kann direkt und klar sagen, was man getan hat und was man vor hat zu tun
* Man beginnt nicht mit "Ja.. was hab ich eigentlich gestern gemacht..."
* Man sagt nicht nur ein Schlagwort. Wenn man ein Thema über Tage hat (was ja nicht selten ist), sollte man einmal kurz Unterpunkte nennen und den anderen damit auch einen kleinen Einblick geben, was durch das Thema alles betroffen ist
* Direkte Antworten auf direkte Nachfragen geben können
* Aufgaben und Todos notieren und nicht einfach nur abnicken

Man muss einfach direkt und klar kommunizieren, wenn man mit 8 Personen ein 15 Minuten Stand-up Meeting nicht immer überziehen will.

Auch in anderen Situationen ist Professionalität hauptsächlich das Auftreten und das Kommunizieren. Man sagt konkrete Termine und hält diese ein, sollte ein Termin nicht zu halten sein, sagt man rechtzeitig Bescheid. Man verschiebt nicht immer alles auf den letzten Augenblick.

Professionell zu sein, bedeutet auch nicht, dass man alles Weiß oder keine Fehler macht. Aber man Fragt rechtzeitig und gezielt nach und wenn man einen Fehler macht, streitet man diesen nicht ab oder versucht in als unbedeutend hinzustellen, sondern man fragt nach wo der Fehler genau lag und wie man in am Besten beheben kann und zeigt sich interessiert und lernbereit.

Man sieht schon, man braucht keine Führungsposition um professionell zu sein. Auch der neue Azubi kann das sein. Wenn man verlässlich ist, hat man schon 90% auf dem Weg hin zum Professional geschafft.

PS: Ein Anzug kann helfen, aber hilft allein nicht. Aber ein Anzug kann gut sein, um sich selbstsicherer zu fühlen und damit kommt man schon mal sehr viel besser rüber, als wenn man unsicher ist.

bbcode-image

Der Softwareentwickler: der Problemlöser

Was ist eigentlich die Aufgabe eines Softwareentwicklers? Natürlich Software entwickeln.. das ist ja klar. Aber warum entwickelt man Software.
Ok.. erst einmal natürich, weil es der Beruf ist man von irgendwas leben muss. Aber warum entwickelt man Software in seiner Freizeit? Geld? Ansehen? Aber in den meisten Fällen einfach um ein Problem zu lösen.
Selbst wenn es um Geld geht sollte an sich das Problemlösen im Mittelpunkt stehen. Wenn ein Kunde gerne eine Homepage mit einem entsprechenden System hätte, um seinen Job besser erledign zu können, schreibt man ihm ein Angebot. Individuelle SYsteme sind aber teuer. Wenn der Kunde sich es also nicht leisten kann, sollte man nicht einfach dann sagen "Pech gehabt!", sondern überlegen wie man das Problem lösen kann.
Die Lösung heißt nicht auf Geld zu verzichten, man muss ja auch bezahlt werden, aber es gibt immer eine Lösung. Wieso nich ein System entwickeln, dass der Kunde verwenden kann un sich trotzdem noch an andere verkaufen läßt?

Die Software die man entwickelt ist nur da Werkzeug, um die Probleme zu lösen. Daran sollte man immer denken. Eine gute Software ist nicht gut, weil sie viele Features hat oder hübsch aussieht, sie st gut weil sie ein Problem löst.

Darum nutzen viele noch Jahre alte Software, weil sie einfach das Problem gut löst. Es geht nicht um Technik oder immer das modernste zu haben. Die Umsetzung sollte gut sein, damt die Software lange stabil läuft.. aber sie mus kein Meiterwerk an Abstraktion und Programmierkünsten sein.

Das macht einen guten Softwareeentwickler aus.. Software zu schreiben, die die Probleme der Leute löst. Oder sie soweit ablenkt, dass sie die Probleme mal vergessen können :-)

CSV direkt aus MySQL exportieren

Auch heute in Zeiten von JSON und XML ist einer der Haupt Import- und Export-Formate immer noch CSV. Der Vorteil ist eben, dass es sich einfach erstellen lässt, einfach einlesen und zur Kontrolle in einem Texteditor laden lässt. Excel kann es auch irgendwie und OpenOffice bzw LibreOffice kann super damit umgehen.

Meistens erstellt man die Dateien ja in dem man Daten aus der Datenbank lädt und dann das Resultset durchläuft und direkt ausgibt oder in einen String schreibt, den man in eine Datei schreibt. Der Vorteil ist, dass man die Daten noch mal bearbeiten kann. Aber wenn man nicht zu komplexe Bearbeitungen vornehmen will und man diese auch mit SQL erledigen kann, gibt es auch die Möglichkeit CSV-Dateien direkt in der Datenbank (hier MySQL) zu erstellen.

Gerade wenn man die Datei nicht ausgeben will über eine PHP Datei sondern sie direkt in einer Verzeischnis kopiert (auch über FTP oder SSH) und die Datei dann von dort von einem anderen System eingelesen wird (z.B. von Neo4J.. so bin ich darauf gekommen) ist dieses Vorgehen sehr viel performanter (gerade wenn OR-Mapper im Spiel sind) als das normale Vorgehen.


SELECT ID,NAME
FROM TEST
WHERE ID>5
INTO OUTFILE '/var/www/app/data/export/out_test.csv'
FIELDS TERMINATED BY ','


Wenn man das FILE-Right hat, kann man so eine CSV in ein beliebiges Verzeichnis schreiben.

Man muss nur sicher stellen, dass man die nötigen Rechte im Verzeichnis hat und dass keine Programme wie apparmor das Schreiben verhindern. ERRCODE 13 wäre der Fehlercode der in so einem Fall angezeigt werden würde.

Wenn man nun alle Rechte erteilt hat und es nicht geht und apparmor läuft, kann man kontrollieren, ob MySQL davon überwacht wird.

sudo aa-status


Um den Zugriff auf das Verzeichnis zu erlauben muss man folgendes tun. Man muss /etc/apparmor.d/usr.sbin.mysql.d bearbeiten und einfach den Pfad an die vorhanden anfügen. Dann mit noch mal apparmor neu laden und es sollte gehen.


sudo /etc/init.d/apparmor reload

Firefox OS - Friedhof

Da leider auch die WebRuntime des Firefox Desktop-Browsers bald eingestellt werden so und es so nicht mehr möglich sein wird Apps aus dem Marketplace auf PCs oder Android Geräten zu installieren habe ich beschlossen in die Richtung keine Weiterentwicklung meiner Apps mehr zu betreiben oder noch etwas in den Firefox Marketplace einzustellen.

Ich habe meine nun toten Apps daher auf den Friedhof verband :-)

bbcode-image


Da finden sich erst einmal nur die Links zum Öffnen. Die Möglichkeit die Apps von dort auf Firefox OS Smartphones zu installieren, folgt demnächst.

Performance und Anführungszeichen in PHP

Immer wenn ich jemanden Fragen höre "Weißt du, was der Unterschied zwischen einfachen und doppelten Anführungszeichen in PHP ist?" Denke ich immer: "Gleich.. gleich kommt es wieder mit der Performance". Und es kommt immer die selbe Antwort am Ende raus, dass doppelte Anführungszeichen langsamer sein als die einfachen.
Ich habe es getestet und die doppelten waren meistens minimal schneller, aber nicht so sehr dass man nicht sagen kann, dass eine der beiden Varianten schneller als die andere wäre. Der Opcode sieht auch gleich aus. Die meisten vergessen einfach dabei, dass auch bei PHP der Code erst einmal geparst und optimiert wird und dann erst der erzeugte Opcode ausgeführt wird. Bei der Ausführung hat sich das mit den verschiedenen Anführungszeichen schon erledigt, weil String intern immer gleich abgebildet werden.

Also wenn keine Variablen im String vorkommen, macht es keinen Unterschied, welche Art von Anführungszeichen verwendet werden. Und der Punkt als Concat-Zeichen schneller ist als Variablen direkt im String anzusprechen ist wieder eine andere Frage.

Ausführlich und sehr gut wird es hier erklärt: https://nikic.github.io/2012/01/09/Disproving-the-Single-Quotes-Performance-Myth.html

und auch hier gibt es einen guten Beitrag zu dem Thema: https://www.soeren-hentzschel.at/sonstiges/single-quotes-vs-double-quotes-in-php-strings/


Das Ende von Firefox OS

Ging dann ja doch schneller als erwartet. Der Marketplace wird wohl 2017 geschlossen.
Alle nicht Firefox OS Apps haben sich wohl schon 29. März erledigt. Ich werde dann also meine Einreichungen, die abgelehnt wurden, auch auf dem Stand belassen und keine weitere Arbeit mehr in die Richtung investieren.

Mich würde aber wirklich mal interessieren wie viele Firefox OS Smartphones es auf der Welt wirklich gibt und wie viele diese noch weiter verwenden würden. Einen eigenes Repository zu schreiben, wo Entwickler ihre Anwendungen hochladen oder verlinken könnten. So etwas ist bestimmt in 2-3 Tagen zu machen. Bei nicht gepackten Anwendungen ist es sehr einfach, weil man nur die URL zur Manifest-Datei an eine JavaScript-Funktion übergeben muss. Bezahl-Apps oder Support für In-App Käufe wäre da natürlich nicht drin. Keine großen Freigaben oder so.. jeder lädt einfach den Link oder die Zip-Datei hoch... und andere können sich die App über einen Klick auf einen Button installieren.

So etwas wäre ein lustiges kleines Projekt und Firefox OS ist eigentlich eine tolle Umgebung für Entwickler, weil man keine großen Entwicklungsumgebungen oder ähnliches braucht und ein Firefox-Browser zum Testen vollkommen reicht.
Dafür Apps zu entwickeln hat immer viel Spaß gemacht und ging immer sehr schnell.

Am Ende glaube ich nicht, dass es sich lohnen würde, in das gesamte Firefox OS Ökosystem noch mal Zeit zu investieren. Es ist wirklich schade um das System.

Bewerben bei einer bestimmten Firma

Einige Ansichten in Soft Skills sind recht interessant. Zum Beispiel wenn man den Wunsch hat bei einer bestimmten Firma zu arbeiten. Den Tipps im Buch nach sollte man erst einmal heraus finden wer da so arbeitet und ob diese Personen Blogs oder ähnliches haben. Dann anfangen deren Blogs zu lesen und auch zu kommentieren. Wichtig dabei den echten Namen zu verwenden und möglichst konstruktiv beim Kommentieren sein. Mit etwas Glück folgen dann ein paar der Leute zum eigenen Blog. Das ganze führt dazu, dass wenn man sich bei der Firma bewirbt, einigen der Name schon etwas sagt und schon eine gewisse Vertrautheit begleitet.
Das selbe ist es auch vor einem Bewerbungsgespräch oder einer Bewerbung schon mal Kontakt mit der Firma aufzunehmen und sich persönlich über die Firma und die Stelle zu informieren. Dabei geht es auch nur darum, dass wenn man dort zum Gespräch auftaucht schon der Gegenüber einen schon kennt, was einen doch einen großen Vorteil einbringt und einen auch sicherer im Auftreten macht.

bbcode-image


Ich hatte auch mal eine Zeit überlegt, mich bei PHP-Treffen sehen zu lassen nur, um vielleicht da in Kontakt mit einer Firma zu kommen, die sehr viel versprechend aussah.. am Ende habe ich es nicht gemacht. Aber an sich ist so ein Vorgehen bestimmt ganz gut.

Wer gerade einen Job such kann, dass ja mal ausprobieren.

IDE einrichten für Einsteiger - Teil 2 - Tomcat

Java + Tomcat (Teil 2)

Nachdem wir uns im letzte Teil schon eine Entwicklungsumgebung für Java eingerichtet haben, können wir Desktop Anwendungen schreiben. Aber für Serveranwendungen benötigen wir einen Servlet Container oder einen Application Server. Für Microservices gibt es auch andere Frameworks, aber wir beschränken uns hier erstmal auf eine einfache JSP-Seite.
Ein kleines Servlet kommt auch noch hinzu. Man könnte auch direkt mit JSF anfangen, aber um sich mit dem Thema Webdevelopment in Java vertraut zu machen fangen wir ganz einfach an. Mit JSP und Servlet kann man auch alles bauen. Von einfachen Webanwendungen mit einzelnen Pages, über MVC-Frameworks bis hin zu REST-APIs. Für das meiste gibt natürlich fertige Frameworks, aber es in einem kleinen Beispiel mal selbst zu versuchen, bringt einen oft einen besseren Einblick in diese Bereiche und man versteht, die vorhandenen Frameworks besser und auch warum sie so funktionieren wie sie funktionieren.

Zuerst downloaden wir uns einen aktuellen Tomcat 8. Den Tomcat Servlet-Container gibt es schon seit vielen Jahren.. eigentlich seit Anfang an und entsprang dem Jarkata-Projekt von Apache. Ich bin 2004/2005 mit dem Tomcat 4 angefangenm wo noch alles unter Apache Jarkata tomcat lief und erst später dann mit der 5er Version zum Apache Tomcat wurde. Man wird aber den Begriff Jarkata noch oft genug bei den Libs und Klassen des Tomcat finden.

Download Apache Tomcat 8.0.x

Einfach die passende ZIP-Datei downloaden und an einen beliebigen Ort entpacken. Da wir alles über Eclipse steuern, müssen wir erst einmal da nichts weiter machen. Wer den Tomcat auch mal so ausprobieren möchte muss JAVA_HOME bei den Umgebungsvariablen von Windows setzen und auch den Pfad zum JRE (zum Bin-Verzeichnis) im Path von Windows hinterlegen. Dann kann man im Tomcat-Verzeichnis mit bin/startup.bat den Tomcat starten. Die einfache Startseite sollte dann unter http://localhost:8080/ aufrufen.

bbcode-image


Aber jetzt zurück zu Eclipse. Wir laden unseren Workspace aus dem letzten Teil oder einen anderen den wir benutzen möchten. Wir öffnen Window -- Preferences -- Server - Runtime Environments.
Dort clicken wir auf Add..., um den Tomcat hinzu zufügen.

Wir wählen den Tomcat 8 aus und clicken auf Next. Dann wählen wir unser Tomcat Verzeichnis aus.

bbcode-image


bbcode-image


Wenn noch keine Server-View angezeigt wird, müssen wir uns diese nochmal hinzufügen.

bbcode-image


Dort clicken wir auf den Link, um einen neuen Server hinzu zufügen. Da wir nur eine Runtime haben, wird uns diese auch direkt vorgeschlagen. Wir übernehmen alle Vorgaben und wählen Finish.

bbcode-image


Damit haben wir unseren Server fertig eingerichtet und können nun zu unserem kleinen Beispiel-Projekt übergehen. Wir fangen ganz einfach mit einer JSP-Seite an, bei der wir ein Input-Feld für einen Namen haben, der dann an die Seite übergeben wird und diesen mit Hallo {name}! wieder ausgibt. Klassisch, einfach und die wichtigsten Dinge wie Forms, Request und Ausgabe sind dabei.

Wir brauchen ein Dynamic Web Project:

bbcode-image


Das Projekt fügen wir auch gleich zu den Projekten hinzu die automatisch bei Änderungen neu auf dem Tomcat deployed (wichtiges Wort in der Java-Welt!) werden. Wenn also etwas geändert wird, wird Projekt einmal auf dem Tomcat entfernt und neu hinzugefügt, so dass die Änderungen über einen Webbrwoser betrachtet werden können. So etwas kann bei größeren Projekten paar Sekunden dauern.. aber zum Glück muss nur bei Java-Dateien neu deployed werden. HTML, CSS oder JavaScript Dateien erfordern kein erneutes Deployment und Änderungen sind einfach so verfügbar, weil direkt auf die Dateien zu gegriffen wird und nichts kompiliert werden muss.

bbcode-image


bbcode-image


Nun fügen wir uns eine index.jsp hinzu. JSP-Seiten werden im WebContent angelegt, um gefunden zu werden. Die index.jsp ist wie eine index.html und wird beim Aufruf verwendet, wenn keine andere Seite angegeben wurde. Das Verhalten kann man über eine web.xml definieren. Dort kann man auch Servlet-Mappings und Resources definieren. Aber so eine brauchen wir erst einmal nicht.

bbcode-image


Auf die Seite kommt eine einfache Form und die Ausgabe des Namen, wenn im Request ein Name gefunden wird. Wir übergeben einfach mal den Namen per GET damit man sehen kann, wie der Parameter über die URL übergeben wird. Normal sollte man Form-Eingaben über POST übergeben. Aber die Änderung ist ja im Form-Tag schnell gemacht.


<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Blog-Beispiel</title>
</head>
<body>
<%
if(request.getParameter("name")!=null && request.getParameter("name").length()>0){
%>
Hallo <strong><%=request.getParameter("name") %></strong>! <a href="index.jsp">reset</a>
<%
}
else{
%>
<form method="get">
<input type="text" name="name" /><br/>
<input type="submit" value="ok"/>
</form>
<%
}
%>
</body>
</html>


Aufrufen können wir diese Seite mit der URL nach dem Schema http://localhost:8080/{projectname}/ bei meinem Beispiel als http://localhost:8080/BlogTomcat/.

bbcode-image

bbcode-image


Eine JSP-Seite ist ja nur die Ausgangsdatei und diese wird in ein Servlet kompiliert. Servlets sind gerade für Dinge noch sehr gut, wenn man keine große Ausgaben hat, z.B. für Uploads, Downloads (mit vorherigen Benutzercheck) oder REST-APIs, die einfach immer ein Object in JSON umwandeln. Um schon mal ein Servlet gesehen zu haben erstellen wir unser Beispiel noch mal direkt als Servlet.


package de.hannespries.blog.ides.tomcat;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(name="nameservlet",urlPatterns={"/name"})
public class NameServlet extends HttpServlet{
private static final long serialVersionUID = 609957577169396811L;

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String out="<html><head><title>Blog-Beispiel</title></head><body>";
if(req.getParameter("name")!=null && req.getParameter("name").length()>0){
out+="Hallo <strong>"+req.getParameter("name")+"</strong>! <a href="/name">reset</a>";
}
else{
out+="<form method="get"><input type="text" name="name" /><br/><input type="submit" value="ok"/></form>";
}
out+="</body></html>";
resp.getWriter().println(out);
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}


Das URL-Pattern ist hier sehr einfach gehalten. Man kann auch Wildcards und ähnliches setzen, was sehr praktisch ist, wenn man Werte in URLs einbauen möchte, was sehr gut für SEO ist. Beipsiel /service/item/2/ wobei 2 die Id des Item in der Datenbank ist und darüber geladen werden kann.

bbcode-image


Wobei wir zum Thema Datenbanken im nächsten Teil kommen, wo wir uns eine Entwicklungsumgebung für PHP einrichten. Da auch dort Eclipse zum Einsatz kommt, sollte man auch wenn man sich nur für Java interessiert den Teil doch mal durchlesen und gerade der Bereich mit der Einrichtung einer MySQL-Datenbank ist interessant, wenn man eine Webanwendung im Tomcat entwickelt. Das Anlegen einer Datasource in der Config des Tomcats werde ich dort auch nochmal kurz erläutern.


IDE einrichten für Einsteiger - Teil 1 - Java

Bald ist wieder die Zeit der Bewerbungstest und -gespräche für Fachinformatiker AE(=Anwendungsentwicklung) Ausbildungsstellen oder man ist noch in der Schule und überlegt sich, ob man sich den Abi-Stress wirklich antun soll. In beiden Fällen hat man sich wohl schon einige Gedanken gemacht und wollte sich schon mal ein Bild davon machen wie Programmieren in de, Beruf aussieht. Privat zu entwickeln ist doch immer etwas anderes als anderes.

In den meisten Fällen wird man sich seinen Ausbildungsplatz nicht danach aussuchen, welche Programmiersprachen in der jeweiligen Firma verwendet werden. Man wird nehmen was man bekommt. Wenn man sich aber mal grob auf ein Gespräch vorbereiten will und man in eine neue Sprache hinein schnuppern möchte, muss man sich erst einmal eine Umgebung einrichten. Es gibt genug Tutorials dazu.. deswegen möchte ich in nichts nachstehen.

Ich musste damals mir auf die Schnelle alles einrichten um ein C-Programm unter Linux zu schreiben und zu compilieren. Mit Hilfe des Internets ging es auch ganz gut. Aber für C bringt Linux auch alles.

Ich zeige hier aber einfach mal, was man alles braucht, um mit Java, PHP und JavaScript ein kleines "Hello World" Programm zu schreiben. Wobei die Einrichtung der Umgebung im Vordergrund steht und nicht das kleine Programm.

Java (Teil 1)
Java Umgebungen sind nicht immer das einfachste. Wenn man eine Webanwendung schreiben möchte, hat man schon relativ viel zu konfigurieren. Deswegen erst einmal ein kleine und einfache Anwendung.
Als erstes brauchen wir Java. Für die Entwicklung mit Java benutzt man am Besten das JDK (Java SE Development Kit). Es enthält zusätzliche Werkzeuge und den Source-Code zu den Java-Klassen. Außerdem wird keine komische Ask-Toolbar mit installiert. Das JRE ist mit dabei, so dass man mit dem JDK allein auskommt.

Die aktuelle Version der 8er Reihe findet man hier: Oracle Java 8 JDK

Man könnte jetzt theoretisch schon mit einem Text-Editor sein erstes Java-Programm schreiben und mit dem Java-Compiler compilieren. In einem Text-Editor zu schreiben ist aber alles andere als angenehm und man hat keine Syntax-Highlighting, Code-Vervollständigung oder automatische Anzeige von Fehlern. So eine Integrierte Entwicklungsumgebung (IDE) erleichtert einen schon sehr viel.

Die IDE meiner Wahl ist Eclipse. Man kann aber auch NetBeans oder IntelliJ verwenden. Das Grundprinzip ist bei allen gleich. Aber hier nehmen wir Eclipse.

Hier findet man den Download von Eclpise J2EE. Die J2EE-Version, weil da alles mit dabei ist, was man so braucht. Auch alles was man braucht, um ein einfaches Web-Project mit einem Tomcat zu realisieren.

Bei Eclipse einfach die Zip-Datei downloaden und entpacken. Beim ersten Start wird ein Workspace angelegt. Der Workspace ist ein Verzeichnis in dem die Projekte abgelegt werden.
Man kann beliebig viele Workspaces haben und auch mehrere Eclipse Instanzen mit verschiedenen Workspaces gleichzeitig geöffnet haben.

Sollte man schonvorher eine Java-Version installtiert gehabt haben, sollte man nun das neu installierte JDK auswählen. Dazu geht man im Menu in den Menüpunkt.

Window -- Preferences -- Java -- Installed JREs

bbcode-image


Dort mit Hilfe der Search... Funktion nach dem neuen JDK suchen lassen. Wenn es gefunden wurde dieses mit dem Hacken vorne als default JRE definieren. Dann wird es automatisch für jedes Projekt verwendet, dass keine eigenen Einstellungen für JRE-Libs hat. Aber das ist jetzt erst einmal nicht so wichtig. Für uns ist nur wichtig, dass unser neues Project das JDK verwendet.

Wenn wir unser JDK eingebunden haben können wir nun unser Project erstellen.

bbcode-image


Wir geben dem Project einen Namen. Hier kann man auch gleich sehen, ob unser JDK die default JRE ist. Hier könnten wir auch ein abweichendes JRE auswählen.

bbcode-image


Weitere Einstellungen nehmen wir nicht vor und klicken einfach auf finish.

Das Project wird angelegt und wir legen uns unsere Klasse an, die unser Haupt-Programm enthalten wird. Die Klasse ist Main und wird im Package de.hannespries.blog.ides liegen. Packages sind so etwas wie Verzeichnisse, um die Klassen zu strukturieren, aber auch nur ähnlich, weil ein Package über mehrere JAR-Dateien verteilt sein können.

bbcode-image


bbcode-image


In die Main Methode kommt unser Code. Da wir schreibfaul sind und jetzt eine tolle IDE haben geben wir nur syso ein

bbcode-image


jetzt drücken wir Strg+Space und nutzen unser syso zu einem System.out.println() zumachen. Das geht so sehr viel schneller als wenn man alles per Hand schreiben würde, wie man es in einem Text-Editor machen müsste.

bbcode-image



package de.hannespries.blog.ides;

public class Main {

public Main() {
// TODO Auto-generated constructor stub
}

public static void main(String[] args) {
//unser Code:
System.out.println("Hello World!");
//
}
}


Nun wollen wir den Code einmal testen. Erst einmal Speichern. Dann öffnen wir mit einem Rechtsclick das Context-Menü, wählen Run as und dann Java-Application.

bbcode-image


bbcode-image


Damit wir immer die Console direkt anzeigt bekommen, wenn eine Ausgabe kommt, selbst, wenn wir einen anderen Tab gerade offenen hatten, nehmen wir noch folgende Einstellung vor.

bbcode-image


Wenn man das Programm dann mal mit anderen Teilen möchten, kann man über die Export-Funktion eine JAR-Datei erstellen. Wichtig dabei ist, dass man die main-Methode der entsprechenden Klasse auswählt, damit das Programm direkt gestartet werden kann. Die Manifest-Datei ist aber sehr komplex und ist an sich einen eigenen Artikel wert.

Damit haben wir Java und Eclipse installiert. Der Test lief auch. Im nächsten Teil werden wir dieser Installation einen Tomcat hinzufügen und unsere erste kleine JSP-Seite erstellen und im Browser anzeigen lassen.

PREG-ähnliches RegEx mit Java

Die PREG_-Funktionen von PHP sind sehr einfach zu verwenden und sehr mächtig.

Ich habe die Einfachheit bei Java vermisst. Java ist da sehr viel komplexer. Also habe ich die Java Funktionalität in Methoden verpackt, die von der Struktur den PHP-Funktionen sehr gleichen und sich auch genau so verwenden lassen. Etwas Prozedur-orientiertes Programmieren in Java.


package de.hannespries.commons.regex;

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class PREG {

public PREG() {

}

public static String replace(String pattern, String replacement, String source, boolean caseSensitive) {
Pattern patternObj = Pattern.compile(pattern, Pattern.MULTILINE);
if (!caseSensitive) {
patternObj = Pattern.compile(pattern, Pattern.MULTILINE | Pattern.CASE_INSENSITIVE);
}
Matcher matcher = patternObj.matcher(source);
String parsed = matcher.replaceAll(replacement);
return parsed;
}

public static String replace(String pattern, String replacement, String source) {
return replace(pattern, replacement, source, true);
}

public static boolean match(String pattern, String source) {
Pattern patternObj = Pattern.compile(pattern, Pattern.MULTILINE);
Matcher matcher = patternObj.matcher(source);
return matcher.matches();
}

public static boolean matchFind(String pattern, String source) {
Pattern patternObj = Pattern.compile(pattern, Pattern.MULTILINE);
Matcher matcher = patternObj.matcher(source);
return matcher.find();
}

public static List<String> matchAll(String pattern, String source) {
List<String> result = new ArrayList<String>();
Matcher m = Pattern.compile(pattern).matcher(source);
while (m.find()) {
result.add(m.group());
}
return result;
}

public static List<String> split(String pattern, String source) {
String[] parts = source.split(pattern);
List<String> list = new ArrayList<String>();
for (int ii = 0; ii < parts.length; ii++) {
list.add(parts[ii]);
}
return list;
}

public static List<String> find(String pattern, String source) {
List<String> result = new ArrayList<String>();
Pattern compiled = Pattern.compile(pattern);
Matcher matcher = compiled.matcher(source);
while (matcher.find()) {
result.add(matcher.group());
}

return result;
}
}


MP4toGIF.com mit Filtern

Ich habe den ersten Schritt gemacht und 2 einfache Filter in MP4toGIF.com eingebaut. Man kann nun direkt schwarz/weiß Animationen aus farbigen Ausgangsmaterial erstellen. Auch eine Farbgebung, die etwas "vintage" aussieht.

Die Filter basieren auf dem Code den ich hier schon mal vor einiger Zeit veröffentlicht habe. Alles natürlich HTML5 Canvas basiert.

bbcode-image


Mit der Zeit werden noch ein paar mehr Filter folgen.

Older posts:

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