TrayRSS the rise of the newsreader

TrayRSS is going to get a new dimension from notification to storage. This means that a lot of work has to be done before i’m happy with it. So please be patient and treat TrayRSS as what it is: evolving.

Bye, bye Google Reader

Google Reader will be suspended

Well, we all heared about it. Google has announced that Google Reader, their RSS web service, will be suspended on 1st of july 2013. Although there were loyal followers, they said, that the usage has declined. I was one of those followers, and many friends of mine were too. Damn you social web! You were not supposed to manage news data, you were always just a possibility to view the current snapshot.

And now?

There are some alternatives you can use like NewsBlur, Feedly, The Old Reader or Pulse. But they have all some drawbacks. Like the usage of a browser plugin, some restrictions to get fees, only login via facebook/openid or just to much desigend for „touch“.

Or you can just sign a petition to perhaps get your reader back.

TrayRSS

Well i don’t know the alternative that brings me over the winter. But i know what i want to use afterwards! In September 2011 i’ve stopped developing my own desktop RSS Tool: TrayRSS. With the strong competitor from google i thought i would not use it by myself in the near future. I was wrong. And at the beginning of this year i decided to start the development of TrayRSS again to make it the tool i would like to use!

chances

TrayRSS is evolving. Emerged from the idea of a friend to just have some kind of alert for a single RSS thread, it changed to a multifeed monitoring software, reminding the users in regular time intervalls when new content was spotted. As a reminder for a few feeds good enough, but not what i was looking for. Compared to RSSOwl, some simply key feature are missing.

  • A window to manage the feed items. To read them, to mark them for later usage, to share them or search in them.
  • Additionally the state of the feeds should possible to be synchronized to different devices. (Perhaps with an web back end)

With this key features, i would use it by myself!

first small steps

And there is a new release allready! This development increment of TrayRSS was about the user data. TrayRSS now stores the user data like the configuration, the log and most important the feed data within the user directory. But the user has the possibility to change this behaviour. In the root directory of TrayRSS are two properties files, letting the user choose the destination of logs and feed data. You can link your TrayRSS with your cloud storage of preference and can enjoy shared data.

Also a lot of internal changes has happened too, to be ready for upcoming changes.

Get TrayRSS 1.3 from the official home page!

and now?

Google has provieded a possibility to take out the feed data as an XML export. Now TrayRSS will hopefully be able to handle this in time. Therefore the next step is to provide an extended interface so the user can handle the data.

TrayRSS is going to get a new dimension from notification to storage. This means that a lot of work has to be done before i’m happy with it. So please be patient and treat TrayRSS as what it is: evolving.

Watch out for the next release of TrayRSS, bye!

Ähnliche Artikel:

Spring Transaction Propagation Überblick

Nutzt man das Transaktionsmanagement in Spring, kann man als Entwickler über die Propagation einer Transaktion (Eigenschaft z.B. auf der Annotation) bestimmen, wie die aufgerufenen Methoden in Bezug auf die Transaktion gekapselt werden. Verschachtelt, oder in einer großen Transaktion, man hat hier viele Freiheiten. Ich möchte nun die verschiedenen Ausprägungen von Propagation vorstellen und dabei anmerken wie sich diese bei einer Verschachtelung auswirken.

Transaction Propagation – Ein Überblick

Nutzt man das Transaktionsmanagement in Spring, kann man als Entwickler über die Propagation einer Transaktion (Eigenschaft z.B. auf der Annotation) bestimmen, wie die aufgerufenen Methoden in Bezug auf die Transaktion gekapselt werden. Verschachtelt, oder in einer großen Transaktion, man hat hier viele Freiheiten. Ich möchte nun die verschiedenen Ausprägungen von Propagation vorstellen und dabei anmerken, wie sich diese bei einer Verschachtelung auswirken.

REQUIRED

