seeseekey.net - Invictus Deus Ex Machina

Bei Tweepy han­delt es sich um eine freie unter der MIT-Lizenz lizen­zierte Twit­ter­bi­blio­thek für Python, deren offi­zi­elle Web­seite unter tweepy.org zu fin­den ist. Unter ande­rem wird diese Biblio­thek für den Twit­ter Radier­gummi genutzt. Im Gegen­satz zu frü­her hat sich die Instal­la­tion der Biblio­thek etwas ver­än­dert. Hier­für sollte man jetzt pip nut­zen. Dabei han­delt es sich um ein Tool zur Paket­ver­wal­tung unter Python. Zur Instal­la­tion gibt man im Ter­mi­nal fol­gen­des ein:

curl -O https://bootstrap.pypa.io/get-pip.py
sudo python get-pip.py

Damit ist pip instal­liert und kann genutzt werden:

sudo pip install tweepy

Pip instal­liert hier­mit die Biblio­thek Tweety und löst alle Abhän­gig­kei­ten auf, so das diese anschlie­ßend sys­tem­weit genutzt wer­den kann.

Wenn eine Soft­ware auf den Namen Jas­per hört, dann klingt das irgend­wie ein biss­chen nach Jar­vis aus dem Film Iron Man. Und genau dies bie­tet die Jas­per. Die Steue­rung des Rech­ners mit­tels der Stimme. Dabei bie­tet Jas­per die Mög­lich­keit auf Kom­man­dos zu rea­gie­ren oder infor­miert den Nut­zer wenn bestimmte Ereig­nisse ein­ge­tre­ten sind.

Tech­nisch setzt Jas­per dabei unter ande­rem auf die Pro­jekte Pocket­s­phinx und Pho­ne­ti­sau­rus auf. Bevor­zugt ent­wi­ckelt wurde Jas­per dabei für Rech­ner wie den Raspberry Pi, wie man im Video sehen kann. Die Auto­ren der Soft­ware sind die Priceton-Studenten Shubhro Saha und Char­lie Marsh. Als Pro­gram­mier­spra­che kam Python zum Ein­satz. Jas­per ver­fügt eine API mit wel­cher man eigene Erwei­te­run­gen für das Sys­tem schrei­ben kann.

Jas­per ist freie Soft­ware und unter der MIT-Lizenz lizen­ziert. Die offi­zi­elle Web­seite ist unter jasperproject.github.io zu fin­den. Auch der Quell­text ist auf Git­Hub ver­füg­bar.

Es gibt einige Web­mail Cli­ents unter freier Lizenz, wie z.B. Round­cube und Squir­rel­Mail. Aller­dings wird man fest­stel­len, das die Aus­wahl nicht son­der­lich groß ist. Ein neuer Stern am Webmail-Himmel ist Mail­pile wel­ches unter http://www.mailpile.is/ zu fin­den ist.

mailpile.is

Mail­pile ori­en­tiert sich dabei vom Inter­face her an Google Mail, was man auf den ers­ten Blick erkennt. Es bie­tet dabei natür­lich Dinge wie eine Suche, ver­schie­dene Import­funk­tio­nen, Tag-Support, eine Kon­takt­ver­wal­tung und soll eine inte­grierte PGP Ver­schlüs­se­lung und Signie­rung ent­hal­ten. Dadurch wird das ganze Paket wesent­lich inter­es­san­ter, da eine ein­ge­baute Ver­schlüss­lung, die Anwen­dung für Jeder­mann enorm vereinfacht.

Für das Hos­ting benö­tigt man einen Pythonstack, so das es sich nicht für das nor­male LAMP Web­hos­ting Paket eig­net (es sei denn das P steht für Python). Das ist schade, da dadurch sicher­lich der Kreis der Benut­zer ein­ge­schränkt ist. Mail­pile ist freie Soft­ware und steht unter der AGPL. Der Quell­text ist auf Git­hub zu fin­den. Im Moment wird auf Indie­gogo Geld für die wei­tere Ent­wick­lung des Cli­ents gesam­melt. Wem das Pro­jekt also zusagt, sollte die Brief­ta­sche zücken.

