SGML Filter for SDL Studio 2017 and/or WorldServer 11.1

To create a filter for SGML files can be a difficult and expensive task, if you don’t know how to handle those files. I can tell this from experience. First I made the misinterpretation that SGML files are similar to XML files and tried to build something around an XML filter. I didn’t work! Why? Because the SDL tools are very strict in this matter and since the SGML might have the same structure as a XML file, the header and the doctype declarations are not the same at all. So the tools denied the creation of such a filter.

The next choice was my favorite: The RegEx. With the RegEx capability of Studio and/or WorldServer you can create filters for almost any files. But unfortunately in this case the file was so strange structured with returns in the tags, that this also did not work or just with some strange workarounds which also meant to have only a 99% solution. And when it is about translation handling, 99% is not good enough.

Only when I pointed my problem to the SDL support, they came up with another solution and it worked.

The solution is a HTML5 filter. It can do much more than HTML. When you create a new HTML5 filter in SDL Studio 2017.

You start with creating a [New…] filter and choose HTML.

Give the files a unique name, a unique file type identifier and add the correct file dialog wildcard expression (e.g. *.sgm)

Choose „Define HTML elements based on SGML…“ and point it to a reference file.


SDL Studio identifies automatically all elements from the reference file. Here I think SDL did a great job!  Go to the next window. You just need to define which elements are translatable and which ones not. Just click on the values and choose the correct one.

Open the reference file, copy the doctype tag and paste it into the dialog.

Leave it as it is.

I choose that everything stays as it is. So „preserve“ and „Do not change“ are our friends.

I choose that everything stays as it is. So „preserve“ and „Do not change“ are our friends.


Now the filter is working and SMGL files can be processed.




France is in the Air and Journeys full of inspiration

My recent business trip to China is over and I disappointed me so much that I need to write down my experience.

Actually I was looking forward to my trip, since I decided to choose some other airline then Turkish, which are great, but right now I’m a bit too afraid to travel over Istanbul. As always my company only pays travels in economy class, which are quite painful on long-haul flights of +11 hours. So we looked at some offers and I decided that the combination of traveling eastbound with Air France and westbound with KLM looked most promising. Finally, I can fly on an Airbus 380 and on the way back take maybe one of the last times the old lady, the Boing 747.


I’m aware that you can always pay a surcharge to get a preferred seat. So when the online check-in opened I payed some extra money from my pocket to get a better seat in the Airbus 380. For the short trip from Zurich to Paris, I did not bother.

I arrived on time at the airport and checked in. What I realised, was the they were particularly paying attention about the weight of my hand luggage. But since my suitcase was 10 kilos below the max, they accepted a 2 kilos plus on my hand luggage. How nice of the check-in crew. But to move 2 kilos to my main luggage would also not have been a problem. I rushed to the gate and had some dinner at the airport. So far so good.

Unfortunately, at one point the same lady from the check-in – now working at the gate – informed all the guests, that the plane would have about 20 min delay since late arrival of the previous flight, but all connection flight still could be made. I’ve got a quite positive attitude, but that made me already a bit nervous. The plane left Zurich about 20 to 30 minutes to late, but I was still early enough to catch my connection flight. Just before landing I spoke to the flight attendant and she confirmed that we still would be able to catch the flight and somebody would be waiting at the gate and accompany us to our gate. So far so good, again. We landed and taxied to the Gate, where the plain suddenly stopped. After standing 5 minutes on the same spot, the captain informed us, that we could not get to the gate, because another airplane would still be there. I started to worry and also questioned myself why a plain was on our spot, since this spot should have been empty for at least 30 minutes and why there are no other gates available. After 15 to 20 minutes, I did not time it exactly to other plain left and we could finally get to the finger dock.

Of course when I disembarked the airplane, there was nobody waiting for us. So all long-haul passengers started to run down the unbelievable long corridors trying to get the flight.

When I finally arrived at the gate, I could see my Airbus 380 still docked. But the French ground crew told me that the boarding was finished and I could not enter the plain anymore. F*%@! They just mentioned that I could anyway not have boarded the flight, since my luggage did not make it. C’mon you can take someone else for a ride, since when is every luggage going together with the owner? Or what happens with lost luggage? Anyway, the crew walked with us to the transfer desk in a speed of a turtle. Once I arrived there, I got a voucher for the IBIS Hotel at the airport. Since I was running almost through half of the airport, I ask how I could get my luggage to grab some fresh clothes. The ground crew answered to me very unsympathetic that the luggage could not be retrieved since the people responsible for this already stopped working. Gimme a break: It was around 23:30 and not 2 o’clock in the night. I only got an overnight box with some sanitary products and a white t-shirt in a lousy quality. The t-shirt was see through so cheap fabric was used and could only be used as a pyjama top. Thankful I’ve had my medication in my hand luggage. They offered some food, but as it was not ready and I would have had to wait for it, so I gratefully rejected it. Air France also told me, that I was already booked on the next flight the next day. So instead of arriving on Monday afternoon and just getting to the hotel to sleep and start my meetings on Tuesday. I would arrive on Tuesday morning, stinking und tired and had to drive directly to work to be able to start meetings after the lunch break. Needless to say all the troubles with rebooking drivers, hotels and meetings. Of course there were no more preferred seats available and to get my money back and also to get compensation, I would need to fill out a form on the Air France website.

