Tinkering Tuesday – Blogging Workflow – Word Konvertierung per Plugin

So, nun also zur Alternative zum direkten Publishing aus Word heraus, das ich bereits im letzten Tinkering Tuesday beschrieben hab.

Das Plugin Mammoth docx Converter verspricht das Word-Dokument inkl. aller Formatierungen und Bilder in einen WordPress Beitrag umzuwandeln.

Man bekommt es unter https://de.wordpress.org/plugins/mammoth-docx-converter/ und installiert es wie ein normales WordPress Plugin.

Nach der Aktivierung bekommt man eine neue Box im Screen zum Erstellen eines neuen Blog-Posts:

Das teste ich mal wieder mit meinem Beispiel-Post vom letzten Mal und schaue, was dabei herauskommt. Nach der Auswahl der Datei bekommt man eine kleine Vorschau (die Datei darf nicht mehr in Word geöffnet sein, sonst passiert bei mir einfach mal garnichts…). Diese kann man dann mit dem Button „Insert into editor“ in den Haupteditor übernehmen.

Bei „Messages“ gibt es noch den Fehlerbericht, der bei mir gemeckert hat, dass ich „Titel“ und „Überschrift 5“ genutzt habe, die er wohl nicht erkennt:

Warning: Unrecognised paragraph style: 'Title' (Style ID: Titel)

Warning: Unrecognised paragraph style: 'heading 5' (Style ID: berschrift5)

Damit muss man also den Titel auch weiterhin manuell eingeben. Allerdings hat er meine eigene Formatierung auch nicht übernommen. Nicht einmal die Schriftart. Jetzt das Ganze aber nochmal mit einem Bild:

Das Bild habe ich in Word zugeschnitten. Das bemerkt das Tool leider auch nicht und fügt einfach das komplette Bild ohne Zuschnitt ein.

Vorteile
  • Direkte WordPress-Integration
  • Keine Übertragung von Benutzername und Kennwort
  • Grundformatierungen bleiben erhalten (Header)
  • Bilder werden automatisch hochgeladen
Nachteile
  • Keine Übernahme von Beitragstitel, Kategorien, Schlagwörtern, Beitragsbild
  • Keine erweiterten Formatvorlagen, manche sogar, obwohl er sie kennen müsste (Header 5)
  • Bildzuschnitt in Word wird entfernt und dafür das gesamte Bild eingefügt

Fazit

Ich bleibe erst einmal bei einer Mischung aus direkt in WordPress erstellen und in Word erstellen und dann direkt publishen. Das Plugin ist wieder deaktiviert, da ich es nicht als sonderlich ausgereift erachte. Schade. Die non-plus-ultra Methode zum komfortablen publishen gibt es für mich damit noch nicht.

Import module

Programming Pursday – ParseUI einrichten

Im letzten Post schon angekündigt möchte ich Parse nutzen und auch die ParseUI für u.a. den Login. Beim ersten Versuch hab ich mir das Projekt zerschossen, diesmal hab ich ein Backup gemacht und besser aufgepasst.

Der Anleitung folgend erst einmal das Repository kopiert (einfach herunterladen und entpacken, kein Git-Client oder ähnliches notwendig). Danach im Menü über File -> New -> Import Module den Ordner importieren:

Import module  Import module - Source directory

Daraufhin gab es allerdings den Fehler

Error:(4, 0) Cannot get property 'bolts' on extra properties extension as it does not exist

Cannot get property bolts

Dazu hab ich dann das Update auf https://github.com/ParsePlatform/ParseUI-Android/pull/67/files gefunden und die folgenden Zeilen im build.gradle

compile rootProject.ext.bolts  
compile rootProject.ext.androidSupport  
compile rootProject.ext.parse  
provided rootProject.ext.facebookSDK  
provided files("$rootProject.projectDir/ParseLoginUI/libs/ParseFacebookUtilsV4-1.10.0.jar")  
provided files("$rootProject.projectDir/ParseLoginUI/libs/ParseTwitterUtils-1.10.0.jar")
durch diese ersetzt:
compile 'com.parse.bolts:bolts-android:1.2.1'
compile 'com.android.support:support-v4:22.0.0'
compile 'com.parse:parse-android:1.10.1'
provided 'com.facebook.android:facebook-android-sdk:4.0.1'
provided files("$rootProject.projectDir/ParseLoginUI/libs/ParseFacebookUtilsV4-1.10.1.jar")
provided files("$rootProject.projectDir/ParseLoginUI/libs/ParseTwitterUtils-1.10.1.jar")
Dann hat die ParseLoginActivity gemeckert, dass er den Befehl
import com.parse.ParseFacebookUtils;
nicht auflösen kann.
Dazu hab ich dann noch die Library dem Modul ParseLoginUI hinzugefügt. Das hab ich dann auch gleich sicherheitshalber mit den TwitterUtils gemacht:

