<?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>xscDevBlog - LastSharp &#38; Co. &#187; Software</title>
	<atom:link href="http://dev.xscheme.de/category/software/feed/" rel="self" type="application/rss+xml" />
	<link>http://dev.xscheme.de</link>
	<description>Der xscheme-DevelopmentBlog</description>
	<lastBuildDate>Sun, 23 May 2010 11:40:10 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Scripe. Oder: Warum eine Scriptsprache auch nur eine Suppe ist.</title>
		<link>http://dev.xscheme.de/2009/09/scripe-eigene-scriptsprache-ganz-einfach/</link>
		<comments>http://dev.xscheme.de/2009/09/scripe-eigene-scriptsprache-ganz-einfach/#comments</comments>
		<pubDate>Wed, 02 Sep 2009 20:40:33 +0000</pubDate>
		<dc:creator>WordPress</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Projekte]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://dev.xscheme.de/?p=962</guid>
		<description><![CDATA[Es ist wohl aufgefallen, ich erwähne es trotzdem: Seit einiger Zeit arbeite ich an einem Prinzip, dass es jedem Interessierten ermöglichen soll, eine eigene Script- oder Programmiersprache zu entwerfen. Meine theoretischen Überlegungen, so langweilig sie auch manches Mal seien mögen, habe ich in einer Reihe von Artikeln festgehalten; damit ich diese Texte aber auch schreiben [...]]]></description>
			<content:encoded><![CDATA[<p>Es ist wohl aufgefallen, ich erwähne es trotzdem: Seit <a href="http://dev.xscheme.de/2009/07/eigene-programmiersprache-scriptsprach/">einiger Zeit</a> arbeite ich an einem Prinzip, dass es jedem Interessierten ermöglichen soll, eine eigene Script- oder Programmiersprache zu entwerfen. Meine theoretischen Überlegungen, so langweilig sie auch manches Mal seien mögen, habe ich in einer <a href="http://dev.xscheme.de/2009/08/wie-entwickle-ich-meine-eigene-scriptsprache-teil-1/">Reihe</a> <a href="http://dev.xscheme.de/2009/08/wie-entwickle-ich-meine-eigene-scriptsprache-teil-2/">von</a> <a href="http://dev.xscheme.de/2009/08/wie-entwickle-ich-meine-eigene-scriptsprache-teil-3/">Artikeln</a> festgehalten; damit ich diese Texte aber auch schreiben konnte, musste ich immer ein kleines Stückchen vorausdenken und einiges an implementierungstechnischer Vorarbeit leisten.</p>
<p>Und heute war ich dann soweit, dass ich eine gar nicht so üble Version vor mir hatte, die ich nun (nicht detailliert, eher angeberischerweise <img src='http://dev.xscheme.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ) präsentieren will. Vorhang auf für <strong>Scripe</strong>!</p>
<p><span id="more-962"></span></p>
<p>(Der Name hat mehrere Hintergründe: zum einen wäre da der Schreibfehler, der schonmal beim Wort &#8220;Scripte&#8221; auftaucht, zum anderen findet sich ein Ursprung im englischen &#8220;to scribe&#8221;, was soviel wie &#8220;vorzeichnen&#8221; bedeutet. Zuguterletzt sagt einem das allwissende <a href="http://www.urbandictionary.com/define.php?term=scripe">Urban Dictionary</a>, das &#8220;scripe&#8221; das Äquivalent von &#8220;a load of rubbish&#8221;, also etwas nicht ganz hochwertigem ist. Das ist auch in Ordnung so: Scripe ist der Weg, den ich einschlagen würde, wenn ich eine Scriptsprache zu entwickeln hätte. Zwar sind Grundkonzepte, die sich auch im professionelleren Einsatz finden, vorhanden, aber Scripe erhebt in dieser Hinsicht keinerlei Anspruch auf Vollständigkeit oder übermäßige Effizienz. &#8220;Quick and Dirty&#8221; wäre dennoch übertrieben, dann doch eher &#8220;<strong>Quick and Not-So-Clean</strong>&#8220;&#8230;)</p>
<p>Die Suppe im Titel lässt das Prinzip erahnen: Suppen brauchen Gewürze, um zu schmecken, und hierbei ist es wichtig auf die Mischung zu achten. Ebenso wird jeder seine Suppe anders würzen, je nach Vorlieben oder Vorhaben. Eine Scriptsprache ist da nicht anders: hier eine Prise Variablenverwaltung, dort ein Löffel Arithmetik. Voilà.</p>
<p>Dieses Suppenprinzip findet man heutzutage überall, hauptsächlich in der Unix/Linux-Welt, wo man je nach Bedarf auf einfachste Art und Weise ein Paket nachladen kann und das Gesamtsystem somit bis ins letzte Eck modifizierbar bleibt. <strong>Auch Scripe verwendet solche Pakete, allerdings eben für die Features der Programmiersprache!</strong></p>
<p>Folgender C#-Code erzeugt einen Prozessor, der den <a href="http://en.wikipedia.org/wiki/Shunting_yard_algorithm">Shunting-Yard-Algorithmus</a> verwendet, um die Eingabe zu parsen. Anschließend erhält er vier Pakete: eines für arithmetische Operationen, eines für String-Operationen, eines für Ein- und Ausgabe, und eines für Variablendefinition und -verwaltung. Anschließend wird eine Eingabe-Auswertungs-Schleife gestartet.</p>
<pre>// Create processor
Processor p = new Processor(
    new ShuntingYardAlgorithm()
);

// Add packages
p.AddPackage(new Scripe.Evaluators.Arithmetic.ArithmeticPackage(true));
p.AddPackage(new Scripe.Evaluators.Strings.StringPackage("&amp;", "$"));
p.AddPackage(new Lapicon.Evaluators.InputOutput.InputOutputPackage());
p.AddPackage(new Lapicon.Evaluators.Variables.VariablePackage());

// Empty codebase
Codebase c = new Codebase(new Scripe.Env.Environment());

// Read-Eval-Print-Loop
string r = "";
while (true)
{
    try
    {
        Console.Write("Calc: ");
        if ((r = Console.ReadLine()) == "exit") break;
        c.Add(r);
        Console.WriteLine(" ==&gt; " + c.Execute(p).ReturnValue);
    }
    catch (Exception ex)
    {
        Console.WriteLine(" ERROR: " + ex.Message);
    }
}</pre>
<p>In nur 5 Zeilen haben wir hier (mithilfe der Scripe-internen und zweier für Lapicon geschriebenen Pakete) einen Prozessor geschaffen, der jede der folgenden Eingaben auswerten kann:</p>
<pre>1+(4-6)*(3-4^5)+e
def variable = 7*8
def variableDurchZwei = &lt;variable&gt;/2
echo "(7*8)/2 = " &amp; $(&lt;variableDurchZwei&gt;)</pre>
<p>Und nun stelle man sich eine Internetseite vor, die eine gewisse Anzahl solcher Pakete anbietet. <strong>Scriptsprachen entwickeln einfach gemacht</strong>.</p>
<p>Soviel also von mir. Wann Scripe letztlich ganz fertig ist (und ich mich wieder den anderen Projekten wie LastSharp widmen kann), kann ich nur schätzen. Ist ein Monat in Ordnung? <img src='http://dev.xscheme.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://dev.xscheme.de/2009/09/scripe-eigene-scriptsprache-ganz-einfach/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>SerienjunkiesGML</title>
		<link>http://dev.xscheme.de/2009/07/serienjunkies-gml/</link>
		<comments>http://dev.xscheme.de/2009/07/serienjunkies-gml/#comments</comments>
		<pubDate>Tue, 07 Jul 2009 16:10:56 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://dev.xscheme.de/?p=770</guid>
		<description><![CDATA[First of all: wie es mit der Legalität der Seite serienjunkies.org aussieht, weiß ich nicht. Ich selbst kannte sie bis vorgestern nicht und alles, was nun folgt, ist für mich nur eine programmiertechnische Fingerübung &#8211; wenn auch womöglich mit einem gewissen Nutzen.
Das Problem, auf das ich hingewiesen wurde, als ich mich nach online verfügbaren Episoden [...]]]></description>
			<content:encoded><![CDATA[<p>First of all: wie es mit der Legalität der Seite <em>serienjunkies.org</em> aussieht, weiß ich nicht. Ich selbst kannte sie bis vorgestern nicht und alles, was nun folgt, ist für mich nur eine programmiertechnische Fingerübung &#8211; wenn auch womöglich mit einem gewissen Nutzen.</p>
<p>Das Problem, auf das ich hingewiesen wurde, als ich mich nach online verfügbaren Episoden von <a href="http://en.wikipedia.org/wiki/Flight_of_the_Conchords_(TV_series)">Flight of the Conchords</a> erkundigt und die o.g. Seite als Quelle empfohlen bekommen habe, war, dass man, um an Downloadlinks zu kommen (ohnehin nicht das, was ich wollte), für jede Episode ein Captcha lösen und anschließend für jede einzelne Teil-Datei eine Serie von Klick-Copy-Paste ausführen musste. Und da kam mir die Idee, dass ganze in ein Programm zu packen: <strong>SerienjunkiesGML (Get My Links!)</strong></p>
<p><a href="http://dev.xscheme.de/wp-content/uploads/2009/07/sgml1.png"><img class="alignleft size-medium wp-image-771" style="margin-right: 2em; margin-bottom: 1em;" title="sgml1" src="http://dev.xscheme.de/wp-content/uploads/2009/07/sgml1-236x300.png" alt="sgml1" width="236" height="300" /></a>Man gibt einfach die URL einer Serienjunkies-Seite in das dafür vorgesehene Textfeld ein (alternativ kann man auch direkt nach irgendetwas suchen), lässt das Programm die verfügbaren Episoden laden und startet mit einem Doppelklick auf die jeweilige Episode das Holen der Links.</p>
<p>Das Lösen des Captchas konnte ich nicht automatisieren (da sind schon viel größere Kaliber als ich dran gescheitert), aber die darauf folgenden Operationen, die zu den eigentlichen Links führen. D.h.: <strong>Hoster auswählen, Captcha lösen, warten, fertig!</strong></p>
<p>Man kann auch gleich von vornherein mehrere Episoden auswählen und mit einem Klick auf &#8220;Go!&#8221; nacheinander abarbeiten.</p>
<p>Ein Hinweis noch: das Holen der Links funktioniert in einer Vielzahl der Fälle reibungslos, nur manchmal scheitert es. Dann muss man die entsprechenden URLs (die mit &#8220;download.serienjunkies.org&#8221;) beginnen, eben von Hand in den Browser eingeben.</p>
<p>Herausforderungen an mich waren: Untersuchung einer HTML-Seite, Simulieren einer POST-Request, Entwicklung einer intuitiven Benutzeroberfläche.</p>
<p><strong>Download: <a href="http://dev.xscheme.de/wp-content/uploads/2009/07/serienjunkiesgml.exe">http://dev.xscheme.de/wp-content/uploads/2009/07/serienjunkiesgml.exe</a></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://dev.xscheme.de/2009/07/serienjunkies-gml/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Vom Gedankenspiel zum Versuch: Universal Version Description (UVD)</title>
		<link>http://dev.xscheme.de/2009/05/universal-version-description-uvd/</link>
		<comments>http://dev.xscheme.de/2009/05/universal-version-description-uvd/#comments</comments>
		<pubDate>Fri, 01 May 2009 22:24:43 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[HowTo]]></category>
		<category><![CDATA[Projekte]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Theorie]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[pad]]></category>
		<category><![CDATA[portable application description]]></category>
		<category><![CDATA[universal version description]]></category>
		<category><![CDATA[update check]]></category>
		<category><![CDATA[uvd]]></category>
		<category><![CDATA[version check]]></category>

		<guid isPermaLink="false">http://dev.xscheme.de/?p=713</guid>
		<description><![CDATA[Das Problem der Updates
Ich bin in meinem vorletzten Artikel zum Thema Update-Check bereits darauf eingegangen: Versionsänderungen sind nicht immer leicht zu verfolgen und die Überprüfung auf Updates erfordert meist einen nicht zu unterschätzenden Programmier- und Verwaltungsaufwand. Weiterhin bedeutet es für den Entwickler selbst auch, dass er auf mehreren Hochzeiten tanzen muss: er stellt meist eine [...]]]></description>
			<content:encoded><![CDATA[<h2>Das Problem der Updates</h2>
<p>Ich bin in meinem <a href="http://dev.xscheme.de/2009/04/gedankenspiel-update-notification-server/">vorletzten Artikel zum Thema Update-Check</a> bereits darauf eingegangen: Versionsänderungen sind nicht immer leicht zu verfolgen und die Überprüfung auf Updates erfordert meist einen nicht zu unterschätzenden Programmier- und Verwaltungsaufwand. Weiterhin bedeutet es für den Entwickler selbst auch, dass er auf mehreren Hochzeiten tanzen muss: er stellt meist eine eigene Downloadseite bereit, die Links zu verschiedenen Versionen enthält, er aktualisiert gleichzeitig die Dateien, die für die Versionsüberprüfung zuständig sind, er kümmert sich um die Daten, die in irgendwelchen Softwareverzeichnissen (heise, chip.de, etc&#8230;) stehen, usw., usw&#8230; Als verantwortungsvoller Entwickler mit der Ambition, sein Programm unter die Leute zu bringen, hat man richtiggehend die Pflicht, diese Schritte durchzuführen &#8211; und das regelmäßig und mit äußerster Genauigkeit.</p>
<p>Hier nun also das (absolut logische und vernünftige) Konzept, das die meisten Beispiele, die man im Web zu dem Thema &#8220;Update-Check&#8221; findet, implementieren:</p>
<p style="text-align: center;"><img class="alignnone size-full wp-image-715" title="Allgemeines Konzept zum Update-Check" src="http://dev.xscheme.de/wp-content/uploads/2009/05/unserver.png" alt="Allgemeines Konzept zum Update-Check" width="600" height="300" /></p>
<p>Augenscheinliche Probleme hierbei:</p>
<ul>
<li> Die Verwaltung der Programmdaten läuft (beim Otto-Normal-Programmierer) meist von Hand ab, d.h. man bearbeitet die Update-Datei (die nicht, wie im Beispiel, im XML-Format vorliegen kann), lädt sie von Hand auf den <em>eigenen</em> Webserver und ist aus Kompatibilitätsgründen meist an ein (demnach schwer erweiterbares) Format und an einen bestimmten Dateinamen gebunden.</li>
<li>Je nachdem, wie detailliert die Update-Informationen sind (nur Versionsnummer vs. Versionsnummer, Änderungsdatum, Changelog, &#8230;), kann das Bearbeiten der Versionsdatei eine Heidenarbeit bedeuten.</li>
<li>Der Entwickler muss das Programm erst einmal dazu bringen, einen funktionierenden Versions-Check durchzuführen.</li>
<li>Und was passiert bei Programmen, die mehrsprachig funktionieren und beworben werden?</li>
</ul>
<p>Die Idee im erwähnten Artikel war es also, den &#8220;Update Notification Server&#8221; nicht mehr als Eigentum des Entwicklers zu sehen, sondern als über ein API zugängliche Plattform im Internet, die Verwaltungsfunktionen komfortabel bereitstellt. Gleichzeitig wären verschiedene Bibliotheken für das API nötig, um dem Programmierer die Implementierung der Versionsprüfung fast gänzlich abzunehmen.</p>
<p>Was folgte, war ein Einspruch.</p>
<p><span id="more-713"></span></p>
<p>Es sei nicht garantierbar, dass der verantwortliche zentrale Server auch in zwei Jahren noch erreichbar sein würde, wurde argumentiert. Man könne das bei einem eigenen Server viel eher kontrollieren &#8211; und außerdem habe heutzutage ohnehin jeder Entwickler zumindest ein bisschen Webspace.</p>
<p>Dem kann man nicht widersprechen. Zwar würde eine zentrale Plattform den Komfort steigern, allerdings unvermeidbar auch das Risiko. Was also tun?</p>
<h2>Unvereinbarkeit</h2>
<p>Ein großes Problem bei den vielen Versionsprüfungsimplementierungen (was für ein Wort!) im Web ist die Unvereinbarkeit. Die meisten basieren auf verschiedenen Dateiformaten, die wiederum unterschiedlichen Informationsgehalt bieten. Eine reine Textdatei mit der Versionsnummer mag dem <a href="http://www.aeroxp.org/board/index.php?showtopic=11508">einen</a> reichen, der <a href="http://themech.net/2008/05/adding-check-for-update-option-in-csharp/">andere</a> benötigt aber vllt. auch schon den Downloadlink für die aktuelle Version dazu. Oder gar den Namen des Programms und Zusatzmeldungen. <a href="http://beta.unclassified.de/code/dotnet/updatecheck/">Kann passieren</a>.</p>
<p>Wenn einem schließlich keine der Lösungen des World Wide Webs zusagt, dann bleibt nichts anderes zu tun, als eine bestehende Lösung anzupassen. Oder <em>from scratch</em>, also komplett neu zu beginnen. Das wiederum kostet Zeit und Energie, Schweiß und Kaffee, von den Nerven gar nicht erst zu sprechen. Was also tun? (Zweimal haben wir uns das jetzt schon gefragt!)</p>
<p>Eine Lösung, die es allen recht macht, wird es vermutlich nie geben, aber das heißt nicht, dass man nicht versuchen darf, in ihre Nähe zu kommen. Was benötigt wird, ist ein <strong>standardisiertes Dateiformat für Softwarebeschreibungen</strong>.</p>
<h2>Standards</h2>
<p>Es gibt so etwas bereits unter dem Namen <strong>Portable Application Description (PAD)</strong>, nachzulesen beispielsweise in <a href="http://de.wikipedia.org/wiki/Portable_Application_Description">Wikipedia</a> oder der <a href="http://www.asp-shareware.org/pad/">Association of Shareware  Professionals</a>, anzusehen u.a. <a href="http://download.agilita.de/pad_file.xml">hier</a>. Der Vorteil: das <em>ist</em> in der Tat ein Standard; der Nachteil: er wurde für den Vertrieb von <a href="http://de.wikipedia.org/wiki/Shareware">Shareware</a> entworfen. Außerdem wird ein alternatives XML-Namensraumkonzept verwendet, was sich für einen solchen Standard meiner Meinung nach nicht gehört.</p>
<p><img class="alignright size-full wp-image-717" style="margin-left: 1em; margin-bottom: 0.5em;" title="Portable Application Description" src="http://dev.xscheme.de/wp-content/uploads/2009/05/pad.png" alt="Portable Application Description" width="300" height="310" />Aber ganz allgemein hat das Format in meinen Augen signifikante Schwächen:</p>
<ul>
<li>Erweiterbarkeit: Man darf genau <em>einen</em> Screenshot angeben, <em>eine</em> Informations-URL, usw&#8230;</li>
<li>Es findet keine Unterscheidung nach unterstützen Betriebsystemen statt. Angenommen, es gäbe einen Installer, der das Programm auf den neueren Windows-Versionen einrichtet, sowie einen, der es sogar auf Windows 95 zum Laufen bringt: PAD bietet keine Möglichkeit, diese Dateien zu unterscheiden bzw. überhaupt erst vernünftig gemeinsam anzubieten.</li>
<li>Wir leben in einer multilingualen Welt. Die meisten Programme sind für mehrere Sprachen ausgelegt, doch würde man versuchen, Informations/Download-URLs nach Sprache anzubieten, würde man an PAD absolut <em>insane</em> werden.</li>
<li>Überhaupt fehlt so etwas wie Hinweise auf Support im Web in PAD. Man kann Telefonnummern angeben, aber das Leben und die Lebenshilfe findet heutzutage nun einmal zu größeren Teilen im Internet statt als noch früher. Und E-Mail-Adressen bedeuten bloß Wartezeit.</li>
<li>Man kann in PAD genau einen Entwickler angeben. Was macht man bei heutzutage weit verbreiteten Entwickler-Teams?</li>
<li>Das Format hat eine Struktur, die das Verständnis manchmal erschwert. Aber es wird ja von Computern verarbeitet, also ist das akzeptabel. Andererseits: auch Suchmaschinencrawler sind Computerprogramme, und PAD (ein Standard!) wird von denen so gut wie ignoriert!</li>
<li>Was Nutzer oftmals interessiert, ist die Entwicklung eines Programms: Was gibt es neues? Was wurde entfernt, was verbessert?</li>
</ul>
<p>Es ist vielleicht etwas hochgegriffen, aber für die Softwarebeschreibung der heutigen Zeit muss ein neuer Standard erarbeitet werden. Und hier wird aus dem Gedankenspiel der Versuch.</p>
<h2>Was macht Software aus?</h2>
<p>Um welche Punkte müsste sich ein neues Format kümmern, was sind seine Prämissen und Ziele? Und was genau will ich eigentlich? Ein Brainstorming:</p>
<ul>
<li>Sprachenunterstützung</li>
<li>Änderungsverfolgung</li>
<li>Autorenliste</li>
<li>Firmenkontaktdaten</li>
<li>Lizenzinformationen</li>
<li>Suchmaschinen-Metadaten</li>
<li>Installationsanweisungen</li>
<li>Abhängigkeiten: Was brauche ich, damit das Programm läuft?</li>
<li>Einfacher Zugang zu Support-Quellen (Foren, Anleitungen, FAQ)</li>
</ul>
<p>Es entwickelt sich vor meinem inneren Auge also langsam eine XML-Struktur, die das alles mit sich bringt: <strong>XML Application Description (XAD)</strong>, veranschaulicht durch ein <a href="http://dev.xscheme.de/xad/lastsharp.xad.xml">Beispiel</a> (Rechtsklick &gt;&gt; Quelltext), das verwendete <a href="http://dev.xscheme.de/xad/xad.xsl">XSLT-Stylesheet</a> und die <a href="http://dev.xscheme.de/xad/xad.dtd">DTD</a> (das Dokument ist <a href="http://www.validome.org/grammar/validate/?lang=ge&amp;viewSourceCode=1&amp;grammarTyp=DTD&amp;url=http://dev.xscheme.de/xad/xad.dtd">valide</a>, ich weiß nicht, warum Firefox und der IE da rumspinnen).</p>
<h2>Ein Gedanke</h2>
<p>Dann kam mir ein Gedanke: <strong>nicht nur Programme</strong> unterliegen Änderungen, auch Dokumente, Filme, Serien lassen sich einem Versionskonzept unterordnen. Zwei Beispiele: die FAZ vom 30.04.2009 könnte ebensogut die Versionsnummer 2009.119 (der 30.04. ist der 119. Tag des Jahres 2009) tragen, und die Special Extended Edition von &#8220;Herr der Ringe: Die zwei Türme&#8221; könnte auch &#8220;Herr der Ringe 2.1&#8243; heißen (wenn man keinen Wert auf Gewinn legen würde). Mit ein wenig Phantasie überträgt man das ganze auf Autos, CPUs, kurz gesagt: alles, was sich irgendwie als bildlicher <strong>Entwicklungsstrom</strong> darstellen lässt.</p>
<p style="text-align: center;"><img class="size-full wp-image-718 aligncenter" title="strom" src="http://dev.xscheme.de/wp-content/uploads/2009/05/strom.png" alt="strom" width="550" height="230" /></p>
<p>Wichtig hierbei ist die Möglichkeit, stets auf die früheren Versionen eines Objektes zugreifen zu können, weil im Idealfall Verweise auf diese vorhanden sind.</p>
<p>Wenn man also das oben erwähnte Format weiterentwickelt, verallgemeinert und anpasst, dann hat man ein mächtiges Werkzeug für weit mehr als bloß Software. Und hier wären wir.</p>
<h2>Universal Version Description (UVD)</h2>
<p>Da die Verwendung nicht mehr nur auf Programme beschränkt ist, ist es wichtig, anzugeben, was genau in einem Dokument beschrieben wird. Die Nomenklatur hierfür wäre idealerweise etwas wie &#8220;Kategories:Unterkategorie&#8221; oder &#8220;Kategorie&#8221; allein. Beispiele:</p>
<ul>
<li>media:tv-episode</li>
<li>software:utility</li>
<li>paper:specification</li>
<li>paper:mathematics</li>
<li>&#8230;</li>
</ul>
<p>Folgendes wäre ein Beispiel für das kleinstmögliche UVD-Dokument:</p>
<pre>&lt;?xml version="1.0"?&gt;
&lt;!DOCTYPE uvd SYSTEM "http://dev.xscheme.de/uvd/uvd-1.dtd"&gt;
&lt;uvd version="1.0.0" type="software:audio"&gt;
  &lt;general&gt;
    &lt;name&gt;WinAmp&lt;/name&gt;
  &lt;/general&gt;
&lt;/uvd&gt;</pre>
<p>Nicht sehr aussagekräftig, aber jetzt bauen wir noch Informations-Links (in verschiedenen Sprachen), sowie Beschreibungstexte (in verschiedenen Sprachen und Längen; die unterstützen Längenangaben sind 100, 255, 2000 und &#8220;any&#8221;) ein:</p>
<pre>&lt;?xml version="1.0"?&gt;
&lt;!DOCTYPE uvd SYSTEM "http://dev.xscheme.de/uvd/uvd-1.dtd"&gt;
&lt;uvd version="1.0.0" type="software:audio"&gt;
  &lt;general&gt;
    &lt;name&gt;WinAmp&lt;/name&gt;
    &lt;urls&gt;
      &lt;url lang="en"&gt;http://www.winamp.com/&lt;/url&gt;
      &lt;url lang="de"&gt;http://de.winamp.com/&lt;/url&gt;
    &lt;/urls&gt;
    &lt;descriptions&gt;
      &lt;description lang="en" maxlength="255"&gt;
        WinAmp is a multimedia player, supporting (...)
      &lt;/description&gt;
      ...
    &lt;/descriptions&gt;
  &lt;/general&gt;
&lt;/uvd&gt;</pre>
<p>Deutsch und Englisch vorhanden, alles andere beliebig nachtragbar. Weitere Informationen wären: Lizenz, Keywords, Screenshots, etc&#8230;Anschließend könnte in einem neuen Abschnitt &#8220;release&#8221; die aktuelle Version (inkl. Downloadlinks nach Sprache und OS) beschrieben, in &#8220;contributors&#8221; alle Beteiligten aufgelistet und in &#8220;company&#8221; Informationen zum Firmenkontakt bereitgestellt werden.</p>
<p>Eine komplette Dokumentation des Formats würde den Rahmen aber noch mehr sprengen, deswegen wird hier auf die folgenden Dokumente verwiesen:</p>
<ul>
<li>&#8220;Spezifikation&#8221; zu UVD: <a href="http://dev.xscheme.de/uvd/Universal%20Version%20Description.txt">http://dev.xscheme.de/uvd/Universal%20Version%20Description.txt</a></li>
<li>DTD: <a href="http://dev.xscheme.de/uvd/uvd-1.dtd">http://dev.xscheme.de/uvd/uvd-1.dtd</a> (<a href="http://www.validome.org/grammar/validate/?lang=ge&amp;viewSourceCode=1&amp;grammarTyp=DTD&amp;url=http://dev.xscheme.de/uvd/uvd-1.dtd">Validate</a>)</li>
<li>Beispiele:
<ul>
<li><a href="http://dev.xscheme.de/uvd/release-example.uvd.xml">Programm-Release</a></li>
<li><a href="http://dev.xscheme.de/uvd/writer-example.uvd.xml">Dokument</a></li>
<li><a href="http://dev.xscheme.de/uvd/episode-example.uvd.xml">TV-Episode</a></li>
</ul>
</li>
</ul>
<h2>Fazit</h2>
<p>Meistens ist der eigene Blick von Selbstherrlichkeit getrübt, wenn man etwas in den eigenen Augen neues und tolles geschaffen hat. Deswegen brauche ich Meinungen hierzu.</p>
<p>Um das anfangs erwähnte Argument noch einmal aufzugreifen, man könne seinen eigenen Webspace besser kontrollieren, will ich hier erwähnen, dass ein UVD-Dokument natürlich überall liegen kann. Was bisher fehlt, sind Programme zur Verwaltung und Erstellung, sowie Bibliotheken zur Verarbeitung.</p>
<p>Vielleicht überschätze ich auch den Nutzen des ganzen. Kein Grund allerdings, den Stein nicht ins Rollen zu bringen.</p>
<h2>Update (02.05.2009)</h2>
<p>Ich will an dieser Stelle noch demonstrieren, wie sich das Format für einfache Versionsprüfung, sowie Update-Verarbeitung eignet.</p>
<p>Für einen normalen Versionscheck würde schon so etwas reichen:</p>
<pre class="xml:collapse" name="code">&lt;uvd version="1.0.0" type="software:ripper"&gt;
  &lt;general&gt;
    &lt;name&gt;LastSharp&lt;/name&gt;
  &lt;/general&gt;
  &lt;release&gt;
    &lt;date&gt;
      &lt;day&gt;20&lt;/day&gt;
      &lt;month&gt;4&lt;/month&gt;
      &lt;year&gt;2009&lt;/year&gt;
    &lt;/date&gt;
    &lt;version&gt;
      &lt;major&gt;0&lt;/major&gt;
      &lt;minor&gt;4&lt;/minor&gt;
      &lt;build&gt;1&lt;/build&gt;
    &lt;/version&gt;
  &lt;/release&gt;
&lt;/uvd&gt;</pre>
<p>Und folgende Datei könnte von einem Updater automatisch verarbeitet werden:</p>
<pre class="xml:collapse" name="code">&lt;uvd version="1.0.0" type="software:ripper"&gt;
  &lt;general&gt;
    &lt;name&gt;LastSharp&lt;/name&gt;
  &lt;/general&gt;
  &lt;release&gt;
    &lt;date&gt;
      &lt;day&gt;20&lt;/day&gt;
      &lt;month&gt;4&lt;/month&gt;
      &lt;year&gt;2009&lt;/year&gt;
    &lt;/date&gt;
    &lt;version&gt;
      &lt;major&gt;0&lt;/major&gt;
      &lt;minor&gt;4&lt;/minor&gt;
      &lt;build&gt;1&lt;/build&gt;
    &lt;/version&gt;
    &lt;files&gt;
      &lt;file name="LastUtility" os="any" type="lib" filename="LastUtility.dll"
            update-action="update" update-path=".inc" direct-download="no"&gt;
        &lt;urls&gt;
          &lt;url lang="all"&gt;http://download.server.tld/LastUtility.dll&lt;/url&gt;
        &lt;/urls&gt;
      &lt;/file&gt;
      &lt;file name="LastSharpExe" os="any" type="exe" filename="LastSharp.exe"
            update-action="update" direct-download="no"&gt;
        &lt;urls&gt;
          &lt;url lang="all"&gt;http://download.server.tld/LastSharp.exe&lt;/url&gt;
        &lt;/urls&gt;
      &lt;/file&gt;
      &lt;file name="SettingsFile" os="any" type="xml" filename="settings.xml"
            update-action="remove" /&gt;
      &lt;file name="LastSharpFull" os="any" type="package" filename="LastSharp041.zip"
            update-action="ignore"&gt;
        &lt;urls&gt;
          &lt;url lang="all"&gt;http://download.server.tld/LastSharp041.zip&lt;/url&gt;
        &lt;/urls&gt;
        &lt;descriptions&gt;
          &lt;description lang="de" maxlength="any"&gt;
            Das vollständige Paket mit allen Dateien von LastSharp 0.4.1.
          &lt;/description&gt;
        &lt;/descriptions&gt;
      &lt;/file&gt;
    &lt;/files&gt;
  &lt;/release&gt;
&lt;/uvd&gt;</pre>
<p>Wenn man genau hinsieht, erkennt man die Anweisungen an den Updater:</p>
<ol>
<li>Lade die Datei &#8220;LastUtility.dll&#8221; von der angegebenen URL herunter und überschreibe ihre Entsprechung im Unterverzeichnis &#8220;.inc&#8221;.</li>
<li>Tue dasselbe mit der Datei &#8220;LastSharp.exe&#8221;, allerdings diesmal im Hauptverzeichnis. (&#8220;update-path&#8221; fehlt)</li>
<li>Lösche die Datei &#8220;settings.xml&#8221; im Hauptverzeichnis.</li>
</ol>
<p>Der letzte &#8220;file&#8221;-Eintrag enthält das Gesamtpaket, das beim automatischen Update ignoriert wird. (&#8220;update-action=&#8217;ignore&#8217;&#8221;) Gleichzeitig wird es aber dem User im Gegensatz zu den Dateien zuvor direkt zugänglich gemacht. (&#8220;direct-download=&#8217;no&#8217;&#8221; soll verhindern, dass evtl. Clients die so markierten Links dem User zeigen)</p>
<p>Wenn man jetzt bedenkt, dass ein wichtiger Punkt von UVD die Verlinkung mit den früheren Versionen ist (Der &#8220;release&#8221;-Tag bietet das Attribut &#8220;previous&#8221;, das auf das entsprechende UVD-Dokument verlinkt!), sieht man schnell, dass man mit diesem Format <strong>jede beliebige</strong> Version aktualisieren kann, wenn man sich in der Versionsgeschichte &#8220;zurückhangelt&#8221;.</p>
<p>Ich hoffe, diese kleine Demonstration hat noch einmal verdeutlicht, worin ich u.a. den Nutzen des Formats sehe.</p>
]]></content:encoded>
			<wfw:commentRss>http://dev.xscheme.de/2009/05/universal-version-description-uvd/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