The way out of the terminal and to the hotel at the next terminal took more that 30 minutes. I felt like in a labyrinth. I arrived at 00:05 at the Hotel, what was ok, then the voucher was only valid after 00:00 o’clock. I think the airline get then better rates… But at this time all the restaurants or bars where closed. The hotel room has another story to tell. I did not expect much from a worn down IBIS airport hotel. Living from stranded guests, the standards have not to be high to get customers… One thing I need to mention. The toilet! I don’t know what kind of stuff the architect or the sanitary planners have smoked, but how should you be able to sit on the toilet if it’s mounted next to a bent wall. Getting narrower at the front. Hotel guests have to sit in a 45° angle on the toilet which is very uncomfortable since my but is designed symmetrically and has no 45° offset. After a pretty unspectacular night, I had breakfast a little bit late, but still one hour before closing. But a lot of the products had gone, empty bowels were missing and the mess on the table showed that many people had missed some connection flights. But I also survived this and for the emergency I had some “Imodium” with me. I just did not expect to maybe have to use it in Europe…

I also had the time to fill out the web form on the Air France website and I must say Air France does the best to make it as difficult as possible to find the information about compensation. Just “easy” enough that you can not say that it is intentional so difficult to find. But elderly people would have had no chance. So I’m asking for 600€ compensation (as the EU regulations say) and the 44 CHF for the preferred seat.

Finally, I got back to the airport and went to the pass control or better to say to the hand luggage checker before it. They wanted to weight my hand luggage and told me it was to heavy and I had to put it on the plain. Only after I insisted, asking for the manager and told them that it was ok in Zurich, since my other luggage was 10kg below the allow maximal weight, and I was forced to leave the airport since Air France had some operational problems, I could enter the passport control with the 14 kg of hand luggage .

The flight then was ok, when you like to be in a tin can. It was not more an Airbus 380, but a Boing 777. The ratings at for the 777 were not brilliant. The inflight entertainment program was not overwhelming, but I also could watch some French classic movies with J.-P. Belmondo from my childhood. What Air France did really well is the safety instruction movie. If you don’t know it, watch in on YouTube. Best so far. I also would recommend the Air France management to travel a long-distance-flight in economy class. But not in a brand new plane, instead in a nicely used configuration. I bet you would feel the same pain on your but, as we all do, because the seats are worn out and you can feel some metal bars. Sitting and sleeping in this chair for over 11 hours is torture.

So finally I arrived in China and even my luggage arrived.



New airline, new luck. Nope.

It started already when I tried to check-in online around 23 hours before the flight. The best upgrades were already gone. So the only two premium seats available were at an emergency exit. So I reserved one of those and proceeded to the check-out to pay for it. Unfortunately, the booking system had an error and could not process my booking or the chance of the seat. I was sitting in a middle seat on the side, actually 37J. A nightmare and I was not looking forward to my flight. After my terrible experience with Air France I had now some troubles again, even before the journey started. I don’t know if I have to blame KLM for the problems or the Chinese firewall, but the online check-in didn’t work properly.

Arriving at the airport, of course all preferred seats had gone. What else was I to expect? Also to mention is that KLM is leaving at Terminal 1 at Pudong Airport. That’s the creepy pre-version of the developed Terminal 2. So after going through multiple security checks (my luggage got scanned 3 times) and about 10 wipes for explosive material. I got to the gates of Terminal 1. My plan was to diner there since my flight would only leave in about 3 hours. Well that’s what I normally do in Terminal 2. But you can only diner, if you can find food you like or restaurants which do not look like food poisoning. It looked as from this terminal only some local flights to Macao, Korea and other small Asian countries left and of course KLM to Amsterdam. This is why the food was so lousy. Maybe they had no space for a 747 on Terminal 2. I will never find out. At the end I got an overpriced and slightly burned sandwich and a mineral water. And no, Starbuck is not a restaurant, it’s a coffee shop. So they do not count! The last security control actually confiscated my Victorinox Swiss Card which I have with me since 10 years. Also a few times before to China in my hand luggage. Now they decided that a knife with a 2 cm blade and a scissor with even a shorter blade was a risk for the safety. They told me that I could go back to the check-in and put it in the normal luggage. But since my luggage was already checked-in, it would have meant to be in a second luggage for a nice surcharge…