AddLibrary AddLibraryToModule

Dann ist zumindest der gradle build durchgelaufen.
Trotzdem konnte ParseFacebookUtils noch nicht aufgelöst werden. Was dann letztendlich die Lösung brachte, war die Library ParseFacebookUtils auch dem Modul app hinzuzufügen. Kein Error mehr!
Das ergab den folgenden Eintrag im build.gradle meiner app:
compile files('C:/Users/Boris/Documents/workspace/Routineer/ParseLoginUI/libs/ParseFacebookUtilsV4-1.10.0.jar')
Aus der SampleApp hab ich mir dann noch den Facebook Login abgeschaut:
Zur strings.xml hinzufügen:
     <string name="facebook_app_id">YOUR_FACEBOOK_APP_ID</string>
Zur AndroidManifest.xml hinzufügen:
Im Abschnitt für die ParseLoginActivity:
<meta-data 
android:name="com.parse.ui.ParseLoginActivity.FACEBOOK_LOGIN_ENABLED" 
android:value="true"/>
Darunter dann noch:
<activity android:name="com.facebook.FacebookActivity"
                           android:configChanges=
                               "keyboard|keyboardHidden|screenLayout|screenSize|orientation"
                           android:theme="@android:style/Theme.Translucent.NoTitleBar"
                           android:label="@string/app_name" />
                 <meta-data
                     android:name="com.parse.APPLICATION_ID"
                     android:value="@string/parse_app_id" />
                 <meta-data
                     android:name="com.parse.CLIENT_KEY"
                     android:value="@string/parse_client_key" />
                 <meta-data
                     android:name="com.facebook.sdk.ApplicationId"
                     android:value="@string/facebook_app_id"/>
Um den Facebook Login zu nutzen musste ich erstmal eine Facebook App erzeugen. Das geht über die Seite
Das einzig trickreiche an dem Prozess ist, seinen Developer Hash zu generieren. Das erledigt unter Windows der folgende Aufruf, wenn man sich OpenSSL heruntergeladen hat (Pfad ggf. anpassen):
C:\Program Files\Java\jdk1.8.0_60\bin>keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | "C:\Program Files\OpenSSL\bin\openssl" sha1 -binary | "C:\Program Files\OpenSSL\bin\openssl" base64
Damit Facebook auch weiß, was in meiner App so vor sich geht hab ich erstmal die vorgeschlagenen Tracker aktiviert:
    @Override
    protected void onResume() {
        super.onResume();
    // Logs 'install' and 'app activate' App Events.
        AppEventsLogger.activateApp(this);
    }
    @Override
    protected void onPause() {
        super.onPause();
    // Logs 'app deactivate' App Event.
        AppEventsLogger.deactivateApp(this);
    }
Nun aber zurück ins Android Studio. Da es nun keine Fehler mehr gibt, hab ich dann die SampleProfileActivity aus der SampleApp hergenommen und in meine LoginActivity verwandelt.
Keine Fehler beim Sync, dann also ausführen.
Beim Kompilieren dann aber der Fehler:
"Multiple dex files define Lcom/parse/AbstractQueryController"
Damit geht es dann nächste Woche weiter…
091815_1658_TinkeringTu2.png

Tinkering Tuesday – Blogging Workflow – Word Publishing

Wie letzte Woche versprochen gibt es heute meinen Blogging Workflow. Da ich viel am PC mache, muss es natürlich darauf ausgelegt sein dort möglichst effizient Screenshots einzubinden. Als ich mich auf die Suche gemacht hab, hat sich sehr schnell Microsoft Word als eine mögliche Lösung dargestellt.

Da gibt es allerdings zwei Wege, die ich ausprobieren möchte. Zum einen direktes Publizieren aus Word heraus und zum anderen die Konvertierung mittels eines Plugins.

Screenshots

