<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>coffee() break;</title>
	<atom:link href="http://coffeebreak.aquilatech.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://coffeebreak.aquilatech.org</link>
	<description>have_a_break(); have_a_coffee();</description>
	<lastBuildDate>Sat, 01 Jan 2011 12:23:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Silbentrennung – im Web!</title>
		<link>http://coffeebreak.aquilatech.org/2010/09/silbentrennung-im-web/</link>
		<comments>http://coffeebreak.aquilatech.org/2010/09/silbentrennung-im-web/#comments</comments>
		<pubDate>Sat, 04 Sep 2010 13:30:34 +0000</pubDate>
		<dc:creator>Andi</dc:creator>
				<category><![CDATA[Unsortiert]]></category>
		<category><![CDATA[Webentwicklung]]></category>

		<guid isPermaLink="false">http://coffeebreak.aquilatech.org/?p=147</guid>
		<description><![CDATA[*staub wegpust* Hallo! Heute will ich mit euch mal eine Entdeckung teilen, die ich gestern gemacht habe. Und zwar eine ziemlich geniale, wie ich finde. Wie der Titel schon sagt: Es geht um Silbentrennung in Webseiten. Und zwar um automatische Silbentrennung! Die Hervorhebung deshalb, weil es zuvor schon möglich war, eine Silbentrennung in Webseiten umzusetzen, [...]]]></description>
			<content:encoded><![CDATA[<p>*staub wegpust*</p>
<p>Hallo! <img src='http://coffeebreak.aquilatech.org/wp-includes/images/smilies/biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Heute will ich mit euch mal eine Entdeckung teilen, die ich gestern gemacht habe. Und zwar eine ziemlich geniale, wie ich finde. Wie der Titel schon sagt: Es geht um Silbentrennung in Webseiten. Und zwar um <em>automatische</em> Silbentrennung! Die Hervorhebung deshalb, weil es zuvor schon möglich war, eine Silbentrennung in Webseiten umzusetzen, hier aber jede menge manuelle Arbeit von nöten war. Man musste nämlich das sogenannte <code>Soft Hyphen</code>-Zeichen überall dort einfügen, wo ein Umbruch erlaubt sein sollte. Was natürlich mit entsprechendem Aufwand verbunden ist, wenn man in einem längeren Fließtext bei allen Wörtern die entsprechenden Trennungsregeln umsetzen wollte.<br />
Diese Zeiten sind jetzt dank dem <a href="http://code.google.com/p/hyphenator/">Hyphenator</a> von <a href="http://www.mnn.ch/">Mathias Nater</a> vorbei! <img src='http://coffeebreak.aquilatech.org/wp-includes/images/smilies/smile.gif' alt=':)' class='wp-smiley' /> Der Hyphenator ist in JavaScript programmiert und setzt zur automatischen Ermittlung der Trennungsstellen den Algorithmus von Franklin M. Liang um.</p>
<p>Es gibt zudem eine PHP-Lösung, die auf dem Hyphenator basiert. Für die, die ihre Texte aus Performancegründen auf dem Server verarbeiten möchten: <a href="http://yellowgreen.de/phphyphenator">phpHyphenator</a><br />
Ein WordPress-Plugin ist ebenfalls verfügbar, das ich kurzerhand hier auf <em>coffee() break;</em> verbaut habe: <a href="http://wordpress.org/extend/plugins/hyphenator/">Hyphenator für WordPress</a></p>
<p>Hoffe ihr habt viel Freude mit dem Hyphenator! <img src='http://coffeebreak.aquilatech.org/wp-includes/images/smilies/smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://coffeebreak.aquilatech.org/2010/09/silbentrennung-im-web/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Resharper 5: Verlängerte 60-Tage-Testlizenz + 10% Rabatt auf Lizenzerwerb</title>
		<link>http://coffeebreak.aquilatech.org/2010/05/resharper5-verlaengerte-60-tage-testlizenz/</link>
		<comments>http://coffeebreak.aquilatech.org/2010/05/resharper5-verlaengerte-60-tage-testlizenz/#comments</comments>
		<pubDate>Thu, 20 May 2010 16:32:55 +0000</pubDate>
		<dc:creator>Andi</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://coffeebreak.aquilatech.org/?p=140</guid>
		<description><![CDATA[Hallo, ich komm gleich zur Sache: Resharper ist cool. Wer das noch nicht weiß, sollte sich unbedingt einmal die Testversion des Visual-Studio-Addins herunterladen und einfach mal ausprobieren. Das blöde für Hobby-Programmierer (bzw. für Entwickler die auch nebenberuflich programmieren, aber nicht unbedingt komerziell) ist allerdings, dass Resharper auch nicht ganz billig ist. Eine Personal Licence kostet [...]]]></description>
			<content:encoded><![CDATA[<p>Hallo, ich komm gleich zur Sache: <a href="http://www.jetbrains.com/resharper/index.html">Resharper</a> ist cool. Wer das noch nicht weiß, sollte sich unbedingt einmal die Testversion des Visual-Studio-Addins herunterladen und einfach mal ausprobieren.</p>
<p>Das blöde für Hobby-Programmierer (bzw. für Entwickler die auch nebenberuflich programmieren, aber nicht unbedingt komerziell) ist allerdings, dass Resharper auch nicht ganz billig ist. Eine <em>Personal Licence</em> kostet immerhin 188 €. Wer also das Addin noch etwas länger testen möchte, der kann einen kostenlosen 60-Tage-Testlizenzschlüssel erhalten.<br />
Dazu muss man einfach eine Anfrage an David Ridgway (Details siehe <a href="http://web2asp.net/2010/04/resharper-5.html">Blog</a>) stellen und man erhält per E-Mail einen persönlichen Lizenzschlüssel und zusätzlich noch einen 10%-Rabatt-Code, falls man sich dazu entschließt, Resharper anschließend zu kaufen. Finde ich persönlich eine prima Sache! <img src='http://coffeebreak.aquilatech.org/wp-includes/images/smilies/smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>P.S.: Wer ganz schlau ist, reizt erst die Standard-30-Tage-Testversion von Resharper 5 aus und gibt anschließend den 60-Tage-Lizenzschlüssel ein. So schafft man es immer hin auf 90 Tage Testzeitraum. <img src='http://coffeebreak.aquilatech.org/wp-includes/images/smilies/wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><em>Update vom 03.06.2010: Das Angebot von Jetbrains ist leider nicht mehr gültig. <img src='http://coffeebreak.aquilatech.org/wp-includes/images/smilies/sad.gif' alt=':(' class='wp-smiley' /> </em></p>
]]></content:encoded>
			<wfw:commentRss>http://coffeebreak.aquilatech.org/2010/05/resharper5-verlaengerte-60-tage-testlizenz/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Exe Joiner &#8211; Schwurbel</title>
		<link>http://coffeebreak.aquilatech.org/2010/04/exe-joiner-schwurbel/</link>
		<comments>http://coffeebreak.aquilatech.org/2010/04/exe-joiner-schwurbel/#comments</comments>
		<pubDate>Tue, 13 Apr 2010 11:42:30 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[bind]]></category>
		<category><![CDATA[exe]]></category>
		<category><![CDATA[join]]></category>

		<guid isPermaLink="false">http://coffeebreak.aquilatech.org/?p=117</guid>
		<description><![CDATA[Mahlzeit! Das Java-Tool Schwurbel erlaubt das packen von mehreren Dateien zu einer einzelnen Exe. Features: Icon kann festgelegt werden Dateien können direkt nach dem Auspacken ausgeführt werden Dateien können an festgelegte Pfade oder in das Verzeichnis der Exe entpackt werden Mit etwa 20kb ein sehr kleiner Overhead Schwurbel &#8211; Source und Jar Benötigte Software: Java [...]]]></description>
			<content:encoded><![CDATA[<p>Mahlzeit!</p>
<p>Das Java-Tool Schwurbel erlaubt das packen von mehreren Dateien zu einer einzelnen Exe.</p>
<h3><strong>Features:</strong></h3>
<ul>
<li>Icon kann festgelegt werden</li>
<li>Dateien können direkt nach dem Auspacken ausgeführt werden</li>
<li>Dateien können an festgelegte Pfade oder in das Verzeichnis der Exe entpackt werden</li>
<li>Mit etwa 20kb ein sehr kleiner Overhead</li>
</ul>
<p><a href="http://coffeebreak.aquilatech.org/wp-content/uploads/2010/04/Schwurbel.zip">Schwurbel &#8211; Source und Jar</a><br />
<a href="http://coffeebreak.aquilatech.org/wp-content/uploads/2010/04/schwurbel.png"><img class="alignnone size-medium wp-image-118" title="schwurbel" src="http://coffeebreak.aquilatech.org/wp-content/uploads/2010/04/schwurbel-300x56.png" alt="" width="300" height="56" /></a></p>
<p><span id="more-117"></span><br />
<br/><br/></p>
<h3><strong>Benötigte Software:</strong></h3>
<ul>
<li>Java 1.6</li>
<li><a href="http://sourceforge.net/projects/mingw/">Mingw</a> für gcc und windres</li>
</ul>
<h3><strong>Anleitung:</strong></h3>
<h4><strong>GUI:</strong></h4>
<ol>
<li>Open bei outputfile den Pfad zur zu erzeugenden Exe eingeben</li>
<li>Rechts daneben kann man den Pfad zu einer *.ico &#8211; Datei angeben</li>
<li>In der Mitte werden die zu inkludierenden Dateien eingegeben</li>
<li>Um eine weitere Datei hinzuzufügen muss auf &#8220;Add File&#8221; geklickt werden</li>
<li>Wenn alles in Ordnung ist muss man nur noch auf &#8220;Create Files&#8221; klicken</li>
<li>In dem Verzeichnis von &#8220;outputfile&#8221; wurden jetzt einige Dateien erstellt welche jetzt noch in eine Exe umgewandelt werden müssen, um das zu tun muss man mit der Konsole &#8220;make&#8221; ausführen</li>
<li>Der Code sollte kompilieren und die Exe ist ab nun benutzbar, die Batchdatei kann dazu genutzt werden die Quellcode- Dateien neu erstellen zu lassen</li>
</ol>
<p><br/></p>
<h4><strong>Kommandozeile:</strong></h4>
<p><code>Schwurbel exe icon dateipfad;typ;entpackpfad</code><br />
exe &#8211; die Ausgabedatei<br />
icon &#8211; ein icon, wenn keins genutzt werden soll muss &#8220;NO&#8221; angegeben werden<br />
dateipfad &#8211; pfad zu einer zu inkludierenden Datei<br />
typ &#8211; Typ der zu inkludierenden Datei, &#8220;EXE&#8221; wenn sie nach dem entpacken ausgeführt werden soll, andernfalls &#8220;DATA&#8221;<br />
entpackpfad &#8211; der Pfad zu dem die Datei entpackt wird<br />
<br/></p>
<h4><strong>Besonderes zum Entpackpfad:</strong></h4>
<p>Es gibt zwei Macros mit denen man den Pfad eines speziellen Verzeichnis auf dem Zielrechner holen kann<br />
{WINDOWS} &#8211; Pfad zum Windowsverzeichnis (ohne backslash am ende)<br />
{USERDIR} &#8211; Pfad zum Benutzerverzeichnis (ohne backslash am ende)</p>
<p>Beispiel:<br />
&#8220;{USERDIR}\tollesprogramm.exe&#8221; würde das Program in das Benutzerverzeichnis des aktuellen Benutzers kopieren</p>
]]></content:encoded>
			<wfw:commentRss>http://coffeebreak.aquilatech.org/2010/04/exe-joiner-schwurbel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>sendtoftp rewritten</title>
		<link>http://coffeebreak.aquilatech.org/2010/04/sendtoftp-rewritten/</link>
		<comments>http://coffeebreak.aquilatech.org/2010/04/sendtoftp-rewritten/#comments</comments>
		<pubDate>Wed, 07 Apr 2010 19:44:03 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[ftp]]></category>
		<category><![CDATA[send]]></category>
		<category><![CDATA[Tool]]></category>

		<guid isPermaLink="false">http://coffeebreak.aquilatech.org/?p=110</guid>
		<description><![CDATA[Tach! Ich habe mir mal die Mühe gemacht sendtoftp vollkommen neu zu schreiben. Diesmal allerdings nicht in Java, sondern in Gentee. Das Ergebnis ist erstaunlicherweise (ich lerne gentee seit 3 Wochen) annehmbar. Die Geschwindigkeit ist rapide angestiegen und die Größe von 72kb ist auch beeindruckend. Die Fehler aus der Java-Version habe ich nun auch gefixt: [...]]]></description>
			<content:encoded><![CDATA[<p>Tach!</p>
<p>Ich habe mir mal die Mühe gemacht <a href="http://coffeebreak.aquilatech.org/2010/01/sendtoftp/">sendtoftp</a> vollkommen neu zu schreiben. Diesmal allerdings nicht in Java, sondern in <a href="http://www.gentee.com/">Gentee</a>. Das Ergebnis ist erstaunlicherweise (ich lerne gentee seit 3 Wochen) annehmbar. Die Geschwindigkeit ist rapide angestiegen und die Größe von 72kb ist auch beeindruckend. Die Fehler aus der Java-Version habe ich nun auch gefixt:</p>
<ul>
<li>Linkgenerierung hat fehlerhafte Links produziert</li>
<li>Pfade mit Leerzeichen haben teilweise Probleme verursacht</li>
</li>
<p>Die Konfiguration ist ein klein wenig umgestaltet:</p>
<pre class="brush: text">
[general]
# ip or dns of the ftp server
host=localhost
# username for the login
username=anonymous
# password for the login
password=anonymous
[link]
# to be added before the path to the file
prefix=http://
# if you want to remove pieces of the links to the files
badprefix=/htdocs
[remote]
# the directory where the files will be uploaded to (relative to the root)
ftpdir=/htdocs/uploads
</pre>
<p>Neu ist der Parameter &#8220;badprefix&#8221; welcher besagt das Teile des Pfades zu den Dateien entfernt werden sollen. Beispielsweise um Links zu generieren welche vom Internet aus erreichbar sind. Auch neu ist &#8220;prefix&#8221;, was einfach das protokoll darstellt, welches den Links vorne angehängt werden soll.</p>
<blockquote><p>
<a href='http://coffeebreak.aquilatech.org/wp-content/uploads/2010/04/sendtoftp-Installer-1.0G.exe'>sendtoftp Installer1.0G &#8211; 66,3 KB</a><br />
<a href='http://coffeebreak.aquilatech.org/wp-content/uploads/2010/04/sendtoftp-1.0G.zip'>sendtoftp 1.0G Source &#8211; 56,8 KB</a>
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://coffeebreak.aquilatech.org/2010/04/sendtoftp-rewritten/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>DelegateBinder – DataBinding mit Datenmanipulation</title>
		<link>http://coffeebreak.aquilatech.org/2010/02/delegatebinder-databinding-mit-datenmanipulation/</link>
		<comments>http://coffeebreak.aquilatech.org/2010/02/delegatebinder-databinding-mit-datenmanipulation/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 17:32:54 +0000</pubDate>
		<dc:creator>Andi</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[DataBinding]]></category>
		<category><![CDATA[Delegate]]></category>
		<category><![CDATA[Lambda]]></category>
		<category><![CDATA[Lambda Expression]]></category>
		<category><![CDATA[Windows Forms]]></category>

		<guid isPermaLink="false">http://coffeebreak.aquilatech.org/?p=90</guid>
		<description><![CDATA[Ich hatte mal irgendwann vor längerer Zeit die Idee, eine Klasse zu programmieren, mit der ich einfache GUI-Logik leicht implementieren kann, ohne unnötigen Code schreiben zu müssen. Ziel war es, Dinge wie z.B. &#8220;Aktiviere einen Button nur, wenn eine gültige/vorhandene Datei in einer TextBox eingegeben wurde&#8221; oder &#8220;Deaktiviere andere Controls, wenn eine CheckBox angehakt ist&#8221; [...]]]></description>
			<content:encoded><![CDATA[<p>Ich hatte mal irgendwann vor längerer Zeit die Idee, eine Klasse zu programmieren, mit der ich einfache GUI-Logik leicht implementieren kann, ohne unnötigen Code schreiben zu müssen. Ziel war es, Dinge wie z.B. &#8220;Aktiviere einen Button nur, wenn eine gültige/vorhandene Datei in einer TextBox eingegeben wurde&#8221; oder &#8220;Deaktiviere andere Controls, wenn eine CheckBox angehakt ist&#8221; und sonstige kleine Spielereien die man dann und wann in der GUI-Programmierung braucht, zu vereinfachen.<br />
Bisher musste ich sowas immer auf die Weise erledigen, dass ich (im Falle des ersten Beispiels) eine Methode programmiert habe, die über die File.Exists-Methode geprüft hat, ob der String in der TextBox auf eine gültige Datei verweist. Anschließend musste ich das TextChanged-Ereignis an die Methode hängen, damit die Prüfung erneut ausgeführt wird, wenn der Benutzer den Text ändert. Das funktioniert zwar und ist nicht allzu schwer in der Umsetzung, der Designer nimmt einem den nervigen Event-Kram ja ab, aber was ich bei dieser Lösung unschön finde, ist, für einen Einzeiler extra eine Methode schreiben zu müssen. Also hab ich mich hingesetzt und mir eine Lösung überlegt, und rausgekommen ist der DelegateBinder.</p>
<p>Vorab schon einmal der C#-Code der Klasse:</p>
<pre class="brush: csharp">using System;
using System.ComponentModel;
using System.Windows.Forms;

[ToolboxItem(false)]
public class DelegateBinder : Control
{
    public delegate object BindingDelegate(object value);

    private BindingDelegate _bindingDelegate;
    private object _bindingProperty;

    public object BindingProperty
    {
        get { return _bindingProperty; }
        set { _bindingProperty = _bindingDelegate(value); }
    }

    private DelegateBinder(BindingDelegate bindingDelegate)
    {
        _bindingDelegate = bindingDelegate;
    }

    public static void Bind(BindingDelegate bindingDelegate, Control target, string propertyName, object dataSource, string dataMember)
    {
        if (bindingDelegate == null)
            throw new ArgumentNullException(&quot;bindingDelegate&quot;);

        if (target == null)
            throw new ArgumentNullException(&quot;target&quot;);

        if (dataSource == null)
            throw new ArgumentNullException(&quot;dataSource&quot;);

        var binder = new DelegateBinder(bindingDelegate);
        target.Controls.Add(binder);
        binder.DataBindings.Add(&quot;BindingProperty&quot;, dataSource, dataMember);
        target.DataBindings.Add(propertyName, binder, &quot;BindingProperty&quot;);
    }
}</pre>
<p><strong>Funktionsweise</strong><br />
Die Klasse <em>DelegateBinder</em> hat eine statische Methode Bind, die als Parameter einen Delegaten &#8211; der einen Object-Parameter erwartet und ein Object zurückgibt &#8211; und eine Referenz auf das Zielobjekt (das Control, dem das Binding hinzugefügt werden soll) empfängt. Weiterhin übergibt man der Bind-Methode wie beim normalen DataBinding-Konstruktor die Parameter für <em>propertyName</em>, <em>dataSource</em> und <em>dataMember</em>.<br />
Der Trick bei dieser ganzen Sache ist nun folgender: In der Bind-Methode wird ein neues DelegateBinder-Objekt erzeugt. Das Objekt hat eine Eigenschaft BindingProperty, an welche ich den Member der DataSource (also die Eigenschaft des Objekts, von dem die Daten kommen) binde. Nun dreh ich den Spieß um und binde die BindingProperty dieses Objekts an das Ziel-Objekt, das die (veränderten) Daten enthält. Das eigentliche Konvertieren/Bearbeiten der Daten erfolgt durch den Delegaten, den man der Bind-Methode übergibt. Dieser wird im Setter der BindingProperty aufgerufen, also immer dann, wenn sich die Daten vom Control (oder welches Objekt auch immer) geändert haben. In dem Moment, in dem nun der Wert der Eigenschaft BindingProperty geändert wird, schlägt das DataBinding des eigentlichen Ziel-Controls/Objekts zu, das ja an das DelegateBinder-Objekt gebunden ist und erhält den nun geänderten Wert. Die eigentliche Datenmanipulation findet daher über den &#8220;Zwischenmann&#8221; statt, der zwischen der DataSource und dem eigentlichen Target zwischengeschaltet ist.</p>
<p><strong>Anwendung</strong><br />
Die Beispiele von oben würde man folgendermaßen umsetzen:</p>
<pre class="brush: csharp">DelegateBinder.Bind(x =&gt; File.Exists((string)x), button1, &quot;Enabled&quot;, textBox1, &quot;Text&quot;);
DelegateBinder.Bind(x =&gt; !(bool)x, textBox2, &quot;Enabled&quot;, checkBox1, &quot;Checked&quot;);
DelegateBinder.Bind(x =&gt; !(bool)x, listView1, &quot;Enabled&quot;, checkBox1, &quot;Checked&quot;);</pre>
<p>Im angehängten Beispielprojekt sieht man das ganze in einem WinForms-Projekt in Aktion.</p>
<p><a href='http://coffeebreak.aquilatech.org/wp-content/uploads/2010/02/DelegateBinderSampleProject1.zip'>DelegateBinderSampleProject</a></p>
]]></content:encoded>
			<wfw:commentRss>http://coffeebreak.aquilatech.org/2010/02/delegatebinder-databinding-mit-datenmanipulation/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Disposable TemporaryFile</title>
		<link>http://coffeebreak.aquilatech.org/2010/02/disposable-temporaryfile/</link>
		<comments>http://coffeebreak.aquilatech.org/2010/02/disposable-temporaryfile/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 16:57:12 +0000</pubDate>
		<dc:creator>Andi</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Dispose Pattern]]></category>
		<category><![CDATA[temporäre Datei]]></category>
		<category><![CDATA[Temporary File]]></category>

		<guid isPermaLink="false">http://coffeebreak.aquilatech.org/?p=73</guid>
		<description><![CDATA[Wenn man in einem Programm mit temporären Dateien arbeitet, gehört es normalerweise zum guten Ton, diese anschließend wieder aus dem Temp-Verzeichnis des Benutzers zu löschen, um die Festplatte nicht zuzumüllen. Das ist natürlich in einem gewissen Grad für den Programmierer nervig. Als ich einen entsprechenden Anwendungfall hatte, habe ich mir gedacht, das muss auch irgendwie [...]]]></description>
			<content:encoded><![CDATA[<p>Wenn man in einem Programm mit temporären Dateien arbeitet, gehört es normalerweise zum guten Ton, diese anschließend wieder aus dem Temp-Verzeichnis des Benutzers zu löschen, um die Festplatte nicht zuzumüllen.<br />
Das ist natürlich in einem gewissen Grad für den Programmierer nervig. Als ich einen entsprechenden Anwendungfall hatte, habe ich mir gedacht, das muss auch irgendwie eleganter und einfacher gehen. Das hat mich schließlich auf die Idee gebracht, eine kleine Klasse zu programmieren, die mir den ganzen Nebenkram des Dateihandlings &#8211; erstellen und wieder löschen der physikalischen Datei &#8211; abnimmt. Hierfür hat sich das Dispose Pattern angeboten, das man in .NET über das IDisposable-Interface implementieren kann.</p>
<p>Herausgekommen ist eine kleine aber feine Klasse:</p>
<pre class="brush: csharp">using System;
using System.IO;

public sealed class TemporaryFile : IDisposable
{
    private bool disposed;

    public string FilePath { get; private set; }

    public TemporaryFile()
    {
        FilePath = Path.GetTempFileName();
    }

    ~TemporaryFile()
    {
        Dispose(false);
    }

    #region Dispose Pattern Implementation

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    private void Dispose(bool disposing)
    {
        if (disposed)
            return;

        if (File.Exists(FilePath))
            File.Delete(FilePath);

        disposed = true;
    }

    #endregion
}</pre>
<p>Jetzt ist es ganz bequem möglich, eine temporäre Datei in einem using-Block zu verwenden. Sobald das Ende des Codeblocks erreicht ist, wird die Datei automatisch wieder gelöscht:</p>
<pre class="brush: csharp">using (var file1 = new TemporaryFile())
{
    Console.WriteLine(file1.FilePath);
    // Sonstige Arbeiten an der temporären Datei
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://coffeebreak.aquilatech.org/2010/02/disposable-temporaryfile/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SendToFtp</title>
		<link>http://coffeebreak.aquilatech.org/2010/01/sendtoftp/</link>
		<comments>http://coffeebreak.aquilatech.org/2010/01/sendtoftp/#comments</comments>
		<pubDate>Thu, 07 Jan 2010 19:29:16 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://coffeebreak.aquilatech.org/?p=43</guid>
		<description><![CDATA[Das Tool SendToFtp ermöglicht das Uploaden von Dateien auf einen Ftp-Server. Das Besondere ist, dass der Upload über das &#8220;Senden An&#8221; &#8211; Kontextmenü angestoßen wird. Dies ermöglicht eine bequeme Auswahl über den Windows-Explorer. Nach dem Upload befinden sich dann Direktlinks zu den Dateien in der Zwischenablage. Dadurch ist das Tool besonders dafür geeignet einem Chatpartner [...]]]></description>
			<content:encoded><![CDATA[<p>Das Tool SendToFtp ermöglicht das Uploaden von Dateien auf einen Ftp-Server. Das Besondere ist, dass der Upload über das &#8220;Senden An&#8221; &#8211; Kontextmenü angestoßen wird. Dies ermöglicht eine bequeme Auswahl über den Windows-Explorer. </p>
<p>Nach dem Upload befinden sich dann Direktlinks zu den Dateien in der Zwischenablage. Dadurch ist das Tool besonders dafür geeignet einem Chatpartner eine Datei bereitzustellen ohne dies über die (meist überlasteten/langsamen) Server des Chatprotokolls abwickeln zu lassen.</p>
<p>Die Konfiguration des Tools besteht aus einer kleinen property file. Dort kann außerdem ein Proxy eingestellt werden.<br />
Nachfolgend kurz eine Beispielkonfiguration: </p>
<p><code>; the hostname of the ftp server<br />
ftp.hostname=ftp.server.de<br />
; the port of the ftp server, default is 21<br />
ftp.port=21<br />
; the username for the login, default is anonymous<br />
ftp.username=horst<br />
; the password for the login, default is anonymous<br />
ftp.password=geheimespasswort<br />
; the directory where the files will be uploaded to<br />
ftp.working.directory=horst/uploads/sendtoftp<br />
; If you connect via a proxy<br />
ftp.proxy.host=192.168.202.1<br />
ftp.proxy.port=4568<br />
</code></p>
<blockquote><p>Version 1.1<br />
Neue Features:</p>
<ul>
<li>Hochladen von kompletten Verzeichnissen mitsamt den enthaltenen Dateien</li>
<li>Option ein Verzeichnis auf dem FTP-Server auswählen zu können in welches die Dateien hochgeladen werden</li>
<li>Wesentlich geringere Größe durch die Nutzung der abgespeckten FTP Commons Net Library</li>
</ul>
<p><a href='http://coffeebreak.aquilatech.org/wp-content/uploads/2010/01/SendToFtp-Installer-1.1.exe'>SendToFtp Installer &#8211; 1.1</a> &#8211; 122 KB<br />
<a href='http://coffeebreak.aquilatech.org/wp-content/uploads/2010/01/SendToFtp-Source-1.1.zip'>SendToFtp Source 1.1</a> &#8211; 89 KB
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://coffeebreak.aquilatech.org/2010/01/sendtoftp/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>RandomVideoChooser</title>
		<link>http://coffeebreak.aquilatech.org/2009/12/java-randomvideochooser/</link>
		<comments>http://coffeebreak.aquilatech.org/2009/12/java-randomvideochooser/#comments</comments>
		<pubDate>Wed, 09 Dec 2009 12:58:32 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tool]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://coffeebreak.aquilatech.org/?p=34</guid>
		<description><![CDATA[Wer war nicht schon mal Abends dagesessen und hat sich gedacht: &#8220;Ein Film gucken könnte ich! Nur welchen?&#8221;. Da dieses Problem regelmäßig bei mir auftritt habe ich nun mit einem kleinen Progrämmchen für Abhilfe gesorgt. Mit dem Javatool RandomVideoChooser wird ein Film per Zufall ausgewählt und mit dem Lieblings-Videoplayer zum Abspielen gebracht. Das Programm sucht [...]]]></description>
			<content:encoded><![CDATA[<p>Wer war nicht schon mal Abends dagesessen und hat sich gedacht: &#8220;Ein Film gucken könnte ich! Nur welchen?&#8221;.<br />
Da dieses Problem regelmäßig bei mir auftritt habe ich nun mit einem kleinen Progrämmchen für Abhilfe gesorgt.</p>
<p>Mit dem Javatool RandomVideoChooser wird ein Film per Zufall ausgewählt und mit dem Lieblings-Videoplayer zum Abspielen gebracht.</p>
<p>Das Programm sucht im ersten Schritt alle Dateien aus einem Verzeichnis welches der Benutzer via Konfigurationsdatei einstellen kann. Die relativen Pfade vom Verzeichnis zu den Videos werden in eine Datei gespeichert, auch Index-datei genannt. Diesen Schritt übernimmt eine kleine Batchdatei oder ein Shellskript welches eine Funktion in der Jar aufruft.</p>
<p>Der zweite Schritt besteht dann darin die Datei mit den relativen Pfaden auszulesen, per Zufall eine Datei auszuwählen und diese Datei mit dem Videoplayer anzuzeigen. Dieser Schritt kann ebenfalls durch eine Batch oder ein Shellskript getriggert werden, ich habe mich allerdings dafür entschieden es per Manifest zu erledigen. Ein Doppelklick auf die Jar reicht also aus.</p>
<p>Die Idee das Programm in zwei Teile aufzuteilen kam daher, dass das Programm unter Windows verhältnismäßig lange dafür braucht das Verzeichnis nach Videodateien zu durchsuchen.<br />
Ich habe allerdings auch nicht näher nachgeforscht was genau den Vorgang verlangsamt. </p>
<p>Ein weiterer Vorteil dieser Vorgehensweise ist, dass man bereits gesehene Filme aus der Auswahl ausschliessen kann. Um das zu tun muss man dem Eintrag der Filmdatei in der Index-datei eine Raute (#) voranstellen.</p>
<p>Das Programm ist <a href="http://de.wikipedia.org/wiki/Beerware">Beerware</a></p>
<p><a href='http://coffeebreak.aquilatech.org/wp-content/uploads/2009/12/RandomVideoChooser.zip'>RandomVideoChooser Source sowie compiliertes Programm</a> &#8211; 21,5 KB</p>
]]></content:encoded>
			<wfw:commentRss>http://coffeebreak.aquilatech.org/2009/12/java-randomvideochooser/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Des Kaffees Pause</title>
		<link>http://coffeebreak.aquilatech.org/2009/11/des-kaffees-pause/</link>
		<comments>http://coffeebreak.aquilatech.org/2009/11/des-kaffees-pause/#comments</comments>
		<pubDate>Sat, 21 Nov 2009 22:06:40 +0000</pubDate>
		<dc:creator>Andi</dc:creator>
				<category><![CDATA[Unsortiert]]></category>

		<guid isPermaLink="false">http://coffeebreak.aquilatech.org/?p=24</guid>
		<description><![CDATA[Frei nach: Des Pudels Kern. Haha! Ha. Ha&#8230; So, nach dieser überaus lustigen Einleitung will ich erstmal erklären, was das hier alles soll. Also. Im Grunde gar nichts. Das hier ist nur ein weiterer Blog, der seinen Platz in den Tiefen dieses Internet-Universums einnehmen wird. Und zwar gehört dieser Blog Michael und Andi (das bin [...]]]></description>
			<content:encoded><![CDATA[<p>Frei nach: <em>Des Pudels Kern</em>. Haha! Ha. Ha&#8230;</p>
<p>So, nach dieser überaus lustigen Einleitung will ich erstmal erklären, was das hier alles soll. Also. Im Grunde gar nichts. Das hier ist nur ein weiterer Blog, der seinen Platz in den Tiefen dieses Internet-Universums einnehmen wird.</p>
<p>Und zwar gehört dieser Blog Michael und Andi (das bin ich!). Wir sind zwei Fachinformatiker / Anwendungsentwickler in Ausbildung, die wir glücklicherweise bald beenden werden.<br />
Entstanden ist der Blog, nachdem mich Michael fragte, ob ich denn einen Blog hätte und ich darauf hin meinte, dass ich zwar schon gerne bloggen würde, mich aber nie dazu aufraffen könne, endlich ein Blogsystem aufzusetzen und einzurichten. Da hatte er mich dann gefragt, ob ich denn nicht mit ihm zusammen einen Gemeinschaftsblog machen möchte. Ich fand die Idee gar nicht so schlecht, unter der Bedingung, dass er das ganze System einrichtet. <img src='http://coffeebreak.aquilatech.org/wp-includes/images/smilies/biggrin.gif' alt=':D' class='wp-smiley' /><br />
Lange Rede kurzer Sinn: Jetzt haben wir diesen Blog, in dem jeder von uns in unregelmäßigen Zeitabständen irgendwelche (belanglosen) Blogeinträge posten wird. Voraussichtlich wird sich hier das meiste um die Themen Programmierung und allgemeine Computer-Technik drehen. So wird es jedenfalls meinerseits sein. Also, nur damit ihr schonmal in etwa wisst, was euch hier erwartet&#8230; <img src='http://coffeebreak.aquilatech.org/wp-includes/images/smilies/smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Eine kurze Erklärung noch zum Blogtitel: Da wir beide Informatiker sind, sind wir nicht wirklich für unsere kreativen Einfälle bekannt. Daher gestaltete sich die Titelsuche sehr demotivierend. Nachdem Michael zuerst den unverbindlichen Vorschlag <em>Freak und Geekiger</em> machte (in Anspielung auf <em>Dumm und dümmer</em>) und ich von diesem nicht sehr begeistert war, meinte er, irgendetwas mit Kaffee wäre cool. Ich gestand dann ehrlich, dass von Anfang an mein erster Gedanke <em>Kaffeepause</em> war. Denn Informatiker sind ja bekannt dafür, Kaffeejunkies zu sein. Nicht umsonst gibt es den Spruch <em>A programmer is just a tool which converts caffeine into code</em>. Allerdings fand ich den Titel langweilig. Trotzdem hab ich die Idee dann etwas weiterverfolgt und war dann schnell bei der englischen Version <em>coffee break</em>. Da mich das <em>break</em> an die Anweisung zum verlassen eines Codeblocks oder einer Switchanweisung in einigen Programmiersprachen wie z.B. C#, C++ und Java erinnerte, entstand dann der Titel <em>coffee() break;</em>, um somit auf die programmierlastigkeit des Blogs anzuspielen. Im übrigen mag ich keinen Kaffee.</p>
<p>Nach dieser überaus unterhaltsamen Anekdote ist jetzt hoffentlich niemand eingeschlafen. <img src='http://coffeebreak.aquilatech.org/wp-includes/images/smilies/yawn.gif' alt=':yawn:' class='wp-smiley' /> </p>
<p>Wir wünschen euch noch viel Spaß hier. <img src='http://coffeebreak.aquilatech.org/wp-includes/images/smilies/smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://coffeebreak.aquilatech.org/2009/11/des-kaffees-pause/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