Back to the boarding process. When boarding the plane, the ticket got controlled 3 times on 3 different check-points. Well it looks like the over 1 billion Chinese need to be occupied.

Finally I sat in the airplane. Seat 37J, in-between two other adults. Then the next shock. The seat was even worse than the one at Air France. Really worn out. By the way KLM, if you wonder which plane it was, it was the “Hongkong”. Here the same advice for the management. Fly 11 hours in economy class and you will learn what agony is. The seat also did not get back to the upright position itself after pressing the button on the armrest. You had to pull it back. That’s how worn our this seats are. The next surprise was the electronic box for the entertainment system which was placed unter the middle seat in front of me. So off we go with another 5 cm of my legspace.

I touched the screen of the entertainment system and nothing happens. Until I found out this was no touchscreen. I needed to grab a remote control out of my armrest to control it. How old fashioned. Why did KLM stay the early 2000’s? After getting an understanding of the system and learning that the buttons need to be pressed really hard to work, I got very disappointed about the available movies. I have not seen such a bad and small collection in years. But this must be a problem of the old entertainment system… So I finally I found a movie I was willing to watch. Only to realize that the headphone output of Seat 37J had a loose contact and a naughty beep on it, like there was something wrong with the potential (–> service advice note for KLM!). So I decided to shut down the system and use my own entertainment system. As a frequent traveller, you are prepared for something like this. But if I had not my own device with me, it would have been a tragedy. Naturally this old entertainment system did also not supply a USB port to charge my phone. But also for this I was prepared with a power pack. And now you’re wondering why my hand luggage is so heavy. By the way from my next travel on, there will also be a fresh set of clothes. I learned my lessons from Air France. As always the crew did it’s best to make us the passengers happy.

We arrived on time in Amsterdam even we drove around 15 minutes on the tarmac. At least the captain had fun when he mentioned, that the runway will be between Shanghai and Amsterdam. Arrived at the airport, there was a 30 minutes journey to the new gate for the flight to Zurich.

Boarding time had already passed for a few minutes, when the ground crew told us to change to another gate, due to technical problems of the airplane. My thoughts were just that this can not be true. Instead of boarding the plane by a finger dock, we got a sightseeing bus ride to the tarmac were the replacement airplane was waiting. We entered the plain and when the flight attendant started to close all the overhead lockers, I asked her if the boarding was complete and I could change to the seats on the emergency exit one row before me, since they were empty. Her answer shocked me. She told me that this were preferred seats and you could only sit there if you pay for it. I replied to her if safety or economics are more important, since there would be nobody to operate the emergency exit door. She froze and I could see that she became aware of the meaning of my statement. But only after she asked the chief purser, I was allowed to change seats. Dear management of KLM: Selling emergency seats for profit is understandable, but how can you make sure that people will be there to operate the doors in an emergency? Above you can see how the seats looked during the flight.

The flight itself was unspectacular. Positive to mention was the captain who told us before we started what the reason for the change of the airplane was. This was for me very professional. We landed with a bit of delay in Zurich and with this I could close my one-week journey.

Almost. After I landed, I saw the reply from Air France about my compensation and the lost money for the preferred seat. A standard answer declining everything because there were extraordinary circumstances. I will not accept this and will fight for my rights. I don’t think a occupied finger dock is an extraordinary circumstance. I always got my rights until now. Even with Easyjet! So let’s put down the coating…



Hinter der grossen chinesischen (Fire-)Wall

Kürzlich war ich für eine Woche in China. Das Land ist ja dafür bekannt, dass der Internetverkehr kontrolliert, resp. teilweise geblockt wird. 2008 war ich das letzte mal in China, dort war aber Social Media bei mir noch kein Thema.
 Meine Erkenntnis über meinen China-Trip diesen Monat hat mich aber selbst erstaunt. Es waren nämlich nicht Facebook und Twitter, welche ich in dieser Woche vermisst habe, sondern Google oder irgendeine andere westliche Suchmaschine. Erst dort wurde mir bewusst, dass ich jeden Tag -zig Mal auf Suchmaschinen zugreife und bei der täglichen Arbeit nur schwer darauf verzichten kann.
 Was mir auch noch aufgefallen war, ist dass wir aber prinzipiell viel näher zusammengerückt sind. Heute ist Facetime oder Skype aus der hintersten Provinz möglich. Und plötzlich wird die Welt zu einem kleinen Dorf.