Beim ersten Programming Pursday hab ich ja schon ein bisschen was zu meinem Workflow erklärt, ich nutze Greenshot für die Screenshots. Das habe ich für den jetzigen Workflow etwas umkonfiguriert, sodass es nicht mehr den Dateipfad des Screenshots in die Zwischenablage kopiert, sondern das Bild direkt. So kann ich es ganz einfach in das Word Dokument einfügen.

Trotzdem lasse ich die Bilder sicherheitshalber in den Standardpfad speichern. Manchmal muss es doch eben schnell gehen und schon ist die Zwischenablage überschrieben und das Bild futsch.

Publishing direkt aus Word

Heute zunächst das direkte Publishing. Dazu öffnet man Word, wählt im Datei-Menü „Neu“ und dann „Blogbeitrag“.

Beim ersten Einrichten wird man gefragt, welchen Blog man einrichten möchte. In meinem Fall ist das WordPress

Dann nur noch Kontoinformationen und URL eingeben. Schon fertig.

Dann kann man seinen Blogbeitrag schreiben, inkl. Bildern.

Eine Kategorie kann man auch auswählen, nachdem man einmal auf den Button „Kategorie einfügen“ geklickt hat.

Dann kann man direkt Veröffentlichen, oder so wie ich erstmal als Entwurf.

Das Ergebnis kann sich sehen lassen. Die Überschriften sind als HTML-Überschriften <h#> umgesetzt, die Bilder direkt eingebettet. Da bin ich mir noch nicht ganz sicher, wie ich die gerne formatiert hätte. In meinen beiden vorherigen Posts hatte ich sie als Vorschau angezeigt und dann per Klick die Datei in einem neuen Tab geöffnet. Wenn ich mir recht überlege aber eigentlich blöd. Das nervt mich auch immer beim Lesen, wenn ich erst drauf klicken muss und dann auch noch den neuen Tab wieder zumachen muss um wieder zum Artikel zu kommen.

Weitere Tests habe ich für Links und für für verschiedene Formatierungen, vor allem von Programmiercode, gemacht. Das Ergebnis sieht folgendermaßen aus:


Leider nicht ganz, was ich mir erhofft hatte. Der Link wurde umgesetzt, der Quelltext ist aber nicht sonderlich schön geworden. Im Quellcode sieht man dann, dass er lediglich die Schriftart übernommen hat. Naja. Irgendwie auch verständlich. Da muss ich mir also noch etwas anderes ausdenken bzw. mal geeignete WordPress Code-Formatting Plugins googlen.

Leider lässt sich auch kein Beitragsbild festlegen, welches ich gerne nutze. Und verschlagworten lässt sich der Beitrag auch nicht.

Was mich bei der ganzen Angelegenheit auch etwas unsicher macht ist der Dialog der angezeigt wird, wenn man sich zum Blog verbindet:

Das ist nicht gerade vertrauenserweckend und eine kurze Recherche hat auch ergeben, dass das XML-RPC Verfahren nicht gerade das sicherste ist.

Zusammenfassung

Vorteile
  • Ein bisschen mehr WYSIWYG als Notepad durch direktes Einfügen von Bildern
  • Nicht so umständliches Einfügen von Bildern wie direkt in WordPress
Nachteile
  • Nur Überschriften und Standardformatierungen ohne Probleme möglich
  • Kein Beitragsbild
  • Keine Schlagworte
  • Unsicherer Übertragungsweg
Android Studio Master Detail Flow

Programming Pursday – Auch das beginnt…

Also, Programming Pursday:
Der heißt so, weil ich beschlossen hab einen Tinkering Tuesday einzuführen (siehe Erklärung dort). Dann hab ich mir überlegt, dass ich eigentlich auch gerne wieder mehr programmieren möchte. Donnerstag wäre doch erstmal gut. Aber das ist keine Alliteration, weder im Deutschen, noch im Englischen. Naja, dann wird halt eine daraus gemacht!
Um meinen Fortschritt zu dokumentieren habe ich als erstes Greenshot installiert und so konfiguriert, dass es automatisch die Bilder speichert ohne mich mit irgendwelchen Dialogen zu nerven. Standard ist das aktuelle Fenster. Da wird auch gleich der Dateiname/-pfad in die Zwischenablage kopiert, das ist hilfreich für den Text, den ich nebenbei dazu schreibe. Da kann ich gleich eine Referenz zum Bild einfügen:
Greenshot - Einstellungen
Greenshot – Einstellungen
Mein Bildschirm-Setup umfasst einen 24-Zoll und einen 19-Zoll Widescreen. Das ist ungemein praktisch. Hier mein Programmier-Setup:

