Kategorien
IT Python

QooliImapEmailExtractor – Ein IMAP Email-Adressen-Extrahierer in Python

Ich wurde kürzlich angefragt, ob ich nicht ein Programm kennen würde, um aus einen Mail-Postfach alle Email-Adressen zu extrahieren. Egal, ob diese im „To“- oder „From“- oder „CC“-Feld stehen.

Leider kannte ich kein Programm, dass dafür geeignet ist, obwohl es ein solches mit Sicherheit aber gibt. Aber bei vielen Gratis-Tools oder auch Trials kann man sich nicht sicher sein, ob es Malware enthält oder ob am Ende die Email-Adressen die extrahiert wurden auch noch gleich an den Hersteller des Programms gesendet werden.

Warum diese Aufgabe also nicht einfach selber mit Python lösen? Im Internet wurde ich schnell fündig und fand die Basis für ein Skript, welches schon einmal grundsätzlich alle Adressen aus einem einzelnen IMAP-Inbox-Folder eines Postfachs (mittels imaplib) in eine Variable extrahiert: https://www.quora.com/Is-there-a-way-to-extract-email-addresses-from-all-emails-in-my-Gmail-account/answer/Jerry-Neumann

Das Skript habe ich dann etwas schöner formatiert und erweitert, dass alle Folder eines Postfachs durchlaufen und die Daten dann in eine CSV-Datei exportiert werden. Das sieht dann wie folgt aus:

import imaplib
import email
import csv
import re


list_response_pattern = re.compile(r'\((?P<flags>.*?)\) "(?P<delimiter>.*)" (?P<name>.*)')


def parse_list_response(line):
    flags, delimiter, mailbox_name = list_response_pattern.match(line).groups()
    mailbox_name = mailbox_name.strip('"')
    return flags, delimiter, mailbox_name


def split_addresses(s):
    # split an address list into list of tuples of (name,address)
    if not s:
        return []
    out_q = True
    cut = -1
    res = []
    for i in range(len(s)):
        if s[i] == '"':
            out_q = not out_q
        if out_q and s[i] == ',':
            res.append(email.utils.parseaddr(s[cut + 1:i]))
            cut = i
    res.append(email.utils.parseaddr(s[cut + 1:i + 1]))
    return res


def main():
    print 'Processing started...'
    addresses = []
    mail = imaplib.IMAP4_SSL('imap.server.com')  # enter hostname eg: imap.gmail.com
    mail.login('user@server.com', 'Password')  # userid, password
    response_code_folders, mail_folder_lines = mail.list()
    for mail_folder_line in mail_folder_lines:
        flags, delimiter, mailbox_name = parse_list_response(mail_folder_line)
        print '  Extracting from folder: ' + mailbox_name
        mail.select(mailbox_name)
        result, data = mail.search(None, "ALL")
        ids = data[0].split()
        mail_count = len(ids)
        print '   Mails found in folder: ' + str(mail_count)
        if mail_count > 0:
            msgs = mail.fetch(','.join(ids), '(BODY.PEEK[HEADER])')[1][0::2]
            mail_ix = 0
            for x, msg in msgs:
                mail_ix += 1
                msgobj = email.message_from_string(msg)
                print '   extracting data from message ' + str(mail_ix) + '/' + str(len(msgs))
                addresses.extend(split_addresses(msgobj['to']))
                msgobj = email.message_from_string(msg)
                addresses.extend(split_addresses(msgobj['from']))
                addresses.extend(split_addresses(msgobj['cc']))
    # only take unique addresses
    addresses = set(addresses)
    csv_filename = 'email_addresses_export.csv'
    with open(csv_filename, 'wb') as out:
        csv_out = csv.writer(out)
        csv_out.writerow(['Name', 'Address'])
        for row in addresses:
            csv_out.writerow(row)
    print ' CSV with addresses written to: ' + csv_filename
    print 'Processing finished'


main()

Wenn ihr das Skript verwenden wollt, müsst ihr Python installiert haben und euren Mailserver und die Postfach-Logindaten eintragen:

mail = imaplib.IMAP4_SSL(‚imap.server.com‚)  # IMAP-Hostname
mail.login(‚user@server.com‚, ‚Password‚)  # Postfach-Benutzer-ID, Passwort

Kategorien
IT SQL

Microsoft SQL Server Management Studio – verbleibende Datenbank-Restore-Dauer anzeigen

Vielleicht habt ihr auch schon mal in einem Microsoft SQL Server einen Restore einer Datenbank durchgeführt und wolltet wissen, wie weit der Restore nach einigen Minuten/Stunden schon gekommen ist und wann der Restore ungefähr beendet sein wird.

Wird der Restore via „Management Studio“-GUI durchgeührt (Datenbank-Kontextmenü -> Tasks -> Restore), dann habt ihr im Restore-Dialog zumindest eine ungefähre Prozent-Anzeige. In der 2012er-Version wird diese oben rechts angezeigt:

