Erster Schnee am Klausenlift

Pünktlich zum Wochenende startete die neue Ski Saison. Auf auf die faulen Leiber und ab auf die Piste. Mein Motto zum Wochenende. Samstag Morgen Skier für die Piste vorbereitet. Alles zusammen gepackt was einen auf der Piste warm hält.

Mehlmeisel. Ab auf den Klausenlift. Kurze zeit später, gegen 15:00Uhr war ich am Klausenlift. Ganz schön was los gewesen für den zweiten offenen Tag. Die erste Abfahrt war natürlich wieder etwas wackeliger als der Rest. Nach dem Motto: Was man einmal gelernt hat vergisst man so schnell nicht – gingen die restlichen 2Stunden rum wie nichts.

Die Piste war gut präpariert. Schneekanonen sorgten zusätzlich für einen gut zu befahrenden Untergrund.

 

  

Radeln …

Heute Morgen hatte ich ein hartnäckiges Ziel. 3 Stunden Radeln. Leider habe ich die Temperaturen und meine Vorbereitung etwas unterschätzt. Bis ich mich fertig gemacht habe. Frühstücken, Klamotten, Trinken und Co war schon die erste Stunde rum und um 11:00Uhr sollte ich doch zurück sein für einen Termin.

Somit konnte ich leider erst um 8:45Uhr starten. Quer durch die Gengend. Wie immer war der Start bei mir vor der Tür 😉 … Quer übers Feld Richtung Wirsberg. Über den neuen Radweg nach Schwarzhof und gegen die große Steigung auf Marktschorgast. Mittlerweile kenne ich die Strecke schon fast blind aber die Beschaffenheit heute waren schon etwas extra.

Nicht nur Laub oder Match hatten sich auf dem Feldweg breit gemacht. Sondern auch dicke und tiefe Reifenspuren der Tracktoren und Landmaschinenfahrzeuge. Was will man mehr als eine anspruchsvolle Strecke. Nachdem ich kurz vor Marktschorgast war musste ich kurz halt machen weil meine Oberschenkel doch etwas leiden durften. Es ist zu 100% anders als laufen. Aber ich war fit. 9:15Uhr und fit wie ein Turnschu. Kaum zu glauben.

 Von Marktschorgast ging es dann abwärts in die Grundmühle. Dabei erreicht man eine schöne Geschwindigkeit und mit einem Zack rutscht man wieder quer über den Bletterboden und Matschflecken auf Wirsberg zu. Kurz davor bin ich abgebogen um wieder etwas Herausforderung zu spüren und habe mich wieder weiter dem Berg auf begeben.

Richtung Sessenreuth und dem Reiterhof wurde es nochmal spannend. Der Radweg wurde immer schmaler und es ging nur noch runter. Warum auch immer ich davon kein Bild gemacht habe. Falls ich mal etwas mehr Zeit habe zum Fotografieren oder filmen werde ich die Strecke auch mal etwas dokumentieren. Ich finde sie nicht verkehrt. Es macht Spaß und ist teilweise auch anspruchsvoll. So, genug von heute. Leider waren es wieder nur 1,5 Stunden und morgen geht es wieder rund. Mal sehen ob ich dann mehr schaffe. 😉

Löschen von Dateien die auch als root nicht gelöscht werden können

Wenn Dateien und Ordner eauch als root nicht gelöscht werden können kann es eine einfache Ursache haben. Dem Ordner oder der Datei wurden weitere Attribute hinzugefügt. Eines davon ist immutable. Dieses kleine Attribute hat mich einige Nerven gekostet und ist auf dem ersten Blick nicht sichtbar.

Mit dem Befehl lsattr -la können alle weiteren attribute im Verzeichnis dargestellt werden. Hier steht dann auch das jeweilige Attribut das dem Ordner neben den Standardrechten noch zugeordnet werden kann.

Über man chattr bekommt ihr eine Übersicht der Attribute die einem Verzeichnis/Datei zugeordnet werden können und auch wie man diese setzte bzw. entfernt.

Abschließend noch der Befehl zum entfernen von immutable. Ein einfaches: chattr -i genügt um alles wieder ordnungsgemäßg löschen zu können.

PDFs in Java erstellen – Open Source

Zur Erstellung von PDFs mit Java gibt es nur wenige wirkliche Open Source Lösungen. Leider wurde eine gute Lösung mittlerweile kostenpflichtig und für kommerzielle Nutzung wirklich teuer wenn man ein paar Nutzer anbinden will. Somit haben wir uns für pdfBox entschieden. Es ist zwar um einiges einfacher und rudimentärer gestaltet als iTextPdf aber dafür noch open source und vor allem Lizenzfrei.

Wir haben vor kurzem eine andere Möglichkeit gefunden. Leider ist es nicht so schön gelöst wie bei iTextPdf. Jede Zeile/Pixel und Polygon wie auch immer man es bezeichnen mag wird per Koordinatensystem bestimmt. Wobei der absolute Nullpunkt immer links unten ist.

Auch unterstützt pdfBox leider keine Tabellen, Hintergründe oder sonstige Features. Wobei ich demnächst eine neue Subklasse euch anbieten möchte in der man ein paar dieser simplen Features nutzen kann. Vorallem mit Background hinterlegter Text oder auch eine Tabelle.

 
Anbei noch ein kleiner UseCase wie pdfBox zu verwenden ist.
 

private int column1 = 30, column2 = 350, column3 = 475;
private int startTop  = 700;
private int spacer = 21;
private float pageWidth = 0;