Der Hauptbildschirm wird von Android Studio eingenommen.

Bildschirm Setup Hauptbildschirm
Bildschirm Setup Hauptbildschirm

Der Zweitbildschirm hat am linken Rand den Android Emulator, dahinter den Windows Explorer auf diverse Ordner (workspace, APIs, etc.), auf der rechten Seite den Editor um alles zu dokumentieren.

Bildschirm Setup Zweitbildschirm
Bildschirm Setup Zweitbildschirm

Außerdem läuft hier ein Browser (im Moment teste ich noch Edge, da er auf Windows 10 zumindest auf meinem Rechner performanter zu laufen scheint als Firefox. Chrome war ich noch nie ein Fan von…). Manchmal auch auf dem Hauptbildschirm, ist aber ganz praktisch, wenn man einer Anleitung folgt, nicht immer hin- und herschalten zu müssen sondern beides nebeneinander geöffnet zu haben.

 Aber nun zum Programmieren. Ist ja schließlich Programming Pursday!
Ich hab schon länger vor eine App für Android zu schreiben. Ich hab schonmal eine für unsere Bandproben geschrieben um unsere Songs einzugeben und eine zufällige Reihenfolge zu erzeugen, damit wir die Songs nicht immer in derselben Reihenfolge spielen. Das wird ja langweilig. Das hat funktioniert, hab ich allerdings vor ca. 2 Jahren, damals noch mit Eclipse gemacht. Das ist ja alles überholt mittlerweile…
Als erstes hab ich mir deswegen natürlich Android Studio installiert. Nach langem hin und her mit dem mitgelieferten Emulator (ich hab keine Intel CPU, da kann man dann wohl nicht wirklich die ARM Architekturen, sondern nur die x86 Architekturen nutzen) hab ich mich dann für den Genymotion Emulator entschieden. Installiert, gestartet: Läuft! Und das um einiges performanter als der mitgelieferte, der sich beim Starten laaaaaaaange Zeit gelassen hat.
Da ich schon eine ungefähre Idee habe, was für eine App ich entwickeln will, hab ich mich auch gleich um die Cloud-Anbindung gekümmert. Parse.com soll es werden. Das kann man erstmal schön umsonst testen bis zu einer gewissen Größe. Ich weiß noch nicht, ob ich das Ganze auch noch ein wenig kapseln sollte, damit der eventuelle Umstieg auf ein anderes Backend leichter wird… mal sehen.
In Android Studio hab ich dann mit dem Master/Detail Flow gestartet:
Android Studio Master Detail Flow
Android Studio Master Detail Flow
Dann wird erstmal Parse.com integriert. Anleitung gibt es direkt bei Parse und hat auch auf Anhieb funktioniert:
https://www.parse.com/apps/quickstart#parse_data/mobile/android/native/existing
Da ich eine App schreiben will, die im Grunde eine Todo-Liste abbildet und auch offline nutzbar sein soll, fang ich dann doch gleich mal mit dem Parse-Tutorial für die Offline-Todo-app für Android an:
https://www.parse.com/tutorials/using-the-local-datastore
Das setz ich aber natürlich gleich in meine Namenskonventionen und meinen Master/Detail-Flow um. Wird schon schief gehen und wäre ja langweilig 1:1 nachzubauen.

Meine Task-Klasse ist schnell implementiert

Task-Klasse
Task-Klasse
Bei Kapitel 3, dem TodoListAdapter hapert es aber erstmal, da der ParseQueryAdapter mittlerweile Teil der ParseUI ist. Der Anleitung unter
https://github.com/ParsePlatform/ParseUI-Android

ParseUI-Anleitung
ParseUI-Anleitung

folgend, hab ich mir erstmal mein Projekt zerschossen. Parse konnte überhaupt nicht mehr aufgelöst werden, kompilieren ging auch nicht mehr. Da hilft nur neu aufsetzen :-/ Nochmal das Ganze, diesmal wird aber vorher ein Backup gemacht.

Und damit wird der heutige Programming Pursday beschlossen.
http://www.gratisography.com/

Tinkering Tuesday – Es beginnt…