Das schöne an zen­tra­len Samm­lun­gen ist das man sie rela­tiv ein­fach aus­wer­ten kann. In die­sem Fall geht es um die Aus­wer­tung der Git­Hub Repo­si­to­ries. Wie der Name „Popu­lar Con­ven­tion“ andeu­tet geht es darum aus den Quell­tex­ten bestimmte Infor­ma­tio­nen über bevor­zugte Kon­ven­tio­nen wie z.B. Leer­zei­chen vs. Tabs zu extrahieren.

Popu­lar Con­ven­tion und Scala

Das Ergeb­nis kann man sich auf der Web­seite http://sideeffect.kr/popularconvention/ für die Spra­chen Java­script, Java, Python und Scala anschauen. Die Soft­ware zur Aus­wer­tung ist dabei freie Soft­ware und steht unter der MIT Lizenz und kann unter https://github.com/outsideris/popularconvention bezo­gen werden.

Wer mal schnell einen HTTP Ser­ver unter Linux auf­set­zen möchte, der sollte ein­fach in das ent­spre­chende Ver­zeich­nis gehen und dort:

python -m SimpleHTTPServer

aus­füh­ren. Anschlie­ßend ist die­ses Ver­zeich­nis per HTTP (stan­dard­mä­ßig unter Port 8000) erreich­bar. Möchte man einen ande­ren Port benut­zen so gibt man ein­fach die ent­spre­chende Port­num­mer als letz­tes Argu­ment mit an.

Wei­tere Infor­ma­tio­nen gibt es unter:
http://docs.python.org/library/simplehttpserver.html

Chro­noT­weet ist ein klei­nes Pythonskript wel­ches alle Twit­ter­ein­träge inner­halb einer bestimm­ten Zeit­spanne wie­der löscht. Da Twit­ter nun nur noch Authen­ti­fi­zie­rung mit­tels OAuth zulässt, habe ich das ganze mal daran ange­passt. Das Skript steht dabei unter der GPLv3 Lizenz und ist in der aktu­el­len Ver­sion unter http://code.google.com/p/seeseekey/source/browse/trunk/Python/chronotweet.py zu fin­den. Viel Spaß damit :)

Aus mei­nen Bedürf­nis her­aus bestimmte Tweets nach einer bestimm­ten Zeit wie­der zu löschen ent­stand fol­gen­des klei­nes Skript, wel­ches hier nun in der Ver­sion 0.30 vor­liegt. Es wurde ein Feh­ler beho­ben der ver­hin­derte das die Tweets gelöscht wer­den wenn man zu viele Tweets in der vor­ge­ben­den Zeit geschrie­ben hat:

# ChronoTweet v0.30
# http://seeseekey.net
#
# Installation
# http://pypi.python.org/pypi/simplejson installieren (apt-get install python-simplejson)
# http://code.google.com/p/python-twitter/ installieren
# wget http://python-twitter.googlecode.com/files/python-twitter-0.6.tar.gz
# tar -xf python-twitter-0.6.tar.gz
# cd python-twitter-0.6
# python setup.py build
# python setup.py install
#
# chrono_tweet - Dateirechte 700
# crontab -e

# Import
import time
import twitter

# Optionen
twitter_account_name = "seeseekey"
twitter_account_password = "1234567890"

remove_time_in_seconds = 151200 # 42 Stunden

hashtag_sensitive=False
hashtag="#ChronoTweet"

# Programmlogik
api = twitter.Api(username=twitter_account_name, password=twitter_account_password)
stati = api.GetUserTimeline(twitter_account_name, 9999999)

for s in stati: #Fuer jeden Status
	currentTime = time.mktime(time.localtime(time.time()))
	createTime = s.GetCreatedAtInSeconds()
	diffTime = currentTime-createTime
	
	if diffTime > remove_time_in_seconds: #Wenn Zeit groesser remove_time_in_seconds
	
		if hashtag_sensitive==True:
			if s.text.find(hashtag) != -1: #Wenn ChronoTweet
				print(s.id)
				api.DestroyStatus(s.id)
		else:
			print(s.id)
			api.DestroyStatus(s.id)

