Willkommen auf der privaten Homepage von Johannes Jarolim, Salzburg, Österreich. Welcome to the private homepage of Johannes Jarolim, Salzburg, Austria, Europe.
Vierundzwanzig Artikel in der

Kategorie Know-how-articles

@font-face und Mobilbrowser

Ein kleiner Tip: Manche Mobilbrowser (Beispiel: Der Standard- Systembrowser auf dem Samsung Galaxy Tab 10.1) haben Probleme mit relativ (zur Position des Stylesheet) verlinkten Font-Dateien.

Die Browser sind anscheinend nicht in der Lage, die Font-Dateien zu finden und weichen bei der Darstellung auf den definierten Fallback bzw. Systemfonts aus, was in manchen Layouts nicht so nett ausschauen dürfte ;-)

Beispiel: Die Verzeichnisstruktur einer kleinen Seite schaut folgendermaßen aus:

/
/index.html
/css/style.css
/css/fonts/coolfont.eot
/css/fonts/coolfont.woff
/css/fonts/coolfont.ttf
/css/fonts/coolfont.svg

Wir binden die Schriftart in der style.css mit CSS-Konformen Pfaden ein (relativ zum CSS-File), Überschriften der Kategorie 1 sollen in Coolfont dargestellt werden – Als Fallback-Schriftfamilien haben wir arial und sans-serif definiert.

@font-face {
  font-family: 'CoolFont';
  src: url('fonts/coolfont.eot?#iefix') format('eot'),
       url('fonts/coolfont.woff') format('woff'),
       url('fonts/coolfont.ttf')  format('truetype'),
       url('fonts/coolfont.svg#CoolFont') format('svg');
}

h1 { font-family: CoolFont, arial, sans-serif; }

Ergebnis: Desktopbrowser stellen die Schriftart korrekt an – der Browser auf meinem Galaxy Tab stellt die Überschriften in arial an.

Gibt man stattdessen absolute Pfade vom DocumentRoot der Seite aus gesehen an, funktioniert es:

@font-face {
  font-family: 'CoolFont';
  src: url('/css/fonts/coolfont.eot?#iefix') format('eot'),
       url('/css/fonts/coolfont.woff') format('woff'),
       url('/css/fonts/coolfont.ttf')  format('truetype'),
       url('/css/fonts/coolfont.svg#CoolFont') format('svg');
}

Hope this helps: enjoy!

Extreme slow ImageMagick on VPS with ubuntu

Recently, i had to update my virtual private server at hosteurope (one of the big hosting players in germany)  and got a machine with ubuntu release 10.04 and plesk 10.4.4 installed.

Problem

Imagemagick was very slow – converting even small images needed alot processing power and a lot of time. This wasn’t acceptable since this high load was rendering my server useless after uploading a new image or clearing the thumbnail cache on my YAPB-Installation. This wasn’t the imagemagick behaviour i was used to expierience:

# time convert -resize 100x100 source.jpg target.jpg

real    0m7.693s
user    0m7.615s
sys     0m0.024s

Analysis

After searching for the phenomen for quite a time i stumbled over this article – It seems that some library is buggy thus thwarting out all image conversion processes on my machine.

Solution

As proposed, i’d tried to recompile imagemagick with the option –disable-openmp. Sadly, this wasn’t exactly an easy job since the imagemagick resisted to work properly afterwards quitting resize-jobs with the error message “no code delegate for this image“. I’m not such a linux-talker after all: fine.

Since i needed some time to figure it out – here a little step-4-step tutorial to install all needed delegates and to compile imagemagick. The actual directories may have to be adapted since i installed this at 11-2011 downloading ImageMagick 6.7.3-7. Please note that you may also need to prefix most of the bash-commands with the command “sudo” if you’re not logged in as root (which is probably the more secure way to do things on a linux bash).

Update sources.list

First, i needed to update my sources.list so i could install the needed delegates via apt-get:

# vi /etc/apt/sources.list

There i inserted a new line for my distribution

deb-src http://de.archive.ubuntu.com/ubuntu lucid main restricted universe multiverse

If you’re searching for the entry needed for your own distribution, have a look on this page:
http://wiki.ubuntuusers.de/sources.list (german page)

Install all needed infrastructure

After that i startet an update and installed all needed components for an imagemagick-compilation this way:

# apt-get update
# apt-get install build-essential
# apt-get build-dep imagemagick

The third step also neatly installed all needed delegates for my everyday work like libjpeg and libpng for the according support.

Download and compile ImageMagick

After installing the needed infrastructure i went to my root user folder, downloaded Imagemagick, configured and compiled it.