Die Prozent-Anzeige erscheint aber erst nach einem Weilchen und wenn man den Restore via SQL-Skript gestartet hat und dabei „STATS“ nicht (oder mit einem ungünstigen Wert) verwendet hat, weiss man auch nicht bei wieviel Prozent der Restore aktuell steht und wie lange er noch dauert. Häufig bleibt die Prozentzahl auch lange unverändert und man ist sich nicht sicher, ob der Restore noch läuft oder sich aufgehängt hat.

Zum Glück gibt es jedoch eine Möglichkeit mit einem SQL-Befehl den aktuellen Fortschritt und die geschätzte Endzeit zu erhalten – egal ob  der Backup-Job via GUI, Skript oder sogar von einer anderen Maschine gestartet wurde. Voraussetzung ist ein MSSQL Server der Dynamic Management Views (DMVs) unterstützt, also ab MSSQL 2005. Ist das gegeben kann man folgenden Befehl als Query absetzen (es muss keine Datenbank dazu vorselektiert werden):

SELECT session_id as SPID, command, a.text AS Query, start_time, percent_complete, dateadd(second,estimated_completion_time/1000, getdate()) as estimated_completion_time
FROM sys.dm_exec_requests r CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) a
WHERE r.command in ('BACKUP DATABASE','RESTORE DATABASE')

Das Resultat sieht dann zum Beispiel wie folgt aus (unterer Bereich, Spalten percent_complete und estimated_completion_time):

Im Beispiel sieht man also, dass bereits 96.16975 % des Restores durchlaufen ist und der Restore um 12:38 Uhr, des 7. Dezember 2016, fertig sein sollte – nach ungefähr 19 Stunden Laufzeit. Praktisch oder?

Gefunden auf: https://www.mssqltips.com/sqlservertip/2343/how-to-monitor-backup-and-restore-progress-in-sql-server/

Kategorien
Food personal

Chili Ernte 2015

Letzten Mittwoch-Abend habe ich die Chili-Ernte, zumindest den ersten Teil davon, „eingefahren“.

Folgende fünf Sorten habe ich ca. im April/Mai als Stecklinge gepflanzt und zwar von jeder Sorte zwei Stück:

  • Breva
  • Cayenne
  • Habanero
  • Apache
  • Jalapena Samira Shiny

Lustigerweise hat jeweils immer nur ein Exemplar jeder Sorte brauchbare früchte getragen, das andere Exemplar hatte entweder gar keine, unreife oder sonstwie unbrauchbare Chilis – dies obwohl die Exemplare nur wenige Zentimeter nebeneinander standen und sonst die gleichen Bedingungen hatten, vielleicht lag’s am Konkurrenzdruck :-).

Jedenfalls habe ich die für mich brauchbaren gepflückt, gewaschen, aufgeschnitten und dann im Backofen bei ca. 70° Celsius getrocknet. Die einen Exemplare für ca. 3-4 Stunden, Jalapenas nochmals 4-5 Stunden länger, da diese sehr fleischig sind.

Einige davon konnte ich schon probieren und haben eine „angenehme“ Schärfe :-).

Hier die Bilder davon:

Kategorien
IT personal Unity

Unity 5 Spiel-Engine

Letzte Woche wurde die neueste Version, nämlich Nummer 5, der Unity Spiel-Engine offiziell veröffentlicht. Ausserdem wurde in der selben Woche das Lizenzierungsmodel der Unreal Engine 4 angepasst, so dass diese nun grundsätzlich von jedem verwendet werden kann (erst ab einem Umsatz von 3000 Dollar pro Quartal, muss man selber etwas bezahlen). Auch Valve hat die Veröffentlichung der „Source 2“-Engine angekündigt, welche voraussichtlich ebenfalls in einer freien Version verfügbar sein soll.

Unity gibt es schon länger gratis in einer Einsteiger-Version, mit der man aber schon sehr viel machen kann. Möchte man aber z.B. einen Asset Server verwenden (mit Versionsverwaltung) oder einen eigenen Splash-Screen vor dem Spiel präsentieren (und noch einige andere Features mehr, siehe Unity-Website), dann muss man die Pro-Lizenz erwerben, welche mit 75$ im Monat immer noch sehr bezahlbar ist. Für die Möglichkeit das Entwickelte Produkt auf iOS oder Android zu deployen, wird jedoch nochmals (je) 1500$ verlangt oder je 75$ zusätzlich pro Monat.