So, also es ist Tinkering Tuesday.
Was das bedeutet werde ich in einem weiteren Post mal näher erklären. Im Augenblick ist es erstmal ein Terminblocker um mich mal wieder dem Tinkering (dt. Basteln) zu widmen.
Am ersten Tinkering Tuesday werde ich mir erstmal eine neue Webseite anlegen, damit ich auch das hier alles in die Welt hinaus posaunen kann. Da ich bereits im Besitz einer eigenen Web-Domain (boriswerner.eu) bin, soll das Ganze natürlich auch hier entstehen.
Mein Hoster ist zwar nicht optimal (strato.de), aber da ich alle meine E-Mails hier empfange hatte ich nie die Muße mir einen neuen Hoster zu suchen. Da ich aber das günstigste Paket habe, brauche ich dann doch noch etwas, was mir erlaubt WordPress zu installieren. Da bin ich auch schon vorher fündig geworden. Seit mehreren Jahren nutze ich schon bplaced.net als Hoster. Gefällt mir sehr gut. Ist kostenlos, solange man sich alle 3 Monate mal anmeldet. Man bekommt aber rechtzeitig vor der Deaktivierung eine Erinnerungs-Mail auf die hin ich mich dann immer einmal an den Login mache.
Also wordpress runtergeladen (de.wordpress.org) und per Filezilla auf den Webspace rüberschieben. Anschließend über den Browser den Pfad zur Installation aufrufen und der wirklich sehr kurzen Einrichtung folgen.
Daraufhin hat man ein leeres WordPress, das einen Beispielbeitrag beinhaltet und nach Standard aussieht. Also erstmal ein neues Template suchen. Google hilft da mit den Stichwörtern „wordpress template“ sehr gut weiter. Bei mir ist die Wahl erstmal auf tecblogger (nein, nicht des Namens wegen) gefallen:
https://de.wordpress.org/themes/tecblogger/

Das Titelbild passt allerdings noch nicht:

Das frisch installierte Template auf der noch leeren WordPress-Seite
Das frisch installierte Template auf der noch leeren WordPress-Seite
Naja. Also erstmal ein schönes Bild aus der eigenen Sammlung suchen. Oder einfach mal ein Stockphoto. Da gibt es doch mittlerweile auch kostenlose Alternativen. Hier eine schöne Auflistung:
https://bootstrapbay.com/blog/free-stock-photos/
Mein aktuelles Header-Bild ist von
http://www.gratisography.com/
Bleibt eigentlich nur noch den Beispielbeitrag zu löschen und den ersten eigenen zu posten, richtig?
Naja, nicht ganz. Ich werde noch mein Menü und einige Kategorien einrichten. Die erste ist natürlich das „Tinkering“ (wird allgemein gehalten, „Tinkering Tuesday“ wird ein Schlagwort). Die zweite ist der Programmierung gewidmet (hier wird noch der „Programming Pursday“ verschlagwortet). Ein weiterer ist für die Musik (hier erstmal nur als Link zu meiner Band „Monkey Fly„). Vielleicht kommen nochmal mehr hinzu, aber als Anfang reicht das auf jeden Fall.
Erstmal nur drei Kategorien
Erstmal nur drei Kategorien
Erstmal relativ leer das Ganze, aber das soll sich ja ändern! Ich werde nicht nur neue Projekte, sondern auch all das, was ich über die Jahre so angesammelt habe endlich mal vorstellen.
Die fertige noch leere Seite
Die fertige noch leere Seite
Als nächstes kommt das Social Posting, damit meine ach so wertvollen Blogposts auch in die weite Welt getragen werden.
Eine kurze Google-Suche empfiehlt SNAP, den Social Networks Auto-Poster.
https://wordpress.org/plugins/social-networks-auto-poster-facebook-twitter-g/
Leider steht mir CURL (https://de.wikipedia.org/wiki/CURL) in der Basis-Version von bplaced.net nicht zur Verfügung. Naja, dann wird es halt erstmal manuell gemacht.
Naja, machen wir weiter mit Analytics. Da solls erstmal Google Analytics werden. Anleitung gibts auch. Da die Plugins auch alle CURL benötigen wird es einfach in den Footer eingebunden (siehe Anleitung hier: http://elbnetz.com/wie-man-wordpress-mit-google-analytics-verbindet/). IP-Anonymisierung nicht vergessen. Sicherheitshalber Impressum und Datenschutzerklärung über http://e-recht24.de erstellen und einbinden, fertig!
Am nächsten Tinkering Tuesday:
Workflow-Optimierung – Wie kann ich meine Projekte möglichst effizient in WordPress dokumentieren?