# cd ~
# wget  ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick.tar.gz
# tar xvfz ImageMagick.tar.gz
# cd  ImageMagick-6.7.3-7
# ./configure  '--prefix=/usr' '--mandir=${prefix}/share/man' '--infodir=${prefix}/share/info' '--with-gs-font-dir=/usr/share/fonts/type1/gsfonts' '--with-magick-plus-plus' '--with-djvu' '--enable-shared' '--without-dps' '--without-fpx' '--with-perl-options=INSTALLDIRS=vendor' 'CFLAGS=-g -O2' 'LDFLAGS=-Wl,-Bsymbolic-functions' 'CPPFLAGS=' 'CXXFLAGS=-g -O2' '--disable-openmp'
# make install

I did get the options for ./configure from the lame version already being installed on my system:

# /usr/bin/convert -list configure

The only thing i did was to remove all X11-Options (my VPS is a headless system without GUI) and adding the initially recommended –disable-openmp option.

Replace the old version

After that, i had a newly compilated version of ImageMagick lying under ~/ImageMagick-6.7.3-7/utilities – Last step was to backup the existing version of convert and to copy the new version to /usr/local/bin:

# cd /usr/local/bin

There already was a convert – i renamed it:

# mv ./convert ./convert-old-6.5.7-8

Now i copied the new version into the location

# cp ~/ImageMagick-6.7.3-7/utilities/convert .

Enjoy the beauty of fast image resizing

Voila – Now, convert was running again in acceptable speed:

# time convert -resize 100x100 source.jpg target.jpg

real    0m0.039s
user    0m0.023s
sys     0m0.016s

Internet Explorer, Cross-Domain-iFrames and unusable Select Boxes

Microsoft has done it again: Just noticed that some customers aren’t able to open select boxes in some iFrames when using IE7.

After some investigation and prototyping i came up with the following:

Problem

Select boxes in iFrames may not be opened anymore.

Analysis (short)

Microsoft has busted iFrame interaction in IE7 via windows update.

Analysis (long)

With IE7, Microsoft has introduced a security concept to deal with Cross-Frame-Scripting: http://msdn.microsoft.com/en-us/library/ms533028%28v=vs.85%29.aspx

This security layer prevents JavaScript from interacting between the iFrame-Scope-Border if the iFrame gets hosted on another domain as the including page.

After running Windows-Update, those security restrictions also covers basic interaction with Select-Boxes: If served via another domain, Internet Explorer circumvents users to open Select-Boxes in iFrames.

If we set up a valid document.domain constallation between container page and iFrame, Select-Boxes may be used correctly again.

Conclusion

Opening Select-Boxes with the mouse has nothing to do with Cross-Frame-Scripting imho: This is a major bug in Internet Explorer 7.

Workarounds

  • Serve iFrame content via the same domain as the container page
  • Serve iFrame content via a subdomain of the domain serving the container page. Correctly set up document.domain on both pages (container, iFrame)

Update 2011-11-22

Seems this was caused by the Cumulative Security Update for Internet Explorer: October 11, 2011.

LOL: Microsoft itself advices to update to IE8/IE9 or to install a hotfix for IE7 as described in Knowledgebase Article 2628724 – That means your visitors have to install a browser-hotfix to use a normal iframed page correctly.

Office 2010 Trial-Sackgasse

Wie das Leben so spielt bin ich kürzlich in eine böse Microsoft-Office Falle ohne Happy End gelaufen: Ein guter Freund muß am nächsten Tag eine Projektpräsentation halten und benötigt dazu Microsoft Visio 2010. “Kein Problem“, denkt er sich: “Heute Abend installiere ich eine Testversion und nach der Präsentation kaufe ich die Vollversion: Visio braucht man ohnehin.

Denkste: Nach Abschluß der Installation der Trialversion erscheint folgende Fehlermeldung:

Fehler 25004. Der eingegebene Product Key kann auf diesem Computer nicht verwendet werden. Die Ursache hierfür besteht höchstwahrscheinlich in zuvor installierten Office 2010-Testversionen. (Systemfehler -1073422306)

Voraussetzungen

Ich finde via Teamviewer folgende Software installiert:

  • Windows7 64Bit
  • Office 2010 Professional (Lizenziert)
  • MS Project 2010 (Ursprünglich 30-Tage Trial; Danach MSDN-Version; Danach mit Voll-Lizenz)
  • Unvollständig installiertes MS Visio Premium 2010 Trial mit offener Fehlermeldung

Erfolglose Lösungsversuche

