Tanpohp

Tools

LogfileSplitter – a small tool for splitting logfiles

by on May.16, 2011, under ByTheWay, Tools

Kürzlich wurde ich von einem Freund gebeten ein kleines Programm zu schreiben, welches in der Lage ist, große Logdatein eines Programms zu splitten um diese besser auswerten zu können.   Getest habe ich das Programm an einer 7MiB großen Logdatei mit knapp 125000 Zeilen. Das Programm splittet die Datei in 169 Dateien innerhalb von knapp 25 Sekunden, was natürlich start von dem Suchstring abhängt.

Die Logdateien werden in ein vorher gewählten Ordner geschrieben und mit ein Präfix versehen. Die Analyse findet den Suchstring mittels der Methoden: Is, Contains, BeginsWith, EndWith.

logfilesplitter gui screenshot

Scrrenshot of the LogfileSplitter V0.51

Download: LogfileSplitter

Comments Off on LogfileSplitter – a small tool for splitting logfiles :, , , , , more...

EML-Dateien aus HTML wiederherstellen

by on May.02, 2010, under Tools

Ich Stand vor einiger Zeit vor der Aufgabe, Mails die in HTML-Seiten konvertiert wurden wieder in Mails zu verwandeln um diese z.B. in Outlook zu importieren. An sich enthielten die HTML alles wesentliche: Wer schickte die Mail wann an wen. Trotzdem ist das bei fast 3000 Mails die ich importieren sollte keine Aufgabe die man von Hand erledigen sollte. Also mal schnell ein PHP-Skript geschrieben. Bei nähere Untersuchung fand ich heraus, das die HTML-Dateien noch eine ganze Menge mehr an Informationen enthielten. Im Grunde war alles vorhanden, einschließlich X-Message-Id und X-Reference um Gesprächsverläufe in den Mails zu kennzeichnen. Einzig die Server über welche die Mails verschickt wurden fehlten. Im folgenden Stelle ich dieses Skript nun unter Creative Commons (by-ns) öffentlich. Das Skript ist in der Lage Mails zu erzeugen, die ursprünglich mit  MHonArc v2.4.6 umgewandelt wurden. Für andere Versionen sind ggf. kleine Anpassungen von nöten.

Zur Bedienung:

  1. Zip-Datei in Ordner htdocs (xampp) oder public-html entpacken.
  2. Html-Dateien von MHonArc in das Verzeichnis backup kopieren. Hierbei können beliebige Unterordner mit kopiert/erzeugt werden. Das Skript durchsucht diese rekursiv nach den richtigen Dateien.
  3. Eventuell in der index.php die Skriptlaufzeit erhöhen. Liegt momentan bei 5min was bei 3000 Mails locker ausreichte.
  4. index.php aufrufen und abwarten.
  5. Im Ordner converted liegen jetzt alle Mails als EML-Dateien vor.

ACHTUNG: Ich habe das Skript nur mit Dateien getestet die mit der Version 2.4.6 vom MHonArc erzeugt wurden. Alle anderen Brauchen ggf. eine vorherige Anpassung der HTML-Analyse welche von der Datei HTMLInputReader.php getätigt wird. Bei Fragen einfach schreiben.

Download: HtmlToMail Version 0.6

Comments Off on EML-Dateien aus HTML wiederherstellen :, , , , , more...

HowTo: Embedded Resource aus XAML und C# nutzen

by on Apr.18, 2010, under HowTo, MicroMite

Bilder und weiteren Inhalt in eine EXE einzubinden und zu nutzen hat einen besonderen Reiz: man muss keine Fehlerbehandlung einbauen die zur Laufzeit nicht auffindbare Dateien behandeln, niemand (oder zumindest die meisten) können diese Inhalte werde auslesen noch verändern.