SDL WorldServer: XML-Transformation über XSLT

WorldServer hat bereits eine automatische Aktion “Apply XSLT”. Diese sollte – wie ihr Name es verspricht – eine XSLT-Transformation an den Quelldateien durchführen. Leider klappt es aber nicht auf Anhieb, denn der Schritt ist nur als ‚Sample‘ konzipiert, das je nach Bedürfnis angepasst werden muss; in der Regel möchte SDL solche Anpassungen über den Professional Service anbieten.

Es geht aber trotzdem. Das Hauptproblem liegt darin, dass Ausgangsordner für sowohl Input- wie auch Output in der Action “Apply XSLT” nicht identisch sein dürfen. Deshalb muss zunächst die unkonvertierte Datei in den Zielordner kopiert werden und dann aus dem Zielordner in den Ausgangsordner mit XSLT zu transformieren. Das scheitert aber daran, dass es im Code der Automatic Action “Apply XSLT” eine Klausel gibt, die das Auslesen aus dem Zielordner und das Schreiben in den Ausgangsordner verhindert. Hier der entsprechende Code:

* Sanity check the params: don’t let the user read from target
* and write to source.
if (readFrom.equals(TARGET_VALUE) && writeTo.equals(SOURCE_VALUE)) {
return new WSActionResult(WSActionResult.ERROR,
„Invalid configuration: action can’t read from target “ +
„and write to source.“);

Die Entwicklung von SDL hat mir (Danke für den super Service!)  die Automatic Action “Apply XSLT” für die SDL WorldServer Version  so angepasst, dass das Auslesen aus dem Zielordner und das Schreiben in den Ausgangsordner erlaubt ist. Laut Aussage vom Support soll dies in zukünftigen Versionen von WorldServer dann bereits so “gefixt” sein. Für die aktuelle Installation habe ich dafür vom Support eine neue Automatic Action “Apply XSLT” bekommen (hier).

Die Lösung besteht nun darin vor der XSLT-Transformation zunächst die Ausgangsdatei aus dem Ausgangsordner mithilfe der Automatic Action “Copy source asset to target” zu kopieren.



Und anschliessend mit “Apply XSLT“ mit den Werten ‚Load XML from‘=Target und ‚Save result to‘=Source zu konvertieren.

Wie man die XSLT erstellen, erläutete ich hier nicht. Interessant ist aber zu wissen, welche Xalan-Version WorldServer dafür verwendet und dies zumindest bei Version 11 auch noch so bleiben wird.



Als der Workflow soweit funktionierte, wollte ich auch noch die Validität der XML-Datei überprüfen, da diese “manuell” aus einer Textdatei zusammengebaut wird.

Um dies zu Prüfen wurde die Automatic Action “Validate XML” in den Workflow eingefügt und eine entsprechende DTD programmiert.


Leider reicht der Verweis zur DTD in der Action nicht aus, sondern es muss auch noch die DTD im XML eingefügt werden (leider). In unserem Fall sieht die XML-Datei wie folgt aus:

<?xml version=“1.0″ encoding=“UTF-8″?>
<!DOCTYPE mxml [





Ein Workflow, welche die Daten vom Quellverzeichnis in das Zielverzeichnis kopiert, die Gültigkeit der XML-Datei(en) überprüft und danach eine XSLT-Transformation durchführt. Nach der Übersetzung werden die Dateien auch nochmal durch eine XSLT-Transformation gelassen, mit dem Ergebniss, dass der Auftraggeber eine Textdatei zurückbekommt.


Dieser Aufwand wird betrieben, da wir in XML-Dateien mit dem Attribut maxlength=”xx” die maximale Länge des Strings im Übersetzungsprozess einfordern können. Dies ist hilfreich bei Software-Strings. In einer Textdatei (wie wir diese aus einem alten Entwicklugnstool bekommen)  kann diese Information aber nicht hinterlegt werden. Deshalb muss aus der Datei zuerst mit dem Einfügen eines XML-Headers und –Footers eine pseudo XML-Datei erzeugt werden, damit diese dann über eine XSLT-Transformation in die passende XML-Datei umgewandelt werden kann.

Wieso ein 2012er MacBook Pro mein idealer Laptop ist

Der Beitrag wurde inspiriert durch den Beitrag auf „Why is Apple’s ancient 2012 MacBook Pro still so popular?“.

Nun ist es so, dass ich seit beinahe 6 Jahren das mittlerweile „veraltete“ 13-Zoll non-Retina MacBook Pro (MBP) verwende. Erst im Dezember 2015 habe ich nochmals ein neues Gerät der gleichen Bauart gekauft, das von Apple selbst als „Mitte 2012er-Modell“ bezeichnet wird.

Jetzt kann man sich fragen, wieso ich einen Laptop, der schon über 3 Jahre alt ist, überhaupt noch kaufe und dafür den Originalpreis bezahle, respektive wieso Apple so altes Zeugs überhaupt noch verkauft. Bin ich nun zum verblödeten Apple-Fanboy geworden, der für alles was einen angefressenen Apfel drauf hat, überteuerte Preise bezahlt?


Wieso Apple den 13-Zoll non-Retina MacBook Pro noch im Sortiment hat und wieso dieser immer noch massenhaft verkauft wird, ist ganz einfach: Das Gerät hat als letztes MacBook Pro noch ein integriertes DVD-Laufwerk und lässt sich einfach erweitern. Die Argumentation zu diesen Punkten findet man im Beitrag von cultofmac. Der schlechte Bildschirm kümmert in der 13-Zoll-Grösse (Kleine) die wenigsten Benutzer und deshalb sind die Kunden auch bereit 200 Franken/Euro mehr dafür als für das billigste MacBook Air zu bezahlen.


Wieso ich weiterhin dieses Gerät verwende? Nun zuerst muss ich sagen, dass ich den Vorgänger mit einem Core 2 Duo-Prozessor seit 2010 im Einsatz hatte. 6 Jahre lang ist der Laptop täglich mehrere Stunden im Einsatz gewesen und hat mich nie im Stich gelassen. Viele Leute kennen diesen Laptop von Präsentationen mit „Scrat“ (das Rattenhörnchen aus Ice Age) auf dem Deckel. Ich habe jetzt ein Update gemacht, da ich nochmals das letzte Modell dieses MacBook Pro haben wollte, bevor es definitiv und ohne Voranmeldung von Apple aus dem Sortiment geworfen wird. Sonst würde ich nach wie vor mit dem 6-Jährigen Gerät arbeiten und den Rechner erst ersetzen, wenn dieser nicht mehr funktioniert. Natürlich ist der MBP viel schwerer als alle seiner abgespeckten 13-Zoll-Nachfolger. Aber das ist für mich sekundär. Das wichtigste ist für mich weiterhin die Erweiterbarkeit und Anpassung an meine Bedürfnisse. So habe ich den Arbeitsspeicher auf 16GB erweitert, obwohl Apple max. 8GB angibt.



Zudem habe ich mit einen SATA3-Adapter von hardwrk das DVD-Laufwerk ersetzt und mit einer 1TB SSD ergänzt. Das Ganze (die Original 1TB HDD und die 1TB SSD) habe ich zu einem 2TB Fusion Drive zusammengefügt. Fusion Drive ist eine von Apple entwickelte Technik, mit der eine SSD und eine mechanische Festplatte (HDD) zu einem logischen Laufwerk verbunden werden. Es handelt sich dabei um eine Weiterentwicklung von Hybridlaufwerken, doch im Unterschied zu diesen handelt es sich bei Fusion Drive um eine reine Softwarelösung. Damit bekommt man die Geschwindigkeit einer SSD mit dem billigen Speicher einer HDD. Das bedeutet für mich genug Speicher, um meine virtuellen Maschinen auf meinem MacBook Pro zu verwalten.

SSD und hardwrk-Adapter anstatt DVD-Aufwerk

SSD und hardwrk-Adapter anstatt DVD-Aufwerk

Den neuen MBP habe ich mit dem schnellsten verfügbaren Prozessor gekauft (2.9GHz Intel Core i7), der aber so leider nicht im lokalen Apple Store zu bekommen ist, sondern erst nach meiner Bestellung in China zusammengebaut und dann mir nach Hause gesendet wurde. Laut Performancetests soll der Prozessor meines „neuen“ 2012er MacBook Pro lediglich um 10% langsamer sein, als die aktuellen 2015er MacBooks mit den schnellsten Prozessoren. Damit kann ich sehr gut leben.

Nur, dass man mich nicht falsch versteht. Würde es diesen MacBook Pro in der „offenen“ Bauweise in einer Retina-Ausführung geben, dann hätte ich diesen gekauft. Nicht, weil ich diese Auflösung auf dem Laptop je gebraucht hätte, sondern um damit einen externen 4K-Bildschirm zu betreiben zu können. Aber „offen“ und erweiterbar/reparierbar ist für mich wichtiger als 4K, das ich vielleicht einmal brauchen könnte.

Und zum Schluss noch über das Argument, dass der 13-Zoll-Bildschirm für ein professionelles Arbeiten zu klein ist: Bei einem Windows-Laptop gebe ich recht. Das Umschalten/Ausblenden der Anwendungen benötigt immer eine „umständliche“ Bewegung des Zeigers und ein Klicken oder das Verwenden eines Kurzbefehls auf der Tastatur. Beim OS X platziere ich die Anwendungen auf mehreren Desktops und schalte mit einer Wischbewegung zischen den Desktops, resp. Anwendungen hin und her. Daraus resultiert ein unterbrechungsfreier Workflow, der mich mit einem MacBook Pro viel produktiver arbeiten lässt. Dies, die langlebige Hardware, die kostenlose Standard-Software und kostenlosen Betriebssystem-Updates lassen die höheren Beschaffungskosten für einen MacBook Pro mehr als rechtfertigen. Aber am Schluss ist dies meine subjektive Meinung.



PartsPublisher: Interaktive CD für identische Maschinen schneller erstellen

Mit der Zunahme der Maschinen im Parts-Publisher wird auch der Publikationsprozess viel langsamer. Dies auch wegen einiger konzeptionellen Schwächen des Tools. Trotzdem bringen wir damit täglich mehrere Ersatzteilkataloge erfolgreich heraus.
Nun ist es so, dass wir teilweise mehrere identische Maschinen an einen Kunden liefern. Unterscheiden tun sich diese lediglich durch die Seriennummer der Maschine (Maschinennummer). Damit man nicht jede Stückliste jeder Maschine in den Parts-Publisher einlesen und publizieren muss, habe ich geschaut, wie man dies auch über etwas im publizierten Code zu stochern ändern könnte. Nach etwa 10 Minuten hatte ich die Lösung.

Hier also die Anleitung dazu:

  1. CD Verzeichnis der Erstmaschine kopieren. Danach nur noch in der Kopie arbeiten!
  2. Datei «Etk.dwk» mit dem Texteditor öffnen.
  3. Nach der «alten» Maschinennummer (hier als Beispiel 321045) suchen. Wenn der Treffer bei <KVARI>s312045</KVARI> ist, dann die neue Maschinennummer eintragen (im folgenden Screenshot die 312047).
    Achtung: Das vorgängige Zeichen lassen.
  4. Speichern.
  5. Datei schliessen.
  6. Im Verzeichnis Data die Datei «PPData.h2.db» öffnen.
  7. Dort im Texteditor alle alten Erstmaschinennummern (z.B. 321045) durch die Folgemaschinennummer ersetzen lassen (z.B. 312047).
  8. Speichern.
  9. Datei schliessen.
  10. CD starten und überprüfen.
  11. Fertig und ca. eine Stunde Arbeit gespart.

Atlassian Confluence auf einem Synology NAS installieren

UPDATE: Die Installation von Confluence ging zwar ohne Probleme, jedoch ist bei jedem Neustart des Servers auch die komplette Installation wieder zurückgesetzt worden. Abhilfe gab es erst durch ein anderes Docker-Paket. Die Anleitung wurde entsprechend aktualisiert.

Es gibt zwei Möglichkeiten Confluence auf ein Synology NAS zu bringen: Eine konventionelle Installation mit vielen Herausforderungen oder einfach als Docker-Paket herunterzuladen.

Natürlich habe ich mich für die einfache Variante entschieden. Hier ist das Vorgehen:

  1. Docker-App installieren. (falls noch nicht installiert)
  2. Docker-Paket herunterladen. Hier MUSS das Paket «derjudge/confluence» gewählt werden. Nachtrag: Ich habe einige Wochen mit den anderen Paketen verloren!
  3. Container erstellen. Name vergeben und «Ports automatisch zuordnen» NICHT auswählen. Ports manuell zuweisen. Ich habe als lokalen Port den 32768 und als Container-Port den 8090 gewählt.
  4. Confluence starten.
  5. Confluence über die öffentliche URL des NAS mit dem «lokalen» Port öffnen. Also http://xxxxxx.xx:32768 aufrufen und fertig installieren. Eventuell eigene Firewall noch bei diesem Port öffnen/auf den Server weiterleiten.
  6. Das Interessante an dem Docker von «derjudge/confluence» ist, dass auch ein PostgreSQL dabei ist. Somit muss nicht auf die interne Datenbank von Confluence zugegriffen werden. Ist zwar entgegen der Idee der Docker-Container. Vereinfacht die Installation aber ungemein. Einfach bei der Anleitung unter folgen, dann kommt alles gut!
  7. Confluence kann nun betrieben werden.

Und jetzt habe ich meine Teststellung, um die Scroll-Erweiterungen von k15t zu testen. Dazu aber später mehr.


SDL: XML-Filter anlegen

Lange hat die Verwendung eines wirklichen XML-Filters wenig Sinn gemacht. Zu aufwändig war es und das gleiche Resultat hat man mit einem einfachen Textfilter auch hinbekommen.

Jetzt hat sich das Ganze aber geändert. Neu kann Studio auch die maximale Länge eines Strings überwachen. Das bedeutet, dass der Softwareentwickler in seiner Umgebung eingeben kann, wieviel Platz es im Dialog hat und diese Information dem XML mitgeben. Und diese Information wird in Studio nun ausgewertet und überwacht. Deshalb sind die Zeiten vorbei, wo die Erstübersetzung nochmals an den Übersetzer musste, weil diese unmöglich im Dialog oder Menüfenster Platz hatte.

Da ich die Erfahrung gemacht habe, dass SDL keinen Filter von grundauf kostenlos erstellt, sondern dies nur über den überteuerten Professional Service anbietet, biete ich hier die kostenlose Anleitung, wie vorzugehen ist.

Ich zeige die Einstellungen in SDL WorldServer. In SDL Studio ist dies gleich, teilweise sehen die Fenster einfach unterschiedlich aus. Ich habe es nur soweit dokumentiert, wie ich es selbst benötige, um einen weiteren Filter konfigurieren zu können.

Der Aufbau der XML-Datei

worddav8f6e66f8846cc58db3c49d6dae09becf(1) Der obligate Header
(2) Das Rootelement, das der Erkennung der XML-Datei dient und auch gleich den Sprachschlüssel der Quelldatei beinhaltet. Dieser Sprachschlüssel wird von Studio dann in die Zielsprache geändert.
(3) Medaten wie Ident=“ “ oder ContextHint=“ „, welche ausgeblendet werden
(4) maxlength limitiert die Zeichenzahl im Zieltextsegment
(5) Der eigentlich zu übersetzende Text

Filter in WorldServer

Der neue Filter ist vom Typ: Custom XML Studio File Type


Das Basiselement ist das Element, mit dem ein Parser das XML identifizieren kann. Leider ist diese Funktion bei WorldServer 10.4.2 noch nicht implementiert. In Studio funktioniert es und man kann mehrere MIME-Typen mit *.xml angelegen. Bei WorldServer geht dies nicht und bedeutet, dass pro XML-Typ ein anderes Dateiformat gewählt werden muss.


Im Reiter «Parser» stehen alle Regeln, nach denen der zu übersetzende Text und Metadaten gefiltert werden.


Die ersten drei geben die Struktur an und die letzten vier Element die Metadaten


Im Element «Item» ist das Hauptelement mit den Inhalten drin.


(1) Beim Anklicken von [Bearbeiten…] bei Struktur-Info wird der Dialog für die «Eigenschaften der Strukturinformation» angezeigt.


Diese muss wie folgt angelegt werden.


(2) Unter «Regel bearbeiten» [Erweitert…] anklicken. Dort muss noch das Element für die maximale Länge definiert werden. In diesem Fall ist es @maxlength.
Zusatzinfo: «maxlenght=“0″» läuft ohne Fehlermeldung durch den Parser, aber in Studio wird dann eine Längenbeschränkung von 0 angezeigt. Deshalb sollte in diesem Fall «maxlength» gar nicht angegeben werden.


Als letztes sind noch die Attribute zu kennzeichnen, welche nicht übersetzt werden. Leider können diese nicht als Attribut und „Nicht zu übersetzen“ angelegt werden. Es muss ein Umweg über die Erfassung als XPath erfolgen. Ich nehme an, dass dies ein Bug von SDL WorldServer ist, sonst kann ich mir einen solchen Blödsinn nicht erklären.


Hier die Entitys, welche umgewandelt werden sollen. Dies betrifft aber nur den zu übersetzenden Text.


Beliebigen Präfix wählen und die URL von w3 eingeben.


Im «Embedded Content» können RegEx-Filter konfiguriert werden, um Platzhalter und sonstige Ausdrücke zu sperren.


Man unterscheidet zwischen Tag-Paaren. Also alles was zwischen diesen Tag liegt, wird für die Übersetzung gesperrt.


Und Platzhaltern, welche einen Teil/eine Stelle im Text definieren. In der Regel sind dies Variablen.


Zum Schluss noch etwas…

Auf ein weiteres Problem muss man auch noch achten. Es geht um die Verarbeitung mehrerer XML-Filter. SDL Studio kann anhand des Rootelementes selbst entscheiden, zu welchem Filter eine XML-Datei passt. SDL WorldServer kann dies nicht, obwohl diese Information im Filter definiert werden muss. Nun, wenn diese Information nicht ausgewertet wird, wieso muss man diese dann erfassen?

Das Resultat ist aber, dass SDL WorldServer in der aktuellen Version 10.4.4 nur eine einzige XML-Datei mit der Dateierweiterung .xml verarbeiten kann. Eine weitere XML-Datei muss eine andere Dateierweiterung haben oder zu einer anderen Filtergruppe gehören, mit dem Resultat, das der Benutzer dann den richtigen Filter auswählen müsste… Was mich verärgert, ist der Fakt, dass Studio das Problem nicht hat und mehrere XML-Dateien anhand des Rootelementes unterscheiden kann. Man beachte auch, dass ich Studio ab 99€ bekomme und WorldServer etwa das tausendfache kostet. Ein Lösung für WorldServer 11.0 wurde mir auch nicht zugesichert.








Confluence Bereich von einer Installation in die andere kopieren

Bereiche von einer Confluence-Installation in eine andere zu kopieren ist simpel. Hier die Anleitung dazu.

Bereich exportieren

  1. Den Bereich öffnen.
  2. Links unten an der Randleiste «Bereich konfigurieren», «Inhalte» auswählen.
    16-11-_2015_08-47-25–> Seite «Bereich konfigurieren» öffnet sich.
  3. «Export» auswählen.
    16-11-_2015_08-47-40–> Seite «Export» öffnet sich.
  4. «XML-Format» auswählen und [Weiter >>] anklicken.
  5. «Vollständiger Export» auswählen und [Exportieren] anklicken.
    16-11-_2015_08-48-10–> Export startet.
  6. Wenn Export abgeschlossen ist, «Download here» zum Herunterladen anklicken.
    16-11-_2015_08-48-47–> Die zip-Datei wird auf dem Rechner gespeichert.


Bereich importieren

  1. Confluence-Administration «Allgemeine Konfiguration» auswählen.
    16-11-_2015_09-00-44–> Seite «Administatorzugriff» öffnet sich. Dort das Admin-Passwort eingeben.
  2. Im Seitenbaum und Administration «Sichern und Wiederherstellen» auswählen.
    –> Seite «Sichern und Wiederherstellen» öffnet sich.
  3. Unter «Backup einer Installation/eines Bereiches hochladen und wiederherstellen» die vorher exportierte zip-Datei zuordnen und [Hochladen und Wiederherstellen] anklicken.
    16-11-_2015_09-08-25–> Import startet. Es kann auch sein, dass Warnhinweise kommen, wenn die ID des Bereiches bereits existiert. Dann wird ein bestehender Bereich überschrieben!
  4. Wenn der Import abgeschlossen ist, erscheint «Complete.»
    –> Der importierte Bereich ist nun verfügbar.

Der Import funktioniert problemlos. Nur Referenzen auf Benutzer, welche im neuen System nicht angelegt sind, werden nicht gefunden, aber damit kann man umgehen.


Bei der Confluence Hilfe kann man unter den folgenden Themen auch dazu nachlesen:

  • Exporting Confluence Pages and Spaces to XML
  • Restoring a Space



Synology DS1513+ und ASUS USB-AC56

Da ich nur Dank dem kombinieren verschiedenster Forumseinträge ein Lösung fand, hier die Zusammenfassung dazu:

  • Synology DSM 5.2-5644 in Kombination mit dem DS1513+ unterstützt USB WLAN-Adapter mit bis zu 867 Mbps (5 GHz).
  • Der USB WLAN-Adapter ASUS USB-AC56 läuft im ac-Modus auf dem Synology-NAS mit ca. 800 Mbps.
  • Dafür muss dieser zwingend im USB3-Port angeschlossen werden. Im USB2-Port kann die Datenmenge nicht übertragen werden. (1. Fallstrick)
  • Die Verbindung über WLAN-Manager der DSM ist Fehlerhaft. Das bedeutet, dass auch bei einer richtigen Passworteingabe die Meldung kommt, dass diese falsch ist. Lösung: richtiges Passwort eingeben und nach der Fehlermeldung den Dialog schliessen. Einige Minuten später verbindet sich aber das NAS mit dem WLAN. Eventuell muss aber auch das System neu gestartet werden. (2. Fallstrick)
  • Eine manuelle Veränderung der IP-Adresse muss eventuell auch mehrmals eingegeben werden. (3. Fallstrick)

Niemals versuchen irgendwelche Linux-Treiber von ASUS zu installieren oder sonst noch Dateien des Betriebssystemes zu ändern. Dies ist nicht nötig und führte bei mindestens einem Forumsteilnehmer zu einer Neuinstallation des Systems…


Wenn man die Nerven behält und nicht gleich das NAS aus dem Fenster wirft, ist das Einrichten ziemlich einfach. Und wenn der USB WLAN-Adapter einmal eingerichtet ist, dann läuft er auch nach einen Systemneustart wieder weiter.


© 2017

Theme von Anders Norén↑ ↑