IE Hack - Zeilenumbruch

Ein Link kann im Internet Explorer kann die breite eines divs verlängern, während im Mozilla-Firefox automatisch ein Zeileumbruch statt findet. Durch folgende Angabe wird im Internet-Explorer automatisch ein Zeilenumbruch am Ende der Zeile erstellt.

word-wrap: break-word; / Internet Explorer 5.5+ /

Fügt man diese Angabe z.B. #content a{ … } hinzu, wird verhindert das ein Link das Layout im Internet Explorer verändert wird, während es im Firefox gleich bleibt.

Glassfish Fehler IOP00410201 in Verbindung mit EJB

Der folgende Fehler taucht unerwartet auf:

[#|2010-04-20T05:00:00.015+0200|WARNING|sun-appserver9.1|javax.enterprise.resource.corba.ee.S1AS-ORB.rpc.transport|_ThreadID=19;_ThreadName=QuartzScheduler_Worker-2;IIOP_CLEAR_TEXT;localhost;18037;_RequestID=cd0aa279-4fbf-4de9-b1c8-c4f10db37d3b;|”IOP00410201: (COMM_FAILURE) Connection failure: socketType: IIOP_CLEAR_TEXT; hostname: localhost; port: 3700”
org.omg.CORBA.COMM_FAILURE: vmcid: SUN minor code: 201 completed: No

Dieser Fehler wird durch folgende Codezeile verursacht:

        InitialContext ic;
try {
    ic = new InitialContext();
    coreProxy = (HelloWorldLocal) ic.lookup("ejb/anwendung/HelloWorldBean");
    ic.close();
} catch (NamingException e) {
    e.printStackTrace();
}

Warum taucht dieser Fehler auf und wodurch? Dieser Fehler entsteht nicht aufgrund eines Fehler im Quellcode, sondern hat andere Gründe. Eine Domain eines Glassfish-Servers hat verschiedene Ports. Wenn neben der Domain 1, weitere Domains erstellt werden, ändern sich nicht nur die Ports 8080 und 4949. Es ändern sicht auch die Ports für den iiop-service und den jms-service. Gleichzeitg werden andere Namen für den Rechner vergeben. Bei mir wurde hinter den Namen des Rechners bei der Domain 2 “fritz.box” angehängt. Von diesen Änderungen ist aber auch die sun-acc.xml betroffen. Dort werden die Einstellungen für den “target-server …” verändert. Es bestehen nun verschiedene Lösungsmöglichkeiten:

  • Einstellungen auf die Einstellungen von Domain 1 zurück setzen
  • Die neuen Einstellungen an das Objekt InitialContext übergeben

Die Lösung eins ist entsprechend einfach. Die Werte für den iiop-service und für den jms-service in der “domain.xml” der Domain 1 müssen in die “domain.xml” der Domain 2 kopiert werden. Die dort vorhandenen Werte für beide Services müssen dabei überschrieben werden. Weiterhin muss die target-server Zeile aus der “sun-acc.xml” von der Domain 1 in die “sun-acc-xml” von der Domain 2 kopiert werden und die dort vorhandene target-server Zeile überschrieben werden. Die Lösung zwei ist dagegen ein wenig umständlicher. Zuerst muss gebprüft werden ob der neue Servername auch wirklich stimmt, da ansonsten der Server nicht anrufbar ist. Durch

Properties env = new Properties();
env.put(“java.naming.factory.initial”,”com.sun.jndi.cosnaming.CNCtxFactory”);
env.put(“java.naming.provider.url”, “iiop://0.0.0.0:3700”);

können verschiedene Werte festgelegt werden. Dies kann auch durch das einlesen einer Propertie-Datei übernommen werden. Durch folgende Codezeile werden diese Einstellungen dann gesetzt:

ic = new InitialContext(env);

Mögliche Einstellungen für Glassfish laut https://glassfish.dev.java.net/javaee5/ejb/EJB_FAQ.html#StandaloneRemoteEJB

Properties props = new Properties();

props.setProperty(“java.naming.factory.initial”,
“com.sun.enterprise.naming.SerialInitContextFactory”);

props.setProperty(“java.naming.factory.url.pkgs”,
“com.sun.enterprise.naming”);

props.setProperty(“java.naming.factory.state”,
“com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl”);

// optional. Defaults to localhost. Only needed if web server is running
// on a different host than the appserver
props.setProperty(“org.omg.CORBA.ORBInitialHost”, “localhost”);

// optional. Defaults to 3700. Only needed if target orb port is not 3700.
props.setProperty(“org.omg.CORBA.ORBInitialPort”, “3700”);

InitialContext ic = new InitialContext(props);

Mailman Cronjobs bearbeiten

In der Standardeinstellung wird jeden Tag um 8 Uhr morgens eine Email versendet, in der alle Emails gelistet sind, welche geblockt sind. Dies kann einfach editiert werden. Dazu muss im Ordner mailman, welcher sich bei OpenSuse z.B. im Verzeichniss /usr/lib/ befindet, der Order cron geöffnet werden. Dann muss die Datei “cronjob” mit

vim cronjob

geöffnet werden. Das folgende muss geändert werden:

0 8 *

Ersetzt man das durch folgendes:

0 /1

Wird jede Stunde eine Email versendet. Nach der Änderung muss Mailman neugestartet werden, damit dien Änderungen übernommen werden.

Flyspray

Flyspray ist ein Bug-Tracker und ermöglicht zu dem eine gute Verwaltung für Aufgaben für ein Projekt. Die aktuelle Version ist 0.9.9.6 und leider gibt es seit der letzten Version keine Neuigkeiten über eine Weiterentwicklung. Flyspray besitzt verschiedene Funktion, unter anderem hat der Anwender (je nach Rechte) bei der Erstellung eines Bugs bzw. Aufgabe folgende Möglichkeiten:

  • Aktuelle Version
  • In welcher Version es behoben werden soll/muss
  • Aufgabenkategorie
  • Aufgabentyp
  • Status der Aufgabe
  • Auswahl der Zuständigen Personen
  • Betriebssystem
  • Schweregrad
  • Priorität

Zu jedem Bug bzw. Aufgabe kann ein Kommentar mit Dateianhang hinterlassen werden und die Bugs bzw. Aufgaben werden durch ihre Versionen in der Roadmap dargestellt. Die Benachrichtigungsfunktion ermöglicht es, das individuell eingestellt werden kann wann die Projektteilnehmer benachrichtig werden sollen. Die Homepage von Flyspray und die akutelle Version sind unter http://flyspray.org zu finden.

UpDownloader mit Grails

Die UpDownloader Anwendung ermöglicht das hoch- und herunterladen von Dateien mit Anmeldefunktion. In der Version 1.0 ist der Anwender admin mit dem Passwort passw vorhanden. Dieser wird durch die Datei BootStrap.groovy automatisch beim Laden der Anwendung erstellt. In dieser Datei können auch weitere Anwender hinzugefügt werden oder auch Anwender um Rollen erweitert werden. Eine Möglichkeit zum Registrieren von Anwendern ist bisher nicht vorhanden. Der Grund dafür ist, dass diese Anwendung nur den Austausch von Dateien ermöglichen soll mit einem Sicherheitsschutz. In der Datei DataSource.groovy befinden sich die Einstellungen für die Datenbank. Daher wird eine HSQLDB benötigt. Der Inhalt von dataSource kann auch entsprechend verändert werden und dadurch eine Mysql, Oracle oder PostgreSQL Datenbank verwendet werden. Die Environment Production wird standardmäßig beim compilern des War-Files verwendet. Die Environment development wird standardmäßig, während des Aufrufs von grails-app verwendet. Eine Konfiguration für eine MySQL Datenbank sieht z.B. folgendermaßen aus:

dataSource {
pooled = true
dbCreate = “update”
url = “jdbc:mysql://localhost/anwendungsname”
driverClassName = “com.mysql.jdbc.Driver”
username = “root”
password = “”
}

Der anwendungsname muss natürlich durch den Namen der Anwendung ersetzt werden. Der Name der Anwendung wird in der Datei application.properties durch die Variable app.name bestimmt. Die Variable app.version gibt die Versionsnummer der Anwendung an. In der Anwendung wurden folgende Plugins verwendet und wurde mit Grails 1.1.1 erstellt: plugins.authentication=2.0.1 plugins.richui=0.6 plugins.hibernate=1.1.1 Die folgenden Zeilen müssen editiert werden, falls sie abweichen:

// set per-environment serverURL stem for creating absolute links
environments {
production {
grails.serverURL = “http://localhost:8080/${appName}"
}
development {
grails.serverURL = “http://localhost:8080/${appName}"
}
test {
grails.serverURL = “http://localhost:8080/${appName}"
}

}

Die Anwendung steht unter der GPL Lizenz.

Screenshot von UpDown Grails Anwendung Screenshot von UpDown Grails Anwendung

Webserver mit Plesk optimieren - Plesk Server Absturz verhindern

Der Vorteil von Plesk liegt in der einfachen Verwaltung eines Servers, aber dafür benötigt es viele Ressourcen und kann dazu führen, dass der Server mangels Speicher keine neuen Prozesse starten kann. Oft wird mit jeder Version mehr Speicher benötigt. Dies führt dazu, dass ein Update auf einem Server gemacht wird, welcher aus Speicher und Technischer Sicht, nicht genug Ressourcen dafür besitzt. Da bei einem Update die technischen Grenzen nicht geprüft werden, muss danach eine Optimierung statt finden. Aber auch ohne Plesk kann man seinen Server optimieren. Anti-Viren Software Bei Dr. Web kann z.B. durch Editieren der Datei “/etc/drweb/drweb32.ini” die Anzahl

MaxChildren = 10

Prozesse editiert werden und so Speicher und Auslastung reduziert werden. Welcher Wert optimal ist, kann man am besten selbst herausfinden. Danach durch “/etc/init.d/drwebd restart” Dr.Web neustarten. Plesk PHP.ini Plesk hat einen eigenen Webserver und daher auch eine eigene PHP.ini. Diese findet man unter “/usr/local/psa/admin/conf/“. Die php.ini in diesem Ordner betrifft nur Plesk und keine anderen Webseiten oder die normale php.ini im etc Verzeichniss. Dort kann man nun folgendes einstellen:

apc.shm_size = 10

Die Werte der anderen Variablen können auch geändert werden, z.B. wäre es sinnvoll den Memory Speicher zu reduzieren - da man Plesk nur für die Verwaltung benötigt und daher auch mit wenig Speicher auskommt. SPAMASSASSIN Durch Ändern der SpamSchutz-Einstellungen in Plesk lässt sich auch das ein oder andere optimieren. So können die Anzahl Threads pro Spamschutzprozess reduziert werden oder Greylisting deaktiviert werden. Sollte man aber sehr viel Spam bekommen, ist die Deaktivierung der Greylist nicht sinnvoll. Werte abfragen

cat /proc/user_beancounters

ps aux

Diese beiden Shell Befehle bewirken die Anzeige von Daten zur Auslastung und Speichergrenzen, -verbrauch etc. Apache optimieren In der Datei “/etc/apache2/server-tuning.conf” ermöglichen auch Änderungen eine Verbesserung der Auslastung. Welche Werte in dieser Datei am besten sind, hängt von den technischen Werten des Rechners ab und von den Anfoderungen an die darauf laufenden Webseiten.

Wechselnde Header Grafik

Damit eure Grafik täglich wechselt benötigt ihr einfach nur folgenden Code:

/images/ < ?php if (is_home()) { echo ‘imgm’.(date(“j”)).’.jpg’; } elseif (is_single()) { echo ‘img02.jpg’; } elseif (is_page()) { echo ‘img03.jpg’; } elseif (is_archive()) { echo ‘img04.jpg’; } else { */ echo ‘banner.jpg’; } ?>” />

Erklärung:

echo ‘imgm’.(date(“j”)).’.jpg’;

ruft für jeden Tag eine andere Grafik auf, welche z.B. den Namen “imgm01.jpg” oder “imgm12.jpg” trägt. Durch is_home() passiert das aber nur bei der Startseite, andere Seiten haben Standardmäßig andere Gafiken - durch die is_ Abfragen kann man dies beinflussen. Falls keines der Abfragen zutrifft, wird die Grafik “banner.jpg” genommen.

Core Plugins

In Wordpress soll es bald “Core Plugins” geben oder auch “Canonical Plugins” gennant. Diese werden getrennt von den anderen Plugins in Wordpress eingebunden, haben dafür aber auch die Standarts von Wordpress. https://slotsduck.com/slots-strategies-and-tips/best-bitcoin-casino-list-for-usa-players/ Unter http://wordpress.org/development/2009/12/canonical-plugins/ sind Vorschläge und eine Abstimmung zum Namen vorhanden.