Logik unter REQUIRED nutzt die selbe Transaktion wie eine aufrufende Logik, wenn diese bereits innerhalb einer Transaktion läuft. Wenn noch keine Transaktion vorhanden ist, wird eine neue gestartet. Als Beispiel nehmen wir die Logik OUTER und INNER, beide mit Propagation REQUIRED. OUTER und INNER sind gekoppelt, sprich OUTER nutzt die Funktionalität INNER. Der Aufruf von OUTER erzeugt also eine neue Transaktion, da noch keine vorhanden ist. Nun ruft OUTER die Logik von INNER auf. Es existiert bereits eine laufende Transaktion, daher nutzt INNER diese. Wird nun innerhalb von INNER ein Rollback verursacht, kann auch OUTER nicht mehr Commiten und unterliegt einem Rollback.

REQUIRES_NEW

Kennzeichnet Logik die immer innerhalb einer neuen Transaktion ausgeführt wird. Nehmen wir wieder an OUTER hat eine Transaktion und ruft INNER, welches die Propagation REQUIRES_NEW aufweist, auf, sind diese beiden Transaktionen distinkt. So in INNER ein Rollback erfolgt, bekommt die Transaktion OUTER davon nichts mit und umgekehrt. Während INNER ausgeführt wird ist die Transaktion von OUTER pausiert.

NESTED

Nested Logik nutzt die selbe Transaktion wie der Aufrufer, jedoch werden Savepoints genutzt, um die innere Transaktion von der Äußeren unabhängig(er) zu machen. In der inneren Transaktion kann so ein Rollback erfolgen bis zurück in die äußere Transaktion, ohne dass dieser Teil ebenfalls einem Rollback unterliegt.

MANDATORY

Kennzeichnet Logik, die eine bereits geöffnete Transaktion voraussetzt. Wird sie aufgerufen ohne einer laufenden Transaktion wird eine Exception vom Container geworfen.

NEVER

Beschreibt Logik, die in keiner Transaktion ausgeführt werden darf. Erfolgt dennoch ein Aufruf aus einer Transaktion heraus wird eine Exception vom Container geworfen.

NOT_SUPPORTED

Logik wird hierbei außerhalb der Transaktion aufgerufen. Ist eine Transaktion bereits vorhanden, wird sie für den Aufruf der Logik pausiert.

SUPPORTS

Wenn bereits eine offene Transaktion vorhanden ist, wird die Logik in dieser ausgeführt. Ist keine vorhanden, wird die Logik auch ohne Transaktion durchlaufen.

In diesem Sinne:

@Transactional(propagation=Propagation.REQUIRES_NEW)
public void haveSomeFun(User user) {
    // TODO have fun
}

Ähnliche Artikel:

Miotrtwoch – auch im Jahr 2012 gefeiert

Es war wieder soweit, und alle Welt feierte mit uns! Der erste Mittwoch im November ist der Miotrtwoch! Auch 2012 war wieder ein Fest!

miotrtwoch benmiotrtwoch tomEs war wieder soweit, und alle Welt feierte mit uns!

Der erste Mittwoch im November ist der Miotrtwoch!

Nicht nur die Einleitung zum Miotrtwoch Artikel hat mittlerweile Tradition, auch haben wir dermal erneut das schöne Italien besucht. Die exquisite Küche der Pizzaria Valentino sorgte erneut für ausgesprochene Gaumenfreuden, und das zuvorkommende Personal lies keinen Festtagswunsch unerfüllt.

Zur Feier des Tages bekamen wir sogar einen Miotrtwoch-Ristretto aufs Haus, herzlichen Dank und

Happy Miotrtwoch!

 

Ähnliche Artikel:

Technisch bedingte kurze Pause

Hello, leider kann ich diese Woche kein passendes Foto online stellen, da das Netzteil meines PCs kaputt ist. So kommt es zu einer kurzen Pause.

Hello, leider kann ich diese Woche kein passendes Foto online stellen.

 

Wie auf Twitter nachzulesen war, ging mein Rechner in den Streik, und bis adäquater Ersatz für mein Netzteil geschaffen werden kann vergeht noch etwas Zeit. Ich werde das Foto also verspätet nachliefern müssen.

Nichtmal mit einem der bereits vorbereiteten technisch orientierten Artikel kann ich euch vertrösten, die sind auch am anderen Gerät :/

Aber immerhin könnt ihr euch an den Bildern meiner Foto/Woche Kollegen erfreuen!

Greets

Ähnliche Artikel:

  • Noch keine vorhanden.

Mit Bash prüfen ob das eigene Script gerade läuft