Damit die Ressource eingebettet werden kann, muss diese in Visual Studio erst einmal zum Projekt hinzugefügt werden. An einem Beispiel gehe ich das mal durch:Embedded PNG-File Wie im Bild rechts zu sehen ist, habe ich ein Bild Delete.png zum Projekt hinzugefügt. Um dieses aus XAML anzusprechen bedarf es einer speziellen Einstellung: Im Eigenschaftenfenster muss unter “Build Action” Resource ausgewählt sein. Die allgemeine Syntax würde lauten:

   Icon="/{AssemblyName};component/directory/Image.ico"

Wobei {AssemblyName} durch den Namen des Assembly ersetzt werden muss (meist der Name des WPF-Projektes). Der anschließenden Teil (“;component/”) muss ebenfalls vorhanden sein und ist immer gleich. Den AssemblyName kann auch zur Laufzeit mit folgendem Befehl abgefragt werden:

   this.getType().Assembly.GetName().Name;

Und das ganze am Beispiel des Icons eines Window:

<Window 
   x:Class="MicroMite.Gui.MainWindow"
   Title="MicroMite" Height="400" Width="280"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   Icon="/MicroMite;component/content/icon/miscellaneous/MiteWindowIcon.ico"/>

Um aus C# mittels Programmcode auf die Ressource zugreifen zu können, muss diese in den Eigenschaften als “Embedded Ressource” unter “Build Action” aufgeführt werden. Mir ist es bisher nicht gelungen eine “Resource” aus C# anzusprechen oder eine “Embedded Ressource” unter XAML – sehr schade eigentlich. Ansonsten geht das wie folgt:

   String uri = @"content.icon.miscellaneous.Delete.png";
   Assembly assembly = this.getType().Assembly;
   String assemblyName = ssembly.GetName().Name;
   System.IO.Stream stream = assembly.GetManifestResourceStream(assemblyName+"." + uri);
   Icon.Resource = new PngBitmapDecoder(stream,
                                         BitmapCreateOptions.PreservePixelFormat,
                                         BitmapCacheOption.Default).Frames[0];

Da die Inhalte roh in die Exe eingebettet werden, behalten diese ihr Format bei und müssen erst mit einem passenden Decoder zu einer ImageSource konvertiert werden. Im Namespace  System.Windows.Media.Imaging stehe passenden Decoder für die Bildformate PNG, JPEG, BMP, GIF, TIFF und WMB  bereit. Ich werde demnächst eine DLL hier einstellen, welche all diese Funktionalitäten abstrahiert.

1 Comment :, , , more...

HowTo – Trayicon mit Contextmenu

by on Apr.18, 2010, under HowTo, MicroMite

Im folgenden geht es um die Erstellung eines Trayicons (oder auch Notifyicon) mit einem ContextmenuTray from Windows. Trayicons sind die kleinen Symbole die links neben der Uhr im Windows angezeigt werden und meist von Instantmessangern und Antivirenprogrammen besetzt werden. Bei mir sieht das in etwa so wie auf nebenstehendem Bild aus.

WPF selbst bietet keine Trayicon-Komponente. Aber im Namespace System.Windows.Forms gibt es eine Klasse NotifyIcon die diesen Zweck erfüllt. Bei einem WPF-Projekt muss jetzt als erstes die passenden Referenz hinzugefügt werden:

  • Klick auf Referenzen -> Referenz hinzufügen
  • Suche nach System.Windows.Forms
  • Ok

Im Anschluss eine Membervariable vom Typ NotifiyIcon erstellen welche im Konstruktor initialisiert wird:

private System.Windows.Forms.NotifyIcon trayicon;
public Window1(){
   trayicon = new System.Windows.Forms.NotifyIcon();
   trayicon.BalloonTipTitle = "BalloonTitle";
   trayicon.BalloonTipText = "BalloonText";
   trayicon.Icon = new System.Drawing.Icon(@"C:\icon.ico");
   trayicon.Text = "Text on hover icon"
   trayicon.MouseClick += new System.Windows.Forms.MouseEventHandler(trayiconClickHandler);
   trayicon.Visible = true;
}