Aus Neugierde habe ich mich einige Stunden mit der Unity-Engine auseinander gesetzt und auch einige der Einsteiger-Tutorials bereits umgesetzt. Die Engine hat meiner Einschätzung nach eine gute Lernkurve, man erreicht schon nach kurzer Zeit erste Erfolgserlebnisse die einen anspornen sich tiefer mit den weiteren Möglichkeiten zu beschäftigen. Der Editor, mit welchem die Szenen, Animationen und Objekte bearbeitet werden können wirkt sehr aufgeräumt und kann intuitiv bedient werden – man fühlt sich schnell zu Hause. Für einen C#-Entwickler ist es zudem praktisch, dass als Script-Sprache C# (Mono via einer mitgelieferten MonoDevelop-Version) verwendet werden kann. Unreal 4 mit C++ hat mich da schon etwas abgeschreckt 🙂

Nach wenigen Stunden hatte ich bereits ein kleines, erstes Spiel fertig (nach Tutorial, Objekte/Texturen wurden als Asset bereitgestellt):

Wer selber mit Unity loslegen will, der sollte am besten mit den Tutorials auf der offiziellen Unity-Webseite beginnen:

Viel Spass!

Kategorien
personal

Texas Jailhouse Chili 2014

Es war wieder soweit, es wurde das jährliche, rituelle „Texas Jailhouse Chili“-Essen zubereitet und verspiesen.

Ich denke, dass dank den beigefügten „Trinidad Scorpion Butch T pepper“ dieses Jahr ein neuer Scoville-Rekord aufgestellt wurde – jedenfalls fühlte es sich so an 😳

Nachfolgend einige Impressionen:

Für das Rezept und Infos vom 2012er-Event klickt folgenden Link an: http://qoo.li/2012/12/texas-jailhouse-chili/

Kategorien
Fotografie Galerie Wandern

Fiescheralp, Egishorn, Aletschgletscher, Riederalp, Moosfluh und Bettmeralp

Letztes Wochende war ich mit meiner Familie im Wallis und wir machten (mal wieder) einen Ausflug in die „Aletsch Arena“ und zum Aletschgletscher.

Hier einige Impressionen:

Weitere Bilder findet ihr auf meiner dedizierten Fotografie-Seite: http://schielke.ch/galleries/aletschgletscher-und-aletsch-arena/

Kategorien
Ferien Fotografie Galerie personal

Ferien im Elsass

Wir waren vor kurzem über Pfingsten einige Tage im Elsass und haben dabei folgende Orte besichtigt:

  • Strasbourg
  • Wissembourg
  • Marienthal
  • Eguisheim
  • Colmar
  • Riquewihr
  • Ribeauvillé
  • Delta de la Sauer
  • Schiffshebewerk Saint-Louis/Arzviller

Hier einige Fotos von unserem Tripp:

Kategorien
Fotografie Galerie

Canon EF 70-200mm f/2.8L IS II USM mit 2x Extender

Konnte letzthin das Canon EF 70-200mm f/2.8L IS II USM mit dem Canon 2x Extender (III) kombiniert testen.

Tolles Objektiv welches auch in der Kombination mit dem Extender noch eine sehr gute Bildqualität liefert, auch wenn natürlich der Autofokus mit dem Extender langsamer wird und die grösste Blende auf 5.6 „herunterrutscht“. Aber für mich nicht tragisch und und ein praktischer Ersatz für ein „Canon EF 400mm f/5.6L USM“.

Nachfolgend einige Impressionen:

Kategorien
Android

Qooli Timelapse Calculator

Abgekürzt QTLC. Eine Anwendung für Google’s Android-Plattform mit welcher man bequem auf seinem Handy Timelapse-Berechnungen durchführen kann.

Qooli Timelapse Calculator LogoMan kann zum Beispiel ausrechnen, wie lange man bei eingem gewissen Shutter-Intervall und FPS (im resultierenden) Aufnahmen machen muss. Man kann aber auch umgekehrt ausrechnen wieviel Filmdauer man auf Grund einer Aufnahmezeit, dem Intervall und den FPS erreicht hat.

Die Anwendung wird ständig weiter ausgebaut und mit weiteren Features versehen, so ist z.B. eine Timerlapse-Stoppuhr mit Erinnerungsfunktion geplant oder der zu erwartende Speicherplatz verbrauch für die Aufnahmen während der Aufnahme-Session.

Die Anwendung kann im Play Store heruntergeladen werden:

Get it on Google Play

Direkt den QR-Code scannen um die App-Store-Seite der Anwendung auf dem Handy zu öffnen… wo man sie dann kaufen kann 🙂

QR-Code von QTLC
QR-Code von QTLC: mit einem QR-Code-Scanner einlesen um die App-Store-Seite zu öffnen

Kategorien
Fotografie

Timelapse Videos erstellen

Vor einigen Monaten habe ich mir unter anderem für das Experimentieren mit Timelapse-Aufnahmen den „programmierbaren“ Fernauslöser TC-80N3von Canon gekauft.

