Feeds lesen mit der Owncloud News App

Google Reader ist ja nun schon eine Weile tot. Das hat mich anfangs eigentlich gar nicht so mitgenommen. Ich hatte zwar einen Account dort und auch ein paar Feeds drin, aber so so richtig zum Lesen bin ich nie gekommen.
Ca. im Mai kam dann Owncloud mit einer eigenen News App daher. Sie funktionierte eigentlich von Anfang an recht gut. Nur das Update der Feeds war bisher immer die Archillesferse der App. Entweder man musste andauernd in der Weboberfläche herum klicken um damit den AJAX Cron zum Laufen zu bekommen. Oder mittels http://deine-owncloud.com/cron.php mehrmals den Cronjob anschmeißen. Nach 4 Mal wurde dann endlich auch die Feedupdate Funktion angetriggert.

Wer jetzt sowieso immer nur seine News in der Weboberfläche gelesen hat, konnte dann noch mit dem AJAX Cron leben. So wurden dann eben während dem Lesen die Feeds upgedatet. Doch dann kam die Zeit als ein fröhlicher Entwickler die News-iOS-App hervorbrachte. Nämlich iOC-News. Damit musste dann dringend ein vernünftiger Cronjob her. Nun habe ich die letzten Tage mal wieder ins News-App Repository reingeschaut und festgestellt, dass die News App endlich ein kleines Python Update Skript enthält. Also mal via SSH auf meinen Webspace eingeloggt, Python angeworfen und ausprobiert. Und hurra: Das Skript funktioniert und alle Feeds werden zuverlässig upgedatet. Das ist besonders schön um endlich auch mal auf dem iOS Gerät die aktuellen Feeds zu lesen.

Ich bin ja ein bisschen Binärgewitter geprägt und da wird sehr oft mal Python gelobt. Also was lernen wir daraus. Nimm einfach ein bisschen Magie, stecke es in Python und schon funktioniert alles wunderbar.

Seit gestern läuft das Skript als Cronjob auf meinem Webserver und aktualisiert zuverlässig alle Feeds. Je nachdem wie schön euer Cronjob funktioniert muss man den Update Befehl in eine Datei stecken mit folgendem Inhalt (User und Passwort habe ich weggelassen):

#!/bin/sh
python3 /PFAD_VOM_ROOT/owncloud/apps/news/bin/updater.py --user HIER_DEN_OWNCLOUD_USER_EINTRAGEN --password HIER_DAS_OWNCLOUD_PASSWORT_EINTRAGEN https://deine.owncloud.de

Das Ganze dann als Datei „owncloud.sh“ (oder anders, aber die Endung .sh macht Sinn, da es ein Shellskript ist) speichern und im Cronjob Menü eures Hosters eintragen.

Installieren tut man die App ganz einfach über das App-Menü in Owncloud. WICHTIG: Owncloud muss mindestens in Version 5.0.6 oder höher vorliegen.
Da die News App auch öfters mal weiterentwickelt wird, macht es auch Sinn ab und an mal ins App-Menü reinzuschauen und die News App anzuklicken. Wenn dort Update steht, einfach draufklicken. Das Update hat bei mir zumindest die letzten Male reibungslos funktioniert.

Eine genauere Anleitung (auf Englisch, was aber jeder einigermaßen verstehen sollte) gibt es im README. Da sind auch einige Hinweise aufgelistet, die man beachten sollte.

Die iOC News App gibt es im offiziellen Appstore. Die fehlerbereinigte Version aber aktuell auch noch hier. Die Seite des Entwicklers gibt es hier.

FizzBuzz

Eigentlich sollte man denken, ist folgende Aufgabe nicht so schwer. Ich bin allerdings doch gescheitert. Schließlich wird die FizzBuzz Aufgabe oft bei Einstellungsgesprächen gestellt.

Write a program that prints the numbers from 1 to 100. But for multiples of three print “Fizz” instead of the number and for the multiples of five print “Buzz”. For numbers which are multiples of both three and five print “FizzBuzz”.

Also zähle von 1 bis 100 hoch und teile die Zahl eben immer durch 3 = Fizz, durch 5 = Buzz und durch beides = FizzBuzz. Ansonsten gebe die Zahl korrekt aus.

Meine erste Rangehenweise war folgendermaßen:

i=1
for x in range(1, 100):
    if i/3:
        print "Fizz"
    if i/5:
        print "Buzz"
    if i/3 and i/5:
        print "FizzBuzz"
    else:
        print i
    i=i+1

Doch damit war schon einiges falsch:
1. Die Untersuchung auf FizzBuzz muss an aller erster Stelle kommen.
2. Für If Abfragen sollte das Ergebnis immer 0 sein, dass ist bei i/3 nicht unbedingt gegeben.

Letztendlich hat es dann geholfen die Reihenfolge zu ändern und darauf zu achten, dass ich eher Modulo (%) statt (/) verwende und das Ergebnis immer mit 0 zu deklarieren.
Also so:

for x in range(1, 101):
    if x % 3 == 0 and x % 5 == 0:
        print "FizzBuzz"
    elif x % 3 == 0:
        print "Fizz"
    elif x % 5 == 0:
        print "Buzz"
    else:
        print x

Das „i = 1“ und die Hochzählerei „i = i + 1“ kann man sich auch sparen, wenn man einfach die For Zählvariable nimmt. Diese wird bei jedem Schleifendurchlauf von alleine hochgezählt. Hätte ich bei VB.NET wohl auch gleich gemacht. Die Elif Passagen sind eigentlich auch logisch, hatte ich früher aber nicht so oft genutzt. :)
Gefunden habe ich diesen Lösungansatz bei Stackexchange

Eigentlich ist es ja alles gar nicht so schwer. Man muss nur die Eigenheiten der Sprache kennen und ein bisschen mathematisches Verständnis mitbringen.
Python habe ich bis vor einer halben Stunde noch gar nicht geschrieben, daher sind die fehlenden Eigenschaften verschmerzbar.

Natürlich kann man auch alles noch komprimieren, aber darum ging es mir hier nicht. Ich möchte den Code ja auch noch nachvollziehen können. :)

Welche Programmiersprache lernen? – Python, Perl oder andere?

Hallo liebe Leute.
Um mal wieder was sinnvolles zu tun, dachte ich mir, dass vielleicht eine neue Programmiersprache ganz interessant wäre. Zum einen um mich selbst mal wieder weiter zu bilden. Aber zum anderen um auch manche Codes von bestimmten Programmen zu verstehen. Als Beispiel kann man hier mal den kleinen „Hack“ nennen namens Dropship. Das Tool hat damals die Lücke in Dropbox genutzt um quasi Filesharing mit größeren Dateien zu betreiben. Dieses war beispielsweise in Python geschrieben, daher liegt es nahe, sich mal näher mit Python zu beschäftigen.
Da ich auch Linux Nutzer bin, sollte die Programmiersprache auch in diesem Bereich irgendwie nützlich sein. Viele schnelle „Hacks“ um eine bestimmte Aufgabe zu automatisieren sind ja auch in Perl geschrieben. Daher wäre vielleicht auch Perl interessant. Andererseits wird von Perl behauptet, dass dort der Code schnell unübersichtlich sein soll.
Wenn ich etwas programmieren möchte, wird es sich vermutlich eher auf die Konsolenebene beschränken. Meistens wünsche ich mir einfach irgendwelche Skripte, die manches für mich automatisieren.

Die Sprache sollte aber auch ein paar Anforderungen beherrschen:
– Code leicht lesbar
– COM-Unterstützung
– Objekt Orientiert (wobei, dass heutzutage ja schon Standard ist)
– Laufzeitumgebungen für Linux (eventuell auch Windows und Mac)

Ein paar Grundkenntnisse habe ich natürlich auch noch: C von der Berufschule. Daher sind mir zumindest die Kontrollstrukturen, Variablen und Dateiverarbeitung relativ vertraut. Und von der Arbeit habe ich vor nem halben Jahr mich intensiv mit COM-Funktionsaufrufen und die Abfragen von Datenbanken mit sqlite3 in VB.NET beschäftigen dürfen. Da diese Programme nur als Dienste ohne Benutzereingaben konzipiert sind laufen diese „Skripte“ auch weitgehenst reibungslos im Hintergrund auf einem dediziertem Server. Die Hauptarbeit sind sowieso meist Abfragen über das COM-Objekt. Da dieses „Skript“ jedoch auf VB.NET basiert, läuft es nur auf Windows und braucht ewig viele Code Zeilen aufgrund der VB.NET Sprachstruktur.

Nach einer kleinen Lektüre in „A byte of Python“ wurde mir klar, dass Python mir mehr Spaß als VB.NET bereiten könnte.

Daher meine Frage: Was haltet ihr von Python? Lohnt sich diese Sprache? Oder habt ihr noch eine andere Sprache, die sich gut für Konsolenprogramme und eventuell auch COM-Schnittstellen unterstützt? Anbindungen an Web 2.0 Schnittstellen wären auch dankbar.
Java und C# möchte ich bewusst vermeiden, da ich diese Sprachen nicht mag. Java hat so viele verschachtelte Aufrufe (system.lang.console.output oder so ähnlich) und C# ist fast wie C einfach öde und schwer lesbar.

Speziell zu Python:
– Kennt ihr noch weitere gute Einsteier Python Seiten?
– Welchen Editor oder IDE nutzt ihr für Python? Hab mal Eric4 genommen.
– Python 2.x oder Python 3.x verwenden?

Danke für eure Erfahrungen.

//Update: 21.01.2016:
Aufgrund einer Empfehlung per Mail kann man sich auch mal die Perl Sammlung anschauen.
Davor bitte ich aber euch: Schaut euch diese Videos an, warum man Perl besser NICHT benutzen möchte!

Wenn ihr dann immer noch Perl lernen wollt: Perl 6 hat diese schreckenserregenden Features nicht mehr. :) Aber warten wir besser noch den 33c3 ab. Vielleicht gibt es dazu dann wieder einen Vortrag!