Schlagwort-Archive: Ubuntu

Ubuntu und Probleme mit ttf-mscorefont-installer

Vorgestern habe ich meinen Laptop mit Ubuntu 16.04 neu aufgesetzt und eines der Pakete, dich nach so einer Installation installiere, ist ubuntu-restricted-extras. Teil dieses Meta-Pakets ist der Installer für Microsoft-Schriftarten wie Arial, Time New Roman, Verdana usw. Leider schlug der Download der Schriftarten fehl (Hash Sum mismatch / Hash-Summe stimmt nicht überein) und somit auch die Installation.

Folgendes hat das Problem gelöst:

Schriftarten Meta-Paket installieren:

sudo apt-get install ttf-mscorefonts-installer

Schriftarten herunterladen und installieren:

TMP=$(mktemp -d)
cd "$TMP"
awk '/Url/ {system("wget "$2)}' /usr/share/package-data-downloads/ttf-mscorefonts-installer
sudo /usr/lib/msttcorefonts/update-ms-fonts "$TMP"/*

Benachrichtung über ausstehende Installation abschalten:

sudo touch /var/lib/update-notifier/package-data-downloads/ttf-mscorefonts-installer

Aufräumen 🙂

cd ..
rm -r "$TMP

Quelle: http://askubuntu.com/questions/543673/mscorefonts-problems

Sublime Text 2 – erste Erfahrungen

In der letzten Folge von mobileMacs bin ich auf Sublime Text 2 aufmerksam geworden, einen wirklich schönen (den Ruf haben crossplatform Programme ja meist nicht…) und sehr konfigurierbaren Texteditor. Bisher hatte ich für die Entwicklung meiner webOS-Apps immer Komodo Edit im Einsatz, doch es war an der Zeit, mal einen neuen Editor auszuprobieren. Bisher habe ich den Wechsel nicht bereut, im Gegenteil: die Arbeit macht mit diesem schicken Editor viel Freude!

Installiert habe ich Sublime Text 2 über folgendes PPA:

sudo add-apt-repository ppa:webupd8team/sublime-text-2
sudo apt-get update
sudo apt-get install sublime-text-2

Sublime Text bringt von Haus aus keine Code-Validation für Javascript mit, allerdings gibt es ein Plugin, womit sich dieses Feature nachrüsten lässt. Dazu muss man allerdings zuerst noch eine Erweiterung installieren: Sublime Package Control. Ist dieser Schritt getan, kann man nun das Plugin bequem über die Sublime Paketverwaltung installieren. Dazu öffnet man die Command Palette (STRG+SHIFT+P) und wählt den Eintrag: „Package Control: Install Package“. Im nächsten Schritt kann man nun SublimeLinter („sublimelint“) installieren.

Achtung: Damit Sublime Linter auch funktioniert, muss node.js installiert sein!

Für mein derzeitiges webOS-Projekt (BibleZ HD) habe ich ein kleines Script geschrieben, welches das Plugin compiliert (BibleZ HD is eine Hybrid-App) und anschließend „palm-run“ aufruft, womit die App auf das Gerät/Emulator gepackt wird und automatisch die Logs ausgegeben werden. Sublime Text 2 besitzt sogenannte Build-Systems, d.h. man kann für bestimmte Dateitypen oder Projekte kleine Scripte angeben, welche dann das Projekt compilieren oder einzelne Dateien übersetzen (Coffee-Script o.ä.).

Über Tools → Build System → New Build System… kann man nun sein Script angeben. Hier ein Beispiel, wie ich mein Shell-Script eingebunden habe (das Skript habe ich vorher ausführbar gemacht):

{ "cmd": ["/path/to/my/File.sh"], "path": "/usr/bin:/usr/local/bin:/bin" }

Nun kann man bequem mit STRG+B bzw. F7 das Skript starten und den Logs in einer kleinen Console am Bildschirmrand folgen!

Ich finde Sublime Text 2 sehr gelungen und werde es definitiv noch weiter einsetzen!

[Update] Scanner an der Fritzbox: Direkt auf ein Netzlaufwerk scannen

Vor ein paar Tagen hatte ich schon geschrieben, wie man mit Hilfe von Freetz einen Scanner an der Fritzbox als Netzwerkscanner nutzen kann. Der Nachteil dieser Lösung ist, dass man immer zum Scanner laufen muss, um ein neues Dokument einzulegen – besser wäre es, wenn man einfach eine Taste am Scanner drückt und das Dokument automatisch auf einem Netzlaufwerk gespeichert wird. Nach einigem Suchen und durchschauen der Paketliste für Freetz habe ich nun eine Lösung am laufen, welche vielleicht nicht die optimale ist, aber durchaus gut funktioniert =)

Hier mal die Kurzfassung:

  1. neues Freetz Image erstellen mit den SANE-, Druckertreiber- und Callmonitorpaketen
  2. kleines Shellscript erstellen, welches ein Dokument scannt und an einer bestimmten Stelle speichert
  3. Callmonitor einrichten und bei einem bestimmten Anrufszenario das Shellscript ausführen

Und nun das Ganze etwas ausführlicher:

Freetz Image erstellen

Wichtig ist wieder, dass man die Entwicklerversion verwendet, weil nur in dieser das SANE Paket enthalten ist. Folgende Pakete sollten ausgewählt werden:

  • SANE (inkl. scanimage)
  • Callmonitor
  • evntl. noch nano (wenn man nicht vi als Texteditor benutzen möchte)

Danach das Image mit make bauen und auf der Fritzbox einspielen.

Shellscript erstellen

Mit dem Befehl scanimage kann man den Scanner anweisen ein Dokument zu drucken. Der Befehl bietet einige Parameter, die es sich lohnt mal anzusehen. Um z.B. ein Dokument in Gray und einer Auflösung von 100dpi zu scannen gibt man gibt man folgenden Befehl ein:

scanimage --mode Gray --resolution 100 > doc.pnm

In meinem Setup habe ich neben dem Scanner noch einen USB Stick an der Fritzbox angeschlossen, auf welchem die Dokumente gespeichert werden sollen. Im Webinterface von AVM sollte man kontrollieren, ob der USB Speicher auch eingebunden wurde:

Speicher NAS
Nachdem man sich via telnet fritz.box mit der Fritzbox verbunden hat, findet man den USB Stick unter /var/media/ftp/NAME_DES_USB_STICKS. Nun brauchen wir nur noch ein kleines Script, welches automatisch ein Dokument scannt und auf dem USB Stick mit einem eindeutigen Namen ablegt. Ich verwende dazu dieses:

#!/bin/sh
datum=`date +%Y-%m-%d_%H-%M-%S`
scanimage --mode Gray --resolution 100 > /var/media/ftp/NAME_DES_USB_STICKS/scan-$datum.pnm

Jeder Scan bekommt also noch Datum und Uhrzeit mit in den Dateinamen. Dieses kleine Shellscript kann man z.B. unter /var/flash/scanDoc speichern. Mit

sh /var/flash/scanDoc

kann man noch testen, ob das Script auch so funktioniert, wie man es möchte.

Callmonitor konfigurieren

Mit dem Callmonitor kann man auf eingehende und ausgehende Anrufe reagieren (z.B. ein Email verschicken, wenn man einen Anruf verpasst hat). Das wollen wir für unseren Zweck „Missbrauchen“ und bei einem bestimmten Anruf an eine bestimmte Nummer den Scanvorgang auslösen. Dazu öffnet man das Freetz-Webinterface (http://fritz.box:81) und wählt Callmonitor→Listeners im Menu rechts aus. Damit man in das Textfeld auch was schreiben kann, muss zuerst die Sicherheitsstufe der Freetzinstallation geändert werden. Dazu verbindet man sich wieder vie TELNET mit der Box und gibt folgendes ein:

echo 1 > /tmp/flash/mod/security

Nun kann man die Listeners bearbeiten. Wie man diese genau konfigurieren kann, steht im Wiki von Freetz. In meinem Fall reagiere ich auf das Ereignis, wenn ich von meiner 1und1 VOIP Nummer auf meine Telekom-Festnetznummer anrufe. Der Eintrag sieht dann folgendermaßen aus:

in:cancel  012345678$  ^987654321$  sh /var/flash/scanDoc

Wenn ich nun „mich selbst“ anrufe, kommt natürlich ein Besetztzeichen und der Anruf wird abgebrochen, was dazu führt, dass das Shellscript ausgeführt wird und der Scan auf dem USB Stick gespeichert wird. Auf die gescannten Dokumente kann man nun via FTP oder Windows-Freigabe der Fritzbox zugreifen. Die Dateien liegen alle im *.pnm Format vor, welches man später noch in PDF oder ähnliches umwandeln kann.

Fazit

Auch wenn diese Lösung ein wenig Bastelarbeit erfordert, ist es doch eine gute Möglichkeit, um ohne eingeschalteten PC mal schnell einen Brief oder ein anderes Dokument zu scannen. Ich würde mich freuen, wenn jemand noch einen Tipp hat, wie man den Listener noch einfacher gestalten könnte, sodass es z.B. ausreicht nur die 4444 zu wählen, um ein Dokument zu scannen. Update: Folgender Listener führt zum Erfolg:

out:request  ^  ^4444$  sh /var/flash/scanDoc

Scanner an der Fritzbox im Netzwerk nutzen

Mein Multifunktionsdrucker (Photosmart c4340) steht nun schon einige Zeit neben der Fritzbox (7270), da auf meinem Schreibtisch kein Platz dafür ist. Drucken über das Netzwerk ist kein Problem, da HP Drucker oft sehr gut unter Ubuntu unterstützt werden. Nun hat der Drucker aber auch einen Scanner. Jedesmal, wenn man etwas einscannen möchte, dann muss man erst einmal seinen Laptop zum Drucker tragen und dann mit dem USB Port verbinden – insgesamt sehr umständlich.

Nun existiert für die Fritzbox ein Projekt, welches sich Freetz nennt. Hier die Selbstbeschreibung des Projekts:

Freetz ist eine Firmware-Erweiterung (Modifikation) für die AVM Fritz!Box und baulich ähnliche Geräte: Die Original-Firmware des Herstellers wird um zusätzliche Funktionen erweitert und mit einer individuellen Zusammenstellung von Programmen ergänzt.

Freetz bietet einem sozusagen die Möglichkeit, seine Fritzbox zu modifizieren und somit um weitere Features zu erweitern. Eine Liste aller Erweiterungen findet man hier. In dieser Liste gibt es auch ein Paket namens „SANE„, welches die Fritzbox um einen Scann-Server erweitert, sodass im Netzwerk auf diesen Scanner zurückgegriffen werden kann.

Installation

Da SANE noch als unstable gekennzeichnet ist, findet man es nur in der aktuellen Entwicklerversion von Freetz, d.h. zuerst muss diese ausgecheckt werden:

svn co http://svn.freetz.org/trunk freetz-trunk

Man beachte den Hinweis: Die Entwicklerversion ist ausschließlich für Profis gedacht, die sich u.U. selbst zu helfen wissen! Sie ist ständigen Änderungen unterworfen und funktioniert möglicherweise nicht oder nur eingeschränkt. und Die Installation einer modifizierten Firmware führt zum Verlust der Gewährleistung des Herstellers!

Bevor man jetzt weiter macht, sollten die Allgemeinen Hinweise und Voraussetzungen zur Installation gelesen werden (benötigte Abhängigkeiten, …)!!!

Mit

make menuconfig

werden nun die benötigten Pakete ausgewählt (Ich kopiere hier der Einfachheit halber die Schritte aus dem Freetz Wiki):

  • Sicherstellen, daß im Hauptmenü Show advanced options und unter Package selection Unstable ausgewählt sind
  • Im Hauptmenü zu Package selectionUnstableSANE wechseln und SANE auswählen
  • Empfehlung: sane-find-scanner und scanimage auswählen. (Diese sind nicht notwendig für den Betrieb, aber hilfreich, falls das Scannen im nächsten Schritt nicht funktioniert. Wenn einmal alles klappt, kann man die beiden Punkte wieder abwählen um Speicherplatz zu sparen (~150kB) und ein neues Image erstellen)
  • Backend auswählen:
    • Geräte von Hewlett-Packard (HP): Eine Ebene höher wechseln, HPLIP auswählen (HPLIP ist momentan nur im Trunk verfügbar) und dann Printer Class und Printer Type entsprechend auswählen (Hilfefunktion steht zur Verfügung)
    • Für alle anderen Geräte (und sehr alte HPs): Über die Liste unterstützter Geräte den Namen des Backends feststellen und auswählen.
  • Unter Package selectionStandard packages Inetd auswählen (wird in kommenden Versionen automatisch ausgewählt)
  • Image erstellen, flashen, neu starten

Hat man diese Schritte hinter sich gebracht, kann man nun bequem von jedem Rechner im Netzwerk aus scannen.Dazu startet man Xsane mit folgendem Parameter:

xsane net:fritz.box

Alternativ kann man auch die Datei /etc/sane.d/net.conf um den Eintrag fritz.box erweitern, dann kann Xsane auch normal aus dem Anwendungsmenu gestartet werden.

Fazit

SANE auf der Fritzbox bietet die Möglichkeit, dass man nun seinen Scanner auch im Netzwerk nutzen kann. Allerdings muss man immer noch zum Scanner laufen und das entsprechende Dokument einlegen. Optimal wäre eine Lösung, wo man nur das Dokument in den Scanner legen bräuchte und der Scanner das Dokument automatisch auf einem Netzlaufwerk speichert (z.B. auf eine an der Fritzbox angeschlossene Festplatte). Leider gibt es scanbuttond noch nicht als Paket für Freetz.

Auktionsvorlagen für SaleZ erstellen

Heute möchte ich eine kurze Einführung geben, wie man Auktionsvorlagen (Templates) für SaleZ erstellen kann. Eine Auktionsvorlage für SaleZ ist nichts weiter als eine HTML Seite ohne <html>, <head> und <body> Tag. Dementsprechend einfach ist es auch eine solche Vorlage zu erstellen – entsprechende HTML/CSS Kenntnisse vorausgesetzt.

SaleZ nutzt die Tag IDs um z.B. den Titel oder den Untertitel in eine Vorlage einzufügen, deshalb müssen in jedem Template folgende IDs vergeben sein:

  • title – Für den Titel
  • subtitle – für den Untertitel
  • content – für die Beschreibung
  • image_1 bis image_10 – für die Bilder

Zu den Bildern sei noch folgendes gesagt: Die image_1 bis image_10 dürfen nicht einem <img> Tag vergeben werden, da SaleZ den <img> Tag selbst einfügt (in dieser Form: <img src=’imageURL‘ style=’width: 100%‘ />), d.h. am besten gibt man einem <div> die image ID und legt im <div> die Höhe/Breite des Bildes fest.

Die Standardvorlage in SaleZ ist folgendermaßen aufgebaut:

<div id="page" style="width: 90%; margin: auto auto; -webkit-border-radius: 10px; -webkit-box-shadow: 0 1px 5px grey; -moz-border-radius: 10px; -moz-box-shadow: 0 1px 5px grey; border: 2px solid grey; background-image: -webkit-gradient(linear, 0 0, 0 100, from(lightgrey), to(white)); background: -moz-linear-gradient(-90deg,lightgrey, white); -moz-background-size:100% 100px; background-position:top; background-repeat:no-repeat;">
 <h3 id="title" style="text-align: center;">Title</h3>
 <h4 id="subtitle" style="text-align: center;">Subtitle</h4>
 <div id="image_1" style='max-width: 500px; padding: 10px; margin: auto auto;'></div>
 <div id="content" style="padding: 10px;">Enter your description here</div>
 <div id="image_2" style='max-width: 300px; padding: 10px; float: left;'></div>
 <div id="image_3" style='max-width: 300px; padding: 10px; float: left;'></div>
 <div id="image_4" style='max-width: 300px; padding: 10px; float: left;'></div>
 <div id="image_5" style='max-width: 300px; padding: 10px; float: left;'></div>
 <div id="image_6" style='max-width: 300px; padding: 10px; float: left;'></div>
 <div id="image_7" style='max-width: 300px; padding: 10px; float: left;'></div>
 <div id="image_8" style='max-width: 300px; padding: 10px; float: left;'></div>
 <div id="image_9" style='max-width: 300px; padding: 10px; float: left;'></div>
 <div id="image_10" style='max-width: 300px; padding: 10px; float: left;'></div>
 <div style="clear: both; display: block;"> </div>
</div>

Der einzige Nachteil an jeder Vorlage für eBay Auktion ist, dass der CSS Code direkt in die Elemente eingefügt werden muss. Eine weitere Einschränkung ist, dass Grafiken, die man für sein Template verwenden will, über eine URL eingefunden werden sollten (d.h. die benötigten Grafiken irgendwo bei einem ImageHoster hochladen oder anderweitig verfügbar machen).

Hat man einmal den HTML/CSS Teil erledigt (index.html speichern), fehlt noch ein kleiner Schritt, damit SaleZ auch die Auktionsvorlage findet. Zu jedem Template gehört eine template.info Datei, welche im gleichen Verzeichnis, wie die Auktionsvorlage (index.html) liegen muss. Diese Datei enthält nur eine Zeile:

name=Meine Auktionsvorlage

Danach kopiert man diese beiden Dateien in .$HOME/.salez/templates/MyTemplate/. SaleZ sollte nun beim nächsten Start die Auktionsvorlage erkennen (ab Version 0.1-public4).

Ich freue mich über weitere Auktionsvorlagen für SaleZ 🙂

Zugriff auf das DOM mit Python in webkitgtk

Während der Entwicklung von SaleZ stand ich vor dem Problem, dass ich Werte aus dem Document Object Model (DOM) auslesen wollte. In Webkit gibt es zwar die Funktion get_dom_document, allerdings ist sie noch nicht in der Version von Webkit enthalten, welche mit Ubuntu 10.04 mitgeliefert wird. Nach einiger Suche im Netz habe ich dann eine Lösung für das Problem gefunden.

Mit Hilfe des folgenden Codes kann man sich den Inhalt eines bestimmten Elements ausgeben:

import jswebkit

ctx = jswebkit.JSContext(webView.get_main_frame().get_global_context())
text = ctx.EvaluateScript("document.getElementById("fooBar").innerHTML")

Möchte man hingegen das DOM manipulieren, kann man die  execute_script Funktion eines WebViews nutzen:

webView.execute_script('document.getElementById("foobar").innerHTML = "foo bar"')

eBay Account mit SaleZ verbinden

Nachdem ich gestern mein neues Projekt angekündigt hatte, habe ich eben noch einen kleinen Screencast erstellt, wie man sein eBay Konto mit SaleZ verbindet. Dies ist nötig, damit SaleZ über die eBay API auf den Mein Ebay Bereich zugreifen kann. Die Authentifizierung läuft dabei über einen Token, sodass in SaleZ selbst weder Benutzername noch Passwort gespeichert werden müssen.

SaleZ – your eBay Listing Tool: Betatester gesucht

Ein neues Projekt ist geboren: SaleZ. Es handelt sich hierbei um ein Verkaufstool für eBay, welches sich derzeit aber noch im Alpha Status befindet (deshalb kann ich auch keine Haftung für irgendwelche entstehenden Schäden übernehmen – klar) . Vor einigen Monaten habe ich angefangen ein wenig mit Quickly zu experimentieren (ich berichtete) und herausgekommen ist jetzt SaleZ.

SaleZ - your eBay Listing Tool

Folgende Features sind enthalten:

  • Artikel können als SofortKaufen oder Auktion eingestellt werden
  • WYSIWYG Editor für Auktionsbeschreibung
  • Unterstützung für Auktionstemplates (näheres schreibe ich später dazu)
  • übersichtliches UI
  • bis zu 10 Bilder können kostenlos eingebunden werden

Um SaleZ zu testen, muss zunächst das PPA hinzugefügt und danach SaleZ installiert werden:

sudo add-apt-repository ppa:salez/salez-ppa
sudo apt-get update && sudo apt-get install salez

Ich hab SaleZ nur unter Ubuntu Lucid (10.04) getestet; das Paket für Ubuntu 10.10 ist das gleiche, es sollte aber auch unter 10.10 laufen. Bugs können auf Launchpad gemeldet werden oder hier in den Kommentaren (für die, die keinen Launchpad Account haben).

In diesem Sinn viel Spaß beim Testen!

quickly-widgets: DictionaryGrid

Seit einiger Zeit gibt es ein Tool zum Erstellen von Anwendungen für Ubuntu welches sich Quickly nennt. Quickly nimmt einem eine ganze Menge an Arbeit ab, sodass man mehr Zeit hat sich um die eigentliche Anwendung zu kümmern. Vor ca. einem halben Jahr bin ich durch einen Blogpost im ubuntuusers Planeten darauf aufmerksam geworden und hab seit dem immer wieder mal ein wenig damit rumgespielt. Eine praktische Erweiterung für Quickly sind die Quickly Widgets (ehemals Quidgets).

Installieren lässt es sich mit

sudo apt-get install quickly-widgets

Heute möchte ich das DictionaryGrid vorstellen. Wer sich schon einmal mit einem Gtk.Treeview beschäftigt hat, weiß, dass dieser sehr flexibel ist und man viele Dinge darin abbilden kann. Doch diese Vielfalt führt auch zu einer gewissen Komplexität, sodass man für eine einfache Tabelle einige Zeilen an Code schreiben muss (Columns, CellRenders, …). An dieser Stelle setzt DictionaryGrid an. Wie der Name schon vermuten lässt, braucht man nur noch eine Liste von Dictionaries und kann aus dieser, mit ein paar wenigen Zeilen Code, eine Tabelle erzeugen.

Beispiel:

from quickly.widgets.dictionary_grid import DictionaryGrid
#unsere Dictionaries
dicts = [{"ID": 0, "key2": 5, "tags": "aaa bbb ccc"},
      {"ID": 1, "key2": 6, "tags": "bbb ccc ddd"},
      {"ID": 2, "key2": 7, "tags": "ccc ddd eee"},
      {"ID": 3, "key2": 8, "tags": "ddd eee fff"},
      {"ID": 4, "key2": 9, "tags": "eee fff ggg"}]
grid = DictionaryGrid(dicts)
grid.show()

Und so sieht das ganze dann aus:

In DictionaryGrid kann man noch mehr Paramter angeben, so z.B. in welcher Reihenfolge die Spalten erscheinen sollen. Dazu legt man eine List von keys an, welche die Reihenfolge repräsentieren.

keys=["tags", "ID"]
grid = DictionaryGrid(dicts, keys=keys)
grid.show()

Und hier wieder der Screenshot:

Wie man sieht kann man nicht nur die Reihenfolge der Spalten anhand der keys bestimmen, sondern auch welche Spalten angezeigt werden sollen oder nicht. Neben DictionaryGrid gibt es noch weitere interessante Widgets in quickly-widgets zu entdecken.

Ein kurzer Blick in den Rückspiegel des Jahres 2009

Rückspiegel sind wichtig. Ohne ihnen würde man wesentlich unsicherer Autofahren. Genauso ist es gut, wenn man immer mal wieder innehält, um zurück zu schauen. Dieses Jahr war ein sehr ereignisreiches für mich. Der Abschluss meines Studiums stand bevor und die damit verbundene Frage, wie es danach weiter geht. Damit war dann die erste Hälfte des Jahres auch schon ausgefüllt 😉 Den Sommer habe ich sehr genossen, da ich einfach Zeit hatte für Dinge, die ich schon immer mal machen wollte. Dazu zählten u.a. ein Camping-Urlaub mit meiner Frau und das Erlernen von Python. Aus letzterem ist dann ein kleines Projekt namens BibleZ entstanden, welches mittlerweile in der Version 0.4 vorliegt. Ich bin dankbar für jedes Feedback, dass ich bekommen habe und auch die neuen Kontakte, die sich dadurch ergeben haben.

Das Jahr war für mich als Palm-User auch in der Hinsicht ein Spannendes, da das Erscheinen des Palm Pre bevorstand. Mittlerweile bin ich Besitzer eines solchen Gerätes und vom Betriebssystem (webOS) sehr angetan (im Gegensatz zur Verarbeitung des Pre und dem SDK…). In den letzten Wochen habe ich an einem Port von BibleZ für webOS gearbeitet, welcher mittlerweile auch als sogenannte Homebrew-App verfügbar ist und demnächst den Weg in den AppCatalog finden dürfte. (Hier gibt es eine kleine VideoDemo).

Zur Zeit bin ich mehr oder weniger am Studieren und Jobben. Dadurch (und v.a. seitdem ich angefangen habe zu Programmieren) bleibt leider wesentlich weniger Zeit für das Bloggen. Einige interessante Dinge sind mir in den letzten Monaten begegnet, von ich bei Gelegenheit einmal berichten werden.

Ein Blick in den Rückspiegel ist wichtig, aber wer nur nach hinten schaut, lebt/fährt auch gefährlich. Ein neues Jahr steht an und ich freue mich auf neue Herausforderungen, auf (hoffentlich) einen Referendariatplatz, neue Kontakte und ein wenig mehr Zeit für’s Bloggen 😉

In diesem Sinn wünsche ich euch noch ein gesegnetes Fest!