public void generatePDF() {
            PDDocument document;
	    PDPage page;
	    PDFont font;
	    PDPageContentStream contentStream;
	    PDJpeg logo;
	    InputStream inputLogo;
	    ByteArrayOutputStream output = new ByteArrayOutputStream(); 
	    final ClassLoader cls = Thread.currentThread().getContextClassLoader();
	    
	    // Creating Document
	    document = new PDDocument();

	    page = new PDPage(PDPage.PAGE_SIZE_A4);
	    pageWidth = PDPage.PAGE_SIZE_A4.getWidth();
	    LOG.info("HEIGHT: " + PDPage.PAGE_SIZE_A4.getHeight() + " WIDTH: " + PDPage.PAGE_SIZE_A4.getWidth());
	    
	    // Adding page to document
	    document.addPage(page); 

	    // Adding FONT to document
	    font = PDType1Font.HELVETICA;           

	    // Retrieve Image to be added to the PDF
	    inputLogo = new FileInputStream(new File(cls.getResource("image-default-logo.png").toURI().getPath()));

	    BufferedImage buffLogo = ImageIO.read(inputLogo);
	    logo = new PDJpeg(document, buffLogo);
	    logo.setHeight(32);
	    logo.setWidth(246);

            contentStream = new PDPageContentStream(document, page); 
	    contentStream.drawImage(logo, 339, 770);
	    
	    addBackgroundRectangle(contentStream, Color.GRAY, column1, l-8, 31);
	    addText(contentStream, font, reportuebersicht, 18, column1, newLine());
}

private void addText(PDPageContentStream contentStream,
	    				PDFont font,String text,int size,
	    				int posx,int posy) throws IOException {
	contentStream.beginText();
	contentStream.setFont(font, size);
	contentStream.moveTextPositionByAmount(posx, posy);
	contentStream.drawString(StringEscapeUtils.unescapeHtml4(text));
	contentStream.endText();
}

private void addBackgroundRectangle(PDPageContentStream contentStream, Color color, int posx, int posy, int height) throws IOException {
	 contentStream.setNonStrokingColor(color);
	 contentStream.fillRect(posx-3, posy-3, pageWidth-60, height);
	 contentStream.setNonStrokingColor(Color.BLACK);
}

Remote Logs, Tail Logs in Windows, Log Viewer

Ich habe mich mal wieder auf den Weg gemacht um ein allgegenwärtiges Problem zu lösen. Unschöne Logs in eine Form quetschen um Sie schnell analysieren zu können. Einen schnellen überblick zu haben wo Fehler auftreten oder einfach nur ein paar Debugmessages im Blick zu haben. Dabei bin ich auf ein nützliches Open Source Projekt gestoßen. OtrosLogViewer, hört sich ziemlich chinesisch an ist aber sehr gut zu bedienen wenn es das erste mal läuft.

Super viele Einstellungsmöglichkeiten um wichtige Marken zu setzen oder einfach nur die log am Stücke zu sehen und per „tail“ immer wieder aktualisiert zu bekommen.

Der LogViewer der nicht nur ein tail Ersatz für Windows für mich ist sondern auch eine visuelle Aufbereitung der Ergebnisse mir bringt macht es um einiges leichter Auffälligkeiten zu checken.

Projektseite

http://code.google.com/p/otroslogviewer/

Installation

Ihr müsst euch lediglich die ZIP file aus dem Google Code ziehen. http://code.google.com/p/otroslogviewer/downloads/list

Achtung: Um das ganze System sauber benützen zu können solltet ihr Java JRE6 verwenden. Mit JRE7 werdet ihr massive Probleme bekommen. Habe ich auf alle Fälle festgestellt.

HowTo

Der LogViewer bietet euch die Möglichkeiten eigene Pattern anzulegen. Diese dienen dazu Logfiles verschiedenster Server zu parsen und in eine korrekte Form zu biegen. Ich habe euch hier 2 Pattern für glassfish und tomcat 7 zum download hinterlegt. Die ZIP Datei entpacken und beide Pattern Files einfach in den Ordner: plugins/logimporter kopieren.

Video

Schultereckgelenksverrenkung

Leider war ich die letzten 4 Wochen Sporttechnisch leider etwas auf dem Holzweg. Da ich einen kleinen Unfall hatte und mir eine Tossi1 zugezogen habe – Die Verletzung hört sich irgendwie komisch an – konnte ich leider keine Übungen mehr machen und habe mich somit aufs Joggen konzentriert. War relativ viel mit Inlinern und im Wald unterwegs. Leider wird es jetzt immer kälter und kälter daher wird es wieder Zeit meine Fitnessstudio Karte zu aktivieren und schon mal ein Laufband für mich zu reservieren.

Apropo Tossi, hier noch der passende Wikipedia Artikel zur Verletzung

 

Liferay 6.1 – Minifier Error

Ein nerviger Fehler im Liferay ist der Minifier für JavaScript oder CSS Code. Der Fehler ist zwar ziemich banal aber es nervt wenn er immer und immer wieder auftritt nur weil einige Zeilen Code falsch auskommentiert wurden. Richtig, der Fehler tritt auf dern Kommentare falsch gesetzt werden.

Single Line Kommentarblöcke mit doppel Slash werden von Liferay nicht unterstützt und schießen den Minifier leider ab. Somit immer den Blockkommentar verwenden und saubere Kommentarfelder integrieren. Damit sollte dann ein reibungsloser Betrieb wieder möglich sein.