File Transfer Planer – FTP

Aktuell arbeite ich an eine kleinen Applikation, welche ich „File Transfer Planer“ getauft habe. Mit dieser wird es möglich sein, zeitgesteuert Dateien auf einen FTP zu schieben oder eben herunter zu laden.
Das Backend steht zum Teil, einen Teil der GUI ebenfalls, daher mal ein paar Screenshots.

Die GUI ist nicht mehr ganz so aktuell. Aktuell bin ich mir noch nicht so sicher, wie ich die Daten speicher, momentan tendiere ich dazu, die Daten als XML-Datei auf der Platte zu speichern.

HowTo: Aero Glass in C# Forms nutzen

Mich hat mal interessiert, wie ich die Aero Glass Effekte unter Windows 7 in C# Windows Forms nutzen kann. Auf codeproject.com fand ich dazu einen Artikel. Der funktioniert soweit auch schon ganz gut. Der Artikel zeigt, wie man einen Rand um seine Arbeitsfläche zieht, der den Aero Glass Effekt nutzt. Möchte man nun aber den ganzen Hintergrund durchsichtig haben, so müssen die Margins auf -1 gesetzt werden:

        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
            if (DwmIsCompositionEnabled())
            {
                // Paint the glass effect.
                this.margins = new MARGINS {Top = -1, Left = -1, Bottom = -1, Right = -1};
                DwmExtendFrameIntoClientArea(this.Handle, ref margins);
            }
        }

Nun ist der ganze Arbeitsbereich durchsichtig. Doch sobald man GDI+-Controlls verwendet, ergibt sich folgender Grafikfehler:

Um dies zu umgehen, müsst ihr in der Main()-Methode folgendes einfügen (bzw. anpassen)

Application.SetCompatibleTextRenderingDefault(true);

Das Ergebnis sieht schon besser aus, leider immer noch nicht so wie gewünscht.

Leider liegt das aber am System bzw. den Controls im .NET-Framework. Unter WPF gibt es dieses Problem zum Beispiel nicht.
Wie ihr die Aero Glass Effekte in WPF nutzen könnt, findet ihr etwa bei Robert Mühsig.

Ach ja, falls ihr nun Bereiche haben wollt, die nicht durchsichtig sind, könnt ihr zum Beispiel ein Panel nutzen. Das Ergebnis sieht in etwa so aus:

C# – Wissenwertes zu IEnumerable und wie man es richtig nutzt

Peter Bucher hat einen interessanten Artikel rund um IEnumerable und wie und wann man es richtig nutzt veröffentlicht.
Sollte man mal gelesen haben und natürlich auch anwenden. Ich werd es auf jeden Fall!

Wann IEnumerable nutzen, wann ICollection und wieso überhaupt IList?

Gibt in dem Blog übrigens noch andere lesenswerte Beiträge!

3 Schichten Modell

Ich versuche mich aktuell, ein C# Projekt schön nach dem 3-Schichten-Modell aufzubauen. Ich orientiere mich dazu an einem HowTo von Robert Mühsig (netter Blog btw.).

Klappt alles schon ganz gut, es ist etwas aufwendiger mit dem programmieren, wie ich finde, da man sich über mehr Sachen gedanken machen muss.
Aber es hat zum Beispiel den Vorteil, dass alles schön sauber getrennt ist. Ich könnte theoretisch statt einer SQLite Datenbank als Datenquelle eine XML-Datei nutzen, nur indem ich eine anderes Objekt instanziere. Ein ordentliches Interface vorrausgesetzt, habe ich nirgendwo Probleme, dieses auch anzusprechen. Natürlich könnte man dies auch ohne das 3-Schichten-Modell machen, allerdings sind hier die Bereiche schön getrennt. So hab ich wirklich nur eine Stelle, die dafür zuständig ist, die Daten aus der Datenquelle auszulesen und wegzuschreiben und muss an anderer Stelle absolut nichts anpassen.

Wie gesagt, der Aufwand ist etwas größer und langsam wird mir zum Beispiel klar, wozu man schöne Klassendiagramme brauchen kann 😉 War der Berufsschulquatsch doch nicht ganz umsonst. Ich könnte mich an diese Programmierweise echt gewöhnen!

Ach ja, bei dem Projekt geht es um eine DVD-Archiv-Software mit „Verleih“-Modull. Kann es privat selbst ganz gut gebrauchen. Als mögliche Datenquellen soll es neben (aktuell) SQLite auch XML sowie MSSQL geben (evtl. auch MySQL). Desweiteren überlege ich später als weitere Übung, eine ASP.NET Weboberfläche zu erstellen, so dass man diese Verwaltung auch Online nutzen kann. Aber erstmal eins nach dem anderen 🙂

Möglichkeit einer Auflistung in Smarty

Wenn ihr z.B. ein Array in Smarty ausgeben wollt, welche durch ein Komma („,“) getrennt ist, dann bietet sich folgende Möglichkeit an:

{counter start="0" assign="tagCounter"}  
{foreach from=$tagList item=tag}
	{counter}
	<a href="search.php?tagID={$tag.id}">{$tag.name|capitalize}</a>{if $tagCounter < count($tagList)},{/if}
{/foreach}

Die erste Zeile initialisiert einen Counter, danach wird eine foreach-Schleife durchlaufen. Mit „{counter}“ wird der Zähler hochgezählt. Das „{if}“ am Ende prüft einfach ob noch Items vorhanden sind, wenn ja, einfach ein Komma ausgeben.

{foreach from=$tagList item=tag name=tagForeach}				
	<a href="search.php?tagID={$tag.id}">{$tag.name|capitalize}</a>{if !$smarty.foreach.tagForeach.last},{/if}
{/foreach}

Dank mahe gehts auch deutlich kürzer 😉

Sicherlich gibt es noch bessere Lösungen aber was besseres wollte mir spontan nicht einfallen. Eine fertige Smartyfunktion scheint es nicht zu geben!