Die meisten Eigenschaften dürften selbsterklärend sein. Falls nicht ist hier die entsprechende Referenz von Microsoft. Der BallonTip ist eine kleine Sprechblase mit Informationen anzeigt. Diese wird mittels ShowBalloonTip(3000) für 3 Sekunden lang angezeigt wird. Ganz wichtig ist die Eigenschaft Visible auf true zu setzen, da diese normalerweise deaktiviert ist. Das NotifyIcon besitzt auch eine Click-Event welches anstelle des MouseClick-Events verwendet werden könnte. Diese bietet allerdings nicht die Möglichkeit zu unterscheiden welche Maustaste gedrückt wurde.

Die Eigenschaft NotifiyIcon.ContextMenu ist vom Typ ein Array aus MenuItems. Bereits bestehende könnten hier folglich wiederverwendet werden:


   System.Windows.Forms.MenuItem[] menuitems= new System.Windows.Forms.MenuItem[2];
   menuitems[0] = new System.Windows.Forms.MenuItem("Go to Google", gotoClickHandler);
   menuitems[1] = new System.Windows.Forms.MenuItem("Exit", exitClickHandler);

Ein MenuItem erwartet eine Beschriftung sowie ein EventHandler welcher beim Klicken aufgerufen wird. Kleine Anmerkung: MenuItem hat eine Eigenschaft MenuItems, es ist also folglich möglich verschachtelte Menüs zu erzeugen. Im folgenden nun die Eventhandler, der das Hauptfenster bei Linksklick öffnet bzw. versteckt:

void trayiconClickHandler(object sender, System.Windows.Forms.MouseEventArgs e)
{
   if (e.Button == System.Windows.Forms.MouseButtons.Left)//right is for context menu
   {
      if (IsVisible) Hide();
      else this.Show();
   }
}

Der erste Eventhandler im Kontextmenu zeigt wie eine beliebige URL im Standardbrwoser aufgerufen werden kann. Der zweite beendet lediglich das Programm:

private void goToMiteClickHandler(object sender, System.EventArgs e)
{
   System.Diagnostics.Process.Start("www.google.de");
}
private void exitClickHandler(object sender, System.EventArgs e)
{
   Close();
}

Alles im Allem also gar nicht so schwer, man muss nur wissen wie.

Comments Off on HowTo – Trayicon mit Contextmenu :, , , , , more...

Independent Coursework I

by on Apr.18, 2010, under ByTheWay, MicroMite

Im Rahmen meines Independent Coursework I habe ich beschlossen einen Client für Mite zu schreiben. Wer Mite noch nicht kennt, es ist ein schlankes Zeiterfassungstool ganz im Sinne von WEB2.0.

Nun gibt es im WEB2.0 ein generelles Problem: wer keinen Zugang zum Netz hat, der ist aufgeschmissen. Klingt vielleicht etwas seltsam, aber so selten kommt das Problem gar nicht vor. Ich bin des Öfteren unterwegs und kann mir UMTS nicht leisten. Also bin ich notgedrungen offline. Die Zeit nutzte ich dennoch sinnvoll, nur muss ich meine Zeiterfassung wieder mit einer Exceltablle erledigen – sehr ärgerlich.Und darauf verzichten möchte ich weder für Arbeitsprojekte nicht für eigene, denn ich finde es sehr interessant zu beobachten was mich wann wie viel Zeit gekostet hat.

Also beschloss ich eine Client zu schreiben, der sich bei bestehender Internetverbindung mit Mite synchronisiert. Wenn ich offline bin, sollen die Zeiten lokal gespeichert werden um diese später zu synchronisieren. Damit das ganze auch noch schick aussieht, möchte ich das in WPF machen. Als Anfänger dauert da alles etwas länger, aber im Grunde verspreche ich mir viel von dem Wissen. In den folgenden Posts werde ich darauf etwas näher eingehen und vor allem einige Codeschnipsel posten, die mich einiges Arbeit mit Onkel google gekostet haben.

Ciau

Comments Off on Independent Coursework I more...

Looking for something?

Use the form below to search the site:

Still not finding what you're looking for? Drop a comment on a post or contact us so we can take care of it!

Visit our friends!

A few highly recommended friends...