Deinstallation 1:

  • Saubere Deinstallation des kompletten Office 2010
  • erneute Installation von Office 2010
  • Erneute Installation Visio Trialversion
  • Fehler tritt erneut auf

Deinstallation 2:

  • Deinstallation Office 2010
  • Deinstallation von MS Project
  • alles wieder draufinstallieren
  • Fehler tritt erneut auf

Anscheinend wird bei der Deinistallation von Microsoft Office nicht alles entfernt: Es bleiben die für den Fehler entscheidenden Informationen im System (registry?) zurück.

Deinstallation 3:

  • Entfernungsversuch aller Office-Komponenten mit einem Microsoft-eigenen Tool: Microsoft Fix-It.
  • Das Tool funktioniert nicht: Deinstallation schlägt fehl

Inzwischen bekomme ich Angst, mit den Aktionen das ganze System langsam aber sicher zu vermüllen.

Deinstallation 4 und 5:

  • Deinstallation Office 2010
  • Deinstallation von MS Project
  • Variante (a): Entfernung aller Office-Einträge lt. Anleitung des Microsoft Supports
  • Variante (b): Entfernung aller Office-Einträge in der Registry lt. einer ziemlich plausibel klingenden Anleitung
  • Installation Visio
  • Fehler tritt erneut auf

Finale “Lösung” und vorläufiges Fazit

Plan B: Nur der kurzfristige Erwerb einer Downloadversion von Visio konnte das terminliche Dilemma lösen: Diese konnte nach einem Download bis in die frühen Morgenstunden vollständig installiert werden; Die Präsentation konnte gehalten werden.

Microsoft vs. Systemadministrator: 1:0

Mein vorläufiges Fazit ist: Die Mischung aus mehreren Lizenztypen (Trials, MSDN, Kaufversionen) zwingt das Microsoft Lizenzierungsmodul dauerhaft in die Knie: Auf dem Rechner läßt sich keine Microsoft Trial mehr installieren.

Die Neuinstallation des kompletten Betriebssystems ist Aufwandsmäßig keine Option: Ich sehe derzeit keinen Weg, Microsoft Office Rückstandsfrei zu entfernen.

Besonders peinlich: Selbst Microsoft-eigene Tools aus der Knowledgebase funktionieren nicht. Ratschläge des Microsoft Supports bzgl. der Entfernung bestimmter Registry Einträge bringen ebenfalls nicht den gewünschten Erfolg.

So gut alles läuft, wenn es läuft – Microsoft hat nach wie vor das Potential, Computernutzer und Administratoren an Ihre Grenzen zu bringen.

Ersatz für Aktenkoffer unter Windows 7

Man mag es kaum glauben, aber es ist teilweise relativ schwer, einen Ersatz für simple Microsoft Tools aus dem Jahre Schnee zu finden. Ein sehr gutes Beispiel: Der Microsoft Windows Aktenkoffer: Den gibt es schon seit Windows 98 – Nach jahrelanger Unterstützung schaut es mit dem Aktenkoffer nach dem Umstieg auf Windows 7 nicht mehr so lässig aus.

Da ich hier etwas länger für einen Bekannten recherchieren mußte, hier eine kleine Zusammenfassung, falls noch jemand vor dem Problem steht.

Das Problem

Der Aktenkoffer braucht unter Windows 7 nach dem ersten Öffnen teilweise ewig, bis er den Verzeichnisinhalt anzeigt. Nach einigen Synchronisierungen mit einem Windows XP – Rechner öffnet sich der Aktenkoffer gar nicht mehr: Alle Änderungen sind verloren.

Die Aufgabe

Wir suchen nach einem gleichwertigem Ersatzprogramm zur Synchronisation ein oder mehrere Verzeichnisse zwischen zwei Rechnern im selben Netz.

Folgendes sollte das Programm können:

  • Einfache Oberfläche (GUI), in der mein Bekannter die Synchronisationsjobs selber verwalten kann
  • Reine Kopie (Backup) auf externe Verzeichnisse/Freigaben ohne Dateiabgleich
  • Verzeichnis-Synchronisation
    • Das Programm muß bemerken, ob sich etwas geändert hat und die Änderungen nachziehen, falls keine Konflikte bestehen
    • Bestehen Konflikte, soll das Programm darauf hinweisen und auf eine Entscheidung des Benutzers warten
    • Das Programm soll nicht nur auf das Dateiänderungsdatum schauen, sondern wirklich wissen, ob sich auf einer oder beiden Seiten Änderungen seit dem letzten Abgleich ergeben haben.
      Das ist in unserem Fall das wichtigste Kriterium überhaupt, da der Benutzer auf beiden Maschinen arbeitet. Bestehen Unterschiede in Dateien, liegt ganz klar ein Konflikt vor und muß manuell behoben werden. Schaut die Software hier nur auf das Änderungsdatum, gehen eventuell geschäftsentscheidende Daten verloren.