Die Problemstellung

Ein Script soll alle x Minuten laufen und eine bestimmte Tätigkeit auf dem Server ausführen.

Nun kann es vorkommen, dass das Script aber länger braucht als die Zeitspanne bis zum nächsten Aufruf desselben Scripts (z.B. Kopier und Backup Jobs, Mails abholen, …)

Natürlich sollte so ein Script dann nicht ein 2tes Mal gestartet werden sondern die Ausführung übersprungen werden. Zu diesem Zweck möchte ich hier ein kleines Bash Script zeigen, das genau diesen Zweck erfüllt.

Die Lösung

#!/bin/bash
#
# testpid.sh - demo script to show how to check if a script
# with the same name is currently running
#
# by Leo Eibler
# resources:
#    http://www.eibler.at
#    http://leo.sprossenwanne.at
#    http://www.nullpointer.at
#

# PID - pid of the current script
PID=$$
# SCRIPTNAME - current name of the script without directory prefix
SCRIPTNAME=`basename $0`
# PIDFILE - where to write the current pid
PIDFILE=/tmp/$SCRIPTNAME.pid

# ENDEXECUTION - if 1 then stop script, if 0 everything is ok and continue
ENDEXECUTION=0

if [ -f "$PIDFILE" ]
then
    RUNNINGPID=`cat "$PIDFILE"`
    echo "got pid from $RUNNINGPID from pidfile '$PIDFILE'"
    PROGRAMPID=`ps -e | grep "$SCRIPTNAME" | grep -v grep | awk '{print $1;}'`
    for PIDEL in $PROGRAMPID
    do
        echo "testing pid of running scripts '$PIDEL' == '$RUNNINGPID' from pidfile"
        if [ "$PIDEL" == "$RUNNINGPID" ]
        then
            echo "found PID $RUNNINGPID current running - end execution"
            ENDEXECUTION=1
            break
        fi
    done
fi

if [ "$ENDEXECUTION" == "1" ]
then
    echo "Current script '$SCRIPTNAME' already running (pid $RUNNINGPID) - end execution"
    exit 1
fi
# writing PID to pidfile
echo $PID > $PIDFILE

#
# ---- START ----
#

echo "do your stuff here ..."
sleep 5
echo "... end script"

#
# ---- END ----
#

# delete pidfile
rm $PIDFILE
exit 0

Die Erklärung

Zuerst holt sich das Script den eigenen Namen mit basename $0 ($0 würde ebenfalls den Pfad des Scriptaufrufs enthalten aber hier würde der spätere Aufruf von ps bzw. das automatische Erstellen und Auslesen des passenden pid-Files scheitern).

Mit dem Namen des Scripts wird dann versucht ein pid-File (welches die Process-ID des aktuell laufenden Scripts enthält) auszulesen. Der Pfad des pid-Files kann beliebig gewählt werden, jedoch muss das Script natürlich Schreibrechte auf die Datei besitzen.

Falls kein pid-File existiert kann das Script davon ausgehen, dass es derzeit nicht bereits läuft und seine eigentliche Arbeit aufnehmen.

Falls jedoch ein pid-File vorhanden ist, wird dieses ausgelesen und mit allen derzeit laufenden Process-IDs von Prozessen mit dem gleichen Namen wie das Script verglichen.

Wird hierbei eine Übereinstimmung gefunden, dann läuft das Script bereits und durch Setzen der Variable $ENDEXECUTION auf 1 wird der Abbruch signalisiert.

Dieser Vergleich mit den Process-IDs von Prozessen die bereits laufen ist deswegen wichtig, da es ja sein könnte, dass das Script beim vorherigen Aufruf zwar ein pid-File angelegt hat, aber danach abgebrochen wurde (z.B. manuell durch den Benutzer) und das pid-File dadurch nicht gelöscht wurde.

Ist die Überprüfung auf eine laufende Instanz negativ, muss zuerst das pid-File angelegt werden (Die Variable $$ enthält die pid des aktuellen Prozesses).

Nach Beendigung der Arbeit sollte danach das pid-File wieder gelöscht werden um einen sauberen Abschluss zu bilden.

Das Script als Download gibts hier.

 

Ähnliche Artikel: