Online Bookmark Verwaltung auf eigenem Server mit scuttle/semanticscuttle

Es ist kein Geheimnis, dass ich absolut nichts mit Cloud und Onlinediensten anfangen kann, solange die Daten nicht durch mich selber verwaltet werden. Selbst bei so „harmlosen“ Themen wie Lesezeichen. Es gibt diverse Dienste im Netz, welche für euch eure Lesezeichen speichern, damit ihr sie so über mehrere Geräte oder Browser synchronisiert habt. Allerdings haben auch alle Dienste wieder Einschränkungen wie „läuft nur mit Chromium“, „läuft nur mit Firefox“, etc…. achja und natürlich „DEINE Daten liegen bei UNS“.

Die meiste Zeit habe ich das Firefox Plugin syncplaces verwendet, welches aber leider nicht mehr weiterentwickelt wird und auch nicht mehr verfügbar ist. Danach habe ich es mit XMarks versucht… Das Plugin für Firefox bietet die Möglichkeit des eigenen Servers an. Das Plugin für Chromium wieder nicht. Auch auf meinem Tablet oder Smartphone hätte ich meine Lesezeichen gerne. Egal welchen Browser ich verwende.

Ich bin schon seit langer Zeit auf der Suche nach einem Stückchen Software, welches mir die Verwaltung von meinen Lesezeichen auf MEINEM Server ermöglicht. Allerdings habe ich nie das richtige für mich gefunden. Das einzige was ich bis dahin ausprobiert hatte war sitebar aber das gefiel mir überhaupt nicht.

Vor ein paar Tagen habe ich mal meine alten Notizen ToDos aufgeräumt und bin dabei auf einen Merker gestoßen mit dem Tag „ausprobieren“ :-)

Dabei handelte es sich um die Software scuttle. Auch wenn die Software länger kein Update mehr bekommen hat und somit vermutlich nicht mehr gepflegt wird, habe ich es mir dennoch mal auf meinem Server installiert. Was soll ich sagen?

Scuttle erfüllt genau meine Anforderungen und es fühlt sich richtig gut an!

Nachdem ich es über ein paar Tage hinweg genutzt habe und öfter mal über google nach Infos geschaut hatte, ist mir aufgefallen, dass scuttle in der Tat tot ist, allerdings weiterlebt durch

semanticscuttle

Dieses Projekt lebt noch und hat das ursprünglich Scuttle weiterentwickelt.

semanticscuttle bietet nicht nur die reine Bookmark Verwaltung an, sondern ist userbasiert und kann dadurch für Social Network Aspekte genutzt werden (Bookmarks weiterleiten, Bewerten, etc…)

Die Lesezeichen werden nicht in Ordnern verwaltet, sondern über Tags. semanticscuttle bietet aber die Möglicheikeit verschachtelte Tags anzulegen, welche sich dann wie Ordner darstellen. Hier mal ein Screenshot dazu:

 

 

 

 

 

 

 

 

Im ersten Schritt steht natürlich erstmal der Import eurer Lesezeichen an. Diese können über einen Export aus eurem Browser (html !) in semanticscuttle importiert werden. Ferner steht sogar der Import eurer http://delicious.com/ Bookmarks zu Verfügung. Da ich diesen Dienst aber nicht nutze, kann ich leider nicht sagen wie gut er funktioniert.

Nach dem Import müsst ihr erstmal eure Lesezeichen taggen. Das kann je nach Anzahl natürlich länger dauern. Ist das aber erstmal erledigt, habt ihr einen sehr schnellen und guten Überblick über eure Lesezeichen. Ich nutze scuttle mittlerweile für private Seiten, allerdings auch für Firmenzwecke (jeweils getrennt durch verschachtelte Tags).

Die Installation ist ebenfalls recht einfach sodass ich hier nicht viel dazu schreiben möchte. Hier der Link zur offiziellen Installationsanleitung:

Anleitung

Im großen und ganzen ist die Installation typisch für Webdienste: Apache, mysql, Konfiguration über config Dateien.

Welche Vorteile scuttle/semanticscuttle mir persönlich bietet:

Bookmarkverwaltung browserübergreifend

Bookmarkverwaltung systemübergreifend

Nutzung durch Plugins für Chromium und Firefox (vielleicht auch für IE, der ist mir aber wurscht :-) )

Verfügbarkeit der Bookmarks auch auf meinem Android Tablet/Smartphone (vielleicht auch für IOS, das ist mir aber wurscht :-) ) Hier der Link zur kostenlosen Android App
Scuttle Android

Alles in allem eine runde Sache! Cloud Dienste sind nicht schlecht, aber besser sind sie wenn man sie selber verwalten kann.

Wem der eigene Server in der großen weiten Netzwelt immer noch zu riskant ist, kann semanticscuttle auch sehr gut auf seinem NAS installieren. Ich habe es auf dem Synology Nas laufen lassen und es funktionierte einwandfrei.

 

Flattr this!

Android: Automatisierter Mailversand mit Tasker

Tasker ist für mich von je her die Android App schlecht hin! Es gibt so gut wie nichts, was man nicht mit Tasker automatisieren kann.

Eine Kleinigkeit störte mich bisher aber schon:

Aufgrund der Android Sicherheitsrichtlinien kann man über Tasker selber keine automatisierten Mails verschicken. Man kann sie zwar erstellen („Compose“), aber abschicken muss man sie noch selber.

Aber auch hierfür gibt es Möglichkeiten. :-)

Hier gibt es ein sehr gutes Tutorial (nicht für Tasker Einsteiger geeignet):

http://tasker.wikidot.com/sendemail

Das Tutorial habe ich mal durchgearbeitet und das Resultat funktioniert einwandfrei.

Was mich allerdings an der Vorgehensweise störte war, dass ich danach ein python Skript auf der SD Karte liegen hatte, welches meine Zugangsdaten zu meinem Mailaccount beinhaltete. Nicht unbedingt schön…

Da ich mich aber sowieso mal mit python auseinander setzen wollte, habe ich das bestehende Skript genommen und ein wenig umgeschrieben.

In meiner Version sind nun keine persönlichen Daten mehr im Skript enthalten, sondern werden komplett alle Variablen von „aussen“ über die Konfigurationsdatei gesetzt. Das Vorgehen ist das gleiche wie im o.g. Tutorial, also:

  • Task erstellen welche die Konfigdatei anlegt.
  • Task erstellen welche die Konfigdatei einliest, die Mail verschickt und die Konfigdatei wieder löscht.

Nochmal kurz zusammengefasst was ihr alles braucht:

  • Android Scripting Environment: Gibt es nicht im Market sondern hier
  • Den dazugehörigen Python Interpreter: Ebenfalls nicht im Market sondern hier
  • Und natürlich Tasker und root Rechte auf eurem Gerät :-)

Wie gesagt, das eigentliche Tutorial könnt ihr so durchgehen wie hier beschrieben.

Nur eure Konfigdatei müsste so aussehen:

smtp_server: URL_VON_EUREM_SMTP_SERVER
smtp_port: PORT_VON_EUREM_SMTP_SERVER
mailfrom: ABSENDER_MAIL_ADRESSE
username: BENUTZERNAME_FUER_EUREN_SMTP_SERVER
password: PASSWORT_FUER_EUREN_SMTP_SERVER
friendlyname: ABSENDER_NAME
mailto: EMPFAENGER_MAIL_ADRESSE
subject: TITEL
body:
EUER_MAIL_TEXT

Und hier die geänderte Version des python Skriptes:

#!/usr/bin/python
# sendemail.pl - Sends email based on a conf file or arguments

# Sends the actual email!
def sendemail(smtp_server,smtp_port,mailfrom,username,password,friendlyname,mailto,subject,body):
    import smtplib
    # Build an SMTP compatible message from arguments
    msg = "From: " + friendlyname + " <" + mailfrom + ">\n"
    msg += "To: " + mailto + "\n"
    msg += "Subject: " + subject + "\n"
    msg += body
    
    # Attempt to connect and send the email!
    try:
        smtpObj = '' # Declare within this block.
        # Check for SMTP over SSL by port number and connect accordingly
        if( smtp_port == 465):
            smtpObj = smtplib.SMTP_SSL(smtp_server,smtp_port)
        else:
            smtpObj = smtplib.SMTP(smtp_server,smtp_port)
            smtpObj.ehlo()
        # StartTLS if using the default TLS port number
        if(smtp_port == 587):
            smtpObj.starttls()
            smtpObj.ehlo
        # Login, send and close the connection.
        smtpObj.login(username,password)
        smtpObj.sendmail(mailfrom,mailto,msg)
        smtpObj.close()
        return 1  # Return 1 to denote success!
    except Exception, err:
        # Print error and return 0 on failure.
        print err
        return 0

import re,sys,os.path

# Declare variables...
conf_file='/mnt/emmc/Tasker/taskermail.conf'
smtp_server = ''
smtp_port = ''
mailfrom = ''
username = ''
password = ''
friendlyname = ''
mailto = ''
subject = ''
body = ''

if (len(sys.argv) == 2):
    
    conf_file = sys.argv[1]


# Process conf file if specified
if conf_file:
    if not os.path.isfile(conf_file):
        # Print out error and usage if specified conf file not found
        print "Unable to find file " + conf_file + "\n"        
        sys.exit(1)
    else:
        # Otherwise, read the file in and start processing!
        filein = open(str(conf_file),'r')
        mailconf = filein.read()
        # Read the SMTP Server URL
        smtpserverre = re.compile('^smtp_server: (.+)$',re.M)
        m = smtpserverre.search(mailconf)
        if(m):
            smtp_server = m.group(1)
        else:
            print "smtp_server value is not present"
            sys.exit(1)            

        # Read the SMTP Port Number    
        smtpportre = re.compile('^smtp_port: (.+)$',re.M)
        m = smtpportre.search(mailconf)
        if(m):
            smtp_port = m.group(1)
        else:
            print "smtp_port value is not present"
            sys.exit(1)            
    
        # Read the Username    
        usernamere = re.compile('^username: (.+)$',re.M)
        m = usernamere.search(mailconf)
        if(m):
            username = m.group(1)
        else:
            print "username value is not present"
            sys.exit(1)            
    
        # Read the Password    
        passwordre = re.compile('^password: (.+)$',re.M)
        m = passwordre.search(mailconf)
        if(m):
            password = m.group(1)
        else:
            print "password value is not present"
            sys.exit(1)            

        # Read the Friendlyname
        friendlynamere = re.compile('^friendlyname: (.+)$',re.M)
        m = friendlynamere.search(mailconf)
        if(m):
            friendlyname = m.group(1)
        else:
            print "friendlyname value is not present"
            sys.exit(1)            
    
        # Check for valid email address in mailfrom field
        re1 = '^mailfrom: '
        re2 = '(.+@.+\..+)'
        re3 = '$'
        mailfromre = re.compile(re1+re2+re3,re.M)
        m = mailfromre.search(mailconf)
        if(m):
            mailfrom = m.group(1)
        else:
            print "mailfrom value is not present"
            sys.exit(1)            
    
        # Check for valid email address in mailto field
        re1 = '^mailto: '
        re2 = '(.+@.+\..+)'
        re3 = '$'
        mailre = re.compile(re1+re2+re3,re.M)
        m = mailre.search(mailconf)
        if(m):
            mailto = m.group(1)
        else:
            print "mailto value is not present"
            sys.exit(1)            
    
        # Grab subject from subject field...
        subjectre = re.compile('^subject: (.+)$',re.M)
        m = subjectre.search(mailconf)
        if(m):
            subject = m.group(1)
        else:
            print "subject value is not present"
            sys.exit(1)            
    
        # And finally process the message body.
        bodyre = re.compile("body:\n(.+)", re.S)
        m = bodyre.search(mailconf)
        if(m):
            body = m.group(1)
        else:
            print "body value is not present"
            sys.exit(1)            

        
        # Send email if all values set!
if (sendemail(smtp_server,smtp_port,mailfrom,username,password,friendlyname,mailto,subject,body)):
    print "Email sent successfully!"
    sys.exit(0)
else:
    # Exit with error if email is not sent successfully
    print "Failed to send email! Check your login details and connection!"
    sys.exit(1)

Flattr this!

Sabayon: Nach Update Probleme mit Radeon Grafikkarten

So stand es vor kurzem noch auf der Sabayon Seite:

„Upcoming important updates for ATI/AMD GPU owners
Mon, 30 Jul 2012 19:33:46 +0000, sabayon-weeklyHi guys, the next week we’re going to roll out an important X.Org Server update. We are updating this vital component of the distro to version 1.12.2. In order to do so, we are now forced to upgrade the AMD Catalyst Drivers to version 12.6. This version also discontinues the support for Radeon HD 2000/3000/4000. If you own one of these cards, you better switch to the OpenSource drivers NOW.“

Diese Meldung habe ich natürlich gekonnt ignoriert… Der einzige Vorteil: Wenigstens wusste ich nach dem letzten Update warum mein KDE Desktop mal so gar nicht mehr starten mochte. :-)
Nachdem ich die Vorschläge auf der Sabayon Seite umgesetzt habe (erfolglos) bin ich im Sabayon Forum fündig geworden. Hier mal was zu tun ist, wenn man wie ich eine der genannten Karten nutzt (die einzelnen Schritte habe ich aus dem Forum):
Ziel ist es den Radeon Treiber loszuwerden und den Rechner auf die Open Source Alternative umzustellen
Also erstmal die ATI Treiber entfernen
equo remove --configfiles ati-drivers ati-userspace
Prüfen ob der Open Source Treiber bereits installiert ist:
equo query installed xf86-video-ati --quiet –verbose
Nur wenn er noch nicht vorhanden ist nachinstallieren (scheinbar kann es zu Problemen kommen, wenn er einfach nochmal installiert wird:
equo install xf86-video-ati
Entfernen folgender Datei:
rm /etc/gpu-detector.conf
 Der Kernel muss das Radeon Modul laden. Dies erreicht man wenn man folgende Datei in einen Editor lädt und diese Zeile hinzufügt:
nano /etc/conf.d/modules
modules=radeon
 Aus dem Grub Menü müssen ein paar Kernel Module entfernt werden:
Folgende Datei in einen Editor laden
nano /etc/default/sabayon-grub
Diese Einträge müssen entfernt werden:
console=tty1, quiet splash=**** and vga=****
Anstelle der **** können unterschiedliche Werte stehen.
Kernel Mode Setting aktiveren:
Folgende Dateiin einen Editor laden:
nano /etc/default/grub
Die Zeile die mit GRUB_CMDLINE_LINUX_DEFAULT beginnt um folgendes erweitern:
radeon.modeset=1
Folgende Datei erzeugen (kann sein, dass die schon vorhanden ist):
touch /etc/modprobe.d/radeon.conf
In die Datei kommt nur eine Zeile:
options radeon modeset=1
Die grub.cfg muss neu erzeugt werden:
 grub-mkconfig -o /boot/grub/grub.cfg
Zum Abschluss muss noch die xorg.conf geändert werden:
nano /etc/X11/xorg.conf
Der Wert von fglrx muss durch ati ersetzt werden.
Nach diesen ganzen Schritten und einem Reboot lächelte mich dann auch wieder mein KDE Desktop an. :-)

Flattr this!