Aus mei­nen Bedürf­nis her­aus bestimmte Tweets nach einer bestimm­ten Zeit wie­der zu löschen ent­stand fol­gen­des klei­nes Skript, wel­ches hier nun in der Ver­sion 0.20 vor­liegt in wel­cher man ein­stel­len kann nach wel­chem Hash­tag gesucht wer­den soll und ob über­haupt nach einem Hash­tag gesucht wer­den soll:

# ChronoTweet v0.20
# http://seeseekey.net
#
# Installation
# http://pypi.python.org/pypi/simplejson installieren (apt-get install python-simplejson)
# http://code.google.com/p/python-twitter/ installieren
# wget http://python-twitter.googlecode.com/files/python-twitter-0.6.tar.gz
# tar -xf python-twitter-0.6.tar.gz
# cd python-twitter-0.6
# python setup.py build
# python setup.py install
#
# chrono_tweet - Dateirechte 700
# crontab -e

# Import
import time
import twitter

# Optionen
twitter_account_name = "seeseekey"
twitter_account_password = "123456789"

remove_time_in_seconds = 151200 # 42 Stunden

hashtag_sensitive=True
hashtag="#ChronoTweet"

# Programmlogik
api = twitter.Api(username=twitter_account_name, password=twitter_account_password)
stati = api.GetUserTimeline(twitter_account_name)

for s in stati: #Fuer jeden Status
	currentTime = time.mktime(time.localtime(time.time()))
	createTime = s.GetCreatedAtInSeconds()
	diffTime = currentTime-createTime
	
	if diffTime > remove_time_in_seconds: #Wenn Zeit groesser remove_time_in_seconds
		if hashtag_sensitive==True:
			if s.text.find(hashtag) != -1: #Wenn ChronoTweet
				print(s.id)
				api.DestroyStatus(s.id)
		else:
			print(s.id)
			api.DestroyStatus(s.id)

Aus mei­nen Bedürf­nis her­aus bestimmte Tweets nach einer bestimm­ten Zeit wie­der zu löschen ent­stand fol­gen­des klei­nes Skript:

# ChronoTweet v0.10
# http://seeseekey.net
#
# Installation
# http://pypi.python.org/pypi/simplejson installieren (apt-get install python-simplejson)
# http://code.google.com/p/python-twitter/ installieren
# wget http://python-twitter.googlecode.com/files/python-twitter-0.6.tar.gz
# tar -xf python-twitter-0.6.tar.gz
# cd python-twitter-0.6
# python setup.py build
# python setup.py install
#
# chrono_tweet - Dateirechte 700
# crontab -e

# Import
import time
import twitter

# Optionen
twitter_account_name = "seeseekey"
twitter_account_password = "1234567890"

chrono_tweet_remove_time_in_seconds = 151200 # 42 Stunden

# Programmlogik
api = twitter.Api(username=twitter_account_name, password=twitter_account_password)
stati = api.GetUserTimeline(twitter_account_name)

for s in stati: #Fuer jeden Status
currentTime = time.mktime(time.localtime(time.time()))
createTime = s.GetCreatedAtInSeconds()
diffTime = currentTime-createTime

if diffTime > chrono_tweet_remove_time_in_seconds:
if s.text.find("#ChronoTweet") != -1: #Wenn #ChronoTweet
print(s.id)
api.DestroyStatus(s.id)

Das Skript über­prüft ob Ein­träge mit dem Hash­tag #Chro­noT­weet älter als 42 Stun­den sind und löscht sie dann wenn dies der Fall ist.

Das neue Wid­get­set von Ras­ter genannt Ele­men­tary ist ja in C geschrie­ben. Um damit unter Python arbei­ten zu kön­nen bedarf es soge­nann­ter Bin­dings. Mor­phis hat sich im Rah­men des UMAF Pro­jek­tes daran gemacht und sol­che Bin­dings erstellt. Die Bin­dings sind im UMAF Repo­sitory unter http://umaf.jerilynn.net zu finden.

Und hier gleich ein klei­ner Pro­grämm­chen zum auf­wär­men: test.py.