Leider habe ich mir lange nicht die Zeit genommen um Timelapse-Aufnahmen zu machen, jedoch hatte ich den Fernauslöser bereits einige Male für Langzeitaufnahmen (Bulb-Mode mit Einrastfunktion auf dem Fernauslöser) oder möglichst verwacklungsfreie Aufnahmen (kein Schütteln der Kamera durch das Drücken des Auslösers) benutzt.

Nun habe ich vor einigen Tagen auch mal einige Timelapse-Videos damit erstellt, respektive die dafür benötigten Fotos gemacht.

Tutorials im Internet bezüglich wie man solche Timelapse-Aufnahmen macht gibt es unzählige. Hier wäre ein ganz Gutes: http://www.enriquepacheco.com/10-tips-for-shooting-time-lapse

Im Prinzip gibt es Folgendes zu beachten:

  • Eine Kamera verwenden, an welcher man mit einem Auslöser in einem Intervall Bilder aufnehmen kann (oder die Option schon eingebaut ist)
  • Kamera/Speicherkarte muss schnell genug sein um die Bilder abspeichern zu können, ohne dass der Zwischenspeicher überläuft und die nächste Aufnahme verzögert würde
  • Alle Kameraeinstellungen möglichst auf „manuell“ (kein automatischer Weissabgleich, „M“-Modus mit fixer Blende und Shutter (oder Blendenpriorität, falls man sehr lange Aufnahmen macht mit grossem Kontrastumfang, wie z.B. Sonnenuntergänge), Fokus einstellen und dann auf „manuell“, etc.
  • Möglichst in RAW die Aufnahmen machen (höherer Farbumfang, mehr Nachbearbeitungsmöglichkeiten), JPEG ist aber auch möglich (spart zumindest viel Platz)
  • Stativ benutzen (oder natürlich ein Dolly für mehr Effekte) und eventuell befestigen (Sandsäcke bei starkem Wind)
  • Bildausschnitt wählen (keine Störenden Elemente im Bild/Vordergrund, keine zu starken Bewegungen, keine toten Stellen im Bild): es sollte immer etwas spannendes passieren und Bewegung im Bild sein
  • Bilder besser etwas zu dunkel aufnehmen als überbelichtet (da sonst die Bildinformationen in diesen Bereichen für immer verloren sind)
  • Grosse und schnelle Speicherkarte, da es eine Unmenge Bilder geben wird
  • Akku voll aufgeladen und idealerweise Ersatzakkus dabei
  • Probebilder machen um zuerest die Einstellungen zu überprüfen
  • Rückschaubild für Kamera-LCD deaktivieren um Akku zu sparen
  • Aufnahmezeitdauer berechnen (in der Regel möchte man 24, 25 oder 30 Bilder in der Sekunde im resultierenden Film. Wenn man einen Aufnahme-Intervall von 2 Sekunden hat und man am Ende einen 60 Sekündigen Film möchte  (mit 24 Bildern pro Sekunde) ergibt das folgende Anzahl benötigter Bilder (x):
    x = 60 * 24
    x = 1440
    1440 mal 2 Sekunden (Intverall) ergibt 48 Minuten (+ noch etwas Zeit dazu, da der Shutter ja auch noch etwas Zeit braucht bei jeder Aufnahme und man am Anfang und am Ende des Filmes immer etwas Puffer haben sollte)
  • Etwas mitnehmen um sich die Zeit zu vertreiben, während die Kamera die Aufnahmen macht

Der TC-80N3 hat einen Intervallometer (zweiter Modus: „INT.“), bei welchen man mit dem Wählrad auf der rechten Seite einfach den gewünschten Sekundenwert einstellen kann. Für Timelapse-Aufnahmen benötigt man die anderen Modi nicht unbedingt.

Hier einige meiner ersten Versuche… bei denen ich meine eigenen Tipps leider noch grösstenteils selber ignorierte… aber seht selbst:

Wolken über einem Feld, im Hintergrund die Alpen

Für meinen Geschmack noch zu langweilig/zu wenig speziell.

Wolkenformation am Abendhimmel bei Sonnenuntergang

Am Anfang überbelichtet – auch hier passiert eigentlich zu wenig.

Wolken


Gefällt mir schon gut. Hatte aber noch Sensorflecken auf dem Sensor, welche mir erst im Nachhinein aufgefallen sind 🙁 – ausserdem sind die Bewegungen stellenweise nicht flüssig (evtl. bräuchte es noch einen kürzeren Intervall und/oder eine etwas längere Verschlusszeit).

Zusammengefügt wurden alle diese Videos unter OSX mit dem Tool „Timelapse Assembler„. Das Programm hat sehr wenige Funktionen, aber erfüllt seinen Job perfekt. Unter Windows könnte man die Bilder mit Virtualdub zu einem Video konvertieren.