Um es vorwegzunehmen: Kaum eine der getesteten Pakete bemerkte wirklich, wenn sich eine Datei an beiden Orten geändert hat.

Die Kandidaten

Als mögliche Kandidaten fand ich während meiner Recherche und unserem Ausprobierabend folgende Softwarepakete:

  • MicroSoft Offlinedateien
    Dieses Feature ist standardmäßig bei Windows7 dabei und wird als Nachfolger des Aktenkoffers gehandelt. Wir mußten uns leider gegen Offline Folder entscheiden, da alle Daten standardmäßig in einem speziellen Folder und einem proprietären Format auf Festplatte C abgelegt werden. Da wir in unserem Falle für das System eine kleine, aber flinke SSD einsetzen, geht das bei den benötigten Datenmengen gar nicht.
  • MicroSoft SyncToy
    Eine inoffizielle Software von Microsoft Mitarbeitern – Nette Oberfläche und gratis.
  • Archersoft DirSync
  • CleanSync
  • Create Synchronicity
  • DirSync Pro
  • Allway Sync

Die Teststellung

Um die einzelnen Softwarepakete zu testen, erstellten wir zwei Ordner: Einen auf der Windows XP Workstation und einen auf dem Windows 7 Notebook. Der jeder Software lief in mehreren Schritten:

  • Dateiabgleich Ordner1, Ordner2 (leer)
  • Dateiabgleich Ordner1 (leer), Ordner2
  • Dateiabgleich Ordner1, Ordner2 (Eine Datei geändert)
  • Dateiabgleich Ordner1 (Eine Datei geändert), Ordner2
  • Dateiabgleich Ordner1 (Date geändert), Ordner2 (gleiche Datei geändert)

Fazit

Nur Allway Sync erkannte tatsächlich Änderungen an einer Datei auf beiden Seiten und löste einen Konflikt aus. Alle anderen Pakete schauten nur auf das Änderungsdatum der Datei und kopierten ungefragt die neuere Datei über die ältere.

Blackberry ohne Datenplan (BIS) bei A1/BOB nutzen

Ich möchte hier ein Thema zum Abschluß bringen, dass mich seit einigen Tagen auf Trab hält: Wie bekomme ich mein Blackberry Handy ohne Blackberry Internet Services (BIS) bei einem günstigen Provider zum laufen?

Mehr lesen …

Typo3 – Eigene Content Elemente in Frontend Plugin ausgeben

Manchmal benötige ich den Output von Content Elementen in meinen Frontend Plugins, die es in gewünschter Form in der Tabelle tt_content nicht gibt. Wie nutze ich nun die Tabelle tt_content in meinem Plugin möglichst effizient zur Ausgabe von schon vorhandenen Typo3-Contentelementen?
Mehr lesen …

Typoscript bzw. TS-Files parsen in Typo3 Frontend Plugin

Wer schon immer mal selber TypoScript aus einem File bzw. direkt aus einem String verwenden wollte, um zB. selber Contentelemente zu rendern: Hier ein kleines Code Sample:


$typoscript = '
  10 = TEXT
  10.value = Hallo Welt!
';

$parserInstance = t3lib_div::makeInstance('t3lib_tsparser');
$parserInstance->parse($typoscript);

$output = $this->cObj->COBJ_ARRAY($parserInstance->setup);

Voila: Wir haben mit ein paar Zeilen Code ein COA-Objekt instanziert, konfiguriert und den gerenderten Inhalt in der PHP-Variable $output abgelegt.

Typo3 HMENU zeigt Unterseiten nicht an

Kurztipp: Zeigt ein Typo3 HMENU bestimmte Unterseiten nicht an, einfach mal überprüfen ob die fehlenden Einträge eventuell Shortcuts sind, die allerdings keinen Shortcut eingepflegt haben… hehe.

Typo3 Contentelemente an Unterseiten vererben

Wer in einem Seitenbaum zentral Inhalte einpflegen möchte und diese automatisiert auf Unterseiten anzeigen möchte, hat mehrere Möglichkeiten. Neben Datensatzverlinkungen und TypoScript Referenzierungen finde ich die Möglichkeit der automatisierten Vererbung via KB Content Slide Plugin (kb_cont_slide) sehr elegant.

Mehr lesen …

 1 2 3 »