<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de-x-formal">
	<id>https://glossar.hs-augsburg.de/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rayza</id>
	<title>GlossarWiki - Benutzerbeiträge [de-formal]</title>
	<link rel="self" type="application/atom+xml" href="https://glossar.hs-augsburg.de/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rayza"/>
	<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/Spezial:Beitr%C3%A4ge/Rayza"/>
	<updated>2026-07-17T04:33:21Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.3</generator>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=HTML5-Tutorium:_Canvas:_MiniPong_05&amp;diff=24729</id>
		<title>HTML5-Tutorium: Canvas: MiniPong 05</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=HTML5-Tutorium:_Canvas:_MiniPong_05&amp;diff=24729"/>
		<updated>2012-12-23T16:05:21Z</updated>

		<summary type="html">&lt;p&gt;Rayza: /* Methoden */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{HTML5-Tutorium:Canvas:MiniPong:Menü}}&lt;br /&gt;
&#039;&#039;&#039;Musterlösung&#039;&#039;&#039;: &amp;lt;code&amp;gt;[http://glossar.hs-augsburg.de/beispiel/tutorium/html5_canvas/minipong/html5_canvas_minipong_04/WebContent/index.html Minipong 4]&amp;lt;/code&amp;gt;&lt;br /&gt;
([http://glossar.hs-augsburg.de/beispiel/tutorium/html5_canvas/minipong/html5_canvas_minipong_04 SVN-Repository])&lt;br /&gt;
=Ziel: Simulation von Klassen in JavaScript=&lt;br /&gt;
Im vierten Teil des Tutoriums wird beschrieben, wie man [[Klasse]]n in JavaScript nachbilden kann.&lt;br /&gt;
&lt;br /&gt;
Vier Klassen werden implementiert: &amp;lt;code&amp;gt;Ball&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Paddle&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Collision&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;Main&amp;lt;/code&amp;gt;.&lt;br /&gt;
Es wird jeweils ein Objekt pro Klasse erstellt.&lt;br /&gt;
&lt;br /&gt;
[[Medium:MiniPong04Canvas.png|miniatur|ohne|709px|Das Datenmodell von MiniPong 04]]&lt;br /&gt;
&lt;br /&gt;
=Anwendung „&amp;lt;code&amp;gt;MiniPongCanvas04&amp;lt;/code&amp;gt;“=&lt;br /&gt;
&lt;br /&gt;
==Neues Projekt anlegen==&lt;br /&gt;
&lt;br /&gt;
Legen Sie ein neues „Statisches Web-Projekt“ mit dem Namen &amp;lt;code&amp;gt;MiniPongCanvas04&amp;lt;/code&amp;gt; an.&lt;br /&gt;
&lt;br /&gt;
Speichern Sie dieses Projekt wie üblich in Ihrem Repository.&lt;br /&gt;
&lt;br /&gt;
==Dateien erstellen==&lt;br /&gt;
Erstellen Sie zunächst die Datei &amp;lt;code&amp;gt;js/util.js&amp;lt;/code&amp;gt; und füegen Sie folgenden Code ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * @param {int} p_min&lt;br /&gt;
 * @param {int} p_max&lt;br /&gt;
 * @returns An integer number within the interval &lt;br /&gt;
 *          [&amp;lt;code&amp;gt;p_min&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;p_max&amp;lt;/code&amp;gt;].     &lt;br /&gt;
 */&lt;br /&gt;
Math.randomIntMinMax =&lt;br /&gt;
  function(p_min, p_max)&lt;br /&gt;
  { return (p_min == p_max)&lt;br /&gt;
           ? p_min&lt;br /&gt;
           : p_min+Math.floor(Math.random()*(p_max-p_min+1));    &lt;br /&gt;
  };&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit haben Sie die Klasse &amp;lt;code&amp;gt;Math&amp;lt;/code&amp;gt; um statische Funktion &amp;lt;code&amp;gt;randomIntMinMax&amp;lt;/code&amp;gt;&lt;br /&gt;
erweitert, die eine zufällige Integer-Zahl aus dem Intervall &amp;lt;code&amp;gt;[p_min, p_max]&amp;lt;/code&amp;gt;&lt;br /&gt;
berechnet.&lt;br /&gt;
&lt;br /&gt;
Kopieren Sie die Dateien &amp;lt;code&amp;gt;index.html&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;css/main.css&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;js/CONSTANT.js&amp;lt;/code&amp;gt; von [[HTML5-Tutorium: Canvas: MiniPong 03|Teil 3]] des Tutoriums,&lt;br /&gt;
passen Sie den Projekttitel in der Datei &amp;lt;code&amp;gt;index.html&amp;lt;/code&amp;gt; an.&lt;br /&gt;
&lt;br /&gt;
Jede Klasse soll in einer eigenen Datei definiert werden, wie dies auch bei anderen Programmiersprachen wie z.B. Java üblich ist.&lt;br /&gt;
Erstellen Sie zu diesem Zweck zunächst drei leere Dateien &amp;lt;code&amp;gt;js/ball.js&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;js/paddle.js&amp;lt;/code&amp;gt; sowie &amp;lt;code&amp;gt;js/collision.js&amp;lt;/code&amp;gt;.&lt;br /&gt;
Sorgen Sie anschließend dafür, dass alle JavaScript-Dateien von der Datei &amp;lt;code&amp;gt;index.html&amp;lt;/code&amp;gt; geladen werden,&lt;br /&gt;
indem Sie folgende Zeilen in den Header dieser Datei einfügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;js/util.js&amp;quot;     &amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;js/CONSTANT.js&amp;quot; &amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;js/ball.js&amp;quot;     &amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;js/paddle.js&amp;quot;   &amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;js/collision.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;js/main.js&amp;quot;     &amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anmerkung:&#039;&#039;&#039; Um den Kommunikations-Overhead zwischen Client (Browser) und Server möglichst gering zu halten, &lt;br /&gt;
sollte eine HTML-Seite möglichst wenige weitere Dokumente (Bilder, CSS-Dateien, JavaScript-Dateien etc.) nachladen.&lt;br /&gt;
Die Definition weiterer JavaSCript-Dateien stellt hier aber kein Problem dar, wenn – sobald die Anwendung fertiggestellt und ausgiebig getestet wurde –&lt;br /&gt;
alle JavaScript-Dateien komprimiert und in eine einzige Datei (&amp;lt;code&amp;gt;js/all.min.js&amp;lt;/code&amp;gt;) eingefügt werden. &lt;br /&gt;
Natürlich darf in der Datei &amp;lt;code&amp;gt;index.html&amp;lt;/code&amp;gt; anschließend auch nur noch diese eine JavaScript-Datei geladen werden.&lt;br /&gt;
&lt;br /&gt;
==Die Klasse &amp;lt;code&amp;gt;Ball&amp;lt;/code&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
Die Definition der Klasse &amp;lt;code&amp;gt;Ball&amp;lt;/code&amp;gt; wird in JavaScript durch zwei Objekte realisiert oder – besser gesagt – simuliert:&lt;br /&gt;
Eine Konstruktor-Funktion (genauer: ein Konstruktor-Funktion-Objekt) sowie das zugehörige &amp;lt;code&amp;gt;prototype&amp;lt;/code&amp;gt;-Objekt.&lt;br /&gt;
&lt;br /&gt;
Die Konstruktor-Funktion &amp;lt;code&amp;gt;Ball&amp;lt;/code&amp;gt; erstellt neue Ball-Objekte und initialisiert diese,&lt;br /&gt;
indem sie im jedem neu erstellten Objekt (&amp;lt;code&amp;gt;this&amp;lt;/code&amp;gt;) Attribute erzeugt und initialisiert.&lt;br /&gt;
(Ein Attribut wird automatisch erzeugt, sobald ihm ein Wert zugewiesen wird.)&lt;br /&gt;
&lt;br /&gt;
===Konstruktor===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
/** &lt;br /&gt;
 *  Creates an instance of &amp;lt;code&amp;gt;Ball&amp;lt;/code&amp;gt;.&lt;br /&gt;
 *&lt;br /&gt;
 *  @constructor&lt;br /&gt;
 *  @this {Ball} &lt;br /&gt;
 *  @param {CanvasRenderingContext2D} p_context &lt;br /&gt;
 *         The 2d context of the canvas upon which the ball is to be drawed.&lt;br /&gt;
 *  @param {Number} p_r&lt;br /&gt;
 *         The radius of the ball.&lt;br /&gt;
 *  @param {Number} [p_x_start = BALL_X_START]&lt;br /&gt;
 *         The starting position of the ball in x-direction.&lt;br /&gt;
 *  @param {Number} [p_y_start = BALL_Y_START]     &lt;br /&gt;
 *         The starting position of the ball in y-direction.&lt;br /&gt;
 *  @param {Array[2]} [p_vx_start = BALL_VX_START] &lt;br /&gt;
 *         The starting velocity of the ball in x-direction (min, max). &lt;br /&gt;
 *  @param {Array[2]} [p_vy_start = BALL_VY_START]&lt;br /&gt;
 *         The starting velocity of the ball in y-direction (min, max).&lt;br /&gt;
 */&lt;br /&gt;
function Ball(p_context, p_r, p_x_start, p_y_start, p_vx_start, p_vy_start)&lt;br /&gt;
{ this.r = p_r || BALL_RADIUS;&lt;br /&gt;
&lt;br /&gt;
  this.v_x_start  = p_x_start  || BALL_X_START;&lt;br /&gt;
  this.v_y_start  = p_y_start  || BALL_Y_START;&lt;br /&gt;
  this.v_vx_start = p_vx_start || BALL_VX_START; &lt;br /&gt;
  this.v_vy_start = p_vy_start || BALL_VY_START; &lt;br /&gt;
&lt;br /&gt;
  this.v_context  = p_context;&lt;br /&gt;
  &lt;br /&gt;
  this.reset();&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die &amp;lt;code&amp;gt;reset&amp;lt;/code&amp;gt;-Methode nimmt weitere Initialisierungen vor.&lt;br /&gt;
Da diese Initialisierungen bei jedem Spielstart erneut ausgeführt werden müssen,&lt;br /&gt;
wurden sie in eine Methode ausgelagert. &lt;br /&gt;
&lt;br /&gt;
Man beachte, dass der dem Konstruktor vorangestellte Kommentar [[JSDoc]]-konform ist.&lt;br /&gt;
Dies ermöglicht es, mit einem geeigneten JSDoc-Tool eine HTML-[[API]]-Dokumentation automatisch zu erstellen.&lt;br /&gt;
&lt;br /&gt;
===Methoden===&lt;br /&gt;
&lt;br /&gt;
Der Konstruktor weist jedem neu erstellten Objekt ein weiteres Attribut automatisch zu: &amp;lt;code&amp;gt;prototype&amp;lt;/code&amp;gt;.&lt;br /&gt;
Dieses Attribut enthält einen Verweis auf das &amp;lt;code&amp;gt;prototype&amp;lt;/code&amp;gt;-Objekt des zugehörigen Konstruktors.&lt;br /&gt;
JavaScript sucht bei einem Methodenaufruf &amp;lt;code&amp;gt;obj.m()&amp;lt;/code&amp;gt; die Definition der Methode &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;&lt;br /&gt;
zunächst im Objekt &amp;lt;code&amp;gt;obj&amp;lt;/code&amp;gt; selbst. Sollte dort keine Definition vorhanden sein, so&lt;br /&gt;
sucht JavaScript als nächstes in &amp;lt;code&amp;gt;obj.prototype&amp;lt;/code&amp;gt;, dann in&lt;br /&gt;
&amp;lt;code&amp;gt;obj.prototype.prototype&amp;lt;/code&amp;gt; usw. Die Suche endet sobald entweder eine Definition gefunden oder&lt;br /&gt;
kein weiteres &amp;lt;code&amp;gt;prototype&amp;lt;/code&amp;gt;-Objekt mehr existiert. Im letzteren Fall meldet JavaScript einen Fehler.&lt;br /&gt;
&lt;br /&gt;
Das heißt, in JavaScript werden Methoden üblicherweise im Prototyp-Objekt des Konstruktors definiert.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anmerkung:&#039;&#039;&#039; Im Folgenden werden wieder JSDoc-konforme Kommentare benutzt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
Ball.prototype =&lt;br /&gt;
{ //////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
  // data&lt;br /&gt;
  //////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
  &lt;br /&gt;
  /** The radius of the ball. */  &lt;br /&gt;
  get r()    { return this.v_r; },&lt;br /&gt;
  set r(p_r) { this.v_r = p_r;  },&lt;br /&gt;
&lt;br /&gt;
  /** The x-position of the ball. */&lt;br /&gt;
  get x()    { return this.v_x; },&lt;br /&gt;
  set x(p_x) { this.v_x = p_x;  },&lt;br /&gt;
&lt;br /&gt;
  /** The y-position of the ball. */&lt;br /&gt;
  get y()    { return this.v_y; },&lt;br /&gt;
  set y(p_y) { this.v_y = p_y;  },&lt;br /&gt;
&lt;br /&gt;
  /** The vx-velocity of the ball. */&lt;br /&gt;
  get vx()     { return this.v_vx; },&lt;br /&gt;
  set vx(p_vx) { this.v_vx = p_vx; },&lt;br /&gt;
&lt;br /&gt;
  /** The vy-velocity of the ball. */&lt;br /&gt;
  get vy()     { return this.v_vy; },&lt;br /&gt;
  set vy(p_vy) { this.v_vy = p_vy; },&lt;br /&gt;
&lt;br /&gt;
  //////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
  // logic&lt;br /&gt;
  //////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
  /** &lt;br /&gt;
   * Resets the ball: &lt;br /&gt;
   *   Moves the ball to its starting position &lt;br /&gt;
   *   and computes randomly a velocity vector.&lt;br /&gt;
   */&lt;br /&gt;
  reset:&lt;br /&gt;
    function()&lt;br /&gt;
    { this.x  = this.v_x_start;&lt;br /&gt;
      this.y  = this.v_y_start;&lt;br /&gt;
      this.vx = (Math.random()&amp;lt;0.5?1:-1)&lt;br /&gt;
               *Math.randomIntMinMax(this.v_vx_start[0], this.v_vx_start[1]);&lt;br /&gt;
      this.vy = Math.randomIntMinMax(this.v_vy_start[0], this.v_vy_start[1]);&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
  /** Moves the ball in direction (vx,vy); the step size depends on FPS. */&lt;br /&gt;
  move:&lt;br /&gt;
    function()&lt;br /&gt;
    { this.x += this.vx/FPS;&lt;br /&gt;
      this.y += this.vy/FPS;&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
  //////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
  // view&lt;br /&gt;
  //////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
  /** Draws the ball at its current position onto a 2d context. */&lt;br /&gt;
  draw:&lt;br /&gt;
    function()&lt;br /&gt;
    { this.v_context.beginPath();&lt;br /&gt;
      this.v_context.arc(this.x, this.y, this.r, 0, 2*Math.PI, true);&lt;br /&gt;
      this.v_context.lineWidth = BALL_BORDER_WIDTH;&lt;br /&gt;
      this.v_context.lineStyle = BALL_BORDER_COLOR;&lt;br /&gt;
      this.v_context.fillStyle = BALL_COLOR;&lt;br /&gt;
      this.v_context.stroke();&lt;br /&gt;
      this.v_context.fill();&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
  //////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
  // end of prototype&lt;br /&gt;
  //////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Man beachte, dass die [[Getter-Methode|Getter]]- und [[Setter-Methode]]n für die &lt;br /&gt;
Attribute &amp;lt;code&amp;gt;r&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vx&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;vy&amp;lt;/code&amp;gt; &lt;br /&gt;
EcmaScript-5-konform definiert wurden (EcmaScript 5 wird von HTML5-fähigen Brwosern unterstützt).&lt;br /&gt;
Dies hat den Vorteil, dass man auf diese Attribute nicht mit der Methoden-Aufruf-Syntax,&lt;br /&gt;
sondern mit der üblichen Attribut-Syntax zugreifen kann:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
var my_ball = new Ball();&lt;br /&gt;
&lt;br /&gt;
my_ball.r = 20;         // Aufruf der Setter-Methode&lt;br /&gt;
console.log(my_ball.r); // Aufruf der Getter-Methode&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In EcmaScript 3 (HTML 4 oder früher) &lt;br /&gt;
gibt es diese Art der Getter- und Setter-Methoden nicht. Hier muss man auf&lt;br /&gt;
den in Java üblichen Trick zurückgreifen und ersatzweise zwei Methoden definieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
/** The radius of the ball. */  &lt;br /&gt;
getR: function()    { return this.v_r; },&lt;br /&gt;
setR: function(p_r) { this.v_r = p_r;  },&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Fall erfolgen die Attribut-Zugriffe mittels Methodenaufrufen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;JavaScript&amp;quot;&amp;gt;&lt;br /&gt;
var my_ball = new Ball();&lt;br /&gt;
&lt;br /&gt;
my_ball.setR(20);            // Aufruf der Setter-Methode&lt;br /&gt;
console.log(my_ball.getR()); // Aufruf der Getter-Methode&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Verwendung von echten Getter- und Setter-Methoden erhöht die &lt;br /&gt;
[[Programmierprinzipien#Stetigkeit.2C_Continuity|Stetigkeit]] des Codes,&lt;br /&gt;
da sich der Zugriff auf öffentliche Zustandsvariablen syntaktisch nicht vom&lt;br /&gt;
Zugriff auf echte Getter- und Setter-Methoden unterscheidet. Das heißt,&lt;br /&gt;
die Implementierung der Klasse kann jederzeit die Art der Attribut-Definition ändern,&lt;br /&gt;
ohne dass das Auswirkungen auf die Zugriff-Syntax von zugehörigen Objekten hätte.&amp;lt;ref&amp;gt;vgl. {{Quelle|Meyer (1997)}}&amp;lt;/ref&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
Beispielsweise könnten in der obigen Definition der Klasse &amp;lt;code&amp;gt;Ball&amp;lt;/code&amp;gt;&lt;br /&gt;
die Getter- und Setter-Methoden der Attribute &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt;&lt;br /&gt;
(ebenso wie alle anderen Getter- und Setter-Methoden) einfach aus dem Prototype-Objekt gelöscht werden.&lt;br /&gt;
Am Verhalten der Klasse &amp;lt;code&amp;gt;Ball&amp;lt;/code&amp;gt; würde das nichts ändern, da die Methoden &lt;br /&gt;
&amp;lt;code&amp;gt;reset&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;move&amp;lt;/code&amp;gt; nun direkt auf die Zustandsvariablen&lt;br /&gt;
&amp;lt;code&amp;gt;this.x&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;this.y&amp;lt;/code&amp;gt; zugreifen würden. Der zugehörige&lt;br /&gt;
Code wäre sogar etwas effizienter. &lt;br /&gt;
&lt;br /&gt;
Kommentieren Sie in der Musterlösung oder in Ihrer finalen Lösung&lt;br /&gt;
doch einfach mal ein paar Getter- und Setter-Methoden aus und starten Sie die Anwendung erneut.&lt;br /&gt;
Die Anwendung sollte immer noch fehlerfrei funktioneiren.&lt;br /&gt;
 &lt;br /&gt;
Anschließend sollten Sie die Methoden wieder aktivieren und testweise einmal einen Logging-Befehl einfügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
set x(p_x) { this.v_x = p_x; console.log(&amp;quot;Setter &#039;x&#039;, param: &amp;quot; + p_x); },&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn Sie jetzt das die Anwendung ausführen, wird jede Änderung der x-Position des Balls&lt;br /&gt;
im Konsolfenster ausgegeben. Ohne echte Setter-Methode hätten Sie diesen Logging-Befehl&lt;br /&gt;
an jede Stelle, an der die Ballposition geändert wird, einfügen müssen. Oder Sie hätten&lt;br /&gt;
an jeder dieser Stellen &amp;lt;code&amp;gt;...ball.x = ...&amp;lt;/code&amp;gt; durch &amp;lt;code&amp;gt;...ball.setX(...)&amp;lt;/code&amp;gt;&lt;br /&gt;
ersetzen müssen.&lt;br /&gt;
&lt;br /&gt;
==Die Klasse &amp;lt;code&amp;gt;Paddle&amp;lt;/code&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
Die Klasse &amp;lt;code&amp;gt;Paddle&amp;lt;/code&amp;gt; wird analog zur Klasse &amp;lt;code&amp;gt;Ball&amp;lt;/code&amp;gt; definiert.&lt;br /&gt;
Die benötigten Attribute und Methoden findet man im obigen Klassendiagramm.&lt;br /&gt;
&lt;br /&gt;
Die Methoden-Definitionen von &amp;lt;code&amp;gt;reset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;move&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;draw&amp;lt;/code&amp;gt; werden &lt;br /&gt;
(wie bei der Klasse &amp;lt;code&amp;gt;Ball&amp;lt;/code&amp;gt; aus) der Lösung des [[HTML5-Tutorium: Canvas: MiniPong 03|dritten Teils des Tutoriums]] übernommen.&lt;br /&gt;
Bei der Definition der Methode &amp;lt;code&amp;gt;reset&amp;lt;/code&amp;gt; sollte analog zur Klasse &amp;lt;code&amp;gt;Ball&amp;lt;/code&amp;gt;&lt;br /&gt;
der Zugriff auf globale Konstanten (&amp;lt;code&amp;gt;PADDLE_X&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;PADDLE_Y&amp;lt;/code&amp;gt;)&lt;br /&gt;
durch den Zugriff auf lokale Zustandsvariablen (&amp;lt;code&amp;gt;this.v_x_start&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;this.v_y_start&amp;lt;/code&amp;gt;)&lt;br /&gt;
ersetzt werden. Diese beiden Variablen sollten (wie in der Klasse &amp;lt;code&amp;gt;Ball&amp;lt;/code&amp;gt;) von Konstruktor initialisiert werden.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich werden drei weitere Methoden benötigt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
/** Makes the paddle move left (if it is currently not moving). */  &lt;br /&gt;
startLeft:  function(){ if (this.vx == 0) this.vx = -this.v_vx_start; },&lt;br /&gt;
&lt;br /&gt;
/** Makes the paddle move right (if it is currently not moving). */  &lt;br /&gt;
startRight: function(){ if (this.vx == 0) this.vx = +this.v_vx_start; },&lt;br /&gt;
&lt;br /&gt;
/** Makes the paddle stop moving. */  &lt;br /&gt;
stop:       function(){ this.vx = 0; },&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Attribute werden – bis auf vier Ausnahmen – genauso definiert wie in der Klasse &amp;lt;code&amp;gt;Ball&amp;lt;/code&amp;gt;:&lt;br /&gt;
Entweder gar nicht oder mittels echter Setter- und Getter-Methoden.&lt;br /&gt;
&lt;br /&gt;
Vier Atribute wurden allerdings im Diagramm als nur lesbar (read only, &amp;lt;code&amp;gt;frozen&amp;lt;/code&amp;gt;)&lt;br /&gt;
deklariert: &amp;lt;code&amp;gt;left&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;right&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;top&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;bottom&amp;lt;/code&amp;gt;. &lt;br /&gt;
Diese Attribute dürfen also nicht geändert, sondern nur gelesen werden,&lt;br /&gt;
da die Werte aus anderen Attributen berechnet werden. Daher können die Werte auch nicht&lt;br /&gt;
in Zustandsvariablen gespeichert werden. Allerdings kann man Read-only-Attribute &lt;br /&gt;
mit Hilfe echter Getter-Methoden recht elegant realisieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
/** The left side of the paddle (read only). */&lt;br /&gt;
get left() { return this.x; },&lt;br /&gt;
&lt;br /&gt;
/** The right side of the paddle (read only). */&lt;br /&gt;
get right() { return this.x + this.width; },&lt;br /&gt;
&lt;br /&gt;
/** The top side of the paddle (read only). */&lt;br /&gt;
get top() { return this.y;  },&lt;br /&gt;
&lt;br /&gt;
/** The bottom side of the paddle (read only). */&lt;br /&gt;
get bottom() { return this.y + this.height; },&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auf diese Attribute kann ebenfalls mit der üblichen Attribut-Syntax zugegriffen werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var my_paddle = new Paddle();&lt;br /&gt;
&lt;br /&gt;
console.log(my_paddle.left); // Aufruf der Getter-Methode&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da keine Setter-Methoden existieren, können diese Attribute nicht geändert werden.&lt;br /&gt;
Falls man seinen JavaScript-Code mittels &amp;lt;code&amp;gt;&amp;quot;use strict&amp;quot;;&amp;lt;/code&amp;gt;  als „strikt“ dekalriert hat,&lt;br /&gt;
resultiert folgende Anweisung in einer Fehlermeldung:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
my_paddle.left = 30; // Aufruf der nicht vorhandenen Setter-Methode&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Die Klasse &amp;lt;code&amp;gt;Collision&amp;lt;/code&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
Ein Objekt der Klass &amp;lt;code&amp;gt;Collision&amp;lt;/code&amp;gt; ist für das Erkennen und Behandlen von Kollisionen zuständig.&lt;br /&gt;
&lt;br /&gt;
Dem Konstruktor müssen alle möglich Kollisionspartner übergeben werden: Wände, Ball und Schläger.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
/** &lt;br /&gt;
 *  Creates an instance of &amp;lt;code&amp;gt;Collision&amp;lt;/code&amp;gt;.&lt;br /&gt;
 *  &lt;br /&gt;
 *  The main method &amp;lt;code&amp;gt;handleCollision&amp;lt;/code&amp;gt; detects collisions&lt;br /&gt;
 *  between the ball and a wall, between the paddle and a wall, and&lt;br /&gt;
 *  between the ball and the paddle.&lt;br /&gt;
 *&lt;br /&gt;
 *  @constructor&lt;br /&gt;
 *  @this {Collision} &lt;br /&gt;
 *  @param {Object} p_walls  The walls of the game: An object with &lt;br /&gt;
 *                           four integer attributes: &amp;lt;code&amp;gt;left&amp;lt;/code&amp;gt;,&lt;br /&gt;
 *                           &amp;lt;code&amp;gt;right&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;top&amp;lt;/code&amp;gt;, and&lt;br /&gt;
 *                           &amp;lt;code&amp;gt;bottom&amp;lt;/code&amp;gt;.&lt;br /&gt;
 *  @param {Ball}   p_ball   The ball of the game. &lt;br /&gt;
 *  @param {Paddle} p_paddle The paddle of the game.&lt;br /&gt;
 */&lt;br /&gt;
function Collision(p_walls, p_ball, p_paddle)&lt;br /&gt;
{ this.v_walls  = p_walls;&lt;br /&gt;
  this.v_ball   = p_ball;&lt;br /&gt;
  this.v_paddle = p_paddle;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der Kollisionsklasse wird nur eine öffentliche Methode definiert: &amp;lt;code&amp;gt;handleCollision&amp;lt;/code&amp;gt;.&lt;br /&gt;
Diese Methode hat zwei Aufgabe: Kollisionen erkennen und erkannte Kollisionen zu behandeln.&lt;br /&gt;
Dabei sind zwei Arten von Behandlung möglich:&lt;br /&gt;
# Die Kollisionspartner ändern ihr Verhalten (Richtungswechsel des Balls, Stopp des Schläger).&lt;br /&gt;
# Das Spiel reagiert auf die Kollisionen (Erhöhung der Punktezahl, Spielende)&lt;br /&gt;
&lt;br /&gt;
Die erste Art der Behandlung nimmt &amp;lt;code&amp;gt;handleCollision&amp;lt;/code&amp;gt; selbst vor,&lt;br /&gt;
da ihr die Kollisionspartner bekannt sind. Die zweite Art der Kollisionsbehandlung&lt;br /&gt;
kann diese Methode dagegen nicht vornehmen. Daher informiert sie den Aufrufer&lt;br /&gt;
mittels eines Rückgabewerts (&amp;lt;code&amp;gt;EVENT_SCORE&amp;lt;/code&amp;gt;: Erhöhung des Punktekontots, &amp;lt;code&amp;gt;EVENT_EXIT&amp;lt;/code&amp;gt;: Spielende)&lt;br /&gt;
über das eingetretene Ereignis. Es ist dann die Aufgabe des Aufrufers, entsprechende Maßnahmen&lt;br /&gt;
vorzunehmen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
Collision.prototype =&lt;br /&gt;
{ //////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
  // Methods (Logic)&lt;br /&gt;
  //////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
  /**&lt;br /&gt;
   *  Detects collisions between the ball and a wall,&lt;br /&gt;
   *  between the paddle and the wall, and between the ball and the paddle.&lt;br /&gt;
   *  If a collision is detected, the collision is handled. &lt;br /&gt;
   *  &amp;lt;p&amp;gt;&lt;br /&gt;
   *    This method is an update method returning an event&lt;br /&gt;
   *    name in som cases. Better event handling should be&lt;br /&gt;
   *    implemented.&lt;br /&gt;
   *  &amp;lt;/p&amp;gt;&lt;br /&gt;
   *  @return {String} &amp;lt;code&amp;gt;EVENT_EXIT&amp;lt;/code&amp;gt; if the ball hits the bottom wall,&lt;br /&gt;
   *                   &amp;lt;code&amp;gt;EVENT_SCORE&amp;lt;/code&amp;gt; if the ball hits the paddle.&lt;br /&gt;
   *                   &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt; otherwise&lt;br /&gt;
   */  &lt;br /&gt;
  handleCollision:&lt;br /&gt;
    function()&lt;br /&gt;
    { this.m_collision_ball_wall();&lt;br /&gt;
      this.m_collision_paddle_wall();&lt;br /&gt;
&lt;br /&gt;
      if (this.m_ball_exit())&lt;br /&gt;
        return EVENT_EXIT;&lt;br /&gt;
&lt;br /&gt;
      if (this.m_collision_ball_paddle())&lt;br /&gt;
        return EVENT_SCORE;&lt;br /&gt;
&lt;br /&gt;
      return null;&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
  //////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
  // Private Methods (Logic)&lt;br /&gt;
  //////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
  // Tests whether the ball hits the bottom wall.  &lt;br /&gt;
  m_ball_exit:&lt;br /&gt;
    function()&lt;br /&gt;
    { return (this.v_ball.y &amp;gt;= this.v_walls.bottom + this.v_ball.r);&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
  // Tests whether the ball hits another wall.  &lt;br /&gt;
  m_collision_ball_wall:&lt;br /&gt;
    function()&lt;br /&gt;
    { if (   (this.v_ball.x &amp;lt;= this.v_walls.left  + this.v_ball.r)&lt;br /&gt;
          || (this.v_ball.x &amp;gt;= this.v_walls.right - this.v_ball.r)&lt;br /&gt;
         )&lt;br /&gt;
        this.v_ball.vx = -this.v_ball.vx;&lt;br /&gt;
&lt;br /&gt;
      if (this.v_ball.y &amp;lt;= this.v_walls.top + this.v_ball.r)&lt;br /&gt;
        this.v_ball.vy = -this.v_ball.vy;&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
  // Tests whether the paddle hits the bottom wall and, if so, stops it.&lt;br /&gt;
  m_collision_paddle_wall:&lt;br /&gt;
    function()&lt;br /&gt;
    { if (   (this.v_paddle.left  &amp;lt;= this.v_walls.left  &amp;amp;&amp;amp; this.v_paddle.vx &amp;lt; 0)&lt;br /&gt;
          || (this.v_paddle.right &amp;gt;= this.v_walls.right &amp;amp;&amp;amp; this.v_paddle.vx &amp;gt; 0)&lt;br /&gt;
         )&lt;br /&gt;
        this.v_paddle.stop();&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
  // Tests whether the paddle hits the paddle.&lt;br /&gt;
  m_collision_ball_paddle:&lt;br /&gt;
    function()&lt;br /&gt;
    { if (   this.v_ball.y + this.v_ball.r     &amp;gt;= this.v_paddle.top &lt;br /&gt;
          &amp;amp;&amp;amp; this.v_ball.y + this.v_ball.r     &amp;lt;= this.v_paddle.bottom&lt;br /&gt;
          &amp;amp;&amp;amp; this.v_ball.x + 0.5*this.v_ball.r &amp;gt;= this.v_paddle.left&lt;br /&gt;
          &amp;amp;&amp;amp; this.v_ball.x - 0.5*this.v_ball.r &amp;lt;= this.v_paddle.right&lt;br /&gt;
         )&lt;br /&gt;
      { // Resolve penetration.&lt;br /&gt;
        if (this.v_ball.vy &amp;gt; 0)        // The ball is moving from top to bottom.&lt;br /&gt;
          this.v_ball.y = this.v_paddle.y - this.v_ball.r;&lt;br /&gt;
        else                           // The ball is moving from bottom to top.&lt;br /&gt;
          this.v_ball.y = this.v_paddle.y + this.v_paddle.height + this.v_ball.r;    &lt;br /&gt;
&lt;br /&gt;
        this.v_ball.vy = -this.v_ball.vy;&lt;br /&gt;
        this.v_ball.vx += this.v_paddle.friction*this.v_paddle.vx;&lt;br /&gt;
        return true;&lt;br /&gt;
      };&lt;br /&gt;
      return false;&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Man beachten, dass in der obigen Definition vier private Methoden definiert wurden,&lt;br /&gt;
die für die jeweils unterschiedlichen Kollisionsszenarien zuständig sind:&lt;br /&gt;
* Ball kollidiert mit unterer Wand (⇒ Spielende)&lt;br /&gt;
* Ball kollidiert mit einer anderen Wand (⇒ Richtungsänderung)&lt;br /&gt;
* Schläger kollidiert mit einer Wand (⇒ Stopp der Schlägerbewegung)&lt;br /&gt;
* Ball kollidiert mit Schläger (⇒ Richtungsänderung und Punktgewinn)&lt;br /&gt;
&lt;br /&gt;
Diese Aufteilung wäre hier nicht notwendig gewesen, führt aber zu verständlicherem Code&lt;br /&gt;
und legt den Grundstein für eine weitergehende Modularisierung der Kollisionsklasse.&lt;br /&gt;
&lt;br /&gt;
==Die Datei &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
Hier könnte zunächst die Datei &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt; von [[HTML5-Tutorium: Canvas: MiniPong 03|Teil 3 des Tutoriums]] übernommen und leicht angepasst werden:&lt;br /&gt;
&lt;br /&gt;
Die Variablen[[Definition vs. Deklaration|definition]] von &amp;lt;code&amp;gt;g_ball&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;g_paddle&amp;lt;/code&amp;gt; werden durch Variablen[[Definition vs. Deklaration|deklarationen]]&lt;br /&gt;
ersetzt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// ball, paddle, collision&lt;br /&gt;
var g_ball;&lt;br /&gt;
var g_paddle;&lt;br /&gt;
var g_collision;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die eigentlich Definition der drei Objekte erfolgt nun in der Funktion &amp;lt;code&amp;gt;f_init&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;nachdem&#039;&#039;&#039; das Objekt &amp;lt;code&amp;gt;g_context&amp;lt;/code&amp;gt; ermittelt wurde:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// Initialize all game objects.&lt;br /&gt;
g_ball      = new Ball(g_context);&lt;br /&gt;
g_paddle    = new Paddle(g_context);&lt;br /&gt;
g_collision = new Collision&lt;br /&gt;
                  ({left:   0, &lt;br /&gt;
                    right:  CANVAS_WIDTH, &lt;br /&gt;
                    top:    0,&lt;br /&gt;
                    bottom: CANVAS_HEIGHT&lt;br /&gt;
                   }, &lt;br /&gt;
                   g_ball, &lt;br /&gt;
                   g_paddle&lt;br /&gt;
                  );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anmerkung:&#039;&#039;&#039; Die untere Wand wurde außerhalb des Spielfeldrandes gelegt,&lt;br /&gt;
damit der Ball ganz von der Bühne verschwunden ist, bevor das Spielende angezeigt wird.&lt;br /&gt;
&lt;br /&gt;
Die einzigen weiteren notwendigen Änderungen sind:&lt;br /&gt;
&lt;br /&gt;
Die Aufrufe&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
g_ball.draw(g_context);&lt;br /&gt;
g_paddle.draw(g_context);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
werden durch&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
g_ball.draw();&lt;br /&gt;
g_paddle.draw();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
ersetzt, da jedes grafische Objekt den 2D-Kontext, auf den es gezeichnet werden soll, kennt (er wurde dem jeweiligen Objekt bei der Konstruktion übergeben).&lt;br /&gt;
&lt;br /&gt;
Die Redraw-Methode wird deutlich einfacher, da deren Aufgabe im Wesentlichen vom Kollisionsobjekt übernommen wurden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function o_redraw() &lt;br /&gt;
{ // collision detection&lt;br /&gt;
  var l_exit = g_collision.handleCollision();&lt;br /&gt;
&lt;br /&gt;
  if (l_exit == EVENT_EXIT)&lt;br /&gt;
  { o_stop_game();&lt;br /&gt;
    return;&lt;br /&gt;
  };&lt;br /&gt;
  &lt;br /&gt;
  if (l_exit == EVENT_SCORE)&lt;br /&gt;
  { // Raise the score and display it.&lt;br /&gt;
    g_score++;&lt;br /&gt;
    f_info(&amp;quot;Punkte: &amp;quot; + g_score);&lt;br /&gt;
  };&lt;br /&gt;
 &lt;br /&gt;
  // Move the ball and paddle.&lt;br /&gt;
  g_ball.move();&lt;br /&gt;
  g_paddle.move();&lt;br /&gt;
&lt;br /&gt;
  // Redraw the canvas.&lt;br /&gt;
  f_draw();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Implementierungen der Start- und Stopp-Methoden des Paddles können ebenfalls vereinfacht werden,&lt;br /&gt;
da dafür im Paddle-Objekt spezielle Methoden zur Verfügung stehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// An event observer: &lt;br /&gt;
// It is called whenever a &amp;quot;start paddle moving event&amp;quot; is signalled.&lt;br /&gt;
function o_start_paddle_moving(p_event)&lt;br /&gt;
{ if (p_event.keyCode == KEY_LEFT)&lt;br /&gt;
    g_paddle.startLeft();&lt;br /&gt;
  else if (p_event.keyCode == KEY_RIGHT)&lt;br /&gt;
    g_paddle.startRight();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// An event observer: &lt;br /&gt;
// It is called whenever a &amp;quot;stop paddle moving event&amp;quot; is signalled.&lt;br /&gt;
function o_stop_paddle_moving(p_event)&lt;br /&gt;
{ g_paddle.stop(); }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Eine echte &amp;lt;code&amp;gt;Main&amp;lt;/code&amp;gt;-Klasse (&amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt; reloaded)==&lt;br /&gt;
&lt;br /&gt;
Die JavaScript-Datei &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt; enthält noch viele globale Werte: globale Variablen (&amp;lt;code&amp;gt;g_...&amp;lt;/code&amp;gt;),&lt;br /&gt;
globale Funktionen (&amp;lt;code&amp;gt;f_...&amp;lt;/code&amp;gt;) und globale Observer-Methoden (&amp;lt;code&amp;gt;o_...&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Aus Sicht des „[[Programmierprinzipien#Modularit.C3.A4t.2C_Modularity.2C_Teile_und_herrsche.2C_Divide_et_impera|Prinzips der Modularität]]“&lt;br /&gt;
ist die Verwendung von globalen Größen extrem schlecht. Auf globale Größen kann jedes Modul ungehindert zugreifen. Daher&lt;br /&gt;
kann eine globale Größe nie geändert werden, ohne vorher sämliche Module zu überprüfen, ob und in welcher Weise sie&lt;br /&gt;
auf diese Größe zugreifen. Dies ist eine der Lehren, die zahlreiche [[Fortran]]-Programmierer aus der früher üblichen Programmierpraxis,&lt;br /&gt;
sehr viele Daten in einem globalen Datenbereich abzulegen, schmerzhaft ziehen mussten. &lt;br /&gt;
&lt;br /&gt;
Das heißt, alle globalen Größen der Datei &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt; sollten in einem &amp;lt;code&amp;gt;Main&amp;lt;/code&amp;gt;-Objekt gekapselt werden.&lt;br /&gt;
&lt;br /&gt;
===Konstruktor===&lt;br /&gt;
&lt;br /&gt;
Der Konstruktor übernimmt im Wesentlichen die Aufgaben der ehemaligen Init-Funktion &amp;lt;code&amp;gt;f_init&amp;lt;/code&amp;gt;.&lt;br /&gt;
Anmerkung: Hier wurde bewusst auf [[JSDoc]]-Kommentare verzichtet, das &amp;lt;code&amp;gt;Main&amp;lt;/code&amp;gt; eine &lt;br /&gt;
„private“ Klasse ist, die nicht in anderen Projekten wiederverwendet wird. Daher ist es nicht sonderlich sinnvoll,&lt;br /&gt;
die API dieser Klasse automatisch zu generieren.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// Create the main object, after the HTML page has been loaded.&lt;br /&gt;
window.onload = function(){ new Main(); };&lt;br /&gt;
&lt;br /&gt;
// The singleton class Main. &lt;br /&gt;
function Main()&lt;br /&gt;
{ // Ensure that Main is a singleton class.&lt;br /&gt;
  if (Main.c_element != null)&lt;br /&gt;
    return Main.c_element;&lt;br /&gt;
  Main.c_element = this;&lt;br /&gt;
&lt;br /&gt;
  var l_canvas = document.getElementById(&amp;quot;d_canvas&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  // Initialize the canvas.&lt;br /&gt;
  l_canvas.width  = CANVAS_WIDTH;&lt;br /&gt;
  l_canvas.height = CANVAS_HEIGHT;&lt;br /&gt;
  this.v_context  = l_canvas.getContext(&amp;quot;2d&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  // Initialize all game objects.&lt;br /&gt;
  this.v_ball      = new Ball(this.v_context);&lt;br /&gt;
  this.v_paddle    = new Paddle(this.v_context);&lt;br /&gt;
  this.v_collision = new Collision&lt;br /&gt;
                         ({left:   0, &lt;br /&gt;
                           right:  CANVAS_WIDTH, &lt;br /&gt;
                           top:    0,&lt;br /&gt;
                           bottom: CANVAS_HEIGHT&lt;br /&gt;
                          }, &lt;br /&gt;
                          this.v_ball, &lt;br /&gt;
                          this.v_paddle&lt;br /&gt;
                         );&lt;br /&gt;
  &lt;br /&gt;
  var self = this; // Needed to overcome dynamic binding problems.&lt;br /&gt;
  document.getElementById(&amp;quot;d_start_stop&amp;quot;).onmousedown =&lt;br /&gt;
    function() { self.o_start_stop_game(); };&lt;br /&gt;
  &lt;br /&gt;
  // Reset the game (i.e. change its state to &amp;quot;waiting for game to be started&amp;quot;).&lt;br /&gt;
  this.v_state = STATE_STOPPED;&lt;br /&gt;
  this.m_init_stopped(); &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im obigen Datenmodell wurde die Klasse &amp;lt;code&amp;gt;Main&amp;lt;/code&amp;gt; als &amp;lt;code&amp;gt;Singleton&amp;lt;/code&amp;gt; deklariert. Das heißt, von dieser&lt;br /&gt;
Klasse darf es zu jedem Zeitpunkt maximal ein Objekt geben. Die erste &amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt;-Anweisung im Konstruktor &lt;br /&gt;
sorgt dafür, dass damit tatsächlich nur ein &amp;lt;code&amp;gt;Main&amp;lt;/code&amp;gt;-Objekt erzeugt werden kann. Das erste&lt;br /&gt;
&amp;lt;code&amp;gt;Main&amp;lt;/code&amp;gt;-Objekt wird im Konstruktor-Objekt gespeichert. Sofern tatsächlich versucht werden&lt;br /&gt;
würde, ein zweites &amp;lt;code&amp;gt;Main&amp;lt;/code&amp;gt;-Objekt mit diesem Konstruktor zu erzeugen, wird einfach&lt;br /&gt;
das schon existente &amp;lt;code&amp;gt;Main&amp;lt;/code&amp;gt;-Objekt als Ergebnis zurückgegeben.&lt;br /&gt;
&lt;br /&gt;
Eine sehr subtile Änderung ist allerdings hinsichtlich des Start/Stop-Buttons notwendig.&lt;br /&gt;
In JavaScript hängt der Wert der Variablen &amp;lt;code&amp;gt;this&amp;lt;/code&amp;gt; nicht vom Definitionsort ab, sondern vom Aufrufer der Methode.&lt;br /&gt;
Die Variable &amp;lt;code&amp;gt;this&amp;lt;/code&amp;gt; ist also – im Gegensatz zu allen anderne JavaScript-Variablen –&lt;br /&gt;
nicht [[Bindung|lexikalisch]] sondern [[Bindung|dynamisch]] gebunden.&lt;br /&gt;
&lt;br /&gt;
Das Problem ist nun, dass die Methode &amp;lt;code&amp;gt;o_start_stop_game&amp;lt;/code&amp;gt; nicht jetzt, sondern erst später aufgerufen wird und zwar &lt;br /&gt;
vom im HTML-Dokument enthaltenen Button-Objekt (&amp;lt;code&amp;gt;document.getElementById(&amp;quot;d_start_stop&amp;quot;)&amp;lt;/code&amp;gt;)&lt;br /&gt;
sobald der Benutzer auf diesen Button klickt. Damit zeigt die Variable &amp;lt;code&amp;gt;this&amp;lt;/code&amp;gt; auf dieses Button-Objekt und nicht&lt;br /&gt;
auf das &amp;lt;code&amp;gt;Main&amp;lt;/code&amp;gt;-Objekt. Da aber die Methode &amp;lt;code&amp;gt;o_start_stop_game&amp;lt;/code&amp;gt; mittels &amp;lt;code&amp;gt;this&amp;lt;/code&amp;gt; auf&lt;br /&gt;
Attribute des &amp;lt;code&amp;gt;Main&amp;lt;/code&amp;gt;-Objekts zugreifen will, muss man einen schmutzigen, aber in JavaScript-Code&lt;br /&gt;
häufig anzutreffenden Trick anwenden. Man muss &amp;lt;code&amp;gt;this&amp;lt;/code&amp;gt; &#039;&#039;&#039;außerhalb&#039;&#039;&#039; der Funktion, die das Button-Objekt&lt;br /&gt;
später aufruft, in einer lexikalisch gebundenen Variablen, d.h. in irgendeiner anderen Variablen, ablegen.&lt;br /&gt;
Überlicherweise heißt diese Variable &amp;lt;code&amp;gt;self&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var self = this; // Needed to overcome dynamic binding problems.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Innerhalb der Funktion, die das Button-Objekt später aufruft, wird nun &amp;lt;code&amp;gt;self&amp;lt;/code&amp;gt; anstelle von &amp;lt;code&amp;gt;this&amp;lt;/code&amp;gt;&lt;br /&gt;
verwendet. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
document.getElementById(&amp;quot;d_start_stop&amp;quot;).onmousedown =&lt;br /&gt;
  function() { self.o_start_stop_game(); };&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da &amp;lt;code&amp;gt;self&amp;lt;/code&amp;gt; lexkalisch gebunden ist, tritt das zuvor beschriebene Problem nicht mehr auf.  &lt;br /&gt;
Wenn nun innerhalb der Methode &amp;lt;code&amp;gt;o_start_stop_game&amp;lt;/code&amp;gt; auf die Variable &amp;lt;code&amp;gt;this&amp;lt;/code&amp;gt;&lt;br /&gt;
zugegrifen wird, so ist darin wie gewünscht das &amp;lt;code&amp;gt;Main&amp;lt;/code&amp;gt;-Objekt enthalten.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Warnung:&#039;&#039;&#039; Dieses JavaScript-Verhalten kann gerade einem Programmieranfäger stundenlange Fehlersuche bescheren.&lt;br /&gt;
&lt;br /&gt;
===Methoden===&lt;br /&gt;
  &lt;br /&gt;
Die ehemals öffentlichen Funktionen der JavaScript-Datei &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt;&lt;br /&gt;
werden als Methoden des &amp;lt;code&amp;gt;Main&amp;lt;/code&amp;gt;-Objekts realisiert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
Main.prototype =&lt;br /&gt;
{ //////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
  // logic&lt;br /&gt;
  //////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
  // Has to be called when the game is to be started.&lt;br /&gt;
  m_init_started:&lt;br /&gt;
    function () &lt;br /&gt;
    { // Reset the score.&lt;br /&gt;
      this.v_score = 0;&lt;br /&gt;
&lt;br /&gt;
      // Set the button &amp;quot;d_start_stop&amp;quot; to be a stop button (view).&lt;br /&gt;
      document.getElementById(&amp;quot;d_start_stop&amp;quot;).value = &amp;quot;Stopp&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
      var self = this; // Needed to overcome dynamic binding problems.&lt;br /&gt;
&lt;br /&gt;
      // React to key down and key up events.&lt;br /&gt;
// The following code does not work due to dynamic binding of &amp;quot;this&amp;quot; :-(((&lt;br /&gt;
//    document.onkeydown = this.o_start_paddle_moving;&lt;br /&gt;
//    document.onkeyup   = this.o_stop_paddle_moving;&lt;br /&gt;
      document.onkeydown =&lt;br /&gt;
        function(p_event){ self.o_start_paddle_moving(p_event); };&lt;br /&gt;
      document.onkeyup =&lt;br /&gt;
        function(p_event){ self.o_stop_paddle_moving(p_event); };&lt;br /&gt;
&lt;br /&gt;
      // Start the timer for redrawing the canvas every 1000/FPS seconds.&lt;br /&gt;
      this.v_timer = &lt;br /&gt;
         window.setInterval(function(){ self.o_redraw(); }, 1000/FPS);&lt;br /&gt;
&lt;br /&gt;
      // Show the current score (zero points)&lt;br /&gt;
      this.m_info(&amp;quot;Punkte: &amp;quot; + this.v_score);&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
  // Has to be called when the game is to be stopped.&lt;br /&gt;
  m_init_stopped:&lt;br /&gt;
    function ()&lt;br /&gt;
    { // Stop the canvas redrawing timer.&lt;br /&gt;
      window.clearInterval(this.v_timer);&lt;br /&gt;
&lt;br /&gt;
      // Stop reacting to key down and key up events.&lt;br /&gt;
      document.onkeydown = null;&lt;br /&gt;
      document.onkeyup   = null;&lt;br /&gt;
&lt;br /&gt;
      // Set the button &amp;quot;d_start_stop&amp;quot; to be a start button (view).&lt;br /&gt;
      document.getElementById(&amp;quot;d_start_stop&amp;quot;).value = &amp;quot;Start&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
      // Put the ball and the paddle on their starting positions&lt;br /&gt;
      // and then redraw the canvas.&lt;br /&gt;
      this.v_ball.reset();&lt;br /&gt;
      this.v_paddle.reset();&lt;br /&gt;
      this.m_draw();&lt;br /&gt;
    },&lt;br /&gt;
    &lt;br /&gt;
  // An event observer: &lt;br /&gt;
  // It is called presses the start/stop button.&lt;br /&gt;
  o_start_stop_game:&lt;br /&gt;
    function() &lt;br /&gt;
    { // Change the current state (this is a little automaton!).&lt;br /&gt;
      this.v_state = NEXT_STATE[this.v_state];&lt;br /&gt;
&lt;br /&gt;
      // Initialize the new state.&lt;br /&gt;
      this[&amp;quot;m_init_&amp;quot; + this.v_state]();&lt;br /&gt;
/*    // Alternatively:&lt;br /&gt;
 *    if (this.v_state == STATE_STARTED)&lt;br /&gt;
 *      this.m_init_started();&lt;br /&gt;
 *    else if (this.v_state == STATE_STOPPED)&lt;br /&gt;
 *      this.m_init_stopped();&lt;br /&gt;
 */  &lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
  // An event observer: &lt;br /&gt;
  // It is called whenever a &amp;quot;start paddle moving event&amp;quot; is signalled.&lt;br /&gt;
  o_start_paddle_moving:&lt;br /&gt;
    function(p_event)&lt;br /&gt;
    { // console.log(this);&lt;br /&gt;
      if (p_event.keyCode == KEY_LEFT)&lt;br /&gt;
        this.v_paddle.startLeft();&lt;br /&gt;
      else if (p_event.keyCode == KEY_RIGHT)&lt;br /&gt;
        this.v_paddle.startRight();&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
  // An event observer: &lt;br /&gt;
  // It is called whenever a &amp;quot;stop paddle moving event&amp;quot; is signalled.&lt;br /&gt;
  o_stop_paddle_moving:&lt;br /&gt;
    function(p_event)&lt;br /&gt;
    { this.v_paddle.stop();&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
  //////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
  // view&lt;br /&gt;
  //////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
  // Clears the canvas and redraws all sprites (ball and paddle).&lt;br /&gt;
  m_draw:&lt;br /&gt;
    function()&lt;br /&gt;
    { this.v_context.clearRect(0, 0, CANVAS_WIDTH, CANVAS_HEIGHT);&lt;br /&gt;
    &lt;br /&gt;
      this.v_ball.draw();&lt;br /&gt;
      this.v_paddle.draw();&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
  // Displays information on the HTML page.&lt;br /&gt;
  m_info:&lt;br /&gt;
    function (p_info)&lt;br /&gt;
  { document.getElementById(&amp;quot;d_info&amp;quot;).firstChild.nodeValue = p_info; },&lt;br /&gt;
&lt;br /&gt;
  // An event observer: &lt;br /&gt;
  // It is called every 1000/FPS seconds, but only when the game has been started.&lt;br /&gt;
  o_redraw:&lt;br /&gt;
    function() &lt;br /&gt;
    { // collision detection&lt;br /&gt;
      var l_exit = this.v_collision.handleCollision();&lt;br /&gt;
&lt;br /&gt;
      if (l_exit == EVENT_EXIT)&lt;br /&gt;
      { this.o_start_stop_game();&lt;br /&gt;
        return;&lt;br /&gt;
      };&lt;br /&gt;
      &lt;br /&gt;
      if (l_exit == EVENT_SCORE)&lt;br /&gt;
      { // Raise the score and display it.&lt;br /&gt;
        this.v_score++;&lt;br /&gt;
        this.m_info(&amp;quot;Punkte: &amp;quot; + this.v_score);&lt;br /&gt;
      };&lt;br /&gt;
      &lt;br /&gt;
      // Move the ball and paddle.&lt;br /&gt;
      this.v_ball.move();&lt;br /&gt;
      this.v_paddle.move();&lt;br /&gt;
&lt;br /&gt;
      // Redraw the canvas.&lt;br /&gt;
      this.m_draw();&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
  //////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
  // end of prototype&lt;br /&gt;
  //////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beachte:&#039;&#039;&#039; Auch in den Methodendefinitionen musste der &lt;br /&gt;
„&amp;lt;code&amp;gt;this&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;self&amp;lt;/code&amp;gt;-Hack“ mehrfach angewandt werden.&lt;br /&gt;
Man überlege sich in allen Fällen, warum dies notwendig ist.&lt;br /&gt;
&lt;br /&gt;
Um das Problem nachzuvollziehen, sollten Sie die Trace-Anweisung &lt;br /&gt;
&amp;lt;code&amp;gt;console.log(this);&amp;lt;/code&amp;gt; in der Methode &amp;lt;code&amp;gt;o_start_paddle_moving&amp;lt;/code&amp;gt;&lt;br /&gt;
(in Ihrer Anwendung oder in der Musterlösung) aktivieren.&lt;br /&gt;
&lt;br /&gt;
Starten Sie nun die Anwednung im Firefox und beobachten Sie die Text-Ausgabe im Firebug-Konsolen-Fester,&lt;br /&gt;
wenn Sie Ihren Schläger mittels Tastatur-Steuerung bewegen.&lt;br /&gt;
&lt;br /&gt;
Aktivieren Sie anschließend im Rumpf der Methode &amp;lt;code&amp;gt;m_init_started&amp;lt;/code&amp;gt;&lt;br /&gt;
die ersten beiden der folgenden Zeilen und kommentieren Sie die nachfolgenden vier Zeilen aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//    document.onkeydown = this.o_start_paddle_moving;&lt;br /&gt;
//    document.onkeyup   = this.o_stop_paddle_moving;&lt;br /&gt;
      document.onkeydown =&lt;br /&gt;
        function(p_event){ self.o_start_paddle_moving(p_event); };&lt;br /&gt;
      document.onkeyup =&lt;br /&gt;
        function(p_event){ self.o_stop_paddle_moving(p_event); };&lt;br /&gt;
&amp;lt;/source&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Aus obigem Code wird also:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
      document.onkeydown = this.o_start_paddle_moving;&lt;br /&gt;
      document.onkeyup   = this.o_stop_paddle_moving;&lt;br /&gt;
//    document.onkeydown =&lt;br /&gt;
//      function(p_event){ self.o_start_paddle_moving(p_event); };&lt;br /&gt;
//    document.onkeyup =&lt;br /&gt;
//      function(p_event){ self.o_stop_paddle_moving(p_event); };&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Starten Sie nun Ihre Anwendung erneut&lt;br /&gt;
und versuchen Sie den Schläger mittels Tastensteuerung zu bewegen.&lt;br /&gt;
&lt;br /&gt;
Sie werden feststellen, dass die Methode &amp;lt;code&amp;gt;o_start_paddle_moving&amp;lt;/code&amp;gt;&lt;br /&gt;
nun nicht mehr auf das &amp;lt;code&amp;gt;Main&amp;lt;/code&amp;gt;-Objekt zugreift, &lt;br /&gt;
sondern auf das &amp;lt;code&amp;gt;index.html&amp;lt;/code&amp;gt;-Objekt (welches JavaScript in der globalen Variablen &amp;lt;code&amp;gt;document&amp;lt;/code&amp;gt; zur Verfügung stellt).&lt;br /&gt;
Die in diesem Objekt enthaltenen Methoden &amp;lt;code&amp;gt;onkeydown&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;onkeyup&amp;lt;/code&amp;gt; werden von JavaScript&lt;br /&gt;
aufgerufen, sobald der Benutzer irgendeine Taste auf dem Keyboard drückt bzw. loslässt.&lt;br /&gt;
Da im &amp;lt;code&amp;gt;index.html&amp;lt;/code&amp;gt;-Objekt das Objekt &amp;lt;code&amp;gt;v_paddle&amp;lt;/code&amp;gt; nicht existiert, reagiert &amp;lt;code&amp;gt;MiniPong&amp;lt;/code&amp;gt; &lt;br /&gt;
nun bei jedem Tastendruck mit einer Fehlermeldung.&lt;br /&gt;
&lt;br /&gt;
In der ursprünglichen Version von &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt; bestand dieses Problem noch nicht,&lt;br /&gt;
da alle Funktionen (wie z.B. &amp;lt;code&amp;gt;o_start_paddle_moving&amp;lt;/code&amp;gt;) und Variablen global definiert wurde. &lt;br /&gt;
Im globalen Kontext bezieht sich &amp;lt;code&amp;gt;this&amp;lt;/code&amp;gt; auch auf das globale Objekt.&lt;br /&gt;
&lt;br /&gt;
=Erweiterung=&lt;br /&gt;
&lt;br /&gt;
Erweitern Sie die Anwendung wiederum so, dass Sie zwei Schläger unabhängig voneinander&lt;br /&gt;
links und rechts am Bühnenrand bewegen können, d.h., dass zwei Spieler gegeneinander spielen können. &lt;br /&gt;
Jeder Spieler hat seinen eigenen Score. Der erste Spieler, der 7 Punkte erreicht, gewinnt.&lt;br /&gt;
(Vergleiche [[HTML5-Tutorium: Canvas: MiniPong 03#Erweiterung]])&lt;br /&gt;
&lt;br /&gt;
{{TBD}}&lt;br /&gt;
&lt;br /&gt;
[[Medium:MiniPong04aCanvas.png|miniatur|ohne|945px|Das Objektmodell von MiniPong 04a]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Musterlösung&#039;&#039;&#039;: &amp;lt;code&amp;gt;[http://glossar.hs-augsburg.de/beispiel/tutorium/html5_canvas/minipong/html5_canvas_minipong_04a/WebContent/index.html Minipong 4a]&amp;lt;/code&amp;gt;&lt;br /&gt;
([http://glossar.hs-augsburg.de/beispiel/tutorium/html5_canvas/minipong/html5_canvas_minipong_04a SVN-Repository])&lt;br /&gt;
&lt;br /&gt;
=Verbesserungsmöglichkeiten=&lt;br /&gt;
&lt;br /&gt;
Die Code-Qualität von &amp;lt;code&amp;gt;MiniPongCanvas04&amp;lt;/code&amp;gt; hat sich gegenüber &lt;br /&gt;
&amp;lt;code&amp;gt;[[HTML5-Tutorium: Canvas: MiniPong 03#Weitere_Verbesserungsm.C3.B6glichkeiten|MiniPongCanvas03]]&amp;lt;/code&amp;gt;&lt;br /&gt;
vor allem hinsichtlich der Modularität leicht gebessert. Es besteht allerdings weiterer Verbesserungsbedarf.&lt;br /&gt;
&lt;br /&gt;
{{Codequalität&lt;br /&gt;
| application     = MiniPongCanvas04&lt;br /&gt;
| readability     = 4&lt;br /&gt;
| writability     = 6&lt;br /&gt;
| continuity      = 4&lt;br /&gt;
| customizability = 4&lt;br /&gt;
| dry             = 3&lt;br /&gt;
| demeter         = 5&lt;br /&gt;
| verifiability   = 2&lt;br /&gt;
| interfaces      = 6&lt;br /&gt;
| contract        = 6&lt;br /&gt;
| liskov          = 6&lt;br /&gt;
| modularity      = 3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Das Prinzip der „[[Programmierprinzipien#Verst.C3.A4ndlichkeit.2C_Comprehesibility.2C_Lesbarkeit.2C_Readability|Verständlichkeit/Lesbarkeit]]“== &lt;br /&gt;
&lt;br /&gt;
{{TBD}}&lt;br /&gt;
&lt;br /&gt;
==Das Prinzip der „[[Programmierprinzipien#Schreibbarkeit.2C_Writability|Schreibbarkeit]]“== &lt;br /&gt;
&lt;br /&gt;
{{TBD}}&lt;br /&gt;
&lt;br /&gt;
==Das Prinzip der „[[Programmierprinzipien#Stetigkeit.2C_Continuity|Stetigkeit]]“== &lt;br /&gt;
&lt;br /&gt;
{{TBD}}&lt;br /&gt;
&lt;br /&gt;
==Das Prinzip der „[[Programmierprinzipien#Konfigurierbarkeit.2C_Customizability|Konfigurierbarkeit]]“== &lt;br /&gt;
&lt;br /&gt;
{{TBD}}&lt;br /&gt;
&lt;br /&gt;
==Das Prinzip „[[Don&#039;t repeat yourself]]“== &lt;br /&gt;
&lt;br /&gt;
{{TBD}}&lt;br /&gt;
&lt;br /&gt;
==Das „[[Programmierprinzipien#Gesetz_von_Demeter.5B5.5D.2C_Law_of_Demeter.2C_LoD|Gesetz von Demeter]]“== &lt;br /&gt;
&lt;br /&gt;
{{TBD}}&lt;br /&gt;
&lt;br /&gt;
==Das Prinzip der „[[Programmierprinzipien#.C3.9Cberpr.C3.BCfbarkeit.2C_Verifiability|Überprüfbarkeit]]“== &lt;br /&gt;
&lt;br /&gt;
{{TBD}}&lt;br /&gt;
&lt;br /&gt;
==Das Prinzip „[[Programmierprinzipien#Benutze_Integrit.C3.A4tsbedingungen.2C_Make_Use_of_Integrity_Constraints.2C_Design_by_Contract.5B2.5D|Design by Contract]]“== &lt;br /&gt;
&lt;br /&gt;
{{TBD}}&lt;br /&gt;
&lt;br /&gt;
==Das  „[[Programmierprinzipien#Liskovsches_Substitutionsprinzip.5B3.5D.2C_LSP.2C_Ersetzbarkeitsprinzip.2C_Liskov_substitution_principle.5B4.5D|Liskovsche Substitutionsprinzip]]“== &lt;br /&gt;
&lt;br /&gt;
{{TBD}}&lt;br /&gt;
&lt;br /&gt;
==Das Prinzip der „[[Programmierprinzipien#Modularit.C3.A4t.2C_Modularity.2C_Teile_und_herrsche.2C_Divide_et_impera|Modularität]]“== &lt;br /&gt;
&lt;br /&gt;
{{TBD}}&lt;br /&gt;
&lt;br /&gt;
=Quellen=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&amp;lt;ol start = &amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;{{Quelle|Braun, H. (2011): Webanimationen mit Canvas}}&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;{{Quelle|Kowarschick, W.: Multimedia-Programmierung}}&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Fortsetzung des Tutoriums=&lt;br /&gt;
&lt;br /&gt;
Sie sollten nun das [[HTML-Tutorium: SVG: Hello World|Hello-World-SVG-Tutorium]] bearbeiten, sofern Sie dies noch nicht gemacht haben.&lt;br /&gt;
Anderenfalls können Sie gleich mit dem [[HTML-Tutorium: SVG: MiniPong|Minipong-SVG-Tutorium]] forfahren.&lt;br /&gt;
[[Kategorie: HTML5-Tutorium: Canvas: MiniPong]][[Kategorie: HTML5-Beispiel]][[Kategorie:Kapitel:Multimedia-Programmierung:Beispiele]]&lt;/div&gt;</summary>
		<author><name>Rayza</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=Model-View-Controller-Service-Paradigma&amp;diff=24669</id>
		<title>Model-View-Controller-Service-Paradigma</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=Model-View-Controller-Service-Paradigma&amp;diff=24669"/>
		<updated>2012-11-20T07:38:03Z</updated>

		<summary type="html">&lt;p&gt;Rayza: /* Beispiel Warenkorb */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{MVC:Menü}}&lt;br /&gt;
=Definition=&lt;br /&gt;
[[Medium:MVCS-Module 01.png|gerahmt||rechts|MVCS-Module]]&lt;br /&gt;
Als [[Model-View-Controller-Service-Paradigma]] &lt;br /&gt;
(engl. [[GlossaryWiki:Model-view-controller-service paradigm|Model-view-controller-service paradigm]]) oder&lt;br /&gt;
[[Model-View-Controller-Service-Paradigma|-Architektur]] &lt;br /&gt;
(engl. [[GlossaryWiki:Model-view-controller-service paradigm|architecture]]), &lt;br /&gt;
kurz [[Model-View-Controller-Service-Paradigma|MVCS-Paradigma]], [[Model-View-Controller-Service-Paradigma|MVCS-Architektur]]&lt;br /&gt;
oder auch nur [[Model-View-Controller-Service-Paradigma|MVCS]], bezeichnet man ein [[Architekturmuster]], bei der eine [[Komponente (UML)|Anwendungs-Komponente]] in vier eigenständige Module unterteilt wird: &lt;br /&gt;
[[Model-View-Controller-Service-Paradigma/Model|Model]] (Modell), [[Model-View-Controller-Service-Paradigma/View|View]] (Darstellung, Präsentation),&lt;br /&gt;
[[Model-View-Controller-Service-Paradigma/Controller|Controller]] (Steuerung) und [[Model-View-Controller-Service-Paradigma/Service|Service]] (Service, Zugriff auf externe Daten).&lt;br /&gt;
&lt;br /&gt;
==Model (Modell)==&lt;br /&gt;
Ein [[Model-View-Controller-Service-Paradigma/Model|MVCS-Modell]] (engl. [[GlossaryWiki:Model-view-controller-service paradigm/model|MVCS model]]) &lt;br /&gt;
einer [[Model-View-Controller-Service-Paradigma|MVCS]]-[[Anwendung]]&lt;br /&gt;
dient zur Speicherung bestimmter Daten, d.h. zur Speicherung von Teilen des aktuellen Zustands der Anwendung. &lt;br /&gt;
&lt;br /&gt;
Ein MVCS-Modell kann weitere Aufgaben übernehmen:&lt;br /&gt;
&lt;br /&gt;
* anderen Modulen Zugriff auf die Zustandsdaten gewähren&lt;br /&gt;
* andere Module über Änderungen informieren (meist mittels des [[Observer-Pattern]]s)&lt;br /&gt;
* Umsetzung der Komponentenlogik&lt;br /&gt;
&lt;br /&gt;
==View (Darstellung, Präsentation)==&lt;br /&gt;
[[Model-View-Controller-Service-Paradigma/View|MVCS-Views]] (engl. [[GlossaryWiki:Model-view-controller-service paradigm/view|MVCS views]]) sind die grafischen, akustischen, haptischen und olfaktorischen Schittstellen einer [[Model-View-Controller-Service-Paradigma|MVCS]]-[[Anwendung]]. &lt;br /&gt;
Sie „visualisieren“ Daten, die in [[Model-View-Controller-Service-Paradigma/Model|Modell]]en der Anwendung enthalten sind.&lt;br /&gt;
&lt;br /&gt;
Eine MVCS-View kann weitere Aufgaben übernehmen:&lt;br /&gt;
&lt;br /&gt;
* bei Daten-Änderungen in den zugehörigen [[Model-View-Controller-Service-Paradigma/Model|Modell]]en der Anwendung die View-Repräsentation dieser Daten automatisch anpassen&lt;br /&gt;
* Benutzeraktionen, die über grafische Eingabeelemente – wie Textfelder oder Buttons – erfolgen, an einen [[Model-View-Controller-Service-Paradigma/Controller|Controller]] weiterleiten&lt;br /&gt;
* Visualisierung von Status- und Fehlermeldungen von Controllern&lt;br /&gt;
&lt;br /&gt;
==Controller (Steuerung)==&lt;br /&gt;
[[Model-View-Controller-Service-Paradigma/Controller|MVCS-Controller]] &lt;br /&gt;
(engl. [[GlossaryWiki:Model-view-controller-service paradigma/controller|MVCS controllers]]) dienen zur Steuerung einer [[Model-View-Controller-Service-Paradigma|MVCS]]-[[Anwendung]]. Dazu nimmt ein Controller Eingaben aus verschiedensten Quellen entgegen (z.B. Sensor-Daten oder Daten, die ein Benutzer über eine beliebige Benutzer-Schnittstelle wie eine Tastatur oder eine Maus eingibt) und leitet diese bereinigt und normalisiert an &lt;br /&gt;
[[Model-View-Controller-Service-Paradigma/Model|Modelle]] und/oder [[Model-View-Controller-Service-Paradigma/Service|Servicemodule]] weiter.&lt;br /&gt;
&lt;br /&gt;
Ein MVCS-Controller kann weitere Aufgaben übernehmen:&lt;br /&gt;
&lt;br /&gt;
* Verarbeitung von Systemsignalen, wie z.B. einer Systemuhr (z.B. „Spielzeit ist abgelaufen“)&lt;br /&gt;
* Umsetzung der Komponentenlogik&lt;br /&gt;
&lt;br /&gt;
==Service==&lt;br /&gt;
Ein [[Model-View-Controller-Service-Paradigma/Service|Service]] (engl. [[GlossaryWiki:Model-view-controller-service paradigm/service|service]]) &lt;br /&gt;
dient einer [[Model-View-Controller-Service-Paradigma|MVCS]]-[[Anwendung]] zur Kommunikation &lt;br /&gt;
mit der Außenwelt, d.h. mit Dienste-Anbietern wie [[Web-Server]]n, [[Datenbanksystem]]en oder auch [[Dateisystem]]en.&lt;br /&gt;
Die Kommunikation kann in beide Richtungen erfolgen: Services können sowohl Daten aus [[Model-View-Controller-Service-Paradigma/Model|Modell]]en  auslesen und in externe&lt;br /&gt;
[[Repository|Repositories]] schreiben, als auch Daten aus externen Repositories lesen und in Modelle einfügen.&lt;br /&gt;
&lt;br /&gt;
==Data Access Object==&lt;br /&gt;
{{TBD}}&lt;br /&gt;
&lt;br /&gt;
==MVCS-Paradigma: Varianten (Definitionen nach [[Kowarschick (MMProg)]])==&lt;br /&gt;
&lt;br /&gt;
[[Medium:VCSM-Schichtenarchitektur 01.png | gerahmt | rechts | Besipiel für eine VCSM-Schichtenarchitektur]]&lt;br /&gt;
===VCSM-Paradigma===&lt;br /&gt;
Ein MVCS-Paradigma wird &#039;&#039;&#039;VCSM-Paradigma&#039;&#039;&#039; genannt, wenn die vier zugehörigen Module folgende Schichtenarchitektur bilden:&lt;br /&gt;
&#039;&#039;View&#039;&#039;, &#039;&#039;Controller&#039;&#039;, &#039;&#039;Service&#039;&#039;, &#039;&#039;Model&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die vier Module einer MVCS-Komponente sind gemäß dem [[Schichtenparadigma]] in Ebenen angeordnet. &lt;br /&gt;
Die höheren Ebenen können auf tiefergelegene Ebenen zugreifen, aber nicht umgekehrt.&lt;br /&gt;
&lt;br /&gt;
Die unserste Ebene enthält das Modell. Das zugehörige Modul weiß nichts von den über ihr liegenden Module und kann mit diesen nur mit&lt;br /&gt;
indirekt – z.B. durch Antworten auf [[Nachricht]]en oder mit Hilfe des [[Observer-Pattern]]s – kommunizieren.&lt;br /&gt;
&lt;br /&gt;
Ein Servicemodul kennt nur die darunterliegende Modelle und kann nur auf diese  zugreifen &lt;br /&gt;
(sowie i. Allg. auf externe Datenquellen, sofern es nicht nur Filterfunktionen wahrnimmt).&lt;br /&gt;
&lt;br /&gt;
Ein Controllermodul kann entweder direkt auf ein Modellmodul zugreifen oder indirekt mit Hilfe eines Servicemoduls (zum Beispiel &lt;br /&gt;
um Daten aus einer externen Quelle zu laden, oder um zu überprüfen,&lt;br /&gt;
ob die entsprechenden Zugriffsrechte für eine Datenmanipulation überhaut gegeben sind).&lt;br /&gt;
&lt;br /&gt;
Man beachte, dass in diesem Paradigma die Logik der Anwendung in den Controllern und nicht in den Modellen realisiert werden sollte,&lt;br /&gt;
da die Modelle keinen direkten Zugriff auf andere Module haben.&lt;br /&gt;
&lt;br /&gt;
Eine View kommuniziert i. Allg. direkt nur mit Controllermodulen, um diesen Benutzeraktionen, die über die View erfolgen, mitzuteilen.&lt;br /&gt;
Ein direkter Zugriff auf ein Datenmodul ist nur dann notwendig, wenn die Nachrichten, die von den Datenmodulen verschickt werden,&lt;br /&gt;
nicht alle relevanten Informationen enthalten. Zugriffe auf Servicemodule sind nicht vorgesehen.&lt;br /&gt;
&lt;br /&gt;
Der Benutzer stellt das „oberste Modul“ dar. Er kommuniziert nur mit View- und Controllermodulen.&lt;br /&gt;
&lt;br /&gt;
[[Medium:CVMS-Schichtenarchitektur 01.png | gerahmt | rechts  | Besipiel für eine CVMS-Schichtenarchitektur]]&lt;br /&gt;
&lt;br /&gt;
===CVMS-Paradigma===&lt;br /&gt;
&lt;br /&gt;
Ein MVCS-Paradigma wird &#039;&#039;&#039;CVMS-Paradigma&#039;&#039;&#039; genannt, wenn die drei zugehörigen Module folgende Schichtenarchitektur bilden:&lt;br /&gt;
&#039;&#039;Controller&#039;&#039;, &#039;&#039;View&#039;&#039;, &#039;&#039;Model&#039;&#039; und &#039;&#039;Service&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Die Controller-Module können direkt (z.B. via [[Unicast-Nachricht]]en) auf die View- und Modell-Module zugreifen, &lt;br /&gt;
die View-Module können direkt auf Modell-Module zugreifen und die Modell-Module können direkt mit Service-Modulen kommunizieren, &lt;br /&gt;
um Daten mit externen Repositories auszutauschen. Alle anderen „Zugriffe“ erfolgen nur indirekt&lt;br /&gt;
(i. Allg. als Antworten auf Unicast-Nachrichten, evtl. auch mittels [[Callback]]-Routinen).&lt;br /&gt;
&lt;br /&gt;
Man beachte, dass in diesem Paradigma die Logik der Anwendung in den Controllern und nicht in den Modellen realisiert werden sollte,&lt;br /&gt;
da die Modelle keinen direkten Zugriff auf andere Module haben.&lt;br /&gt;
&lt;br /&gt;
===MVCS-Multicast-Paradigma===&lt;br /&gt;
Ein MVCS-Paradigma wird MVCS-Multicast-Paradigma genannt, wenn alle Module nur indirekt, d.h. mit Hilfe&lt;br /&gt;
von [[Multicast-Nachricht]]en kommunizieren.&lt;br /&gt;
&lt;br /&gt;
==MVCS-Pattern (Definitionen nach [[Kowarschick (MMProg)]])==&lt;br /&gt;
&lt;br /&gt;
Wenn für ein MVCS-Paradigma – im Sinne eines [[Entwurfmusters]] – eine konkrete [[Klasse]]n- und [[Objekt]]-Struktur für die vier Module [[Model-View-Controller-Service-Paradigma/Model|Model]], [[Model-View-Controller-Service-Paradigma/View|View]], [[Model-View-Controller-Service-Paradigma/Controller|Controller]] und [[Model-View-Controller-Service-Paradigma/Service|Service]] &lt;br /&gt;
vorgegeben ist, spricht man von einem [[Model-View-Controller-Service-Pattern|MVCS-Pattern]].&lt;br /&gt;
&lt;br /&gt;
===VCSM-Pattern===&lt;br /&gt;
&lt;br /&gt;
Ein MVCS-Pattern, das ein VCSM-Paradigma realisiert, wird auch &#039;&#039;&#039;VCSM-Pattern&#039;&#039;&#039; genannt.&lt;br /&gt;
&lt;br /&gt;
===MVCS-Multicast-Pattern===&lt;br /&gt;
&lt;br /&gt;
Ein MVCS-Pattern, das nur auf Multicast-Nachrichten basiert, wird auch &#039;&#039;&#039;MVCS-Multicast-Pattern&#039;&#039;&#039; genannt.&lt;br /&gt;
&lt;br /&gt;
= Der MVCS-Prozess =&lt;br /&gt;
[[Medium:MVCS-Prozess 01.png|gerahmt|rechts|Der MVCS-Prozess]]&lt;br /&gt;
Das MVCS-Paradigma erweitert das [[Model-View-Controller-Paradigma|MVC-Paradigma]] um die so genannte Servicemodule. Die Servicemodule übernehmen die Aufgabe, mit externen Anwendungen/Datenpools zu kommunizieren. Hierbei handelt es sich um eine Aufgabe, von der nicht klar ist, ob sie im MVC-Paradigma eher von den Modellmodulen oder den Steuerungsmodulen übernommen werden sollte. Externe Datenbestände gehören eigentlich zu Modell. Die Steuerung des Transports dieser Daten wäre allerdings eher eine Aufgabe der Steuermodule. Joe Berkovitz schlägt daher vor, für diese Aufgabe eigenständige Module zu etablieren. Die Aufgabe der Präsentationsmodule (Views) ändert sich nicht. &lt;br /&gt;
&lt;br /&gt;
Über ein Steuermodul kann der Benutzer das Modell manipulieren, das heißt, dessen Zustand (und damit auch die zugehörigen Views) ändern. Er kann insbesondere veranlassen, dass die Daten des Modells – mit Hilfe eines Servicemoduls – an eine externe Anwendung weitergeleitet oder in einer externen Datenbank, XML-Datei o.Ä. dauerhaft gespeichert werden. Auch das Lesen von Daten aus einer externen Datenquelle kann auf diese Weise initiiert werden. &lt;br /&gt;
&lt;br /&gt;
Es ist sogar möglich, das Modell mit Hilfe einer Servicekomponenten automatisch mit einem externen Datenpool zu synchronisieren. Hierbei kommt keine Steuerkomponente zum Einsatz.&lt;br /&gt;
&lt;br /&gt;
== Beispiel Warenkorb==&lt;br /&gt;
In einer [[Warenkorb]]-Anwendung werden im Modell Daten über &lt;br /&gt;
den Warenkorb und den Besteller (sobald dieser eingeloggt ist) gespeichert: eine aktuelle Auswahl des Warenkataloges,&lt;br /&gt;
den Inhalt des Warenkorbs, der Gesamtpreis der Waren im Warenkorb, der Adresse des Besterller etc. Der Warenkatalog selbst wird &lt;br /&gt;
hingegen nicht im Modell, sondern in einer externen Datenbank abgelegt.&lt;br /&gt;
&lt;br /&gt;
Die View visualisiert Elemente der aktuellen Auswahl des Warenkataloges (siehe Modell) mit Hilfe von Texten, Bildern und Videos.&lt;br /&gt;
Der Benutzer kann die Auswahl der visualierten Elemente durch Filter oder Navigation abändern, er kann&lt;br /&gt;
Elemente des Kataloges in seinen Warenkorb legen und dort wieder entfernen etc. Für all diese Aktionen werden&lt;br /&gt;
dem Benutzer in der View spezielle Eingabefelder ([[Checkbox]]es, [[Drop-Down-Menü]]s, [[Textfeld]]er, [[Link]]s etc.) präsentiert.&lt;br /&gt;
Jedes mal, wenn der Benutzer eine dieser Felder mit Hilfe der Maus oder der Tastatur bedient, leitet das&lt;br /&gt;
Darstellungsmodul eine entsprechende Nachricht an das zuständige Steuermodul weiter.&lt;br /&gt;
&lt;br /&gt;
Das Steuermodul analysiert jeweils die gewünschte Aktion des Benutzers und führt die entsprechenden Änderungen am Modell durch.&lt;br /&gt;
Zum Beispiel kann sie veranlassen, die aktuelle Auswahl des Warenkataloges den Wünschen des Benutzers gemäß zu ändern,&lt;br /&gt;
indem sie das entsprechende Servicemodul veranlässt, die neuen Daten aus der Datenbank in das Modell zu übertragen.&lt;br /&gt;
&lt;br /&gt;
Wenn der Benutzer zu guter Letzt eine Bestellung tätigt, veranlassst das Steuermodul, &lt;br /&gt;
dass die Bestellung aus dem Modell mit Hilfe eines Services an eine geeignete Anwendung weitergeleitet wird.&lt;br /&gt;
&lt;br /&gt;
=CVMS-Prozess, Model 2=&lt;br /&gt;
[[Medium:CVMS-Prozess 01.png|gerahmt|rechts|CVMS-Prozess]]&lt;br /&gt;
&lt;br /&gt;
Den meisten „Web Application Frameworks“ liegt heutzutage ein MVC-Paradigma zugrunde (vgl. [[Model-View-Controller-Paradigma/Umsetzungen|MVC-Paradigma/Umsetzungen]]). &lt;br /&gt;
Häufig wird das MVC-Paradigma dabei als [[Model-View-Controller-Service-Paradigma#CVMS-Paradigma|CVMS-Schichtenarchitektur]] realisiert. Beispielsweise wurde&lt;br /&gt;
in der Spezifikation von JSP 0.92&amp;lt;ref name=&amp;quot;JSP 0.92&amp;quot;&amp;gt;[http://www.kirkdorffer.com/jspspecs/jsp092.html#model JavaServer&amp;lt;sup&amp;gt;TM&amp;lt;/sup&amp;gt; Pages&amp;lt;sup&amp;gt;TM&amp;lt;/sup&amp;gt; – Specification 0.92]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[http://www.oracle.com/technetwork/articles/javase/servlets-jsp-140445.html Servlets and JSP Pages Best Practices]&amp;lt;/ref&amp;gt;&lt;br /&gt;
das so genannte [[Model 2]] eingeführt, welches eine CVMS-Architektur beschreibt. &lt;br /&gt;
&lt;br /&gt;
Bei einem CVMS-Prozess läuft die Kommunikation i. Allg. synchron ab (siehe Abbildung „CVMS-Prozess“): &lt;br /&gt;
&lt;br /&gt;
Ein Client (wie z.B. ein Web-Browser) übermittelt an einen Controller eine Anfrage (1.)&lt;br /&gt;
– z.B. in Form einer URL plus weiteren Daten – und wartet dann auf eine Antwort (11.):&lt;br /&gt;
eine View, die er dem Benutzer präsentieren kann. &lt;br /&gt;
(Dies gilt sogar, wenn [[Ajax]] zu Einsatz kommt. Auch hier wartet der Client, bis die Anwort eingetroffen ist.&lt;br /&gt;
Die als Ergebnis gelieferte Teilview wird dann vom Client verwendet, um die aktuell dem Benutzer präsentierte View zu aktualisieren.)&lt;br /&gt;
&lt;br /&gt;
Um eine Antwort generieren zu können, leitet der Controller die erhaltenen Daten an ein Modell weiter (2.). &lt;br /&gt;
Das Modell enthält dabei nicht nur typische [[Session]]-Daten – wie Session-ID, Benutzer-Daten, Warenkorb-Inhalt etc. –, sondern auch &lt;br /&gt;
Informationen, die dem Benutzer präsentiert werden sollen – wie z.B. bestimmte Waren, für die sich&lt;br /&gt;
der Benutzer aktuell interessiert. Das Modell kann mit Hilfe von Service-Modulen Daten aus externen Datenbeständen &lt;br /&gt;
(Datenbanken, Web-Services, XML-Repositories etc.) nachladen oder auch Informationen dorthin übertragen (3., 4. und 5.). &lt;br /&gt;
&lt;br /&gt;
Sobald das Modell die Daten vollständig verarbeitet hat, &lt;br /&gt;
meldet es den Erfolg oder Misserfolg dieser Verarbeitung an den Controller (6.).&lt;br /&gt;
Daraufhin stößt der Controler die Erzeugung (das Rendering) einer View an (7.). Welche View erzeugt wird, hängt dabei&lt;br /&gt;
von den Daten (insbesondere der URL) ab, die dem Controller vom Client übergeben wurden (1.), sowie von der Antwort des Modells (6.).&lt;br /&gt;
Wenn das Modell beispielsweise meldet, dass die Berechtigung zum Zugriff auf die gewünschten Daten fehlt, wird der Controller &lt;br /&gt;
eine Login-View generieren, anderenfalls wird er eine View erzeugen, die die gewünschten Informationen präsentiert.&lt;br /&gt;
&lt;br /&gt;
Der View-Renderer kann beliebig oft auf bestimmte Modelle zugreifen (8.), um Daten zu erfragen (9.), die in die View integriert werden.&lt;br /&gt;
Sobald der Rendervorgang abgeschlossen ist, erhält der Controller die erzeugte View (10.). Der Controller leitet diese&lt;br /&gt;
als Antwort an den Client zurück (11.).&lt;br /&gt;
&lt;br /&gt;
==Beispiel „JSP“==&lt;br /&gt;
&lt;br /&gt;
siehe [[Model-View-Controller-Paradigma#Beispiel_.E2.80.9EJSP.E2.80.9C|CVM-Prozess: Beispiel „JSP“]]&lt;br /&gt;
&lt;br /&gt;
= Kommunikation zwischen zwei MVCS-Komponenten=&lt;br /&gt;
Genauso wie mehrere [[Model-View-Controller-Paradigma# Kommunikation_zwischen_zwei_MVC-Komponenten|MVC-Komponenten]] miteinander kommunizieren können, können auch mehrere MVCS-Komponenten miteinander kommunizieren.&lt;br /&gt;
&lt;br /&gt;
Viele Anwendungen bestehen aus mehreren MVCS-Komponenten: &lt;br /&gt;
Eine oder mehrere Kernanwendungen (Domain-Komponenten) sowie einer Rahmenanwendung (Frame-Komponente), die den Zugang zu und zwischen den Kernanwendungen steuert. &lt;br /&gt;
In diesem Fall gibt es mehrere relativ unabhängige MVCS-Prozesse. Die äußeren Komponenten (wie z.B. die Rahmenkomponente) können dabei mit den inneren Komponenten (wie z.B. die Kernkomponenten) kommunizieren. &lt;br /&gt;
Der umgekehrte Weg sollte vermieden werden, damit Kernkomponenten problemlos in andere Umgebungen integriert werden können.&lt;br /&gt;
[[Medium:MVCS-Prozess 02.png|gerahmt|links|MVCS-Prozess 2 (mit Trennung in äußere und innere MVCS-Komponenten)]]&lt;br /&gt;
&lt;br /&gt;
Eine typische Aufgabe eines Rahmenservices ist es, XML-Dateien zum Initialisieren des Systems einzulesen. Die Kernservice greifen dagegen häufig auf Datenbanken oder Web-Anwendungen zu, die bestimmte Daten des Kernmodells dauerhaft speichern (vgl. obiges Beispiel).&lt;br /&gt;
&lt;br /&gt;
==Beispiel „Spiel mit Highscore-Verwaltung“==&lt;br /&gt;
Wenn man ein „Spiel mit Highscore-Verwaltung“ realisieren möchte, sollte man zwei unanhängige Kernanwendungen schreiben.&lt;br /&gt;
Das Spiel selbst und eine spielunabhängige Highscore-Verwaltung. Die Rahmenanwendung verknüpft diese beiden Anwendungen.&lt;br /&gt;
&lt;br /&gt;
Die Rahmenanwendung liest beispielsweise bei&lt;br /&gt;
Spielende die erreichten Punkte aus dem Spielmodell aus und leitet diese an das Highscore-Modell weiter.&lt;br /&gt;
Eine weitere Möglichkeit wäre, dass die Rahmenanwendung über die Highscore-Anwendung ermittelt, ob der Spieler schon mindestens fünf Level erfolgreich gespielt hat. Nur in diesem Fall gewährt sie den Zugang zum Trainingsmodus des Spiels.&lt;br /&gt;
&lt;br /&gt;
=Quellen=&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;{{Quelle|Berkovitz, Joe (2006): An architectural blueprint for Flex applications}}&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;{{Quelle|Kowarschick, W.: Multimedia-Programmierung}}&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Siehe auch=&lt;br /&gt;
*{{Vgl|Model-View-Controller-Paradigma}}&lt;br /&gt;
*{{Vgl|Logic-Data-View-Controller-Service-Paradigma}}&amp;lt;noinclude&amp;gt;[[Kategorie:Objektorientierte Programmierung]]&lt;br /&gt;
[[Kategorie:Glossar]][[Kategorie:MVC]]&lt;br /&gt;
[[en:MVCS]]&lt;br /&gt;
[[Kategorie:Kapitel:Multimedia-Programmierung]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rayza</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=Programmierprinzipien&amp;diff=24660</id>
		<title>Programmierprinzipien</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=Programmierprinzipien&amp;diff=24660"/>
		<updated>2012-11-13T07:51:47Z</updated>

		<summary type="html">&lt;p&gt;Rayza: /* Software-Eigenschaften zur Erfüllung der beiden Ziele */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Qualität&lt;br /&gt;
|correctness         = 5&lt;br /&gt;
|extent              = 4&lt;br /&gt;
|numberOfReferences  = 2&lt;br /&gt;
|qualityOfReferences = 3&lt;br /&gt;
|conformance         = 5&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Anmerkung&#039;&#039;&#039;: In diesem Artikel haben die beiden Folgenrungspfeile „→“  und „⇒“ folgende Bedeutungen:&lt;br /&gt;
:⇒: „hat zur Folge“  &lt;br /&gt;
:→: „trägt bei zu“, „verbessert“, „erhöht“&lt;br /&gt;
&lt;br /&gt;
=Zweck=&lt;br /&gt;
Um nützliche und dennoch preiswerte [[Programm]]e und [[Anwendung]]en erstellen zu können, sollte man eine Reihe von [[Programmierprinzipien]] beachten.&lt;br /&gt;
&lt;br /&gt;
Bevor die Programmierprinzipen näher beschrieben werden können, werden zunächst die Ziele genauer spezifiziert, die mit diesen Prinzipien erreicht werden sollen.&lt;br /&gt;
&lt;br /&gt;
=Ziele=&lt;br /&gt;
&lt;br /&gt;
Ziel eines jeden Softwareentwicklungs-Vorhaben sollte die Erstellung von Software sein, die zwei Eigenschaften aufweist:&lt;br /&gt;
 &lt;br /&gt;
; nützlich (useful): Die Software sollte für den Benutzer nützlich sein.&lt;br /&gt;
; preiswert (inexpensive): Die Software sollte so geringe Kosten und Folgekosten verursachen wie möglich.&lt;br /&gt;
&lt;br /&gt;
=Software-Eigenschaften zur Erfüllung der beiden Ziele=&lt;br /&gt;
&lt;br /&gt;
Um die beiden vorgenannten Ziele zu erreichen, sollte ein Softwarepaket folgende Eigenschaften haben:&lt;br /&gt;
&lt;br /&gt;
; spezifiziert (specified): Um die Nützlichkeit und die Korrektheit des Softwarepakets beurteilen zu können, sollte eine Spezifikation vorliegen, die detailliert die Aufgaben und Eigenschaften des Paketes beschreibt.&lt;br /&gt;
&lt;br /&gt;
⇒ Nützlichkeit (ist abschätzbar)&lt;br /&gt;
; korrekt (correct): Die Implementierung des Paketes sollte korrekt sein, es sollte also die Spezifikation in allen Punkten erfüllen.&lt;br /&gt;
&lt;br /&gt;
⇒ keine Kosten durch falsches oder unerwartetes Verhalten&lt;br /&gt;
; robust (robust): Das Softwarepaket sollte auch in abnormalen (nicht-spezifizierten) Situationen stabil laufen.&lt;br /&gt;
&lt;br /&gt;
⇒ keine Kosten durch Inkonsistenzen&lt;br /&gt;
&lt;br /&gt;
⇒ geringe Kosten bei Bedienungsfehlern und Systemausfällen&lt;br /&gt;
; benutzbar (usable): Das Softwarepaket sollte einfach zu erlernen und zu benutzen sein.&lt;br /&gt;
&lt;br /&gt;
⇒ Nützlichkeit wird verbessert&lt;br /&gt;
&lt;br /&gt;
⇒ geringe Schulungskosten&lt;br /&gt;
&lt;br /&gt;
⇒ fehlerhafte Nutzung kommt nur selten vor und hat daher nur selten Kosten zu Folge&lt;br /&gt;
&lt;br /&gt;
⇒ keine Kosten durch frustierte Benutzer&lt;br /&gt;
;sicher (secure): Unautorisierter Zugriff auf Daten oder Programme sollte unmöglich sein.&lt;br /&gt;
&lt;br /&gt;
⇒ keine Kosten durch Sicherheitsmängel&lt;br /&gt;
;effizient (efficient): Das Softwarepakt sollte eine möglichst gute Laufzeit- und Speichereffizienz aufweisen, d.h. die vorhandenen Ressourcen möglichst gut ausnutzen.&lt;br /&gt;
&lt;br /&gt;
⇒ geringe Personalkosten durch geringe Wartezeiten &lt;br /&gt;
&lt;br /&gt;
⇒ geringe Kosten durch geringe Hardwareanforderungen &lt;br /&gt;
; wartbar (maintainable): Das Softwarepaket sollte leicht an neue Gegebenheiten angepasst werden können. Fehler sollten leicht behoben werden können (da sie sich nie ganz vermeiden lassen).&lt;br /&gt;
&lt;br /&gt;
⇒ geringe Wartungskosten&lt;br /&gt;
&lt;br /&gt;
Für die Eigenschaft „wartbar“ gibt es drei Spezialfälle, die hier gesondert genannt werden sollen:&lt;br /&gt;
; kompatibel (compatible): Das Softwarepaket sollte komaptibel zu bestehenden Systemen sein, es sollte also standardisierte Schnittstellen unterstützen.&lt;br /&gt;
&lt;br /&gt;
⇒ geringe Intergrations- und Anpassungskosten &lt;br /&gt;
; portabel (portable): Das Softwarepaket sollte einfach auf neue Systeme portiert werden können.&lt;br /&gt;
&lt;br /&gt;
⇒ geringe Kosten bei Änderung der Ablaufumgebung&lt;br /&gt;
; erweiterbar (extensible): Erweiterungen der Spezifikation sollten schnell implementiert werden können.&lt;br /&gt;
&lt;br /&gt;
⇒ geringe Wartungskosten&lt;br /&gt;
&lt;br /&gt;
=Programmierprinzipien=&lt;br /&gt;
&lt;br /&gt;
Um die vorgenannten Ziele zu erreichen, sollten folgende [[Programmierprinzipien]] beachtet werden:&lt;br /&gt;
&lt;br /&gt;
==[[Verständlichkeit]], Comprehesibility, Lesbarkeit, Readability==&lt;br /&gt;
;Schreibe lesbaren und verständlichen Code.: Der Programmcode sollte so einfach wie möglich gelesen und verstanden werden können. Das heißt, der Code sollte sauber formartiert werden, es sollten sprechende Bezeichner verwendet werden, es sollten sinnvolle Kommentare eingefügt werden etc. Ein erfahrender Programmierer sollte die Bedeutung der einzelnen Anweisungen, Operationen, Defintionen etc. problemlos erfassen können.&lt;br /&gt;
&lt;br /&gt;
→ Überprüfbarkeit (durch Programmierer und nicht nur durch Compiler u.Ä.) (→ Korrektheit, Robustheit)&lt;br /&gt;
&lt;br /&gt;
→ Wartbarkeit (da die Programme auch von anderen Programmierern verstanden werden)&lt;br /&gt;
&lt;br /&gt;
→ Erweiterbarkeit (da die Programme auch von anderen Programmierern verstanden werden)&lt;br /&gt;
&lt;br /&gt;
==[[Schreibbarkeit]], Writability==&lt;br /&gt;
;Verwende eine Programmiersprache und -umgebung, die dich beim Schreiben des Codes unterstützt.: Der Programmcode sollte so einfach wie möglich geschrieben werden können. Zum einen sollte es die Programmiersprache ermöglichen, einfachen und eleganten Code zu schreiben. Und zum anderen sollten die Programmwerkzeuge einen bei der Erstellung des Codes möglichst gut unterstützen.&lt;br /&gt;
&lt;br /&gt;
Vorteile:&lt;br /&gt;
* Code kann schneller erstellt werden.&lt;br /&gt;
* Code kann automatisch formatiert werden.&lt;br /&gt;
* Fehler/Warnungen werden von der Programmierumgebung zeitnah gemeldet.&lt;br /&gt;
* Fehler werden vermieden (wenn beispielsweise Code-Fragmente automatisch generiert werden).&lt;br /&gt;
&lt;br /&gt;
→ Korrektheit&lt;br /&gt;
&lt;br /&gt;
→ Verständlichkeit (→ Korrektheit, Robustheit, Wartbarkeit, Erweiterbarkeit)&lt;br /&gt;
&lt;br /&gt;
==[[Stetigkeit]], Continuity==&lt;br /&gt;
;Schreibe stetigen Code.: Schreibe den Code so, dass kleine Änderungen an der Spezifikation auch nur kleine Änderungen am Code zur Folge haben.&lt;br /&gt;
&lt;br /&gt;
→ Wartbarkeit (der Code kann schnell an neue Gegebenheiten angepasst werden)&lt;br /&gt;
&lt;br /&gt;
→ Erweiterberkeit (der Code kann schnell an neue Gegebenheiten angepasst werden)&lt;br /&gt;
&lt;br /&gt;
→ Wiederverwendbarkeit (der Code kann schnell an neue Gegebenheiten angepasst werden)&lt;br /&gt;
&lt;br /&gt;
==[[Konfigurierbarkeit]], Customizability==&lt;br /&gt;
;Schreibe konfigurierbaren Code.: Konstante Werte sollten im Allgemeinen nicht direkt in den Code eingefügt werden, sondern als konstante Werte separat definiert werden (Ausnahme: triviale Konstanten, die sich sicher nie ändern werden, wie z.B. Vergleiche mit dem Wert &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;). Konstanten, die das Programmverhalten beeinflussen, sollten im Allgemeinen bei Programmstart aus einer Konfigurationsdatei ausgelesen werden.&lt;br /&gt;
&lt;br /&gt;
→ Stetigkeit (→ Wartbarkeit, Erweiterbarkeit, Wiederverwendbarkeit)&lt;br /&gt;
&lt;br /&gt;
==[[Don&#039;t repeat yourself]], DRY&amp;lt;ref&amp;gt;{{Quelle|Hund, Thomas (2003)}}&amp;lt;/ref&amp;gt;==&lt;br /&gt;
;Wiederhole dich nicht.: Code sollte nicht dupliziert und anschließend nur marginal modifiziert werden. &lt;br /&gt;
&lt;br /&gt;
→ Stetigkeit (→ Wartbarkeit, Erweiterbarkeit, Wiederverwendbarkeit)&lt;br /&gt;
&lt;br /&gt;
→ Verständlichkeit (da weniger Code existiert) (→ Korrektheit, Robustheit, Wartbarkeit, Erweiterbarkeit)&lt;br /&gt;
&lt;br /&gt;
→ Robustheit (da keine inkonsitenten Änderungen an mehreren Stellen möglich sind)&lt;br /&gt;
&lt;br /&gt;
==[[Gesetz von Demeter]]&amp;lt;ref&amp;gt;{{Quelle|Lieberherr, Holland (1989)}}&amp;lt;/ref&amp;gt;, Law of Demeter, LoD==&lt;br /&gt;
;„Sprich nur zu deinen nächsten Freunden.“: Ein [[Objekt]] sollte nur [[Methode]]n von Objekten aufrufen, die es „persönlich“ kennt: &lt;br /&gt;
*Objekte, die in [[Zustandsvariable]]n gespeichert sind&lt;br /&gt;
*Objekte, die über direkte [[Beziehung|direkten Beziehungen]] zugänglich sind&lt;br /&gt;
*Objekte, die mittels Parametern beim Methodenaufruf übergeben wurden&lt;br /&gt;
*Objekte, die das aktuelle Objekt selbst erzeugt hat&lt;br /&gt;
&lt;br /&gt;
→ Stetigkeit (→ Wartbarkeit, Erweiterbarkeit, Wiederverwendbarkeit)&lt;br /&gt;
&lt;br /&gt;
→ Verständlichkeit (da die Anzahl der Kommunikationspartner geringer ist) (→ Korrektheit, Robustheit, Wartbarkeit, Erweiterbarkeit)&lt;br /&gt;
&lt;br /&gt;
==[[Überprüfbarkeit]], Verifiability==&lt;br /&gt;
;Schreibe überprüfbaren Code.: Die Korrektheit eines Softwarepakets sollte plattformunabhängig sein und automatisch überprüft werden können. Viele Programmierparadigmen und auch Projekttechniken verlangen zu diesem Zweck, dass gleichzeitig mit der Software auch passende Softwaretests implementiert werden. Noch besser ist es, wenn die Semantik des Programmes formal spezifiert und überprüft werden kann ([[Abstrakter Datentyp|Abstrakte Datentypen]], [[Integritätsbedingung]]en, ...)&lt;br /&gt;
&lt;br /&gt;
→ Korrektheit (insbesondere, wenn die Erfüllung der Spezifikation [[Verifikation|verifiziert]], d.h. formal nachgewisen wird)&lt;br /&gt;
&lt;br /&gt;
→ Robustheit (wenn die Überprüfungen auch durchgeführt werden)&lt;br /&gt;
&lt;br /&gt;
→ Portierbarkeit (wegen der Plattformunabhängigkeit)&lt;br /&gt;
&lt;br /&gt;
==Benutze [[Schnittstelle]]n, Make Use of Interfaces==&lt;br /&gt;
;Benutze Schnittstellen zur Kommunikation mit Objekten, Modulen etc.: Die Verwendung von Schnittstellen zum Zugriff auf und zur Modifikation von Daten/Informationen (an Stelle eines direkten Zugriffes) ermöglicht es, Code lokal zu ändern, ohne dass dies Auswirkungen auf andere Objekte, Module etc. hat (solange sich die Schnittstellen nicht ändern).&lt;br /&gt;
&lt;br /&gt;
→ Spezifikation&lt;br /&gt;
&lt;br /&gt;
→ Verständlichkeit (→ Korrektheit, Robustheit, Wartbarkeit, Erweiterbarkeit) &lt;br /&gt;
&lt;br /&gt;
→ Stetigkeit (→ Wartbarkeit, Erweiterbarkeit, Wiederverwendbarkeit) &lt;br /&gt;
&lt;br /&gt;
→ Überprüfbarkeit (→ Korrektheit, Robustheit, Portierbarkeit) &lt;br /&gt;
&lt;br /&gt;
→ Modularität&lt;br /&gt;
&lt;br /&gt;
==Benutze [[Integritätsbedingung]]en, Make Use of Integrity Constraints, Design by Contract&amp;lt;ref name=&amp;quot;Meyer&amp;quot;&amp;gt;{{Quelle|Meyer, B. (1997): Object-oriented Software Construction}}&amp;lt;/ref&amp;gt;==&lt;br /&gt;
;Benutze und beachte Integritätsbedingungen.: Wann immer möglich sollten Integritätsbedingungen — Vorbedingungen (pre conditions), Nachbedingungen (post conditions), Invarianten (invariants), Zusicherungen (Assertions), Typdefinitionen etc. — definiert und deren Einhaltung auch überprüft werden.&lt;br /&gt;
&lt;br /&gt;
→ Spezifikation&lt;br /&gt;
&lt;br /&gt;
→ Korrektheit&lt;br /&gt;
&lt;br /&gt;
→ Robustheit&lt;br /&gt;
&lt;br /&gt;
→ Überprüfbarkeit (→ Korrektheit, Robustheit, Portierbarkeit) &lt;br /&gt;
&lt;br /&gt;
==[[Liskovsches Substitutionsprinzip]]&amp;lt;ref&amp;gt;{{Quelle|Liskov, Wing (1993)}}&amp;lt;/ref&amp;gt;, LSP, Ersetzbarkeitsprinzip, Liskov substitution principle&amp;lt;ref&amp;gt;{{Quelle|Wikipedia (EN): Liskov substitution principle}}&amp;lt;/ref&amp;gt;==&lt;br /&gt;
;Überschreibe Methoden nicht mit unerwartetem Code.: Eine Methode sollte nicht so überschrieben werden, dass sich ein Objekt einer [[Abgeleitete Klasse|abgeleiteten Klasse]] überraschend anders verhält, als man es aufgrund der Definition der Basisklasse erwarten würde. Mit anderen Worten: Methoden, die in abgeleiteten Klassen neu definiert werden, müssen alle [[Integritätsbedingung]]en (d.h. die Spezifikation) der Basisklasse beachten. Dieses Prinzip kann also ein Spezialfall des vorangehenden Prinzips angesehen werden.&lt;br /&gt;
&lt;br /&gt;
→ Spezifikation&lt;br /&gt;
&lt;br /&gt;
→ Korrektheit&lt;br /&gt;
&lt;br /&gt;
→ Robustheit&lt;br /&gt;
&lt;br /&gt;
==Modularität, Modularity, Teile und herrsche, Divide et impera==&lt;br /&gt;
;Teile und herrsche: Ein komplexes Problem (Vorhaben, Projekt, ...) kann man nur dadurch in den Griff bekommen, dass man es solange in kleinere, möglichst unabhängige Teilprobleme (Teilvorhaben, Phasen, Vorgänge, ...) zerlegt, bis diese lösbar (= beherrschbar) sind. Ein Programm sollte daher &#039;&#039;&#039;modularisiert&#039;&#039;&#039;, d.h. in einzelne &#039;&#039;&#039;Module&#039;&#039;&#039; unterteilt werden.&lt;br /&gt;
&lt;br /&gt;
===Fünf Anforderungen von Bertrand Meyer===&lt;br /&gt;
Bertrand Meyer war einer der ersten, der die Bedeutung der Modularität erkannt und beschrieben hat (vgl. [[Meyer (1997)]]).&lt;br /&gt;
Er hat insgesamt fünf Anforderungen formuliert, die bei der Definition von Modulen beachtet werden sollten:&amp;lt;ref name=&amp;quot;Meyer&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Modulare Zerlegbarkeit, modular decomposability====&lt;br /&gt;
;Zerlege ein Problem in unterschiedliche, seperat lösbare Teilprobleme.&lt;br /&gt;
&lt;br /&gt;
→ Verständlichkeit (→ Korrektheit, Robustheit, Wartbarkeit, Erweiterbarkeit) &lt;br /&gt;
&lt;br /&gt;
→ Wiederverwendbarkeit (wenn die Module weitgehend unabhängig voneinander sind)&lt;br /&gt;
&lt;br /&gt;
→ Erweiterbarkeit&lt;br /&gt;
&lt;br /&gt;
====Modulare Zusammenfügbarkeit, modular composability====&lt;br /&gt;
;Module sollten in möglichst vielen (unterschiedlichen) Situationen/Anwendungen eingesetzt werden können.&lt;br /&gt;
:Das heißt, Module sollten auf unterschiedliche Art und Weise zu neuen Funktionseinheiten zusammengefügt werden können.&lt;br /&gt;
&lt;br /&gt;
→ Wiederverwendbarkeit&lt;br /&gt;
&lt;br /&gt;
→ Erweiterbarkeit&lt;br /&gt;
&lt;br /&gt;
→ Wartbarkeit&lt;br /&gt;
&lt;br /&gt;
→ Überprüfbarkeit (→ Korrektheit, Robustheit, Portierbarkeit)&lt;br /&gt;
&lt;br /&gt;
====Modulare Verständlichkeit, modular understandability====&lt;br /&gt;
;Die Aufgaben eines Moduls sollten verstanden werden, ohne dass man viele andere Module kennen muss.&lt;br /&gt;
&lt;br /&gt;
→ Verständlichkeit (→ Korrektheit, Robustheit, Wartbarkeit, Erweiterbarkeit)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Dies ist ein Spezialfall des Prinzips „[[#Verst.C3.A4ndlichkeit.2C_Comprehesibility.2C_Lesbarkeit.2C_Readability|Verständlichkeit]]“.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====Modulare Stetigkeit, modular continuity====&lt;br /&gt;
;Kleine Änderungen an den Anforderungen sollten nur Änderungen an einer geringen Zahl von Modulen zur Folgen haben.&lt;br /&gt;
:Im besten Fall ist nur ein einziges Modul betroffen.&lt;br /&gt;
&lt;br /&gt;
→ Stetigkeit (→ Wartbarkeit, Erweiterbarkeit, Wiederverwendbarkeit)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Dies ist ein Spezialfall des Prinzips „[[#Stetigkeit.2C_Continuity|Stetigkeit]]“.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====Modulare Robustheit, modular protection====&lt;br /&gt;
;Ein Modul sollte alle abnormalen Fälle selbst behandeln.&lt;br /&gt;
:Das heißt, es sollte sich nicht darauf verlassen, dass ein anderes Modul die Schnittstellen nur gemäß der Spezifikation verwendet.&lt;br /&gt;
&lt;br /&gt;
→ Korrektheit&lt;br /&gt;
&lt;br /&gt;
→ Robustheit&lt;br /&gt;
&lt;br /&gt;
→ Überprüfbarkeit (→ Korrektheit, Robustheit, Portierbarkeit)&lt;br /&gt;
&lt;br /&gt;
→ Wartbarkeit&lt;br /&gt;
&lt;br /&gt;
===Sechs Prinzipien von Bertrand Meyer===&lt;br /&gt;
&lt;br /&gt;
Aus diesen Forderungen leitet Bertrand Meyer sechs Prinzipien ab, die bei der Entwicklung von Modulen beachtet werden sollten.&lt;br /&gt;
&lt;br /&gt;
====Syntaktische Einheiten, syntactical units====&lt;br /&gt;
;Module sind syntaktische Einheiten.: Module sollten unabhängig voneinander übersetzt und in Bibliotheken zur Verfügung gestellt werden können.&lt;br /&gt;
&lt;br /&gt;
→ Wiederverwendbarkeit &lt;br /&gt;
&lt;br /&gt;
→ Korrektheit&lt;br /&gt;
&lt;br /&gt;
→ Robustheit&lt;br /&gt;
&lt;br /&gt;
→ Überprüfbarkeit (→ Korrektheit, Robustheit, Portierbarkeit)&lt;br /&gt;
&lt;br /&gt;
→ Wartbarkeit&lt;br /&gt;
&lt;br /&gt;
====Wenige Schnittstellen, few interfaces====&lt;br /&gt;
; Module sollten wenige Schnittstellen haben.: Module sollten mit so wenig anderen Modulen kommunizieren wie möglich.&lt;br /&gt;
&lt;br /&gt;
→ Wiederverwendbarkeit &lt;br /&gt;
&lt;br /&gt;
→ Verständlichkeit (→ Korrektheit, Robustheit, Wartbarkeit, Erweiterbarkeit) &lt;br /&gt;
&lt;br /&gt;
====Schlanke Interfaces, small interfaces====&lt;br /&gt;
; Module sollten schlanke Schnittstellen haben.: Schnittstellen sollten nicht mit Funktionalität überfrachtet sein. Das heißt, zwei Module sollten über möglichst umfangarme Schnittstellen miteinander kommunizieren.&lt;br /&gt;
&lt;br /&gt;
→ Wartbarkeit&lt;br /&gt;
&lt;br /&gt;
→ Überprüfbarkeit (→ Korrektheit, Robustheit, Portierbarkeit)&lt;br /&gt;
&lt;br /&gt;
====Explizite Schnittstellen, explicit interfaces====&lt;br /&gt;
; Module sollten über explizite Schnittstellen kommunizieren.: Ein Modul sollte nicht über globale Variablen oder andere implizite Kommunikationswege mit anderen Modulen kommunizieren, sondern über explizite Schnittstellen.&lt;br /&gt;
&lt;br /&gt;
→ Verständlichkeit (→ Korrektheit, Robustheit, Wartbarkeit, Erweiterbarkeit) &lt;br /&gt;
&lt;br /&gt;
====(Daten-)[[Kapselung]], Geheimnisprinzip, Encapsulation, information hiding====&lt;br /&gt;
;Informationen sollten in Modulen gekapselt sein.: Jede Information, die nicht notwendig ist, um die Aufgaben bzw. die Funktionalität eines Moduls zu verstehen bzw. zu benutzen, sollte von außen nicht zugänglich sein.&lt;br /&gt;
&lt;br /&gt;
→ Korrektheit&lt;br /&gt;
&lt;br /&gt;
→ Robustheit&lt;br /&gt;
&lt;br /&gt;
→ Überprüfbarkeit (→ Korrektheit, Robustheit, Portierbarkeit)&lt;br /&gt;
&lt;br /&gt;
→ Wiederverwendbarkeit&lt;br /&gt;
&lt;br /&gt;
→ Verständlichkeit (→ Korrektheit, Robustheit, Wartbarkeit, Erweiterbarkeit) &lt;br /&gt;
&lt;br /&gt;
====Offen-geschlossen-Prinzip, open-closed principl)====&lt;br /&gt;
; Module sollten sowohl offen, als auch geschlossen sein.: Module sollten sowohl offen für Veränderungen, als auch abgeschlossen gegenüber Veränderungen sein. Da heißt, ein funktionierendes Modul sollte möglichst nicht mehr verändert werden, aber andererseits sollte es problemlos möglich sein, ein Modul an neue Gegebenheiten anzupassen. In objektorientierten Sprachen wird dies vor allem durch [[Vererbung]], [[Überschreiben|Überschreiben von Methoden]] und die Verwendung von [[Abstrakte Klasse|Abstrakten Klassen]] (insbesondere [[Interface]]s) erreicht.&lt;br /&gt;
&lt;br /&gt;
→ Wiederverwendbarkeit (wenn Module offen sind)&lt;br /&gt;
&lt;br /&gt;
→ Erweiterbar (wenn Module offen sind)&lt;br /&gt;
&lt;br /&gt;
→ Robustheit (wenn getestete Module geschlossen sind)&lt;br /&gt;
&lt;br /&gt;
→ Wartbarkeit (wenn funtionierende Module geschlossen sind; jede Änderung an einem Modul hat eventuell weitere Änderungen zu Folgen → dies soll nach Möglichkeit vermieden werden)&lt;br /&gt;
&lt;br /&gt;
===Weitere Modul-Prinzipien===&lt;br /&gt;
&lt;br /&gt;
Seit den wegweisenden Arbeiten von Bertrand Meyer aus den späten 80er-Jahren wurden weitere Prinzipien entwickelt, die die Definition von Modulen betreffen.&lt;br /&gt;
&lt;br /&gt;
====[[Entwurfsmuster|Verwende Design Patterns]]&amp;lt;ref&amp;gt;{{Quelle|Gamma et al. (1995)}}&amp;lt;/ref&amp;gt;====&lt;br /&gt;
;Verwende die in [[Entwurfsmuster]]n (design patterns) definierten Modul-„Schablonen“.:In der Programmierung gibt es viele Aufgaben, die immer wiederkehren, wie zum Beispiel das Durchlaufen einer Menge von Objekten. Für zahlreiche derartige Aufgaben gibt es praxiserprobte Modul-„Schablonen“. Diese beschreiben, welche Schnittstellen, Klassen, Objekte etc. benötigt werden, um die jeweilige Aufgabe zu lösen.&lt;br /&gt;
&lt;br /&gt;
→ Wiederverwendbarkeit&lt;br /&gt;
&lt;br /&gt;
→ Korrektheit&lt;br /&gt;
&lt;br /&gt;
→ Robustheit&lt;br /&gt;
&lt;br /&gt;
→ Verständlichkeit (→ Korrektheit, Robustheit, Wartbarkeit, Erweiterbarkeit)&lt;br /&gt;
&lt;br /&gt;
====[[Separation of concerns]]&amp;lt;ref&amp;gt;{{Quelle|Wikipedia (EN): Separation of concerns}}&amp;lt;/ref&amp;gt;====&lt;br /&gt;
;Jede Aufgabe wird von genau einem Modul erfüllt.: Man also die „Verantwortlichkeiten“ unter den Modulen aufteilen, sonst gehen die Vorteile der Modularisierung zum Teil wieder verloren.&lt;br /&gt;
&lt;br /&gt;
====[[Single responsibility principle]]&amp;lt;ref&amp;gt;{{Quelle|Wikipedia (EN): Single responsibility principle}}&amp;lt;/ref&amp;gt;====&lt;br /&gt;
;Jede Aufgabe wird von genau einem Modul erfüllt und jedes Modul erfüllt genau eine Aufgabe.:Bei der [[objektorientierten Programmierung]] treibt man die Modularisierung manchmal sogar so weit, dass nicht nur für jede Aufgabe höchstens ein Objekt zuständig ist (Separations of Conerns), sondern dass umgekehrt auch jedes Objekt für genau eine Aufgabe zuständig ist (Single responsibility principle).&lt;br /&gt;
:Das heißt, für jedes Modul gibt es genau einen Grund, warum es geändert werden muss: Die eine Aufgabe, die es hat, ändert sich.&lt;br /&gt;
&lt;br /&gt;
→ Robustheit&lt;br /&gt;
&lt;br /&gt;
====[[Interface-Segregation-Prinzip]]&amp;lt;ref&amp;gt;{{Quelle|Martin, R.C. (1996): The Interface Segregation Principle}}&amp;lt;/ref&amp;gt;, Interface segregation principle====&lt;br /&gt;
;Zu große Interfaces sollten in mehrere Interfaces aufgeteilt werden.: Ein Modul, das ein Interface benutzt, sollte nur diejenigen Methoden präsentiert bekommen, die sie auch wirklich benötigt. Dieses Prinzip formuliert eine konkrete Möglichkeit, wie man die von Meyer geforderten schlanken Schnittstellen realisieren kann.&lt;br /&gt;
&lt;br /&gt;
→ Wartbarkeit&lt;br /&gt;
&lt;br /&gt;
→ Wiederverwendbarkeit&lt;br /&gt;
&lt;br /&gt;
→ Überprüfbarkeit (→ Korrektheit, Robustheit, Portierbarkeit)&lt;br /&gt;
&lt;br /&gt;
=Quellen=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li  value=&amp;quot;9&amp;quot;&amp;gt;{{Quelle|Wintersteiger, A.; Mathis, Ch. (2011): Clean Code – Prinzipien bei der Entwicklung von sauberem Code}}&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;{{Quelle|Kowarschick, W.: Multimedia-Programmierung}}&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Siehe auch=&lt;br /&gt;
&lt;br /&gt;
#{{Vgl|Softwaretechnik}}&lt;br /&gt;
#{{Vgl|Wikipedia (EN): DRY}}&lt;br /&gt;
#[[WikipediaEn:Category:Programming_principles]]&lt;br /&gt;
#[[Wikipedia:Prinzipien Objektorientierten Designs]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Programmierprinzip]]&lt;br /&gt;
[[Kategorie:Programmierung]]&lt;br /&gt;
[[Kategorie:HowTo]]&lt;br /&gt;
[[en:Programing principles]]&lt;/div&gt;</summary>
		<author><name>Rayza</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=HTML-Tutorium:_SVG:_Hello_World_02&amp;diff=24274</id>
		<title>HTML-Tutorium: SVG: Hello World 02</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=HTML-Tutorium:_SVG:_Hello_World_02&amp;diff=24274"/>
		<updated>2012-10-24T19:27:32Z</updated>

		<summary type="html">&lt;p&gt;Rayza: /* HTML 4 vs. HTML5 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{HTML-Tutorium:SVG:HelloWorld:Menü}}&lt;br /&gt;
&#039;&#039;&#039;Musterlösung&#039;&#039;&#039;: [http://glossar.hs-augsburg.de/beispiel/tutorium/html_svg/hello_world/html_svg_hello_world_04/WebContent/hallo.html &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
(SVN-Repositories: [http://glossar.hs-augsburg.de/beispiel/tutorium/html_svg/hello_world/html_svg_hello_world_02 Pendant zu Teil 2 des Canvas-Tutoriums],&lt;br /&gt;
[http://glossar.hs-augsburg.de/beispiel/tutorium/html_svg/hello_world/html_svg_hello_world_03 Pendant zu Teil 3],&lt;br /&gt;
[http://glossar.hs-augsburg.de/beispiel/tutorium/html_svg/hello_world/html_svg_hello_world_04 Pendant zu Teil 4])&lt;br /&gt;
&lt;br /&gt;
=Voraussetzung=&lt;br /&gt;
&lt;br /&gt;
Sie sollten die Inhalte der Tutorien [[HTML5-Tutorium: Canvas: Hello World 02]],  [[HTML5-Tutorium: Canvas: Hello World 03|Hello World 03]] und [[HTML5-Tutorium: Canvas: Hello World 04|Hello World 04]]&lt;br /&gt;
sowie des Tutoriums [[HTML-Tutorium: SVG: Hello World 01]] kennen.&lt;br /&gt;
&lt;br /&gt;
=Ziel: Ausgabe von „Hallo &amp;amp;lt;Benutzername&amp;amp;gt;!“ als SVG-Grafik=&lt;br /&gt;
&lt;br /&gt;
Die in [[HTML-Tutorium: SVG: Hello World 01]] erstellte Hello-World-Anwendung wird so umgeschrieben,&lt;br /&gt;
dass ein Benutzer seinen Namen eingeben kann und er nach Klick auf den &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;-Button mit seinem Namen&lt;br /&gt;
begrüßt wird.&lt;br /&gt;
&lt;br /&gt;
=Anwendungen „&amp;lt;code&amp;gt;HelloWorldSVG02&amp;lt;/code&amp;gt;“, „&amp;lt;code&amp;gt;HelloWorldSVG03&amp;lt;/code&amp;gt;“ und „&amp;lt;code&amp;gt;HelloWorldSVG04&amp;lt;/code&amp;gt;“=&lt;br /&gt;
&lt;br /&gt;
Gehen Sie bei der Erweiterung der SVG-Hello-World-Anwendung genauso vor, wie bei der&lt;br /&gt;
Erweiterung der Canvas-Hello-World-Anwendung. Das heißt, befolgen Sie die Anweisungen&lt;br /&gt;
der Tutorien&lt;br /&gt;
* [[HTML5-Tutorium:_Canvas:_Hello_World_02]],&lt;br /&gt;
* [[HTML5-Tutorium:_Canvas:_Hello_World_03]] und&lt;br /&gt;
* [[HTML5-Tutorium:_Canvas:_Hello_World_04]],&lt;br /&gt;
ersetzen dabei aber jedes Mal den Canvas-Code durch einen äquivalenten SVG-Code.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie beim Erzeugen des SVG-Codes Probleme haben sollten, können Sie in den&lt;br /&gt;
SVG-Musterlösungen spicken:&lt;br /&gt;
*[http://glossar.hs-augsburg.de/beispiel/tutorium/html_svg/hello_world/html_svg_hello_world_01 Pendant zu Teil 1 des Canvas-Tutoriums]&lt;br /&gt;
*[http://glossar.hs-augsburg.de/beispiel/tutorium/html_svg/hello_world/html_svg_hello_world_02 Pendant zu Teil 2 des Canvas-Tutoriums]&lt;br /&gt;
*[http://glossar.hs-augsburg.de/beispiel/tutorium/html_svg/hello_world/html_svg_hello_world_03 Pendant zu Teil 3 des Canvas-Tutoriums]&lt;br /&gt;
*[http://glossar.hs-augsburg.de/beispiel/tutorium/html_svg/hello_world/html_svg_hello_world_04 Pendant zu Teil 4 des Canvas-Tutoriums]&lt;br /&gt;
&lt;br /&gt;
=HTML 4 vs. HTML5 =&lt;br /&gt;
&lt;br /&gt;
Beachten Sie, dass Teil 1 des SVG-Hello-World-Tutoriums in HTML 4 geschrieben wurde, während&lt;br /&gt;
das Canvas-Hello-World-Tutorium in HTML5 realisiert wurde.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie den Code der Canvas-Tutorien 2, 3 und 4 für das SVG-Tutorium wiederverwenden wollen,&lt;br /&gt;
sollten Sie die Datei hallo.html jeweils ebenfalls von HTML5 auf HTML 4 umstellen.&lt;br /&gt;
Hierbei ergeben sich lauter kleine subtile Veränaderungen.&lt;br /&gt;
&lt;br /&gt;
Beispielsweise muss man anstelle von &lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;css/all.min.css&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
in HTML 4&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;css/all.min.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
schreiben.&lt;br /&gt;
Für Formulare gibt es das &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt;-Element noch nicht.&lt;br /&gt;
Dafür müssen Formularelemente in &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt;-Elemente (oder Änhliches)&lt;br /&gt;
„gepackt“ werden. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form action=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;p class=&amp;quot;form&amp;quot;&amp;gt;&lt;br /&gt;
    Ihr Name:&lt;br /&gt;
    &amp;lt;input id=&amp;quot;d_name&amp;quot; type=&amp;quot;text&amp;quot;   value=&amp;quot;&amp;quot;                            &amp;gt;&lt;br /&gt;
    &amp;lt;input             type=&amp;quot;button&amp;quot; value=&amp;quot;OK&amp;quot; onmousedown=&amp;quot;sayHello()&amp;quot; &amp;gt;&lt;br /&gt;
  &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Von diesen &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt;-Elementen sollten per CSS der Rand (&amp;lt;code&amp;gt;margin&amp;lt;/code&amp;gt;)&lt;br /&gt;
entfernt werden, damit das Layout erhalten bleibt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* In HTML 4 müssen Formularelemente in p-Elemente (oder Ähnliches)&lt;br /&gt;
 * eingebettet werden. Damit diese Elemente optisch nicht auffallen, &lt;br /&gt;
 * wird ihr Rand eliminiert. &lt;br /&gt;
 */&lt;br /&gt;
.form&lt;br /&gt;
{&lt;br /&gt;
  margin: 0px;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Etc. pp.&lt;br /&gt;
&lt;br /&gt;
Um zu überprüfen, ob man validen HTML-Code erzeugt hat, kann man &lt;br /&gt;
sich des [http://validator.w3.org/#validate_by_upload W3C-HTML-Validators] bedienen.&lt;br /&gt;
Das sollten man bei allen HTML-Dateien machen, die man erstellt.&lt;br /&gt;
&lt;br /&gt;
Die Musterlösungen dieses Tutoriums sind valide:&lt;br /&gt;
&lt;br /&gt;
* [http://validator.w3.org/check?uri=http%3A%2F%2Fglossar.hs-augsburg.de%2Fbeispiel%2Ftutorium%2Fhtml_svg%2Fhello_world%2Fhtml_svg_hello_world_01%2FWebContent%2Fhallo.html&amp;amp;charset=%28detect+automatically%29&amp;amp;doctype=Inline&amp;amp;group=0 Validierung des SVG-Beispiels, Teil 1]&lt;br /&gt;
*  [http://validator.w3.org/check?uri=http%3A%2F%2Fglossar.hs-augsburg.de%2Fbeispiel%2Ftutorium%2Fhtml_svg%2Fhello_world%2Fhtml_svg_hello_world_02%2FWebContent%2Fhallo.html&amp;amp;charset=%28detect+automatically%29&amp;amp;doctype=Inline&amp;amp;group=0 Validierung des SVG-Beispiels, Teil 2]&lt;br /&gt;
*  [http://validator.w3.org/check?uri=http%3A%2F%2Fglossar.hs-augsburg.de%2Fbeispiel%2Ftutorium%2Fhtml_svg%2Fhello_world%2Fhtml_svg_hello_world_03%2FWebContent%2Fhallo.html&amp;amp;charset=%28detect+automatically%29&amp;amp;doctype=Inline&amp;amp;group=0 Validierung des SVG-Beispiels, Teil 3]&lt;br /&gt;
*  [http://validator.w3.org/check?uri=http%3A%2F%2Fglossar.hs-augsburg.de%2Fbeispiel%2Ftutorium%2Fhtml_svg%2Fhello_world%2Fhtml_svg_hello_world_04%2FWebContent%2Fhallo.html&amp;amp;charset=%28detect+automatically%29&amp;amp;doctype=Inline&amp;amp;group=0 Validierung des SVG-Beispiels, Teil 4]&lt;br /&gt;
&lt;br /&gt;
==Anmerkung==&lt;br /&gt;
&lt;br /&gt;
Für HTML5 funktioniert der W3C-Validator auch. Er garantiert die Validität allerdings derzeit noch nicht, da HTML5&lt;br /&gt;
noch nicht verabschiedet wurde:&lt;br /&gt;
&lt;br /&gt;
* [http://validator.w3.org/check?uri=http%3A%2F%2Fglossar.hs-augsburg.de%2Fbeispiel%2Ftutorium%2Fhtml5_canvas%2Fhello_world%2Fhtml5_canvas_hello_world_01%2FWebContent%2Fhallo.html&amp;amp;charset=%28detect+automatically%29&amp;amp;doctype=Inline&amp;amp;group=0&amp;amp;user-agent=W3C_Validator%2F1.3 Validierung des Canvas-Beispiels, Teil 1]&lt;br /&gt;
* [http://validator.w3.org/check?uri=http%3A%2F%2Fglossar.hs-augsburg.de%2Fbeispiel%2Ftutorium%2Fhtml5_canvas%2Fhello_world%2Fhtml5_canvas_hello_world_02%2FWebContent%2Fhallo.html&amp;amp;charset=%28detect+automatically%29&amp;amp;doctype=Inline&amp;amp;group=0&amp;amp;user-agent=W3C_Validator%2F1.3 Validierung des Canvas-Beispiels, Teil 2]&lt;br /&gt;
* [http://validator.w3.org/check?uri=http%3A%2F%2Fglossar.hs-augsburg.de%2Fbeispiel%2Ftutorium%2Fhtml5_canvas%2Fhello_world%2Fhtml5_canvas_hello_world_03%2FWebContent%2Fhallo.html&amp;amp;charset=%28detect+automatically%29&amp;amp;doctype=Inline&amp;amp;group=0&amp;amp;user-agent=W3C_Validator%2F1.3 Validierung des Canvas-Beispiels, Teil 3]&lt;br /&gt;
* [http://validator.w3.org/check?uri=http%3A%2F%2Fglossar.hs-augsburg.de%2Fbeispiel%2Ftutorium%2Fhtml5_canvas%2Fhello_world%2Fhtml5_canvas_hello_world_04%2FWebContent%2Fhallo.html&amp;amp;charset=%28detect+automatically%29&amp;amp;doctype=Inline&amp;amp;group=0&amp;amp;user-agent=W3C_Validator%2F1.3 Validierung des Canvas-Beispiels, Teil 4]&lt;br /&gt;
&lt;br /&gt;
=Ein kleiner Optimierungstipp=&lt;br /&gt;
&lt;br /&gt;
Die Größe des Canvas muss nur an einer Stelle festgelegt werden, bei der Erzeugung des Canvas-Objektes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  g_canvas        = document.getElementById(&amp;quot;d_canvas&amp;quot;);&lt;br /&gt;
  g_canvas.width  = 300;&lt;br /&gt;
  g_canvas.height =  27;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Raphaël muss die Größe dagegen an zwei Stellen angegeben werden. Bei der&lt;br /&gt;
Erzeugung der Bühne&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  g_canvas = new Raphael(&amp;quot;d_canvas&amp;quot;, 300, 27); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
sowie in einer CSS-Datei (z.B. bei der Festlegung des Layouts der Umrandung ):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
#d_canvas&lt;br /&gt;
{&lt;br /&gt;
  width:        300px;&lt;br /&gt;
  height:       27px;&lt;br /&gt;
&lt;br /&gt;
  ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Grund dafür ist, dass in HTML5 zwar ein spezielles &amp;lt;code&amp;gt;canvas&amp;lt;/code&amp;gt;-Element existiert, &lt;br /&gt;
aber kein spezielles &amp;lt;code&amp;gt;svg&amp;lt;/code&amp;gt;-Element. Ersatzweise wird in Raphaël daher ein&lt;br /&gt;
&amp;lt;code&amp;gt;div&amp;lt;/code&amp;gt;-Element verwendet, dessen Größe dann allerdings via CSS explizit festgelegt werden&lt;br /&gt;
muss.&lt;br /&gt;
&lt;br /&gt;
Die Definition der Größe einer Raphaël-Bühne an zwei unterschiedlichen Stellen&lt;br /&gt;
sollte vermieden werden, da es bei Änderung der Bühnengröße zu Inkonsitenzen kommen kann&lt;br /&gt;
(wenn die Größe versehentlich nur an einer Stelle geändert wird). Code-Verdopplung sollte&lt;br /&gt;
gemäß dem [[Programmierprinzip#Don.27t_repeat_yourself.2C_DRY.5B4.5D|Programmierprinzip  „Don&#039;t repeat yourself“ (Dry)]]&lt;br /&gt;
sowieso stets vermieden werden.&lt;br /&gt;
&lt;br /&gt;
In der Version 4 des SVG-Hello-World-Tutoriums kann dieses Problem recht elegant gelöst werden.&lt;br /&gt;
Die Größe der Bühne wird in der JavaScript-Datei &amp;lt;code&amp;gt;CONSTANT.js&amp;lt;/code&amp;gt; festgelegt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var CANVAS_WIDTH  = 300; &lt;br /&gt;
var CANVAS_HEIGHT =  27; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei der Formatierung der Raphaël-Bühne (Hervorhebung des Randes) wird die Größe des zugehörigen &lt;br /&gt;
&amp;lt;code&amp;gt;div&amp;lt;/code&amp;gt;-Containers nicht mehr mittels statischem CSS sondern mittels JavaScript (genauer: jQuery)&lt;br /&gt;
unter Rückgriff auf diese beiden Konstanten festgelegt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  g_canvas = new Raphael(&amp;quot;d_canvas&amp;quot;, CANVAS_WIDTH, CANVAS_HEIGHT); &lt;br /&gt;
  $(&amp;quot;#d_canvas&amp;quot;)&lt;br /&gt;
    .css ({&amp;quot;width&amp;quot;:  CANVAS_WIDTH,&lt;br /&gt;
           &amp;quot;height&amp;quot;: CANVAS_HEIGHT,&lt;br /&gt;
          });&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Quellen=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&amp;lt;ol start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; {{Quelle|Kowarschick, W.: Multimedia-Programmierung}}&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
Die restlichen Quellen wurden direkt im Text angegeben.&lt;br /&gt;
&lt;br /&gt;
=Fortsetzung des Tutoriums=&lt;br /&gt;
&lt;br /&gt;
Bearbeiten Sie nun das [[HTML5-Tutorium: Canvas: MiniPong|Minipong-Canvas-Tutorium]], sofern Sie dies noch nicht gemacht haben.&lt;br /&gt;
Anderenfalls können Sie gleich mit dem [[HTML-Tutorium: SVG: MiniPong|Minipong-SVG-Tutorium]] forfahren.&lt;br /&gt;
[[Kategorie: HTML-Tutorium: SVG: Hello World]][[Kategorie: HTML-Beispiel]][[Kategorie:Kapitel:Multimedia-Programmierung:Beispiele]]&lt;/div&gt;</summary>
		<author><name>Rayza</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=HTML-Tutorium:_SVG:_Hello_World_02&amp;diff=24273</id>
		<title>HTML-Tutorium: SVG: Hello World 02</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=HTML-Tutorium:_SVG:_Hello_World_02&amp;diff=24273"/>
		<updated>2012-10-24T19:25:10Z</updated>

		<summary type="html">&lt;p&gt;Rayza: /* HTML 4 vs. HTML5 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{HTML-Tutorium:SVG:HelloWorld:Menü}}&lt;br /&gt;
&#039;&#039;&#039;Musterlösung&#039;&#039;&#039;: [http://glossar.hs-augsburg.de/beispiel/tutorium/html_svg/hello_world/html_svg_hello_world_04/WebContent/hallo.html &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
(SVN-Repositories: [http://glossar.hs-augsburg.de/beispiel/tutorium/html_svg/hello_world/html_svg_hello_world_02 Pendant zu Teil 2 des Canvas-Tutoriums],&lt;br /&gt;
[http://glossar.hs-augsburg.de/beispiel/tutorium/html_svg/hello_world/html_svg_hello_world_03 Pendant zu Teil 3],&lt;br /&gt;
[http://glossar.hs-augsburg.de/beispiel/tutorium/html_svg/hello_world/html_svg_hello_world_04 Pendant zu Teil 4])&lt;br /&gt;
&lt;br /&gt;
=Voraussetzung=&lt;br /&gt;
&lt;br /&gt;
Sie sollten die Inhalte der Tutorien [[HTML5-Tutorium: Canvas: Hello World 02]],  [[HTML5-Tutorium: Canvas: Hello World 03|Hello World 03]] und [[HTML5-Tutorium: Canvas: Hello World 04|Hello World 04]]&lt;br /&gt;
sowie des Tutoriums [[HTML-Tutorium: SVG: Hello World 01]] kennen.&lt;br /&gt;
&lt;br /&gt;
=Ziel: Ausgabe von „Hallo &amp;amp;lt;Benutzername&amp;amp;gt;!“ als SVG-Grafik=&lt;br /&gt;
&lt;br /&gt;
Die in [[HTML-Tutorium: SVG: Hello World 01]] erstellte Hello-World-Anwendung wird so umgeschrieben,&lt;br /&gt;
dass ein Benutzer seinen Namen eingeben kann und er nach Klick auf den &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;-Button mit seinem Namen&lt;br /&gt;
begrüßt wird.&lt;br /&gt;
&lt;br /&gt;
=Anwendungen „&amp;lt;code&amp;gt;HelloWorldSVG02&amp;lt;/code&amp;gt;“, „&amp;lt;code&amp;gt;HelloWorldSVG03&amp;lt;/code&amp;gt;“ und „&amp;lt;code&amp;gt;HelloWorldSVG04&amp;lt;/code&amp;gt;“=&lt;br /&gt;
&lt;br /&gt;
Gehen Sie bei der Erweiterung der SVG-Hello-World-Anwendung genauso vor, wie bei der&lt;br /&gt;
Erweiterung der Canvas-Hello-World-Anwendung. Das heißt, befolgen Sie die Anweisungen&lt;br /&gt;
der Tutorien&lt;br /&gt;
* [[HTML5-Tutorium:_Canvas:_Hello_World_02]],&lt;br /&gt;
* [[HTML5-Tutorium:_Canvas:_Hello_World_03]] und&lt;br /&gt;
* [[HTML5-Tutorium:_Canvas:_Hello_World_04]],&lt;br /&gt;
ersetzen dabei aber jedes Mal den Canvas-Code durch einen äquivalenten SVG-Code.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie beim Erzeugen des SVG-Codes Probleme haben sollten, können Sie in den&lt;br /&gt;
SVG-Musterlösungen spicken:&lt;br /&gt;
*[http://glossar.hs-augsburg.de/beispiel/tutorium/html_svg/hello_world/html_svg_hello_world_01 Pendant zu Teil 1 des Canvas-Tutoriums]&lt;br /&gt;
*[http://glossar.hs-augsburg.de/beispiel/tutorium/html_svg/hello_world/html_svg_hello_world_02 Pendant zu Teil 2 des Canvas-Tutoriums]&lt;br /&gt;
*[http://glossar.hs-augsburg.de/beispiel/tutorium/html_svg/hello_world/html_svg_hello_world_03 Pendant zu Teil 3 des Canvas-Tutoriums]&lt;br /&gt;
*[http://glossar.hs-augsburg.de/beispiel/tutorium/html_svg/hello_world/html_svg_hello_world_04 Pendant zu Teil 4 des Canvas-Tutoriums]&lt;br /&gt;
&lt;br /&gt;
=HTML 4 vs. HTML5 =&lt;br /&gt;
&lt;br /&gt;
Beachten Sie, dass Teil 1 des SVG-Hello-World-Tutoriums in HTML 4 geschrieben wurde, während&lt;br /&gt;
das Canvas-Hello-World-Tutorium in HTML5 realisiert wurde.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie den Code der Canvas-Tutorien 2, 3 und 4 für das SVG-Tutorium wiederverwenden wollen,&lt;br /&gt;
sollten Sie die Datei hallo.html jeweils ebenfalls von HTML5 auf HTML 4 umstellen.&lt;br /&gt;
Hierbei ergeben sich lauter kleine subtile Veränaderungen.&lt;br /&gt;
&lt;br /&gt;
Beispielsweise muss man anstelle von &lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;css/all.min.css&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
in HTML 4&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;css/all.min.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
schreiben.&lt;br /&gt;
Für Formulare gibt es das &amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt;-Element noch nicht.&lt;br /&gt;
Dafür müssen Formularelemente in &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt;-Elemente (oder Änhliches)&lt;br /&gt;
„gepackt“ werden. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form action=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;p class=&amp;quot;form&amp;quot;&amp;gt;&lt;br /&gt;
    Ihr Name:&lt;br /&gt;
    &amp;lt;input id=&amp;quot;d_name&amp;quot; type=&amp;quot;text&amp;quot;   value=&amp;quot;&amp;quot;                            &amp;gt;&lt;br /&gt;
    &amp;lt;input             type=&amp;quot;button&amp;quot; value=&amp;quot;OK&amp;quot; onmousedown=&amp;quot;sayHello()&amp;quot; &amp;gt;&lt;br /&gt;
  &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Von diesen &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt;-Elementen sollten per CSS der Rand (&amp;lt;code&amp;gt;marin&amp;lt;/code&amp;gt;)&lt;br /&gt;
entfernt werden, damit das Layout erhalten bleibt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* In HTML 4 müssen Formularelemente in p-Elemente (oder Ähnliches)&lt;br /&gt;
 * eingebettet werden. Damit diese Elemente optisch nicht auffallen, &lt;br /&gt;
 * wird ihr Rand eliminiert. &lt;br /&gt;
 */&lt;br /&gt;
.form&lt;br /&gt;
{&lt;br /&gt;
  margin: 0px;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Etc. pp.&lt;br /&gt;
&lt;br /&gt;
Um zu überprüfen, ob man validen HTML-Code erzeugt hat, kann man &lt;br /&gt;
sich des [http://validator.w3.org/#validate_by_upload W3C-HTML-Validators] bedienen.&lt;br /&gt;
Das sollten man bei allen HTML-Dateien machen, die man erstellt.&lt;br /&gt;
&lt;br /&gt;
Die Musterlösungen dieses Tutoriums sind valide:&lt;br /&gt;
&lt;br /&gt;
* [http://validator.w3.org/check?uri=http%3A%2F%2Fglossar.hs-augsburg.de%2Fbeispiel%2Ftutorium%2Fhtml_svg%2Fhello_world%2Fhtml_svg_hello_world_01%2FWebContent%2Fhallo.html&amp;amp;charset=%28detect+automatically%29&amp;amp;doctype=Inline&amp;amp;group=0 Validierung des SVG-Beispiels, Teil 1]&lt;br /&gt;
*  [http://validator.w3.org/check?uri=http%3A%2F%2Fglossar.hs-augsburg.de%2Fbeispiel%2Ftutorium%2Fhtml_svg%2Fhello_world%2Fhtml_svg_hello_world_02%2FWebContent%2Fhallo.html&amp;amp;charset=%28detect+automatically%29&amp;amp;doctype=Inline&amp;amp;group=0 Validierung des SVG-Beispiels, Teil 2]&lt;br /&gt;
*  [http://validator.w3.org/check?uri=http%3A%2F%2Fglossar.hs-augsburg.de%2Fbeispiel%2Ftutorium%2Fhtml_svg%2Fhello_world%2Fhtml_svg_hello_world_03%2FWebContent%2Fhallo.html&amp;amp;charset=%28detect+automatically%29&amp;amp;doctype=Inline&amp;amp;group=0 Validierung des SVG-Beispiels, Teil 3]&lt;br /&gt;
*  [http://validator.w3.org/check?uri=http%3A%2F%2Fglossar.hs-augsburg.de%2Fbeispiel%2Ftutorium%2Fhtml_svg%2Fhello_world%2Fhtml_svg_hello_world_04%2FWebContent%2Fhallo.html&amp;amp;charset=%28detect+automatically%29&amp;amp;doctype=Inline&amp;amp;group=0 Validierung des SVG-Beispiels, Teil 4]&lt;br /&gt;
&lt;br /&gt;
==Anmerkung==&lt;br /&gt;
&lt;br /&gt;
Für HTML5 funktioniert der W3C-Validator auch. Er garantiert die Validität allerdings derzeit noch nicht, da HTML5&lt;br /&gt;
noch nicht verabschiedet wurde:&lt;br /&gt;
&lt;br /&gt;
* [http://validator.w3.org/check?uri=http%3A%2F%2Fglossar.hs-augsburg.de%2Fbeispiel%2Ftutorium%2Fhtml5_canvas%2Fhello_world%2Fhtml5_canvas_hello_world_01%2FWebContent%2Fhallo.html&amp;amp;charset=%28detect+automatically%29&amp;amp;doctype=Inline&amp;amp;group=0&amp;amp;user-agent=W3C_Validator%2F1.3 Validierung des Canvas-Beispiels, Teil 1]&lt;br /&gt;
* [http://validator.w3.org/check?uri=http%3A%2F%2Fglossar.hs-augsburg.de%2Fbeispiel%2Ftutorium%2Fhtml5_canvas%2Fhello_world%2Fhtml5_canvas_hello_world_02%2FWebContent%2Fhallo.html&amp;amp;charset=%28detect+automatically%29&amp;amp;doctype=Inline&amp;amp;group=0&amp;amp;user-agent=W3C_Validator%2F1.3 Validierung des Canvas-Beispiels, Teil 2]&lt;br /&gt;
* [http://validator.w3.org/check?uri=http%3A%2F%2Fglossar.hs-augsburg.de%2Fbeispiel%2Ftutorium%2Fhtml5_canvas%2Fhello_world%2Fhtml5_canvas_hello_world_03%2FWebContent%2Fhallo.html&amp;amp;charset=%28detect+automatically%29&amp;amp;doctype=Inline&amp;amp;group=0&amp;amp;user-agent=W3C_Validator%2F1.3 Validierung des Canvas-Beispiels, Teil 3]&lt;br /&gt;
* [http://validator.w3.org/check?uri=http%3A%2F%2Fglossar.hs-augsburg.de%2Fbeispiel%2Ftutorium%2Fhtml5_canvas%2Fhello_world%2Fhtml5_canvas_hello_world_04%2FWebContent%2Fhallo.html&amp;amp;charset=%28detect+automatically%29&amp;amp;doctype=Inline&amp;amp;group=0&amp;amp;user-agent=W3C_Validator%2F1.3 Validierung des Canvas-Beispiels, Teil 4]&lt;br /&gt;
&lt;br /&gt;
=Ein kleiner Optimierungstipp=&lt;br /&gt;
&lt;br /&gt;
Die Größe des Canvas muss nur an einer Stelle festgelegt werden, bei der Erzeugung des Canvas-Objektes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  g_canvas        = document.getElementById(&amp;quot;d_canvas&amp;quot;);&lt;br /&gt;
  g_canvas.width  = 300;&lt;br /&gt;
  g_canvas.height =  27;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Raphaël muss die Größe dagegen an zwei Stellen angegeben werden. Bei der&lt;br /&gt;
Erzeugung der Bühne&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  g_canvas = new Raphael(&amp;quot;d_canvas&amp;quot;, 300, 27); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
sowie in einer CSS-Datei (z.B. bei der Festlegung des Layouts der Umrandung ):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
#d_canvas&lt;br /&gt;
{&lt;br /&gt;
  width:        300px;&lt;br /&gt;
  height:       27px;&lt;br /&gt;
&lt;br /&gt;
  ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Grund dafür ist, dass in HTML5 zwar ein spezielles &amp;lt;code&amp;gt;canvas&amp;lt;/code&amp;gt;-Element existiert, &lt;br /&gt;
aber kein spezielles &amp;lt;code&amp;gt;svg&amp;lt;/code&amp;gt;-Element. Ersatzweise wird in Raphaël daher ein&lt;br /&gt;
&amp;lt;code&amp;gt;div&amp;lt;/code&amp;gt;-Element verwendet, dessen Größe dann allerdings via CSS explizit festgelegt werden&lt;br /&gt;
muss.&lt;br /&gt;
&lt;br /&gt;
Die Definition der Größe einer Raphaël-Bühne an zwei unterschiedlichen Stellen&lt;br /&gt;
sollte vermieden werden, da es bei Änderung der Bühnengröße zu Inkonsitenzen kommen kann&lt;br /&gt;
(wenn die Größe versehentlich nur an einer Stelle geändert wird). Code-Verdopplung sollte&lt;br /&gt;
gemäß dem [[Programmierprinzip#Don.27t_repeat_yourself.2C_DRY.5B4.5D|Programmierprinzip  „Don&#039;t repeat yourself“ (Dry)]]&lt;br /&gt;
sowieso stets vermieden werden.&lt;br /&gt;
&lt;br /&gt;
In der Version 4 des SVG-Hello-World-Tutoriums kann dieses Problem recht elegant gelöst werden.&lt;br /&gt;
Die Größe der Bühne wird in der JavaScript-Datei &amp;lt;code&amp;gt;CONSTANT.js&amp;lt;/code&amp;gt; festgelegt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var CANVAS_WIDTH  = 300; &lt;br /&gt;
var CANVAS_HEIGHT =  27; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei der Formatierung der Raphaël-Bühne (Hervorhebung des Randes) wird die Größe des zugehörigen &lt;br /&gt;
&amp;lt;code&amp;gt;div&amp;lt;/code&amp;gt;-Containers nicht mehr mittels statischem CSS sondern mittels JavaScript (genauer: jQuery)&lt;br /&gt;
unter Rückgriff auf diese beiden Konstanten festgelegt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  g_canvas = new Raphael(&amp;quot;d_canvas&amp;quot;, CANVAS_WIDTH, CANVAS_HEIGHT); &lt;br /&gt;
  $(&amp;quot;#d_canvas&amp;quot;)&lt;br /&gt;
    .css ({&amp;quot;width&amp;quot;:  CANVAS_WIDTH,&lt;br /&gt;
           &amp;quot;height&amp;quot;: CANVAS_HEIGHT,&lt;br /&gt;
          });&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Quellen=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&amp;lt;ol start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; {{Quelle|Kowarschick, W.: Multimedia-Programmierung}}&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
Die restlichen Quellen wurden direkt im Text angegeben.&lt;br /&gt;
&lt;br /&gt;
=Fortsetzung des Tutoriums=&lt;br /&gt;
&lt;br /&gt;
Bearbeiten Sie nun das [[HTML5-Tutorium: Canvas: MiniPong|Minipong-Canvas-Tutorium]], sofern Sie dies noch nicht gemacht haben.&lt;br /&gt;
Anderenfalls können Sie gleich mit dem [[HTML-Tutorium: SVG: MiniPong|Minipong-SVG-Tutorium]] forfahren.&lt;br /&gt;
[[Kategorie: HTML-Tutorium: SVG: Hello World]][[Kategorie: HTML-Beispiel]][[Kategorie:Kapitel:Multimedia-Programmierung:Beispiele]]&lt;/div&gt;</summary>
		<author><name>Rayza</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=HTML-Tutorium:_SVG:_Hello_World_01&amp;diff=24272</id>
		<title>HTML-Tutorium: SVG: Hello World 01</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=HTML-Tutorium:_SVG:_Hello_World_01&amp;diff=24272"/>
		<updated>2012-10-24T19:06:12Z</updated>

		<summary type="html">&lt;p&gt;Rayza: /* Inhalt von hello.html */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{HTML-Tutorium:SVG:HelloWorld:Menü}}&lt;br /&gt;
&#039;&#039;&#039;Musterlösung&#039;&#039;&#039;: [http://glossar.hs-augsburg.de/beispiel/tutorium/html_svg/hello_world/html_svg_hello_world_01/WebContent/hallo.html &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt;]&lt;br /&gt;
([http://glossar.hs-augsburg.de/beispiel/tutorium/html_svg/hello_world/html_svg_hello_world_01 SVN-Repository])&lt;br /&gt;
&lt;br /&gt;
=Voraussetzung=&lt;br /&gt;
&lt;br /&gt;
Sie sollten die Inhalte des Tutoriums [[HTML5-Tutorium: Canvas: Hello World 01]] kennen.&lt;br /&gt;
&lt;br /&gt;
=Ziel: Ausgabe von „Hallo Welt!“ als SVG-Grafik=&lt;br /&gt;
Die in [[HTML5-Tutorium: Canvas: Hello World]] erstellte Hello-World-Anwendung wird so umgeschrieben,&lt;br /&gt;
dass die Ausgabe der Begrüßung nicht als [[Pixelgrafik]] sondern als [[Vektorgrafik]] ausgegeben wird.&lt;br /&gt;
Vektorgrafiken können in modernen Browsern mittels [[SVG]] dargestellt werden.&lt;br /&gt;
&lt;br /&gt;
In diesem Tutorium wird die JavaScript-Bibliothek Raphaël&amp;lt;ref&amp;gt;{{Quelle|Baranovskiy, D.: Raphaël (2008+) – JavaScript Library}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
verwendet. Diese Bibliothek stellt Vektorgrafiken mit Hilfe von SVG in Browsern dar, die dies unterstützen. In Browsern,&lt;br /&gt;
die [[SVG]] nicht unterstützen (wie z.B. der Internet Explorer 6.0) wird automatisch ersatzweise [[VML]] verwendet.&lt;br /&gt;
Das heißt, diese Anwendung funktioniert nicht nur in HTML5-Browsern, sondern auch in älteren HTML4-Browsern,&lt;br /&gt;
da Raphaël nur [[EcmaScript|EcmaScript 3]] an Stelle von  [[EcmaScript|EcmaScript 5]] voraussetzt. &lt;br /&gt;
&lt;br /&gt;
=Anwendung „&amp;lt;code&amp;gt;HelloWorldSVG01&amp;lt;/code&amp;gt;“=&lt;br /&gt;
==Neues Projekt anlegen und speichern==&lt;br /&gt;
&lt;br /&gt;
Legen Sie ein neues Statisches Web-Projekt mit dem Namen &amp;lt;code&amp;gt;HelloWorldSVG01&amp;lt;/code&amp;gt; an.&lt;br /&gt;
&lt;br /&gt;
Speichern Sie dieses Projekt wie üblich in Ihrem Repository.&lt;br /&gt;
&lt;br /&gt;
==Dateien erstellen==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;code&amp;gt;raphael.js&amp;lt;/code&amp;gt;===&lt;br /&gt;
Erstellen Sie den Ordner &amp;lt;code&amp;gt;WebContent/lib&amp;lt;/code&amp;gt; und legen Sie in diesen Ordner&lt;br /&gt;
die Datei [http://github.com/DmitryBaranovskiy/raphael/raw/master/raphael-min.js &amp;lt;code&amp;gt;raphael-min.js&amp;lt;/code&amp;gt;].&lt;br /&gt;
&lt;br /&gt;
Gehen Sie dabei genauso vor, wie beim Einbinden von &amp;lt;code&amp;gt;jQuery&amp;lt;/code&amp;gt; im [[HTML5-Tutorium:_Canvas:_Hello_World_04#Einbinden_von_jQuery|4. Teil des Hello-World-Canvas-Tutoriums]].&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;code&amp;gt;hello.html&amp;lt;/code&amp;gt;===&lt;br /&gt;
Erstellen Sie im Ordner &amp;lt;code&amp;gt;WebContent&amp;lt;/code&amp;gt; des Projektes die Datei &amp;lt;code&amp;gt;hello.html&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====Inhalt von &amp;lt;code&amp;gt;hello.html&amp;lt;/code&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE HTML PUBLIC &amp;quot;-//W3C//DTD HTML 4.01//EN&amp;quot; &lt;br /&gt;
                      &amp;quot;http://www.w3.org/TR/html4/strict.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Titel der HTML-Seite; wird i. Allg. im Browser im Reiter angezeigt --&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;HTML5-Tutorium: SVG: Hello World 01&amp;lt;/title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Als HTML-Encoding sollte man stets UTF-8 verwenden. --&amp;gt;&lt;br /&gt;
    &amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Korrektes Skalieren der Seite auf einem mobilen Endgerät --&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0, user-scalable=yes&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Laden von Raphael --&amp;gt;&lt;br /&gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;lib/raphael-min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;!-- Schreiben von &amp;quot;Hallo Welt!&amp;quot; auf der Bühne &lt;br /&gt;
    	  (nachdem die Seite geladen wurde). --&amp;gt;&lt;br /&gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
      function init()&lt;br /&gt;
      { var l_canvas = new Raphael(&amp;quot;d_canvas&amp;quot;, 300, 27); &lt;br /&gt;
&lt;br /&gt;
        l_canvas&lt;br /&gt;
          .text(5, 13, &amp;quot;Hallo Welt!&amp;quot;)&lt;br /&gt;
          .attr({&amp;quot;font-family&amp;quot;: &amp;quot;&#039;Times New Roman&#039;, Times, serif&amp;quot;, &lt;br /&gt;
                 &amp;quot;font-size&amp;quot;:   20,&lt;br /&gt;
                 &amp;quot;font-weight&amp;quot;: &amp;quot;bold&amp;quot;,&lt;br /&gt;
                 &amp;quot;text-anchor&amp;quot;: &amp;quot;start&amp;quot;,&lt;br /&gt;
                });&lt;br /&gt;
     };&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body onload=&amp;quot;init()&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- DIV, in dem die Bühne (Raphaël paper)) zu liegen kommt --&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;d_canvas&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Testen und Sichern des Projektes==&lt;br /&gt;
&lt;br /&gt;
Testen Sie zunächst Ihr Projekt und sichern Sie dann das Ergebnis.&lt;br /&gt;
&lt;br /&gt;
==JavaScript-Code auslagern==&lt;br /&gt;
&lt;br /&gt;
Lagern Sie [[HTML5-Tutorium:_Canvas:_Hello_World_01#JavaScript-Code auslagern|wie in Teil 1 des Hello-World-Canvas-Tutoriums]]&lt;br /&gt;
den JavaScript-Code aus der HTML-Datei &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; in die JavaScript-Datei &amp;lt;code&amp;gt;js/main.js&amp;lt;/code&amp;gt; aus.&lt;br /&gt;
&lt;br /&gt;
==Testen und Sichern des Projektes==&lt;br /&gt;
&lt;br /&gt;
Vergessen Sie nicht, Ihr Projekt nach dem Testen im Repository zu sichern.&lt;br /&gt;
&lt;br /&gt;
=Quellen=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; {{Quelle|Kowarschick, W.: Multimedia-Programmierung}}&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Fortsetzung des Tutoriums=&lt;br /&gt;
&lt;br /&gt;
Bearbeiten Sie nun [[HTML-Tutorium: SVG: Hello World 02|Teil 2 des Tutoriums]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Kategorie: HTML-Tutorium: SVG: Hello World]][[Kategorie: HTML-Beispiel]][[Kategorie:Kapitel:Multimedia-Programmierung:Beispiele]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rayza</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=HTML-Tutorium:_SVG:_Hello_World_01&amp;diff=24271</id>
		<title>HTML-Tutorium: SVG: Hello World 01</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=HTML-Tutorium:_SVG:_Hello_World_01&amp;diff=24271"/>
		<updated>2012-10-24T19:04:41Z</updated>

		<summary type="html">&lt;p&gt;Rayza: /* raphael.js */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{HTML-Tutorium:SVG:HelloWorld:Menü}}&lt;br /&gt;
&#039;&#039;&#039;Musterlösung&#039;&#039;&#039;: [http://glossar.hs-augsburg.de/beispiel/tutorium/html_svg/hello_world/html_svg_hello_world_01/WebContent/hallo.html &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt;]&lt;br /&gt;
([http://glossar.hs-augsburg.de/beispiel/tutorium/html_svg/hello_world/html_svg_hello_world_01 SVN-Repository])&lt;br /&gt;
&lt;br /&gt;
=Voraussetzung=&lt;br /&gt;
&lt;br /&gt;
Sie sollten die Inhalte des Tutoriums [[HTML5-Tutorium: Canvas: Hello World 01]] kennen.&lt;br /&gt;
&lt;br /&gt;
=Ziel: Ausgabe von „Hallo Welt!“ als SVG-Grafik=&lt;br /&gt;
Die in [[HTML5-Tutorium: Canvas: Hello World]] erstellte Hello-World-Anwendung wird so umgeschrieben,&lt;br /&gt;
dass die Ausgabe der Begrüßung nicht als [[Pixelgrafik]] sondern als [[Vektorgrafik]] ausgegeben wird.&lt;br /&gt;
Vektorgrafiken können in modernen Browsern mittels [[SVG]] dargestellt werden.&lt;br /&gt;
&lt;br /&gt;
In diesem Tutorium wird die JavaScript-Bibliothek Raphaël&amp;lt;ref&amp;gt;{{Quelle|Baranovskiy, D.: Raphaël (2008+) – JavaScript Library}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
verwendet. Diese Bibliothek stellt Vektorgrafiken mit Hilfe von SVG in Browsern dar, die dies unterstützen. In Browsern,&lt;br /&gt;
die [[SVG]] nicht unterstützen (wie z.B. der Internet Explorer 6.0) wird automatisch ersatzweise [[VML]] verwendet.&lt;br /&gt;
Das heißt, diese Anwendung funktioniert nicht nur in HTML5-Browsern, sondern auch in älteren HTML4-Browsern,&lt;br /&gt;
da Raphaël nur [[EcmaScript|EcmaScript 3]] an Stelle von  [[EcmaScript|EcmaScript 5]] voraussetzt. &lt;br /&gt;
&lt;br /&gt;
=Anwendung „&amp;lt;code&amp;gt;HelloWorldSVG01&amp;lt;/code&amp;gt;“=&lt;br /&gt;
==Neues Projekt anlegen und speichern==&lt;br /&gt;
&lt;br /&gt;
Legen Sie ein neues Statisches Web-Projekt mit dem Namen &amp;lt;code&amp;gt;HelloWorldSVG01&amp;lt;/code&amp;gt; an.&lt;br /&gt;
&lt;br /&gt;
Speichern Sie dieses Projekt wie üblich in Ihrem Repository.&lt;br /&gt;
&lt;br /&gt;
==Dateien erstellen==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;code&amp;gt;raphael.js&amp;lt;/code&amp;gt;===&lt;br /&gt;
Erstellen Sie den Ordner &amp;lt;code&amp;gt;WebContent/lib&amp;lt;/code&amp;gt; und legen Sie in diesen Ordner&lt;br /&gt;
die Datei [http://github.com/DmitryBaranovskiy/raphael/raw/master/raphael-min.js &amp;lt;code&amp;gt;raphael-min.js&amp;lt;/code&amp;gt;].&lt;br /&gt;
&lt;br /&gt;
Gehen Sie dabei genauso vor, wie beim Einbinden von &amp;lt;code&amp;gt;jQuery&amp;lt;/code&amp;gt; im [[HTML5-Tutorium:_Canvas:_Hello_World_04#Einbinden_von_jQuery|4. Teil des Hello-World-Canvas-Tutoriums]].&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;code&amp;gt;hello.html&amp;lt;/code&amp;gt;===&lt;br /&gt;
Erstellen Sie im Ordner &amp;lt;code&amp;gt;WebContent&amp;lt;/code&amp;gt; des Projektes die Datei &amp;lt;code&amp;gt;hello.html&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====Inhalt von &amp;lt;code&amp;gt;hello.html&amp;lt;/code&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE HTML PUBLIC &amp;quot;-//W3C//DTD HTML 4.01//EN&amp;quot; &lt;br /&gt;
                      &amp;quot;http://www.w3.org/TR/html4/strict.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Titel der HTML-Seite; wird i. Allg. im Browser im Reiter angezeigt --&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;HTML5-Tutorium: SVG: Hello World 01&amp;lt;/title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Als HTML-Encoding sollte man stets UTF-8 verwenden. --&amp;gt;&lt;br /&gt;
    &amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Korrektes Skalieren der Seite auf einem mobilen Endgerät --&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0, user-scalable=yes&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Laden von Raphael --&amp;gt;&lt;br /&gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;lib/raphael.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;!-- Schreiben von &amp;quot;Hallo Welt!&amp;quot; auf der Bühne &lt;br /&gt;
    	  (nachdem die Seite geladen wurde). --&amp;gt;&lt;br /&gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
      function init()&lt;br /&gt;
      { var l_canvas = new Raphael(&amp;quot;d_canvas&amp;quot;, 300, 27); &lt;br /&gt;
&lt;br /&gt;
        l_canvas&lt;br /&gt;
          .text(5, 13, &amp;quot;Hallo Welt!&amp;quot;)&lt;br /&gt;
          .attr({&amp;quot;font-family&amp;quot;: &amp;quot;&#039;Times New Roman&#039;, Times, serif&amp;quot;, &lt;br /&gt;
                 &amp;quot;font-size&amp;quot;:   20,&lt;br /&gt;
                 &amp;quot;font-weight&amp;quot;: &amp;quot;bold&amp;quot;,&lt;br /&gt;
                 &amp;quot;text-anchor&amp;quot;: &amp;quot;start&amp;quot;,&lt;br /&gt;
                });&lt;br /&gt;
     };&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body onload=&amp;quot;init()&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- DIV, in dem die Bühne (Raphaël paper)) zu liegen kommt --&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;d_canvas&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Testen und Sichern des Projektes==&lt;br /&gt;
&lt;br /&gt;
Testen Sie zunächst Ihr Projekt und sichern Sie dann das Ergebnis.&lt;br /&gt;
&lt;br /&gt;
==JavaScript-Code auslagern==&lt;br /&gt;
&lt;br /&gt;
Lagern Sie [[HTML5-Tutorium:_Canvas:_Hello_World_01#JavaScript-Code auslagern|wie in Teil 1 des Hello-World-Canvas-Tutoriums]]&lt;br /&gt;
den JavaScript-Code aus der HTML-Datei &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; in die JavaScript-Datei &amp;lt;code&amp;gt;js/main.js&amp;lt;/code&amp;gt; aus.&lt;br /&gt;
&lt;br /&gt;
==Testen und Sichern des Projektes==&lt;br /&gt;
&lt;br /&gt;
Vergessen Sie nicht, Ihr Projekt nach dem Testen im Repository zu sichern.&lt;br /&gt;
&lt;br /&gt;
=Quellen=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; {{Quelle|Kowarschick, W.: Multimedia-Programmierung}}&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Fortsetzung des Tutoriums=&lt;br /&gt;
&lt;br /&gt;
Bearbeiten Sie nun [[HTML-Tutorium: SVG: Hello World 02|Teil 2 des Tutoriums]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Kategorie: HTML-Tutorium: SVG: Hello World]][[Kategorie: HTML-Beispiel]][[Kategorie:Kapitel:Multimedia-Programmierung:Beispiele]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rayza</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=HTML5-Tutorium:_Canvas:_Hello_World_04&amp;diff=24270</id>
		<title>HTML5-Tutorium: Canvas: Hello World 04</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=HTML5-Tutorium:_Canvas:_Hello_World_04&amp;diff=24270"/>
		<updated>2012-10-24T17:38:07Z</updated>

		<summary type="html">&lt;p&gt;Rayza: /* Anmerkungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{HTML5-Tutorium:Canvas:HelloWorld:Menü}}&lt;br /&gt;
&#039;&#039;&#039;Musterlösung&#039;&#039;&#039;: [http://glossar.hs-augsburg.de/beispiel/tutorium/html5_canvas/hello_world/html5_canvas_hello_world_04/WebContent/hallo.html &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt;]&lt;br /&gt;
([http://glossar.hs-augsburg.de/beispiel/tutorium/html5_canvas/hello_world/html5_canvas_hello_world_04 SVN-Repository])&lt;br /&gt;
&lt;br /&gt;
=Voraussetzung=&lt;br /&gt;
&lt;br /&gt;
Sie sollten die Inhalte des Tutoriums [[HTML5-Tutorium: Canvas: Hello World 03]] kennen.&lt;br /&gt;
&lt;br /&gt;
=Ziel: Browser-Unhabhängigkeit mittels jQuery=&lt;br /&gt;
Leider weichen die JavaScript-Implementierungen der einzelnen Browser ziemlich voneinander ab.&lt;br /&gt;
Daher ist es fast immer sinnvoll, JavaScript-Bibliotheken einzusetzen, deren Hauptzweck es ist,&lt;br /&gt;
diese Unterschiede auszugleichen. Daneben stellen sie im Allgemeinen auch noch viele sehr&lt;br /&gt;
nützliche JavaScript-Erweiterungen zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
In diesem Tutorium soll die JavaScript-Bibliothek &amp;lt;code&amp;gt;jQuery&amp;lt;/code&amp;gt;&amp;lt;ref&amp;gt;[http://jquery.com/ jQuery]&amp;lt;/ref&amp;gt; eingesetzt werden.&lt;br /&gt;
Außerdem sollen alle Konstanten aus der JavaScript-Datei &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt; in eine eigene Datei &amp;lt;code&amp;gt;CONSTANT.js&amp;lt;/code&amp;gt; ausgelagert werden.&lt;br /&gt;
Dies hat den Vorteil, dass die Konfiguration des Projektes (Bühnenbreite, Font-Wahl etc.) an einer zentralen Stelle erfolgen kann.&lt;br /&gt;
&lt;br /&gt;
=Anwendung „&amp;lt;code&amp;gt;HelloWorldCanvas04&amp;lt;/code&amp;gt;“=&lt;br /&gt;
==Neues Projekt anlegen==&lt;br /&gt;
&lt;br /&gt;
Legen Sie ein neues Statisches Web-Projekt mit dem Namen &amp;lt;code&amp;gt;HelloWorldCanvas04&amp;lt;/code&amp;gt; an.&lt;br /&gt;
&lt;br /&gt;
Speichern Sie dieses Projekt wie üblich in Ihrem Repository.&lt;br /&gt;
&lt;br /&gt;
==Daten übernehmen und modifizieren==&lt;br /&gt;
Legen Sie die Ordner &amp;lt;code&amp;gt;js&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;css&amp;lt;/code&amp;gt; an und kopieren Sie die Dateien &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;main.css&amp;lt;/code&amp;gt; und &lt;br /&gt;
&amp;lt;code&amp;gt;hello.html&amp;lt;/code&amp;gt; aus &amp;lt;code&amp;gt;HelloWorldCanvas03&amp;lt;/code&amp;gt; in die entsprechenden Ordner &amp;lt;code&amp;gt;WebContent&amp;lt;/code&amp;gt; des neuen Projektes.&lt;br /&gt;
Passen Sie das &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt;-Element in der Datei &amp;lt;code&amp;gt;hello.html&amp;lt;/code&amp;gt; an.&lt;br /&gt;
&lt;br /&gt;
Ändern Sie den Haeder der HTML-Datei &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; so ba,&lt;br /&gt;
dass Sie die unkomprimierten CSS- und JavaScript-Dateien einbinden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Laden aller CSS-Dateien --&amp;gt;&lt;br /&gt;
&amp;lt;!--&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;css/all.min.css&amp;quot; /&amp;gt;--&amp;gt;&lt;br /&gt;
    &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;css/main.css&amp;quot;    /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Laden aller JavaScript-Dateien --&amp;gt;&lt;br /&gt;
&amp;lt;!--&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;js/all.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;--&amp;gt;&lt;br /&gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;js/main.js&amp;quot;   &amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anderenfalls müssten Sie vor jedem Test zunächst das Komprimierungsskript &amp;lt;code&amp;gt;build.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
ausführen. Dies vergisst man recht schnell und testet dann eine alte Version, bei der&lt;br /&gt;
aktuelle Änderungen an den CSS- und JavaScript-Dateien nicht berücksichtigt werden.&lt;br /&gt;
&lt;br /&gt;
==Einbinden von jQuery==&lt;br /&gt;
&lt;br /&gt;
Laden Sie die [http://jquery.com/ komprimierte Version von &amp;lt;code&amp;gt;jQuery&amp;lt;/code&amp;gt;] herunter&lt;br /&gt;
und speichern Sie diese unter dem Namen &amp;lt;code&amp;gt;jquery.min.js&amp;lt;/code&amp;gt; irgendwo auf Ihrer&lt;br /&gt;
Festplatte. Binden Sie nun &amp;lt;code&amp;gt;jQuery&amp;lt;/code&amp;gt; in Ihr Projekt ein:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Projektexplorer&amp;lt;/code&amp;gt;: Rechtsklick auf &amp;lt;code&amp;gt;WebContent&amp;lt;/code&amp;gt; im Ordner &amp;lt;code&amp;gt;HelloWorldCanvas04&amp;lt;/code&amp;gt; → Klick auf &amp;lt;code&amp;gt;Neu&amp;lt;/code&amp;gt; → Klick auf &amp;lt;code&amp;gt;Ordner&amp;lt;/code&amp;gt;&lt;br /&gt;
# Ordnername: &amp;lt;code&amp;gt;lib&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
# Rechtsklick auf den neu erstellen Ordner &amp;lt;code&amp;gt;lib&amp;lt;/code&amp;gt; → Klick auf &amp;lt;code&amp;gt;Importieren&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;Allgemein&amp;lt;/code&amp;gt; aufklappen → Klick auf &amp;lt;code&amp;gt;Dateisystem&amp;lt;/code&amp;gt; → Klick auf &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; → Aus Verzeichnis: &amp;lt;code&amp;gt;&amp;amp;lt;Verzeichnis, in dem jQuery liegt&amp;amp;gt;&amp;lt;/code&amp;gt; → Häckchen vor &amp;lt;code&amp;gt;jquery.min.js&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt; (Beachten Sie, im Projektexplorer wird für ihr Projekt nun anagezeigt, dass es nicht frei von Syntaxfehlern sein soll.) &lt;br /&gt;
# &amp;lt;code&amp;gt;Projektexplorer&amp;lt;/code&amp;gt;: Rechtsklick auf &amp;lt;code&amp;gt;HelloWorldCanvas04&amp;lt;/code&amp;gt; → Klick auf &amp;lt;code&amp;gt;Eigenschaften&amp;lt;/code&amp;gt; → Klick auf &amp;lt;code&amp;gt;JavaScript&amp;lt;/code&amp;gt; aufklappen → Klick auf &amp;lt;code&amp;gt;IncludePath&amp;lt;/code&amp;gt;  &lt;br /&gt;
# Klick auf Reiter &amp;lt;code&amp;gt;Quelle&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;HelloWorldCanvas04/WebContent&amp;lt;/code&amp;gt; aufklappen → Klick auf &amp;lt;code&amp;gt;Ausgeschlossen: (Kein)&amp;lt;/code&amp;gt; → Klick auf &amp;lt;code&amp;gt;Bearbeiten ...&amp;lt;/code&amp;gt;&lt;br /&gt;
# Klick auf &amp;lt;code&amp;gt;Hinzufügen&amp;lt;/code&amp;gt; &#039;&#039;&#039;unter „Ausschlussmuster“&#039;&#039;&#039; (= &#039;&#039;&#039;zweiter&#039;&#039;&#039; Buton mit diesem Label!) → Eingabe von &amp;lt;code&amp;gt;lib/**&amp;lt;/code&amp;gt; ins Textfeld &lt;br /&gt;
# &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Anmerkungen===&lt;br /&gt;
&lt;br /&gt;
Externe, d.h. nicht von Ihnen geschrieben JavaScript-Bibliotheken, sollten nicht im Ordner &amp;lt;code&amp;gt;js&amp;lt;/code&amp;gt; liegen, &lt;br /&gt;
da diese im allgemeinen schon komprimiert wurden und vom &amp;lt;code&amp;gt;build&amp;lt;/code&amp;gt; nicht noch einmal komprimiert werden sollten. &lt;br /&gt;
Daher wurde der neue Ordner &amp;lt;code&amp;gt;lib&amp;lt;/code&amp;gt; angelegt. &lt;br /&gt;
&lt;br /&gt;
Für diesen Ordner wurde außerdem das Syntax-Checking deaktiviert, &lt;br /&gt;
da bei komprimierten JavaScript-Bibliotheken von Eclipse häufig Syntaxfehler gemeldet werden, obwohl überhaupt keine&lt;br /&gt;
Fehler darinnen enthalten sind. Bei &amp;lt;code&amp;gt;jquery.min.js&amp;lt;/code&amp;gt; ist dies beispielsweise der Fall. &lt;br /&gt;
Nach dem Ausschluss des Ordners &amp;lt;code&amp;gt;lib&amp;lt;/code&amp;gt; vom Syntaxchecking, sind die Fehlermarkierungen im Projektexplorer wieder verschwunden.&lt;br /&gt;
Außerdem wird der Benutzer beim Speichern des Projektes im Repositorys nicht dauern mit einer Warnmeldung, dass im Projekt noch Fehler enthalten seien, genervt.&lt;br /&gt;
&lt;br /&gt;
==JavaScript-Code auf &amp;lt;code&amp;gt;jQuery&amp;lt;/code&amp;gt; umstellen==&lt;br /&gt;
&lt;br /&gt;
Bevor Sie &amp;lt;code&amp;gt;jqeury.min.js&amp;lt;/code&amp;gt; verwenden können, müssen Sie diese Datei in der HTML-Datei &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; laden.&lt;br /&gt;
Erweitern Sie also den entsprechenden Abschnitt im HTML-Header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Laden aller JavaScript-Dateien --&amp;gt;&lt;br /&gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;lib/jquery.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;!--&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;js/all.min.js&amp;quot;    &amp;gt;&amp;lt;/script&amp;gt;--&amp;gt;&lt;br /&gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;js/CONSTANT.js&amp;quot;   &amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;js/main.js&amp;quot;       &amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die JavaScript-Datei &amp;lt;code&amp;gt;CONSTANT.js&amp;lt;/code&amp;gt; enthält folgende Konstanten-Definitionen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;use strict&amp;quot;; /* Warne vor unsauberem JavaScript-Code! */&lt;br /&gt;
 &lt;br /&gt;
// Anstelle von &amp;quot;var&amp;quot; sollte &amp;quot;const&amp;quot; verwendet werden. &lt;br /&gt;
// Dies wird aber vom Internet Explorer nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
var CANVAS_WIDTH  = 300; &lt;br /&gt;
var CANVAS_HEIGHT =  27; &lt;br /&gt;
&lt;br /&gt;
var HELLO_POS_X       =  5;&lt;br /&gt;
var HELLO_POS_Y       = 20;&lt;br /&gt;
var HELLO_FONT_FAMILY = &amp;quot;&#039;Times New Roman&#039;, Times, serif&amp;quot;;&lt;br /&gt;
var HELLO_FONT_SIZE   = 20;&lt;br /&gt;
var HELLO_FONT_WEIGHT = &amp;quot;bold&amp;quot;;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend können Sie die JavaScript-Datei &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt; anpassen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  window.onload = init;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wird durch &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  $(document).ready(init);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ersetzt.&lt;br /&gt;
&lt;br /&gt;
In der &amp;lt;code&amp;gt;init&amp;lt;/code&amp;gt;-Funktion werden folgende Anpassungen vorgenommen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  g_canvas  = document.getElementById(&amp;quot;d_canvas&amp;quot;);&lt;br /&gt;
  g_canvas.width  = 300;&lt;br /&gt;
  g_canvas.height =  27;&lt;br /&gt;
&lt;br /&gt;
  g_context = g_canvas.getContext(&amp;quot;2d&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wird durch &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  g_canvas  = $(&amp;quot;#d_canvas&amp;quot;)&lt;br /&gt;
                .attr(&amp;quot;width&amp;quot;,  CANVAS_WIDTH)&lt;br /&gt;
                .attr(&amp;quot;height&amp;quot;, CANVAS_HEIGHT)&lt;br /&gt;
                [0]  // Array-Zugriff um das Raw-Canvas-Objekt &lt;br /&gt;
                     // aus dem jQuery-Objekt zu extrahieren&lt;br /&gt;
              ;&lt;br /&gt;
  g_context = g_canvas.getContext(&amp;quot;2d&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
und &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  // Interaktive HTML-Formular-Elemente mit JavaScript verknüpfen.&lt;br /&gt;
  document.getElementById(&amp;quot;d_button_ok&amp;quot;).onmousedown = sayHello;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
durch &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  // Interaktive HTML-Formular-Elemente mit JavaScript verknüpfen.&lt;br /&gt;
  $(&amp;quot;#d_button_ok&amp;quot;).click(sayHello);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Abschließend wird der vollständige Inhalt der &amp;lt;code&amp;gt;sayHello&amp;lt;/code&amp;gt;-Funktion durch&lt;br /&gt;
folgenden Code ersetzt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  g_context.clearRect(0, 0, CANVAS_WIDTH, CANVAS_HEIGHT); // clear canvas&lt;br /&gt;
  g_context.font =         HELLO_FONT_WEIGHT&lt;br /&gt;
                   + &amp;quot; &amp;quot; + HELLO_FONT_SIZE + &amp;quot;px&amp;quot;&lt;br /&gt;
                   + &amp;quot; &amp;quot; + HELLO_FONT_FAMILY;&lt;br /&gt;
  g_context.fillText(&amp;quot;Hallo &amp;quot; + $(&amp;quot;#d_name&amp;quot;).val() + &amp;quot;!&amp;quot;,&lt;br /&gt;
                     HELLO_POS_X, HELLO_POS_Y&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Testen und speichern==&lt;br /&gt;
&lt;br /&gt;
Testen Sie Ihre Anwendung und speichern Sie sie in Ihrem Repository.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wenn Sie den Ordner &amp;lt;code&amp;gt;lib&amp;lt;/code&amp;gt; nicht von der Syntaxcheck-Behandlung ausgenommen haben, poppt eine Warnung auf, dass Ihr Code Fehler enthält. Wenn nur &amp;lt;code&amp;gt;raphael.js&amp;lt;/code&amp;gt; als fehlerhaft markiert wurde, können Sie Ihr Projekt trotzdem sichern.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Quellen=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li value=&amp;quot;3&amp;quot;&amp;gt; {{Quelle|Kowarschick, W.: Multimedia-Programmierung}}&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Fortsetzung des Tutoriums=&lt;br /&gt;
&lt;br /&gt;
Bearbeiten Sie nun entweder das [[HTML-Tutorium: SVG: Hello World|Hello-World-SVG-Tutorium]]&lt;br /&gt;
oder das [[HTML5-Tutorium: Canvas: MiniPong|Minipong-Canvas-Tutorium]].&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: HTML5-Tutorium: Canvas: Hello World]][[Kategorie: HTML5-Beispiel]][[Kategorie:Kapitel:Multimedia-Programmierung:Beispiele]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rayza</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=HTML5-Tutorium:_Canvas:_Hello_World_04&amp;diff=24269</id>
		<title>HTML5-Tutorium: Canvas: Hello World 04</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=HTML5-Tutorium:_Canvas:_Hello_World_04&amp;diff=24269"/>
		<updated>2012-10-24T17:34:13Z</updated>

		<summary type="html">&lt;p&gt;Rayza: /* Einbinden von jQuery */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{HTML5-Tutorium:Canvas:HelloWorld:Menü}}&lt;br /&gt;
&#039;&#039;&#039;Musterlösung&#039;&#039;&#039;: [http://glossar.hs-augsburg.de/beispiel/tutorium/html5_canvas/hello_world/html5_canvas_hello_world_04/WebContent/hallo.html &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt;]&lt;br /&gt;
([http://glossar.hs-augsburg.de/beispiel/tutorium/html5_canvas/hello_world/html5_canvas_hello_world_04 SVN-Repository])&lt;br /&gt;
&lt;br /&gt;
=Voraussetzung=&lt;br /&gt;
&lt;br /&gt;
Sie sollten die Inhalte des Tutoriums [[HTML5-Tutorium: Canvas: Hello World 03]] kennen.&lt;br /&gt;
&lt;br /&gt;
=Ziel: Browser-Unhabhängigkeit mittels jQuery=&lt;br /&gt;
Leider weichen die JavaScript-Implementierungen der einzelnen Browser ziemlich voneinander ab.&lt;br /&gt;
Daher ist es fast immer sinnvoll, JavaScript-Bibliotheken einzusetzen, deren Hauptzweck es ist,&lt;br /&gt;
diese Unterschiede auszugleichen. Daneben stellen sie im Allgemeinen auch noch viele sehr&lt;br /&gt;
nützliche JavaScript-Erweiterungen zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
In diesem Tutorium soll die JavaScript-Bibliothek &amp;lt;code&amp;gt;jQuery&amp;lt;/code&amp;gt;&amp;lt;ref&amp;gt;[http://jquery.com/ jQuery]&amp;lt;/ref&amp;gt; eingesetzt werden.&lt;br /&gt;
Außerdem sollen alle Konstanten aus der JavaScript-Datei &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt; in eine eigene Datei &amp;lt;code&amp;gt;CONSTANT.js&amp;lt;/code&amp;gt; ausgelagert werden.&lt;br /&gt;
Dies hat den Vorteil, dass die Konfiguration des Projektes (Bühnenbreite, Font-Wahl etc.) an einer zentralen Stelle erfolgen kann.&lt;br /&gt;
&lt;br /&gt;
=Anwendung „&amp;lt;code&amp;gt;HelloWorldCanvas04&amp;lt;/code&amp;gt;“=&lt;br /&gt;
==Neues Projekt anlegen==&lt;br /&gt;
&lt;br /&gt;
Legen Sie ein neues Statisches Web-Projekt mit dem Namen &amp;lt;code&amp;gt;HelloWorldCanvas04&amp;lt;/code&amp;gt; an.&lt;br /&gt;
&lt;br /&gt;
Speichern Sie dieses Projekt wie üblich in Ihrem Repository.&lt;br /&gt;
&lt;br /&gt;
==Daten übernehmen und modifizieren==&lt;br /&gt;
Legen Sie die Ordner &amp;lt;code&amp;gt;js&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;css&amp;lt;/code&amp;gt; an und kopieren Sie die Dateien &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;main.css&amp;lt;/code&amp;gt; und &lt;br /&gt;
&amp;lt;code&amp;gt;hello.html&amp;lt;/code&amp;gt; aus &amp;lt;code&amp;gt;HelloWorldCanvas03&amp;lt;/code&amp;gt; in die entsprechenden Ordner &amp;lt;code&amp;gt;WebContent&amp;lt;/code&amp;gt; des neuen Projektes.&lt;br /&gt;
Passen Sie das &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt;-Element in der Datei &amp;lt;code&amp;gt;hello.html&amp;lt;/code&amp;gt; an.&lt;br /&gt;
&lt;br /&gt;
Ändern Sie den Haeder der HTML-Datei &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; so ba,&lt;br /&gt;
dass Sie die unkomprimierten CSS- und JavaScript-Dateien einbinden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Laden aller CSS-Dateien --&amp;gt;&lt;br /&gt;
&amp;lt;!--&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;css/all.min.css&amp;quot; /&amp;gt;--&amp;gt;&lt;br /&gt;
    &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;css/main.css&amp;quot;    /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Laden aller JavaScript-Dateien --&amp;gt;&lt;br /&gt;
&amp;lt;!--&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;js/all.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;--&amp;gt;&lt;br /&gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;js/main.js&amp;quot;   &amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anderenfalls müssten Sie vor jedem Test zunächst das Komprimierungsskript &amp;lt;code&amp;gt;build.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
ausführen. Dies vergisst man recht schnell und testet dann eine alte Version, bei der&lt;br /&gt;
aktuelle Änderungen an den CSS- und JavaScript-Dateien nicht berücksichtigt werden.&lt;br /&gt;
&lt;br /&gt;
==Einbinden von jQuery==&lt;br /&gt;
&lt;br /&gt;
Laden Sie die [http://jquery.com/ komprimierte Version von &amp;lt;code&amp;gt;jQuery&amp;lt;/code&amp;gt;] herunter&lt;br /&gt;
und speichern Sie diese unter dem Namen &amp;lt;code&amp;gt;jquery.min.js&amp;lt;/code&amp;gt; irgendwo auf Ihrer&lt;br /&gt;
Festplatte. Binden Sie nun &amp;lt;code&amp;gt;jQuery&amp;lt;/code&amp;gt; in Ihr Projekt ein:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Projektexplorer&amp;lt;/code&amp;gt;: Rechtsklick auf &amp;lt;code&amp;gt;WebContent&amp;lt;/code&amp;gt; im Ordner &amp;lt;code&amp;gt;HelloWorldCanvas04&amp;lt;/code&amp;gt; → Klick auf &amp;lt;code&amp;gt;Neu&amp;lt;/code&amp;gt; → Klick auf &amp;lt;code&amp;gt;Ordner&amp;lt;/code&amp;gt;&lt;br /&gt;
# Ordnername: &amp;lt;code&amp;gt;lib&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
# Rechtsklick auf den neu erstellen Ordner &amp;lt;code&amp;gt;lib&amp;lt;/code&amp;gt; → Klick auf &amp;lt;code&amp;gt;Importieren&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;Allgemein&amp;lt;/code&amp;gt; aufklappen → Klick auf &amp;lt;code&amp;gt;Dateisystem&amp;lt;/code&amp;gt; → Klick auf &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; → Aus Verzeichnis: &amp;lt;code&amp;gt;&amp;amp;lt;Verzeichnis, in dem jQuery liegt&amp;amp;gt;&amp;lt;/code&amp;gt; → Häckchen vor &amp;lt;code&amp;gt;jquery.min.js&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt; (Beachten Sie, im Projektexplorer wird für ihr Projekt nun anagezeigt, dass es nicht frei von Syntaxfehlern sein soll.) &lt;br /&gt;
# &amp;lt;code&amp;gt;Projektexplorer&amp;lt;/code&amp;gt;: Rechtsklick auf &amp;lt;code&amp;gt;HelloWorldCanvas04&amp;lt;/code&amp;gt; → Klick auf &amp;lt;code&amp;gt;Eigenschaften&amp;lt;/code&amp;gt; → Klick auf &amp;lt;code&amp;gt;JavaScript&amp;lt;/code&amp;gt; aufklappen → Klick auf &amp;lt;code&amp;gt;IncludePath&amp;lt;/code&amp;gt;  &lt;br /&gt;
# Klick auf Reiter &amp;lt;code&amp;gt;Quelle&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;HelloWorldCanvas04/WebContent&amp;lt;/code&amp;gt; aufklappen → Klick auf &amp;lt;code&amp;gt;Ausgeschlossen: (Kein)&amp;lt;/code&amp;gt; → Klick auf &amp;lt;code&amp;gt;Bearbeiten ...&amp;lt;/code&amp;gt;&lt;br /&gt;
# Klick auf &amp;lt;code&amp;gt;Hinzufügen&amp;lt;/code&amp;gt; &#039;&#039;&#039;unter „Ausschlussmuster“&#039;&#039;&#039; (= &#039;&#039;&#039;zweiter&#039;&#039;&#039; Buton mit diesem Label!) → Eingabe von &amp;lt;code&amp;gt;lib/**&amp;lt;/code&amp;gt; ins Textfeld &lt;br /&gt;
# &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Anmerkungen===&lt;br /&gt;
&lt;br /&gt;
Externe, d.h. nicht von Ihnen geschrieben JavaScript-Bibliotheken, sollten nicht im Ordner &amp;lt;code&amp;gt;js&amp;lt;/code&amp;gt; liegen, &lt;br /&gt;
da diese im allgemeinen schon komprimiert wurden und vom &amp;lt;code&amp;gt;build&amp;lt;/code&amp;gt; nicht noch einmal komprimiert werden sollten. &lt;br /&gt;
Daher wurde der neue Ordner &amp;lt;code&amp;gt;lib&amp;lt;/code&amp;gt; angelegt. &lt;br /&gt;
&lt;br /&gt;
Für diesen Ordner wurde außerdem das Syntax-Checking deaktiviert, &lt;br /&gt;
da bei komprimierten JavaScript-Bibliotheken von Eclipse häufig Syntaxfehler gemeldet werden, obwohl überhaupt keine&lt;br /&gt;
Fehler darinnen enthalten sind. Bei &amp;lt;code&amp;gt;jquery.min.js&amp;lt;/code&amp;gt; ist dies beispielsweise der Fall. &lt;br /&gt;
Nach dem Ausschluss des Ordners &amp;lt;code&amp;gt;lib&amp;lt;/code&amp;gt; vom Syntaxchecking, sind die Fehlermarkierungen im Projektexplorer wieder verschwunden.&lt;br /&gt;
Außerdem wird der Benutzer beim Speichern des Projektes im Repositorys nicht dauern mit einer Warnmeldung, dass im PRojekt noch Fehler enthalten seien, gebervt.&lt;br /&gt;
&lt;br /&gt;
==JavaScript-Code auf &amp;lt;code&amp;gt;jQuery&amp;lt;/code&amp;gt; umstellen==&lt;br /&gt;
&lt;br /&gt;
Bevor Sie &amp;lt;code&amp;gt;jqeury.min.js&amp;lt;/code&amp;gt; verwenden können, müssen Sie diese Datei in der HTML-Datei &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; laden.&lt;br /&gt;
Erweitern Sie also den entsprechenden Abschnitt im HTML-Header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Laden aller JavaScript-Dateien --&amp;gt;&lt;br /&gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;lib/jquery.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;!--&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;js/all.min.js&amp;quot;    &amp;gt;&amp;lt;/script&amp;gt;--&amp;gt;&lt;br /&gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;js/CONSTANT.js&amp;quot;   &amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;js/main.js&amp;quot;       &amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die JavaScript-Datei &amp;lt;code&amp;gt;CONSTANT.js&amp;lt;/code&amp;gt; enthält folgende Konstanten-Definitionen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;use strict&amp;quot;; /* Warne vor unsauberem JavaScript-Code! */&lt;br /&gt;
 &lt;br /&gt;
// Anstelle von &amp;quot;var&amp;quot; sollte &amp;quot;const&amp;quot; verwendet werden. &lt;br /&gt;
// Dies wird aber vom Internet Explorer nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
var CANVAS_WIDTH  = 300; &lt;br /&gt;
var CANVAS_HEIGHT =  27; &lt;br /&gt;
&lt;br /&gt;
var HELLO_POS_X       =  5;&lt;br /&gt;
var HELLO_POS_Y       = 20;&lt;br /&gt;
var HELLO_FONT_FAMILY = &amp;quot;&#039;Times New Roman&#039;, Times, serif&amp;quot;;&lt;br /&gt;
var HELLO_FONT_SIZE   = 20;&lt;br /&gt;
var HELLO_FONT_WEIGHT = &amp;quot;bold&amp;quot;;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend können Sie die JavaScript-Datei &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt; anpassen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  window.onload = init;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wird durch &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  $(document).ready(init);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ersetzt.&lt;br /&gt;
&lt;br /&gt;
In der &amp;lt;code&amp;gt;init&amp;lt;/code&amp;gt;-Funktion werden folgende Anpassungen vorgenommen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  g_canvas  = document.getElementById(&amp;quot;d_canvas&amp;quot;);&lt;br /&gt;
  g_canvas.width  = 300;&lt;br /&gt;
  g_canvas.height =  27;&lt;br /&gt;
&lt;br /&gt;
  g_context = g_canvas.getContext(&amp;quot;2d&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wird durch &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  g_canvas  = $(&amp;quot;#d_canvas&amp;quot;)&lt;br /&gt;
                .attr(&amp;quot;width&amp;quot;,  CANVAS_WIDTH)&lt;br /&gt;
                .attr(&amp;quot;height&amp;quot;, CANVAS_HEIGHT)&lt;br /&gt;
                [0]  // Array-Zugriff um das Raw-Canvas-Objekt &lt;br /&gt;
                     // aus dem jQuery-Objekt zu extrahieren&lt;br /&gt;
              ;&lt;br /&gt;
  g_context = g_canvas.getContext(&amp;quot;2d&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
und &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  // Interaktive HTML-Formular-Elemente mit JavaScript verknüpfen.&lt;br /&gt;
  document.getElementById(&amp;quot;d_button_ok&amp;quot;).onmousedown = sayHello;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
durch &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  // Interaktive HTML-Formular-Elemente mit JavaScript verknüpfen.&lt;br /&gt;
  $(&amp;quot;#d_button_ok&amp;quot;).click(sayHello);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Abschließend wird der vollständige Inhalt der &amp;lt;code&amp;gt;sayHello&amp;lt;/code&amp;gt;-Funktion durch&lt;br /&gt;
folgenden Code ersetzt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  g_context.clearRect(0, 0, CANVAS_WIDTH, CANVAS_HEIGHT); // clear canvas&lt;br /&gt;
  g_context.font =         HELLO_FONT_WEIGHT&lt;br /&gt;
                   + &amp;quot; &amp;quot; + HELLO_FONT_SIZE + &amp;quot;px&amp;quot;&lt;br /&gt;
                   + &amp;quot; &amp;quot; + HELLO_FONT_FAMILY;&lt;br /&gt;
  g_context.fillText(&amp;quot;Hallo &amp;quot; + $(&amp;quot;#d_name&amp;quot;).val() + &amp;quot;!&amp;quot;,&lt;br /&gt;
                     HELLO_POS_X, HELLO_POS_Y&lt;br /&gt;
                    );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Testen und speichern==&lt;br /&gt;
&lt;br /&gt;
Testen Sie Ihre Anwendung und speichern Sie sie in Ihrem Repository.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wenn Sie den Ordner &amp;lt;code&amp;gt;lib&amp;lt;/code&amp;gt; nicht von der Syntaxcheck-Behandlung ausgenommen haben, poppt eine Warnung auf, dass Ihr Code Fehler enthält. Wenn nur &amp;lt;code&amp;gt;raphael.js&amp;lt;/code&amp;gt; als fehlerhaft markiert wurde, können Sie Ihr Projekt trotzdem sichern.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Quellen=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li value=&amp;quot;3&amp;quot;&amp;gt; {{Quelle|Kowarschick, W.: Multimedia-Programmierung}}&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Fortsetzung des Tutoriums=&lt;br /&gt;
&lt;br /&gt;
Bearbeiten Sie nun entweder das [[HTML-Tutorium: SVG: Hello World|Hello-World-SVG-Tutorium]]&lt;br /&gt;
oder das [[HTML5-Tutorium: Canvas: MiniPong|Minipong-Canvas-Tutorium]].&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: HTML5-Tutorium: Canvas: Hello World]][[Kategorie: HTML5-Beispiel]][[Kategorie:Kapitel:Multimedia-Programmierung:Beispiele]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rayza</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=HTML5-Tutorium:_Canvas:_Hello_World_03&amp;diff=23929</id>
		<title>HTML5-Tutorium: Canvas: Hello World 03</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=HTML5-Tutorium:_Canvas:_Hello_World_03&amp;diff=23929"/>
		<updated>2012-10-16T09:52:26Z</updated>

		<summary type="html">&lt;p&gt;Rayza: /* Build-Skript ausführen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{HTML5-Tutorium:Canvas:HelloWorld:Menü}}&lt;br /&gt;
&#039;&#039;&#039;Ergebnis&#039;&#039;&#039;: [http://glossar.hs-augsburg.de/beispiel/tutorium/html5_canvas/hello_world/html5_canvas_hello_world_03/WebContent/hallo.html &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt;]&lt;br /&gt;
([http://glossar.hs-augsburg.de/beispiel/tutorium/html5_canvas/hello_world/html5_canvas_hello_world_03 SVN-Repository])&lt;br /&gt;
&lt;br /&gt;
=Kompression des CSS- und JavaScript-Codes=&lt;br /&gt;
Die in [[HTML5-Tutorium: Canvas: Hello World 02|Teil 2]] erstellten CSS- und JavaScript-Dateien der Hello-World-Anwendung &lt;br /&gt;
sollen komprimiert werden, um die Zugriffszeiten zu beschleunigen. Dies erfolgt mit Hilfe des Tools &lt;br /&gt;
&amp;lt;code&amp;gt;YUI Compressor&amp;lt;/code&amp;gt;&amp;lt;ref name=&amp;quot;YUI Compressor&amp;quot;&amp;gt;[http://developer.yahoo.com/yui/compressor/ YUI Compressor]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Musterlösung herunterladen==&lt;br /&gt;
(Dieser Punkt kann übersprungen werden.)&lt;br /&gt;
&lt;br /&gt;
Laden Sie die Musterlösung &amp;lt;code&amp;gt;http://glossar.hs-augsburg.de/beispiel/tutorium/html5_canvas/hello_world/html5_canvas_hello_world_03/&amp;lt;/code&amp;gt;&lt;br /&gt;
auf [[HTML5-Tutorium: Canvas: Hello World 01#Musterl.C3.B6sung_herunterladen|bekannte Weise]] in Eclipse.&lt;br /&gt;
&lt;br /&gt;
==Neues Projekt anlegen==&lt;br /&gt;
&lt;br /&gt;
Legen Sie ein neues Projekt an&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Datei&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Neu&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Statisches Web-Projekt&amp;lt;/code&amp;gt;&lt;br /&gt;
# Project name: &amp;lt;code&amp;gt;HelloWorldCanvas03&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Legen Sie die Ordner &amp;lt;code&amp;gt;js&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;css&amp;lt;/code&amp;gt; an und kopieren Sie die Dateien &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;main.css&amp;lt;/code&amp;gt; und &lt;br /&gt;
&amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; aus &amp;lt;code&amp;gt;HelloWorldCanvas02&amp;lt;/code&amp;gt; in die entsprechenden Ordner &amp;lt;code&amp;gt;WebContent&amp;lt;/code&amp;gt; des neuen Projektes.&lt;br /&gt;
Passen Sie das &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt;-Element in der Datei &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; an.&lt;br /&gt;
&lt;br /&gt;
Nachdem Sie diese Version getestet haben, sollten Sie sie zunächst in Ihrem Repository speichern:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Projektexplorer&amp;lt;/code&amp;gt;: Rechtsklick auf &amp;lt;code&amp;gt;HelloWorldCanvas03&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Team&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Projekt gemeinsam nutzen&amp;lt;/code&amp;gt; &lt;br /&gt;
# &amp;lt;code&amp;gt;SVN&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt;&lt;br /&gt;
# Url: &amp;lt;code&amp;gt; https://praktikum.multimedia.hs-augsburg.de/svn/ACCOUNT&amp;lt;/code&amp;gt; (&#039;&#039;&#039;&amp;lt;code&amp;gt;ACCOUNT&amp;lt;/code&amp;gt; durch eigenen RZ-Account ersetzen&#039;&#039;&#039;) → &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; &lt;br /&gt;
# Use specified folder name: &amp;lt;code&amp;gt;mmprog/tutorium/HelloWorldCanvas03&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
# Im Projektexplorer: Rechtsklick auf &amp;lt;code&amp;gt;HelloWorldCanvas03&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Team&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Commit&amp;lt;/code&amp;gt;&lt;br /&gt;
# Comment: &amp;lt;code&amp;gt;Neues Projekt angelegt.&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Verbesserung der Implementierung von Teil 2==&lt;br /&gt;
&lt;br /&gt;
Bevor Sie den CSS- und JavaScript-Code komprimieren, sollten Sie die Implementierung aus Teil 2 des Tutoriums etwas verbessern.&lt;br /&gt;
&lt;br /&gt;
Die HTML-Datei &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; soll JavaScript-frei werden, d.h. HTML-Code und JavaScript-Code sollen noch besser&lt;br /&gt;
getrennt werden.&lt;br /&gt;
&lt;br /&gt;
Gehen Sie folgendermaßen vor. Löschen Sie zunächst in der HTML-Datei &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;onload=&amp;quot;init()&amp;quot;&amp;lt;/code&amp;gt; aus dem &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt;-Element sowie&lt;br /&gt;
* &amp;lt;code&amp;gt;onmousedown=&amp;quot;sayHello()&amp;quot;&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;input&amp;lt;/code&amp;gt;-Element vom Typ &amp;lt;code&amp;gt;button&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Fügen Sie anschließend in der JavaScript-Datei &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt; folgenden Code &#039;&#039;&#039;vor&#039;&#039;&#039; der Definition der &amp;lt;code&amp;gt;init&amp;lt;/code&amp;gt;-Funktion&lt;br /&gt;
ein:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// Führe die init-Funktion aus, nachdem die HTML-Seite vollständig &lt;br /&gt;
// vom Browser geladen wurde.&lt;br /&gt;
window.onload = init;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Die Funktion &amp;lt;code&amp;gt;window.onload&amp;lt;/code&amp;gt; wird vom Browser, sofern sie definiert wurde, automatisch ausgeführt,&lt;br /&gt;
sobald die zugehörige HTML-Seite vollständig geladen wurde.&lt;br /&gt;
&lt;br /&gt;
Zu guter Letzt müssen Sie noch den &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;-Button mit der &amp;lt;code&amp;gt;sayHello&amp;lt;/code&amp;gt;-Methode&lt;br /&gt;
verknüpfen, indem Sie folgenden Code &#039;&#039;&#039;in den Rumpf&#039;&#039;&#039; der &amp;lt;code&amp;gt;init&amp;lt;/code&amp;gt;-Funktion einfügen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  // Interaktive HTML-Formular-Elemente mit JavaScript verknüpfen.&lt;br /&gt;
  document.getElementById(&amp;quot;d_button_ok&amp;quot;).onmousedown = sayHello;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Dieser Code kann erst ausgeführt werden, nachdem die HTML-Seite vollständig geladen wurde,&lt;br /&gt;
da das HTML-Button-Objekt vorher nicht existiert. Daher muss die &amp;lt;code&amp;gt;init&amp;lt;/code&amp;gt;-Funktion&lt;br /&gt;
die Verknüpfung zwischen Button und Code herstellen. &lt;br /&gt;
Hätte man den obigen Code vor die &amp;lt;code&amp;gt;init&amp;lt;/code&amp;gt;-Methode&lt;br /&gt;
eingefügt, hätte der Browser gleich beim Laden der JavaScript-Datei versucht,&lt;br /&gt;
diese Verknüpfung herzustellen. Das wäre aber schief gegangen, das das Button-Objekt&lt;br /&gt;
zu diesem Zeitpunk noch nicht existiert.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wie gewohnt müssen Sie Ihren Code nun testen und – sobald er fehlerfrei läuft –&lt;br /&gt;
im Repository sichern.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Kompression der JavaScript- und CSS-Dateien==&lt;br /&gt;
&lt;br /&gt;
Die komprimierten JavaScript- und CSS-Dateien werden vom&lt;br /&gt;
&amp;lt;code&amp;gt;build&amp;lt;/code&amp;gt;-Skript (siehe nächsten Abschnitt) in den Dateien&lt;br /&gt;
* &amp;lt;code&amp;gt;css/main.css&amp;lt;/code&amp;gt; und&lt;br /&gt;
* &amp;lt;code&amp;gt;js/main.js&amp;lt;/code&amp;gt;&lt;br /&gt;
abgelegt. Um diese Dateien in der HTML-Datei &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt;&lt;br /&gt;
zu verwenden, müssen die Zeilen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Laden aller CSS-Dateien --&amp;gt;&lt;br /&gt;
    &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;css/main.css&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Laden aller JavaScript-Dateien --&amp;gt;&lt;br /&gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;js/main.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
in&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Laden aller CSS-Dateien --&amp;gt;&lt;br /&gt;
    &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;css/all.min.css&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;!--&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;css/main.css&amp;quot;   /&amp;gt;--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Laden aller JavaScript-Dateien --&amp;gt;&lt;br /&gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;js/all.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;!--&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;js/main.js&amp;quot;   &amp;gt;&amp;lt;/script&amp;gt;--&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
abgeändert werden.&lt;br /&gt;
&lt;br /&gt;
Wenn man nun das Projekt testet, passiert nicht mehr viel, da es die Dateien &amp;lt;code&amp;gt;all.min.css&amp;lt;/code&amp;gt; und&lt;br /&gt;
&amp;lt;code&amp;gt;all.mim.js&amp;lt;/code&amp;gt; noch nicht gibt.&lt;br /&gt;
&lt;br /&gt;
===Build-Skript ausführen===&lt;br /&gt;
&lt;br /&gt;
Bei der [[Installation von Eclipse]] sollten Sie den „YUI Compressor“ installieren.&lt;br /&gt;
Aufgabe dieses Tools ist es, die beiden Dateien  &amp;lt;code&amp;gt;all.min.css&amp;lt;/code&amp;gt; und&lt;br /&gt;
&amp;lt;code&amp;gt;all.mim.js&amp;lt;/code&amp;gt; zu erstellen. Sie enthalten&lt;br /&gt;
jeweils den Code aller CSS- bzw. JavaScript-Dateien, die sich im Ordner &amp;lt;code&amp;gt;css&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;js&amp;lt;/code&amp;gt; befinden.&lt;br /&gt;
Leerzeichen, Kommentare und andere überflüssige Informationen werden entfernt um Platz zu sparen und damit die Downloadzeiten zu reduzieren.&lt;br /&gt;
Man kann allerdings erzwingen, dass bestimmte Kommentare (z.B. Lizenzinformationen) erhalten bleiben.&amp;lt;ref&amp;gt;[https://github.com/yui/yuicompressor/blob/master/doc/README YUI-Compressor-Dokumentation]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusammen mit dem YUI Compressor wurde die Datei &amp;lt;code&amp;gt;[http://glossar.hs-augsburg.de/beispiel/eclipse/build.xml build.xml]&amp;lt;/code&amp;gt; installiert. Dieses Skript muss zunächst in Eclipse integriert und anschließend ausgeführt werden:&lt;br /&gt;
&lt;br /&gt;
# Projektexplorer: Selektion des aktuellen Projektes&lt;br /&gt;
# Klick auf den Drop-Down-Pfeil rechts neben dem Icon „grüner Kreis mit weißem Pfeil und Werkzeugkasten“ → &amp;lt;code&amp;gt;Externe Tools Konfigurationen&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;Ant-Erstellung&amp;lt;/code&amp;gt; selektieren&lt;br /&gt;
# Klick auf das Icon „weißes Blatt mit Plus-Symbol“ (damit wird eine neues Skript erstellt, das ein externes Tool ausführt)&lt;br /&gt;
#* Name: &amp;lt;code&amp;gt;Compress&amp;lt;/code&amp;gt;&lt;br /&gt;
#* Erstellungsdatei: &amp;lt;code&amp;gt;D:\web\eclipse\dropins\yuicompressor\build.xml&amp;lt;/code&amp;gt; (das ist das zuvor erstellte Build-Skript, passen Sie gegebenenfalls den Ordner an)&lt;br /&gt;
#* Basisverzeichnis: &amp;lt;code&amp;gt;${project_loc}&amp;lt;/code&amp;gt;&lt;br /&gt;
#* Argumente: &amp;lt;code&amp;gt;-DPROJECT=${project_name}&amp;lt;/code&amp;gt;&lt;br /&gt;
#&amp;lt;code&amp;gt;Ausführen&amp;lt;/code&amp;gt; (Damit wird das Skript auf das zuvor selektierte Projekt angewendet.)&lt;br /&gt;
&lt;br /&gt;
Künftig kann irgendein Projekt selektiert werden. Mittels eines Klicks&lt;br /&gt;
auf das „grüner Kreis mit weißem Pfeil und Werkzeugkasten“ werden für diese Projekt&lt;br /&gt;
die Dateien  &amp;lt;code&amp;gt;all.min.css&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;all.min.js&amp;lt;/code&amp;gt; erstellt und die &lt;br /&gt;
Projektdateien (sofern dies im Build-Skript konfiguriert wurde) zum externen Server kopiert.&lt;br /&gt;
&lt;br /&gt;
Wenn man mehrere externe Tools verwendet, muss man den Drop-Down-Pfeil rechts neben dem Icon „grüner Kreis mit weißem Pfeil und Werkzeugkasten“ &lt;br /&gt;
klicken und dann das Tool &amp;lt;code&amp;gt;Compress&amp;lt;/code&amp;gt; klicken (nachdem man zuvor im Prjektexplorer ein Projekt selektiert hat).&lt;br /&gt;
&lt;br /&gt;
===Ergebnis des Build-Skripts===&lt;br /&gt;
&lt;br /&gt;
Nach Ausführen des Build-Skripts sollten die Dateien &amp;lt;code&amp;gt;all.min.css&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;all.min.js&amp;lt;/code&amp;gt; existieren und damit die Datei&lt;br /&gt;
&amp;lt;code&amp;gt;hello.html&amp;lt;/code&amp;gt; ausgeführt werden können.&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;code&amp;gt;all.min.css&amp;lt;/code&amp;gt;====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
#d_name{width:185px}#d_canvas{margin-top:10px;border-color:#bbb;border-width:2px;border-style:solid}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;code&amp;gt;all.min.js&amp;lt;/code&amp;gt;====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;use strict&amp;quot;;var g_canvas;var g_context;window.onload=init;function init(){g_canvas=document.getElementById(&amp;quot;d_canvas&amp;quot;);...&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Testen und speichern==&lt;br /&gt;
&lt;br /&gt;
Nun sollt Ihre Web-Anwendung wieder funktionieren.&lt;br /&gt;
Testen Sie sie und speichern Sie sie in Ihrem Repository.&lt;br /&gt;
&lt;br /&gt;
==Konfiguration des Build-Skripts==&lt;br /&gt;
&lt;br /&gt;
Abhänging von Ihrer Test-Umgebung müssen Sie die Zeile&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
  &amp;lt;property name=&amp;quot;DIST_DIR&amp;quot; value=&amp;quot;WebContent&amp;quot; description=&amp;quot;Output folder for build targets&amp;quot; /&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
der Datei &amp;lt;code&amp;gt;D:\web\eclipse\dropins\yuicompressor\build.xml&amp;lt;/code&amp;gt;, die Sie zusammen mit dem YUI Compressor installiert haben,&lt;br /&gt;
eventuell anpassen.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie einen externen Server (wie beispielsweise einen Apache) installiert haben,&lt;br /&gt;
dann können Sie auch die Zeile&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;property name=&amp;quot;DIST_DIR&amp;quot; value=&amp;quot;D:/web/apache/htdocs/${PROJECT}&amp;quot; description=&amp;quot;Output folder for build targets&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
verwenden. Diese bewirkt, dass der Web-Auftritt samt komprimierten Dateien &amp;lt;code&amp;gt;all.min.css&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;all.min.js&amp;lt;/code&amp;gt;&lt;br /&gt;
direkt in den Web-Ordner des externen Apache-Servers exportiert werden. Den Dokument-Root-Pfad müssen Sie wieder an Ihre Gegebenheiten anpassen.&lt;br /&gt;
&lt;br /&gt;
Der Vorteil der zweiten Lösung ist, dass die Änderung nach Ausführung der Build-Datei &#039;&#039;&#039;sofort&#039;&#039;&#039; auf dem externen Server verfügbar sind.&lt;br /&gt;
&lt;br /&gt;
=Quellen=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li value=&amp;quot;3&amp;quot;&amp;gt; {{Quelle|Kowarschick, W.: Multimedia-Programmierung}}&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Fortsetzung des Tutoriums=&lt;br /&gt;
&lt;br /&gt;
Bearbeiten Sie nun [[HTML5-Tutorium: Canvas: Hello World 04|Teil 4 des Tutoriums]].&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: HTML5-Tutorium: Canvas: Hello World]][[Kategorie: HTML5-Beispiel]][[Kategorie:Kapitel:Multimedia-Programmierung:Beispiele]]&lt;/div&gt;</summary>
		<author><name>Rayza</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=HTML5-Tutorium:_Canvas:_Hello_World_03&amp;diff=23868</id>
		<title>HTML5-Tutorium: Canvas: Hello World 03</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=HTML5-Tutorium:_Canvas:_Hello_World_03&amp;diff=23868"/>
		<updated>2012-10-12T20:40:35Z</updated>

		<summary type="html">&lt;p&gt;Rayza: /* Verbesserung der Implementierung von Teil 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{HTML5-Tutorium:Canvas:HelloWorld:Menü}}&lt;br /&gt;
&#039;&#039;&#039;Ergebnis&#039;&#039;&#039;: [http://glossar.hs-augsburg.de/beispiel/tutorium/html5_canvas/hello_world/html5_canvas_hello_world_03/WebContent/hallo.html &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt;]&lt;br /&gt;
([http://glossar.hs-augsburg.de/beispiel/tutorium/html5_canvas/hello_world/html5_canvas_hello_world_03 SVN-Repository])&lt;br /&gt;
&lt;br /&gt;
=Kompression des CSS- und JavaScript-Codes=&lt;br /&gt;
Die in [[HTML5-Tutorium: Canvas: Hello World 02|Teil 2]] erstellten CSS- und JavaScript-Dateien der Hello-World-Anwendung &lt;br /&gt;
sollen komprimiert werden, um die Zugriffszeiten zu beschleunigen. Dies erfolgt mit Hilfe des Tools &lt;br /&gt;
&amp;lt;code&amp;gt;YUI Compressor&amp;lt;/code&amp;gt;&amp;lt;ref name=&amp;quot;YUI Compressor&amp;quot;&amp;gt;[http://developer.yahoo.com/yui/compressor/ YUI Compressor]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Musterlösung herunterladen==&lt;br /&gt;
(Dieser Punkt kann übersprungen werden.)&lt;br /&gt;
&lt;br /&gt;
Laden Sie die Musterlösung &amp;lt;code&amp;gt;http://glossar.hs-augsburg.de/beispiel/tutorium/html5_canvas/hello_world/html5_canvas_hello_world_03/&amp;lt;/code&amp;gt;&lt;br /&gt;
auf [[HTML5-Tutorium: Canvas: Hello World 01#Musterl.C3.B6sung_herunterladen|bekannte Weise]] in Eclipse.&lt;br /&gt;
&lt;br /&gt;
==Neues Projekt anlegen==&lt;br /&gt;
&lt;br /&gt;
Legen Sie ein neues Projekt an&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Datei&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Neu&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Statisches Web-Projekt&amp;lt;/code&amp;gt;&lt;br /&gt;
# Project name: &amp;lt;code&amp;gt;HelloWorldCanvas03&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Legen Sie die Ordner &amp;lt;code&amp;gt;js&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;css&amp;lt;/code&amp;gt; an und kopieren Sie die Dateien &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;main.css&amp;lt;/code&amp;gt; und &lt;br /&gt;
&amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; aus &amp;lt;code&amp;gt;HelloWorldCanvas02&amp;lt;/code&amp;gt; in die entsprechenden Ordner &amp;lt;code&amp;gt;WebContent&amp;lt;/code&amp;gt; des neuen Projektes.&lt;br /&gt;
Passen Sie das &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt;-Element in der Datei &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; an.&lt;br /&gt;
&lt;br /&gt;
Nachdem Sie diese Version getestet haben, sollten Sie sie zunächst in Ihrem Repository speichern:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Projektexplorer&amp;lt;/code&amp;gt;: Rechtsklick auf &amp;lt;code&amp;gt;HelloWorldCanvas03&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Team&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Projekt gemeinsam nutzen&amp;lt;/code&amp;gt; &lt;br /&gt;
# &amp;lt;code&amp;gt;SVN&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt;&lt;br /&gt;
# Url: &amp;lt;code&amp;gt; https://praktikum.multimedia.hs-augsburg.de/svn/ACCOUNT&amp;lt;/code&amp;gt; (&#039;&#039;&#039;&amp;lt;code&amp;gt;ACCOUNT&amp;lt;/code&amp;gt; durch eigenen RZ-Account ersetzen&#039;&#039;&#039;) → &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; &lt;br /&gt;
# Use specified folder name: &amp;lt;code&amp;gt;mmprog/tutorium/HelloWorldCanvas03&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
# Im Projektexplorer: Rechtsklick auf &amp;lt;code&amp;gt;HelloWorldCanvas03&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Team&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Commit&amp;lt;/code&amp;gt;&lt;br /&gt;
# Comment: &amp;lt;code&amp;gt;Neues Projekt angelegt.&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Verbesserung der Implementierung von Teil 2==&lt;br /&gt;
&lt;br /&gt;
Bevor Sie den CSS- und JavaScript-Code komprimieren, sollten Sie die Implementierung aus Teil 2 des Tutoriums etwas verbessern.&lt;br /&gt;
&lt;br /&gt;
Die HTML-Datei &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; soll JavaScript-frei werden, d.h. HTML-Code und JavaScript-Code sollen noch besser&lt;br /&gt;
getrennt werden.&lt;br /&gt;
&lt;br /&gt;
Gehen Sie folgendermaßen vor. Löschen Sie zunächst in der HTML-Datei &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;onload=&amp;quot;init()&amp;quot;&amp;lt;/code&amp;gt; aus dem &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt;-Element sowie&lt;br /&gt;
* &amp;lt;code&amp;gt;onmousedown=&amp;quot;sayHello()&amp;quot;&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;input&amp;lt;/code&amp;gt;-Element vom Typ &amp;lt;code&amp;gt;button&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Fügen Sie anschließend in der JavaScript-Datei &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt; folgenden Code &#039;&#039;&#039;vor&#039;&#039;&#039; der Definition der &amp;lt;code&amp;gt;init&amp;lt;/code&amp;gt;-Funktion&lt;br /&gt;
ein:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// Führe die init-Funktion aus, nachdem die HTML-Seite vollständig &lt;br /&gt;
// vom Browser geladen wurde.&lt;br /&gt;
window.onload = init;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Die Funktion &amp;lt;code&amp;gt;window.onload&amp;lt;/code&amp;gt; wird vom Browser, sofern sie definiert wurde, automatisch ausgeführt,&lt;br /&gt;
sobald die zugehörige HTML-Seite vollständig geladen wurde.&lt;br /&gt;
&lt;br /&gt;
Zu guter Letzt müssen Sie noch den &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;-Button mit der &amp;lt;code&amp;gt;sayHello&amp;lt;/code&amp;gt;-Methode&lt;br /&gt;
verknüpfen, indem Sie folgenden Code &#039;&#039;&#039;in den Rumpf&#039;&#039;&#039; der &amp;lt;code&amp;gt;init&amp;lt;/code&amp;gt;-Funktion einfügen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  // Interaktive HTML-Formular-Elemente mit JavaScript verknüpfen.&lt;br /&gt;
  document.getElementById(&amp;quot;d_button_ok&amp;quot;).onmousedown = sayHello;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Dieser Code kann erst ausgeführt werden, nachdem die HTML-Seite vollständig geladen wurde,&lt;br /&gt;
da das HTML-Button-Objekt vorher nicht existiert. Daher muss die &amp;lt;code&amp;gt;init&amp;lt;/code&amp;gt;-Funktion&lt;br /&gt;
die Verknüpfung zwischen Button und Code herstellen. &lt;br /&gt;
Hätte man den obigen Code vor die &amp;lt;code&amp;gt;init&amp;lt;/code&amp;gt;-Methode&lt;br /&gt;
eingefügt, hätte der Browser gleich beim Laden der JavaScript-Datei versucht,&lt;br /&gt;
diese Verknüpfung herzustellen. Das wäre aber schief gegangen, das das Button-Objekt&lt;br /&gt;
zu diesem Zeitpunk noch nicht existiert.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wie gewohnt müssen Sie Ihren Code nun testen und – sobald er fehlerfrei läuft –&lt;br /&gt;
im Repository sichern.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Kompression der JavaScript- und CSS-Dateien==&lt;br /&gt;
&lt;br /&gt;
Die komprimierten JavaScript- und CSS-Dateien werden vom&lt;br /&gt;
&amp;lt;code&amp;gt;build&amp;lt;/code&amp;gt;-Skript (siehe nächsten Abschnitt) in den Dateien&lt;br /&gt;
* &amp;lt;code&amp;gt;css/main.css&amp;lt;/code&amp;gt; und&lt;br /&gt;
* &amp;lt;code&amp;gt;js/main.js&amp;lt;/code&amp;gt;&lt;br /&gt;
abgelegt. Um diese Dateien in der HTML-Datei &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt;&lt;br /&gt;
zu verwenden, müssen die Zeilen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Laden aller CSS-Dateien --&amp;gt;&lt;br /&gt;
    &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;css/main.css&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Laden aller JavaScript-Dateien --&amp;gt;&lt;br /&gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;js/main.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
in&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Laden aller CSS-Dateien --&amp;gt;&lt;br /&gt;
    &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;css/all.min.css&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;!--&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;css/main.css&amp;quot;   /&amp;gt;--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Laden aller JavaScript-Dateien --&amp;gt;&lt;br /&gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;js/all.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;!--&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;js/main.js&amp;quot;   &amp;gt;&amp;lt;/script&amp;gt;--&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
abgeändert werden.&lt;br /&gt;
&lt;br /&gt;
Wenn man nun das Projekt testet, passiert nicht mehr viel, da es die Dateien &amp;lt;code&amp;gt;all.min.css&amp;lt;/code&amp;gt; und&lt;br /&gt;
&amp;lt;code&amp;gt;all.mim.js&amp;lt;/code&amp;gt; noch nicht gibt.&lt;br /&gt;
&lt;br /&gt;
===Build-Skript ausführen===&lt;br /&gt;
&lt;br /&gt;
Bei der [[Installation von Eclipse]] sollten Sie den „YUI Compressor“ installieren.&lt;br /&gt;
Aufgabe dieses Tools ist es, die beiden Dateien  &amp;lt;code&amp;gt;all.min.css&amp;lt;/code&amp;gt; und&lt;br /&gt;
&amp;lt;code&amp;gt;all.mim.js&amp;lt;/code&amp;gt; zu erstellen. Sie enthalten&lt;br /&gt;
jeweils den Code aller CSS- bzw. JavaScript-Dateien, die sich im Ordner &amp;lt;code&amp;gt;css&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;js&amp;lt;/code&amp;gt; befinden.&lt;br /&gt;
Leerzeichen, Kommentare und andere überflüssige Informationen werden entfernt um Platz zu sparen und damit die Downloadzeiten zu reduzieren.&lt;br /&gt;
Man kann allerdings erzwingen, dass bestimmte Kommentare (z.B. Lizenzinformationen) erhalten bleiben.&amp;lt;ref&amp;gt;[https://github.com/yui/yuicompressor/blob/master/doc/README YUI-Compressor-Dokumentation]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusammen mit dem YUI Compressor wurde die Datei &amp;lt;code&amp;gt;[http://glossar.hs-augsburg.de/beispiel/eclipse/build.xml build.xml]&amp;lt;/code&amp;gt; installiert. Diese Skript muss zunächst in Eclipse integriert und anschließend ausgeführt werden:&lt;br /&gt;
&lt;br /&gt;
# Projektexplorer: Selektion des aktuellen Projektes&lt;br /&gt;
# Klick auf den Drop-Down-Pfeil rechts neben dem Icon „grüner Kreis mit weißem Pfeil und Werkzeugkasten“ → &amp;lt;code&amp;gt;Externe Tools Konfigurationen&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;Ant-Erstellung&amp;lt;/code&amp;gt; selektieren&lt;br /&gt;
# Klick auf das Icon „weißes Blatt mit Plus-Symbol“ (damit wird eine neues Skript erstellt, das ein externes Tool ausführt)&lt;br /&gt;
#* Name: &amp;lt;code&amp;gt;Compress&amp;lt;/code&amp;gt;&lt;br /&gt;
#* Erstellungsdatei: &amp;lt;code&amp;gt;D:\web\eclipse\dropins\yuicompressor\build.xml&amp;lt;/code&amp;gt; (das ist das zuvor erstellte Build-Skript, passen Sie gegebenenfalls den Ordner an)&lt;br /&gt;
#* Basisverzeichnis: &amp;lt;code&amp;gt;${project_loc}&amp;lt;/code&amp;gt;&lt;br /&gt;
#* Argumente: &amp;lt;code&amp;gt;-DPROJECT=${project_name}&amp;lt;/code&amp;gt;&lt;br /&gt;
#&amp;lt;code&amp;gt;Ausführen&amp;lt;/code&amp;gt; (Damit wird das Skript auf das zuvor selektierte Projekt angewendet.)&lt;br /&gt;
&lt;br /&gt;
Künftig kann irgendein Projekt selektiert werden. Mittels eines Klicks&lt;br /&gt;
auf das „grüner Kreis mit weißem Pfeil und Werkzeugkasten“ werden für diese Projekt&lt;br /&gt;
die Dateien  &amp;lt;code&amp;gt;all.min.css&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;all.min.js&amp;lt;/code&amp;gt; erstellt und die &lt;br /&gt;
Projektdateien (sofern dies im Build-Skript konfiguriert wurde) zum externen Server kopiert.&lt;br /&gt;
&lt;br /&gt;
Wenn man mehrere externe Tools verwendet, muss man den Drop-Down-Pfeil rechts neben dem Icon „grüner Kreis mit weißem Pfeil und Werkzeugkasten“ &lt;br /&gt;
klicken und dann das Tool &amp;lt;code&amp;gt;Compress&amp;lt;/code&amp;gt; klicken (nachdem man zuvor im Prjektexplorer ein Projekt selektiert hat).&lt;br /&gt;
&lt;br /&gt;
===Ergebnis des Build-Skripts===&lt;br /&gt;
&lt;br /&gt;
Nach Ausführen des Build-Skripts sollten die Dateien &amp;lt;code&amp;gt;all.min.css&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;all.min.js&amp;lt;/code&amp;gt; existieren und damit die Datei&lt;br /&gt;
&amp;lt;code&amp;gt;hello.html&amp;lt;/code&amp;gt; ausgeführt werden können.&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;code&amp;gt;all.min.css&amp;lt;/code&amp;gt;====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
#d_name{width:185px}#d_canvas{margin-top:10px;border-color:#bbb;border-width:2px;border-style:solid}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;code&amp;gt;all.min.js&amp;lt;/code&amp;gt;====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;use strict&amp;quot;;var v_canvas;var v_context;window.onload=init;function init(){v_canvas=document.getElementById(&amp;quot;d_canvas&amp;quot;);...&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Testen und speichern==&lt;br /&gt;
&lt;br /&gt;
Nun sollt Ihre Web-Anwendung wieder funktionieren.&lt;br /&gt;
Testen Sie sie und speichern Sie sie in Ihrem Repository.&lt;br /&gt;
&lt;br /&gt;
==Konfiguration des Build-Skripts==&lt;br /&gt;
&lt;br /&gt;
Abhänging von Ihrer Test-Umgebung müssen Sie die Zeile&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
  &amp;lt;property name=&amp;quot;DIST_DIR&amp;quot; value=&amp;quot;WebContent&amp;quot; description=&amp;quot;Output folder for build targets&amp;quot; /&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
der Datei &amp;lt;code&amp;gt;D:\web\eclipse\dropins\yuicompressor\build.xml&amp;lt;/code&amp;gt;, die Sie zusammen mit dem YUI Compressor installiert haben,&lt;br /&gt;
eventuell anpassen.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie einen externen Server (wie beispielsweise einen Apache) installiert haben,&lt;br /&gt;
dann können Sie auch die Zeile&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;property name=&amp;quot;DIST_DIR&amp;quot; value=&amp;quot;D:/web/apache/htdocs/${PROJECT}&amp;quot; description=&amp;quot;Output folder for build targets&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
verwenden. Diese bewirkt, dass der Web-Auftritt samt komprimierten Dateien &amp;lt;code&amp;gt;all.min.css&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;all.min.js&amp;lt;/code&amp;gt;&lt;br /&gt;
direkt in den Web-Ordner des externen Apache-Servers exportiert werden. Den Dokument-Root-Pfad müssen Sie wieder an Ihre Gegebenheiten anpassen.&lt;br /&gt;
&lt;br /&gt;
Der Vorteil der zweiten Lösung ist, dass die Änderung nach Ausführung der Build-Datei &#039;&#039;&#039;sofort&#039;&#039;&#039; auf dem externen Server verfügbar sind.&lt;br /&gt;
&lt;br /&gt;
=Quellen=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li value=&amp;quot;3&amp;quot;&amp;gt; {{Quelle|Kowarschick, W.: Multimedia-Programmierung}}&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: HTML5-Tutorium: Canvas: Hello World]][[Kategorie: HTML5-Beispiel]][[Kategorie:Kapitel:Multimedia-Programmierung:Beispiele]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rayza</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=HTML5-Tutorium:_Canvas:_Hello_World_03&amp;diff=23867</id>
		<title>HTML5-Tutorium: Canvas: Hello World 03</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=HTML5-Tutorium:_Canvas:_Hello_World_03&amp;diff=23867"/>
		<updated>2012-10-12T20:35:18Z</updated>

		<summary type="html">&lt;p&gt;Rayza: /* Verbesserung der Implementierung von Teil 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{HTML5-Tutorium:Canvas:HelloWorld:Menü}}&lt;br /&gt;
&#039;&#039;&#039;Ergebnis&#039;&#039;&#039;: [http://glossar.hs-augsburg.de/beispiel/tutorium/html5_canvas/hello_world/html5_canvas_hello_world_03/WebContent/hallo.html &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt;]&lt;br /&gt;
([http://glossar.hs-augsburg.de/beispiel/tutorium/html5_canvas/hello_world/html5_canvas_hello_world_03 SVN-Repository])&lt;br /&gt;
&lt;br /&gt;
=Kompression des CSS- und JavaScript-Codes=&lt;br /&gt;
Die in [[HTML5-Tutorium: Canvas: Hello World 02|Teil 2]] erstellten CSS- und JavaScript-Dateien der Hello-World-Anwendung &lt;br /&gt;
sollen komprimiert werden, um die Zugriffszeiten zu beschleunigen. Dies erfolgt mit Hilfe des Tools &lt;br /&gt;
&amp;lt;code&amp;gt;YUI Compressor&amp;lt;/code&amp;gt;&amp;lt;ref name=&amp;quot;YUI Compressor&amp;quot;&amp;gt;[http://developer.yahoo.com/yui/compressor/ YUI Compressor]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Musterlösung herunterladen==&lt;br /&gt;
(Dieser Punkt kann übersprungen werden.)&lt;br /&gt;
&lt;br /&gt;
Laden Sie die Musterlösung &amp;lt;code&amp;gt;http://glossar.hs-augsburg.de/beispiel/tutorium/html5_canvas/hello_world/html5_canvas_hello_world_03/&amp;lt;/code&amp;gt;&lt;br /&gt;
auf [[HTML5-Tutorium: Canvas: Hello World 01#Musterl.C3.B6sung_herunterladen|bekannte Weise]] in Eclipse.&lt;br /&gt;
&lt;br /&gt;
==Neues Projekt anlegen==&lt;br /&gt;
&lt;br /&gt;
Legen Sie ein neues Projekt an&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Datei&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Neu&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Statisches Web-Projekt&amp;lt;/code&amp;gt;&lt;br /&gt;
# Project name: &amp;lt;code&amp;gt;HelloWorldCanvas03&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Legen Sie die Ordner &amp;lt;code&amp;gt;js&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;css&amp;lt;/code&amp;gt; an und kopieren Sie die Dateien &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;main.css&amp;lt;/code&amp;gt; und &lt;br /&gt;
&amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; aus &amp;lt;code&amp;gt;HelloWorldCanvas02&amp;lt;/code&amp;gt; in die entsprechenden Ordner &amp;lt;code&amp;gt;WebContent&amp;lt;/code&amp;gt; des neuen Projektes.&lt;br /&gt;
Passen Sie das &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt;-Element in der Datei &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; an.&lt;br /&gt;
&lt;br /&gt;
Nachdem Sie diese Version getestet haben, sollten Sie sie zunächst in Ihrem Repository speichern:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Projektexplorer&amp;lt;/code&amp;gt;: Rechtsklick auf &amp;lt;code&amp;gt;HelloWorldCanvas03&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Team&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Projekt gemeinsam nutzen&amp;lt;/code&amp;gt; &lt;br /&gt;
# &amp;lt;code&amp;gt;SVN&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt;&lt;br /&gt;
# Url: &amp;lt;code&amp;gt; https://praktikum.multimedia.hs-augsburg.de/svn/ACCOUNT&amp;lt;/code&amp;gt; (&#039;&#039;&#039;&amp;lt;code&amp;gt;ACCOUNT&amp;lt;/code&amp;gt; durch eigenen RZ-Account ersetzen&#039;&#039;&#039;) → &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; &lt;br /&gt;
# Use specified folder name: &amp;lt;code&amp;gt;mmprog/tutorium/HelloWorldCanvas03&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
# Im Projektexplorer: Rechtsklick auf &amp;lt;code&amp;gt;HelloWorldCanvas03&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Team&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Commit&amp;lt;/code&amp;gt;&lt;br /&gt;
# Comment: &amp;lt;code&amp;gt;Neues Projekt angelegt.&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Verbesserung der Implementierung von Teil 2==&lt;br /&gt;
&lt;br /&gt;
Bevor Sie den CSS- und JavaScript-Code komprimieren, sollten Sie die Implementierung aus Teil 2 des Tutoriums etwas verbessern.&lt;br /&gt;
&lt;br /&gt;
Die HTML-Datei &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; soll JavaScript-frei werden, d.h. HTML-Code und JavaScript-Code sollen noch besser&lt;br /&gt;
getrennt werden.&lt;br /&gt;
&lt;br /&gt;
Gehen Sie folgendermaßen vor. Löschen Sie zunächst in der HTML-Datei &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;onload=&amp;quot;init()&amp;quot;&amp;lt;/code&amp;gt; aus dem &amp;lt;code&amp;gt;body&amp;lt;/code&amp;gt;-Element sowie&lt;br /&gt;
* &amp;lt;code&amp;gt;onmousedown=&amp;quot;sayHello()&amp;quot;&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;input&amp;lt;/code&amp;gt;-Element vom Typ &amp;lt;code&amp;gt;button&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Fügen Sie anschließend in der JavaScript-Datei &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt; folgenden Code &#039;&#039;&#039;vor&#039;&#039;&#039; der Definition der &amp;lt;code&amp;gt;init&amp;lt;/code&amp;gt;-Funktion&lt;br /&gt;
ein:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// Führe die init-Funktion aus, nachdem die HTML-Seite vollständig &lt;br /&gt;
// vom Browser geladen wurde.&lt;br /&gt;
window.onload = init;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Die Funktion &amp;lt;code&amp;gt;window.onload&amp;lt;/code&amp;gt; wird vom Browser, sofern sie definiert wurde, automatisch ausgeführt,&lt;br /&gt;
sobald die zugehörige HTML-Seite vollständig geladen wurde.&lt;br /&gt;
&lt;br /&gt;
Zu guter Letzt müssen Sie noch den &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;-Button mit der &amp;lt;code&amp;gt;sayHello&amp;lt;/code&amp;gt;-Methode&lt;br /&gt;
verknüpfen, indem Sie folgenden Code &#039;&#039;&#039;in den Rumpf&#039;&#039;&#039; der &amp;lt;code&amp;gt;init&amp;lt;/code&amp;gt;-Funktion einfügen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  // Interaktive HTML-Formular-Elemente mit JavaScript verknüpfen.&lt;br /&gt;
  document.getElementById(&amp;quot;d_button_ok&amp;quot;).onmousedown = sayHello;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Dieser Code kann erst ausgeführt werden, nachdem die HTML-Seite vollständig geladen wurde,&lt;br /&gt;
da das HTML-Button-Objekt vorher nicht existiert. Daher muss die &amp;lt;code&amp;gt;init&amp;lt;/code&amp;gt;-Funktion&lt;br /&gt;
die Verknüfung zwischen Button unde Code herstellen. &lt;br /&gt;
Hätte man den obigen Code vor die &amp;lt;code&amp;gt;init&amp;lt;/code&amp;gt;-Methode&lt;br /&gt;
eingefügt, hätte der Browser gleich beim Laden der JavaScript-Datei versucht,&lt;br /&gt;
diese Verknüpfung herzustellen. Das wäre aber schief gegangen, das das Button-Objekt&lt;br /&gt;
zu diesem Zeitpunk noch nicht existiert.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wie gewohnt müssen Sie Ihren Code nun testen und – sobald er fehlerfrei läuft –&lt;br /&gt;
im Repository sichern.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Kompression der JavaScript- und CSS-Dateien==&lt;br /&gt;
&lt;br /&gt;
Die komprimierten JavaScript- und CSS-Dateien werden vom&lt;br /&gt;
&amp;lt;code&amp;gt;build&amp;lt;/code&amp;gt;-Skript (siehe nächsten Abschnitt) in den Dateien&lt;br /&gt;
* &amp;lt;code&amp;gt;css/main.css&amp;lt;/code&amp;gt; und&lt;br /&gt;
* &amp;lt;code&amp;gt;js/main.js&amp;lt;/code&amp;gt;&lt;br /&gt;
abgelegt. Um diese Dateien in der HTML-Datei &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt;&lt;br /&gt;
zu verwenden, müssen die Zeilen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Laden aller CSS-Dateien --&amp;gt;&lt;br /&gt;
    &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;css/main.css&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Laden aller JavaScript-Dateien --&amp;gt;&lt;br /&gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;js/main.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
in&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Laden aller CSS-Dateien --&amp;gt;&lt;br /&gt;
    &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;css/all.min.css&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;!--&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;css/main.css&amp;quot;   /&amp;gt;--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Laden aller JavaScript-Dateien --&amp;gt;&lt;br /&gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;js/all.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;!--&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;js/main.js&amp;quot;   &amp;gt;&amp;lt;/script&amp;gt;--&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
abgeändert werden.&lt;br /&gt;
&lt;br /&gt;
Wenn man nun das Projekt testet, passiert nicht mehr viel, da es die Dateien &amp;lt;code&amp;gt;all.min.css&amp;lt;/code&amp;gt; und&lt;br /&gt;
&amp;lt;code&amp;gt;all.mim.js&amp;lt;/code&amp;gt; noch nicht gibt.&lt;br /&gt;
&lt;br /&gt;
===Build-Skript ausführen===&lt;br /&gt;
&lt;br /&gt;
Bei der [[Installation von Eclipse]] sollten Sie den „YUI Compressor“ installieren.&lt;br /&gt;
Aufgabe dieses Tools ist es, die beiden Dateien  &amp;lt;code&amp;gt;all.min.css&amp;lt;/code&amp;gt; und&lt;br /&gt;
&amp;lt;code&amp;gt;all.mim.js&amp;lt;/code&amp;gt; zu erstellen. Sie enthalten&lt;br /&gt;
jeweils den Code aller CSS- bzw. JavaScript-Dateien, die sich im Ordner &amp;lt;code&amp;gt;css&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;js&amp;lt;/code&amp;gt; befinden.&lt;br /&gt;
Leerzeichen, Kommentare und andere überflüssige Informationen werden entfernt um Platz zu sparen und damit die Downloadzeiten zu reduzieren.&lt;br /&gt;
Man kann allerdings erzwingen, dass bestimmte Kommentare (z.B. Lizenzinformationen) erhalten bleiben.&amp;lt;ref&amp;gt;[https://github.com/yui/yuicompressor/blob/master/doc/README YUI-Compressor-Dokumentation]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusammen mit dem YUI Compressor wurde die Datei &amp;lt;code&amp;gt;[http://glossar.hs-augsburg.de/beispiel/eclipse/build.xml build.xml]&amp;lt;/code&amp;gt; installiert. Diese Skript muss zunächst in Eclipse integriert und anschließend ausgeführt werden:&lt;br /&gt;
&lt;br /&gt;
# Projektexplorer: Selektion des aktuellen Projektes&lt;br /&gt;
# Klick auf den Drop-Down-Pfeil rechts neben dem Icon „grüner Kreis mit weißem Pfeil und Werkzeugkasten“ → &amp;lt;code&amp;gt;Externe Tools Konfigurationen&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;Ant-Erstellung&amp;lt;/code&amp;gt; selektieren&lt;br /&gt;
# Klick auf das Icon „weißes Blatt mit Plus-Symbol“ (damit wird eine neues Skript erstellt, das ein externes Tool ausführt)&lt;br /&gt;
#* Name: &amp;lt;code&amp;gt;Compress&amp;lt;/code&amp;gt;&lt;br /&gt;
#* Erstellungsdatei: &amp;lt;code&amp;gt;D:\web\eclipse\dropins\yuicompressor\build.xml&amp;lt;/code&amp;gt; (das ist das zuvor erstellte Build-Skript, passen Sie gegebenenfalls den Ordner an)&lt;br /&gt;
#* Basisverzeichnis: &amp;lt;code&amp;gt;${project_loc}&amp;lt;/code&amp;gt;&lt;br /&gt;
#* Argumente: &amp;lt;code&amp;gt;-DPROJECT=${project_name}&amp;lt;/code&amp;gt;&lt;br /&gt;
#&amp;lt;code&amp;gt;Ausführen&amp;lt;/code&amp;gt; (Damit wird das Skript auf das zuvor selektierte Projekt angewendet.)&lt;br /&gt;
&lt;br /&gt;
Künftig kann irgendein Projekt selektiert werden. Mittels eines Klicks&lt;br /&gt;
auf das „grüner Kreis mit weißem Pfeil und Werkzeugkasten“ werden für diese Projekt&lt;br /&gt;
die Dateien  &amp;lt;code&amp;gt;all.min.css&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;all.min.js&amp;lt;/code&amp;gt; erstellt und die &lt;br /&gt;
Projektdateien (sofern dies im Build-Skript konfiguriert wurde) zum externen Server kopiert.&lt;br /&gt;
&lt;br /&gt;
Wenn man mehrere externe Tools verwendet, muss man den Drop-Down-Pfeil rechts neben dem Icon „grüner Kreis mit weißem Pfeil und Werkzeugkasten“ &lt;br /&gt;
klicken und dann das Tool &amp;lt;code&amp;gt;Compress&amp;lt;/code&amp;gt; klicken (nachdem man zuvor im Prjektexplorer ein Projekt selektiert hat).&lt;br /&gt;
&lt;br /&gt;
===Ergebnis des Build-Skripts===&lt;br /&gt;
&lt;br /&gt;
Nach Ausführen des Build-Skripts sollten die Dateien &amp;lt;code&amp;gt;all.min.css&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;all.min.js&amp;lt;/code&amp;gt; existieren und damit die Datei&lt;br /&gt;
&amp;lt;code&amp;gt;hello.html&amp;lt;/code&amp;gt; ausgeführt werden können.&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;code&amp;gt;all.min.css&amp;lt;/code&amp;gt;====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
#d_name{width:185px}#d_canvas{margin-top:10px;border-color:#bbb;border-width:2px;border-style:solid}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====&amp;lt;code&amp;gt;all.min.js&amp;lt;/code&amp;gt;====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;use strict&amp;quot;;var v_canvas;var v_context;window.onload=init;function init(){v_canvas=document.getElementById(&amp;quot;d_canvas&amp;quot;);...&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Testen und speichern==&lt;br /&gt;
&lt;br /&gt;
Nun sollt Ihre Web-Anwendung wieder funktionieren.&lt;br /&gt;
Testen Sie sie und speichern Sie sie in Ihrem Repository.&lt;br /&gt;
&lt;br /&gt;
==Konfiguration des Build-Skripts==&lt;br /&gt;
&lt;br /&gt;
Abhänging von Ihrer Test-Umgebung müssen Sie die Zeile&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
  &amp;lt;property name=&amp;quot;DIST_DIR&amp;quot; value=&amp;quot;WebContent&amp;quot; description=&amp;quot;Output folder for build targets&amp;quot; /&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
der Datei &amp;lt;code&amp;gt;D:\web\eclipse\dropins\yuicompressor\build.xml&amp;lt;/code&amp;gt;, die Sie zusammen mit dem YUI Compressor installiert haben,&lt;br /&gt;
eventuell anpassen.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie einen externen Server (wie beispielsweise einen Apache) installiert haben,&lt;br /&gt;
dann können Sie auch die Zeile&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;property name=&amp;quot;DIST_DIR&amp;quot; value=&amp;quot;D:/web/apache/htdocs/${PROJECT}&amp;quot; description=&amp;quot;Output folder for build targets&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
verwenden. Diese bewirkt, dass der Web-Auftritt samt komprimierten Dateien &amp;lt;code&amp;gt;all.min.css&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;all.min.js&amp;lt;/code&amp;gt;&lt;br /&gt;
direkt in den Web-Ordner des externen Apache-Servers exportiert werden. Den Dokument-Root-Pfad müssen Sie wieder an Ihre Gegebenheiten anpassen.&lt;br /&gt;
&lt;br /&gt;
Der Vorteil der zweiten Lösung ist, dass die Änderung nach Ausführung der Build-Datei &#039;&#039;&#039;sofort&#039;&#039;&#039; auf dem externen Server verfügbar sind.&lt;br /&gt;
&lt;br /&gt;
=Quellen=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li value=&amp;quot;3&amp;quot;&amp;gt; {{Quelle|Kowarschick, W.: Multimedia-Programmierung}}&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: HTML5-Tutorium: Canvas: Hello World]][[Kategorie: HTML5-Beispiel]][[Kategorie:Kapitel:Multimedia-Programmierung:Beispiele]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rayza</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=HTML5-Tutorium:_Canvas:_Hello_World_02&amp;diff=23866</id>
		<title>HTML5-Tutorium: Canvas: Hello World 02</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=HTML5-Tutorium:_Canvas:_Hello_World_02&amp;diff=23866"/>
		<updated>2012-10-12T18:03:24Z</updated>

		<summary type="html">&lt;p&gt;Rayza: /* Testen und Sichern des Projektes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{HTML5-Tutorium:Canvas:HelloWorld:Menü}}&lt;br /&gt;
&#039;&#039;&#039;Ergebnis&#039;&#039;&#039;: [http://glossar.hs-augsburg.de/beispiel/tutorium/html5_canvas/hello_world/html5_canvas_hello_world_02/WebContent/hallo.html &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt;]&lt;br /&gt;
([http://glossar.hs-augsburg.de/beispiel/tutorium/html5_canvas/hello_world/html5_canvas_hello_world_02 SVN-Repository])&lt;br /&gt;
&lt;br /&gt;
=HTML5: Hello-&amp;amp;lt;name&amp;amp;gt;-Anwendung mit Canvas=&lt;br /&gt;
Die in [[HTML5-Tutorium: Canvas: Hello World 01|Teil 1]] erstellte Hello-World-Anwendung wird so erweitert,&lt;br /&gt;
dass der Benutzer seinen Namen eingeben kann und mit diesem&lt;br /&gt;
anschließend begrüßt wird. Außerdem wird das Canvas-Layout mit Hilfe von CSS modifiziert.&lt;br /&gt;
&lt;br /&gt;
==Musterlösung herunterladen==&lt;br /&gt;
(Dieser Punkt kann übersprungen werden.)&lt;br /&gt;
&lt;br /&gt;
Laden Sie die Musterlösung &amp;lt;code&amp;gt;http://glossar.hs-augsburg.de/beispiel/tutorium/html5_canvas/hello_world/html5_canvas_hello_world_02/&amp;lt;/code&amp;gt;&lt;br /&gt;
auf [[HTML5-Tutorium: Canvas: Hello World 01#Musterl.C3.B6sung_herunterladen|bekannte Weise]] in Eclipse.&lt;br /&gt;
&lt;br /&gt;
==Neues Projekt anlegen==&lt;br /&gt;
&lt;br /&gt;
Legen Sie ein neues Projekt an:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Datei&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Neu&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Statisches Web-Projekt&amp;lt;/code&amp;gt;&lt;br /&gt;
# Project name: &amp;lt;code&amp;gt;HelloWorldCanvas02&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Speichern Sie Ihr Projekt wiederum in Ihrem Repository:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Projektexplorer&amp;lt;/code&amp;gt;: Rechtsklick auf &amp;lt;code&amp;gt;HelloWorldCanvas02&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Team&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Projekt gemeinsam nutzen&amp;lt;/code&amp;gt; &lt;br /&gt;
# &amp;lt;code&amp;gt;SVN&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt;&lt;br /&gt;
# Url: &amp;lt;code&amp;gt; https://praktikum.multimedia.hs-augsburg.de/svn/ACCOUNT&amp;lt;/code&amp;gt; (&#039;&#039;&#039;&amp;lt;code&amp;gt;ACCOUNT&amp;lt;/code&amp;gt; durch eigenen RZ-Account ersetzen&#039;&#039;&#039;) → &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; &lt;br /&gt;
# Use specified folder name: &amp;lt;code&amp;gt;mmprog/tutorium/HelloWorldCanvas02&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Projekt im Repository sichern==&lt;br /&gt;
&lt;br /&gt;
Das neu angelegte Projekt wird als erstes im Repositotry gesichert:&lt;br /&gt;
&lt;br /&gt;
# Im Projektexplorer: Rechtsklick auf &amp;lt;code&amp;gt;HelloWorldCanvas02&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Team&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Commit&amp;lt;/code&amp;gt;&lt;br /&gt;
# Comment: &amp;lt;code&amp;gt;Neues Projekt angelegt.&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Dateien erstellen==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt;===&lt;br /&gt;
Erstellen Sie im Ordner &amp;lt;code&amp;gt;WebContent/js&amp;lt;/code&amp;gt; des Projektes die Datei &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt;.&lt;br /&gt;
Diese Datei enthält nun zwei Funktionen:&lt;br /&gt;
* &amp;lt;code&amp;gt;init&amp;lt;/code&amp;gt;: Diese wird nach dem Laden der HTML-Seiten in einen Browser aufgerufen, um die Zeichenbühne (&amp;lt;code&amp;gt;canvas&amp;lt;/code&amp;gt;) zu initialisieren.&lt;br /&gt;
* &amp;lt;code&amp;gt;sayHello&amp;lt;/code&amp;gt;: Diese wird aufgerufen, sobald der Benutzer seinen Namen eingegeben und den OK-Button gedrückt hat.&lt;br /&gt;
&lt;br /&gt;
====Inhalt von &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;use strict&amp;quot;; /* Warne vor unsauberem JavaScript-Code! */&lt;br /&gt;
 &lt;br /&gt;
var v_canvas; &lt;br /&gt;
var v_context; &lt;br /&gt;
 &lt;br /&gt;
/** Initialisiert die Bühne (Canvas). */&lt;br /&gt;
function init()&lt;br /&gt;
{&lt;br /&gt;
  v_canvas        = document.getElementById(&amp;quot;d_canvas&amp;quot;);&lt;br /&gt;
  v_canvas.width  = 300;&lt;br /&gt;
  v_canvas.height =  27;&lt;br /&gt;
&lt;br /&gt;
  v_context = v_canvas.getContext(&amp;quot;2d&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/**&lt;br /&gt;
 * Löscht den aktuellen Inhalt von der Bühne und schreibt dann einen Meldung &lt;br /&gt;
 * auf die Bühne, bei der der Benutzer mit seinem Namen begrüßt wird.&lt;br /&gt;
 * Der Name des Benutzers wird aus einem Eingabefeld der HTML-Seite gelesen.&lt;br /&gt;
 */ &lt;br /&gt;
function sayHello()&lt;br /&gt;
{&lt;br /&gt;
  // Textausgabe (auf der Bühne)&lt;br /&gt;
  v_context&lt;br /&gt;
    .clearRect(0, 0, v_canvas.width, v_canvas.height); // clear canvas&lt;br /&gt;
  v_context&lt;br /&gt;
    .font = &amp;quot;bold 20px &#039;Times New Roman&#039;, Times, serif&amp;quot;;&lt;br /&gt;
  v_context&lt;br /&gt;
    .fillText(&amp;quot;Hallo &amp;quot; + document.getElementById(&amp;quot;d_name&amp;quot;).value + &amp;quot;!&amp;quot;, 5, 20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;code&amp;gt;main.css&amp;lt;/code&amp;gt;===&lt;br /&gt;
Erstellen Sie im Ordner &amp;lt;code&amp;gt;WebContent/css&amp;lt;/code&amp;gt; des Projektes die Datei &amp;lt;code&amp;gt;main.css&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
====Inhalt von &amp;lt;code&amp;gt;main.css&amp;lt;/code&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* Das Text-Eingabefeld wird obtisch an die Bühne angepasst. */&lt;br /&gt;
#d_name&lt;br /&gt;
{&lt;br /&gt;
  width: 185px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Die Bühne wird mit Hilfe eines Rands optisch hervorgehoben. */&lt;br /&gt;
#d_canvas&lt;br /&gt;
{&lt;br /&gt;
  margin-top:   10px; &lt;br /&gt;
&lt;br /&gt;
  border-color: #BBBBBB; &lt;br /&gt;
  border-width: 2px; &lt;br /&gt;
  border-style: solid;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt;===&lt;br /&gt;
Erstellen Sie im Ordner &amp;lt;code&amp;gt;WebContent&amp;lt;/code&amp;gt; des Projektes die Datei &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt;,&lt;br /&gt;
die den Benutzer nach seinem Namen fragt und diesen, nachdem der Benutzer einen OK-Button&lt;br /&gt;
gedrückt hat, zur Begrüßung des Benutzers verwendet.&lt;br /&gt;
&lt;br /&gt;
====Inhalt von &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Titel der HTML-Seite; wird i. Allg. im Browser im Reiter angezeigt --&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;HTML5-Tutorium: Canvas: Hello World 02&amp;lt;/title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Als HTML-Encoding sollte man stets UTF-8 verwenden. --&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Korrektes Skalieren der Seite auf einem mobilen Endgerät --&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0, user-scalable=yes&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Laden aller CSS-Dateien --&amp;gt;&lt;br /&gt;
    &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;css/main.css&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Laden aller JavaScript-Dateien --&amp;gt;&lt;br /&gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;js/main.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body onload=&amp;quot;init()&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Das Eingabeformular zur Eingabe des Benutzernamens --&amp;gt;&lt;br /&gt;
    &amp;lt;form &amp;gt;&lt;br /&gt;
      &amp;lt;label&amp;gt;Ihr Name:&amp;lt;/label&amp;gt;&lt;br /&gt;
      &amp;lt;input id=&amp;quot;d_name&amp;quot; type=&amp;quot;text&amp;quot;   value=&amp;quot;&amp;quot;                           /&amp;gt;&lt;br /&gt;
      &amp;lt;input             type=&amp;quot;button&amp;quot; value=&amp;quot;OK&amp;quot; onmousedown=&amp;quot;sayHello()&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Die Bühne --&amp;gt;&lt;br /&gt;
    &amp;lt;canvas id=&amp;quot;d_canvas&amp;quot;&amp;gt;&lt;br /&gt;
      Ihr Browser unterstützt HTML5 leider nicht!&lt;br /&gt;
    &amp;lt;/canvas&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Testen und Sichern des Projektes==&lt;br /&gt;
&lt;br /&gt;
Testen Sie zunächst Ihr Projekt und sichern Sie dann das Ergebnis:&lt;br /&gt;
&lt;br /&gt;
# Im Projektexplorer: Rechtsklick auf &amp;lt;code&amp;gt;HelloWorldCanvas02&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Team&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Commit&amp;lt;/code&amp;gt;&lt;br /&gt;
# Enter a comment for the commit operation: &amp;lt;code&amp;gt;hallo.html mit main.js und main.css wurden erstellt.&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend sollten Sie ein wenig mit den drei Dateien experimentieren, indem Sie &lt;br /&gt;
sinnvolle und fehlerhafte Änderungen vornehmen. Löschen Sie z.B. die Zeilen mit dem Aufruf &lt;br /&gt;
der Funktion &amp;lt;code&amp;gt;clearRect&amp;lt;/code&amp;gt; aus der Datei &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt; und testen Sie Ihre&lt;br /&gt;
Anwendung erneut. (Tipp: Geben Sie mehrmals hintereinander jeweils einen anderen Namen ein.)&lt;br /&gt;
&lt;br /&gt;
Speichern Sie zu guter Letzt Ihre sinnvollen Änderungen auch im Repository (mit kurzem, aber sinnvollem Kommentar!).&lt;br /&gt;
&lt;br /&gt;
=Optional: Apache als Test-Server=&lt;br /&gt;
&lt;br /&gt;
Anstelle des Eclipse-eigenen Testserver kann man auch einen beliebigen&lt;br /&gt;
anderen Server (wie z.B. [[Apache]] oder [[Tomcat]]) zum Testen einer Web-Anwendung verwenden.&lt;br /&gt;
Der Vorteil dieser Variante ist, dass man den Zielserver gemäß seinen Bedürfnissen wählen und konfigurieren kann&lt;br /&gt;
und dass die Anwendung von Anfang an auf dem richtigen Server getestet wird.&lt;br /&gt;
&lt;br /&gt;
Voraussetzung ist, dass ein entsprechender Server lokal installiert wurde:&lt;br /&gt;
* [[Installation von Apache (Windows)]], [[Installation von Apache (Mac OS X)]], [[Installation von Apache (Unix)]] &lt;br /&gt;
&lt;br /&gt;
Der Apache-Server muss laufen, sonst funktioniert der nachfolgende Test nicht! &lt;br /&gt;
&lt;br /&gt;
Definieren eines neuen Apache-Test-Servers in Eclipse (nachdem der Apache installiert und gestartet wurde):&lt;br /&gt;
&lt;br /&gt;
# Projektexplorer: Rechtklick auf den Root-Ordner des aktuellen Projektes &amp;lt;code&amp;gt;HelloWorldCanvas02&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Eigenschaften&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Server&amp;lt;/code&amp;gt; → Standardserver: &amp;lt;code&amp;gt;keine&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
# Im Projektverzeichnis: &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; selektieren → Klick auf Icon „grüner Kreis mit weißem Dreieck“ → &amp;lt;code&amp;gt;Run on Server&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
#&amp;lt;code&amp;gt;Neuen Server manuell definieren&amp;lt;/code&amp;gt; selektieren → Severziel eingeben: &amp;lt;code&amp;gt;HTTP Server&amp;lt;/code&amp;gt; selektieren&lt;br /&gt;
# Hostname des Servers: &amp;lt;code&amp;gt;localhost&amp;lt;/code&amp;gt;, Server name: &amp;lt;code&amp;gt;Apache&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt;&lt;br /&gt;
# Publishing Directory: &amp;lt;code&amp;gt;D:\web\apache\htdocs&amp;lt;/code&amp;gt; (Webverzeichnis des Servers, abhängig davon, wohin Sie den Apache installiert haben) → &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt;&lt;br /&gt;
# evtl. Anpassungen vornehmen → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beim nächsten Aufruf von &amp;lt;code&amp;gt;Run on Server&amp;lt;/code&amp;gt; wird der Server &amp;lt;code&amp;gt;Apache&amp;lt;/code&amp;gt; unter der Liste der vorhandenen Server aufgeführt.&lt;br /&gt;
Man sollte diesen Server wählen und dann das Häckchen vor &amp;lt;code&amp;gt;Server als Projektstandardeinstellung festlegen&amp;lt;/code&amp;gt; setzen,&lt;br /&gt;
damit man die Serverwahl nicht bei jedem Test erneu ausführen muss.&lt;br /&gt;
&lt;br /&gt;
Als Browser wird der in Eclipse integrierte Browser verwendet. &lt;br /&gt;
Besser ist es den Firefox als Standardbrowser zu verwenden:&lt;br /&gt;
&lt;br /&gt;
* Klick auf &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; → Klick auf &amp;lt;code&amp;gt;Web&amp;lt;/code&amp;gt; → Klick auf &amp;lt;code&amp;gt;Web&amp;lt;/code&amp;gt; → Klick auf &amp;lt;code&amp;gt;Firefox&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein Problem bleibt bestehen: Bei jedem Aufruf von &amp;lt;code&amp;gt;Run on Server&amp;lt;/code&amp;gt; wird in Eclipse oder Firefox ein neues&lt;br /&gt;
Browserfester geöffnet. Um dies zu verhindern, kann man folgenden Trick anwenden, &#039;&#039;&#039;nachdem&#039;&#039;&#039; &amp;lt;code&amp;gt;Run on Server&amp;lt;/code&amp;gt; zum ersten Mal ausgeführt worden ist:&lt;br /&gt;
&lt;br /&gt;
# Im mittleren unteren Fenster den Reiter &amp;lt;code&amp;gt;Server&amp;lt;/code&amp;gt; selektieren&lt;br /&gt;
# &amp;lt;code&amp;gt;Apache&amp;lt;/code&amp;gt; aufklappen und selektieren&lt;br /&gt;
# Wenn dort nicht &amp;lt;code&amp;gt;synchronisiert&amp;lt;/code&amp;gt;, sondern &amp;lt;code&amp;gt;Erneut publizieren&amp;lt;/code&amp;gt; steht: Im unteren mittleren Fenster: Klick auf das vierte Icon von rechts (&amp;lt;code&amp;gt;Auf dem Server bereitstellen&amp;lt;/code&amp;gt;)&lt;br /&gt;
# Sobald beim &amp;lt;code&amp;gt;Apache&amp;lt;/code&amp;gt; wieder &amp;lt;code&amp;gt;synchronisiert&amp;lt;/code&amp;gt; steht, kann im Browserfester der Reload-Button gedrückt werden, um die neuen Daten abzufrufen. (Eventuell muss der [http://de.wikipedia.org/wiki/Hilfe:Cache Browser-Cache geleert] werden.)&lt;br /&gt;
&lt;br /&gt;
=Quellen=&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
# {{Quelle|Kowarschick, W.: Multimedia-Programmierung}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
# [http://www.w3schools.com/html5/ w3schools.com: HTML5 Tutorial]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Kategorie: HTML5-Tutorium: Canvas: Hello World]][[Kategorie: HTML5-Beispiel]][[Kategorie:Kapitel:Multimedia-Programmierung:Beispiele]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rayza</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=HTML5-Tutorium:_Canvas:_Hello_World_02&amp;diff=23811</id>
		<title>HTML5-Tutorium: Canvas: Hello World 02</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=HTML5-Tutorium:_Canvas:_Hello_World_02&amp;diff=23811"/>
		<updated>2012-10-11T21:21:59Z</updated>

		<summary type="html">&lt;p&gt;Rayza: /* Testen und Sichern des Projektes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{HTML5-Tutorium:Canvas:HelloWorld:Menü}}&lt;br /&gt;
&#039;&#039;&#039;Ergebnis&#039;&#039;&#039;: [http://glossar.hs-augsburg.de/beispiel/tutorium/html5_canvas/hello_world/html5_canvas_hello_world_02/WebContent/hallo.html &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt;]&lt;br /&gt;
([http://glossar.hs-augsburg.de/beispiel/tutorium/html5_canvas/hello_world/html5_canvas_hello_world_02 SVN-Repository])&lt;br /&gt;
&lt;br /&gt;
=HTML5: Hello-&amp;amp;lt;name&amp;amp;gt;-Anwendung mit Canvas=&lt;br /&gt;
Die in [[HTML5-Tutorium: Canvas: Hello World 01|Teil 1]] erstellte Hello-World-Anwendung wird so erweitert,&lt;br /&gt;
dass der Benutzer seinen Namen eingeben kann und mit diesem&lt;br /&gt;
anschließend begrüßt wird. Außerdem wird das Canvas-Layout mit Hilfe von CSS modifiziert.&lt;br /&gt;
&lt;br /&gt;
==Musterlösung herunterladen==&lt;br /&gt;
(Dieser Punkt kann übersprungen werden.)&lt;br /&gt;
&lt;br /&gt;
Laden Sie die Musterlösung &amp;lt;code&amp;gt;http://glossar.hs-augsburg.de/beispiel/tutorium/html5_canvas/hello_world/html5_canvas_hello_world_02/&amp;lt;/code&amp;gt;&lt;br /&gt;
auf [[HTML5-Tutorium: Canvas: Hello World 01#Musterl.C3.B6sung_herunterladen|bekannte Weise]] in Eclipse.&lt;br /&gt;
&lt;br /&gt;
==Neues Projekt anlegen==&lt;br /&gt;
&lt;br /&gt;
Legen Sie ein neues Projekt an:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Datei&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Neu&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Statisches Web-Projekt&amp;lt;/code&amp;gt;&lt;br /&gt;
# Project name: &amp;lt;code&amp;gt;HelloWorldCanvas02&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Speichern Sie Ihr Projekt wiederum in Ihrem Repository:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Projektexplorer&amp;lt;/code&amp;gt;: Rechtsklick auf &amp;lt;code&amp;gt;HelloWorldCanvas02&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Team&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Projekt gemeinsam nutzen&amp;lt;/code&amp;gt; &lt;br /&gt;
# &amp;lt;code&amp;gt;SVN&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt;&lt;br /&gt;
# Url: &amp;lt;code&amp;gt; https://praktikum.multimedia.hs-augsburg.de/svn/ACCOUNT&amp;lt;/code&amp;gt; (&#039;&#039;&#039;&amp;lt;code&amp;gt;ACCOUNT&amp;lt;/code&amp;gt; durch eigenen RZ-Account ersetzen&#039;&#039;&#039;) → &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; &lt;br /&gt;
# Use specified folder name: &amp;lt;code&amp;gt;mmprog/tutorium/HelloWorldCanvas02&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Projekt im Repository sichern==&lt;br /&gt;
&lt;br /&gt;
Das neu angelegte Projekt wird als erstes im Repositotry gesichert:&lt;br /&gt;
&lt;br /&gt;
# Im Projektexplorer: Rechtsklick auf &amp;lt;code&amp;gt;HelloWorldCanvas02&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Team&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Commit&amp;lt;/code&amp;gt;&lt;br /&gt;
# Comment: &amp;lt;code&amp;gt;Neues Projekt angelegt.&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Dateien erstellen==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt;===&lt;br /&gt;
Erstellen Sie im Ordner &amp;lt;code&amp;gt;WebContent/js&amp;lt;/code&amp;gt; des Projektes die Datei &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt;.&lt;br /&gt;
Diese Datei enthält nun zwei Funktionen:&lt;br /&gt;
* &amp;lt;code&amp;gt;init&amp;lt;/code&amp;gt;: Diese wird nach dem Laden der HTML-Seiten in einen Browser aufgerufen, um die Zeichenbühne (&amp;lt;code&amp;gt;canvas&amp;lt;/code&amp;gt;) zu initialisieren.&lt;br /&gt;
* &amp;lt;code&amp;gt;sayHello&amp;lt;/code&amp;gt;: Diese wird aufgerufen, sobald der Benutzer seinen Namen eingegeben und den OK-Button gedrückt hat.&lt;br /&gt;
&lt;br /&gt;
====Inhalt von &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;use strict&amp;quot;; /* Warne vor unsauberem JavaScript-Code! */&lt;br /&gt;
 &lt;br /&gt;
var v_canvas; &lt;br /&gt;
var v_context; &lt;br /&gt;
 &lt;br /&gt;
/** Initialisiert die Bühne (Canvas). */&lt;br /&gt;
function init()&lt;br /&gt;
{&lt;br /&gt;
  v_canvas        = document.getElementById(&amp;quot;d_canvas&amp;quot;);&lt;br /&gt;
  v_canvas.width  = 300;&lt;br /&gt;
  v_canvas.height =  27;&lt;br /&gt;
&lt;br /&gt;
  v_context = v_canvas.getContext(&amp;quot;2d&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/**&lt;br /&gt;
 * Löscht den aktuellen Inhalt von der Bühne und schreibt dann einen Meldung &lt;br /&gt;
 * auf die Bühne, bei der der Benutzer mit seinem Namen begrüßt wird.&lt;br /&gt;
 * Der Name des Benutzers wird aus einem Eingabefeld der HTML-Seite gelesen.&lt;br /&gt;
 */ &lt;br /&gt;
function sayHello()&lt;br /&gt;
{&lt;br /&gt;
  // Textausgabe (auf der Bühne)&lt;br /&gt;
  v_context&lt;br /&gt;
    .clearRect(0, 0, v_canvas.width, v_canvas.height); // clear canvas&lt;br /&gt;
  v_context&lt;br /&gt;
    .font = &amp;quot;bold 20px &#039;Times New Roman&#039;, Times, serif&amp;quot;;&lt;br /&gt;
  v_context&lt;br /&gt;
    .fillText(&amp;quot;Hallo &amp;quot; + document.getElementById(&amp;quot;d_name&amp;quot;).value + &amp;quot;!&amp;quot;, 5, 20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;code&amp;gt;main.css&amp;lt;/code&amp;gt;===&lt;br /&gt;
Erstellen Sie im Ordner &amp;lt;code&amp;gt;WebContent/css&amp;lt;/code&amp;gt; des Projektes die Datei &amp;lt;code&amp;gt;main.css&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
====Inhalt von &amp;lt;code&amp;gt;main.css&amp;lt;/code&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* Das Text-Eingabefeld wird obtisch an die Bühne angepasst. */&lt;br /&gt;
#d_name&lt;br /&gt;
{&lt;br /&gt;
  width: 185px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Die Bühne wird mit Hilfe eines Rands optisch hervorgehoben. */&lt;br /&gt;
#d_canvas&lt;br /&gt;
{&lt;br /&gt;
  margin-top:   10px; &lt;br /&gt;
&lt;br /&gt;
  border-color: #BBBBBB; &lt;br /&gt;
  border-width: 2px; &lt;br /&gt;
  border-style: solid;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt;===&lt;br /&gt;
Erstellen Sie im Ordner &amp;lt;code&amp;gt;WebContent&amp;lt;/code&amp;gt; des Projektes die Datei &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt;,&lt;br /&gt;
die den Benutzer nach seinem Namen fragt und diesen, nachdem der Benutzer einen OK-Button&lt;br /&gt;
gedrückt hat, zur Begrüßung des Benutzers verwendet.&lt;br /&gt;
&lt;br /&gt;
====Inhalt von &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Titel der HTML-Seite; wird i. Allg. im Browser im Reiter angezeigt --&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;HTML5-Tutorium: Canvas: Hello World 02&amp;lt;/title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Als HTML-Encoding sollte man stets UTF-8 verwenden. --&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Korrektes Skalieren der Seite auf einem mobilen Endgerät --&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0, user-scalable=yes&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Laden aller CSS-Dateien --&amp;gt;&lt;br /&gt;
    &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;css/main.css&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Laden aller JavaScript-Dateien --&amp;gt;&lt;br /&gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;js/main.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body onload=&amp;quot;init()&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Das Eingabeformular zur Eingabe des Benutzernamens --&amp;gt;&lt;br /&gt;
    &amp;lt;form &amp;gt;&lt;br /&gt;
      &amp;lt;label&amp;gt;Ihr Name:&amp;lt;/label&amp;gt;&lt;br /&gt;
      &amp;lt;input id=&amp;quot;d_name&amp;quot; type=&amp;quot;text&amp;quot;   value=&amp;quot;&amp;quot;                           /&amp;gt;&lt;br /&gt;
      &amp;lt;input             type=&amp;quot;button&amp;quot; value=&amp;quot;OK&amp;quot; onmousedown=&amp;quot;sayHello()&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Die Bühne --&amp;gt;&lt;br /&gt;
    &amp;lt;canvas id=&amp;quot;d_canvas&amp;quot;&amp;gt;&lt;br /&gt;
      Ihr Browser unterstützt HTML5 leider nicht!&lt;br /&gt;
    &amp;lt;/canvas&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Testen und Sichern des Projektes==&lt;br /&gt;
&lt;br /&gt;
Testen Sie zunächst Ihr Projekt und sichern Sie dann das Ergebnis:&lt;br /&gt;
&lt;br /&gt;
# Im Projektexplorer: Rechtsklick auf &amp;lt;code&amp;gt;HelloWorldCanvas02&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Team&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Commit&amp;lt;/code&amp;gt;&lt;br /&gt;
# Enter a comment for the commit operation: &amp;lt;code&amp;gt;hallo.html mit main.js und main.css wurden erstellt.&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend sollten Sie ein wenig mit den drei Dateien experimentieren, indem Sie &lt;br /&gt;
sinnvolle und fehlerhafte Änderungen vornehmen. Löschen Sie z.B. die Zeilen mit dem Aufruf &lt;br /&gt;
der Funktion &amp;lt;code&amp;gt;clearRect&amp;lt;/code&amp;gt; aus der Datei &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt; und testen Sie Ihre&lt;br /&gt;
Anwendunge erneut. (Tipp: Geben Sie mehrmals hintereinander jeweils einen anderen Namen ein.)&lt;br /&gt;
&lt;br /&gt;
Speichern Sie zu guter Letzt Ihre sinnvollen Änderungen auch im Repository (mit kurzem, aber sinnvollem Kommentar!).&lt;br /&gt;
&lt;br /&gt;
=Optional: Apache als Test-Server=&lt;br /&gt;
&lt;br /&gt;
Anstelle des Eclipse-eigenen Testserver kann man auch einen beliebigen&lt;br /&gt;
anderen Server (wie z.B. [[Apache]] oder [[Tomcat]]) zum Testen einer Web-Anwendung verwenden.&lt;br /&gt;
Der Vorteil dieser Variante ist, dass man den Zielserver gemäß seinen Bedürfnissen wählen und konfigurieren kann&lt;br /&gt;
und dass die Anwendung von Anfang an auf dem richtigen Server getestet wird.&lt;br /&gt;
&lt;br /&gt;
Voraussetzung ist, dass ein entsprechender Server lokal installiert wurde:&lt;br /&gt;
* [[Installation von Apache (Windows)]], [[Installation von Apache (Mac OS X)]], [[Installation von Apache (Unix)]] &lt;br /&gt;
&lt;br /&gt;
Der Apache-Server muss laufen, sonst funktioniert der nachfolgende Test nicht! &lt;br /&gt;
&lt;br /&gt;
Definieren eines neuen Apache-Test-Servers in Eclipse (nachdem der Apache installiert und gestartet wurde):&lt;br /&gt;
&lt;br /&gt;
# Projektexplorer: Rechtklick auf den Root-Ordner des aktuellen Projektes &amp;lt;code&amp;gt;HelloWorldCanvas02&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Eigenschaften&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Server&amp;lt;/code&amp;gt; → Standardserver: &amp;lt;code&amp;gt;keine&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
# Im Projektverzeichnis: &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; selektieren → Klick auf Icon „grüner Kreis mit weißem Dreieck“ → &amp;lt;code&amp;gt;Run on Server&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
#&amp;lt;code&amp;gt;Neuen Server manuell definieren&amp;lt;/code&amp;gt; selektieren → Severziel eingeben: &amp;lt;code&amp;gt;HTTP Server&amp;lt;/code&amp;gt; selektieren&lt;br /&gt;
# Hostname des Servers: &amp;lt;code&amp;gt;localhost&amp;lt;/code&amp;gt;, Server name: &amp;lt;code&amp;gt;Apache&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt;&lt;br /&gt;
# Publishing Directory: &amp;lt;code&amp;gt;D:\web\apache\htdocs&amp;lt;/code&amp;gt; (Webverzeichnis des Servers, abhängig davon, wohin Sie den Apache installiert haben) → &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt;&lt;br /&gt;
# evtl. Anpassungen vornehmen → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beim nächsten Aufruf von &amp;lt;code&amp;gt;Run on Server&amp;lt;/code&amp;gt; wird der Server &amp;lt;code&amp;gt;Apache&amp;lt;/code&amp;gt; unter der Liste der vorhandenen Server aufgeführt.&lt;br /&gt;
Man sollte diesen Server wählen und dann das Häckchen vor &amp;lt;code&amp;gt;Server als Projektstandardeinstellung festlegen&amp;lt;/code&amp;gt; setzen,&lt;br /&gt;
damit man die Serverwahl nicht bei jedem Test erneu ausführen muss.&lt;br /&gt;
&lt;br /&gt;
Als Browser wird der in Eclipse integrierte Browser verwendet. &lt;br /&gt;
Besser ist es den Firefox als Standardbrowser zu verwenden:&lt;br /&gt;
&lt;br /&gt;
* Klick auf &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; → Klick auf &amp;lt;code&amp;gt;Web&amp;lt;/code&amp;gt; → Klick auf &amp;lt;code&amp;gt;Web&amp;lt;/code&amp;gt; → Klick auf &amp;lt;code&amp;gt;Firefox&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein Problem bleibt bestehen: Bei jedem Aufruf von &amp;lt;code&amp;gt;Run on Server&amp;lt;/code&amp;gt; wird in Eclipse oder Firefox ein neues&lt;br /&gt;
Browserfester geöffnet. Um dies zu verhindern, kann man folgenden Trick anwenden, &#039;&#039;&#039;nachdem&#039;&#039;&#039; &amp;lt;code&amp;gt;Run on Server&amp;lt;/code&amp;gt; zum ersten Mal ausgeführt worden ist:&lt;br /&gt;
&lt;br /&gt;
# Im mittleren unteren Fenster den Reiter &amp;lt;code&amp;gt;Server&amp;lt;/code&amp;gt; selektieren&lt;br /&gt;
# &amp;lt;code&amp;gt;Apache&amp;lt;/code&amp;gt; aufklappen und selektieren&lt;br /&gt;
# Wenn dort nicht &amp;lt;code&amp;gt;synchronisiert&amp;lt;/code&amp;gt;, sondern &amp;lt;code&amp;gt;Erneut publizieren&amp;lt;/code&amp;gt; steht: Im unteren mittleren Fenster: Klick auf das vierte Icon von rechts (&amp;lt;code&amp;gt;Auf dem Server bereitstellen&amp;lt;/code&amp;gt;)&lt;br /&gt;
# Sobald beim &amp;lt;code&amp;gt;Apache&amp;lt;/code&amp;gt; wieder &amp;lt;code&amp;gt;synchronisiert&amp;lt;/code&amp;gt; steht, kann im Browserfester der Reload-Button gedrückt werden, um die neuen Daten abzufrufen. (Eventuell muss der [http://de.wikipedia.org/wiki/Hilfe:Cache Browser-Cache geleert] werden.)&lt;br /&gt;
&lt;br /&gt;
=Quellen=&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
# {{Quelle|Kowarschick, W.: Multimedia-Programmierung}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
# [http://www.w3schools.com/html5/ w3schools.com: HTML5 Tutorial]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Kategorie: HTML5-Tutorium: Canvas: Hello World]][[Kategorie: HTML5-Beispiel]][[Kategorie:Kapitel:Multimedia-Programmierung:Beispiele]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rayza</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=HTML5-Tutorium:_Canvas:_Hello_World_02&amp;diff=23810</id>
		<title>HTML5-Tutorium: Canvas: Hello World 02</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=HTML5-Tutorium:_Canvas:_Hello_World_02&amp;diff=23810"/>
		<updated>2012-10-11T21:12:09Z</updated>

		<summary type="html">&lt;p&gt;Rayza: /* main.js */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{HTML5-Tutorium:Canvas:HelloWorld:Menü}}&lt;br /&gt;
&#039;&#039;&#039;Ergebnis&#039;&#039;&#039;: [http://glossar.hs-augsburg.de/beispiel/tutorium/html5_canvas/hello_world/html5_canvas_hello_world_02/WebContent/hallo.html &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt;]&lt;br /&gt;
([http://glossar.hs-augsburg.de/beispiel/tutorium/html5_canvas/hello_world/html5_canvas_hello_world_02 SVN-Repository])&lt;br /&gt;
&lt;br /&gt;
=HTML5: Hello-&amp;amp;lt;name&amp;amp;gt;-Anwendung mit Canvas=&lt;br /&gt;
Die in [[HTML5-Tutorium: Canvas: Hello World 01|Teil 1]] erstellte Hello-World-Anwendung wird so erweitert,&lt;br /&gt;
dass der Benutzer seinen Namen eingeben kann und mit diesem&lt;br /&gt;
anschließend begrüßt wird. Außerdem wird das Canvas-Layout mit Hilfe von CSS modifiziert.&lt;br /&gt;
&lt;br /&gt;
==Musterlösung herunterladen==&lt;br /&gt;
(Dieser Punkt kann übersprungen werden.)&lt;br /&gt;
&lt;br /&gt;
Laden Sie die Musterlösung &amp;lt;code&amp;gt;http://glossar.hs-augsburg.de/beispiel/tutorium/html5_canvas/hello_world/html5_canvas_hello_world_02/&amp;lt;/code&amp;gt;&lt;br /&gt;
auf [[HTML5-Tutorium: Canvas: Hello World 01#Musterl.C3.B6sung_herunterladen|bekannte Weise]] in Eclipse.&lt;br /&gt;
&lt;br /&gt;
==Neues Projekt anlegen==&lt;br /&gt;
&lt;br /&gt;
Legen Sie ein neues Projekt an:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Datei&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Neu&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Statisches Web-Projekt&amp;lt;/code&amp;gt;&lt;br /&gt;
# Project name: &amp;lt;code&amp;gt;HelloWorldCanvas02&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Speichern Sie Ihr Projekt wiederum in Ihrem Repository:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Projektexplorer&amp;lt;/code&amp;gt;: Rechtsklick auf &amp;lt;code&amp;gt;HelloWorldCanvas02&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Team&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Projekt gemeinsam nutzen&amp;lt;/code&amp;gt; &lt;br /&gt;
# &amp;lt;code&amp;gt;SVN&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt;&lt;br /&gt;
# Url: &amp;lt;code&amp;gt; https://praktikum.multimedia.hs-augsburg.de/svn/ACCOUNT&amp;lt;/code&amp;gt; (&#039;&#039;&#039;&amp;lt;code&amp;gt;ACCOUNT&amp;lt;/code&amp;gt; durch eigenen RZ-Account ersetzen&#039;&#039;&#039;) → &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; &lt;br /&gt;
# Use specified folder name: &amp;lt;code&amp;gt;mmprog/tutorium/HelloWorldCanvas02&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Projekt im Repository sichern==&lt;br /&gt;
&lt;br /&gt;
Das neu angelegte Projekt wird als erstes im Repositotry gesichert:&lt;br /&gt;
&lt;br /&gt;
# Im Projektexplorer: Rechtsklick auf &amp;lt;code&amp;gt;HelloWorldCanvas02&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Team&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Commit&amp;lt;/code&amp;gt;&lt;br /&gt;
# Comment: &amp;lt;code&amp;gt;Neues Projekt angelegt.&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Dateien erstellen==&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt;===&lt;br /&gt;
Erstellen Sie im Ordner &amp;lt;code&amp;gt;WebContent/js&amp;lt;/code&amp;gt; des Projektes die Datei &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt;.&lt;br /&gt;
Diese Datei enthält nun zwei Funktionen:&lt;br /&gt;
* &amp;lt;code&amp;gt;init&amp;lt;/code&amp;gt;: Diese wird nach dem Laden der HTML-Seiten in einen Browser aufgerufen, um die Zeichenbühne (&amp;lt;code&amp;gt;canvas&amp;lt;/code&amp;gt;) zu initialisieren.&lt;br /&gt;
* &amp;lt;code&amp;gt;sayHello&amp;lt;/code&amp;gt;: Diese wird aufgerufen, sobald der Benutzer seinen Namen eingegeben und den OK-Button gedrückt hat.&lt;br /&gt;
&lt;br /&gt;
====Inhalt von &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;use strict&amp;quot;; /* Warne vor unsauberem JavaScript-Code! */&lt;br /&gt;
 &lt;br /&gt;
var v_canvas; &lt;br /&gt;
var v_context; &lt;br /&gt;
 &lt;br /&gt;
/** Initialisiert die Bühne (Canvas). */&lt;br /&gt;
function init()&lt;br /&gt;
{&lt;br /&gt;
  v_canvas        = document.getElementById(&amp;quot;d_canvas&amp;quot;);&lt;br /&gt;
  v_canvas.width  = 300;&lt;br /&gt;
  v_canvas.height =  27;&lt;br /&gt;
&lt;br /&gt;
  v_context = v_canvas.getContext(&amp;quot;2d&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/**&lt;br /&gt;
 * Löscht den aktuellen Inhalt von der Bühne und schreibt dann einen Meldung &lt;br /&gt;
 * auf die Bühne, bei der der Benutzer mit seinem Namen begrüßt wird.&lt;br /&gt;
 * Der Name des Benutzers wird aus einem Eingabefeld der HTML-Seite gelesen.&lt;br /&gt;
 */ &lt;br /&gt;
function sayHello()&lt;br /&gt;
{&lt;br /&gt;
  // Textausgabe (auf der Bühne)&lt;br /&gt;
  v_context&lt;br /&gt;
    .clearRect(0, 0, v_canvas.width, v_canvas.height); // clear canvas&lt;br /&gt;
  v_context&lt;br /&gt;
    .font = &amp;quot;bold 20px &#039;Times New Roman&#039;, Times, serif&amp;quot;;&lt;br /&gt;
  v_context&lt;br /&gt;
    .fillText(&amp;quot;Hallo &amp;quot; + document.getElementById(&amp;quot;d_name&amp;quot;).value + &amp;quot;!&amp;quot;, 5, 20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;code&amp;gt;main.css&amp;lt;/code&amp;gt;===&lt;br /&gt;
Erstellen Sie im Ordner &amp;lt;code&amp;gt;WebContent/css&amp;lt;/code&amp;gt; des Projektes die Datei &amp;lt;code&amp;gt;main.css&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
====Inhalt von &amp;lt;code&amp;gt;main.css&amp;lt;/code&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* Das Text-Eingabefeld wird obtisch an die Bühne angepasst. */&lt;br /&gt;
#d_name&lt;br /&gt;
{&lt;br /&gt;
  width: 185px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Die Bühne wird mit Hilfe eines Rands optisch hervorgehoben. */&lt;br /&gt;
#d_canvas&lt;br /&gt;
{&lt;br /&gt;
  margin-top:   10px; &lt;br /&gt;
&lt;br /&gt;
  border-color: #BBBBBB; &lt;br /&gt;
  border-width: 2px; &lt;br /&gt;
  border-style: solid;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt;===&lt;br /&gt;
Erstellen Sie im Ordner &amp;lt;code&amp;gt;WebContent&amp;lt;/code&amp;gt; des Projektes die Datei &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt;,&lt;br /&gt;
die den Benutzer nach seinem Namen fragt und diesen, nachdem der Benutzer einen OK-Button&lt;br /&gt;
gedrückt hat, zur Begrüßung des Benutzers verwendet.&lt;br /&gt;
&lt;br /&gt;
====Inhalt von &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt;====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Titel der HTML-Seite; wird i. Allg. im Browser im Reiter angezeigt --&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;HTML5-Tutorium: Canvas: Hello World 02&amp;lt;/title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Als HTML-Encoding sollte man stets UTF-8 verwenden. --&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Korrektes Skalieren der Seite auf einem mobilen Endgerät --&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0, user-scalable=yes&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Laden aller CSS-Dateien --&amp;gt;&lt;br /&gt;
    &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;css/main.css&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Laden aller JavaScript-Dateien --&amp;gt;&lt;br /&gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;js/main.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body onload=&amp;quot;init()&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Das Eingabeformular zur Eingabe des Benutzernamens --&amp;gt;&lt;br /&gt;
    &amp;lt;form &amp;gt;&lt;br /&gt;
      &amp;lt;label&amp;gt;Ihr Name:&amp;lt;/label&amp;gt;&lt;br /&gt;
      &amp;lt;input id=&amp;quot;d_name&amp;quot; type=&amp;quot;text&amp;quot;   value=&amp;quot;&amp;quot;                           /&amp;gt;&lt;br /&gt;
      &amp;lt;input             type=&amp;quot;button&amp;quot; value=&amp;quot;OK&amp;quot; onmousedown=&amp;quot;sayHello()&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Die Bühne --&amp;gt;&lt;br /&gt;
    &amp;lt;canvas id=&amp;quot;d_canvas&amp;quot;&amp;gt;&lt;br /&gt;
      Ihr Browser unterstützt HTML5 leider nicht!&lt;br /&gt;
    &amp;lt;/canvas&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Testen und Sichern des Projektes==&lt;br /&gt;
&lt;br /&gt;
Testen Sie zunächst Ihr Projekt und sichern Sie dann das Ergebnis:&lt;br /&gt;
&lt;br /&gt;
# Im Projektexplorer: Rechtsklick auf &amp;lt;code&amp;gt;HelloWorldCanvas01&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Team&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Commit&amp;lt;/code&amp;gt;&lt;br /&gt;
# Enter a comment for the commit operation: &amp;lt;code&amp;gt;hallo.html mit main.js und main.css wurden erstellt.&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend sollten Sie ein wenig mit den drei Dateien experimentieren, indem Sie &lt;br /&gt;
sinnvolle und fehlerhafte Änderungen vornehmen. Löschen Sie z.B. die Zeilen mit dem Aufruf &lt;br /&gt;
der Funktion &amp;lt;code&amp;gt;clearRect&amp;lt;/code&amp;gt; aus der Datei &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt; und testen Sie Ihre&lt;br /&gt;
Anwendunge erneut. (Tipp: Geben Sie mehrmals hintereinander jeweils einen anderen Namen ein.)&lt;br /&gt;
&lt;br /&gt;
Speichern Sie zu guter Letzt Ihre sinnvollen Änderungen auch im Repository (mit kurzem, aber sinnvollem Kommentar!).&lt;br /&gt;
&lt;br /&gt;
=Optional: Apache als Test-Server=&lt;br /&gt;
&lt;br /&gt;
Anstelle des Eclipse-eigenen Testserver kann man auch einen beliebigen&lt;br /&gt;
anderen Server (wie z.B. [[Apache]] oder [[Tomcat]]) zum Testen einer Web-Anwendung verwenden.&lt;br /&gt;
Der Vorteil dieser Variante ist, dass man den Zielserver gemäß seinen Bedürfnissen wählen und konfigurieren kann&lt;br /&gt;
und dass die Anwendung von Anfang an auf dem richtigen Server getestet wird.&lt;br /&gt;
&lt;br /&gt;
Voraussetzung ist, dass ein entsprechender Server lokal installiert wurde:&lt;br /&gt;
* [[Installation von Apache (Windows)]], [[Installation von Apache (Mac OS X)]], [[Installation von Apache (Unix)]] &lt;br /&gt;
&lt;br /&gt;
Der Apache-Server muss laufen, sonst funktioniert der nachfolgende Test nicht! &lt;br /&gt;
&lt;br /&gt;
Definieren eines neuen Apache-Test-Servers in Eclipse (nachdem der Apache installiert und gestartet wurde):&lt;br /&gt;
&lt;br /&gt;
# Projektexplorer: Rechtklick auf den Root-Ordner des aktuellen Projektes &amp;lt;code&amp;gt;HelloWorldCanvas02&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Eigenschaften&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Server&amp;lt;/code&amp;gt; → Standardserver: &amp;lt;code&amp;gt;keine&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
# Im Projektverzeichnis: &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; selektieren → Klick auf Icon „grüner Kreis mit weißem Dreieck“ → &amp;lt;code&amp;gt;Run on Server&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
#&amp;lt;code&amp;gt;Neuen Server manuell definieren&amp;lt;/code&amp;gt; selektieren → Severziel eingeben: &amp;lt;code&amp;gt;HTTP Server&amp;lt;/code&amp;gt; selektieren&lt;br /&gt;
# Hostname des Servers: &amp;lt;code&amp;gt;localhost&amp;lt;/code&amp;gt;, Server name: &amp;lt;code&amp;gt;Apache&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt;&lt;br /&gt;
# Publishing Directory: &amp;lt;code&amp;gt;D:\web\apache\htdocs&amp;lt;/code&amp;gt; (Webverzeichnis des Servers, abhängig davon, wohin Sie den Apache installiert haben) → &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt;&lt;br /&gt;
# evtl. Anpassungen vornehmen → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beim nächsten Aufruf von &amp;lt;code&amp;gt;Run on Server&amp;lt;/code&amp;gt; wird der Server &amp;lt;code&amp;gt;Apache&amp;lt;/code&amp;gt; unter der Liste der vorhandenen Server aufgeführt.&lt;br /&gt;
Man sollte diesen Server wählen und dann das Häckchen vor &amp;lt;code&amp;gt;Server als Projektstandardeinstellung festlegen&amp;lt;/code&amp;gt; setzen,&lt;br /&gt;
damit man die Serverwahl nicht bei jedem Test erneu ausführen muss.&lt;br /&gt;
&lt;br /&gt;
Als Browser wird der in Eclipse integrierte Browser verwendet. &lt;br /&gt;
Besser ist es den Firefox als Standardbrowser zu verwenden:&lt;br /&gt;
&lt;br /&gt;
* Klick auf &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; → Klick auf &amp;lt;code&amp;gt;Web&amp;lt;/code&amp;gt; → Klick auf &amp;lt;code&amp;gt;Web&amp;lt;/code&amp;gt; → Klick auf &amp;lt;code&amp;gt;Firefox&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein Problem bleibt bestehen: Bei jedem Aufruf von &amp;lt;code&amp;gt;Run on Server&amp;lt;/code&amp;gt; wird in Eclipse oder Firefox ein neues&lt;br /&gt;
Browserfester geöffnet. Um dies zu verhindern, kann man folgenden Trick anwenden, &#039;&#039;&#039;nachdem&#039;&#039;&#039; &amp;lt;code&amp;gt;Run on Server&amp;lt;/code&amp;gt; zum ersten Mal ausgeführt worden ist:&lt;br /&gt;
&lt;br /&gt;
# Im mittleren unteren Fenster den Reiter &amp;lt;code&amp;gt;Server&amp;lt;/code&amp;gt; selektieren&lt;br /&gt;
# &amp;lt;code&amp;gt;Apache&amp;lt;/code&amp;gt; aufklappen und selektieren&lt;br /&gt;
# Wenn dort nicht &amp;lt;code&amp;gt;synchronisiert&amp;lt;/code&amp;gt;, sondern &amp;lt;code&amp;gt;Erneut publizieren&amp;lt;/code&amp;gt; steht: Im unteren mittleren Fenster: Klick auf das vierte Icon von rechts (&amp;lt;code&amp;gt;Auf dem Server bereitstellen&amp;lt;/code&amp;gt;)&lt;br /&gt;
# Sobald beim &amp;lt;code&amp;gt;Apache&amp;lt;/code&amp;gt; wieder &amp;lt;code&amp;gt;synchronisiert&amp;lt;/code&amp;gt; steht, kann im Browserfester der Reload-Button gedrückt werden, um die neuen Daten abzufrufen. (Eventuell muss der [http://de.wikipedia.org/wiki/Hilfe:Cache Browser-Cache geleert] werden.)&lt;br /&gt;
&lt;br /&gt;
=Quellen=&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
# {{Quelle|Kowarschick, W.: Multimedia-Programmierung}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
# [http://www.w3schools.com/html5/ w3schools.com: HTML5 Tutorial]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Kategorie: HTML5-Tutorium: Canvas: Hello World]][[Kategorie: HTML5-Beispiel]][[Kategorie:Kapitel:Multimedia-Programmierung:Beispiele]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rayza</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=HTML5-Tutorium:_Canvas:_Hello_World_01&amp;diff=23809</id>
		<title>HTML5-Tutorium: Canvas: Hello World 01</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=HTML5-Tutorium:_Canvas:_Hello_World_01&amp;diff=23809"/>
		<updated>2012-10-11T21:04:09Z</updated>

		<summary type="html">&lt;p&gt;Rayza: /* Repostitory begutachten */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{HTML5-Tutorium:Canvas:HelloWorld:Menü}}&lt;br /&gt;
&#039;&#039;&#039;Ergebnis&#039;&#039;&#039;: [http://glossar.hs-augsburg.de/beispiel/tutorium/html5_canvas/hello_world/html5_canvas_hello_world_01/WebContent/hallo.html &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt;]&lt;br /&gt;
([http://glossar.hs-augsburg.de/beispiel/tutorium/html5_canvas/hello_world/html5_canvas_hello_world_01 SVN-Repository])&lt;br /&gt;
=HTML5: Hello-Word-Anwendung mit Canvas=&lt;br /&gt;
&lt;br /&gt;
Zur Erstellung der Anwendung wird [[Installation von Eclipse (Windows)|Eclipse]] eingesetzt.&lt;br /&gt;
Alle Eclipse-Versionen ab Helios eignen sich zur Erstellung von HTML5-Web-Anwendungen.&lt;br /&gt;
&lt;br /&gt;
Zum Testen wird der Browser [[Firefox]] mit dem [https://addons.mozilla.org/de/firefox/addon/firebug/ Firebug-Plugin] verendet.&lt;br /&gt;
&lt;br /&gt;
Unter Eclipse kann der Testbrowser folgendermaßen festgelegt werden:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Benutzervorgaben&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Allgemein&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;Webbrowser&amp;lt;/code&amp;gt; selektieren → &amp;lt;code&amp;gt;Verwende externen Web-Browser&amp;lt;/code&amp;gt; selektieren → Häckchen vor &amp;lt;code&amp;gt;Firefox&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Eclipse vorbereiten==&lt;br /&gt;
(Dieser Punkt kann übersprungen werden, wenn man den Workspace http://glossar.hs-augsburg.de/svn/eclipse/workspace-mmprog heruntergeladen hat und in Eclipse als akutellen Workspace verwendet.)&lt;br /&gt;
&lt;br /&gt;
Zunächst sollte man die „richtige“ Oberfläche auswählen:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Perspektive öffnen&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Web&amp;lt;/code&amp;gt; (evtl. unter dem Punkt &amp;lt;code&amp;gt;Andere...&amp;lt;/code&amp;gt; zu finden; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beachten Sie, es gibt zwei Web-Perspektiven. Wählen Sie diejenige, die die Weltkugel mit Stift als Icon hat.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Außerdem muss der Character Code korrekt eingestellt werden:&lt;br /&gt;
&lt;br /&gt;
Juno:&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Benutzervorgaben&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Allgemein&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;Arbeitsbereich&amp;lt;/code&amp;gt; selektieren&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;code&amp;gt;Sonstige&amp;lt;/code&amp;gt; selektieren → &amp;lt;code&amp;gt;UTF-8&amp;lt;/code&amp;gt; im Drop-Down-Menü selektieren&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Indigo:&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Benutzervorgaben&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Web&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;HTML-Files&amp;lt;/code&amp;gt; selektieren&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Codierung: &amp;lt;code&amp;gt;ISO Latin-1&amp;lt;/code&amp;gt; durch &amp;lt;code&amp;gt;ISO 10646/Unicode(UTF-8)&amp;lt;/code&amp;gt; ersetzen&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Musterlösung herunterladen==&lt;br /&gt;
(Dieser Punkt kann übersprungen werden, wenn man den Workspace http://glossar.hs-augsburg.de/svn/eclipse/workspace_mmprog_x64.zip heruntergeladen hat und in Eclipse als akutellen Workspace verwendet.)&lt;br /&gt;
&lt;br /&gt;
Laden Sie die Musterlösung &amp;lt;code&amp;gt;http://glossar.hs-augsburg.de/beispiel/tutorium/html5_canvas/hello_world/html5_canvas_hello_world_01/&amp;lt;/code&amp;gt;&lt;br /&gt;
in Eclipse:&lt;br /&gt;
&lt;br /&gt;
# Klick auf Reiter &amp;lt;code&amp;gt;Datei&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Importieren&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SVN&amp;lt;/code&amp;gt; aufklappen → Klick auf &amp;lt;code&amp;gt;Checkout Projects from SVN&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt;&lt;br /&gt;
# Entweder&lt;br /&gt;
#* &amp;lt;code&amp;gt;Use existing repository location:&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;http://glossar.hs-augsburg.de/beispiel/tutorium&amp;lt;/code&amp;gt; selektieren (falls vorhanden)&lt;br /&gt;
#* &amp;lt;code&amp;gt;Create a new repsotiory location&amp;lt;/code&amp;gt; wählen → &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; → Url: &amp;lt;code&amp;gt;http://glossar.hs-augsburg.de/beispiel/tutorium&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt;&lt;br /&gt;
# Nachden der Dateibaum aufgegangen ist:  &amp;lt;code&amp;gt;html5_canvas&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;hello_world&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;html5_canvas_hello_worl_01&amp;lt;/code&amp;gt; selektieren &lt;br /&gt;
# &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Neues Projekt anlegen==&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Datei&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Neu&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Statisches Web-Projekt&amp;lt;/code&amp;gt;&lt;br /&gt;
# Project name: &amp;lt;code&amp;gt;HelloWorldCanvas01&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Speichern Sie nun Ihr Projekt in Ihrem Repository:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Projektexplorer&amp;lt;/code&amp;gt;: Rechtsklick auf &amp;lt;code&amp;gt;HelloWorldCanvas01&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Team&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Projekt gemeinsam nutzen&amp;lt;/code&amp;gt; &lt;br /&gt;
# &amp;lt;code&amp;gt;SVN&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;Create a new repository location&amp;lt;/code&amp;gt; selektieren&lt;br /&gt;
# Url: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://praktikum.multimedia.hs-augsburg.de/svn/ACCOUNT&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; (&#039;&#039;&#039;&amp;lt;code&amp;gt;ACCOUNT&amp;lt;/code&amp;gt; durch eigenen RZ-Account ersetzen&#039;&#039;&#039;) → &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; &lt;br /&gt;
# Use specified folder name: &amp;lt;code&amp;gt;mmprog/tutorium/HelloWorldCanvas01&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
# Beim ersten Mal: Klick auf &amp;lt;code&amp;gt;Accept permanently&amp;lt;/code&amp;gt;&lt;br /&gt;
# Beim ersten Mal: Passwort eingeben → Häckchen bei &amp;lt;code&amp;gt;Passwort merken&amp;lt;/code&amp;gt; (sonst muss man künftig für jede hozuladende Datei das Passwort eingeben) → &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Eventuell&#039;&#039;&#039;: Häckchen bei &amp;lt;code&amp;gt;Entscheidung merken&amp;lt;/code&amp;gt; → &#039;&#039;&#039;&amp;lt;code&amp;gt;Nein&amp;lt;/code&amp;gt;&#039;&#039;&#039; (Nicht &amp;lt;code&amp;gt;Ja&amp;lt;/code&amp;gt;!!!!)&lt;br /&gt;
&lt;br /&gt;
==Projekt im Repository sichern==&lt;br /&gt;
&lt;br /&gt;
Das neu angelegte Projekt wird gleich mal im Repository gesichert:&lt;br /&gt;
&lt;br /&gt;
# Im Projektexplorer: Rechtsklick auf &amp;lt;code&amp;gt;HelloWorldCanvas01&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Team&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Commit&amp;lt;/code&amp;gt;&lt;br /&gt;
# Enter a comment for the commit operation: &amp;lt;code&amp;gt;Neues Projekt angelegt.&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Neue HTML-Datei anlegen==&lt;br /&gt;
&lt;br /&gt;
# Im Projektexplorer (linkes Fenster): &amp;lt;code&amp;gt;HelloWorldCanvas01&amp;lt;/code&amp;gt; aufklappen&lt;br /&gt;
# Rechtsklick auf Ordner &amp;lt;code&amp;gt;WebContent&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Neu&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;HTML file&amp;lt;/code&amp;gt;&lt;br /&gt;
# Dateiname: &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; → Templates: &amp;lt;code&amp;gt;New HTML File (5)&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==HTML-Datei bearbeiten==&lt;br /&gt;
&lt;br /&gt;
Erfassen Sie folgenden Code in der HTML-Seite:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Titel der HTML-Seite; wird i. Allg. im Browser im Reiter angezeigt --&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;HTML5-Tutorium: Canvas: Hello World 01&amp;lt;/title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Als HTML-Encoding sollte man stets UTF-8 verwenden. --&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Korrektes Skalieren der Seite auf einem mobilen Endgerät --&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0, user-scalable=yes&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;!-- Zeichnen von &amp;quot;Hallo Welt!&amp;quot; auf der Bühne&lt;br /&gt;
    	  (nachdem die Seite geladen wurde). --&amp;gt;&lt;br /&gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
      function init()&lt;br /&gt;
      {&lt;br /&gt;
        var l_canvas = document.getElementById(&amp;quot;d_canvas&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
        l_canvas.width  = 300;&lt;br /&gt;
        l_canvas.height =  27;&lt;br /&gt;
 &lt;br /&gt;
        var l_context = l_canvas.getContext(&amp;quot;2d&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
        l_context.font = &amp;quot;bold 20px &#039;Times New Roman&#039;, Times, serif&amp;quot;;&lt;br /&gt;
        l_context.fillText(&amp;quot;Hallo Welt!&amp;quot;, 5, 20);&lt;br /&gt;
      }&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;body onload=&amp;quot;init()&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Die Bühne (Canvas) --&amp;gt;&lt;br /&gt;
    &amp;lt;canvas id=&amp;quot;d_canvas&amp;quot;&amp;gt;&lt;br /&gt;
      Ihr Browser unterstützt HTML5 leider nicht!&lt;br /&gt;
    &amp;lt;/canvas&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Anmerkung 1====&lt;br /&gt;
Auf das Canvas-Element wird ausschließlich von [[JavaScript]] aus zugegriffen.&lt;br /&gt;
Sollte ein Browser dieses Element nicht unterstützen, so wird der alternative&lt;br /&gt;
HTML-Code innerhalb des Canvas-Element gerendert und ausgegeben. Hier&lt;br /&gt;
könnte beispielsweise eine [[Flash]]-Anwendung ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
====Anmerkung 2====&lt;br /&gt;
Die Meta-Anweisung&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0, user-scalable=yes&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
dient dazu, dass der Inhalt der Seite auf einem Smartphone in der richtigen Größe angezeigt wird.&lt;br /&gt;
&lt;br /&gt;
====Anmerkung 3====&lt;br /&gt;
Es gibt auch einen WYSIWYG-Editor, den Sie folgendermaßen öffnen können:&lt;br /&gt;
# Rechtklick in das Editor-Fenster → &amp;lt;code&amp;gt;Öffnen mit&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Web Page Editor&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Allerdings unterstützt dieser WYSIWYG-Editor die HTML5-Zeichenbühne [[Canvas]] nicht und ist daher für dieses Tutorium nicht sonderlich nützlich.&lt;br /&gt;
&lt;br /&gt;
==HTML-Seite testen==&lt;br /&gt;
# &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; speichern: &amp;lt;code&amp;gt;Strg-s&amp;lt;/code&amp;gt;&lt;br /&gt;
# Wichtig: &#039;&#039;&#039;Im &amp;lt;code&amp;gt;Projektexplorer&amp;lt;/code&amp;gt; jeweils vor dem Server-Aufruf &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; selektieren&#039;&#039;&#039;, sonst erhalten Sie eine Fehlermeldung.&lt;br /&gt;
# In der Icon-Zeile: Klick auf Icon „grüner Kreis mit weißen Dreieck“ →  Serverziel auswählen: &amp;lt;code&amp;gt;JavaScript Web Application&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
===Anmerkungen zum Firefox auf den Rechnern des MM-Labors===&lt;br /&gt;
&lt;br /&gt;
Defaultmäßig kann der Firefox im MM-Labor nicht auf lokale Webserver (wie z.B. den Aptana-Server) zugreifen. &lt;br /&gt;
&lt;br /&gt;
Grund: In diesem Firefox ist eine unpassende Proxy-Konfiguration voreingestellt. &lt;br /&gt;
Diese Einstellung verhindert den Zugriff auf localhost. &lt;br /&gt;
&lt;br /&gt;
Lösung des Problems:&lt;br /&gt;
# Firefox starten&lt;br /&gt;
# Einstellungen → Erweitert → Netzwerk → Einstellungen  &lt;br /&gt;
# Haken von &amp;lt;code&amp;gt;Proxy-Einstellungen des Systems verwenden&amp;lt;/code&amp;gt; auf &amp;lt;code&amp;gt;Manuelle Proxy-Konfiguration&amp;lt;/code&amp;gt; setzen und als Ausnahme &amp;lt;code&amp;gt;localhost und 127.0.0.1&amp;lt;/code&amp;gt; einstellen. &lt;br /&gt;
&lt;br /&gt;
===Anmerkungen zum Test-Sever===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solange Sie nur HTML-Seiten, die JavaScript-Code enthalten, testen wollen, ist das Serverziel &amp;lt;code&amp;gt;JavaScript Web Application&amp;lt;/code&amp;gt; die beste Wahl.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sie können allerdings auch andere Web-Server verwenden:&lt;br /&gt;
&lt;br /&gt;
* Den HTTP-Preview-Server, der in Eclipse integriert ist (probieren Sie diesen ruhig einmal an Stelle des JavaScript-Web-Application-Servers aus)&lt;br /&gt;
* Tomcat (hier muss [[Installation von Tomcat|Tomcat]] installiert und mit [[Installation von Eclipse#Integration_von_Tomcat|Eclipse verknüpft]] werden)&lt;br /&gt;
* Apache (hier muss [[Installation von Apache|Apache]] installiert und mit Eclipse verknüpft werden; siehe [[HTML5-Tutorium: Canvas: Hello World 02#Optional:_Apache_als_Test-Server|Teil 2 des Tutoriums]])&lt;br /&gt;
* etc.&lt;br /&gt;
&lt;br /&gt;
In allen diesen Fällen müssten Sie &amp;lt;code&amp;gt;Run on Server&amp;lt;/code&amp;gt; an Stelle von&lt;br /&gt;
&amp;lt;code&amp;gt;JavaScript Web Application&amp;lt;/code&amp;gt; auswählen:&lt;br /&gt;
# In der Icon-Zeile: Klick auf Icon „grüner Kreis mit weißen Dreieck“ →  Serverziel auswählen: &amp;lt;code&amp;gt;Run on Server&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Den HTTP-Preview-Server wählen Sie folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;3&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;code&amp;gt;HTTP Preview&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beachten Sie, dass beim HTTP-Preview-Server mit jedem Klick des Debug-Icons (grüner Kreis mit weißen Dreieck) ein neues Browserfenster in Eclipse geöffnet wird.&lt;br /&gt;
Daher ist es sinnvoller, im bestehenden Browserfenster das Reload-Icon (zwei kreiförmig angeordnete Pfeile) anzuklicken, um Änderungen an einer der &lt;br /&gt;
Web-Dateien sichtbar zu machen.&lt;br /&gt;
&lt;br /&gt;
Für komplexere Web-Seiten mit [[PHP]]-Code, [[JSP]]-Code etc. muss man einen echten Server (wie [[Apache]] oder [[Tomcat]]) installieren und&lt;br /&gt;
mit Eclipse verknüpfen.&lt;br /&gt;
&lt;br /&gt;
Wenn der von Ihnen gewählte Test-Web-Server Probleme hat, die&lt;br /&gt;
neuen HTML-Seiten darzustellen, kann es notwendig sein, den Server neu zu starten:&lt;br /&gt;
&lt;br /&gt;
# Reiter &amp;lt;code&amp;gt;Server&amp;lt;/code&amp;gt; im unteren Fenster selektieren&lt;br /&gt;
# Klick auf Icon „rotes Recheck“ (Server stoppen)&lt;br /&gt;
# Klick auf Icon „grüner Kreis mit weißem Dreieck“ (Server starten)&lt;br /&gt;
&lt;br /&gt;
==Projekt im Repository sichern==&lt;br /&gt;
&lt;br /&gt;
Jedes funktionierende Zwischenergebnis eines Projektes sollte im Repository gespeichert werden:&lt;br /&gt;
&lt;br /&gt;
# Im Projektexplorer: Rechtsklick auf &amp;lt;code&amp;gt;HelloWorldCanvas01&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Team&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Commit&amp;lt;/code&amp;gt;&lt;br /&gt;
# Enter a comment for the commit operation: &amp;lt;code&amp;gt;hallo.html, ein HTML5-JavaScript-Moloch wurde erstellt.&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==JavaScript-Code auslagern==&lt;br /&gt;
&lt;br /&gt;
Man sollte i. Allg. vermeiden, Javascript-Code direkt in eine HTML-Seite einzufügen.&lt;br /&gt;
Diese Verknüpfung von [[View]] und [[Control]] bringt nur Nachteile mit sich: &lt;br /&gt;
* Der Code wird unübersichtlicher, da zwei unterschiedliche Sprachen gemischt werden ([[Impedance Mismatch]]).&lt;br /&gt;
* Der JavaScript-Code kann nicht in mehreren HTML-Dateien eingesetzt werden ([[Don&#039;t Repeat Yourself]]).&lt;br /&gt;
* Die Ladezeiten der einzelnen Seiten werden länger, wenn derselbe JavaScript-Code in unterschiedlichen Seinten eingebaut ist und für jede dieser Seiten erneut geladen werden muss.&lt;br /&gt;
&lt;br /&gt;
Aus diesen Gründen sollte man den JavaScript-Code in eigene Dateien auslagern:&lt;br /&gt;
&lt;br /&gt;
# Rechtsklick auf Ordner &amp;lt;code&amp;gt;WebContent&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Neu&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Ordner&amp;lt;/code&amp;gt; → Ordnername: &amp;lt;code&amp;gt;js&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
# Rechtsklick auf Ordner &amp;lt;code&amp;gt;js&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Neu&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Datei&amp;lt;/code&amp;gt; → Dateiname: &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Inhalt der Datei &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt;===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;use strict&amp;quot;; /* Warne vor unsauberem JavaScript-Code! */&lt;br /&gt;
&lt;br /&gt;
function init()&lt;br /&gt;
{&lt;br /&gt;
  // Erzeugung und Initialisierung der Bühne (Canvas)&lt;br /&gt;
  var l_canvas = document.getElementById(&amp;quot;d_canvas&amp;quot;); &lt;br /&gt;
&lt;br /&gt;
  l_canvas.width  = 300;&lt;br /&gt;
  l_canvas.height =  27;&lt;br /&gt;
&lt;br /&gt;
  // Textausgabe (auf der Bühne)&lt;br /&gt;
  var l_context = l_canvas.getContext(&amp;quot;2d&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  l_context.font = &amp;quot;bold 20px &#039;Times New Roman&#039;, Times, serif&amp;quot;;&lt;br /&gt;
  l_context.fillText(&amp;quot;Hallo Welt!&amp;quot;, 5, 20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Geänderter Inhalt der Datei &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt;===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Titel der HTML-Seite; wird i. Allg. im Browser im Reiter angezeigt --&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;HTML5-Tutorium: Canvas: Hello World 01&amp;lt;/title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Als HTML-Encoding sollte man stets UTF-8 verwenden. --&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Korrektes Skalieren der Seite auf einem mobilen Endgerät --&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0, user-scalable=yes&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Laden aller JavaScript-Dateien --&amp;gt;&lt;br /&gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;js/main.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;body onload=&amp;quot;init()&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Die Bühne (Canvas) --&amp;gt;&lt;br /&gt;
    &amp;lt;canvas id=&amp;quot;d_canvas&amp;quot;&amp;gt;&lt;br /&gt;
      Ihr Browser unterstützt HTML5 leider nicht!&lt;br /&gt;
    &amp;lt;/canvas&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Tipp====&lt;br /&gt;
Benutzen Sie am Besten die Code-Vervollständigung (&amp;lt;code&amp;gt;Strg-Leerzeichen&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;Ctrl-Space&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Beispiel: &lt;br /&gt;
# Klicken Sie testweise im Editor-Fenster der Datei &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt; in die leere Zeile 5 der Funktion &amp;lt;code&amp;gt;init&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Drücken Sie &amp;lt;code&amp;gt;Strg-Leerzeichen&amp;lt;/code&amp;gt; und wählen Sie z.B. &amp;lt;code&amp;gt;l_canvas&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Geben Sie einen Punkt (&amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt;) ein und drücken Sie erneut &amp;lt;code&amp;gt;Strg-Leerzeichen&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Löschen Sie den eben erfassten Inhalt wieder. (Ihre Datei &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt; sollte ja schon fertiggestellt gewesen sein.)&lt;br /&gt;
&lt;br /&gt;
==Projekt testen==&lt;br /&gt;
&lt;br /&gt;
Testen Sie Ihr Projekt wieder, indem Sie es im Firefox öffen.&lt;br /&gt;
&lt;br /&gt;
Häufig ist der JavaScript-Code bei den ersten Tests fehlerhaft. In diesen Fällen hilft einem&lt;br /&gt;
die JavaScript-Konsole, die z.B. über das Firefox-Plugin [https://addons.mozilla.org/de/firefox/addon/firebug/ Firebug] zugänglich ist, häufig weiter.&lt;br /&gt;
&lt;br /&gt;
Fügen Sie folgenden Code am Ende des Rumpfes der &amp;lt;code&amp;gt;init&amp;lt;/code&amp;gt;-Funktion ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  console.log(  &amp;quot;Canvas wurde erstellt: &amp;quot; &lt;br /&gt;
              + l_canvas.width + &amp;quot;*&amp;quot; + l_canvas.height + &amp;quot; Pixel.&amp;quot;&lt;br /&gt;
             );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun die Anwendung erneut im Firefox ausführen, sehen Sie zunächst keine Veränderung.&lt;br /&gt;
&lt;br /&gt;
Überprüfen Sie, ob Firebug im Firefox aktiviert wurde (Drop-Down-Menü beim Icon mit dem Bug (= Käfer) in der rechten oberen Ecke von Firefox).&lt;br /&gt;
&lt;br /&gt;
Öffnen Sie nun das Firebug-Fenster (Icon mit dem Bug) und laden Sie die JavaScript-Anwendung erneut (Reload im Firefox).&lt;br /&gt;
&lt;br /&gt;
Nun sollten Sie im Konsolen-Fenster von Firebug einen Kommentar lesen können.&lt;br /&gt;
&lt;br /&gt;
Wenn alle Tests erfolgreich verlaufen sind, ist es sinnvoll, die&lt;br /&gt;
Konsolenausgaben mittels &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt;  oder &amp;lt;code&amp;gt;/* ... */&amp;lt;/code&amp;gt; auszukommentieren.&lt;br /&gt;
&lt;br /&gt;
==Projekt im Repository sichern==&lt;br /&gt;
&lt;br /&gt;
Auch das Endergebnis des Projektes sollte im Repository gespeichert werden:&lt;br /&gt;
&lt;br /&gt;
# Im Projektexplorer: Rechtsklick auf &amp;lt;code&amp;gt;HelloWorldCanvas01&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Team&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Commit&amp;lt;/code&amp;gt;&lt;br /&gt;
# Enter a comment for the commit operation: &amp;lt;code&amp;gt;main.js wurde erstellt, zur Auslagerung des JS-Codes aus hallo.html.&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Repostitory begutachten==&lt;br /&gt;
&lt;br /&gt;
Nun können Sie den Inhalt in Ihrem Repository betrachten.&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Perspektive öffnen&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Andere&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SVN Repository Exploring&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
# Im Dateibaum (linkes Fenster) &amp;lt;code&amp;gt;https://praktikum.multimedia.hs-augsburg.de/svn/ACCOUNT&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;mmprog&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;tutorium&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;HelloWorldCanvas01&amp;lt;/code&amp;gt; aufklappen&lt;br /&gt;
&lt;br /&gt;
Hier sehen Sie zunächst den Inhalt des von Ihnen gespeicherten Projektes.&lt;br /&gt;
Das Repository kann aber noch mehr. Sie können sich alle gespeicherten Versionen Ihres Projektes ansehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Rechtsklick auf &amp;lt;code&amp;gt;HelloWorldCanvas01&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;Show History&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun sehen Sie im Protokoll-Fester die verschiedenen Versionen des Projektes, mit Revisionsnummer, Author (ein Repository kann von mehreren Autoren gelichzeitig benutzt werden), sowie die von Ihnen eingegebenen Kommentare.&lt;br /&gt;
&lt;br /&gt;
Als Letztes sollten Sie sich die Entwicklung der Datei &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; einmal näher ansehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Im Dateibaum &amp;lt;code&amp;gt;WebContent&amp;lt;/code&amp;gt; aufklappen → Rechtsklick auf &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Show Revision Graph&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Hier sehen Sie, dass es von dieser Datei zwei Versionen gibt. Diese können wir auch miteinander vergleichen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;6&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Im Dateibaum Rechtsklick auf &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Compare&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Vergleich der beiden Versionen erkennt mann, dass der JavaScript-Code durch einen Zugriff auf die Datei&lt;br /&gt;
&amp;lt;code&amp;gt;js/main.js&amp;lt;/code&amp;gt; ersetzt wurde.&lt;br /&gt;
&lt;br /&gt;
Kehren Sie nun in die normale Arbeitsumgebung zurück:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;7&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; In der Icon-Leiste oben rechts auf das Icon der Arbeitsumgebung (Perspektive) &amp;lt;code&amp;gt;Web&amp;lt;/code&amp;gt; klicken.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Neben den Icon &amp;lt;code&amp;gt;Web&amp;lt;/code&amp;gt; finden Sie jetzt auch ein Icon für die Arbeitsumgebung &amp;lt;code&amp;gt;SVN Repository Exploring&amp;lt;/code&amp;gt;,&lt;br /&gt;
damit Sie künftig schneller in diese Perspektive wechseln können.&lt;br /&gt;
&lt;br /&gt;
=Quellen=&lt;br /&gt;
# {{Quelle|Kowarschick, W.: Multimedia-Programmierung}}&lt;br /&gt;
# [http://blog.webagesolutions.com/archives/419 Coding HTML5 Pages Using Eclipse]&lt;br /&gt;
# [http://www.html5canvastutorials.com/tutorials/html5-canvas-text/ HTML5 Canvas Text Tutorial]&lt;br /&gt;
&lt;br /&gt;
=Siehe auch=&lt;br /&gt;
# {{SieheAuch|Pilgrim (2011)}}&lt;br /&gt;
# [http://www.w3schools.com/html5/ w3schools.com: HTML5 Tutorial]&lt;br /&gt;
# [http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html HTML Living Standard — The canvas element]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Kategorie: HTML5-Tutorium: Canvas: Hello World]][[Kategorie: HTML5-Beispiel]][[Kategorie:Kapitel:Multimedia-Programmierung:Beispiele]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rayza</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=HTML5-Tutorium:_Canvas:_Hello_World_01&amp;diff=23808</id>
		<title>HTML5-Tutorium: Canvas: Hello World 01</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=HTML5-Tutorium:_Canvas:_Hello_World_01&amp;diff=23808"/>
		<updated>2012-10-11T21:02:54Z</updated>

		<summary type="html">&lt;p&gt;Rayza: /* Repostitory begutachten */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{HTML5-Tutorium:Canvas:HelloWorld:Menü}}&lt;br /&gt;
&#039;&#039;&#039;Ergebnis&#039;&#039;&#039;: [http://glossar.hs-augsburg.de/beispiel/tutorium/html5_canvas/hello_world/html5_canvas_hello_world_01/WebContent/hallo.html &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt;]&lt;br /&gt;
([http://glossar.hs-augsburg.de/beispiel/tutorium/html5_canvas/hello_world/html5_canvas_hello_world_01 SVN-Repository])&lt;br /&gt;
=HTML5: Hello-Word-Anwendung mit Canvas=&lt;br /&gt;
&lt;br /&gt;
Zur Erstellung der Anwendung wird [[Installation von Eclipse (Windows)|Eclipse]] eingesetzt.&lt;br /&gt;
Alle Eclipse-Versionen ab Helios eignen sich zur Erstellung von HTML5-Web-Anwendungen.&lt;br /&gt;
&lt;br /&gt;
Zum Testen wird der Browser [[Firefox]] mit dem [https://addons.mozilla.org/de/firefox/addon/firebug/ Firebug-Plugin] verendet.&lt;br /&gt;
&lt;br /&gt;
Unter Eclipse kann der Testbrowser folgendermaßen festgelegt werden:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Benutzervorgaben&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Allgemein&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;Webbrowser&amp;lt;/code&amp;gt; selektieren → &amp;lt;code&amp;gt;Verwende externen Web-Browser&amp;lt;/code&amp;gt; selektieren → Häckchen vor &amp;lt;code&amp;gt;Firefox&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Eclipse vorbereiten==&lt;br /&gt;
(Dieser Punkt kann übersprungen werden, wenn man den Workspace http://glossar.hs-augsburg.de/svn/eclipse/workspace-mmprog heruntergeladen hat und in Eclipse als akutellen Workspace verwendet.)&lt;br /&gt;
&lt;br /&gt;
Zunächst sollte man die „richtige“ Oberfläche auswählen:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Perspektive öffnen&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Web&amp;lt;/code&amp;gt; (evtl. unter dem Punkt &amp;lt;code&amp;gt;Andere...&amp;lt;/code&amp;gt; zu finden; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beachten Sie, es gibt zwei Web-Perspektiven. Wählen Sie diejenige, die die Weltkugel mit Stift als Icon hat.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Außerdem muss der Character Code korrekt eingestellt werden:&lt;br /&gt;
&lt;br /&gt;
Juno:&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Benutzervorgaben&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Allgemein&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;Arbeitsbereich&amp;lt;/code&amp;gt; selektieren&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;code&amp;gt;Sonstige&amp;lt;/code&amp;gt; selektieren → &amp;lt;code&amp;gt;UTF-8&amp;lt;/code&amp;gt; im Drop-Down-Menü selektieren&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Indigo:&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Benutzervorgaben&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Web&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;HTML-Files&amp;lt;/code&amp;gt; selektieren&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Codierung: &amp;lt;code&amp;gt;ISO Latin-1&amp;lt;/code&amp;gt; durch &amp;lt;code&amp;gt;ISO 10646/Unicode(UTF-8)&amp;lt;/code&amp;gt; ersetzen&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Musterlösung herunterladen==&lt;br /&gt;
(Dieser Punkt kann übersprungen werden, wenn man den Workspace http://glossar.hs-augsburg.de/svn/eclipse/workspace_mmprog_x64.zip heruntergeladen hat und in Eclipse als akutellen Workspace verwendet.)&lt;br /&gt;
&lt;br /&gt;
Laden Sie die Musterlösung &amp;lt;code&amp;gt;http://glossar.hs-augsburg.de/beispiel/tutorium/html5_canvas/hello_world/html5_canvas_hello_world_01/&amp;lt;/code&amp;gt;&lt;br /&gt;
in Eclipse:&lt;br /&gt;
&lt;br /&gt;
# Klick auf Reiter &amp;lt;code&amp;gt;Datei&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Importieren&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SVN&amp;lt;/code&amp;gt; aufklappen → Klick auf &amp;lt;code&amp;gt;Checkout Projects from SVN&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt;&lt;br /&gt;
# Entweder&lt;br /&gt;
#* &amp;lt;code&amp;gt;Use existing repository location:&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;http://glossar.hs-augsburg.de/beispiel/tutorium&amp;lt;/code&amp;gt; selektieren (falls vorhanden)&lt;br /&gt;
#* &amp;lt;code&amp;gt;Create a new repsotiory location&amp;lt;/code&amp;gt; wählen → &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; → Url: &amp;lt;code&amp;gt;http://glossar.hs-augsburg.de/beispiel/tutorium&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt;&lt;br /&gt;
# Nachden der Dateibaum aufgegangen ist:  &amp;lt;code&amp;gt;html5_canvas&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;hello_world&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;html5_canvas_hello_worl_01&amp;lt;/code&amp;gt; selektieren &lt;br /&gt;
# &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Neues Projekt anlegen==&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Datei&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Neu&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Statisches Web-Projekt&amp;lt;/code&amp;gt;&lt;br /&gt;
# Project name: &amp;lt;code&amp;gt;HelloWorldCanvas01&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Speichern Sie nun Ihr Projekt in Ihrem Repository:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Projektexplorer&amp;lt;/code&amp;gt;: Rechtsklick auf &amp;lt;code&amp;gt;HelloWorldCanvas01&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Team&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Projekt gemeinsam nutzen&amp;lt;/code&amp;gt; &lt;br /&gt;
# &amp;lt;code&amp;gt;SVN&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;Create a new repository location&amp;lt;/code&amp;gt; selektieren&lt;br /&gt;
# Url: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://praktikum.multimedia.hs-augsburg.de/svn/ACCOUNT&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; (&#039;&#039;&#039;&amp;lt;code&amp;gt;ACCOUNT&amp;lt;/code&amp;gt; durch eigenen RZ-Account ersetzen&#039;&#039;&#039;) → &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; &lt;br /&gt;
# Use specified folder name: &amp;lt;code&amp;gt;mmprog/tutorium/HelloWorldCanvas01&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
# Beim ersten Mal: Klick auf &amp;lt;code&amp;gt;Accept permanently&amp;lt;/code&amp;gt;&lt;br /&gt;
# Beim ersten Mal: Passwort eingeben → Häckchen bei &amp;lt;code&amp;gt;Passwort merken&amp;lt;/code&amp;gt; (sonst muss man künftig für jede hozuladende Datei das Passwort eingeben) → &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Eventuell&#039;&#039;&#039;: Häckchen bei &amp;lt;code&amp;gt;Entscheidung merken&amp;lt;/code&amp;gt; → &#039;&#039;&#039;&amp;lt;code&amp;gt;Nein&amp;lt;/code&amp;gt;&#039;&#039;&#039; (Nicht &amp;lt;code&amp;gt;Ja&amp;lt;/code&amp;gt;!!!!)&lt;br /&gt;
&lt;br /&gt;
==Projekt im Repository sichern==&lt;br /&gt;
&lt;br /&gt;
Das neu angelegte Projekt wird gleich mal im Repository gesichert:&lt;br /&gt;
&lt;br /&gt;
# Im Projektexplorer: Rechtsklick auf &amp;lt;code&amp;gt;HelloWorldCanvas01&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Team&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Commit&amp;lt;/code&amp;gt;&lt;br /&gt;
# Enter a comment for the commit operation: &amp;lt;code&amp;gt;Neues Projekt angelegt.&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Neue HTML-Datei anlegen==&lt;br /&gt;
&lt;br /&gt;
# Im Projektexplorer (linkes Fenster): &amp;lt;code&amp;gt;HelloWorldCanvas01&amp;lt;/code&amp;gt; aufklappen&lt;br /&gt;
# Rechtsklick auf Ordner &amp;lt;code&amp;gt;WebContent&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Neu&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;HTML file&amp;lt;/code&amp;gt;&lt;br /&gt;
# Dateiname: &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; → Templates: &amp;lt;code&amp;gt;New HTML File (5)&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==HTML-Datei bearbeiten==&lt;br /&gt;
&lt;br /&gt;
Erfassen Sie folgenden Code in der HTML-Seite:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Titel der HTML-Seite; wird i. Allg. im Browser im Reiter angezeigt --&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;HTML5-Tutorium: Canvas: Hello World 01&amp;lt;/title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Als HTML-Encoding sollte man stets UTF-8 verwenden. --&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Korrektes Skalieren der Seite auf einem mobilen Endgerät --&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0, user-scalable=yes&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;!-- Zeichnen von &amp;quot;Hallo Welt!&amp;quot; auf der Bühne&lt;br /&gt;
    	  (nachdem die Seite geladen wurde). --&amp;gt;&lt;br /&gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
      function init()&lt;br /&gt;
      {&lt;br /&gt;
        var l_canvas = document.getElementById(&amp;quot;d_canvas&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
        l_canvas.width  = 300;&lt;br /&gt;
        l_canvas.height =  27;&lt;br /&gt;
 &lt;br /&gt;
        var l_context = l_canvas.getContext(&amp;quot;2d&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
        l_context.font = &amp;quot;bold 20px &#039;Times New Roman&#039;, Times, serif&amp;quot;;&lt;br /&gt;
        l_context.fillText(&amp;quot;Hallo Welt!&amp;quot;, 5, 20);&lt;br /&gt;
      }&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;body onload=&amp;quot;init()&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Die Bühne (Canvas) --&amp;gt;&lt;br /&gt;
    &amp;lt;canvas id=&amp;quot;d_canvas&amp;quot;&amp;gt;&lt;br /&gt;
      Ihr Browser unterstützt HTML5 leider nicht!&lt;br /&gt;
    &amp;lt;/canvas&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Anmerkung 1====&lt;br /&gt;
Auf das Canvas-Element wird ausschließlich von [[JavaScript]] aus zugegriffen.&lt;br /&gt;
Sollte ein Browser dieses Element nicht unterstützen, so wird der alternative&lt;br /&gt;
HTML-Code innerhalb des Canvas-Element gerendert und ausgegeben. Hier&lt;br /&gt;
könnte beispielsweise eine [[Flash]]-Anwendung ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
====Anmerkung 2====&lt;br /&gt;
Die Meta-Anweisung&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0, user-scalable=yes&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
dient dazu, dass der Inhalt der Seite auf einem Smartphone in der richtigen Größe angezeigt wird.&lt;br /&gt;
&lt;br /&gt;
====Anmerkung 3====&lt;br /&gt;
Es gibt auch einen WYSIWYG-Editor, den Sie folgendermaßen öffnen können:&lt;br /&gt;
# Rechtklick in das Editor-Fenster → &amp;lt;code&amp;gt;Öffnen mit&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Web Page Editor&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Allerdings unterstützt dieser WYSIWYG-Editor die HTML5-Zeichenbühne [[Canvas]] nicht und ist daher für dieses Tutorium nicht sonderlich nützlich.&lt;br /&gt;
&lt;br /&gt;
==HTML-Seite testen==&lt;br /&gt;
# &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; speichern: &amp;lt;code&amp;gt;Strg-s&amp;lt;/code&amp;gt;&lt;br /&gt;
# Wichtig: &#039;&#039;&#039;Im &amp;lt;code&amp;gt;Projektexplorer&amp;lt;/code&amp;gt; jeweils vor dem Server-Aufruf &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; selektieren&#039;&#039;&#039;, sonst erhalten Sie eine Fehlermeldung.&lt;br /&gt;
# In der Icon-Zeile: Klick auf Icon „grüner Kreis mit weißen Dreieck“ →  Serverziel auswählen: &amp;lt;code&amp;gt;JavaScript Web Application&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
===Anmerkungen zum Firefox auf den Rechnern des MM-Labors===&lt;br /&gt;
&lt;br /&gt;
Defaultmäßig kann der Firefox im MM-Labor nicht auf lokale Webserver (wie z.B. den Aptana-Server) zugreifen. &lt;br /&gt;
&lt;br /&gt;
Grund: In diesem Firefox ist eine unpassende Proxy-Konfiguration voreingestellt. &lt;br /&gt;
Diese Einstellung verhindert den Zugriff auf localhost. &lt;br /&gt;
&lt;br /&gt;
Lösung des Problems:&lt;br /&gt;
# Firefox starten&lt;br /&gt;
# Einstellungen → Erweitert → Netzwerk → Einstellungen  &lt;br /&gt;
# Haken von &amp;lt;code&amp;gt;Proxy-Einstellungen des Systems verwenden&amp;lt;/code&amp;gt; auf &amp;lt;code&amp;gt;Manuelle Proxy-Konfiguration&amp;lt;/code&amp;gt; setzen und als Ausnahme &amp;lt;code&amp;gt;localhost und 127.0.0.1&amp;lt;/code&amp;gt; einstellen. &lt;br /&gt;
&lt;br /&gt;
===Anmerkungen zum Test-Sever===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solange Sie nur HTML-Seiten, die JavaScript-Code enthalten, testen wollen, ist das Serverziel &amp;lt;code&amp;gt;JavaScript Web Application&amp;lt;/code&amp;gt; die beste Wahl.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sie können allerdings auch andere Web-Server verwenden:&lt;br /&gt;
&lt;br /&gt;
* Den HTTP-Preview-Server, der in Eclipse integriert ist (probieren Sie diesen ruhig einmal an Stelle des JavaScript-Web-Application-Servers aus)&lt;br /&gt;
* Tomcat (hier muss [[Installation von Tomcat|Tomcat]] installiert und mit [[Installation von Eclipse#Integration_von_Tomcat|Eclipse verknüpft]] werden)&lt;br /&gt;
* Apache (hier muss [[Installation von Apache|Apache]] installiert und mit Eclipse verknüpft werden; siehe [[HTML5-Tutorium: Canvas: Hello World 02#Optional:_Apache_als_Test-Server|Teil 2 des Tutoriums]])&lt;br /&gt;
* etc.&lt;br /&gt;
&lt;br /&gt;
In allen diesen Fällen müssten Sie &amp;lt;code&amp;gt;Run on Server&amp;lt;/code&amp;gt; an Stelle von&lt;br /&gt;
&amp;lt;code&amp;gt;JavaScript Web Application&amp;lt;/code&amp;gt; auswählen:&lt;br /&gt;
# In der Icon-Zeile: Klick auf Icon „grüner Kreis mit weißen Dreieck“ →  Serverziel auswählen: &amp;lt;code&amp;gt;Run on Server&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Den HTTP-Preview-Server wählen Sie folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;3&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;code&amp;gt;HTTP Preview&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beachten Sie, dass beim HTTP-Preview-Server mit jedem Klick des Debug-Icons (grüner Kreis mit weißen Dreieck) ein neues Browserfenster in Eclipse geöffnet wird.&lt;br /&gt;
Daher ist es sinnvoller, im bestehenden Browserfenster das Reload-Icon (zwei kreiförmig angeordnete Pfeile) anzuklicken, um Änderungen an einer der &lt;br /&gt;
Web-Dateien sichtbar zu machen.&lt;br /&gt;
&lt;br /&gt;
Für komplexere Web-Seiten mit [[PHP]]-Code, [[JSP]]-Code etc. muss man einen echten Server (wie [[Apache]] oder [[Tomcat]]) installieren und&lt;br /&gt;
mit Eclipse verknüpfen.&lt;br /&gt;
&lt;br /&gt;
Wenn der von Ihnen gewählte Test-Web-Server Probleme hat, die&lt;br /&gt;
neuen HTML-Seiten darzustellen, kann es notwendig sein, den Server neu zu starten:&lt;br /&gt;
&lt;br /&gt;
# Reiter &amp;lt;code&amp;gt;Server&amp;lt;/code&amp;gt; im unteren Fenster selektieren&lt;br /&gt;
# Klick auf Icon „rotes Recheck“ (Server stoppen)&lt;br /&gt;
# Klick auf Icon „grüner Kreis mit weißem Dreieck“ (Server starten)&lt;br /&gt;
&lt;br /&gt;
==Projekt im Repository sichern==&lt;br /&gt;
&lt;br /&gt;
Jedes funktionierende Zwischenergebnis eines Projektes sollte im Repository gespeichert werden:&lt;br /&gt;
&lt;br /&gt;
# Im Projektexplorer: Rechtsklick auf &amp;lt;code&amp;gt;HelloWorldCanvas01&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Team&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Commit&amp;lt;/code&amp;gt;&lt;br /&gt;
# Enter a comment for the commit operation: &amp;lt;code&amp;gt;hallo.html, ein HTML5-JavaScript-Moloch wurde erstellt.&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==JavaScript-Code auslagern==&lt;br /&gt;
&lt;br /&gt;
Man sollte i. Allg. vermeiden, Javascript-Code direkt in eine HTML-Seite einzufügen.&lt;br /&gt;
Diese Verknüpfung von [[View]] und [[Control]] bringt nur Nachteile mit sich: &lt;br /&gt;
* Der Code wird unübersichtlicher, da zwei unterschiedliche Sprachen gemischt werden ([[Impedance Mismatch]]).&lt;br /&gt;
* Der JavaScript-Code kann nicht in mehreren HTML-Dateien eingesetzt werden ([[Don&#039;t Repeat Yourself]]).&lt;br /&gt;
* Die Ladezeiten der einzelnen Seiten werden länger, wenn derselbe JavaScript-Code in unterschiedlichen Seinten eingebaut ist und für jede dieser Seiten erneut geladen werden muss.&lt;br /&gt;
&lt;br /&gt;
Aus diesen Gründen sollte man den JavaScript-Code in eigene Dateien auslagern:&lt;br /&gt;
&lt;br /&gt;
# Rechtsklick auf Ordner &amp;lt;code&amp;gt;WebContent&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Neu&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Ordner&amp;lt;/code&amp;gt; → Ordnername: &amp;lt;code&amp;gt;js&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
# Rechtsklick auf Ordner &amp;lt;code&amp;gt;js&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Neu&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Datei&amp;lt;/code&amp;gt; → Dateiname: &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Inhalt der Datei &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt;===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;use strict&amp;quot;; /* Warne vor unsauberem JavaScript-Code! */&lt;br /&gt;
&lt;br /&gt;
function init()&lt;br /&gt;
{&lt;br /&gt;
  // Erzeugung und Initialisierung der Bühne (Canvas)&lt;br /&gt;
  var l_canvas = document.getElementById(&amp;quot;d_canvas&amp;quot;); &lt;br /&gt;
&lt;br /&gt;
  l_canvas.width  = 300;&lt;br /&gt;
  l_canvas.height =  27;&lt;br /&gt;
&lt;br /&gt;
  // Textausgabe (auf der Bühne)&lt;br /&gt;
  var l_context = l_canvas.getContext(&amp;quot;2d&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  l_context.font = &amp;quot;bold 20px &#039;Times New Roman&#039;, Times, serif&amp;quot;;&lt;br /&gt;
  l_context.fillText(&amp;quot;Hallo Welt!&amp;quot;, 5, 20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Geänderter Inhalt der Datei &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt;===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Titel der HTML-Seite; wird i. Allg. im Browser im Reiter angezeigt --&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;HTML5-Tutorium: Canvas: Hello World 01&amp;lt;/title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Als HTML-Encoding sollte man stets UTF-8 verwenden. --&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Korrektes Skalieren der Seite auf einem mobilen Endgerät --&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0, user-scalable=yes&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Laden aller JavaScript-Dateien --&amp;gt;&lt;br /&gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;js/main.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;body onload=&amp;quot;init()&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Die Bühne (Canvas) --&amp;gt;&lt;br /&gt;
    &amp;lt;canvas id=&amp;quot;d_canvas&amp;quot;&amp;gt;&lt;br /&gt;
      Ihr Browser unterstützt HTML5 leider nicht!&lt;br /&gt;
    &amp;lt;/canvas&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Tipp====&lt;br /&gt;
Benutzen Sie am Besten die Code-Vervollständigung (&amp;lt;code&amp;gt;Strg-Leerzeichen&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;Ctrl-Space&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Beispiel: &lt;br /&gt;
# Klicken Sie testweise im Editor-Fenster der Datei &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt; in die leere Zeile 5 der Funktion &amp;lt;code&amp;gt;init&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Drücken Sie &amp;lt;code&amp;gt;Strg-Leerzeichen&amp;lt;/code&amp;gt; und wählen Sie z.B. &amp;lt;code&amp;gt;l_canvas&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Geben Sie einen Punkt (&amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt;) ein und drücken Sie erneut &amp;lt;code&amp;gt;Strg-Leerzeichen&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Löschen Sie den eben erfassten Inhalt wieder. (Ihre Datei &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt; sollte ja schon fertiggestellt gewesen sein.)&lt;br /&gt;
&lt;br /&gt;
==Projekt testen==&lt;br /&gt;
&lt;br /&gt;
Testen Sie Ihr Projekt wieder, indem Sie es im Firefox öffen.&lt;br /&gt;
&lt;br /&gt;
Häufig ist der JavaScript-Code bei den ersten Tests fehlerhaft. In diesen Fällen hilft einem&lt;br /&gt;
die JavaScript-Konsole, die z.B. über das Firefox-Plugin [https://addons.mozilla.org/de/firefox/addon/firebug/ Firebug] zugänglich ist, häufig weiter.&lt;br /&gt;
&lt;br /&gt;
Fügen Sie folgenden Code am Ende des Rumpfes der &amp;lt;code&amp;gt;init&amp;lt;/code&amp;gt;-Funktion ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  console.log(  &amp;quot;Canvas wurde erstellt: &amp;quot; &lt;br /&gt;
              + l_canvas.width + &amp;quot;*&amp;quot; + l_canvas.height + &amp;quot; Pixel.&amp;quot;&lt;br /&gt;
             );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun die Anwendung erneut im Firefox ausführen, sehen Sie zunächst keine Veränderung.&lt;br /&gt;
&lt;br /&gt;
Überprüfen Sie, ob Firebug im Firefox aktiviert wurde (Drop-Down-Menü beim Icon mit dem Bug (= Käfer) in der rechten oberen Ecke von Firefox).&lt;br /&gt;
&lt;br /&gt;
Öffnen Sie nun das Firebug-Fenster (Icon mit dem Bug) und laden Sie die JavaScript-Anwendung erneut (Reload im Firefox).&lt;br /&gt;
&lt;br /&gt;
Nun sollten Sie im Konsolen-Fenster von Firebug einen Kommentar lesen können.&lt;br /&gt;
&lt;br /&gt;
Wenn alle Tests erfolgreich verlaufen sind, ist es sinnvoll, die&lt;br /&gt;
Konsolenausgaben mittels &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt;  oder &amp;lt;code&amp;gt;/* ... */&amp;lt;/code&amp;gt; auszukommentieren.&lt;br /&gt;
&lt;br /&gt;
==Projekt im Repository sichern==&lt;br /&gt;
&lt;br /&gt;
Auch das Endergebnis des Projektes sollte im Repository gespeichert werden:&lt;br /&gt;
&lt;br /&gt;
# Im Projektexplorer: Rechtsklick auf &amp;lt;code&amp;gt;HelloWorldCanvas01&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Team&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Commit&amp;lt;/code&amp;gt;&lt;br /&gt;
# Enter a comment for the commit operation: &amp;lt;code&amp;gt;main.js wurde erstellt, zur Auslagerung des JS-Codes aus hallo.html.&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Repostitory begutachten==&lt;br /&gt;
&lt;br /&gt;
Nun können Sie den Inhalt in Ihrem Repository betrachten.&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Perspektive öffnen&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Andere&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SVN Repository Exploring&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
# Im Dateibaum (linkes Fenster) &amp;lt;code&amp;gt;https://praktikum.multimedia.hs-augsburg.de/svn/ACCOUNT&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;mmprog&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;tutorium&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;HelloWorldCanvas01&amp;lt;/code&amp;gt; aufklappen&lt;br /&gt;
&lt;br /&gt;
Hier sehen Sie zunächst den Inhalt des von Ihnen gespeicherten Projektes.&lt;br /&gt;
Das Repository kann aber noch mehr. Sie können sich alle gespeicherten Versionen Ihres Projektes ansehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Rechtsklick auf &amp;lt;code&amp;gt;HelloWorldCanvas01&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;Show History&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun sehen Sie im Protokoll-Fester die verschiedenen Versionen des Projektes, mit Revisionsnummer, Author (ein Repository kann von mehreren Autoren gelichzeitig benutzt werden), sowie die von Ihnen eingegebenen Kommentare.&lt;br /&gt;
&lt;br /&gt;
Als letztes sollten Sie sich die Entwicklung der Datei &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; einmal näher ansehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Im Dateibaum &amp;lt;code&amp;gt;WebContent&amp;lt;/code&amp;gt; aufklappen → Rechtsklick auf &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Show Resion Graph&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Hier sehen Sie, dass es von dieser Datei zwei Versionen gibt. Diese können wir auch miteinander vergleichen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;6&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Im Dateibaum Rechtsklick auf &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Compare&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Vergleich der beiden Versionen erkennt mann, dass der JavaScript-Code durch einen Zugriff auf die Datei&lt;br /&gt;
&amp;lt;code&amp;gt;js/main.js&amp;lt;/code&amp;gt; ersetzt wurde.&lt;br /&gt;
&lt;br /&gt;
Kehren Sie nun in die normale Arbeitsumgebung zurück:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;7&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; In der Icon-Leiste oben rechts auf das Icon der Arbeitsumgebung (Perspektive) &amp;lt;code&amp;gt;Web&amp;lt;/code&amp;gt; klicken.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Neben den Icon &amp;lt;code&amp;gt;Web&amp;lt;/code&amp;gt; finden Sie jetzt auch ein Icon für die Arbeitsumgebung &amp;lt;code&amp;gt;SVN Repository Exploring&amp;lt;/code&amp;gt;,&lt;br /&gt;
damit Sie künftig schneller in diese Perspektive wechseln können.&lt;br /&gt;
&lt;br /&gt;
=Quellen=&lt;br /&gt;
# {{Quelle|Kowarschick, W.: Multimedia-Programmierung}}&lt;br /&gt;
# [http://blog.webagesolutions.com/archives/419 Coding HTML5 Pages Using Eclipse]&lt;br /&gt;
# [http://www.html5canvastutorials.com/tutorials/html5-canvas-text/ HTML5 Canvas Text Tutorial]&lt;br /&gt;
&lt;br /&gt;
=Siehe auch=&lt;br /&gt;
# {{SieheAuch|Pilgrim (2011)}}&lt;br /&gt;
# [http://www.w3schools.com/html5/ w3schools.com: HTML5 Tutorial]&lt;br /&gt;
# [http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html HTML Living Standard — The canvas element]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Kategorie: HTML5-Tutorium: Canvas: Hello World]][[Kategorie: HTML5-Beispiel]][[Kategorie:Kapitel:Multimedia-Programmierung:Beispiele]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rayza</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=HTML5-Tutorium:_Canvas:_Hello_World_01&amp;diff=23806</id>
		<title>HTML5-Tutorium: Canvas: Hello World 01</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=HTML5-Tutorium:_Canvas:_Hello_World_01&amp;diff=23806"/>
		<updated>2012-10-11T15:33:41Z</updated>

		<summary type="html">&lt;p&gt;Rayza: /* Tipp */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{HTML5-Tutorium:Canvas:HelloWorld:Menü}}&lt;br /&gt;
&#039;&#039;&#039;Ergebnis&#039;&#039;&#039;: [http://glossar.hs-augsburg.de/beispiel/tutorium/html5_canvas/hello_world/html5_canvas_hello_world_01/WebContent/hallo.html &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt;]&lt;br /&gt;
([http://glossar.hs-augsburg.de/beispiel/tutorium/html5_canvas/hello_world/html5_canvas_hello_world_01 SVN-Repository])&lt;br /&gt;
=HTML5: Hello-Word-Anwendung mit Canvas=&lt;br /&gt;
&lt;br /&gt;
Zur Erstellung der Anwendung wird [[Installation von Eclipse (Windows)|Eclipse]] eingesetzt.&lt;br /&gt;
Alle Eclipse-Versionen ab Helios eignen sich zur Erstellung von HTML5-Web-Anwendungen.&lt;br /&gt;
&lt;br /&gt;
Zum Testen wird der Browser [[Firefox]] mit dem [https://addons.mozilla.org/de/firefox/addon/firebug/ Firebug-Plugin] verendet.&lt;br /&gt;
&lt;br /&gt;
Unter Eclipse kann der Testbrowser folgendermaßen festgelegt werden:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Benutzervorgaben&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Allgemein&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;Webbrowser&amp;lt;/code&amp;gt; selektieren → &amp;lt;code&amp;gt;Verwende externen Web-Browser&amp;lt;/code&amp;gt; selektieren → Häckchen vor &amp;lt;code&amp;gt;Firefox&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Eclipse vorbereiten==&lt;br /&gt;
(Dieser Punkt kann übersprungen werden, wenn man den Workspace http://glossar.hs-augsburg.de/svn/eclipse/workspace-mmprog heruntergeladen hat und in Eclipse als akutellen Workspace verwendet.)&lt;br /&gt;
&lt;br /&gt;
Zunächst sollte man die „richtige“ Oberfläche auswählen:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Perspektive öffnen&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Web&amp;lt;/code&amp;gt; (evtl. unter dem Punkt &amp;lt;code&amp;gt;Andere...&amp;lt;/code&amp;gt; zu finden; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beachten Sie, es gibt zwei Web-Perspektiven. Wählen Sie diejenige, die die Weltkugel mit Stift als Icon hat.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Außerdem muss der Character Code korrekt eingestellt werden:&lt;br /&gt;
&lt;br /&gt;
Juno:&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Benutzervorgaben&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Allgemein&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;Arbeitsbereich&amp;lt;/code&amp;gt; selektieren&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;code&amp;gt;Sonstige&amp;lt;/code&amp;gt; selektieren → &amp;lt;code&amp;gt;UTF-8&amp;lt;/code&amp;gt; im Drop-Down-Menü selektieren&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Indigo:&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Benutzervorgaben&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Web&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;HTML-Files&amp;lt;/code&amp;gt; selektieren&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Codierung: &amp;lt;code&amp;gt;ISO Latin-1&amp;lt;/code&amp;gt; durch &amp;lt;code&amp;gt;ISO 10646/Unicode(UTF-8)&amp;lt;/code&amp;gt; ersetzen&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Musterlösung herunterladen==&lt;br /&gt;
(Dieser Punkt kann übersprungen werden, wenn man den Workspace http://glossar.hs-augsburg.de/svn/eclipse/workspace_mmprog_x64.zip heruntergeladen hat und in Eclipse als akutellen Workspace verwendet.)&lt;br /&gt;
&lt;br /&gt;
Laden Sie die Musterlösung &amp;lt;code&amp;gt;http://glossar.hs-augsburg.de/beispiel/tutorium/html5_canvas/hello_world/html5_canvas_hello_world_01/&amp;lt;/code&amp;gt;&lt;br /&gt;
in Eclipse:&lt;br /&gt;
&lt;br /&gt;
# Klick auf Reiter &amp;lt;code&amp;gt;Datei&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Importieren&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SVN&amp;lt;/code&amp;gt; aufklappen → Klick auf &amp;lt;code&amp;gt;Checkout Projects from SVN&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt;&lt;br /&gt;
# Entweder&lt;br /&gt;
#* &amp;lt;code&amp;gt;Use existing repository location:&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;http://glossar.hs-augsburg.de/beispiel/tutorium&amp;lt;/code&amp;gt; selektieren (falls vorhanden)&lt;br /&gt;
#* &amp;lt;code&amp;gt;Create a new repsotiory location&amp;lt;/code&amp;gt; wählen → &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; → Url: &amp;lt;code&amp;gt;http://glossar.hs-augsburg.de/beispiel/tutorium&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt;&lt;br /&gt;
# Nachden der Dateibaum aufgegangen ist:  &amp;lt;code&amp;gt;html5_canvas&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;hello_world&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;html5_canvas_hello_worl_01&amp;lt;/code&amp;gt; selektieren &lt;br /&gt;
# &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Neues Projekt anlegen==&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Datei&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Neu&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Statisches Web-Projekt&amp;lt;/code&amp;gt;&lt;br /&gt;
# Project name: &amp;lt;code&amp;gt;HelloWorldCanvas01&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Speichern Sie nun Ihr Projekt in Ihrem Repository:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Projektexplorer&amp;lt;/code&amp;gt;: Rechtsklick auf &amp;lt;code&amp;gt;HelloWorldCanvas01&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Team&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Projekt gemeinsam nutzen&amp;lt;/code&amp;gt; &lt;br /&gt;
# &amp;lt;code&amp;gt;SVN&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;Create a new repository location&amp;lt;/code&amp;gt; selektieren&lt;br /&gt;
# Url: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://praktikum.multimedia.hs-augsburg.de/svn/ACCOUNT&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; (&#039;&#039;&#039;&amp;lt;code&amp;gt;ACCOUNT&amp;lt;/code&amp;gt; durch eigenen RZ-Account ersetzen&#039;&#039;&#039;) → &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; &lt;br /&gt;
# Use specified folder name: &amp;lt;code&amp;gt;mmprog/tutorium/HelloWorldCanvas01&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
# Beim ersten Mal: Klick auf &amp;lt;code&amp;gt;Accept permanently&amp;lt;/code&amp;gt;&lt;br /&gt;
# Beim ersten Mal: Passwort eingeben → Häckchen bei &amp;lt;code&amp;gt;Passwort merken&amp;lt;/code&amp;gt; (sonst muss man künftig für jede hozuladende Datei das Passwort eingeben) → &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Eventuell&#039;&#039;&#039;: Häckchen bei &amp;lt;code&amp;gt;Entscheidung merken&amp;lt;/code&amp;gt; → &#039;&#039;&#039;&amp;lt;code&amp;gt;Nein&amp;lt;/code&amp;gt;&#039;&#039;&#039; (Nicht &amp;lt;code&amp;gt;Ja&amp;lt;/code&amp;gt;!!!!)&lt;br /&gt;
&lt;br /&gt;
==Projekt im Repository sichern==&lt;br /&gt;
&lt;br /&gt;
Das neu angelegte Projekt wird gleich mal im Repository gesichert:&lt;br /&gt;
&lt;br /&gt;
# Im Projektexplorer: Rechtsklick auf &amp;lt;code&amp;gt;HelloWorldCanvas01&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Team&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Commit&amp;lt;/code&amp;gt;&lt;br /&gt;
# Enter a comment for the commit operation: &amp;lt;code&amp;gt;Neues Projekt angelegt.&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Neue HTML-Datei anlegen==&lt;br /&gt;
&lt;br /&gt;
# Im Projektexplorer (linkes Fenster): &amp;lt;code&amp;gt;HelloWorldCanvas01&amp;lt;/code&amp;gt; aufklappen&lt;br /&gt;
# Rechtsklick auf Ordner &amp;lt;code&amp;gt;WebContent&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Neu&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;HTML file&amp;lt;/code&amp;gt;&lt;br /&gt;
# Dateiname: &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; → Templates: &amp;lt;code&amp;gt;New HTML File (5)&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==HTML-Datei bearbeiten==&lt;br /&gt;
&lt;br /&gt;
Erfassen Sie folgenden Code in der HTML-Seite:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Titel der HTML-Seite; wird i. Allg. im Browser im Reiter angezeigt --&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;HTML5-Tutorium: Canvas: Hello World 01&amp;lt;/title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Als HTML-Encoding sollte man stets UTF-8 verwenden. --&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Korrektes Skalieren der Seite auf einem mobilen Endgerät --&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0, user-scalable=yes&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;!-- Zeichnen von &amp;quot;Hallo Welt!&amp;quot; auf der Bühne&lt;br /&gt;
    	  (nachdem die Seite geladen wurde). --&amp;gt;&lt;br /&gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
      function init()&lt;br /&gt;
      {&lt;br /&gt;
        var l_canvas = document.getElementById(&amp;quot;d_canvas&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
        l_canvas.width  = 300;&lt;br /&gt;
        l_canvas.height =  27;&lt;br /&gt;
 &lt;br /&gt;
        var l_context = l_canvas.getContext(&amp;quot;2d&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
        l_context.font = &amp;quot;bold 20px &#039;Times New Roman&#039;, Times, serif&amp;quot;;&lt;br /&gt;
        l_context.fillText(&amp;quot;Hallo Welt!&amp;quot;, 5, 20);&lt;br /&gt;
      }&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;body onload=&amp;quot;init()&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Die Bühne (Canvas) --&amp;gt;&lt;br /&gt;
    &amp;lt;canvas id=&amp;quot;d_canvas&amp;quot;&amp;gt;&lt;br /&gt;
      Ihr Browser unterstützt HTML5 leider nicht!&lt;br /&gt;
    &amp;lt;/canvas&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Anmerkung 1====&lt;br /&gt;
Auf das Canvas-Element wird ausschließlich von [[JavaScript]] aus zugegriffen.&lt;br /&gt;
Sollte ein Browser dieses Element nicht unterstützen, so wird der alternative&lt;br /&gt;
HTML-Code innerhalb des Canvas-Element gerendert und ausgegeben. Hier&lt;br /&gt;
könnte beispielsweise eine [[Flash]]-Anwendung ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
====Anmerkung 2====&lt;br /&gt;
Die Meta-Anweisung&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0, user-scalable=yes&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
dient dazu, dass der Inhalt der Seite auf einem Smartphone in der richtigen Größe angezeigt wird.&lt;br /&gt;
&lt;br /&gt;
====Anmerkung 3====&lt;br /&gt;
Es gibt auch einen WYSIWYG-Editor, den Sie folgendermaßen öffnen können:&lt;br /&gt;
# Rechtklick in das Editor-Fenster → &amp;lt;code&amp;gt;Öffnen mit&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Web Page Editor&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Allerdings unterstützt dieser WYSIWYG-Editor die HTML5-Zeichenbühne [[Canvas]] nicht und ist daher für dieses Tutorium nicht sonderlich nützlich.&lt;br /&gt;
&lt;br /&gt;
==HTML-Seite testen==&lt;br /&gt;
# &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; speichern: &amp;lt;code&amp;gt;Strg-s&amp;lt;/code&amp;gt;&lt;br /&gt;
# Wichtig: &#039;&#039;&#039;Im &amp;lt;code&amp;gt;Projektexplorer&amp;lt;/code&amp;gt; jeweils vor dem Server-Aufruf &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; selektieren&#039;&#039;&#039;, sonst erhalten Sie eine Fehlermeldung.&lt;br /&gt;
# In der Icon-Zeile: Klick auf Icon „grüner Kreis mit weißen Dreieck“ →  Serverziel auswählen: &amp;lt;code&amp;gt;JavaScript Web Application&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
===Anmerkungen zum Firefox auf den Rechnern des MM-Labors===&lt;br /&gt;
&lt;br /&gt;
Defaultmäßig kann der Firefox im MM-Labor nicht auf lokale Webserver (wie z.B. den Aptana-Server) zugreifen. &lt;br /&gt;
&lt;br /&gt;
Grund: In diesem Firefox ist eine unpassende Proxy-Konfiguration voreingestellt. &lt;br /&gt;
Diese Einstellung verhindert den Zugriff auf localhost. &lt;br /&gt;
&lt;br /&gt;
Lösung des Problems:&lt;br /&gt;
# Firefox starten&lt;br /&gt;
# Einstellungen → Erweitert → Netzwerk → Einstellungen  &lt;br /&gt;
# Haken von &amp;lt;code&amp;gt;Proxy-Einstellungen des Systems verwenden&amp;lt;/code&amp;gt; auf &amp;lt;code&amp;gt;Manuelle Proxy-Konfiguration&amp;lt;/code&amp;gt; setzen und als Ausnahme &amp;lt;code&amp;gt;localhost und 127.0.0.1&amp;lt;/code&amp;gt; einstellen. &lt;br /&gt;
&lt;br /&gt;
===Anmerkungen zum Test-Sever===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solange Sie nur HTML-Seiten, die JavaScript-Code enthalten, testen wollen, ist das Serverziel &amp;lt;code&amp;gt;JavaScript Web Application&amp;lt;/code&amp;gt; die beste Wahl.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sie können allerdings auch andere Web-Server verwenden:&lt;br /&gt;
&lt;br /&gt;
* Den HTTP-Preview-Server, der in Eclipse integriert ist (probieren Sie diesen ruhig einmal an Stelle des JavaScript-Web-Application-Servers aus)&lt;br /&gt;
* Tomcat (hier muss [[Installation von Tomcat|Tomcat]] installiert und mit [[Installation von Eclipse#Integration_von_Tomcat|Eclipse verknüpft]] werden)&lt;br /&gt;
* Apache (hier muss [[Installation von Apache|Apache]] installiert und mit Eclipse verknüpft werden; siehe [[HTML5-Tutorium: Canvas: Hello World 02#Optional:_Apache_als_Test-Server|Teil 2 des Tutoriums]])&lt;br /&gt;
* etc.&lt;br /&gt;
&lt;br /&gt;
In allen diesen Fällen müssten Sie &amp;lt;code&amp;gt;Run on Server&amp;lt;/code&amp;gt; an Stelle von&lt;br /&gt;
&amp;lt;code&amp;gt;JavaScript Web Application&amp;lt;/code&amp;gt; auswählen:&lt;br /&gt;
# In der Icon-Zeile: Klick auf Icon „grüner Kreis mit weißen Dreieck“ →  Serverziel auswählen: &amp;lt;code&amp;gt;Run on Server&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Den HTTP-Preview-Server wählen Sie folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;3&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;code&amp;gt;HTTP Preview&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beachten Sie, dass beim HTTP-Preview-Server mit jedem Klick des Debug-Icons (grüner Kreis mit weißen Dreieck) ein neues Browserfenster in Eclipse geöffnet wird.&lt;br /&gt;
Daher ist es sinnvoller, im bestehenden Browserfenster das Reload-Icon (zwei kreiförmig angeordnete Pfeile) anzuklicken, um Änderungen an einer der &lt;br /&gt;
Web-Dateien sichtbar zu machen.&lt;br /&gt;
&lt;br /&gt;
Für komplexere Web-Seiten mit [[PHP]]-Code, [[JSP]]-Code etc. muss man einen echten Server (wie [[Apache]] oder [[Tomcat]]) installieren und&lt;br /&gt;
mit Eclipse verknüpfen.&lt;br /&gt;
&lt;br /&gt;
Wenn der von Ihnen gewählte Test-Web-Server Probleme hat, die&lt;br /&gt;
neuen HTML-Seiten darzustellen, kann es notwendig sein, den Server neu zu starten:&lt;br /&gt;
&lt;br /&gt;
# Reiter &amp;lt;code&amp;gt;Server&amp;lt;/code&amp;gt; im unteren Fenster selektieren&lt;br /&gt;
# Klick auf Icon „rotes Recheck“ (Server stoppen)&lt;br /&gt;
# Klick auf Icon „grüner Kreis mit weißem Dreieck“ (Server starten)&lt;br /&gt;
&lt;br /&gt;
==Projekt im Repository sichern==&lt;br /&gt;
&lt;br /&gt;
Jedes funktionierende Zwischenergebnis eines Projektes sollte im Repository gespeichert werden:&lt;br /&gt;
&lt;br /&gt;
# Im Projektexplorer: Rechtsklick auf &amp;lt;code&amp;gt;HelloWorldCanvas01&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Team&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Commit&amp;lt;/code&amp;gt;&lt;br /&gt;
# Enter a comment for the commit operation: &amp;lt;code&amp;gt;hallo.html, ein HTML5-JavaScript-Moloch wurde erstellt.&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==JavaScript-Code auslagern==&lt;br /&gt;
&lt;br /&gt;
Man sollte i. Allg. vermeiden, Javascript-Code direkt in eine HTML-Seite einzufügen.&lt;br /&gt;
Diese Verknüpfung von [[View]] und [[Control]] bringt nur Nachteile mit sich: &lt;br /&gt;
* Der Code wird unübersichtlicher, da zwei unterschiedliche Sprachen gemischt werden ([[Impedance Mismatch]]).&lt;br /&gt;
* Der JavaScript-Code kann nicht in mehreren HTML-Dateien eingesetzt werden ([[Don&#039;t Repeat Yourself]]).&lt;br /&gt;
* Die Ladezeiten der einzelnen Seiten werden länger, wenn derselbe JavaScript-Code in unterschiedlichen Seinten eingebaut ist und für jede dieser Seiten erneut geladen werden muss.&lt;br /&gt;
&lt;br /&gt;
Aus diesen Gründen sollte man den JavaScript-Code in eigene Dateien auslagern:&lt;br /&gt;
&lt;br /&gt;
# Rechtsklick auf Ordner &amp;lt;code&amp;gt;WebContent&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Neu&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Ordner&amp;lt;/code&amp;gt; → Ordnername: &amp;lt;code&amp;gt;js&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
# Rechtsklick auf Ordner &amp;lt;code&amp;gt;js&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Neu&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Datei&amp;lt;/code&amp;gt; → Dateiname: &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Inhalt der Datei &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt;===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;use strict&amp;quot;; /* Warne vor unsauberem JavaScript-Code! */&lt;br /&gt;
&lt;br /&gt;
function init()&lt;br /&gt;
{&lt;br /&gt;
  // Erzeugung und Initialisierung der Bühne (Canvas)&lt;br /&gt;
  var l_canvas = document.getElementById(&amp;quot;d_canvas&amp;quot;); &lt;br /&gt;
&lt;br /&gt;
  l_canvas.width  = 300;&lt;br /&gt;
  l_canvas.height =  27;&lt;br /&gt;
&lt;br /&gt;
  // Textausgabe (auf der Bühne)&lt;br /&gt;
  var l_context = l_canvas.getContext(&amp;quot;2d&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  l_context.font = &amp;quot;bold 20px &#039;Times New Roman&#039;, Times, serif&amp;quot;;&lt;br /&gt;
  l_context.fillText(&amp;quot;Hallo Welt!&amp;quot;, 5, 20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Geänderter Inhalt der Datei &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt;===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Titel der HTML-Seite; wird i. Allg. im Browser im Reiter angezeigt --&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;HTML5-Tutorium: Canvas: Hello World 01&amp;lt;/title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Als HTML-Encoding sollte man stets UTF-8 verwenden. --&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Korrektes Skalieren der Seite auf einem mobilen Endgerät --&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0, user-scalable=yes&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Laden aller JavaScript-Dateien --&amp;gt;&lt;br /&gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;js/main.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;body onload=&amp;quot;init()&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Die Bühne (Canvas) --&amp;gt;&lt;br /&gt;
    &amp;lt;canvas id=&amp;quot;d_canvas&amp;quot;&amp;gt;&lt;br /&gt;
      Ihr Browser unterstützt HTML5 leider nicht!&lt;br /&gt;
    &amp;lt;/canvas&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Tipp====&lt;br /&gt;
Benutzen Sie am Besten die Code-Vervollständigung (&amp;lt;code&amp;gt;Strg-Leerzeichen&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;Ctrl-Space&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Beispiel: &lt;br /&gt;
# Klicken Sie testweise im Editor-Fenster der Datei &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt; in die leere Zeile 5 der Funktion &amp;lt;code&amp;gt;init&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Drücken Sie &amp;lt;code&amp;gt;Strg-Leerzeichen&amp;lt;/code&amp;gt; und wählen Sie z.B. &amp;lt;code&amp;gt;l_canvas&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Geben Sie einen Punkt (&amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt;) ein und drücken Sie erneut &amp;lt;code&amp;gt;Strg-Leerzeichen&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Löschen Sie den eben erfassten Inhalt wieder. (Ihre Datei &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt; sollte ja schon fertiggestellt gewesen sein.)&lt;br /&gt;
&lt;br /&gt;
==Projekt testen==&lt;br /&gt;
&lt;br /&gt;
Testen Sie Ihr Projekt wieder, indem Sie es im Firefox öffen.&lt;br /&gt;
&lt;br /&gt;
Häufig ist der JavaScript-Code bei den ersten Tests fehlerhaft. In diesen Fällen hilft einem&lt;br /&gt;
die JavaScript-Konsole, die z.B. über das Firefox-Plugin [https://addons.mozilla.org/de/firefox/addon/firebug/ Firebug] zugänglich ist, häufig weiter.&lt;br /&gt;
&lt;br /&gt;
Fügen Sie folgenden Code am Ende des Rumpfes der &amp;lt;code&amp;gt;init&amp;lt;/code&amp;gt;-Funktion ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  console.log(  &amp;quot;Canvas wurde erstellt: &amp;quot; &lt;br /&gt;
              + l_canvas.width + &amp;quot;*&amp;quot; + l_canvas.height + &amp;quot; Pixel.&amp;quot;&lt;br /&gt;
             );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun die Anwendung erneut im Firefox ausführen, sehen Sie zunächst keine Veränderung.&lt;br /&gt;
&lt;br /&gt;
Überprüfen Sie, ob Firebug im Firefox aktiviert wurde (Drop-Down-Menü beim Icon mit dem Bug (= Käfer) in der rechten oberen Ecke von Firefox).&lt;br /&gt;
&lt;br /&gt;
Öffnen Sie nun das Firebug-Fenster (Icon mit dem Bug) und laden Sie die JavaScript-Anwendung erneut (Reload im Firefox).&lt;br /&gt;
&lt;br /&gt;
Nun sollten Sie im Konsolen-Fenster von Firebug einen Kommentar lesen können.&lt;br /&gt;
&lt;br /&gt;
Wenn alle Tests erfolgreich verlaufen sind, ist es sinnvoll, die&lt;br /&gt;
Konsolenausgaben mittels &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt;  oder &amp;lt;code&amp;gt;/* ... */&amp;lt;/code&amp;gt; auszukommentieren.&lt;br /&gt;
&lt;br /&gt;
==Projekt im Repository sichern==&lt;br /&gt;
&lt;br /&gt;
Auch das Endergebnis des Projektes sollte im Repository gespeichert werden:&lt;br /&gt;
&lt;br /&gt;
# Im Projektexplorer: Rechtsklick auf &amp;lt;code&amp;gt;HelloWorldCanvas01&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Team&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Commit&amp;lt;/code&amp;gt;&lt;br /&gt;
# Enter a comment for the commit operation: &amp;lt;code&amp;gt;main.js wurde erstellt, zur Auslagerung des JS-Codes aus hallo.html.&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Repostitory begutachten==&lt;br /&gt;
&lt;br /&gt;
Nun können Sie den Inhalt in Ihrem Repository betrachten.&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Perspektive öffnen&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Andere&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SVN Repository Exploring&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
# Im Dateibaum (linkes Fenster) &amp;lt;code&amp;gt;https://praktikum.multimedia.hs-augsburg.de/svn/ACCOUNT&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;mmprog&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;tutorium&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;HelloWorldCanvas01&amp;lt;/code&amp;gt; aufklappen&lt;br /&gt;
&lt;br /&gt;
Hier sehen Sie zunächst den Inhalt des von Ihnen gespeicherten Projektes.&lt;br /&gt;
Das Repository kann aber noch mehr. Sie können sich alle gespeicherten Versionen Ihres Projektes ansehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Rechtsklick auf &amp;lt;code&amp;gt;HelloWorldCanvas01&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;Show History&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun sehen Sie im Protokoll-Fester die verschiedenen Versionen des Projektes, mit Revisionsnummer, Author (ein Repository kann von mehreren Autoren gelichzeitig benutzt werden), sowie die von Ihnen eingegebenen Kommentare.&lt;br /&gt;
&lt;br /&gt;
Als letztes sollten Sie sich die Entwichlung der Datei &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; einmal näher ansehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Im Dateibaum &amp;lt;code&amp;gt;WebContent&amp;lt;/code&amp;gt; aufklappen → Rechtsklick auf &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Show Resion Graph&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Hier sehen Sie, dass es von dieser Datei zwei Versionen gibt. Diese können wir auch miteinander vergleichen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;6&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Im Dateibaum Rechtsklick auf &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Compare&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Vergleich der beiden Versionen erkennt mann, dass der JavaScript-Code durch einen Zugriff auf die Datei&lt;br /&gt;
&amp;lt;code&amp;gt;js/main.js&amp;lt;/code&amp;gt; ersetzt wurde.&lt;br /&gt;
&lt;br /&gt;
Kehren Sie nun in die normale Arbeitsumgebung zurück:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;7&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; In der Icon-Leiste oben rechts auf das Icon der Arbeitsumgebung (Perspektive) &amp;lt;code&amp;gt;Web&amp;lt;/code&amp;gt; klicken.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Neben den Icon &amp;lt;code&amp;gt;Web&amp;lt;/code&amp;gt; finden Sie jetzt auch ein Icon für die Arbeitsumgebung &amp;lt;code&amp;gt;SVN Repository Exploring&amp;lt;/code&amp;gt;,&lt;br /&gt;
damit Sie künftig schneller in diese Perspektive wechseln können.&lt;br /&gt;
&lt;br /&gt;
=Quellen=&lt;br /&gt;
# {{Quelle|Kowarschick, W.: Multimedia-Programmierung}}&lt;br /&gt;
# [http://blog.webagesolutions.com/archives/419 Coding HTML5 Pages Using Eclipse]&lt;br /&gt;
# [http://www.html5canvastutorials.com/tutorials/html5-canvas-text/ HTML5 Canvas Text Tutorial]&lt;br /&gt;
&lt;br /&gt;
=Siehe auch=&lt;br /&gt;
# {{SieheAuch|Pilgrim (2011)}}&lt;br /&gt;
# [http://www.w3schools.com/html5/ w3schools.com: HTML5 Tutorial]&lt;br /&gt;
# [http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html HTML Living Standard — The canvas element]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Kategorie: HTML5-Tutorium: Canvas: Hello World]][[Kategorie: HTML5-Beispiel]][[Kategorie:Kapitel:Multimedia-Programmierung:Beispiele]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rayza</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=HTML5-Tutorium:_Canvas:_Hello_World_01&amp;diff=23805</id>
		<title>HTML5-Tutorium: Canvas: Hello World 01</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=HTML5-Tutorium:_Canvas:_Hello_World_01&amp;diff=23805"/>
		<updated>2012-10-11T15:24:32Z</updated>

		<summary type="html">&lt;p&gt;Rayza: /* Anmerkungen zum Test-Sever */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{HTML5-Tutorium:Canvas:HelloWorld:Menü}}&lt;br /&gt;
&#039;&#039;&#039;Ergebnis&#039;&#039;&#039;: [http://glossar.hs-augsburg.de/beispiel/tutorium/html5_canvas/hello_world/html5_canvas_hello_world_01/WebContent/hallo.html &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt;]&lt;br /&gt;
([http://glossar.hs-augsburg.de/beispiel/tutorium/html5_canvas/hello_world/html5_canvas_hello_world_01 SVN-Repository])&lt;br /&gt;
=HTML5: Hello-Word-Anwendung mit Canvas=&lt;br /&gt;
&lt;br /&gt;
Zur Erstellung der Anwendung wird [[Installation von Eclipse (Windows)|Eclipse]] eingesetzt.&lt;br /&gt;
Alle Eclipse-Versionen ab Helios eignen sich zur Erstellung von HTML5-Web-Anwendungen.&lt;br /&gt;
&lt;br /&gt;
Zum Testen wird der Browser [[Firefox]] mit dem [https://addons.mozilla.org/de/firefox/addon/firebug/ Firebug-Plugin] verendet.&lt;br /&gt;
&lt;br /&gt;
Unter Eclipse kann der Testbrowser folgendermaßen festgelegt werden:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Benutzervorgaben&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Allgemein&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;Webbrowser&amp;lt;/code&amp;gt; selektieren → &amp;lt;code&amp;gt;Verwende externen Web-Browser&amp;lt;/code&amp;gt; selektieren → Häckchen vor &amp;lt;code&amp;gt;Firefox&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Eclipse vorbereiten==&lt;br /&gt;
(Dieser Punkt kann übersprungen werden, wenn man den Workspace http://glossar.hs-augsburg.de/svn/eclipse/workspace-mmprog heruntergeladen hat und in Eclipse als akutellen Workspace verwendet.)&lt;br /&gt;
&lt;br /&gt;
Zunächst sollte man die „richtige“ Oberfläche auswählen:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Perspektive öffnen&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Web&amp;lt;/code&amp;gt; (evtl. unter dem Punkt &amp;lt;code&amp;gt;Andere...&amp;lt;/code&amp;gt; zu finden; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beachten Sie, es gibt zwei Web-Perspektiven. Wählen Sie diejenige, die die Weltkugel mit Stift als Icon hat.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Außerdem muss der Character Code korrekt eingestellt werden:&lt;br /&gt;
&lt;br /&gt;
Juno:&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Benutzervorgaben&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Allgemein&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;Arbeitsbereich&amp;lt;/code&amp;gt; selektieren&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;code&amp;gt;Sonstige&amp;lt;/code&amp;gt; selektieren → &amp;lt;code&amp;gt;UTF-8&amp;lt;/code&amp;gt; im Drop-Down-Menü selektieren&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Indigo:&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Benutzervorgaben&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Web&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;HTML-Files&amp;lt;/code&amp;gt; selektieren&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Codierung: &amp;lt;code&amp;gt;ISO Latin-1&amp;lt;/code&amp;gt; durch &amp;lt;code&amp;gt;ISO 10646/Unicode(UTF-8)&amp;lt;/code&amp;gt; ersetzen&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Musterlösung herunterladen==&lt;br /&gt;
(Dieser Punkt kann übersprungen werden, wenn man den Workspace http://glossar.hs-augsburg.de/svn/eclipse/workspace_mmprog_x64.zip heruntergeladen hat und in Eclipse als akutellen Workspace verwendet.)&lt;br /&gt;
&lt;br /&gt;
Laden Sie die Musterlösung &amp;lt;code&amp;gt;http://glossar.hs-augsburg.de/beispiel/tutorium/html5_canvas/hello_world/html5_canvas_hello_world_01/&amp;lt;/code&amp;gt;&lt;br /&gt;
in Eclipse:&lt;br /&gt;
&lt;br /&gt;
# Klick auf Reiter &amp;lt;code&amp;gt;Datei&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Importieren&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SVN&amp;lt;/code&amp;gt; aufklappen → Klick auf &amp;lt;code&amp;gt;Checkout Projects from SVN&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt;&lt;br /&gt;
# Entweder&lt;br /&gt;
#* &amp;lt;code&amp;gt;Use existing repository location:&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;http://glossar.hs-augsburg.de/beispiel/tutorium&amp;lt;/code&amp;gt; selektieren (falls vorhanden)&lt;br /&gt;
#* &amp;lt;code&amp;gt;Create a new repsotiory location&amp;lt;/code&amp;gt; wählen → &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; → Url: &amp;lt;code&amp;gt;http://glossar.hs-augsburg.de/beispiel/tutorium&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt;&lt;br /&gt;
# Nachden der Dateibaum aufgegangen ist:  &amp;lt;code&amp;gt;html5_canvas&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;hello_world&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;html5_canvas_hello_worl_01&amp;lt;/code&amp;gt; selektieren &lt;br /&gt;
# &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Neues Projekt anlegen==&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Datei&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Neu&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Statisches Web-Projekt&amp;lt;/code&amp;gt;&lt;br /&gt;
# Project name: &amp;lt;code&amp;gt;HelloWorldCanvas01&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Speichern Sie nun Ihr Projekt in Ihrem Repository:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Projektexplorer&amp;lt;/code&amp;gt;: Rechtsklick auf &amp;lt;code&amp;gt;HelloWorldCanvas01&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Team&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Projekt gemeinsam nutzen&amp;lt;/code&amp;gt; &lt;br /&gt;
# &amp;lt;code&amp;gt;SVN&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;Create a new repository location&amp;lt;/code&amp;gt; selektieren&lt;br /&gt;
# Url: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://praktikum.multimedia.hs-augsburg.de/svn/ACCOUNT&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; (&#039;&#039;&#039;&amp;lt;code&amp;gt;ACCOUNT&amp;lt;/code&amp;gt; durch eigenen RZ-Account ersetzen&#039;&#039;&#039;) → &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; &lt;br /&gt;
# Use specified folder name: &amp;lt;code&amp;gt;mmprog/tutorium/HelloWorldCanvas01&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
# Beim ersten Mal: Klick auf &amp;lt;code&amp;gt;Accept permanently&amp;lt;/code&amp;gt;&lt;br /&gt;
# Beim ersten Mal: Passwort eingeben → Häckchen bei &amp;lt;code&amp;gt;Passwort merken&amp;lt;/code&amp;gt; (sonst muss man künftig für jede hozuladende Datei das Passwort eingeben) → &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Eventuell&#039;&#039;&#039;: Häckchen bei &amp;lt;code&amp;gt;Entscheidung merken&amp;lt;/code&amp;gt; → &#039;&#039;&#039;&amp;lt;code&amp;gt;Nein&amp;lt;/code&amp;gt;&#039;&#039;&#039; (Nicht &amp;lt;code&amp;gt;Ja&amp;lt;/code&amp;gt;!!!!)&lt;br /&gt;
&lt;br /&gt;
==Projekt im Repository sichern==&lt;br /&gt;
&lt;br /&gt;
Das neu angelegte Projekt wird gleich mal im Repository gesichert:&lt;br /&gt;
&lt;br /&gt;
# Im Projektexplorer: Rechtsklick auf &amp;lt;code&amp;gt;HelloWorldCanvas01&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Team&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Commit&amp;lt;/code&amp;gt;&lt;br /&gt;
# Enter a comment for the commit operation: &amp;lt;code&amp;gt;Neues Projekt angelegt.&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Neue HTML-Datei anlegen==&lt;br /&gt;
&lt;br /&gt;
# Im Projektexplorer (linkes Fenster): &amp;lt;code&amp;gt;HelloWorldCanvas01&amp;lt;/code&amp;gt; aufklappen&lt;br /&gt;
# Rechtsklick auf Ordner &amp;lt;code&amp;gt;WebContent&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Neu&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;HTML file&amp;lt;/code&amp;gt;&lt;br /&gt;
# Dateiname: &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; → Templates: &amp;lt;code&amp;gt;New HTML File (5)&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==HTML-Datei bearbeiten==&lt;br /&gt;
&lt;br /&gt;
Erfassen Sie folgenden Code in der HTML-Seite:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Titel der HTML-Seite; wird i. Allg. im Browser im Reiter angezeigt --&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;HTML5-Tutorium: Canvas: Hello World 01&amp;lt;/title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Als HTML-Encoding sollte man stets UTF-8 verwenden. --&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Korrektes Skalieren der Seite auf einem mobilen Endgerät --&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0, user-scalable=yes&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;!-- Zeichnen von &amp;quot;Hallo Welt!&amp;quot; auf der Bühne&lt;br /&gt;
    	  (nachdem die Seite geladen wurde). --&amp;gt;&lt;br /&gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
      function init()&lt;br /&gt;
      {&lt;br /&gt;
        var l_canvas = document.getElementById(&amp;quot;d_canvas&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
        l_canvas.width  = 300;&lt;br /&gt;
        l_canvas.height =  27;&lt;br /&gt;
 &lt;br /&gt;
        var l_context = l_canvas.getContext(&amp;quot;2d&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
        l_context.font = &amp;quot;bold 20px &#039;Times New Roman&#039;, Times, serif&amp;quot;;&lt;br /&gt;
        l_context.fillText(&amp;quot;Hallo Welt!&amp;quot;, 5, 20);&lt;br /&gt;
      }&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;body onload=&amp;quot;init()&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Die Bühne (Canvas) --&amp;gt;&lt;br /&gt;
    &amp;lt;canvas id=&amp;quot;d_canvas&amp;quot;&amp;gt;&lt;br /&gt;
      Ihr Browser unterstützt HTML5 leider nicht!&lt;br /&gt;
    &amp;lt;/canvas&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Anmerkung 1====&lt;br /&gt;
Auf das Canvas-Element wird ausschließlich von [[JavaScript]] aus zugegriffen.&lt;br /&gt;
Sollte ein Browser dieses Element nicht unterstützen, so wird der alternative&lt;br /&gt;
HTML-Code innerhalb des Canvas-Element gerendert und ausgegeben. Hier&lt;br /&gt;
könnte beispielsweise eine [[Flash]]-Anwendung ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
====Anmerkung 2====&lt;br /&gt;
Die Meta-Anweisung&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0, user-scalable=yes&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
dient dazu, dass der Inhalt der Seite auf einem Smartphone in der richtigen Größe angezeigt wird.&lt;br /&gt;
&lt;br /&gt;
====Anmerkung 3====&lt;br /&gt;
Es gibt auch einen WYSIWYG-Editor, den Sie folgendermaßen öffnen können:&lt;br /&gt;
# Rechtklick in das Editor-Fenster → &amp;lt;code&amp;gt;Öffnen mit&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Web Page Editor&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Allerdings unterstützt dieser WYSIWYG-Editor die HTML5-Zeichenbühne [[Canvas]] nicht und ist daher für dieses Tutorium nicht sonderlich nützlich.&lt;br /&gt;
&lt;br /&gt;
==HTML-Seite testen==&lt;br /&gt;
# &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; speichern: &amp;lt;code&amp;gt;Strg-s&amp;lt;/code&amp;gt;&lt;br /&gt;
# Wichtig: &#039;&#039;&#039;Im &amp;lt;code&amp;gt;Projektexplorer&amp;lt;/code&amp;gt; jeweils vor dem Server-Aufruf &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; selektieren&#039;&#039;&#039;, sonst erhalten Sie eine Fehlermeldung.&lt;br /&gt;
# In der Icon-Zeile: Klick auf Icon „grüner Kreis mit weißen Dreieck“ →  Serverziel auswählen: &amp;lt;code&amp;gt;JavaScript Web Application&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
===Anmerkungen zum Firefox auf den Rechnern des MM-Labors===&lt;br /&gt;
&lt;br /&gt;
Defaultmäßig kann der Firefox im MM-Labor nicht auf lokale Webserver (wie z.B. den Aptana-Server) zugreifen. &lt;br /&gt;
&lt;br /&gt;
Grund: In diesem Firefox ist eine unpassende Proxy-Konfiguration voreingestellt. &lt;br /&gt;
Diese Einstellung verhindert den Zugriff auf localhost. &lt;br /&gt;
&lt;br /&gt;
Lösung des Problems:&lt;br /&gt;
# Firefox starten&lt;br /&gt;
# Einstellungen → Erweitert → Netzwerk → Einstellungen  &lt;br /&gt;
# Haken von &amp;lt;code&amp;gt;Proxy-Einstellungen des Systems verwenden&amp;lt;/code&amp;gt; auf &amp;lt;code&amp;gt;Manuelle Proxy-Konfiguration&amp;lt;/code&amp;gt; setzen und als Ausnahme &amp;lt;code&amp;gt;localhost und 127.0.0.1&amp;lt;/code&amp;gt; einstellen. &lt;br /&gt;
&lt;br /&gt;
===Anmerkungen zum Test-Sever===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solange Sie nur HTML-Seiten, die JavaScript-Code enthalten, testen wollen, ist das Serverziel &amp;lt;code&amp;gt;JavaScript Web Application&amp;lt;/code&amp;gt; die beste Wahl.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sie können allerdings auch andere Web-Server verwenden:&lt;br /&gt;
&lt;br /&gt;
* Den HTTP-Preview-Server, der in Eclipse integriert ist (probieren Sie diesen ruhig einmal an Stelle des JavaScript-Web-Application-Servers aus)&lt;br /&gt;
* Tomcat (hier muss [[Installation von Tomcat|Tomcat]] installiert und mit [[Installation von Eclipse#Integration_von_Tomcat|Eclipse verknüpft]] werden)&lt;br /&gt;
* Apache (hier muss [[Installation von Apache|Apache]] installiert und mit Eclipse verknüpft werden; siehe [[HTML5-Tutorium: Canvas: Hello World 02#Optional:_Apache_als_Test-Server|Teil 2 des Tutoriums]])&lt;br /&gt;
* etc.&lt;br /&gt;
&lt;br /&gt;
In allen diesen Fällen müssten Sie &amp;lt;code&amp;gt;Run on Server&amp;lt;/code&amp;gt; an Stelle von&lt;br /&gt;
&amp;lt;code&amp;gt;JavaScript Web Application&amp;lt;/code&amp;gt; auswählen:&lt;br /&gt;
# In der Icon-Zeile: Klick auf Icon „grüner Kreis mit weißen Dreieck“ →  Serverziel auswählen: &amp;lt;code&amp;gt;Run on Server&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Den HTTP-Preview-Server wählen Sie folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;3&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;code&amp;gt;HTTP Preview&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beachten Sie, dass beim HTTP-Preview-Server mit jedem Klick des Debug-Icons (grüner Kreis mit weißen Dreieck) ein neues Browserfenster in Eclipse geöffnet wird.&lt;br /&gt;
Daher ist es sinnvoller, im bestehenden Browserfenster das Reload-Icon (zwei kreiförmig angeordnete Pfeile) anzuklicken, um Änderungen an einer der &lt;br /&gt;
Web-Dateien sichtbar zu machen.&lt;br /&gt;
&lt;br /&gt;
Für komplexere Web-Seiten mit [[PHP]]-Code, [[JSP]]-Code etc. muss man einen echten Server (wie [[Apache]] oder [[Tomcat]]) installieren und&lt;br /&gt;
mit Eclipse verknüpfen.&lt;br /&gt;
&lt;br /&gt;
Wenn der von Ihnen gewählte Test-Web-Server Probleme hat, die&lt;br /&gt;
neuen HTML-Seiten darzustellen, kann es notwendig sein, den Server neu zu starten:&lt;br /&gt;
&lt;br /&gt;
# Reiter &amp;lt;code&amp;gt;Server&amp;lt;/code&amp;gt; im unteren Fenster selektieren&lt;br /&gt;
# Klick auf Icon „rotes Recheck“ (Server stoppen)&lt;br /&gt;
# Klick auf Icon „grüner Kreis mit weißem Dreieck“ (Server starten)&lt;br /&gt;
&lt;br /&gt;
==Projekt im Repository sichern==&lt;br /&gt;
&lt;br /&gt;
Jedes funktionierende Zwischenergebnis eines Projektes sollte im Repository gespeichert werden:&lt;br /&gt;
&lt;br /&gt;
# Im Projektexplorer: Rechtsklick auf &amp;lt;code&amp;gt;HelloWorldCanvas01&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Team&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Commit&amp;lt;/code&amp;gt;&lt;br /&gt;
# Enter a comment for the commit operation: &amp;lt;code&amp;gt;hallo.html, ein HTML5-JavaScript-Moloch wurde erstellt.&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==JavaScript-Code auslagern==&lt;br /&gt;
&lt;br /&gt;
Man sollte i. Allg. vermeiden, Javascript-Code direkt in eine HTML-Seite einzufügen.&lt;br /&gt;
Diese Verknüpfung von [[View]] und [[Control]] bringt nur Nachteile mit sich: &lt;br /&gt;
* Der Code wird unübersichtlicher, da zwei unterschiedliche Sprachen gemischt werden ([[Impedance Mismatch]]).&lt;br /&gt;
* Der JavaScript-Code kann nicht in mehreren HTML-Dateien eingesetzt werden ([[Don&#039;t Repeat Yourself]]).&lt;br /&gt;
* Die Ladezeiten der einzelnen Seiten werden länger, wenn derselbe JavaScript-Code in unterschiedlichen Seinten eingebaut ist und für jede dieser Seiten erneut geladen werden muss.&lt;br /&gt;
&lt;br /&gt;
Aus diesen Gründen sollte man den JavaScript-Code in eigene Dateien auslagern:&lt;br /&gt;
&lt;br /&gt;
# Rechtsklick auf Ordner &amp;lt;code&amp;gt;WebContent&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Neu&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Ordner&amp;lt;/code&amp;gt; → Ordnername: &amp;lt;code&amp;gt;js&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
# Rechtsklick auf Ordner &amp;lt;code&amp;gt;js&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Neu&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Datei&amp;lt;/code&amp;gt; → Dateiname: &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Inhalt der Datei &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt;===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;use strict&amp;quot;; /* Warne vor unsauberem JavaScript-Code! */&lt;br /&gt;
&lt;br /&gt;
function init()&lt;br /&gt;
{&lt;br /&gt;
  // Erzeugung und Initialisierung der Bühne (Canvas)&lt;br /&gt;
  var l_canvas = document.getElementById(&amp;quot;d_canvas&amp;quot;); &lt;br /&gt;
&lt;br /&gt;
  l_canvas.width  = 300;&lt;br /&gt;
  l_canvas.height =  27;&lt;br /&gt;
&lt;br /&gt;
  // Textausgabe (auf der Bühne)&lt;br /&gt;
  var l_context = l_canvas.getContext(&amp;quot;2d&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  l_context.font = &amp;quot;bold 20px &#039;Times New Roman&#039;, Times, serif&amp;quot;;&lt;br /&gt;
  l_context.fillText(&amp;quot;Hallo Welt!&amp;quot;, 5, 20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Geänderter Inhalt der Datei &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt;===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Titel der HTML-Seite; wird i. Allg. im Browser im Reiter angezeigt --&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;HTML5-Tutorium: Canvas: Hello World 01&amp;lt;/title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Als HTML-Encoding sollte man stets UTF-8 verwenden. --&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Korrektes Skalieren der Seite auf einem mobilen Endgerät --&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0, user-scalable=yes&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Laden aller JavaScript-Dateien --&amp;gt;&lt;br /&gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;js/main.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;body onload=&amp;quot;init()&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Die Bühne (Canvas) --&amp;gt;&lt;br /&gt;
    &amp;lt;canvas id=&amp;quot;d_canvas&amp;quot;&amp;gt;&lt;br /&gt;
      Ihr Browser unterstützt HTML5 leider nicht!&lt;br /&gt;
    &amp;lt;/canvas&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Tipp====&lt;br /&gt;
Benutzen Sie am Besten die Code-Vervollständigung (&amp;lt;code&amp;gt;Strg-Leerzeichen&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;Crtl-Space&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Beispiel: &lt;br /&gt;
# Klicken Sie testweise im Editor-Fenster der Datei &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt; in die leere Zeile 5 der Funktion &amp;lt;code&amp;gt;init&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Drücken Sie &amp;lt;code&amp;gt;Strg-Leerzeichen&amp;lt;/code&amp;gt; und wählen Sie z.B. &amp;lt;code&amp;gt;l_canvas&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Geben Sie einen Punkt (&amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt;) ein und drücken Sie erneut &amp;lt;code&amp;gt;Strg-Leerzeichen&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Löschen Sie den eben erfassten Inhalt wieder. (Ihre Datei &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt; sollte ja schon fertiggestellt gewesen sein.)&lt;br /&gt;
&lt;br /&gt;
==Projekt testen==&lt;br /&gt;
&lt;br /&gt;
Testen Sie Ihr Projekt wieder, indem Sie es im Firefox öffen.&lt;br /&gt;
&lt;br /&gt;
Häufig ist der JavaScript-Code bei den ersten Tests fehlerhaft. In diesen Fällen hilft einem&lt;br /&gt;
die JavaScript-Konsole, die z.B. über das Firefox-Plugin [https://addons.mozilla.org/de/firefox/addon/firebug/ Firebug] zugänglich ist, häufig weiter.&lt;br /&gt;
&lt;br /&gt;
Fügen Sie folgenden Code am Ende des Rumpfes der &amp;lt;code&amp;gt;init&amp;lt;/code&amp;gt;-Funktion ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  console.log(  &amp;quot;Canvas wurde erstellt: &amp;quot; &lt;br /&gt;
              + l_canvas.width + &amp;quot;*&amp;quot; + l_canvas.height + &amp;quot; Pixel.&amp;quot;&lt;br /&gt;
             );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun die Anwendung erneut im Firefox ausführen, sehen Sie zunächst keine Veränderung.&lt;br /&gt;
&lt;br /&gt;
Überprüfen Sie, ob Firebug im Firefox aktiviert wurde (Drop-Down-Menü beim Icon mit dem Bug (= Käfer) in der rechten oberen Ecke von Firefox).&lt;br /&gt;
&lt;br /&gt;
Öffnen Sie nun das Firebug-Fenster (Icon mit dem Bug) und laden Sie die JavaScript-Anwendung erneut (Reload im Firefox).&lt;br /&gt;
&lt;br /&gt;
Nun sollten Sie im Konsolen-Fenster von Firebug einen Kommentar lesen können.&lt;br /&gt;
&lt;br /&gt;
Wenn alle Tests erfolgreich verlaufen sind, ist es sinnvoll, die&lt;br /&gt;
Konsolenausgaben mittels &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt;  oder &amp;lt;code&amp;gt;/* ... */&amp;lt;/code&amp;gt; auszukommentieren.&lt;br /&gt;
&lt;br /&gt;
==Projekt im Repository sichern==&lt;br /&gt;
&lt;br /&gt;
Auch das Endergebnis des Projektes sollte im Repository gespeichert werden:&lt;br /&gt;
&lt;br /&gt;
# Im Projektexplorer: Rechtsklick auf &amp;lt;code&amp;gt;HelloWorldCanvas01&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Team&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Commit&amp;lt;/code&amp;gt;&lt;br /&gt;
# Enter a comment for the commit operation: &amp;lt;code&amp;gt;main.js wurde erstellt, zur Auslagerung des JS-Codes aus hallo.html.&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Repostitory begutachten==&lt;br /&gt;
&lt;br /&gt;
Nun können Sie den Inhalt in Ihrem Repository betrachten.&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Perspektive öffnen&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Andere&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SVN Repository Exploring&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
# Im Dateibaum (linkes Fenster) &amp;lt;code&amp;gt;https://praktikum.multimedia.hs-augsburg.de/svn/ACCOUNT&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;mmprog&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;tutorium&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;HelloWorldCanvas01&amp;lt;/code&amp;gt; aufklappen&lt;br /&gt;
&lt;br /&gt;
Hier sehen Sie zunächst den Inhalt des von Ihnen gespeicherten Projektes.&lt;br /&gt;
Das Repository kann aber noch mehr. Sie können sich alle gespeicherten Versionen Ihres Projektes ansehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Rechtsklick auf &amp;lt;code&amp;gt;HelloWorldCanvas01&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;Show History&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun sehen Sie im Protokoll-Fester die verschiedenen Versionen des Projektes, mit Revisionsnummer, Author (ein Repository kann von mehreren Autoren gelichzeitig benutzt werden), sowie die von Ihnen eingegebenen Kommentare.&lt;br /&gt;
&lt;br /&gt;
Als letztes sollten Sie sich die Entwichlung der Datei &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; einmal näher ansehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Im Dateibaum &amp;lt;code&amp;gt;WebContent&amp;lt;/code&amp;gt; aufklappen → Rechtsklick auf &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Show Resion Graph&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Hier sehen Sie, dass es von dieser Datei zwei Versionen gibt. Diese können wir auch miteinander vergleichen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;6&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Im Dateibaum Rechtsklick auf &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Compare&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Vergleich der beiden Versionen erkennt mann, dass der JavaScript-Code durch einen Zugriff auf die Datei&lt;br /&gt;
&amp;lt;code&amp;gt;js/main.js&amp;lt;/code&amp;gt; ersetzt wurde.&lt;br /&gt;
&lt;br /&gt;
Kehren Sie nun in die normale Arbeitsumgebung zurück:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;7&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; In der Icon-Leiste oben rechts auf das Icon der Arbeitsumgebung (Perspektive) &amp;lt;code&amp;gt;Web&amp;lt;/code&amp;gt; klicken.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Neben den Icon &amp;lt;code&amp;gt;Web&amp;lt;/code&amp;gt; finden Sie jetzt auch ein Icon für die Arbeitsumgebung &amp;lt;code&amp;gt;SVN Repository Exploring&amp;lt;/code&amp;gt;,&lt;br /&gt;
damit Sie künftig schneller in diese Perspektive wechseln können.&lt;br /&gt;
&lt;br /&gt;
=Quellen=&lt;br /&gt;
# {{Quelle|Kowarschick, W.: Multimedia-Programmierung}}&lt;br /&gt;
# [http://blog.webagesolutions.com/archives/419 Coding HTML5 Pages Using Eclipse]&lt;br /&gt;
# [http://www.html5canvastutorials.com/tutorials/html5-canvas-text/ HTML5 Canvas Text Tutorial]&lt;br /&gt;
&lt;br /&gt;
=Siehe auch=&lt;br /&gt;
# {{SieheAuch|Pilgrim (2011)}}&lt;br /&gt;
# [http://www.w3schools.com/html5/ w3schools.com: HTML5 Tutorial]&lt;br /&gt;
# [http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html HTML Living Standard — The canvas element]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Kategorie: HTML5-Tutorium: Canvas: Hello World]][[Kategorie: HTML5-Beispiel]][[Kategorie:Kapitel:Multimedia-Programmierung:Beispiele]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rayza</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=HTML5-Tutorium:_Canvas:_Hello_World_01&amp;diff=23804</id>
		<title>HTML5-Tutorium: Canvas: Hello World 01</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=HTML5-Tutorium:_Canvas:_Hello_World_01&amp;diff=23804"/>
		<updated>2012-10-11T15:19:34Z</updated>

		<summary type="html">&lt;p&gt;Rayza: /* HTML-Seite testen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{HTML5-Tutorium:Canvas:HelloWorld:Menü}}&lt;br /&gt;
&#039;&#039;&#039;Ergebnis&#039;&#039;&#039;: [http://glossar.hs-augsburg.de/beispiel/tutorium/html5_canvas/hello_world/html5_canvas_hello_world_01/WebContent/hallo.html &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt;]&lt;br /&gt;
([http://glossar.hs-augsburg.de/beispiel/tutorium/html5_canvas/hello_world/html5_canvas_hello_world_01 SVN-Repository])&lt;br /&gt;
=HTML5: Hello-Word-Anwendung mit Canvas=&lt;br /&gt;
&lt;br /&gt;
Zur Erstellung der Anwendung wird [[Installation von Eclipse (Windows)|Eclipse]] eingesetzt.&lt;br /&gt;
Alle Eclipse-Versionen ab Helios eignen sich zur Erstellung von HTML5-Web-Anwendungen.&lt;br /&gt;
&lt;br /&gt;
Zum Testen wird der Browser [[Firefox]] mit dem [https://addons.mozilla.org/de/firefox/addon/firebug/ Firebug-Plugin] verendet.&lt;br /&gt;
&lt;br /&gt;
Unter Eclipse kann der Testbrowser folgendermaßen festgelegt werden:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Benutzervorgaben&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Allgemein&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;Webbrowser&amp;lt;/code&amp;gt; selektieren → &amp;lt;code&amp;gt;Verwende externen Web-Browser&amp;lt;/code&amp;gt; selektieren → Häckchen vor &amp;lt;code&amp;gt;Firefox&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Eclipse vorbereiten==&lt;br /&gt;
(Dieser Punkt kann übersprungen werden, wenn man den Workspace http://glossar.hs-augsburg.de/svn/eclipse/workspace-mmprog heruntergeladen hat und in Eclipse als akutellen Workspace verwendet.)&lt;br /&gt;
&lt;br /&gt;
Zunächst sollte man die „richtige“ Oberfläche auswählen:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Perspektive öffnen&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Web&amp;lt;/code&amp;gt; (evtl. unter dem Punkt &amp;lt;code&amp;gt;Andere...&amp;lt;/code&amp;gt; zu finden; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beachten Sie, es gibt zwei Web-Perspektiven. Wählen Sie diejenige, die die Weltkugel mit Stift als Icon hat.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Außerdem muss der Character Code korrekt eingestellt werden:&lt;br /&gt;
&lt;br /&gt;
Juno:&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Benutzervorgaben&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Allgemein&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;Arbeitsbereich&amp;lt;/code&amp;gt; selektieren&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;code&amp;gt;Sonstige&amp;lt;/code&amp;gt; selektieren → &amp;lt;code&amp;gt;UTF-8&amp;lt;/code&amp;gt; im Drop-Down-Menü selektieren&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Indigo:&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Benutzervorgaben&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Web&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;HTML-Files&amp;lt;/code&amp;gt; selektieren&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Codierung: &amp;lt;code&amp;gt;ISO Latin-1&amp;lt;/code&amp;gt; durch &amp;lt;code&amp;gt;ISO 10646/Unicode(UTF-8)&amp;lt;/code&amp;gt; ersetzen&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Musterlösung herunterladen==&lt;br /&gt;
(Dieser Punkt kann übersprungen werden, wenn man den Workspace http://glossar.hs-augsburg.de/svn/eclipse/workspace_mmprog_x64.zip heruntergeladen hat und in Eclipse als akutellen Workspace verwendet.)&lt;br /&gt;
&lt;br /&gt;
Laden Sie die Musterlösung &amp;lt;code&amp;gt;http://glossar.hs-augsburg.de/beispiel/tutorium/html5_canvas/hello_world/html5_canvas_hello_world_01/&amp;lt;/code&amp;gt;&lt;br /&gt;
in Eclipse:&lt;br /&gt;
&lt;br /&gt;
# Klick auf Reiter &amp;lt;code&amp;gt;Datei&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Importieren&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SVN&amp;lt;/code&amp;gt; aufklappen → Klick auf &amp;lt;code&amp;gt;Checkout Projects from SVN&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt;&lt;br /&gt;
# Entweder&lt;br /&gt;
#* &amp;lt;code&amp;gt;Use existing repository location:&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;http://glossar.hs-augsburg.de/beispiel/tutorium&amp;lt;/code&amp;gt; selektieren (falls vorhanden)&lt;br /&gt;
#* &amp;lt;code&amp;gt;Create a new repsotiory location&amp;lt;/code&amp;gt; wählen → &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; → Url: &amp;lt;code&amp;gt;http://glossar.hs-augsburg.de/beispiel/tutorium&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt;&lt;br /&gt;
# Nachden der Dateibaum aufgegangen ist:  &amp;lt;code&amp;gt;html5_canvas&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;hello_world&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;html5_canvas_hello_worl_01&amp;lt;/code&amp;gt; selektieren &lt;br /&gt;
# &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Neues Projekt anlegen==&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Datei&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Neu&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Statisches Web-Projekt&amp;lt;/code&amp;gt;&lt;br /&gt;
# Project name: &amp;lt;code&amp;gt;HelloWorldCanvas01&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Speichern Sie nun Ihr Projekt in Ihrem Repository:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Projektexplorer&amp;lt;/code&amp;gt;: Rechtsklick auf &amp;lt;code&amp;gt;HelloWorldCanvas01&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Team&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Projekt gemeinsam nutzen&amp;lt;/code&amp;gt; &lt;br /&gt;
# &amp;lt;code&amp;gt;SVN&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;Create a new repository location&amp;lt;/code&amp;gt; selektieren&lt;br /&gt;
# Url: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://praktikum.multimedia.hs-augsburg.de/svn/ACCOUNT&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; (&#039;&#039;&#039;&amp;lt;code&amp;gt;ACCOUNT&amp;lt;/code&amp;gt; durch eigenen RZ-Account ersetzen&#039;&#039;&#039;) → &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; &lt;br /&gt;
# Use specified folder name: &amp;lt;code&amp;gt;mmprog/tutorium/HelloWorldCanvas01&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
# Beim ersten Mal: Klick auf &amp;lt;code&amp;gt;Accept permanently&amp;lt;/code&amp;gt;&lt;br /&gt;
# Beim ersten Mal: Passwort eingeben → Häckchen bei &amp;lt;code&amp;gt;Passwort merken&amp;lt;/code&amp;gt; (sonst muss man künftig für jede hozuladende Datei das Passwort eingeben) → &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Eventuell&#039;&#039;&#039;: Häckchen bei &amp;lt;code&amp;gt;Entscheidung merken&amp;lt;/code&amp;gt; → &#039;&#039;&#039;&amp;lt;code&amp;gt;Nein&amp;lt;/code&amp;gt;&#039;&#039;&#039; (Nicht &amp;lt;code&amp;gt;Ja&amp;lt;/code&amp;gt;!!!!)&lt;br /&gt;
&lt;br /&gt;
==Projekt im Repository sichern==&lt;br /&gt;
&lt;br /&gt;
Das neu angelegte Projekt wird gleich mal im Repository gesichert:&lt;br /&gt;
&lt;br /&gt;
# Im Projektexplorer: Rechtsklick auf &amp;lt;code&amp;gt;HelloWorldCanvas01&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Team&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Commit&amp;lt;/code&amp;gt;&lt;br /&gt;
# Enter a comment for the commit operation: &amp;lt;code&amp;gt;Neues Projekt angelegt.&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Neue HTML-Datei anlegen==&lt;br /&gt;
&lt;br /&gt;
# Im Projektexplorer (linkes Fenster): &amp;lt;code&amp;gt;HelloWorldCanvas01&amp;lt;/code&amp;gt; aufklappen&lt;br /&gt;
# Rechtsklick auf Ordner &amp;lt;code&amp;gt;WebContent&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Neu&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;HTML file&amp;lt;/code&amp;gt;&lt;br /&gt;
# Dateiname: &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; → Templates: &amp;lt;code&amp;gt;New HTML File (5)&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==HTML-Datei bearbeiten==&lt;br /&gt;
&lt;br /&gt;
Erfassen Sie folgenden Code in der HTML-Seite:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Titel der HTML-Seite; wird i. Allg. im Browser im Reiter angezeigt --&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;HTML5-Tutorium: Canvas: Hello World 01&amp;lt;/title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Als HTML-Encoding sollte man stets UTF-8 verwenden. --&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Korrektes Skalieren der Seite auf einem mobilen Endgerät --&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0, user-scalable=yes&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;!-- Zeichnen von &amp;quot;Hallo Welt!&amp;quot; auf der Bühne&lt;br /&gt;
    	  (nachdem die Seite geladen wurde). --&amp;gt;&lt;br /&gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
      function init()&lt;br /&gt;
      {&lt;br /&gt;
        var l_canvas = document.getElementById(&amp;quot;d_canvas&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
        l_canvas.width  = 300;&lt;br /&gt;
        l_canvas.height =  27;&lt;br /&gt;
 &lt;br /&gt;
        var l_context = l_canvas.getContext(&amp;quot;2d&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
        l_context.font = &amp;quot;bold 20px &#039;Times New Roman&#039;, Times, serif&amp;quot;;&lt;br /&gt;
        l_context.fillText(&amp;quot;Hallo Welt!&amp;quot;, 5, 20);&lt;br /&gt;
      }&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;body onload=&amp;quot;init()&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Die Bühne (Canvas) --&amp;gt;&lt;br /&gt;
    &amp;lt;canvas id=&amp;quot;d_canvas&amp;quot;&amp;gt;&lt;br /&gt;
      Ihr Browser unterstützt HTML5 leider nicht!&lt;br /&gt;
    &amp;lt;/canvas&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Anmerkung 1====&lt;br /&gt;
Auf das Canvas-Element wird ausschließlich von [[JavaScript]] aus zugegriffen.&lt;br /&gt;
Sollte ein Browser dieses Element nicht unterstützen, so wird der alternative&lt;br /&gt;
HTML-Code innerhalb des Canvas-Element gerendert und ausgegeben. Hier&lt;br /&gt;
könnte beispielsweise eine [[Flash]]-Anwendung ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
====Anmerkung 2====&lt;br /&gt;
Die Meta-Anweisung&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0, user-scalable=yes&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
dient dazu, dass der Inhalt der Seite auf einem Smartphone in der richtigen Größe angezeigt wird.&lt;br /&gt;
&lt;br /&gt;
====Anmerkung 3====&lt;br /&gt;
Es gibt auch einen WYSIWYG-Editor, den Sie folgendermaßen öffnen können:&lt;br /&gt;
# Rechtklick in das Editor-Fenster → &amp;lt;code&amp;gt;Öffnen mit&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Web Page Editor&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Allerdings unterstützt dieser WYSIWYG-Editor die HTML5-Zeichenbühne [[Canvas]] nicht und ist daher für dieses Tutorium nicht sonderlich nützlich.&lt;br /&gt;
&lt;br /&gt;
==HTML-Seite testen==&lt;br /&gt;
# &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; speichern: &amp;lt;code&amp;gt;Strg-s&amp;lt;/code&amp;gt;&lt;br /&gt;
# Wichtig: &#039;&#039;&#039;Im &amp;lt;code&amp;gt;Projektexplorer&amp;lt;/code&amp;gt; jeweils vor dem Server-Aufruf &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; selektieren&#039;&#039;&#039;, sonst erhalten Sie eine Fehlermeldung.&lt;br /&gt;
# In der Icon-Zeile: Klick auf Icon „grüner Kreis mit weißen Dreieck“ →  Serverziel auswählen: &amp;lt;code&amp;gt;JavaScript Web Application&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
===Anmerkungen zum Firefox auf den Rechnern des MM-Labors===&lt;br /&gt;
&lt;br /&gt;
Defaultmäßig kann der Firefox im MM-Labor nicht auf lokale Webserver (wie z.B. den Aptana-Server) zugreifen. &lt;br /&gt;
&lt;br /&gt;
Grund: In diesem Firefox ist eine unpassende Proxy-Konfiguration voreingestellt. &lt;br /&gt;
Diese Einstellung verhindert den Zugriff auf localhost. &lt;br /&gt;
&lt;br /&gt;
Lösung des Problems:&lt;br /&gt;
# Firefox starten&lt;br /&gt;
# Einstellungen → Erweitert → Netzwerk → Einstellungen  &lt;br /&gt;
# Haken von &amp;lt;code&amp;gt;Proxy-Einstellungen des Systems verwenden&amp;lt;/code&amp;gt; auf &amp;lt;code&amp;gt;Manuelle Proxy-Konfiguration&amp;lt;/code&amp;gt; setzen und als Ausnahme &amp;lt;code&amp;gt;localhost und 127.0.0.1&amp;lt;/code&amp;gt; einstellen. &lt;br /&gt;
&lt;br /&gt;
===Anmerkungen zum Test-Sever===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solange Sie nur HTML-Seiten, die JavaScript-Code enthalten, testen wollen, ist das Serverziel &amp;lt;code&amp;gt;JavaScript Web Application&amp;lt;/code&amp;gt; die beste Wahl.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sie können allerdings auch andere Web-Server verwenden:&lt;br /&gt;
&lt;br /&gt;
* Den HTTP-Preview-Server, der in Eclipse integriert ist (probieren Sie diesen ruhig einmal an Stelle des JavaScript-Web-Application-Servers aus)&lt;br /&gt;
* Tomcat (hier muss [[Installation von Tomcat|Tomcat]] installiert und mit [[Installation von Eclipse#Integration_von_Tomcat|Eclipse verknüpft]] werden)&lt;br /&gt;
* Apache (hier muss [[Installation von Apache|Apache]] installiert und mit Eclipse verknüpft werden; siehe [[HTML5-Tutorium: Canvas: Hello World 02#Optional:_Apache_als_Test-Server|Teil 2 des Tutoriums]])&lt;br /&gt;
* etc.&lt;br /&gt;
&lt;br /&gt;
In allen diesen Fällen müssten Sie &amp;lt;code&amp;gt;Run on Server&amp;lt;/code&amp;gt; an Stelle von&lt;br /&gt;
&amp;lt;code&amp;gt;JavaScript Web Application&amp;lt;/code&amp;gt; auswählen:&lt;br /&gt;
# In der Icon-Zeile: Klick auf Icon „grüner Kreis mit weißen Dreieck“ →  Serverziel auswählen: &amp;lt;code&amp;gt;Run on Server&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Den HTTP-Preview-Server wählen Sie folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;3&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;code&amp;gt;HTTP Preview&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beachten Sie, dass beim HTTP-Preview-Server mit jedem Klick des Debug-Icons (grüner Keris mit weißen Dreieck) ein neues Browserfenster in Eclipse geöffnet wird.&lt;br /&gt;
Daher ist es sinnvoller, im bestehenden Browserfenster das Reload-Icon (zwei kreiförmig angeordnete Pfeile) anzuklicken, um Änderungen an einer der &lt;br /&gt;
Web-Dateien sichtbar zu machen.&lt;br /&gt;
&lt;br /&gt;
Für komplexere Web-Seiten mit [[PHP]]-Code, [[JSP]]-Code etc. muss man einen echten Server (wie [[Apache]] oder [[Tomcat]]) installieren und&lt;br /&gt;
mit Eclipse verknüpfen.&lt;br /&gt;
&lt;br /&gt;
Wenn der von Ihnen gewählte Test-Web-Server Probleme hat, die&lt;br /&gt;
neuen HTML-Seiten darzustellen, kann es notwendig sein, den Server neu zu starten:&lt;br /&gt;
&lt;br /&gt;
# Reiter &amp;lt;code&amp;gt;Server&amp;lt;/code&amp;gt; im unteren Fenster selektieren&lt;br /&gt;
# Klick auf Icon „rotes Recheck“ (Server stoppen)&lt;br /&gt;
# Klick auf Icon „grüner Kreis mit weißem Dreieck“ (Server starten)&lt;br /&gt;
&lt;br /&gt;
==Projekt im Repository sichern==&lt;br /&gt;
&lt;br /&gt;
Jedes funktionierende Zwischenergebnis eines Projektes sollte im Repository gespeichert werden:&lt;br /&gt;
&lt;br /&gt;
# Im Projektexplorer: Rechtsklick auf &amp;lt;code&amp;gt;HelloWorldCanvas01&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Team&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Commit&amp;lt;/code&amp;gt;&lt;br /&gt;
# Enter a comment for the commit operation: &amp;lt;code&amp;gt;hallo.html, ein HTML5-JavaScript-Moloch wurde erstellt.&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==JavaScript-Code auslagern==&lt;br /&gt;
&lt;br /&gt;
Man sollte i. Allg. vermeiden, Javascript-Code direkt in eine HTML-Seite einzufügen.&lt;br /&gt;
Diese Verknüpfung von [[View]] und [[Control]] bringt nur Nachteile mit sich: &lt;br /&gt;
* Der Code wird unübersichtlicher, da zwei unterschiedliche Sprachen gemischt werden ([[Impedance Mismatch]]).&lt;br /&gt;
* Der JavaScript-Code kann nicht in mehreren HTML-Dateien eingesetzt werden ([[Don&#039;t Repeat Yourself]]).&lt;br /&gt;
* Die Ladezeiten der einzelnen Seiten werden länger, wenn derselbe JavaScript-Code in unterschiedlichen Seinten eingebaut ist und für jede dieser Seiten erneut geladen werden muss.&lt;br /&gt;
&lt;br /&gt;
Aus diesen Gründen sollte man den JavaScript-Code in eigene Dateien auslagern:&lt;br /&gt;
&lt;br /&gt;
# Rechtsklick auf Ordner &amp;lt;code&amp;gt;WebContent&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Neu&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Ordner&amp;lt;/code&amp;gt; → Ordnername: &amp;lt;code&amp;gt;js&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
# Rechtsklick auf Ordner &amp;lt;code&amp;gt;js&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Neu&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Datei&amp;lt;/code&amp;gt; → Dateiname: &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Inhalt der Datei &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt;===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;use strict&amp;quot;; /* Warne vor unsauberem JavaScript-Code! */&lt;br /&gt;
&lt;br /&gt;
function init()&lt;br /&gt;
{&lt;br /&gt;
  // Erzeugung und Initialisierung der Bühne (Canvas)&lt;br /&gt;
  var l_canvas = document.getElementById(&amp;quot;d_canvas&amp;quot;); &lt;br /&gt;
&lt;br /&gt;
  l_canvas.width  = 300;&lt;br /&gt;
  l_canvas.height =  27;&lt;br /&gt;
&lt;br /&gt;
  // Textausgabe (auf der Bühne)&lt;br /&gt;
  var l_context = l_canvas.getContext(&amp;quot;2d&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  l_context.font = &amp;quot;bold 20px &#039;Times New Roman&#039;, Times, serif&amp;quot;;&lt;br /&gt;
  l_context.fillText(&amp;quot;Hallo Welt!&amp;quot;, 5, 20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Geänderter Inhalt der Datei &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt;===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Titel der HTML-Seite; wird i. Allg. im Browser im Reiter angezeigt --&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;HTML5-Tutorium: Canvas: Hello World 01&amp;lt;/title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Als HTML-Encoding sollte man stets UTF-8 verwenden. --&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Korrektes Skalieren der Seite auf einem mobilen Endgerät --&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0, user-scalable=yes&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Laden aller JavaScript-Dateien --&amp;gt;&lt;br /&gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;js/main.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;body onload=&amp;quot;init()&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Die Bühne (Canvas) --&amp;gt;&lt;br /&gt;
    &amp;lt;canvas id=&amp;quot;d_canvas&amp;quot;&amp;gt;&lt;br /&gt;
      Ihr Browser unterstützt HTML5 leider nicht!&lt;br /&gt;
    &amp;lt;/canvas&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Tipp====&lt;br /&gt;
Benutzen Sie am Besten die Code-Vervollständigung (&amp;lt;code&amp;gt;Strg-Leerzeichen&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;Crtl-Space&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Beispiel: &lt;br /&gt;
# Klicken Sie testweise im Editor-Fenster der Datei &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt; in die leere Zeile 5 der Funktion &amp;lt;code&amp;gt;init&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Drücken Sie &amp;lt;code&amp;gt;Strg-Leerzeichen&amp;lt;/code&amp;gt; und wählen Sie z.B. &amp;lt;code&amp;gt;l_canvas&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Geben Sie einen Punkt (&amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt;) ein und drücken Sie erneut &amp;lt;code&amp;gt;Strg-Leerzeichen&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Löschen Sie den eben erfassten Inhalt wieder. (Ihre Datei &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt; sollte ja schon fertiggestellt gewesen sein.)&lt;br /&gt;
&lt;br /&gt;
==Projekt testen==&lt;br /&gt;
&lt;br /&gt;
Testen Sie Ihr Projekt wieder, indem Sie es im Firefox öffen.&lt;br /&gt;
&lt;br /&gt;
Häufig ist der JavaScript-Code bei den ersten Tests fehlerhaft. In diesen Fällen hilft einem&lt;br /&gt;
die JavaScript-Konsole, die z.B. über das Firefox-Plugin [https://addons.mozilla.org/de/firefox/addon/firebug/ Firebug] zugänglich ist, häufig weiter.&lt;br /&gt;
&lt;br /&gt;
Fügen Sie folgenden Code am Ende des Rumpfes der &amp;lt;code&amp;gt;init&amp;lt;/code&amp;gt;-Funktion ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  console.log(  &amp;quot;Canvas wurde erstellt: &amp;quot; &lt;br /&gt;
              + l_canvas.width + &amp;quot;*&amp;quot; + l_canvas.height + &amp;quot; Pixel.&amp;quot;&lt;br /&gt;
             );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun die Anwendung erneut im Firefox ausführen, sehen Sie zunächst keine Veränderung.&lt;br /&gt;
&lt;br /&gt;
Überprüfen Sie, ob Firebug im Firefox aktiviert wurde (Drop-Down-Menü beim Icon mit dem Bug (= Käfer) in der rechten oberen Ecke von Firefox).&lt;br /&gt;
&lt;br /&gt;
Öffnen Sie nun das Firebug-Fenster (Icon mit dem Bug) und laden Sie die JavaScript-Anwendung erneut (Reload im Firefox).&lt;br /&gt;
&lt;br /&gt;
Nun sollten Sie im Konsolen-Fenster von Firebug einen Kommentar lesen können.&lt;br /&gt;
&lt;br /&gt;
Wenn alle Tests erfolgreich verlaufen sind, ist es sinnvoll, die&lt;br /&gt;
Konsolenausgaben mittels &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt;  oder &amp;lt;code&amp;gt;/* ... */&amp;lt;/code&amp;gt; auszukommentieren.&lt;br /&gt;
&lt;br /&gt;
==Projekt im Repository sichern==&lt;br /&gt;
&lt;br /&gt;
Auch das Endergebnis des Projektes sollte im Repository gespeichert werden:&lt;br /&gt;
&lt;br /&gt;
# Im Projektexplorer: Rechtsklick auf &amp;lt;code&amp;gt;HelloWorldCanvas01&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Team&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Commit&amp;lt;/code&amp;gt;&lt;br /&gt;
# Enter a comment for the commit operation: &amp;lt;code&amp;gt;main.js wurde erstellt, zur Auslagerung des JS-Codes aus hallo.html.&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Repostitory begutachten==&lt;br /&gt;
&lt;br /&gt;
Nun können Sie den Inhalt in Ihrem Repository betrachten.&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Perspektive öffnen&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Andere&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SVN Repository Exploring&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
# Im Dateibaum (linkes Fenster) &amp;lt;code&amp;gt;https://praktikum.multimedia.hs-augsburg.de/svn/ACCOUNT&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;mmprog&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;tutorium&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;HelloWorldCanvas01&amp;lt;/code&amp;gt; aufklappen&lt;br /&gt;
&lt;br /&gt;
Hier sehen Sie zunächst den Inhalt des von Ihnen gespeicherten Projektes.&lt;br /&gt;
Das Repository kann aber noch mehr. Sie können sich alle gespeicherten Versionen Ihres Projektes ansehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Rechtsklick auf &amp;lt;code&amp;gt;HelloWorldCanvas01&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;Show History&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun sehen Sie im Protokoll-Fester die verschiedenen Versionen des Projektes, mit Revisionsnummer, Author (ein Repository kann von mehreren Autoren gelichzeitig benutzt werden), sowie die von Ihnen eingegebenen Kommentare.&lt;br /&gt;
&lt;br /&gt;
Als letztes sollten Sie sich die Entwichlung der Datei &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; einmal näher ansehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Im Dateibaum &amp;lt;code&amp;gt;WebContent&amp;lt;/code&amp;gt; aufklappen → Rechtsklick auf &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Show Resion Graph&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Hier sehen Sie, dass es von dieser Datei zwei Versionen gibt. Diese können wir auch miteinander vergleichen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;6&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Im Dateibaum Rechtsklick auf &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Compare&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Vergleich der beiden Versionen erkennt mann, dass der JavaScript-Code durch einen Zugriff auf die Datei&lt;br /&gt;
&amp;lt;code&amp;gt;js/main.js&amp;lt;/code&amp;gt; ersetzt wurde.&lt;br /&gt;
&lt;br /&gt;
Kehren Sie nun in die normale Arbeitsumgebung zurück:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;7&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; In der Icon-Leiste oben rechts auf das Icon der Arbeitsumgebung (Perspektive) &amp;lt;code&amp;gt;Web&amp;lt;/code&amp;gt; klicken.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Neben den Icon &amp;lt;code&amp;gt;Web&amp;lt;/code&amp;gt; finden Sie jetzt auch ein Icon für die Arbeitsumgebung &amp;lt;code&amp;gt;SVN Repository Exploring&amp;lt;/code&amp;gt;,&lt;br /&gt;
damit Sie künftig schneller in diese Perspektive wechseln können.&lt;br /&gt;
&lt;br /&gt;
=Quellen=&lt;br /&gt;
# {{Quelle|Kowarschick, W.: Multimedia-Programmierung}}&lt;br /&gt;
# [http://blog.webagesolutions.com/archives/419 Coding HTML5 Pages Using Eclipse]&lt;br /&gt;
# [http://www.html5canvastutorials.com/tutorials/html5-canvas-text/ HTML5 Canvas Text Tutorial]&lt;br /&gt;
&lt;br /&gt;
=Siehe auch=&lt;br /&gt;
# {{SieheAuch|Pilgrim (2011)}}&lt;br /&gt;
# [http://www.w3schools.com/html5/ w3schools.com: HTML5 Tutorial]&lt;br /&gt;
# [http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html HTML Living Standard — The canvas element]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Kategorie: HTML5-Tutorium: Canvas: Hello World]][[Kategorie: HTML5-Beispiel]][[Kategorie:Kapitel:Multimedia-Programmierung:Beispiele]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rayza</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=HTML5-Tutorium:_Canvas:_Hello_World_01&amp;diff=23803</id>
		<title>HTML5-Tutorium: Canvas: Hello World 01</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=HTML5-Tutorium:_Canvas:_Hello_World_01&amp;diff=23803"/>
		<updated>2012-10-11T15:10:38Z</updated>

		<summary type="html">&lt;p&gt;Rayza: /* Projekt im Repository sichern */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{HTML5-Tutorium:Canvas:HelloWorld:Menü}}&lt;br /&gt;
&#039;&#039;&#039;Ergebnis&#039;&#039;&#039;: [http://glossar.hs-augsburg.de/beispiel/tutorium/html5_canvas/hello_world/html5_canvas_hello_world_01/WebContent/hallo.html &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt;]&lt;br /&gt;
([http://glossar.hs-augsburg.de/beispiel/tutorium/html5_canvas/hello_world/html5_canvas_hello_world_01 SVN-Repository])&lt;br /&gt;
=HTML5: Hello-Word-Anwendung mit Canvas=&lt;br /&gt;
&lt;br /&gt;
Zur Erstellung der Anwendung wird [[Installation von Eclipse (Windows)|Eclipse]] eingesetzt.&lt;br /&gt;
Alle Eclipse-Versionen ab Helios eignen sich zur Erstellung von HTML5-Web-Anwendungen.&lt;br /&gt;
&lt;br /&gt;
Zum Testen wird der Browser [[Firefox]] mit dem [https://addons.mozilla.org/de/firefox/addon/firebug/ Firebug-Plugin] verendet.&lt;br /&gt;
&lt;br /&gt;
Unter Eclipse kann der Testbrowser folgendermaßen festgelegt werden:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Benutzervorgaben&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Allgemein&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;Webbrowser&amp;lt;/code&amp;gt; selektieren → &amp;lt;code&amp;gt;Verwende externen Web-Browser&amp;lt;/code&amp;gt; selektieren → Häckchen vor &amp;lt;code&amp;gt;Firefox&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Eclipse vorbereiten==&lt;br /&gt;
(Dieser Punkt kann übersprungen werden, wenn man den Workspace http://glossar.hs-augsburg.de/svn/eclipse/workspace-mmprog heruntergeladen hat und in Eclipse als akutellen Workspace verwendet.)&lt;br /&gt;
&lt;br /&gt;
Zunächst sollte man die „richtige“ Oberfläche auswählen:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Perspektive öffnen&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Web&amp;lt;/code&amp;gt; (evtl. unter dem Punkt &amp;lt;code&amp;gt;Andere...&amp;lt;/code&amp;gt; zu finden; &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beachten Sie, es gibt zwei Web-Perspektiven. Wählen Sie diejenige, die die Weltkugel mit Stift als Icon hat.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Außerdem muss der Character Code korrekt eingestellt werden:&lt;br /&gt;
&lt;br /&gt;
Juno:&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Benutzervorgaben&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Allgemein&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;Arbeitsbereich&amp;lt;/code&amp;gt; selektieren&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;code&amp;gt;Sonstige&amp;lt;/code&amp;gt; selektieren → &amp;lt;code&amp;gt;UTF-8&amp;lt;/code&amp;gt; im Drop-Down-Menü selektieren&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Indigo:&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Benutzervorgaben&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Web&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;HTML-Files&amp;lt;/code&amp;gt; selektieren&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Codierung: &amp;lt;code&amp;gt;ISO Latin-1&amp;lt;/code&amp;gt; durch &amp;lt;code&amp;gt;ISO 10646/Unicode(UTF-8)&amp;lt;/code&amp;gt; ersetzen&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Musterlösung herunterladen==&lt;br /&gt;
(Dieser Punkt kann übersprungen werden, wenn man den Workspace http://glossar.hs-augsburg.de/svn/eclipse/workspace_mmprog_x64.zip heruntergeladen hat und in Eclipse als akutellen Workspace verwendet.)&lt;br /&gt;
&lt;br /&gt;
Laden Sie die Musterlösung &amp;lt;code&amp;gt;http://glossar.hs-augsburg.de/beispiel/tutorium/html5_canvas/hello_world/html5_canvas_hello_world_01/&amp;lt;/code&amp;gt;&lt;br /&gt;
in Eclipse:&lt;br /&gt;
&lt;br /&gt;
# Klick auf Reiter &amp;lt;code&amp;gt;Datei&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Importieren&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SVN&amp;lt;/code&amp;gt; aufklappen → Klick auf &amp;lt;code&amp;gt;Checkout Projects from SVN&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt;&lt;br /&gt;
# Entweder&lt;br /&gt;
#* &amp;lt;code&amp;gt;Use existing repository location:&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;http://glossar.hs-augsburg.de/beispiel/tutorium&amp;lt;/code&amp;gt; selektieren (falls vorhanden)&lt;br /&gt;
#* &amp;lt;code&amp;gt;Create a new repsotiory location&amp;lt;/code&amp;gt; wählen → &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; → Url: &amp;lt;code&amp;gt;http://glossar.hs-augsburg.de/beispiel/tutorium&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt;&lt;br /&gt;
# Nachden der Dateibaum aufgegangen ist:  &amp;lt;code&amp;gt;html5_canvas&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;hello_world&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;html5_canvas_hello_worl_01&amp;lt;/code&amp;gt; selektieren &lt;br /&gt;
# &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Neues Projekt anlegen==&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Datei&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Neu&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Statisches Web-Projekt&amp;lt;/code&amp;gt;&lt;br /&gt;
# Project name: &amp;lt;code&amp;gt;HelloWorldCanvas01&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Speichern Sie nun Ihr Projekt in Ihrem Repository:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Projektexplorer&amp;lt;/code&amp;gt;: Rechtsklick auf &amp;lt;code&amp;gt;HelloWorldCanvas01&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Team&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Projekt gemeinsam nutzen&amp;lt;/code&amp;gt; &lt;br /&gt;
# &amp;lt;code&amp;gt;SVN&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;Create a new repository location&amp;lt;/code&amp;gt; selektieren&lt;br /&gt;
# Url: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://praktikum.multimedia.hs-augsburg.de/svn/ACCOUNT&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; (&#039;&#039;&#039;&amp;lt;code&amp;gt;ACCOUNT&amp;lt;/code&amp;gt; durch eigenen RZ-Account ersetzen&#039;&#039;&#039;) → &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; &lt;br /&gt;
# Use specified folder name: &amp;lt;code&amp;gt;mmprog/tutorium/HelloWorldCanvas01&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
# Beim ersten Mal: Klick auf &amp;lt;code&amp;gt;Accept permanently&amp;lt;/code&amp;gt;&lt;br /&gt;
# Beim ersten Mal: Passwort eingeben → Häckchen bei &amp;lt;code&amp;gt;Passwort merken&amp;lt;/code&amp;gt; (sonst muss man künftig für jede hozuladende Datei das Passwort eingeben) → &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Eventuell&#039;&#039;&#039;: Häckchen bei &amp;lt;code&amp;gt;Entscheidung merken&amp;lt;/code&amp;gt; → &#039;&#039;&#039;&amp;lt;code&amp;gt;Nein&amp;lt;/code&amp;gt;&#039;&#039;&#039; (Nicht &amp;lt;code&amp;gt;Ja&amp;lt;/code&amp;gt;!!!!)&lt;br /&gt;
&lt;br /&gt;
==Projekt im Repository sichern==&lt;br /&gt;
&lt;br /&gt;
Das neu angelegte Projekt wird gleich mal im Repository gesichert:&lt;br /&gt;
&lt;br /&gt;
# Im Projektexplorer: Rechtsklick auf &amp;lt;code&amp;gt;HelloWorldCanvas01&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Team&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Commit&amp;lt;/code&amp;gt;&lt;br /&gt;
# Enter a comment for the commit operation: &amp;lt;code&amp;gt;Neues Projekt angelegt.&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Neue HTML-Datei anlegen==&lt;br /&gt;
&lt;br /&gt;
# Im Projektexplorer (linkes Fenster): &amp;lt;code&amp;gt;HelloWorldCanvas01&amp;lt;/code&amp;gt; aufklappen&lt;br /&gt;
# Rechtsklick auf Ordner &amp;lt;code&amp;gt;WebContent&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Neu&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;HTML file&amp;lt;/code&amp;gt;&lt;br /&gt;
# Dateiname: &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; → Templates: &amp;lt;code&amp;gt;New HTML File (5)&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==HTML-Datei bearbeiten==&lt;br /&gt;
&lt;br /&gt;
Erfassen Sie folgenden Code in der HTML-Seite:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Titel der HTML-Seite; wird i. Allg. im Browser im Reiter angezeigt --&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;HTML5-Tutorium: Canvas: Hello World 01&amp;lt;/title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Als HTML-Encoding sollte man stets UTF-8 verwenden. --&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Korrektes Skalieren der Seite auf einem mobilen Endgerät --&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0, user-scalable=yes&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;!-- Zeichnen von &amp;quot;Hallo Welt!&amp;quot; auf der Bühne&lt;br /&gt;
    	  (nachdem die Seite geladen wurde). --&amp;gt;&lt;br /&gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
      function init()&lt;br /&gt;
      {&lt;br /&gt;
        var l_canvas = document.getElementById(&amp;quot;d_canvas&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
        l_canvas.width  = 300;&lt;br /&gt;
        l_canvas.height =  27;&lt;br /&gt;
 &lt;br /&gt;
        var l_context = l_canvas.getContext(&amp;quot;2d&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
        l_context.font = &amp;quot;bold 20px &#039;Times New Roman&#039;, Times, serif&amp;quot;;&lt;br /&gt;
        l_context.fillText(&amp;quot;Hallo Welt!&amp;quot;, 5, 20);&lt;br /&gt;
      }&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;body onload=&amp;quot;init()&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Die Bühne (Canvas) --&amp;gt;&lt;br /&gt;
    &amp;lt;canvas id=&amp;quot;d_canvas&amp;quot;&amp;gt;&lt;br /&gt;
      Ihr Browser unterstützt HTML5 leider nicht!&lt;br /&gt;
    &amp;lt;/canvas&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Anmerkung 1====&lt;br /&gt;
Auf das Canvas-Element wird ausschließlich von [[JavaScript]] aus zugegriffen.&lt;br /&gt;
Sollte ein Browser dieses Element nicht unterstützen, so wird der alternative&lt;br /&gt;
HTML-Code innerhalb des Canvas-Element gerendert und ausgegeben. Hier&lt;br /&gt;
könnte beispielsweise eine [[Flash]]-Anwendung ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
====Anmerkung 2====&lt;br /&gt;
Die Meta-Anweisung&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0, user-scalable=yes&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
dient dazu, dass der Inhalt der Seite auf einem Smartphone in der richtigen Größe angezeigt wird.&lt;br /&gt;
&lt;br /&gt;
====Anmerkung 3====&lt;br /&gt;
Es gibt auch einen WYSIWYG-Editor, den Sie folgendermaßen öffnen können:&lt;br /&gt;
# Rechtklick in das Editor-Fenster → &amp;lt;code&amp;gt;Öffnen mit&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Web Page Editor&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Allerdings unterstützt dieser WYSIWYG-Editor die HTML5-Zeichenbühne [[Canvas]] nicht und ist daher für dieses Tutorium nicht sonderlich nützlich.&lt;br /&gt;
&lt;br /&gt;
==HTML-Seite testen==&lt;br /&gt;
# &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; speichern: &amp;lt;code&amp;gt;Strg-s&amp;lt;/code&amp;gt;&lt;br /&gt;
# Wichtig: &#039;&#039;&#039;Im &amp;lt;code&amp;gt;Projektexprlorer&amp;lt;/code&amp;gt; jeweils vor dem Server-Aufruf &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; selektieren&#039;&#039;&#039;, sonst erhalten Sie eine Fehlermeldung.&lt;br /&gt;
# In der Icon-Zeile: Klick auf Icon „grüner Kreis mit weißen Dreieck“ →  Serverziel auswählen: &amp;lt;code&amp;gt;JavaScript Web Application&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
===Anmerkungen zum Firefox auf den Rechnern des MM-Labors===&lt;br /&gt;
&lt;br /&gt;
Defaultmäßig kann der Firefox im MM-Labor nicht auf lokale Webserver (wie z.B. den Aptana-Server) zugreifen. &lt;br /&gt;
&lt;br /&gt;
Grund: In diesem Firefox ist eine unpassende Proxy-Konfiguration voreingestellt. &lt;br /&gt;
Diese Einstellung verhindert den Zugriff auf localhost. &lt;br /&gt;
&lt;br /&gt;
Lösung des Problems:&lt;br /&gt;
# Firefox starten&lt;br /&gt;
# Einstellungen → Erweitert → Netzwerk → Einstellungen  &lt;br /&gt;
# Haken von &amp;lt;code&amp;gt;Proxy-Einstellungen des Systems verwenden&amp;lt;/code&amp;gt; auf &amp;lt;code&amp;gt;Manuelle Proxy-Konfiguration&amp;lt;/code&amp;gt; setzen und als Ausnahme &amp;lt;code&amp;gt;localhost und 127.0.0.1&amp;lt;/code&amp;gt; einstellen. &lt;br /&gt;
&lt;br /&gt;
===Anmerkungen zum Test-Sever===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solange Sie nur HTML-Seiten, die JavaScript-Code enthalten, testen wollen, ist das Serverziel &amp;lt;code&amp;gt;JavaScript Web Application&amp;lt;/code&amp;gt; die beste Wahl.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sie können allerdings auch andere Web-Server verwenden:&lt;br /&gt;
&lt;br /&gt;
* Den HTTP-Preview-Server, der in Eclipse integriert ist (probieren Sie diesen ruhig einmal an Stelle des JavaScript-Web-Application-Servers aus)&lt;br /&gt;
* Tomcat (hier muss [[Installation von Tomcat|Tomcat]] installiert und mit [[Installation von Eclipse#Integration_von_Tomcat|Eclipse verknüpft]] werden)&lt;br /&gt;
* Apache (hier muss [[Installation von Apache|Apache]] installiert und mit Eclipse verknüpft werden; siehe [[HTML5-Tutorium: Canvas: Hello World 02#Optional:_Apache_als_Test-Server|Teil 2 des Tutoriums]])&lt;br /&gt;
* etc.&lt;br /&gt;
&lt;br /&gt;
In allen diesen Fällen müssten Sie &amp;lt;code&amp;gt;Run on Server&amp;lt;/code&amp;gt; an Stelle von&lt;br /&gt;
&amp;lt;code&amp;gt;JavaScript Web Application&amp;lt;/code&amp;gt; auswählen:&lt;br /&gt;
# In der Icon-Zeile: Klick auf Icon „grüner Kreis mit weißen Dreieck“ →  Serverziel auswählen: &amp;lt;code&amp;gt;Run on Server&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Den HTTP-Preview-Server wählen Sie folgendermaßen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;3&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;code&amp;gt;HTTP Preview&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beachten Sie, dass beim HTTP-Preview-Server mit jedem Klick des Debug-Icons (grüner Keris mit weißen Dreieck) ein neues Browserfenster in Eclipse geöffnet wird.&lt;br /&gt;
Daher ist es sinnvoller, im bestehenden Browserfenster das Reload-Icon (zwei kreiförmig angeordnete Pfeile) anzuklicken, um Änderungen an einer der &lt;br /&gt;
Web-Dateien sichtbar zu machen.&lt;br /&gt;
&lt;br /&gt;
Für komplexere Web-Seiten mit [[PHP]]-Code, [[JSP]]-Code etc. muss man einen echten Server (wie [[Apache]] oder [[Tomcat]]) installieren und&lt;br /&gt;
mit Eclipse verknüpfen.&lt;br /&gt;
&lt;br /&gt;
Wenn der von Ihnen gewählte Test-Web-Server Probleme hat, die&lt;br /&gt;
neuen HTML-Seiten darzustellen, kann es notwendig sein, den Server neu zu starten:&lt;br /&gt;
&lt;br /&gt;
# Reiter &amp;lt;code&amp;gt;Server&amp;lt;/code&amp;gt; im unteren Fenster selektieren&lt;br /&gt;
# Klick auf Icon „rotes Recheck“ (Server stoppen)&lt;br /&gt;
# Klick auf Icon „grüner Kreis mit weißem Dreieck“ (Server starten)&lt;br /&gt;
&lt;br /&gt;
==Projekt im Repository sichern==&lt;br /&gt;
&lt;br /&gt;
Jedes funktionierende Zwischenergebnis eines Projektes sollte im Repository gespeichert werden:&lt;br /&gt;
&lt;br /&gt;
# Im Projektexplorer: Rechtsklick auf &amp;lt;code&amp;gt;HelloWorldCanvas01&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Team&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Commit&amp;lt;/code&amp;gt;&lt;br /&gt;
# Enter a comment for the commit operation: &amp;lt;code&amp;gt;hallo.html, ein HTML5-JavaScript-Moloch wurde erstellt.&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==JavaScript-Code auslagern==&lt;br /&gt;
&lt;br /&gt;
Man sollte i. Allg. vermeiden, Javascript-Code direkt in eine HTML-Seite einzufügen.&lt;br /&gt;
Diese Verknüpfung von [[View]] und [[Control]] bringt nur Nachteile mit sich: &lt;br /&gt;
* Der Code wird unübersichtlicher, da zwei unterschiedliche Sprachen gemischt werden ([[Impedance Mismatch]]).&lt;br /&gt;
* Der JavaScript-Code kann nicht in mehreren HTML-Dateien eingesetzt werden ([[Don&#039;t Repeat Yourself]]).&lt;br /&gt;
* Die Ladezeiten der einzelnen Seiten werden länger, wenn derselbe JavaScript-Code in unterschiedlichen Seinten eingebaut ist und für jede dieser Seiten erneut geladen werden muss.&lt;br /&gt;
&lt;br /&gt;
Aus diesen Gründen sollte man den JavaScript-Code in eigene Dateien auslagern:&lt;br /&gt;
&lt;br /&gt;
# Rechtsklick auf Ordner &amp;lt;code&amp;gt;WebContent&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Neu&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Ordner&amp;lt;/code&amp;gt; → Ordnername: &amp;lt;code&amp;gt;js&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
# Rechtsklick auf Ordner &amp;lt;code&amp;gt;js&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Neu&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Datei&amp;lt;/code&amp;gt; → Dateiname: &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Inhalt der Datei &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt;===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;use strict&amp;quot;; /* Warne vor unsauberem JavaScript-Code! */&lt;br /&gt;
&lt;br /&gt;
function init()&lt;br /&gt;
{&lt;br /&gt;
  // Erzeugung und Initialisierung der Bühne (Canvas)&lt;br /&gt;
  var l_canvas = document.getElementById(&amp;quot;d_canvas&amp;quot;); &lt;br /&gt;
&lt;br /&gt;
  l_canvas.width  = 300;&lt;br /&gt;
  l_canvas.height =  27;&lt;br /&gt;
&lt;br /&gt;
  // Textausgabe (auf der Bühne)&lt;br /&gt;
  var l_context = l_canvas.getContext(&amp;quot;2d&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  l_context.font = &amp;quot;bold 20px &#039;Times New Roman&#039;, Times, serif&amp;quot;;&lt;br /&gt;
  l_context.fillText(&amp;quot;Hallo Welt!&amp;quot;, 5, 20);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Geänderter Inhalt der Datei &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt;===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Titel der HTML-Seite; wird i. Allg. im Browser im Reiter angezeigt --&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;HTML5-Tutorium: Canvas: Hello World 01&amp;lt;/title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Als HTML-Encoding sollte man stets UTF-8 verwenden. --&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Korrektes Skalieren der Seite auf einem mobilen Endgerät --&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0, user-scalable=yes&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Laden aller JavaScript-Dateien --&amp;gt;&lt;br /&gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;js/main.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;body onload=&amp;quot;init()&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Die Bühne (Canvas) --&amp;gt;&lt;br /&gt;
    &amp;lt;canvas id=&amp;quot;d_canvas&amp;quot;&amp;gt;&lt;br /&gt;
      Ihr Browser unterstützt HTML5 leider nicht!&lt;br /&gt;
    &amp;lt;/canvas&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Tipp====&lt;br /&gt;
Benutzen Sie am Besten die Code-Vervollständigung (&amp;lt;code&amp;gt;Strg-Leerzeichen&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;Crtl-Space&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Beispiel: &lt;br /&gt;
# Klicken Sie testweise im Editor-Fenster der Datei &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt; in die leere Zeile 5 der Funktion &amp;lt;code&amp;gt;init&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Drücken Sie &amp;lt;code&amp;gt;Strg-Leerzeichen&amp;lt;/code&amp;gt; und wählen Sie z.B. &amp;lt;code&amp;gt;l_canvas&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Geben Sie einen Punkt (&amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt;) ein und drücken Sie erneut &amp;lt;code&amp;gt;Strg-Leerzeichen&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Löschen Sie den eben erfassten Inhalt wieder. (Ihre Datei &amp;lt;code&amp;gt;main.js&amp;lt;/code&amp;gt; sollte ja schon fertiggestellt gewesen sein.)&lt;br /&gt;
&lt;br /&gt;
==Projekt testen==&lt;br /&gt;
&lt;br /&gt;
Testen Sie Ihr Projekt wieder, indem Sie es im Firefox öffen.&lt;br /&gt;
&lt;br /&gt;
Häufig ist der JavaScript-Code bei den ersten Tests fehlerhaft. In diesen Fällen hilft einem&lt;br /&gt;
die JavaScript-Konsole, die z.B. über das Firefox-Plugin [https://addons.mozilla.org/de/firefox/addon/firebug/ Firebug] zugänglich ist, häufig weiter.&lt;br /&gt;
&lt;br /&gt;
Fügen Sie folgenden Code am Ende des Rumpfes der &amp;lt;code&amp;gt;init&amp;lt;/code&amp;gt;-Funktion ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
  console.log(  &amp;quot;Canvas wurde erstellt: &amp;quot; &lt;br /&gt;
              + l_canvas.width + &amp;quot;*&amp;quot; + l_canvas.height + &amp;quot; Pixel.&amp;quot;&lt;br /&gt;
             );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn Sie nun die Anwendung erneut im Firefox ausführen, sehen Sie zunächst keine Veränderung.&lt;br /&gt;
&lt;br /&gt;
Überprüfen Sie, ob Firebug im Firefox aktiviert wurde (Drop-Down-Menü beim Icon mit dem Bug (= Käfer) in der rechten oberen Ecke von Firefox).&lt;br /&gt;
&lt;br /&gt;
Öffnen Sie nun das Firebug-Fenster (Icon mit dem Bug) und laden Sie die JavaScript-Anwendung erneut (Reload im Firefox).&lt;br /&gt;
&lt;br /&gt;
Nun sollten Sie im Konsolen-Fenster von Firebug einen Kommentar lesen können.&lt;br /&gt;
&lt;br /&gt;
Wenn alle Tests erfolgreich verlaufen sind, ist es sinnvoll, die&lt;br /&gt;
Konsolenausgaben mittels &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt;  oder &amp;lt;code&amp;gt;/* ... */&amp;lt;/code&amp;gt; auszukommentieren.&lt;br /&gt;
&lt;br /&gt;
==Projekt im Repository sichern==&lt;br /&gt;
&lt;br /&gt;
Auch das Endergebnis des Projektes sollte im Repository gespeichert werden:&lt;br /&gt;
&lt;br /&gt;
# Im Projektexplorer: Rechtsklick auf &amp;lt;code&amp;gt;HelloWorldCanvas01&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Team&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Commit&amp;lt;/code&amp;gt;&lt;br /&gt;
# Enter a comment for the commit operation: &amp;lt;code&amp;gt;main.js wurde erstellt, zur Auslagerung des JS-Codes aus hallo.html.&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Repostitory begutachten==&lt;br /&gt;
&lt;br /&gt;
Nun können Sie den Inhalt in Ihrem Repository betrachten.&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Perspektive öffnen&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Andere&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;SVN Repository Exploring&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
# Im Dateibaum (linkes Fenster) &amp;lt;code&amp;gt;https://praktikum.multimedia.hs-augsburg.de/svn/ACCOUNT&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;mmprog&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;tutorium&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;HelloWorldCanvas01&amp;lt;/code&amp;gt; aufklappen&lt;br /&gt;
&lt;br /&gt;
Hier sehen Sie zunächst den Inhalt des von Ihnen gespeicherten Projektes.&lt;br /&gt;
Das Repository kann aber noch mehr. Sie können sich alle gespeicherten Versionen Ihres Projektes ansehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Rechtsklick auf &amp;lt;code&amp;gt;HelloWorldCanvas01&amp;lt;/code&amp;gt; aufklappen → &amp;lt;code&amp;gt;Show History&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun sehen Sie im Protokoll-Fester die verschiedenen Versionen des Projektes, mit Revisionsnummer, Author (ein Repository kann von mehreren Autoren gelichzeitig benutzt werden), sowie die von Ihnen eingegebenen Kommentare.&lt;br /&gt;
&lt;br /&gt;
Als letztes sollten Sie sich die Entwichlung der Datei &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; einmal näher ansehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Im Dateibaum &amp;lt;code&amp;gt;WebContent&amp;lt;/code&amp;gt; aufklappen → Rechtsklick auf &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Show Resion Graph&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Hier sehen Sie, dass es von dieser Datei zwei Versionen gibt. Diese können wir auch miteinander vergleichen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;6&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Im Dateibaum Rechtsklick auf &amp;lt;code&amp;gt;hallo.html&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;Compare&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Vergleich der beiden Versionen erkennt mann, dass der JavaScript-Code durch einen Zugriff auf die Datei&lt;br /&gt;
&amp;lt;code&amp;gt;js/main.js&amp;lt;/code&amp;gt; ersetzt wurde.&lt;br /&gt;
&lt;br /&gt;
Kehren Sie nun in die normale Arbeitsumgebung zurück:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;7&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; In der Icon-Leiste oben rechts auf das Icon der Arbeitsumgebung (Perspektive) &amp;lt;code&amp;gt;Web&amp;lt;/code&amp;gt; klicken.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Neben den Icon &amp;lt;code&amp;gt;Web&amp;lt;/code&amp;gt; finden Sie jetzt auch ein Icon für die Arbeitsumgebung &amp;lt;code&amp;gt;SVN Repository Exploring&amp;lt;/code&amp;gt;,&lt;br /&gt;
damit Sie künftig schneller in diese Perspektive wechseln können.&lt;br /&gt;
&lt;br /&gt;
=Quellen=&lt;br /&gt;
# {{Quelle|Kowarschick, W.: Multimedia-Programmierung}}&lt;br /&gt;
# [http://blog.webagesolutions.com/archives/419 Coding HTML5 Pages Using Eclipse]&lt;br /&gt;
# [http://www.html5canvastutorials.com/tutorials/html5-canvas-text/ HTML5 Canvas Text Tutorial]&lt;br /&gt;
&lt;br /&gt;
=Siehe auch=&lt;br /&gt;
# {{SieheAuch|Pilgrim (2011)}}&lt;br /&gt;
# [http://www.w3schools.com/html5/ w3schools.com: HTML5 Tutorial]&lt;br /&gt;
# [http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html HTML Living Standard — The canvas element]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Kategorie: HTML5-Tutorium: Canvas: Hello World]][[Kategorie: HTML5-Beispiel]][[Kategorie:Kapitel:Multimedia-Programmierung:Beispiele]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rayza</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=Benutzer_Diskussion:Rayza&amp;diff=23776</id>
		<title>Benutzer Diskussion:Rayza</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=Benutzer_Diskussion:Rayza&amp;diff=23776"/>
		<updated>2012-10-10T00:15:42Z</updated>

		<summary type="html">&lt;p&gt;Rayza: /* Umstrukturierungsvorschlag Eclipse Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Umstrukturierungsvorschlag Eclipse Installation ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Qualität&lt;br /&gt;
|correctness         = 4&lt;br /&gt;
|extent              = 4&lt;br /&gt;
|numberOfReferences  = 5&lt;br /&gt;
|qualityOfReferences = 4&lt;br /&gt;
|conformance         = 4&lt;br /&gt;
}}&lt;br /&gt;
=Vorbemerkung=&lt;br /&gt;
&lt;br /&gt;
[[Eclipse]] ist für die Entwicklung von dynamische Web-Anwendungen mit und ohne einen Web-Server (wie z.B. Tomcat) recht gut geeignet.&lt;br /&gt;
&lt;br /&gt;
Für Windows werden folgende Annahmen gemacht: Auf der Partition C befindet sich das Windows-System und die Benutzerdaten. &lt;br /&gt;
Da Eclipse „out of the box“ läuft, wird es auf der Partition mit den Benutzerdaten installiert.&lt;br /&gt;
&lt;br /&gt;
==Android SDK (optional)==&lt;br /&gt;
Um mit Eclipse Apps für Android entwickeln zu können, wird das Android SDK benötigt.&lt;br /&gt;
Installieren Sie dies zuerst:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;http://developer.android.com/sdk/index.html&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;installer_r...-windows.exe&amp;lt;/code&amp;gt; herunterladen und ausführen. &lt;br /&gt;
* &#039;&#039;&#039;Wählen Sie einen kurzen Installationspfad ohne Leerzeichen aus, z.B. &amp;lt;code&amp;gt;C:\web\android-sdk&amp;lt;/code&amp;gt; (Windows) bzw. &amp;lt;code&amp;gt;/Benutzer/&#039;&#039;&#039;BENUTZERNAME&#039;&#039;&#039;/Programmierung/web/android-sdk&amp;lt;/code&amp;gt; (Mac OS), auf das Benutzer ohne Administrationsrechte zugreifen können.&#039;&#039;&#039; &lt;br /&gt;
* &amp;lt;code&amp;gt;Start SDK-Manager&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* APIs auswählen für die entwickelt werden soll (z.B. API 16, API 10 und Extras) ? &amp;lt;code&amp;gt;Install ... packages&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Accept All&amp;lt;/code&amp;gt; (rechts!) ? &amp;lt;code&amp;gt;Install&amp;lt;/code&amp;gt;, &#039;&#039;&#039;Achtung: Dieser Vorgang dauert länger. Sie können ihn später nachholen, indem Sie Eclipse starten und &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Android SDK Manager&amp;lt;/code&amp;gt; aufrufen&#039;&#039;&#039;&lt;br /&gt;
* Es erscheinen zwei Aufforderungen, sich einzuloggen. Diese können einfach weggeklickt werden. &lt;br /&gt;
* Aufgrund der vorherigen Aktion werden nicht alle Paktete installiert. Das ist jedoch nicht weiter schlimm.&lt;br /&gt;
* &#039;&#039;&#039;Abschließend sollte das Paket &amp;lt;code&amp;gt;Extras&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Google USB Driver&amp;lt;/code&amp;gt; separat installiert werden, sofern es nicht installiert wurde.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Vorgefertigete Eclipse-Instanzen (derzeit nur für Windows 7)==&lt;br /&gt;
&lt;br /&gt;
Für die in diesem Wiki beschriebenen Tutorien gibt es folgende vorgefertigte Eclipse-Instanzen:&lt;br /&gt;
* [http://glossar.hs-augsburg.de/svn/eclipse/eclipse_mmprog_x64.zip Eclipse für MMProg (Windows 7, 64 Bit)], [http://glossar.hs-augsburg.de/svn/eclipse/workspace_mmprog_x64.zip zugehöriger Workspace &amp;lt;code&amp;gt;workspace_mmprog&amp;lt;/code&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
Sie können diese beiden Dateien herunterladen und in einen Ordner Ihrer Wahl (am Besten &amp;lt;code&amp;gt;C:\web&amp;lt;/code&amp;gt;) entpacken.&lt;br /&gt;
Stellen Sie sicher, das das Android SDK bereits installiert wurde.&lt;br /&gt;
Rufen Sie nun &amp;lt;code&amp;gt;C:\web\eclipse\eclipse.exe&amp;lt;/code&amp;gt; auf und geben Sie &amp;lt;code&amp;gt;C:\web\workspace_mmprog&amp;lt;/code&amp;gt;&lt;br /&gt;
als Workspace an. &lt;br /&gt;
&lt;br /&gt;
Passen Sie nun den Workspace an Ihre Rechner-Umgebung an:&lt;br /&gt;
* Wenn Sie Ihren eigenen Workspace verwenden, so müssen Sie diesen noch [[Konfiguration von Eclipse|konfigurieren]].&lt;br /&gt;
* Wenn Sie den Workspace &amp;lt;code&amp;gt;workspace_mmprog&amp;lt;/code&amp;gt; verwenden, so müssen Sie noch ein Paar [[Konfiguration von Eclipse/Anpassungen_des_MMProg-Workspaces|Anpassungen]] vornehmen.&lt;br /&gt;
* Wenn Sie Eclipse vollkommen neu installieren, so sollten Sie die nachfolgenden Installationshinweise beachten.&lt;br /&gt;
&lt;br /&gt;
Tipp: Wenn man sich nicht manuell um das Updaten von Plugins kümmern möchte, empfiehlt es sich wo möglich Update Sites zu verwenden.&lt;br /&gt;
&lt;br /&gt;
=Installation von Eclipse=&lt;br /&gt;
&lt;br /&gt;
* Eclipse (Juno, 4.2) herunterladen:&lt;br /&gt;
** Eclipse IDE for Java EE Developers (32 Bit oder 64 Bit) [http://eclipse.org/downloads/ herunterladen]&lt;br /&gt;
* Zip-Datei nach &amp;lt;code&amp;gt;C:/web&amp;lt;/code&amp;gt; (Windows) bzw. &amp;lt;code&amp;gt;/Applications/&amp;lt;/code&amp;gt; (Mac OS) entpacken ? &amp;lt;code&amp;gt;C:/web/eclipse&amp;lt;/code&amp;gt; enthält Eclipse (&amp;lt;code&amp;gt;C:/web/eclipse/eclipse.exe&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;/Applications/eclipse/Eclipse.app&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=Diverse weitere Eclipse-Pakete installieren=&lt;br /&gt;
&lt;br /&gt;
==Kurze Variante (Eclipse auf Englisch)==&lt;br /&gt;
&lt;br /&gt;
===XML-Editor „Rinzo“, Subclipse und Aptana===&lt;br /&gt;
* [http://glossar.hs-augsburg.de/svn/eclipse/bookmarks.xml Diese XML-Datei] welche die Update-Sites enthält herunterladen.&lt;br /&gt;
* &amp;lt;code&amp;gt;Window&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Install/Update&amp;lt;/code&amp;gt; ausklappen ? &amp;lt;code&amp;gt;Available Software Sites&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Import&amp;lt;/code&amp;gt; ? Datei auswählen ? &amp;lt;code&amp;gt;Öffnen&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Help&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Install New Software...&amp;lt;/code&amp;gt;&lt;br /&gt;
* Work with: &amp;lt;code&amp;gt;--All Available Sites--&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Aptana Studio 3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Rinzo XML Editor&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;Subclipse&amp;lt;/code&amp;gt; auswählen ? &amp;lt;code&amp;gt;Next&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Next&amp;lt;/code&amp;gt; ? Lizenzen akzeptieren ? &amp;lt;code&amp;gt;Finish&amp;lt;/code&amp;gt;&lt;br /&gt;
* Warnung akzeptieren: &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* Neustarten-Frage bejahen: &amp;lt;code&amp;gt;Yes&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Lange Variante==&lt;br /&gt;
&lt;br /&gt;
===XML-Editor „Rinzo“===&lt;br /&gt;
Da in Eclipse ein guter XML-Editor fehlt, sollte ein geeigneter Editor installiert werden.&lt;br /&gt;
Die wirklich guten Editoren gibt es leider nicht als Open-Source-Software. Der XML-Editor &lt;br /&gt;
„Rinzo“ ist zwar nicht sehr leistungsfähig, dafür aber Open-Source-Software.&lt;br /&gt;
&lt;br /&gt;
Variante 1 (Update-Site):&lt;br /&gt;
* &amp;lt;code&amp;gt;C:\web\eclipse\eclipse.exe&amp;lt;/code&amp;gt;  bzw. &amp;lt;code&amp;gt;/Applications/eclipse&amp;lt;/code&amp;gt; starten&lt;br /&gt;
* &amp;lt;code&amp;gt;Hilfe&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Neue Software installieren...&amp;lt;/code&amp;gt;&lt;br /&gt;
* Work with: &amp;lt;code&amp;gt;&#039;&#039;http://editorxml.sourceforge.net/updates&#039;&#039;&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Hinzufügen&amp;lt;/code&amp;gt;&lt;br /&gt;
* Name: &amp;lt;code&amp;gt;&#039;&#039;Subclipse&#039;&#039;&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* Alle Pakete auswählen ? &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Ich akzeptiere ...&amp;lt;/code&amp;gt; auswählen ? &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
* Warnung akzeptieren: &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Jetzt neu starten&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Variante 2 (manuell):&lt;br /&gt;
* XML-Editor Rinzo [http://sourceforge.net/projects/editorxml/ herunterladen]&lt;br /&gt;
* Inhalt der ZIP-Datei in Verzeichnis &amp;lt;code&amp;gt;C:\web\eclipse\dropins&amp;lt;/code&amp;gt;  bzw. &amp;lt;code&amp;gt;/Applications/eclipse/dropins&amp;lt;/code&amp;gt; einfügen&lt;br /&gt;
* Eclipse neu starten&lt;br /&gt;
&lt;br /&gt;
===Subclipse===&lt;br /&gt;
Sublipse ist ein recht guter [[Subversion|Subversion-Client]] für Eclipse.&lt;br /&gt;
&lt;br /&gt;
Die meisten Eclipse-Pakete können sehr einfach mit Hilfe von Update-Sites &lt;br /&gt;
installiert werden, so auch Subclipse.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;C:\web\eclipse\eclipse.exe&amp;lt;/code&amp;gt;  bzw. &amp;lt;code&amp;gt;/Applications/eclipse&amp;lt;/code&amp;gt; starten&lt;br /&gt;
* &amp;lt;code&amp;gt;Hilfe&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Neue Software installieren...&amp;lt;/code&amp;gt;&lt;br /&gt;
* Work with: &amp;lt;code&amp;gt;&#039;&#039;http://subclipse.tigris.org/update_1.8.x&#039;&#039;&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Hinzufügen&amp;lt;/code&amp;gt;&lt;br /&gt;
* Name: &amp;lt;code&amp;gt;&#039;&#039;Subclipse&#039;&#039;&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* Alle Pakete auswählen ? &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Ich akzeptiere ...&amp;lt;/code&amp;gt; auswählen ? &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
* Warnung akzeptieren: &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Jetzt neu starten&amp;lt;/code&amp;gt;&lt;br /&gt;
* Haken vor &amp;lt;code&amp;gt;Report usage ...&amp;lt;/code&amp;gt; entfernen.&lt;br /&gt;
* &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Aptana===&lt;br /&gt;
&lt;br /&gt;
Aptana ist ein Eclipse-Plugin zur Entwicklung von HTML/JavaScript-Anwendungen.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;C:\web\eclipse\eclipse.exe&amp;lt;/code&amp;gt;  bzw. &amp;lt;code&amp;gt;/Applications/eclipse&amp;lt;/code&amp;gt;  starten&lt;br /&gt;
* &amp;lt;code&amp;gt;Hilfe&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Neue Software installieren...&amp;lt;/code&amp;gt;&lt;br /&gt;
* Work with: &amp;lt;code&amp;gt;&#039;&#039;http://download.aptana.com/studio3/plugin/install&#039;&#039;&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Hinzufügen&amp;lt;/code&amp;gt;&lt;br /&gt;
* Name: &amp;lt;code&amp;gt;&#039;&#039;Aptana&#039;&#039;&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* Alle Pakete auswählen ? &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Ich akzeptiere ...&amp;lt;/code&amp;gt; auswählen ? &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
* Warnung akzeptieren: &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Jetzt neu starten&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wem das Aptana-HTML-Farbschema nicht gefällt, der kann dieses ändern:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Benutzervorgaben&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Aptana Studio&amp;lt;/code&amp;gt; aufklappen ? &amp;lt;code&amp;gt;Themes&amp;lt;/code&amp;gt; ? Drop-Down-Men+ (Inhalt &amp;lt;code&amp;gt;Aptana Studio)&amp;lt;/code&amp;gt; öffnen und neues Farbschema wählen ?&amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==YUI Compressor ==&lt;br /&gt;
&lt;br /&gt;
* YUI Compressor ([http://yuilibrary.com/download/yuicompressor/ yuicompressor-2.x.x.zip]) herunterladen&lt;br /&gt;
* yuicompressor-2.x.x.zip in den Ordner &amp;lt;code&amp;gt;C:\web\eclipse\dropins&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;/Applications/eclipse/dropins&amp;lt;/code&amp;gt; entpacken&lt;br /&gt;
* Ordner &amp;lt;code&amp;gt;C:\web\eclipse\dropins\yuicompressor&amp;lt;/code&amp;gt;  bzw. &amp;lt;code&amp;gt;/Applications/eclipse/dropins/yuicompressor&amp;lt;/code&amp;gt; erstellen&lt;br /&gt;
* In den Ordner &amp;lt;code&amp;gt;C:\web\eclipse\dropins\yuicompressor&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;/Applications/eclipse/dropins/yuicompressor&amp;lt;/code&amp;gt; die Datei [http://glossar.hs-augsburg.de/svn/eclipse/build.xml &amp;lt;code&amp;gt;build.xml&amp;lt;/code&amp;gt;]&amp;lt;ref&amp;gt;vgl. {{Quelle|Santos, S. (2009): Combine and minimize JavaScript and CSS files for faster loading}}&amp;lt;/ref&amp;gt; einfügen&lt;br /&gt;
&lt;br /&gt;
Passen Sie in der Datei &amp;lt;code&amp;gt;build.xml&amp;lt;/code&amp;gt; den Pfad und Versionnummer des YUI Compressors in den beiden Zeilen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
Windows...&lt;br /&gt;
  &amp;lt;property name=&amp;quot;BUILD_DIR&amp;quot; value=&amp;quot;C:/web/eclipse/dropins/yuicompressor-2.4.7/build&amp;quot; description=&amp;quot;Files needed to build&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;property name=&amp;quot;YUI&amp;quot; value=&amp;quot;${BUILD_DIR}/yuicompressor-2.4.7.jar&amp;quot; description=&amp;quot;YUICompressor&amp;quot; /&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
OS X...&lt;br /&gt;
  &amp;lt;property name=&amp;quot;BUILD_DIR&amp;quot; value=&amp;quot;/Applications/eclipse/dropins/yuicompressor-2.4.7/build&amp;quot; description=&amp;quot;Files needed to build&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;property name=&amp;quot;YUI&amp;quot; value=&amp;quot;${BUILD_DIR}/yuicompressor-2.4.7.jar&amp;quot; description=&amp;quot;YUICompressor&amp;quot; /&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
an Ihre Gegebenheiten an.&lt;br /&gt;
&lt;br /&gt;
==Optionale Pakete==&lt;br /&gt;
Bei folgende Pakete macht nur in bestimmten Situationen Sinn sie zu installieren.&lt;br /&gt;
&lt;br /&gt;
===ADT===&lt;br /&gt;
ADT ist ein Eclipse-Plugin, dass die Entwicklung von [[Java]]-Anwendungen für [[Android]]-[[Smarphone]]s ermöglicht.&lt;br /&gt;
Voraussetzung ist, dass das Android SDK installiert worden ist.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;C:\web\eclipse\eclipse.exe&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;/Applications/eclipse&amp;lt;/code&amp;gt; starten&lt;br /&gt;
* &amp;lt;code&amp;gt;Hilfe&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Neue Software installieren...&amp;lt;/code&amp;gt;&lt;br /&gt;
* Work with: &amp;lt;code&amp;gt;&#039;&#039;https://dl-ssl.google.com/android/eclipse/&#039;&#039;&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Hinzufügen&amp;lt;/code&amp;gt;&lt;br /&gt;
* Name: &amp;lt;code&amp;gt;&#039;&#039;ADT&#039;&#039;&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* Alle Pakete auswählen ? &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Ich akzeptiere ...&amp;lt;/code&amp;gt; auswählen ? &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
* Warnung akzeptieren: &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Jetzt neu starten&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Benutzervorgaben&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Android&amp;lt;/code&amp;gt; &lt;br /&gt;
* Wenn dieser Menü-Punkt das erste Mal aufgerufen wird, fragt Eclipse nach, ob ADT-Benutzungsstatistiken an Google gesendet werden sollen. Hier würde ich das ensprechende Häckchen entfernen ? Auf jeden Fall muss &amp;lt;code&amp;gt;Proceed&amp;lt;/code&amp;gt; angeklickt werden.&lt;br /&gt;
* SDK Location: &amp;lt;code&amp;gt;C:\web\android-sdk&amp;lt;/code&amp;gt;  bzw. &amp;lt;code&amp;gt;/Benutzer/&#039;&#039;&#039;BENUTZERNAME&#039;&#039;&#039;/Programmierung/web/android-sdk&amp;lt;/code&amp;gt;  (Installationsverzeichnis des SDK-Managers;&#039;&#039;&#039;der Pfad darf keine Leerzeichen enthalten&#039;&#039;&#039;) ? &amp;lt;code&amp;gt;Anwenden&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Android SDK Manager&amp;lt;/code&amp;gt; starten &lt;br /&gt;
* &amp;lt;code&amp;gt;Android SDK Platformtools&amp;lt;/code&amp;gt; installieren (falls diese nicht bereits installiert worden sind)&lt;br /&gt;
&lt;br /&gt;
===Deutsche Sprachpakete installieren===&lt;br /&gt;
Das [http://www.eclipse.org/babel/downloads.php Eclipse Babel Project] stellt diverse Sprach-Pakete zu Verfügung, die allerdings noch nicht ganz fertiggestellt sind.&lt;br /&gt;
&lt;br /&gt;
# Eclipse starten (&amp;lt;code&amp;gt;C:\web\eclipse\eclipse.exe&amp;lt;/code&amp;gt;  bzw. &amp;lt;code&amp;gt;/Applications/eclipse/Eclipse.app&amp;lt;/code&amp;gt;)&lt;br /&gt;
# Wählen Sie einen geeignet Workspace aus (z.B. &amp;lt;code&amp;gt;C:\web\mmprog&amp;lt;/code&amp;gt;  bzw. &amp;lt;code&amp;gt;/Benutzer/&#039;&#039;&#039;BENUTZERNAME&#039;&#039;&#039;/Studium/mmprog&amp;lt;/code&amp;gt;; auf den Laborrechnern müssen Sie Ihr Home-Verzeichnis nehmen, nicht den Desktop!)&lt;br /&gt;
# &amp;lt;code&amp;gt;Help&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Install New Software&amp;lt;/code&amp;gt;&lt;br /&gt;
# Work with: &amp;lt;code&amp;gt;&#039;&#039;http://download.eclipse.org/technology/babel/update-site/R0.10.0/juno&#039;&#039;&amp;lt;/code&amp;gt; (bei Eclipse Indigo: &amp;lt;code&amp;gt;&#039;&#039;http://archive.eclipse.org/technology/babel/update-site/R0.9.1/indigo&#039;&#039;&amp;lt;/code&amp;gt;) ? &amp;lt;code&amp;gt;Add&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;Name: &#039;&#039;Babel&#039;&#039;&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
# (lange) warten bis &amp;lt;code&amp;gt;Pending&amp;lt;/code&amp;gt; verschwindet&lt;br /&gt;
# &amp;lt;code&amp;gt;Babel Language Packs in German&amp;lt;/code&amp;gt; selektieren ? &amp;lt;code&amp;gt;Next&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Next&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;I accept ...&amp;lt;/code&amp;gt; selektieren ? &amp;lt;code&amp;gt;Finish&amp;lt;/code&amp;gt;&lt;br /&gt;
# Warnung akzeptieren: &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;Restart Now&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Häufig sind die Babel Eclipse Server überlastet und eine manuelle Installation des Sprachpakets ist optional möglich:&lt;br /&gt;
# Downloaden des Pakets &amp;lt;code&amp;gt;&#039;&#039;http://download.eclipse.org/technology/babel/babel_language_packs/R0.10.0/juno/juno.php#de&#039;&#039;&amp;lt;/code&amp;gt;  (vgl. &amp;lt;code&amp;gt;http://www.eclipse.org/babel/downloads.php&amp;lt;/code&amp;gt;)&lt;br /&gt;
# &amp;lt;code&amp;gt;BabelLanguagePack-eclipse-de_4.2.0.v20120721043402.zip&amp;lt;/code&amp;gt; herunterladen&lt;br /&gt;
# Die beiden Ordner, die im Ordner &amp;lt;code&amp;gt;eclipse&amp;lt;/code&amp;gt; des ZIP-Archivs enthalten sind, in den Eclipse-Programm-Ordner &amp;lt;code&amp;gt;C:\web\eclipse&amp;lt;/code&amp;gt;&lt;br /&gt;
# Bei OSX Vorsicht! - Inhalte der Ordner &#039;&#039;&#039;features&#039;&#039;&#039; und &#039;&#039;&#039;plugins&#039;&#039;&#039; in die jeweiligen Ordner &amp;lt;code&amp;gt;/Applications/eclipse/features&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;/Applications/eclipse/plugins&amp;lt;/code&amp;gt; kopieren&lt;br /&gt;
# Eclipse neu starten &lt;br /&gt;
&lt;br /&gt;
====Deutsche Rechtschreibprüfung installieren====&lt;br /&gt;
# [http://a-weinert.de/frame4j/downloads/de_DE.dic de_DE.dic] (von Albrecht Weinert) herunterladen und unter &amp;lt;code&amp;gt;C:/web/eclipse/dropins&amp;lt;/code&amp;gt;  bzw. &amp;lt;code&amp;gt;/Applications/eclipse/dropins&amp;lt;/code&amp;gt; speichern&lt;br /&gt;
# &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Benutzervorgaben&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Allgemein&amp;lt;/code&amp;gt; aufklappen ? &amp;lt;code&amp;gt;Editoren&amp;lt;/code&amp;gt; aufklappen ? &amp;lt;code&amp;gt;Texteditoren&amp;lt;/code&amp;gt; aufklappen ? &amp;lt;code&amp;gt;Schreibprüfung selektieren&amp;lt;/code&amp;gt; &lt;br /&gt;
# Benutzerdefiniertes Wöerterbuch: &amp;lt;code&amp;gt;Durchsuchen&amp;lt;/code&amp;gt; und die Datei &amp;lt;code&amp;gt;de_DE.dic&amp;lt;/code&amp;gt; selektieren (bzw. &amp;lt;code&amp;gt;${eclipse_home}\dropins\de_DE.dic&amp;lt;/code&amp;gt; eintragen)&lt;br /&gt;
# Codierung: &amp;lt;code&amp;gt;Sonstige&amp;lt;/code&amp;gt; anklicken ? &amp;lt;code&amp;gt;UTF-8&amp;lt;/code&amp;gt; wählen&lt;br /&gt;
# &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tipp: Wenn Sie mit der Maus ein rot unterringeltes Wort anklicken und anschließend &amp;lt;code&amp;gt;Strg-1&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;Ctrl-1&amp;lt;/code&amp;gt;) drücken,&lt;br /&gt;
können Sie das Wort ins Wörterbuch einfügen oder andere Aktionen durchführen, damit ein vermeintlicher Rechtschreibfehler nicht mehr angezeigt wird.&lt;br /&gt;
&lt;br /&gt;
==Installation des Flash Builder (optional)==&lt;br /&gt;
&lt;br /&gt;
[[Flash Builder]] ist eine kommerzielle Software, basierend auf Eclipse Indigo, zum Entwickeln von [[Flash]]-Anwendungen.&lt;br /&gt;
Man kann [http://www.adobe.com/cfusion/tdrc/index.cfm?product=flash_builder&amp;amp;loc=de Flash Builder 4.6] (nach erfolgreicher Registrierung) als 60-Tage-Testlizenz herunterladen.&lt;br /&gt;
&lt;br /&gt;
* [http://www.adobe.com/cfusion/tdrc/index.cfm?product=flash_builder&amp;amp;loc=de Flash Builder 4.6] herunterlanden&lt;br /&gt;
* Eclipse und Browser beenden&lt;br /&gt;
* FlashBuilder_4_6_LS10.exe ausführen und [http://kb2.adobe.com/de/releasenotes/921/cpsid_92180.html#main_Install%20your%20software Flash Builder installieren]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Als Studierender&#039;&#039;&#039; erhält man eine &#039;&#039;&#039;kostenlose Lizenz&#039;&#039;&#039; für den Flash Builder, indem man im [http://www.adobe.com/de/devnet/flex/free/index.html Adobe Flex Developer Center] mit seinen persönliche Daten und JPEG-Kopie der Immatrikulationsbescheinigung Lizenz anfordert. Diese wird einem dann per E-Mail zugeschickt.&lt;br /&gt;
&lt;br /&gt;
Die meisten der nachfolgenden Installations- und Konfigurationsvorschläge funktionieren auch für den Flash-Builder.&lt;br /&gt;
Sie sollten allerdings nur Subclipse und evtl. Rinzo installieren. Die anderen Pakete sind für eine Flash/ActionScript-Entwicklung&lt;br /&gt;
unnötig.&lt;br /&gt;
&lt;br /&gt;
Beachten Sie, dass der Flash Builder auf &#039;&#039;Eclipse Indigo&#039;&#039;, der Vorgänger-Version von &#039;&#039;Eclipse Juno&#039;&#039;, basiert und daher &lt;br /&gt;
die Installationsschritte leicht abweichen können.&lt;br /&gt;
&lt;br /&gt;
Zu guter Letzt sollten Sie den Flash Builder [[Konfiguration von Eclipse|konfigurieren]].&lt;br /&gt;
&lt;br /&gt;
=Eclipse konfigurieren=&lt;br /&gt;
&lt;br /&gt;
Befolgen Sie die Anweisungen von „[[Konfiguration von Eclipse]]“.&lt;br /&gt;
&lt;br /&gt;
=Integration von Tomcat=&lt;br /&gt;
&lt;br /&gt;
Tomcat wird folgendermaßen in Eclipse eingebunden:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;Datei&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Neu&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Andere&amp;lt;/code&amp;gt;&lt;br /&gt;
* Klick auf Dreieck vor &amp;lt;code&amp;gt;Server&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Server&amp;lt;/code&amp;gt;&lt;br /&gt;
* Klick auf Dreieck vor &amp;lt;code&amp;gt;Apache&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Tomcat Version 7.0 - Server&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;Fertig stellen&amp;lt;/code&amp;gt; (je nachdem, welcher Button klickbar ist)&lt;br /&gt;
* Tomcat-Installationsverzeichnis angeben: &amp;lt;code&amp;gt;C:\web\tomcat&amp;lt;/code&amp;gt;&lt;br /&gt;
* Klick auf &amp;lt;code&amp;gt;Fertig stellen&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tomcat-Projekt benötigen eine Laufzeit-Umgebung, in der die eigentlichen Web-Auftritte gespeicher werden. Hierfür gibt es mehrere Möglichkeiten:&lt;br /&gt;
* das Tomcat-Webapps-Verzeichnis (&amp;lt;code&amp;gt;C:\web\tomcat\webapps&amp;lt;/code&amp;gt;)&lt;br /&gt;
* ein spezieller Ordner im versteckten Verzeichnis  &amp;lt;code&amp;gt;C:\web\workspace\.metadata&amp;lt;/code&amp;gt; (schwer zu finden, nicht zu empfehlen)&lt;br /&gt;
* ein Eclipse-Projekt namens Tomcat, auf dessen Inhalt auch direkt über Eclipse zugegriffen werden kann&lt;br /&gt;
&lt;br /&gt;
Hier wird die dritte Möglichkeit verwendet:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;Datei&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Neu&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Andere&amp;lt;/code&amp;gt;&lt;br /&gt;
* Klick auf Dreieck vor &amp;lt;code&amp;gt;Allgemein&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Projekt&amp;lt;/code&amp;gt;&lt;br /&gt;
* Projektname: &amp;lt;code&amp;gt;Tomcat&amp;lt;/code&amp;gt;&lt;br /&gt;
* Tomcat konfigurieren: &amp;lt;code&amp;gt;Server&amp;lt;/code&amp;gt; ? Doppelklick &amp;lt;code&amp;gt;Tomcat Version 7.0 - Server&amp;lt;/code&amp;gt;&lt;br /&gt;
* Tomcat konfigurieren: &amp;lt;code&amp;gt;Use custom Location&amp;lt;/code&amp;gt; ? Server path: &amp;lt;code&amp;gt;Tomcat&amp;lt;/code&amp;gt; (das ist das zuvor angelegte Projekt), Deploy path: &amp;lt;code&amp;gt;webapps&amp;lt;/code&amp;gt;&lt;br /&gt;
* Tomcat ist einsatzbereit: &amp;lt;code&amp;gt;Server&amp;lt;/code&amp;gt; ? Rechtsklick &amp;lt;code&amp;gt;Tomcat Version 7.0 - Server&amp;lt;/code&amp;gt; oder Steuermenü in der Serverleist: Tomcat starten/stoppen etc.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;350&amp;quot; heights=&amp;quot;250&amp;quot; perrow=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
  Medium:Eclipse_Tomcat_01.png | Neue Tomcat-Umgebung erstellen: &amp;lt;code&amp;gt;Andere&amp;lt;/code&amp;gt; wählen&lt;br /&gt;
  Medium:Eclipse_Tomcat_02.png | Neue Tomcat-Umgebung erstellen: &amp;lt;code&amp;gt;Server&amp;lt;/code&amp;gt; wählen&lt;br /&gt;
  Medium:Eclipse_Tomcat_03.png | Neue Tomcat-Umgebung erstellen: &amp;lt;code&amp;gt;Tomcat 6 &amp;lt;/code&amp;gt; wählen&lt;br /&gt;
  Medium:Eclipse_Tomcat_04.png | Pfad zu Tomcat-Server angeben&lt;br /&gt;
  Medium:Eclipse_Tomcat_01.png | Generischs Projekt erstellen: &amp;lt;code&amp;gt;Andere&amp;lt;/code&amp;gt; wählen&lt;br /&gt;
  Medium:Eclipse_Tomcat_05.png | Generische Projekt erstellen: &amp;lt;code&amp;gt;Projekt&amp;lt;/code&amp;gt; wählen&lt;br /&gt;
  Medium:Eclipse_Tomcat_06.png | Projektname &amp;lt;code&amp;gt;Tomcat&amp;lt;/code&amp;gt;&lt;br /&gt;
  Medium:Eclipse_Tomcat_07.png | Tomcat konfigurieren und mit &amp;lt;code&amp;gt;Strg-S&amp;lt;/code&amp;gt; speichern&lt;br /&gt;
  Medium:Eclipse_Tomcat_08.png | Tomcat verwalten: starten/stoppen/etc.&lt;br /&gt;
  Medium:Eclipse_Tomcat_09.png | Tomcat-Log-Datei: Der Start war erfolgreich&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Integration von Apache=&lt;br /&gt;
{{TBD}}&lt;br /&gt;
&lt;br /&gt;
=Quellen=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; {{Quelle|Kowarschick, W.: Content-Management}}&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; {{Quelle|Kowarschick, W.: Multimedia-Datenbanksysteme}}&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; {{Quelle|Kowarschick, W.: Multimedia-Programmierung}}&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
Alle übrigen Quellen wurden direkt im Text angegeben.&lt;br /&gt;
[[Kategorie:Kapitel:Web-Programmierung]][[Kategorie:Web-Programmierung-HowTo]]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== bookmarks.xml ==&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;bookmarks&amp;gt;&lt;br /&gt;
   &amp;lt;site url=&amp;quot;http://download.aptana.com/studio3/plugin/install&amp;quot; selected=&amp;quot;true&amp;quot; name=&amp;quot;Aptana Studio 3&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;site url=&amp;quot;http://editorxml.sourceforge.net/updates/&amp;quot; selected=&amp;quot;true&amp;quot; name=&amp;quot;Rinzo XML Editor&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;site url=&amp;quot;http://subclipse.tigris.org/update_1.8.x&amp;quot; selected=&amp;quot;true&amp;quot; name=&amp;quot;Subclipse 1.8.x Update Site&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bookmarks&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rayza</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=Benutzer_Diskussion:Rayza&amp;diff=23775</id>
		<title>Benutzer Diskussion:Rayza</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=Benutzer_Diskussion:Rayza&amp;diff=23775"/>
		<updated>2012-10-10T00:14:34Z</updated>

		<summary type="html">&lt;p&gt;Rayza: /* Umstrukturierungsvorschlag Eclipse Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Umstrukturierungsvorschlag Eclipse Installation ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Qualität&lt;br /&gt;
|correctness         = 4&lt;br /&gt;
|extent              = 4&lt;br /&gt;
|numberOfReferences  = 5&lt;br /&gt;
|qualityOfReferences = 4&lt;br /&gt;
|conformance         = 4&lt;br /&gt;
}}&lt;br /&gt;
=Vorbemerkung=&lt;br /&gt;
&lt;br /&gt;
[[Eclipse]] ist für die Entwicklung von dynamische Web-Anwendungen mit und ohne einen Web-Server (wie z.B. Tomcat) recht gut geeignet.&lt;br /&gt;
&lt;br /&gt;
Für Windows werden folgende Annahmen gemacht: Auf der Partition C befindet sich das Windows-System und die Benutzerdaten. &lt;br /&gt;
Da Eclipse „out of the box“ läuft, wird es auf der Partition mit den Benutzerdaten installiert.&lt;br /&gt;
&lt;br /&gt;
==Android SDK (optional)==&lt;br /&gt;
Um mit Eclipse Apps für Android entwickeln zu können, wird das Android SDK benötigt.&lt;br /&gt;
Installieren Sie dies zuerst:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;http://developer.android.com/sdk/index.html&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;installer_r...-windows.exe&amp;lt;/code&amp;gt; herunterladen und ausführen. &lt;br /&gt;
* &#039;&#039;&#039;Wählen Sie einen kurzen Installationspfad ohne Leerzeichen aus, z.B. &amp;lt;code&amp;gt;C:\web\android-sdk&amp;lt;/code&amp;gt; (Windows) bzw. &amp;lt;code&amp;gt;/Benutzer/&#039;&#039;&#039;BENUTZERNAME&#039;&#039;&#039;/Programmierung/web/android-sdk&amp;lt;/code&amp;gt; (Mac OS), auf das Benutzer ohne Administrationsrechte zugreifen können.&#039;&#039;&#039; &lt;br /&gt;
* &amp;lt;code&amp;gt;Start SDK-Manager&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* APIs auswählen für die entwickelt werden soll (z.B. API 16, API 10 und Extras) ? &amp;lt;code&amp;gt;Install ... packages&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Accept All&amp;lt;/code&amp;gt; (rechts!) ? &amp;lt;code&amp;gt;Install&amp;lt;/code&amp;gt;, &#039;&#039;&#039;Achtung: Dieser Vorgang dauert länger. Sie können ihn später nachholen, indem Sie Eclipse starten und &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Android SDK Manager&amp;lt;/code&amp;gt; aufrufen&#039;&#039;&#039;&lt;br /&gt;
* Es erscheinen zwei Aufforderungen, sich einzuloggen. Diese können einfach weggeklickt werden. &lt;br /&gt;
* Aufgrund der vorherigen Aktion werden nicht alle Paktete installiert. Das ist jedoch nicht weiter schlimm.&lt;br /&gt;
* &#039;&#039;&#039;Abschließend sollte das Paket &amp;lt;code&amp;gt;Extras&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Google USB Driver&amp;lt;/code&amp;gt; separat installiert werden, sofern es nicht installiert wurde.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Vorgefertigete Eclipse-Instanzen (derzeit nur für Windows 7)==&lt;br /&gt;
&lt;br /&gt;
Für die in diesem Wiki beschriebenen Tutorien gibt es folgende vorgefertigte Eclipse-Instanzen:&lt;br /&gt;
* [http://glossar.hs-augsburg.de/svn/eclipse/eclipse_mmprog_x64.zip Eclipse für MMProg (Windows 7, 64 Bit)], [http://glossar.hs-augsburg.de/svn/eclipse/workspace_mmprog_x64.zip zugehöriger Workspace &amp;lt;code&amp;gt;workspace_mmprog&amp;lt;/code&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
Sie können diese beiden Dateien herunterladen und in einen Ordner Ihrer Wahl (am Besten &amp;lt;code&amp;gt;C:\web&amp;lt;/code&amp;gt;) entpacken.&lt;br /&gt;
Stellen Sie sicher, das das Android SDK bereits installiert wurde.&lt;br /&gt;
Rufen Sie nun &amp;lt;code&amp;gt;C:\web\eclipse\eclipse.exe&amp;lt;/code&amp;gt; auf und geben Sie &amp;lt;code&amp;gt;C:\web\workspace_mmprog&amp;lt;/code&amp;gt;&lt;br /&gt;
als Workspace an. &lt;br /&gt;
&lt;br /&gt;
Passen Sie nun den Workspace an Ihre Rechner-Umgebung an:&lt;br /&gt;
* Wenn Sie Ihren eigenen Workspace verwenden, so müssen Sie diesen noch [[Konfiguration von Eclipse|konfigurieren]].&lt;br /&gt;
* Wenn Sie den Workspace &amp;lt;code&amp;gt;workspace_mmprog&amp;lt;/code&amp;gt; verwenden, so müssen Sie noch ein Paar [[Konfiguration von Eclipse/Anpassungen_des_MMProg-Workspaces|Anpassungen]] vornehmen.&lt;br /&gt;
* Wenn Sie Eclipse vollkommen neu installieren, so sollten Sie die nachfolgenden Installationshinweise beachten.&lt;br /&gt;
&lt;br /&gt;
Tipp: Wenn man sich nicht manuell um das Updaten von Plugins kümmern möchte, empfiehlt es sich wo möglich Update Sites zu verwenden.&lt;br /&gt;
&lt;br /&gt;
=Installation von Eclipse=&lt;br /&gt;
&lt;br /&gt;
* Eclipse (Juno, 4.2) herunterladen:&lt;br /&gt;
** Eclipse IDE for Java EE Developers (32 Bit oder 64 Bit) [http://eclipse.org/downloads/ herunterladen]&lt;br /&gt;
* Zip-Datei nach &amp;lt;code&amp;gt;C:/web&amp;lt;/code&amp;gt; (Windows) bzw. &amp;lt;code&amp;gt;/Applications/&amp;lt;/code&amp;gt; (Mac OS) entpacken ? &amp;lt;code&amp;gt;C:/web/eclipse&amp;lt;/code&amp;gt; enthält Eclipse (&amp;lt;code&amp;gt;C:/web/eclipse/eclipse.exe&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;/Applications/eclipse/Eclipse.app&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=Diverse weitere Eclipse-Pakete installieren=&lt;br /&gt;
&lt;br /&gt;
==Kurze Variante (Eclipse auf Englisch)==&lt;br /&gt;
&lt;br /&gt;
===XML-Editor „Rinzo“, Subclipse und Aptana===&lt;br /&gt;
* Diese [http://glossar.hs-augsburg.de/svn/eclipse/bookmarks.xml XML-Datei] mit den Update-Sites herunterladen.&lt;br /&gt;
* &amp;lt;code&amp;gt;Window&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Install/Update&amp;lt;/code&amp;gt; ausklappen ? &amp;lt;code&amp;gt;Available Software Sites&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Import&amp;lt;/code&amp;gt; ? Datei auswählen ? &amp;lt;code&amp;gt;Öffnen&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Help&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Install New Software...&amp;lt;/code&amp;gt;&lt;br /&gt;
* Work with: &amp;lt;code&amp;gt;--All Available Sites--&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Aptana Studio 3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Rinzo XML Editor&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;Subclipse&amp;lt;/code&amp;gt; auswählen ? &amp;lt;code&amp;gt;Next&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Next&amp;lt;/code&amp;gt; ? Lizenzen akzeptieren ? &amp;lt;code&amp;gt;Finish&amp;lt;/code&amp;gt;&lt;br /&gt;
* Warnung akzeptieren: &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* Neustarten-Frage bejahen: &amp;lt;code&amp;gt;Yes&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Lange Variante==&lt;br /&gt;
&lt;br /&gt;
===XML-Editor „Rinzo“===&lt;br /&gt;
Da in Eclipse ein guter XML-Editor fehlt, sollte ein geeigneter Editor installiert werden.&lt;br /&gt;
Die wirklich guten Editoren gibt es leider nicht als Open-Source-Software. Der XML-Editor &lt;br /&gt;
„Rinzo“ ist zwar nicht sehr leistungsfähig, dafür aber Open-Source-Software.&lt;br /&gt;
&lt;br /&gt;
Variante 1 (Update-Site):&lt;br /&gt;
* &amp;lt;code&amp;gt;C:\web\eclipse\eclipse.exe&amp;lt;/code&amp;gt;  bzw. &amp;lt;code&amp;gt;/Applications/eclipse&amp;lt;/code&amp;gt; starten&lt;br /&gt;
* &amp;lt;code&amp;gt;Hilfe&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Neue Software installieren...&amp;lt;/code&amp;gt;&lt;br /&gt;
* Work with: &amp;lt;code&amp;gt;&#039;&#039;http://editorxml.sourceforge.net/updates&#039;&#039;&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Hinzufügen&amp;lt;/code&amp;gt;&lt;br /&gt;
* Name: &amp;lt;code&amp;gt;&#039;&#039;Subclipse&#039;&#039;&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* Alle Pakete auswählen ? &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Ich akzeptiere ...&amp;lt;/code&amp;gt; auswählen ? &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
* Warnung akzeptieren: &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Jetzt neu starten&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Variante 2 (manuell):&lt;br /&gt;
* XML-Editor Rinzo [http://sourceforge.net/projects/editorxml/ herunterladen]&lt;br /&gt;
* Inhalt der ZIP-Datei in Verzeichnis &amp;lt;code&amp;gt;C:\web\eclipse\dropins&amp;lt;/code&amp;gt;  bzw. &amp;lt;code&amp;gt;/Applications/eclipse/dropins&amp;lt;/code&amp;gt; einfügen&lt;br /&gt;
* Eclipse neu starten&lt;br /&gt;
&lt;br /&gt;
===Subclipse===&lt;br /&gt;
Sublipse ist ein recht guter [[Subversion|Subversion-Client]] für Eclipse.&lt;br /&gt;
&lt;br /&gt;
Die meisten Eclipse-Pakete können sehr einfach mit Hilfe von Update-Sites &lt;br /&gt;
installiert werden, so auch Subclipse.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;C:\web\eclipse\eclipse.exe&amp;lt;/code&amp;gt;  bzw. &amp;lt;code&amp;gt;/Applications/eclipse&amp;lt;/code&amp;gt; starten&lt;br /&gt;
* &amp;lt;code&amp;gt;Hilfe&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Neue Software installieren...&amp;lt;/code&amp;gt;&lt;br /&gt;
* Work with: &amp;lt;code&amp;gt;&#039;&#039;http://subclipse.tigris.org/update_1.8.x&#039;&#039;&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Hinzufügen&amp;lt;/code&amp;gt;&lt;br /&gt;
* Name: &amp;lt;code&amp;gt;&#039;&#039;Subclipse&#039;&#039;&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* Alle Pakete auswählen ? &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Ich akzeptiere ...&amp;lt;/code&amp;gt; auswählen ? &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
* Warnung akzeptieren: &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Jetzt neu starten&amp;lt;/code&amp;gt;&lt;br /&gt;
* Haken vor &amp;lt;code&amp;gt;Report usage ...&amp;lt;/code&amp;gt; entfernen.&lt;br /&gt;
* &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Aptana===&lt;br /&gt;
&lt;br /&gt;
Aptana ist ein Eclipse-Plugin zur Entwicklung von HTML/JavaScript-Anwendungen.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;C:\web\eclipse\eclipse.exe&amp;lt;/code&amp;gt;  bzw. &amp;lt;code&amp;gt;/Applications/eclipse&amp;lt;/code&amp;gt;  starten&lt;br /&gt;
* &amp;lt;code&amp;gt;Hilfe&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Neue Software installieren...&amp;lt;/code&amp;gt;&lt;br /&gt;
* Work with: &amp;lt;code&amp;gt;&#039;&#039;http://download.aptana.com/studio3/plugin/install&#039;&#039;&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Hinzufügen&amp;lt;/code&amp;gt;&lt;br /&gt;
* Name: &amp;lt;code&amp;gt;&#039;&#039;Aptana&#039;&#039;&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* Alle Pakete auswählen ? &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Ich akzeptiere ...&amp;lt;/code&amp;gt; auswählen ? &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
* Warnung akzeptieren: &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Jetzt neu starten&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wem das Aptana-HTML-Farbschema nicht gefällt, der kann dieses ändern:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Benutzervorgaben&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Aptana Studio&amp;lt;/code&amp;gt; aufklappen ? &amp;lt;code&amp;gt;Themes&amp;lt;/code&amp;gt; ? Drop-Down-Men+ (Inhalt &amp;lt;code&amp;gt;Aptana Studio)&amp;lt;/code&amp;gt; öffnen und neues Farbschema wählen ?&amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==YUI Compressor ==&lt;br /&gt;
&lt;br /&gt;
* YUI Compressor ([http://yuilibrary.com/download/yuicompressor/ yuicompressor-2.x.x.zip]) herunterladen&lt;br /&gt;
* yuicompressor-2.x.x.zip in den Ordner &amp;lt;code&amp;gt;C:\web\eclipse\dropins&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;/Applications/eclipse/dropins&amp;lt;/code&amp;gt; entpacken&lt;br /&gt;
* Ordner &amp;lt;code&amp;gt;C:\web\eclipse\dropins\yuicompressor&amp;lt;/code&amp;gt;  bzw. &amp;lt;code&amp;gt;/Applications/eclipse/dropins/yuicompressor&amp;lt;/code&amp;gt; erstellen&lt;br /&gt;
* In den Ordner &amp;lt;code&amp;gt;C:\web\eclipse\dropins\yuicompressor&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;/Applications/eclipse/dropins/yuicompressor&amp;lt;/code&amp;gt; die Datei [http://glossar.hs-augsburg.de/svn/eclipse/build.xml &amp;lt;code&amp;gt;build.xml&amp;lt;/code&amp;gt;]&amp;lt;ref&amp;gt;vgl. {{Quelle|Santos, S. (2009): Combine and minimize JavaScript and CSS files for faster loading}}&amp;lt;/ref&amp;gt; einfügen&lt;br /&gt;
&lt;br /&gt;
Passen Sie in der Datei &amp;lt;code&amp;gt;build.xml&amp;lt;/code&amp;gt; den Pfad und Versionnummer des YUI Compressors in den beiden Zeilen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
Windows...&lt;br /&gt;
  &amp;lt;property name=&amp;quot;BUILD_DIR&amp;quot; value=&amp;quot;C:/web/eclipse/dropins/yuicompressor-2.4.7/build&amp;quot; description=&amp;quot;Files needed to build&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;property name=&amp;quot;YUI&amp;quot; value=&amp;quot;${BUILD_DIR}/yuicompressor-2.4.7.jar&amp;quot; description=&amp;quot;YUICompressor&amp;quot; /&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
OS X...&lt;br /&gt;
  &amp;lt;property name=&amp;quot;BUILD_DIR&amp;quot; value=&amp;quot;/Applications/eclipse/dropins/yuicompressor-2.4.7/build&amp;quot; description=&amp;quot;Files needed to build&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;property name=&amp;quot;YUI&amp;quot; value=&amp;quot;${BUILD_DIR}/yuicompressor-2.4.7.jar&amp;quot; description=&amp;quot;YUICompressor&amp;quot; /&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
an Ihre Gegebenheiten an.&lt;br /&gt;
&lt;br /&gt;
==Optionale Pakete==&lt;br /&gt;
Bei folgende Pakete macht nur in bestimmten Situationen Sinn sie zu installieren.&lt;br /&gt;
&lt;br /&gt;
===ADT===&lt;br /&gt;
ADT ist ein Eclipse-Plugin, dass die Entwicklung von [[Java]]-Anwendungen für [[Android]]-[[Smarphone]]s ermöglicht.&lt;br /&gt;
Voraussetzung ist, dass das Android SDK installiert worden ist.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;C:\web\eclipse\eclipse.exe&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;/Applications/eclipse&amp;lt;/code&amp;gt; starten&lt;br /&gt;
* &amp;lt;code&amp;gt;Hilfe&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Neue Software installieren...&amp;lt;/code&amp;gt;&lt;br /&gt;
* Work with: &amp;lt;code&amp;gt;&#039;&#039;https://dl-ssl.google.com/android/eclipse/&#039;&#039;&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Hinzufügen&amp;lt;/code&amp;gt;&lt;br /&gt;
* Name: &amp;lt;code&amp;gt;&#039;&#039;ADT&#039;&#039;&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* Alle Pakete auswählen ? &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Ich akzeptiere ...&amp;lt;/code&amp;gt; auswählen ? &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
* Warnung akzeptieren: &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Jetzt neu starten&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Benutzervorgaben&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Android&amp;lt;/code&amp;gt; &lt;br /&gt;
* Wenn dieser Menü-Punkt das erste Mal aufgerufen wird, fragt Eclipse nach, ob ADT-Benutzungsstatistiken an Google gesendet werden sollen. Hier würde ich das ensprechende Häckchen entfernen ? Auf jeden Fall muss &amp;lt;code&amp;gt;Proceed&amp;lt;/code&amp;gt; angeklickt werden.&lt;br /&gt;
* SDK Location: &amp;lt;code&amp;gt;C:\web\android-sdk&amp;lt;/code&amp;gt;  bzw. &amp;lt;code&amp;gt;/Benutzer/&#039;&#039;&#039;BENUTZERNAME&#039;&#039;&#039;/Programmierung/web/android-sdk&amp;lt;/code&amp;gt;  (Installationsverzeichnis des SDK-Managers;&#039;&#039;&#039;der Pfad darf keine Leerzeichen enthalten&#039;&#039;&#039;) ? &amp;lt;code&amp;gt;Anwenden&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Android SDK Manager&amp;lt;/code&amp;gt; starten &lt;br /&gt;
* &amp;lt;code&amp;gt;Android SDK Platformtools&amp;lt;/code&amp;gt; installieren (falls diese nicht bereits installiert worden sind)&lt;br /&gt;
&lt;br /&gt;
===Deutsche Sprachpakete installieren===&lt;br /&gt;
Das [http://www.eclipse.org/babel/downloads.php Eclipse Babel Project] stellt diverse Sprach-Pakete zu Verfügung, die allerdings noch nicht ganz fertiggestellt sind.&lt;br /&gt;
&lt;br /&gt;
# Eclipse starten (&amp;lt;code&amp;gt;C:\web\eclipse\eclipse.exe&amp;lt;/code&amp;gt;  bzw. &amp;lt;code&amp;gt;/Applications/eclipse/Eclipse.app&amp;lt;/code&amp;gt;)&lt;br /&gt;
# Wählen Sie einen geeignet Workspace aus (z.B. &amp;lt;code&amp;gt;C:\web\mmprog&amp;lt;/code&amp;gt;  bzw. &amp;lt;code&amp;gt;/Benutzer/&#039;&#039;&#039;BENUTZERNAME&#039;&#039;&#039;/Studium/mmprog&amp;lt;/code&amp;gt;; auf den Laborrechnern müssen Sie Ihr Home-Verzeichnis nehmen, nicht den Desktop!)&lt;br /&gt;
# &amp;lt;code&amp;gt;Help&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Install New Software&amp;lt;/code&amp;gt;&lt;br /&gt;
# Work with: &amp;lt;code&amp;gt;&#039;&#039;http://download.eclipse.org/technology/babel/update-site/R0.10.0/juno&#039;&#039;&amp;lt;/code&amp;gt; (bei Eclipse Indigo: &amp;lt;code&amp;gt;&#039;&#039;http://archive.eclipse.org/technology/babel/update-site/R0.9.1/indigo&#039;&#039;&amp;lt;/code&amp;gt;) ? &amp;lt;code&amp;gt;Add&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;Name: &#039;&#039;Babel&#039;&#039;&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
# (lange) warten bis &amp;lt;code&amp;gt;Pending&amp;lt;/code&amp;gt; verschwindet&lt;br /&gt;
# &amp;lt;code&amp;gt;Babel Language Packs in German&amp;lt;/code&amp;gt; selektieren ? &amp;lt;code&amp;gt;Next&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Next&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;I accept ...&amp;lt;/code&amp;gt; selektieren ? &amp;lt;code&amp;gt;Finish&amp;lt;/code&amp;gt;&lt;br /&gt;
# Warnung akzeptieren: &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;Restart Now&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Häufig sind die Babel Eclipse Server überlastet und eine manuelle Installation des Sprachpakets ist optional möglich:&lt;br /&gt;
# Downloaden des Pakets &amp;lt;code&amp;gt;&#039;&#039;http://download.eclipse.org/technology/babel/babel_language_packs/R0.10.0/juno/juno.php#de&#039;&#039;&amp;lt;/code&amp;gt;  (vgl. &amp;lt;code&amp;gt;http://www.eclipse.org/babel/downloads.php&amp;lt;/code&amp;gt;)&lt;br /&gt;
# &amp;lt;code&amp;gt;BabelLanguagePack-eclipse-de_4.2.0.v20120721043402.zip&amp;lt;/code&amp;gt; herunterladen&lt;br /&gt;
# Die beiden Ordner, die im Ordner &amp;lt;code&amp;gt;eclipse&amp;lt;/code&amp;gt; des ZIP-Archivs enthalten sind, in den Eclipse-Programm-Ordner &amp;lt;code&amp;gt;C:\web\eclipse&amp;lt;/code&amp;gt;&lt;br /&gt;
# Bei OSX Vorsicht! - Inhalte der Ordner &#039;&#039;&#039;features&#039;&#039;&#039; und &#039;&#039;&#039;plugins&#039;&#039;&#039; in die jeweiligen Ordner &amp;lt;code&amp;gt;/Applications/eclipse/features&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;/Applications/eclipse/plugins&amp;lt;/code&amp;gt; kopieren&lt;br /&gt;
# Eclipse neu starten &lt;br /&gt;
&lt;br /&gt;
====Deutsche Rechtschreibprüfung installieren====&lt;br /&gt;
# [http://a-weinert.de/frame4j/downloads/de_DE.dic de_DE.dic] (von Albrecht Weinert) herunterladen und unter &amp;lt;code&amp;gt;C:/web/eclipse/dropins&amp;lt;/code&amp;gt;  bzw. &amp;lt;code&amp;gt;/Applications/eclipse/dropins&amp;lt;/code&amp;gt; speichern&lt;br /&gt;
# &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Benutzervorgaben&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Allgemein&amp;lt;/code&amp;gt; aufklappen ? &amp;lt;code&amp;gt;Editoren&amp;lt;/code&amp;gt; aufklappen ? &amp;lt;code&amp;gt;Texteditoren&amp;lt;/code&amp;gt; aufklappen ? &amp;lt;code&amp;gt;Schreibprüfung selektieren&amp;lt;/code&amp;gt; &lt;br /&gt;
# Benutzerdefiniertes Wöerterbuch: &amp;lt;code&amp;gt;Durchsuchen&amp;lt;/code&amp;gt; und die Datei &amp;lt;code&amp;gt;de_DE.dic&amp;lt;/code&amp;gt; selektieren (bzw. &amp;lt;code&amp;gt;${eclipse_home}\dropins\de_DE.dic&amp;lt;/code&amp;gt; eintragen)&lt;br /&gt;
# Codierung: &amp;lt;code&amp;gt;Sonstige&amp;lt;/code&amp;gt; anklicken ? &amp;lt;code&amp;gt;UTF-8&amp;lt;/code&amp;gt; wählen&lt;br /&gt;
# &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tipp: Wenn Sie mit der Maus ein rot unterringeltes Wort anklicken und anschließend &amp;lt;code&amp;gt;Strg-1&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;Ctrl-1&amp;lt;/code&amp;gt;) drücken,&lt;br /&gt;
können Sie das Wort ins Wörterbuch einfügen oder andere Aktionen durchführen, damit ein vermeintlicher Rechtschreibfehler nicht mehr angezeigt wird.&lt;br /&gt;
&lt;br /&gt;
==Installation des Flash Builder (optional)==&lt;br /&gt;
&lt;br /&gt;
[[Flash Builder]] ist eine kommerzielle Software, basierend auf Eclipse Indigo, zum Entwickeln von [[Flash]]-Anwendungen.&lt;br /&gt;
Man kann [http://www.adobe.com/cfusion/tdrc/index.cfm?product=flash_builder&amp;amp;loc=de Flash Builder 4.6] (nach erfolgreicher Registrierung) als 60-Tage-Testlizenz herunterladen.&lt;br /&gt;
&lt;br /&gt;
* [http://www.adobe.com/cfusion/tdrc/index.cfm?product=flash_builder&amp;amp;loc=de Flash Builder 4.6] herunterlanden&lt;br /&gt;
* Eclipse und Browser beenden&lt;br /&gt;
* FlashBuilder_4_6_LS10.exe ausführen und [http://kb2.adobe.com/de/releasenotes/921/cpsid_92180.html#main_Install%20your%20software Flash Builder installieren]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Als Studierender&#039;&#039;&#039; erhält man eine &#039;&#039;&#039;kostenlose Lizenz&#039;&#039;&#039; für den Flash Builder, indem man im [http://www.adobe.com/de/devnet/flex/free/index.html Adobe Flex Developer Center] mit seinen persönliche Daten und JPEG-Kopie der Immatrikulationsbescheinigung Lizenz anfordert. Diese wird einem dann per E-Mail zugeschickt.&lt;br /&gt;
&lt;br /&gt;
Die meisten der nachfolgenden Installations- und Konfigurationsvorschläge funktionieren auch für den Flash-Builder.&lt;br /&gt;
Sie sollten allerdings nur Subclipse und evtl. Rinzo installieren. Die anderen Pakete sind für eine Flash/ActionScript-Entwicklung&lt;br /&gt;
unnötig.&lt;br /&gt;
&lt;br /&gt;
Beachten Sie, dass der Flash Builder auf &#039;&#039;Eclipse Indigo&#039;&#039;, der Vorgänger-Version von &#039;&#039;Eclipse Juno&#039;&#039;, basiert und daher &lt;br /&gt;
die Installationsschritte leicht abweichen können.&lt;br /&gt;
&lt;br /&gt;
Zu guter Letzt sollten Sie den Flash Builder [[Konfiguration von Eclipse|konfigurieren]].&lt;br /&gt;
&lt;br /&gt;
=Eclipse konfigurieren=&lt;br /&gt;
&lt;br /&gt;
Befolgen Sie die Anweisungen von „[[Konfiguration von Eclipse]]“.&lt;br /&gt;
&lt;br /&gt;
=Integration von Tomcat=&lt;br /&gt;
&lt;br /&gt;
Tomcat wird folgendermaßen in Eclipse eingebunden:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;Datei&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Neu&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Andere&amp;lt;/code&amp;gt;&lt;br /&gt;
* Klick auf Dreieck vor &amp;lt;code&amp;gt;Server&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Server&amp;lt;/code&amp;gt;&lt;br /&gt;
* Klick auf Dreieck vor &amp;lt;code&amp;gt;Apache&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Tomcat Version 7.0 - Server&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;Fertig stellen&amp;lt;/code&amp;gt; (je nachdem, welcher Button klickbar ist)&lt;br /&gt;
* Tomcat-Installationsverzeichnis angeben: &amp;lt;code&amp;gt;C:\web\tomcat&amp;lt;/code&amp;gt;&lt;br /&gt;
* Klick auf &amp;lt;code&amp;gt;Fertig stellen&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tomcat-Projekt benötigen eine Laufzeit-Umgebung, in der die eigentlichen Web-Auftritte gespeicher werden. Hierfür gibt es mehrere Möglichkeiten:&lt;br /&gt;
* das Tomcat-Webapps-Verzeichnis (&amp;lt;code&amp;gt;C:\web\tomcat\webapps&amp;lt;/code&amp;gt;)&lt;br /&gt;
* ein spezieller Ordner im versteckten Verzeichnis  &amp;lt;code&amp;gt;C:\web\workspace\.metadata&amp;lt;/code&amp;gt; (schwer zu finden, nicht zu empfehlen)&lt;br /&gt;
* ein Eclipse-Projekt namens Tomcat, auf dessen Inhalt auch direkt über Eclipse zugegriffen werden kann&lt;br /&gt;
&lt;br /&gt;
Hier wird die dritte Möglichkeit verwendet:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;Datei&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Neu&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Andere&amp;lt;/code&amp;gt;&lt;br /&gt;
* Klick auf Dreieck vor &amp;lt;code&amp;gt;Allgemein&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Projekt&amp;lt;/code&amp;gt;&lt;br /&gt;
* Projektname: &amp;lt;code&amp;gt;Tomcat&amp;lt;/code&amp;gt;&lt;br /&gt;
* Tomcat konfigurieren: &amp;lt;code&amp;gt;Server&amp;lt;/code&amp;gt; ? Doppelklick &amp;lt;code&amp;gt;Tomcat Version 7.0 - Server&amp;lt;/code&amp;gt;&lt;br /&gt;
* Tomcat konfigurieren: &amp;lt;code&amp;gt;Use custom Location&amp;lt;/code&amp;gt; ? Server path: &amp;lt;code&amp;gt;Tomcat&amp;lt;/code&amp;gt; (das ist das zuvor angelegte Projekt), Deploy path: &amp;lt;code&amp;gt;webapps&amp;lt;/code&amp;gt;&lt;br /&gt;
* Tomcat ist einsatzbereit: &amp;lt;code&amp;gt;Server&amp;lt;/code&amp;gt; ? Rechtsklick &amp;lt;code&amp;gt;Tomcat Version 7.0 - Server&amp;lt;/code&amp;gt; oder Steuermenü in der Serverleist: Tomcat starten/stoppen etc.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;350&amp;quot; heights=&amp;quot;250&amp;quot; perrow=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
  Medium:Eclipse_Tomcat_01.png | Neue Tomcat-Umgebung erstellen: &amp;lt;code&amp;gt;Andere&amp;lt;/code&amp;gt; wählen&lt;br /&gt;
  Medium:Eclipse_Tomcat_02.png | Neue Tomcat-Umgebung erstellen: &amp;lt;code&amp;gt;Server&amp;lt;/code&amp;gt; wählen&lt;br /&gt;
  Medium:Eclipse_Tomcat_03.png | Neue Tomcat-Umgebung erstellen: &amp;lt;code&amp;gt;Tomcat 6 &amp;lt;/code&amp;gt; wählen&lt;br /&gt;
  Medium:Eclipse_Tomcat_04.png | Pfad zu Tomcat-Server angeben&lt;br /&gt;
  Medium:Eclipse_Tomcat_01.png | Generischs Projekt erstellen: &amp;lt;code&amp;gt;Andere&amp;lt;/code&amp;gt; wählen&lt;br /&gt;
  Medium:Eclipse_Tomcat_05.png | Generische Projekt erstellen: &amp;lt;code&amp;gt;Projekt&amp;lt;/code&amp;gt; wählen&lt;br /&gt;
  Medium:Eclipse_Tomcat_06.png | Projektname &amp;lt;code&amp;gt;Tomcat&amp;lt;/code&amp;gt;&lt;br /&gt;
  Medium:Eclipse_Tomcat_07.png | Tomcat konfigurieren und mit &amp;lt;code&amp;gt;Strg-S&amp;lt;/code&amp;gt; speichern&lt;br /&gt;
  Medium:Eclipse_Tomcat_08.png | Tomcat verwalten: starten/stoppen/etc.&lt;br /&gt;
  Medium:Eclipse_Tomcat_09.png | Tomcat-Log-Datei: Der Start war erfolgreich&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Integration von Apache=&lt;br /&gt;
{{TBD}}&lt;br /&gt;
&lt;br /&gt;
=Quellen=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; {{Quelle|Kowarschick, W.: Content-Management}}&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; {{Quelle|Kowarschick, W.: Multimedia-Datenbanksysteme}}&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; {{Quelle|Kowarschick, W.: Multimedia-Programmierung}}&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
Alle übrigen Quellen wurden direkt im Text angegeben.&lt;br /&gt;
[[Kategorie:Kapitel:Web-Programmierung]][[Kategorie:Web-Programmierung-HowTo]]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== bookmarks.xml ==&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;bookmarks&amp;gt;&lt;br /&gt;
   &amp;lt;site url=&amp;quot;http://download.aptana.com/studio3/plugin/install&amp;quot; selected=&amp;quot;true&amp;quot; name=&amp;quot;Aptana Studio 3&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;site url=&amp;quot;http://editorxml.sourceforge.net/updates/&amp;quot; selected=&amp;quot;true&amp;quot; name=&amp;quot;Rinzo XML Editor&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;site url=&amp;quot;http://subclipse.tigris.org/update_1.8.x&amp;quot; selected=&amp;quot;true&amp;quot; name=&amp;quot;Subclipse 1.8.x Update Site&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bookmarks&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rayza</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=Benutzer_Diskussion:Rayza&amp;diff=23774</id>
		<title>Benutzer Diskussion:Rayza</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=Benutzer_Diskussion:Rayza&amp;diff=23774"/>
		<updated>2012-10-10T00:11:52Z</updated>

		<summary type="html">&lt;p&gt;Rayza: /* bookmarks.xml */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Umstrukturierungsvorschlag Eclipse Installation ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Qualität&lt;br /&gt;
|correctness         = 4&lt;br /&gt;
|extent              = 4&lt;br /&gt;
|numberOfReferences  = 5&lt;br /&gt;
|qualityOfReferences = 4&lt;br /&gt;
|conformance         = 4&lt;br /&gt;
}}&lt;br /&gt;
=Vorbemerkung=&lt;br /&gt;
&lt;br /&gt;
[[Eclipse]] ist für die Entwicklung von dynamische Web-Anwendungen mit und ohne einen Web-Server (wie z.B. Tomcat) recht gut geeignet.&lt;br /&gt;
&lt;br /&gt;
Für Windows werden folgende Annahmen gemacht: Auf der Partition C befindet sich das Windows-System und die Benutzerdaten. &lt;br /&gt;
Da Eclipse „out of the box“ läuft, wird es auf der Partition mit den Benutzerdaten installiert.&lt;br /&gt;
&lt;br /&gt;
==Android SDK (optional)==&lt;br /&gt;
Um mit Eclipse Apps für Android entwickeln zu können, wird das Android SDK benötigt.&lt;br /&gt;
Installieren Sie dies zuerst:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;http://developer.android.com/sdk/index.html&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;installer_r...-windows.exe&amp;lt;/code&amp;gt; herunterladen und ausführen. &lt;br /&gt;
* &#039;&#039;&#039;Wählen Sie einen kurzen Installationspfad ohne Leerzeichen aus, z.B. &amp;lt;code&amp;gt;C:\web\android-sdk&amp;lt;/code&amp;gt; (Windows) bzw. &amp;lt;code&amp;gt;/Benutzer/&#039;&#039;&#039;BENUTZERNAME&#039;&#039;&#039;/Programmierung/web/android-sdk&amp;lt;/code&amp;gt; (Mac OS), auf das Benutzer ohne Administrationsrechte zugreifen können.&#039;&#039;&#039; &lt;br /&gt;
* &amp;lt;code&amp;gt;Start SDK-Manager&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* APIs auswählen für die entwickelt werden soll (z.B. API 16, API 10 und Extras) ? &amp;lt;code&amp;gt;Install ... packages&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Accept All&amp;lt;/code&amp;gt; (rechts!) ? &amp;lt;code&amp;gt;Install&amp;lt;/code&amp;gt;, &#039;&#039;&#039;Achtung: Dieser Vorgang dauert länger. Sie können ihn später nachholen, indem Sie Eclipse starten und &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Android SDK Manager&amp;lt;/code&amp;gt; aufrufen&#039;&#039;&#039;&lt;br /&gt;
* Es erscheinen zwei Aufforderungen, sich einzuloggen. Diese können einfach weggeklickt werden. &lt;br /&gt;
* Aufgrund der vorherigen Aktion werden nicht alle Paktete installiert. Das ist jedoch nicht weiter schlimm.&lt;br /&gt;
* &#039;&#039;&#039;Abschließend sollte das Paket &amp;lt;code&amp;gt;Extras&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Google USB Driver&amp;lt;/code&amp;gt; separat installiert werden, sofern es nicht installiert wurde.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Vorgefertigete Eclipse-Instanzen (derzeit nur für Windows 7)==&lt;br /&gt;
&lt;br /&gt;
Für die in diesem Wiki beschriebenen Tutorien gibt es folgende vorgefertigte Eclipse-Instanzen:&lt;br /&gt;
* [http://glossar.hs-augsburg.de/svn/eclipse/eclipse_mmprog_x64.zip Eclipse für MMProg (Windows 7, 64 Bit)], [http://glossar.hs-augsburg.de/svn/eclipse/workspace_mmprog_x64.zip zugehöriger Workspace &amp;lt;code&amp;gt;workspace_mmprog&amp;lt;/code&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
Sie können diese beiden Dateien herunterladen und in einen Ordner Ihrer Wahl (am Besten &amp;lt;code&amp;gt;C:\web&amp;lt;/code&amp;gt;) entpacken.&lt;br /&gt;
Stellen Sie sicher, das das Android SDK bereits installiert wurde.&lt;br /&gt;
Rufen Sie nun &amp;lt;code&amp;gt;C:\web\eclipse\eclipse.exe&amp;lt;/code&amp;gt; auf und geben Sie &amp;lt;code&amp;gt;C:\web\workspace_mmprog&amp;lt;/code&amp;gt;&lt;br /&gt;
als Workspace an. &lt;br /&gt;
&lt;br /&gt;
Passen Sie nun den Workspace an Ihre Rechner-Umgebung an:&lt;br /&gt;
* Wenn Sie Ihren eigenen Workspace verwenden, so müssen Sie diesen noch [[Konfiguration von Eclipse|konfigurieren]].&lt;br /&gt;
* Wenn Sie den Workspace &amp;lt;code&amp;gt;workspace_mmprog&amp;lt;/code&amp;gt; verwenden, so müssen Sie noch ein Paar [[Konfiguration von Eclipse/Anpassungen_des_MMProg-Workspaces|Anpassungen]] vornehmen.&lt;br /&gt;
* Wenn Sie Eclipse vollkommen neu installieren, so sollten Sie die nachfolgenden Installationshinweise beachten.&lt;br /&gt;
&lt;br /&gt;
Tipp: Wenn man sich nicht manuell um das Updaten von Plugins kümmern möchte, empfiehlt es sich wo möglich Update Sites zu verwenden.&lt;br /&gt;
&lt;br /&gt;
=Installation von Eclipse=&lt;br /&gt;
&lt;br /&gt;
* Eclipse (Juno, 4.2) herunterladen:&lt;br /&gt;
** Eclipse IDE for Java EE Developers (32 Bit oder 64 Bit) [http://eclipse.org/downloads/ herunterladen]&lt;br /&gt;
* Zip-Datei nach &amp;lt;code&amp;gt;C:/web&amp;lt;/code&amp;gt; (Windows) bzw. &amp;lt;code&amp;gt;/Applications/&amp;lt;/code&amp;gt; (Mac OS) entpacken ? &amp;lt;code&amp;gt;C:/web/eclipse&amp;lt;/code&amp;gt; enthält Eclipse (&amp;lt;code&amp;gt;C:/web/eclipse/eclipse.exe&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;/Applications/eclipse/Eclipse.app&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=Diverse weitere Eclipse-Pakete installieren=&lt;br /&gt;
&lt;br /&gt;
==Kurze Variante (Eclipse auf Englisch)==&lt;br /&gt;
&lt;br /&gt;
===XML-Editor „Rinzo“, Subclipse und Aptana===&lt;br /&gt;
* Diese XML-Datei mit den Update-Sites herunterladen.&lt;br /&gt;
* &amp;lt;code&amp;gt;Window&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Install/Update&amp;lt;/code&amp;gt; ausklappen ? &amp;lt;code&amp;gt;Available Software Sites&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Import&amp;lt;/code&amp;gt; ? Datei auswählen ? &amp;lt;code&amp;gt;Öffnen&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Help&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Install New Software...&amp;lt;/code&amp;gt;&lt;br /&gt;
* Work with: &amp;lt;code&amp;gt;--All Available Sites--&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Aptana Studio 3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Rinzo XML Editor&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;Subclipse&amp;lt;/code&amp;gt; auswählen ? &amp;lt;code&amp;gt;Next&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Next&amp;lt;/code&amp;gt; ? Lizenzen akzeptieren ? &amp;lt;code&amp;gt;Finish&amp;lt;/code&amp;gt;&lt;br /&gt;
* Warnung akzeptieren: &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* Neustarten-Frage bejahen: &amp;lt;code&amp;gt;Yes&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Lange Variante==&lt;br /&gt;
&lt;br /&gt;
===XML-Editor „Rinzo“===&lt;br /&gt;
Da in Eclipse ein guter XML-Editor fehlt, sollte ein geeigneter Editor installiert werden.&lt;br /&gt;
Die wirklich guten Editoren gibt es leider nicht als Open-Source-Software. Der XML-Editor &lt;br /&gt;
„Rinzo“ ist zwar nicht sehr leistungsfähig, dafür aber Open-Source-Software.&lt;br /&gt;
&lt;br /&gt;
Variante 1 (Update-Site):&lt;br /&gt;
* &amp;lt;code&amp;gt;C:\web\eclipse\eclipse.exe&amp;lt;/code&amp;gt;  bzw. &amp;lt;code&amp;gt;/Applications/eclipse&amp;lt;/code&amp;gt; starten&lt;br /&gt;
* &amp;lt;code&amp;gt;Hilfe&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Neue Software installieren...&amp;lt;/code&amp;gt;&lt;br /&gt;
* Work with: &amp;lt;code&amp;gt;&#039;&#039;http://editorxml.sourceforge.net/updates&#039;&#039;&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Hinzufügen&amp;lt;/code&amp;gt;&lt;br /&gt;
* Name: &amp;lt;code&amp;gt;&#039;&#039;Subclipse&#039;&#039;&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* Alle Pakete auswählen ? &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Ich akzeptiere ...&amp;lt;/code&amp;gt; auswählen ? &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
* Warnung akzeptieren: &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Jetzt neu starten&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Variante 2 (manuell):&lt;br /&gt;
* XML-Editor Rinzo [http://sourceforge.net/projects/editorxml/ herunterladen]&lt;br /&gt;
* Inhalt der ZIP-Datei in Verzeichnis &amp;lt;code&amp;gt;C:\web\eclipse\dropins&amp;lt;/code&amp;gt;  bzw. &amp;lt;code&amp;gt;/Applications/eclipse/dropins&amp;lt;/code&amp;gt; einfügen&lt;br /&gt;
* Eclipse neu starten&lt;br /&gt;
&lt;br /&gt;
===Subclipse===&lt;br /&gt;
Sublipse ist ein recht guter [[Subversion|Subversion-Client]] für Eclipse.&lt;br /&gt;
&lt;br /&gt;
Die meisten Eclipse-Pakete können sehr einfach mit Hilfe von Update-Sites &lt;br /&gt;
installiert werden, so auch Subclipse.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;C:\web\eclipse\eclipse.exe&amp;lt;/code&amp;gt;  bzw. &amp;lt;code&amp;gt;/Applications/eclipse&amp;lt;/code&amp;gt; starten&lt;br /&gt;
* &amp;lt;code&amp;gt;Hilfe&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Neue Software installieren...&amp;lt;/code&amp;gt;&lt;br /&gt;
* Work with: &amp;lt;code&amp;gt;&#039;&#039;http://subclipse.tigris.org/update_1.8.x&#039;&#039;&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Hinzufügen&amp;lt;/code&amp;gt;&lt;br /&gt;
* Name: &amp;lt;code&amp;gt;&#039;&#039;Subclipse&#039;&#039;&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* Alle Pakete auswählen ? &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Ich akzeptiere ...&amp;lt;/code&amp;gt; auswählen ? &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
* Warnung akzeptieren: &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Jetzt neu starten&amp;lt;/code&amp;gt;&lt;br /&gt;
* Haken vor &amp;lt;code&amp;gt;Report usage ...&amp;lt;/code&amp;gt; entfernen.&lt;br /&gt;
* &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Aptana===&lt;br /&gt;
&lt;br /&gt;
Aptana ist ein Eclipse-Plugin zur Entwicklung von HTML/JavaScript-Anwendungen.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;C:\web\eclipse\eclipse.exe&amp;lt;/code&amp;gt;  bzw. &amp;lt;code&amp;gt;/Applications/eclipse&amp;lt;/code&amp;gt;  starten&lt;br /&gt;
* &amp;lt;code&amp;gt;Hilfe&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Neue Software installieren...&amp;lt;/code&amp;gt;&lt;br /&gt;
* Work with: &amp;lt;code&amp;gt;&#039;&#039;http://download.aptana.com/studio3/plugin/install&#039;&#039;&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Hinzufügen&amp;lt;/code&amp;gt;&lt;br /&gt;
* Name: &amp;lt;code&amp;gt;&#039;&#039;Aptana&#039;&#039;&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* Alle Pakete auswählen ? &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Ich akzeptiere ...&amp;lt;/code&amp;gt; auswählen ? &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
* Warnung akzeptieren: &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Jetzt neu starten&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wem das Aptana-HTML-Farbschema nicht gefällt, der kann dieses ändern:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Benutzervorgaben&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Aptana Studio&amp;lt;/code&amp;gt; aufklappen ? &amp;lt;code&amp;gt;Themes&amp;lt;/code&amp;gt; ? Drop-Down-Men+ (Inhalt &amp;lt;code&amp;gt;Aptana Studio)&amp;lt;/code&amp;gt; öffnen und neues Farbschema wählen ?&amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==YUI Compressor ==&lt;br /&gt;
&lt;br /&gt;
* YUI Compressor ([http://yuilibrary.com/download/yuicompressor/ yuicompressor-2.x.x.zip]) herunterladen&lt;br /&gt;
* yuicompressor-2.x.x.zip in den Ordner &amp;lt;code&amp;gt;C:\web\eclipse\dropins&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;/Applications/eclipse/dropins&amp;lt;/code&amp;gt; entpacken&lt;br /&gt;
* Ordner &amp;lt;code&amp;gt;C:\web\eclipse\dropins\yuicompressor&amp;lt;/code&amp;gt;  bzw. &amp;lt;code&amp;gt;/Applications/eclipse/dropins/yuicompressor&amp;lt;/code&amp;gt; erstellen&lt;br /&gt;
* In den Ordner &amp;lt;code&amp;gt;C:\web\eclipse\dropins\yuicompressor&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;/Applications/eclipse/dropins/yuicompressor&amp;lt;/code&amp;gt; die Datei [http://glossar.hs-augsburg.de/svn/eclipse/build.xml &amp;lt;code&amp;gt;build.xml&amp;lt;/code&amp;gt;]&amp;lt;ref&amp;gt;vgl. {{Quelle|Santos, S. (2009): Combine and minimize JavaScript and CSS files for faster loading}}&amp;lt;/ref&amp;gt; einfügen&lt;br /&gt;
&lt;br /&gt;
Passen Sie in der Datei &amp;lt;code&amp;gt;build.xml&amp;lt;/code&amp;gt; den Pfad und Versionnummer des YUI Compressors in den beiden Zeilen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
Windows...&lt;br /&gt;
  &amp;lt;property name=&amp;quot;BUILD_DIR&amp;quot; value=&amp;quot;C:/web/eclipse/dropins/yuicompressor-2.4.7/build&amp;quot; description=&amp;quot;Files needed to build&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;property name=&amp;quot;YUI&amp;quot; value=&amp;quot;${BUILD_DIR}/yuicompressor-2.4.7.jar&amp;quot; description=&amp;quot;YUICompressor&amp;quot; /&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
OS X...&lt;br /&gt;
  &amp;lt;property name=&amp;quot;BUILD_DIR&amp;quot; value=&amp;quot;/Applications/eclipse/dropins/yuicompressor-2.4.7/build&amp;quot; description=&amp;quot;Files needed to build&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;property name=&amp;quot;YUI&amp;quot; value=&amp;quot;${BUILD_DIR}/yuicompressor-2.4.7.jar&amp;quot; description=&amp;quot;YUICompressor&amp;quot; /&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
an Ihre Gegebenheiten an.&lt;br /&gt;
&lt;br /&gt;
==Optionale Pakete==&lt;br /&gt;
Bei folgende Pakete macht nur in bestimmten Situationen Sinn sie zu installieren.&lt;br /&gt;
&lt;br /&gt;
===ADT===&lt;br /&gt;
ADT ist ein Eclipse-Plugin, dass die Entwicklung von [[Java]]-Anwendungen für [[Android]]-[[Smarphone]]s ermöglicht.&lt;br /&gt;
Voraussetzung ist, dass das Android SDK installiert worden ist.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;C:\web\eclipse\eclipse.exe&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;/Applications/eclipse&amp;lt;/code&amp;gt; starten&lt;br /&gt;
* &amp;lt;code&amp;gt;Hilfe&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Neue Software installieren...&amp;lt;/code&amp;gt;&lt;br /&gt;
* Work with: &amp;lt;code&amp;gt;&#039;&#039;https://dl-ssl.google.com/android/eclipse/&#039;&#039;&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Hinzufügen&amp;lt;/code&amp;gt;&lt;br /&gt;
* Name: &amp;lt;code&amp;gt;&#039;&#039;ADT&#039;&#039;&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* Alle Pakete auswählen ? &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Ich akzeptiere ...&amp;lt;/code&amp;gt; auswählen ? &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
* Warnung akzeptieren: &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Jetzt neu starten&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Benutzervorgaben&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Android&amp;lt;/code&amp;gt; &lt;br /&gt;
* Wenn dieser Menü-Punkt das erste Mal aufgerufen wird, fragt Eclipse nach, ob ADT-Benutzungsstatistiken an Google gesendet werden sollen. Hier würde ich das ensprechende Häckchen entfernen ? Auf jeden Fall muss &amp;lt;code&amp;gt;Proceed&amp;lt;/code&amp;gt; angeklickt werden.&lt;br /&gt;
* SDK Location: &amp;lt;code&amp;gt;C:\web\android-sdk&amp;lt;/code&amp;gt;  bzw. &amp;lt;code&amp;gt;/Benutzer/&#039;&#039;&#039;BENUTZERNAME&#039;&#039;&#039;/Programmierung/web/android-sdk&amp;lt;/code&amp;gt;  (Installationsverzeichnis des SDK-Managers;&#039;&#039;&#039;der Pfad darf keine Leerzeichen enthalten&#039;&#039;&#039;) ? &amp;lt;code&amp;gt;Anwenden&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Android SDK Manager&amp;lt;/code&amp;gt; starten &lt;br /&gt;
* &amp;lt;code&amp;gt;Android SDK Platformtools&amp;lt;/code&amp;gt; installieren (falls diese nicht bereits installiert worden sind)&lt;br /&gt;
&lt;br /&gt;
===Deutsche Sprachpakete installieren===&lt;br /&gt;
Das [http://www.eclipse.org/babel/downloads.php Eclipse Babel Project] stellt diverse Sprach-Pakete zu Verfügung, die allerdings noch nicht ganz fertiggestellt sind.&lt;br /&gt;
&lt;br /&gt;
# Eclipse starten (&amp;lt;code&amp;gt;C:\web\eclipse\eclipse.exe&amp;lt;/code&amp;gt;  bzw. &amp;lt;code&amp;gt;/Applications/eclipse/Eclipse.app&amp;lt;/code&amp;gt;)&lt;br /&gt;
# Wählen Sie einen geeignet Workspace aus (z.B. &amp;lt;code&amp;gt;C:\web\mmprog&amp;lt;/code&amp;gt;  bzw. &amp;lt;code&amp;gt;/Benutzer/&#039;&#039;&#039;BENUTZERNAME&#039;&#039;&#039;/Studium/mmprog&amp;lt;/code&amp;gt;; auf den Laborrechnern müssen Sie Ihr Home-Verzeichnis nehmen, nicht den Desktop!)&lt;br /&gt;
# &amp;lt;code&amp;gt;Help&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Install New Software&amp;lt;/code&amp;gt;&lt;br /&gt;
# Work with: &amp;lt;code&amp;gt;&#039;&#039;http://download.eclipse.org/technology/babel/update-site/R0.10.0/juno&#039;&#039;&amp;lt;/code&amp;gt; (bei Eclipse Indigo: &amp;lt;code&amp;gt;&#039;&#039;http://archive.eclipse.org/technology/babel/update-site/R0.9.1/indigo&#039;&#039;&amp;lt;/code&amp;gt;) ? &amp;lt;code&amp;gt;Add&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;Name: &#039;&#039;Babel&#039;&#039;&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
# (lange) warten bis &amp;lt;code&amp;gt;Pending&amp;lt;/code&amp;gt; verschwindet&lt;br /&gt;
# &amp;lt;code&amp;gt;Babel Language Packs in German&amp;lt;/code&amp;gt; selektieren ? &amp;lt;code&amp;gt;Next&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Next&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;I accept ...&amp;lt;/code&amp;gt; selektieren ? &amp;lt;code&amp;gt;Finish&amp;lt;/code&amp;gt;&lt;br /&gt;
# Warnung akzeptieren: &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;Restart Now&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Häufig sind die Babel Eclipse Server überlastet und eine manuelle Installation des Sprachpakets ist optional möglich:&lt;br /&gt;
# Downloaden des Pakets &amp;lt;code&amp;gt;&#039;&#039;http://download.eclipse.org/technology/babel/babel_language_packs/R0.10.0/juno/juno.php#de&#039;&#039;&amp;lt;/code&amp;gt;  (vgl. &amp;lt;code&amp;gt;http://www.eclipse.org/babel/downloads.php&amp;lt;/code&amp;gt;)&lt;br /&gt;
# &amp;lt;code&amp;gt;BabelLanguagePack-eclipse-de_4.2.0.v20120721043402.zip&amp;lt;/code&amp;gt; herunterladen&lt;br /&gt;
# Die beiden Ordner, die im Ordner &amp;lt;code&amp;gt;eclipse&amp;lt;/code&amp;gt; des ZIP-Archivs enthalten sind, in den Eclipse-Programm-Ordner &amp;lt;code&amp;gt;C:\web\eclipse&amp;lt;/code&amp;gt;&lt;br /&gt;
# Bei OSX Vorsicht! - Inhalte der Ordner &#039;&#039;&#039;features&#039;&#039;&#039; und &#039;&#039;&#039;plugins&#039;&#039;&#039; in die jeweiligen Ordner &amp;lt;code&amp;gt;/Applications/eclipse/features&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;/Applications/eclipse/plugins&amp;lt;/code&amp;gt; kopieren&lt;br /&gt;
# Eclipse neu starten &lt;br /&gt;
&lt;br /&gt;
====Deutsche Rechtschreibprüfung installieren====&lt;br /&gt;
# [http://a-weinert.de/frame4j/downloads/de_DE.dic de_DE.dic] (von Albrecht Weinert) herunterladen und unter &amp;lt;code&amp;gt;C:/web/eclipse/dropins&amp;lt;/code&amp;gt;  bzw. &amp;lt;code&amp;gt;/Applications/eclipse/dropins&amp;lt;/code&amp;gt; speichern&lt;br /&gt;
# &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Benutzervorgaben&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Allgemein&amp;lt;/code&amp;gt; aufklappen ? &amp;lt;code&amp;gt;Editoren&amp;lt;/code&amp;gt; aufklappen ? &amp;lt;code&amp;gt;Texteditoren&amp;lt;/code&amp;gt; aufklappen ? &amp;lt;code&amp;gt;Schreibprüfung selektieren&amp;lt;/code&amp;gt; &lt;br /&gt;
# Benutzerdefiniertes Wöerterbuch: &amp;lt;code&amp;gt;Durchsuchen&amp;lt;/code&amp;gt; und die Datei &amp;lt;code&amp;gt;de_DE.dic&amp;lt;/code&amp;gt; selektieren (bzw. &amp;lt;code&amp;gt;${eclipse_home}\dropins\de_DE.dic&amp;lt;/code&amp;gt; eintragen)&lt;br /&gt;
# Codierung: &amp;lt;code&amp;gt;Sonstige&amp;lt;/code&amp;gt; anklicken ? &amp;lt;code&amp;gt;UTF-8&amp;lt;/code&amp;gt; wählen&lt;br /&gt;
# &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tipp: Wenn Sie mit der Maus ein rot unterringeltes Wort anklicken und anschließend &amp;lt;code&amp;gt;Strg-1&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;Ctrl-1&amp;lt;/code&amp;gt;) drücken,&lt;br /&gt;
können Sie das Wort ins Wörterbuch einfügen oder andere Aktionen durchführen, damit ein vermeintlicher Rechtschreibfehler nicht mehr angezeigt wird.&lt;br /&gt;
&lt;br /&gt;
==Installation des Flash Builder (optional)==&lt;br /&gt;
&lt;br /&gt;
[[Flash Builder]] ist eine kommerzielle Software, basierend auf Eclipse Indigo, zum Entwickeln von [[Flash]]-Anwendungen.&lt;br /&gt;
Man kann [http://www.adobe.com/cfusion/tdrc/index.cfm?product=flash_builder&amp;amp;loc=de Flash Builder 4.6] (nach erfolgreicher Registrierung) als 60-Tage-Testlizenz herunterladen.&lt;br /&gt;
&lt;br /&gt;
* [http://www.adobe.com/cfusion/tdrc/index.cfm?product=flash_builder&amp;amp;loc=de Flash Builder 4.6] herunterlanden&lt;br /&gt;
* Eclipse und Browser beenden&lt;br /&gt;
* FlashBuilder_4_6_LS10.exe ausführen und [http://kb2.adobe.com/de/releasenotes/921/cpsid_92180.html#main_Install%20your%20software Flash Builder installieren]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Als Studierender&#039;&#039;&#039; erhält man eine &#039;&#039;&#039;kostenlose Lizenz&#039;&#039;&#039; für den Flash Builder, indem man im [http://www.adobe.com/de/devnet/flex/free/index.html Adobe Flex Developer Center] mit seinen persönliche Daten und JPEG-Kopie der Immatrikulationsbescheinigung Lizenz anfordert. Diese wird einem dann per E-Mail zugeschickt.&lt;br /&gt;
&lt;br /&gt;
Die meisten der nachfolgenden Installations- und Konfigurationsvorschläge funktionieren auch für den Flash-Builder.&lt;br /&gt;
Sie sollten allerdings nur Subclipse und evtl. Rinzo installieren. Die anderen Pakete sind für eine Flash/ActionScript-Entwicklung&lt;br /&gt;
unnötig.&lt;br /&gt;
&lt;br /&gt;
Beachten Sie, dass der Flash Builder auf &#039;&#039;Eclipse Indigo&#039;&#039;, der Vorgänger-Version von &#039;&#039;Eclipse Juno&#039;&#039;, basiert und daher &lt;br /&gt;
die Installationsschritte leicht abweichen können.&lt;br /&gt;
&lt;br /&gt;
Zu guter Letzt sollten Sie den Flash Builder [[Konfiguration von Eclipse|konfigurieren]].&lt;br /&gt;
&lt;br /&gt;
=Eclipse konfigurieren=&lt;br /&gt;
&lt;br /&gt;
Befolgen Sie die Anweisungen von „[[Konfiguration von Eclipse]]“.&lt;br /&gt;
&lt;br /&gt;
=Integration von Tomcat=&lt;br /&gt;
&lt;br /&gt;
Tomcat wird folgendermaßen in Eclipse eingebunden:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;Datei&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Neu&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Andere&amp;lt;/code&amp;gt;&lt;br /&gt;
* Klick auf Dreieck vor &amp;lt;code&amp;gt;Server&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Server&amp;lt;/code&amp;gt;&lt;br /&gt;
* Klick auf Dreieck vor &amp;lt;code&amp;gt;Apache&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Tomcat Version 7.0 - Server&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;Fertig stellen&amp;lt;/code&amp;gt; (je nachdem, welcher Button klickbar ist)&lt;br /&gt;
* Tomcat-Installationsverzeichnis angeben: &amp;lt;code&amp;gt;C:\web\tomcat&amp;lt;/code&amp;gt;&lt;br /&gt;
* Klick auf &amp;lt;code&amp;gt;Fertig stellen&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tomcat-Projekt benötigen eine Laufzeit-Umgebung, in der die eigentlichen Web-Auftritte gespeicher werden. Hierfür gibt es mehrere Möglichkeiten:&lt;br /&gt;
* das Tomcat-Webapps-Verzeichnis (&amp;lt;code&amp;gt;C:\web\tomcat\webapps&amp;lt;/code&amp;gt;)&lt;br /&gt;
* ein spezieller Ordner im versteckten Verzeichnis  &amp;lt;code&amp;gt;C:\web\workspace\.metadata&amp;lt;/code&amp;gt; (schwer zu finden, nicht zu empfehlen)&lt;br /&gt;
* ein Eclipse-Projekt namens Tomcat, auf dessen Inhalt auch direkt über Eclipse zugegriffen werden kann&lt;br /&gt;
&lt;br /&gt;
Hier wird die dritte Möglichkeit verwendet:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;Datei&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Neu&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Andere&amp;lt;/code&amp;gt;&lt;br /&gt;
* Klick auf Dreieck vor &amp;lt;code&amp;gt;Allgemein&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Projekt&amp;lt;/code&amp;gt;&lt;br /&gt;
* Projektname: &amp;lt;code&amp;gt;Tomcat&amp;lt;/code&amp;gt;&lt;br /&gt;
* Tomcat konfigurieren: &amp;lt;code&amp;gt;Server&amp;lt;/code&amp;gt; ? Doppelklick &amp;lt;code&amp;gt;Tomcat Version 7.0 - Server&amp;lt;/code&amp;gt;&lt;br /&gt;
* Tomcat konfigurieren: &amp;lt;code&amp;gt;Use custom Location&amp;lt;/code&amp;gt; ? Server path: &amp;lt;code&amp;gt;Tomcat&amp;lt;/code&amp;gt; (das ist das zuvor angelegte Projekt), Deploy path: &amp;lt;code&amp;gt;webapps&amp;lt;/code&amp;gt;&lt;br /&gt;
* Tomcat ist einsatzbereit: &amp;lt;code&amp;gt;Server&amp;lt;/code&amp;gt; ? Rechtsklick &amp;lt;code&amp;gt;Tomcat Version 7.0 - Server&amp;lt;/code&amp;gt; oder Steuermenü in der Serverleist: Tomcat starten/stoppen etc.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;350&amp;quot; heights=&amp;quot;250&amp;quot; perrow=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
  Medium:Eclipse_Tomcat_01.png | Neue Tomcat-Umgebung erstellen: &amp;lt;code&amp;gt;Andere&amp;lt;/code&amp;gt; wählen&lt;br /&gt;
  Medium:Eclipse_Tomcat_02.png | Neue Tomcat-Umgebung erstellen: &amp;lt;code&amp;gt;Server&amp;lt;/code&amp;gt; wählen&lt;br /&gt;
  Medium:Eclipse_Tomcat_03.png | Neue Tomcat-Umgebung erstellen: &amp;lt;code&amp;gt;Tomcat 6 &amp;lt;/code&amp;gt; wählen&lt;br /&gt;
  Medium:Eclipse_Tomcat_04.png | Pfad zu Tomcat-Server angeben&lt;br /&gt;
  Medium:Eclipse_Tomcat_01.png | Generischs Projekt erstellen: &amp;lt;code&amp;gt;Andere&amp;lt;/code&amp;gt; wählen&lt;br /&gt;
  Medium:Eclipse_Tomcat_05.png | Generische Projekt erstellen: &amp;lt;code&amp;gt;Projekt&amp;lt;/code&amp;gt; wählen&lt;br /&gt;
  Medium:Eclipse_Tomcat_06.png | Projektname &amp;lt;code&amp;gt;Tomcat&amp;lt;/code&amp;gt;&lt;br /&gt;
  Medium:Eclipse_Tomcat_07.png | Tomcat konfigurieren und mit &amp;lt;code&amp;gt;Strg-S&amp;lt;/code&amp;gt; speichern&lt;br /&gt;
  Medium:Eclipse_Tomcat_08.png | Tomcat verwalten: starten/stoppen/etc.&lt;br /&gt;
  Medium:Eclipse_Tomcat_09.png | Tomcat-Log-Datei: Der Start war erfolgreich&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Integration von Apache=&lt;br /&gt;
{{TBD}}&lt;br /&gt;
&lt;br /&gt;
=Quellen=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; {{Quelle|Kowarschick, W.: Content-Management}}&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; {{Quelle|Kowarschick, W.: Multimedia-Datenbanksysteme}}&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; {{Quelle|Kowarschick, W.: Multimedia-Programmierung}}&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
Alle übrigen Quellen wurden direkt im Text angegeben.&lt;br /&gt;
[[Kategorie:Kapitel:Web-Programmierung]][[Kategorie:Web-Programmierung-HowTo]]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== bookmarks.xml ==&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;bookmarks&amp;gt;&lt;br /&gt;
   &amp;lt;site url=&amp;quot;http://download.aptana.com/studio3/plugin/install&amp;quot; selected=&amp;quot;true&amp;quot; name=&amp;quot;Aptana Studio 3&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;site url=&amp;quot;http://editorxml.sourceforge.net/updates/&amp;quot; selected=&amp;quot;true&amp;quot; name=&amp;quot;Rinzo XML Editor&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;site url=&amp;quot;http://subclipse.tigris.org/update_1.8.x&amp;quot; selected=&amp;quot;true&amp;quot; name=&amp;quot;Subclipse 1.8.x Update Site&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bookmarks&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rayza</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=Benutzer_Diskussion:Rayza&amp;diff=23773</id>
		<title>Benutzer Diskussion:Rayza</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=Benutzer_Diskussion:Rayza&amp;diff=23773"/>
		<updated>2012-10-10T00:09:11Z</updated>

		<summary type="html">&lt;p&gt;Rayza: Neuer Abschnitt /* bookmarks.xml */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Umstrukturierungsvorschlag Eclipse Installation ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Qualität&lt;br /&gt;
|correctness         = 4&lt;br /&gt;
|extent              = 4&lt;br /&gt;
|numberOfReferences  = 5&lt;br /&gt;
|qualityOfReferences = 4&lt;br /&gt;
|conformance         = 4&lt;br /&gt;
}}&lt;br /&gt;
=Vorbemerkung=&lt;br /&gt;
&lt;br /&gt;
[[Eclipse]] ist für die Entwicklung von dynamische Web-Anwendungen mit und ohne einen Web-Server (wie z.B. Tomcat) recht gut geeignet.&lt;br /&gt;
&lt;br /&gt;
Für Windows werden folgende Annahmen gemacht: Auf der Partition C befindet sich das Windows-System und die Benutzerdaten. &lt;br /&gt;
Da Eclipse „out of the box“ läuft, wird es auf der Partition mit den Benutzerdaten installiert.&lt;br /&gt;
&lt;br /&gt;
==Android SDK (optional)==&lt;br /&gt;
Um mit Eclipse Apps für Android entwickeln zu können, wird das Android SDK benötigt.&lt;br /&gt;
Installieren Sie dies zuerst:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;http://developer.android.com/sdk/index.html&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;installer_r...-windows.exe&amp;lt;/code&amp;gt; herunterladen und ausführen. &lt;br /&gt;
* &#039;&#039;&#039;Wählen Sie einen kurzen Installationspfad ohne Leerzeichen aus, z.B. &amp;lt;code&amp;gt;C:\web\android-sdk&amp;lt;/code&amp;gt; (Windows) bzw. &amp;lt;code&amp;gt;/Benutzer/&#039;&#039;&#039;BENUTZERNAME&#039;&#039;&#039;/Programmierung/web/android-sdk&amp;lt;/code&amp;gt; (Mac OS), auf das Benutzer ohne Administrationsrechte zugreifen können.&#039;&#039;&#039; &lt;br /&gt;
* &amp;lt;code&amp;gt;Start SDK-Manager&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* APIs auswählen für die entwickelt werden soll (z.B. API 16, API 10 und Extras) ? &amp;lt;code&amp;gt;Install ... packages&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Accept All&amp;lt;/code&amp;gt; (rechts!) ? &amp;lt;code&amp;gt;Install&amp;lt;/code&amp;gt;, &#039;&#039;&#039;Achtung: Dieser Vorgang dauert länger. Sie können ihn später nachholen, indem Sie Eclipse starten und &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Android SDK Manager&amp;lt;/code&amp;gt; aufrufen&#039;&#039;&#039;&lt;br /&gt;
* Es erscheinen zwei Aufforderungen, sich einzuloggen. Diese können einfach weggeklickt werden. &lt;br /&gt;
* Aufgrund der vorherigen Aktion werden nicht alle Paktete installiert. Das ist jedoch nicht weiter schlimm.&lt;br /&gt;
* &#039;&#039;&#039;Abschließend sollte das Paket &amp;lt;code&amp;gt;Extras&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Google USB Driver&amp;lt;/code&amp;gt; separat installiert werden, sofern es nicht installiert wurde.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Vorgefertigete Eclipse-Instanzen (derzeit nur für Windows 7)==&lt;br /&gt;
&lt;br /&gt;
Für die in diesem Wiki beschriebenen Tutorien gibt es folgende vorgefertigte Eclipse-Instanzen:&lt;br /&gt;
* [http://glossar.hs-augsburg.de/svn/eclipse/eclipse_mmprog_x64.zip Eclipse für MMProg (Windows 7, 64 Bit)], [http://glossar.hs-augsburg.de/svn/eclipse/workspace_mmprog_x64.zip zugehöriger Workspace &amp;lt;code&amp;gt;workspace_mmprog&amp;lt;/code&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
Sie können diese beiden Dateien herunterladen und in einen Ordner Ihrer Wahl (am Besten &amp;lt;code&amp;gt;C:\web&amp;lt;/code&amp;gt;) entpacken.&lt;br /&gt;
Stellen Sie sicher, das das Android SDK bereits installiert wurde.&lt;br /&gt;
Rufen Sie nun &amp;lt;code&amp;gt;C:\web\eclipse\eclipse.exe&amp;lt;/code&amp;gt; auf und geben Sie &amp;lt;code&amp;gt;C:\web\workspace_mmprog&amp;lt;/code&amp;gt;&lt;br /&gt;
als Workspace an. &lt;br /&gt;
&lt;br /&gt;
Passen Sie nun den Workspace an Ihre Rechner-Umgebung an:&lt;br /&gt;
* Wenn Sie Ihren eigenen Workspace verwenden, so müssen Sie diesen noch [[Konfiguration von Eclipse|konfigurieren]].&lt;br /&gt;
* Wenn Sie den Workspace &amp;lt;code&amp;gt;workspace_mmprog&amp;lt;/code&amp;gt; verwenden, so müssen Sie noch ein Paar [[Konfiguration von Eclipse/Anpassungen_des_MMProg-Workspaces|Anpassungen]] vornehmen.&lt;br /&gt;
* Wenn Sie Eclipse vollkommen neu installieren, so sollten Sie die nachfolgenden Installationshinweise beachten.&lt;br /&gt;
&lt;br /&gt;
Tipp: Wenn man sich nicht manuell um das Updaten von Plugins kümmern möchte, empfiehlt es sich wo möglich Update Sites zu verwenden.&lt;br /&gt;
&lt;br /&gt;
=Installation von Eclipse=&lt;br /&gt;
&lt;br /&gt;
* Eclipse (Juno, 4.2) herunterladen:&lt;br /&gt;
** Eclipse IDE for Java EE Developers (32 Bit oder 64 Bit) [http://eclipse.org/downloads/ herunterladen]&lt;br /&gt;
* Zip-Datei nach &amp;lt;code&amp;gt;C:/web&amp;lt;/code&amp;gt; (Windows) bzw. &amp;lt;code&amp;gt;/Applications/&amp;lt;/code&amp;gt; (Mac OS) entpacken ? &amp;lt;code&amp;gt;C:/web/eclipse&amp;lt;/code&amp;gt; enthält Eclipse (&amp;lt;code&amp;gt;C:/web/eclipse/eclipse.exe&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;/Applications/eclipse/Eclipse.app&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=Diverse weitere Eclipse-Pakete installieren=&lt;br /&gt;
&lt;br /&gt;
==Kurze Variante (Eclipse auf Englisch)==&lt;br /&gt;
&lt;br /&gt;
===XML-Editor „Rinzo“, Subclipse und Aptana===&lt;br /&gt;
* Diese XML-Datei mit den Update-Sites herunterladen.&lt;br /&gt;
* &amp;lt;code&amp;gt;Window&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Install/Update&amp;lt;/code&amp;gt; ausklappen ? &amp;lt;code&amp;gt;Available Software Sites&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Import&amp;lt;/code&amp;gt; ? Datei auswählen ? &amp;lt;code&amp;gt;Öffnen&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Help&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Install New Software...&amp;lt;/code&amp;gt;&lt;br /&gt;
* Work with: &amp;lt;code&amp;gt;--All Available Sites--&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Aptana Studio 3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Rinzo XML Editor&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;Subclipse&amp;lt;/code&amp;gt; auswählen ? &amp;lt;code&amp;gt;Next&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Next&amp;lt;/code&amp;gt; ? Lizenzen akzeptieren ? &amp;lt;code&amp;gt;Finish&amp;lt;/code&amp;gt;&lt;br /&gt;
* Warnung akzeptieren: &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* Neustarten-Frage bejahen: &amp;lt;code&amp;gt;Yes&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Lange Variante==&lt;br /&gt;
&lt;br /&gt;
===XML-Editor „Rinzo“===&lt;br /&gt;
Da in Eclipse ein guter XML-Editor fehlt, sollte ein geeigneter Editor installiert werden.&lt;br /&gt;
Die wirklich guten Editoren gibt es leider nicht als Open-Source-Software. Der XML-Editor &lt;br /&gt;
„Rinzo“ ist zwar nicht sehr leistungsfähig, dafür aber Open-Source-Software.&lt;br /&gt;
&lt;br /&gt;
Variante 1 (Update-Site):&lt;br /&gt;
* &amp;lt;code&amp;gt;C:\web\eclipse\eclipse.exe&amp;lt;/code&amp;gt;  bzw. &amp;lt;code&amp;gt;/Applications/eclipse&amp;lt;/code&amp;gt; starten&lt;br /&gt;
* &amp;lt;code&amp;gt;Hilfe&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Neue Software installieren...&amp;lt;/code&amp;gt;&lt;br /&gt;
* Work with: &amp;lt;code&amp;gt;&#039;&#039;http://editorxml.sourceforge.net/updates&#039;&#039;&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Hinzufügen&amp;lt;/code&amp;gt;&lt;br /&gt;
* Name: &amp;lt;code&amp;gt;&#039;&#039;Subclipse&#039;&#039;&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* Alle Pakete auswählen ? &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Ich akzeptiere ...&amp;lt;/code&amp;gt; auswählen ? &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
* Warnung akzeptieren: &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Jetzt neu starten&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Variante 2 (manuell):&lt;br /&gt;
* XML-Editor Rinzo [http://sourceforge.net/projects/editorxml/ herunterladen]&lt;br /&gt;
* Inhalt der ZIP-Datei in Verzeichnis &amp;lt;code&amp;gt;C:\web\eclipse\dropins&amp;lt;/code&amp;gt;  bzw. &amp;lt;code&amp;gt;/Applications/eclipse/dropins&amp;lt;/code&amp;gt; einfügen&lt;br /&gt;
* Eclipse neu starten&lt;br /&gt;
&lt;br /&gt;
===Subclipse===&lt;br /&gt;
Sublipse ist ein recht guter [[Subversion|Subversion-Client]] für Eclipse.&lt;br /&gt;
&lt;br /&gt;
Die meisten Eclipse-Pakete können sehr einfach mit Hilfe von Update-Sites &lt;br /&gt;
installiert werden, so auch Subclipse.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;C:\web\eclipse\eclipse.exe&amp;lt;/code&amp;gt;  bzw. &amp;lt;code&amp;gt;/Applications/eclipse&amp;lt;/code&amp;gt; starten&lt;br /&gt;
* &amp;lt;code&amp;gt;Hilfe&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Neue Software installieren...&amp;lt;/code&amp;gt;&lt;br /&gt;
* Work with: &amp;lt;code&amp;gt;&#039;&#039;http://subclipse.tigris.org/update_1.8.x&#039;&#039;&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Hinzufügen&amp;lt;/code&amp;gt;&lt;br /&gt;
* Name: &amp;lt;code&amp;gt;&#039;&#039;Subclipse&#039;&#039;&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* Alle Pakete auswählen ? &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Ich akzeptiere ...&amp;lt;/code&amp;gt; auswählen ? &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
* Warnung akzeptieren: &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Jetzt neu starten&amp;lt;/code&amp;gt;&lt;br /&gt;
* Haken vor &amp;lt;code&amp;gt;Report usage ...&amp;lt;/code&amp;gt; entfernen.&lt;br /&gt;
* &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Aptana===&lt;br /&gt;
&lt;br /&gt;
Aptana ist ein Eclipse-Plugin zur Entwicklung von HTML/JavaScript-Anwendungen.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;C:\web\eclipse\eclipse.exe&amp;lt;/code&amp;gt;  bzw. &amp;lt;code&amp;gt;/Applications/eclipse&amp;lt;/code&amp;gt;  starten&lt;br /&gt;
* &amp;lt;code&amp;gt;Hilfe&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Neue Software installieren...&amp;lt;/code&amp;gt;&lt;br /&gt;
* Work with: &amp;lt;code&amp;gt;&#039;&#039;http://download.aptana.com/studio3/plugin/install&#039;&#039;&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Hinzufügen&amp;lt;/code&amp;gt;&lt;br /&gt;
* Name: &amp;lt;code&amp;gt;&#039;&#039;Aptana&#039;&#039;&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* Alle Pakete auswählen ? &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Ich akzeptiere ...&amp;lt;/code&amp;gt; auswählen ? &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
* Warnung akzeptieren: &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Jetzt neu starten&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wem das Aptana-HTML-Farbschema nicht gefällt, der kann dieses ändern:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Benutzervorgaben&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Aptana Studio&amp;lt;/code&amp;gt; aufklappen ? &amp;lt;code&amp;gt;Themes&amp;lt;/code&amp;gt; ? Drop-Down-Men+ (Inhalt &amp;lt;code&amp;gt;Aptana Studio)&amp;lt;/code&amp;gt; öffnen und neues Farbschema wählen ?&amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==YUI Compressor ==&lt;br /&gt;
&lt;br /&gt;
* YUI Compressor ([http://yuilibrary.com/download/yuicompressor/ yuicompressor-2.x.x.zip]) herunterladen&lt;br /&gt;
* yuicompressor-2.x.x.zip in den Ordner &amp;lt;code&amp;gt;C:\web\eclipse\dropins&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;/Applications/eclipse/dropins&amp;lt;/code&amp;gt; entpacken&lt;br /&gt;
* Ordner &amp;lt;code&amp;gt;C:\web\eclipse\dropins\yuicompressor&amp;lt;/code&amp;gt;  bzw. &amp;lt;code&amp;gt;/Applications/eclipse/dropins/yuicompressor&amp;lt;/code&amp;gt; erstellen&lt;br /&gt;
* In den Ordner &amp;lt;code&amp;gt;C:\web\eclipse\dropins\yuicompressor&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;/Applications/eclipse/dropins/yuicompressor&amp;lt;/code&amp;gt; die Datei [http://glossar.hs-augsburg.de/svn/eclipse/build.xml &amp;lt;code&amp;gt;build.xml&amp;lt;/code&amp;gt;]&amp;lt;ref&amp;gt;vgl. {{Quelle|Santos, S. (2009): Combine and minimize JavaScript and CSS files for faster loading}}&amp;lt;/ref&amp;gt; einfügen&lt;br /&gt;
&lt;br /&gt;
Passen Sie in der Datei &amp;lt;code&amp;gt;build.xml&amp;lt;/code&amp;gt; den Pfad und Versionnummer des YUI Compressors in den beiden Zeilen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
Windows...&lt;br /&gt;
  &amp;lt;property name=&amp;quot;BUILD_DIR&amp;quot; value=&amp;quot;C:/web/eclipse/dropins/yuicompressor-2.4.7/build&amp;quot; description=&amp;quot;Files needed to build&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;property name=&amp;quot;YUI&amp;quot; value=&amp;quot;${BUILD_DIR}/yuicompressor-2.4.7.jar&amp;quot; description=&amp;quot;YUICompressor&amp;quot; /&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
OS X...&lt;br /&gt;
  &amp;lt;property name=&amp;quot;BUILD_DIR&amp;quot; value=&amp;quot;/Applications/eclipse/dropins/yuicompressor-2.4.7/build&amp;quot; description=&amp;quot;Files needed to build&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;property name=&amp;quot;YUI&amp;quot; value=&amp;quot;${BUILD_DIR}/yuicompressor-2.4.7.jar&amp;quot; description=&amp;quot;YUICompressor&amp;quot; /&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
an Ihre Gegebenheiten an.&lt;br /&gt;
&lt;br /&gt;
==Optionale Pakete==&lt;br /&gt;
Bei folgende Pakete macht nur in bestimmten Situationen Sinn sie zu installieren.&lt;br /&gt;
&lt;br /&gt;
===ADT===&lt;br /&gt;
ADT ist ein Eclipse-Plugin, dass die Entwicklung von [[Java]]-Anwendungen für [[Android]]-[[Smarphone]]s ermöglicht.&lt;br /&gt;
Voraussetzung ist, dass das Android SDK installiert worden ist.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;C:\web\eclipse\eclipse.exe&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;/Applications/eclipse&amp;lt;/code&amp;gt; starten&lt;br /&gt;
* &amp;lt;code&amp;gt;Hilfe&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Neue Software installieren...&amp;lt;/code&amp;gt;&lt;br /&gt;
* Work with: &amp;lt;code&amp;gt;&#039;&#039;https://dl-ssl.google.com/android/eclipse/&#039;&#039;&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Hinzufügen&amp;lt;/code&amp;gt;&lt;br /&gt;
* Name: &amp;lt;code&amp;gt;&#039;&#039;ADT&#039;&#039;&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* Alle Pakete auswählen ? &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Ich akzeptiere ...&amp;lt;/code&amp;gt; auswählen ? &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
* Warnung akzeptieren: &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Jetzt neu starten&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Benutzervorgaben&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Android&amp;lt;/code&amp;gt; &lt;br /&gt;
* Wenn dieser Menü-Punkt das erste Mal aufgerufen wird, fragt Eclipse nach, ob ADT-Benutzungsstatistiken an Google gesendet werden sollen. Hier würde ich das ensprechende Häckchen entfernen ? Auf jeden Fall muss &amp;lt;code&amp;gt;Proceed&amp;lt;/code&amp;gt; angeklickt werden.&lt;br /&gt;
* SDK Location: &amp;lt;code&amp;gt;C:\web\android-sdk&amp;lt;/code&amp;gt;  bzw. &amp;lt;code&amp;gt;/Benutzer/&#039;&#039;&#039;BENUTZERNAME&#039;&#039;&#039;/Programmierung/web/android-sdk&amp;lt;/code&amp;gt;  (Installationsverzeichnis des SDK-Managers;&#039;&#039;&#039;der Pfad darf keine Leerzeichen enthalten&#039;&#039;&#039;) ? &amp;lt;code&amp;gt;Anwenden&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Android SDK Manager&amp;lt;/code&amp;gt; starten &lt;br /&gt;
* &amp;lt;code&amp;gt;Android SDK Platformtools&amp;lt;/code&amp;gt; installieren (falls diese nicht bereits installiert worden sind)&lt;br /&gt;
&lt;br /&gt;
===Deutsche Sprachpakete installieren===&lt;br /&gt;
Das [http://www.eclipse.org/babel/downloads.php Eclipse Babel Project] stellt diverse Sprach-Pakete zu Verfügung, die allerdings noch nicht ganz fertiggestellt sind.&lt;br /&gt;
&lt;br /&gt;
# Eclipse starten (&amp;lt;code&amp;gt;C:\web\eclipse\eclipse.exe&amp;lt;/code&amp;gt;  bzw. &amp;lt;code&amp;gt;/Applications/eclipse/Eclipse.app&amp;lt;/code&amp;gt;)&lt;br /&gt;
# Wählen Sie einen geeignet Workspace aus (z.B. &amp;lt;code&amp;gt;C:\web\mmprog&amp;lt;/code&amp;gt;  bzw. &amp;lt;code&amp;gt;/Benutzer/&#039;&#039;&#039;BENUTZERNAME&#039;&#039;&#039;/Studium/mmprog&amp;lt;/code&amp;gt;; auf den Laborrechnern müssen Sie Ihr Home-Verzeichnis nehmen, nicht den Desktop!)&lt;br /&gt;
# &amp;lt;code&amp;gt;Help&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Install New Software&amp;lt;/code&amp;gt;&lt;br /&gt;
# Work with: &amp;lt;code&amp;gt;&#039;&#039;http://download.eclipse.org/technology/babel/update-site/R0.10.0/juno&#039;&#039;&amp;lt;/code&amp;gt; (bei Eclipse Indigo: &amp;lt;code&amp;gt;&#039;&#039;http://archive.eclipse.org/technology/babel/update-site/R0.9.1/indigo&#039;&#039;&amp;lt;/code&amp;gt;) ? &amp;lt;code&amp;gt;Add&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;Name: &#039;&#039;Babel&#039;&#039;&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
# (lange) warten bis &amp;lt;code&amp;gt;Pending&amp;lt;/code&amp;gt; verschwindet&lt;br /&gt;
# &amp;lt;code&amp;gt;Babel Language Packs in German&amp;lt;/code&amp;gt; selektieren ? &amp;lt;code&amp;gt;Next&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Next&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;I accept ...&amp;lt;/code&amp;gt; selektieren ? &amp;lt;code&amp;gt;Finish&amp;lt;/code&amp;gt;&lt;br /&gt;
# Warnung akzeptieren: &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;Restart Now&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Häufig sind die Babel Eclipse Server überlastet und eine manuelle Installation des Sprachpakets ist optional möglich:&lt;br /&gt;
# Downloaden des Pakets &amp;lt;code&amp;gt;&#039;&#039;http://download.eclipse.org/technology/babel/babel_language_packs/R0.10.0/juno/juno.php#de&#039;&#039;&amp;lt;/code&amp;gt;  (vgl. &amp;lt;code&amp;gt;http://www.eclipse.org/babel/downloads.php&amp;lt;/code&amp;gt;)&lt;br /&gt;
# &amp;lt;code&amp;gt;BabelLanguagePack-eclipse-de_4.2.0.v20120721043402.zip&amp;lt;/code&amp;gt; herunterladen&lt;br /&gt;
# Die beiden Ordner, die im Ordner &amp;lt;code&amp;gt;eclipse&amp;lt;/code&amp;gt; des ZIP-Archivs enthalten sind, in den Eclipse-Programm-Ordner &amp;lt;code&amp;gt;C:\web\eclipse&amp;lt;/code&amp;gt;&lt;br /&gt;
# Bei OSX Vorsicht! - Inhalte der Ordner &#039;&#039;&#039;features&#039;&#039;&#039; und &#039;&#039;&#039;plugins&#039;&#039;&#039; in die jeweiligen Ordner &amp;lt;code&amp;gt;/Applications/eclipse/features&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;/Applications/eclipse/plugins&amp;lt;/code&amp;gt; kopieren&lt;br /&gt;
# Eclipse neu starten &lt;br /&gt;
&lt;br /&gt;
====Deutsche Rechtschreibprüfung installieren====&lt;br /&gt;
# [http://a-weinert.de/frame4j/downloads/de_DE.dic de_DE.dic] (von Albrecht Weinert) herunterladen und unter &amp;lt;code&amp;gt;C:/web/eclipse/dropins&amp;lt;/code&amp;gt;  bzw. &amp;lt;code&amp;gt;/Applications/eclipse/dropins&amp;lt;/code&amp;gt; speichern&lt;br /&gt;
# &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Benutzervorgaben&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Allgemein&amp;lt;/code&amp;gt; aufklappen ? &amp;lt;code&amp;gt;Editoren&amp;lt;/code&amp;gt; aufklappen ? &amp;lt;code&amp;gt;Texteditoren&amp;lt;/code&amp;gt; aufklappen ? &amp;lt;code&amp;gt;Schreibprüfung selektieren&amp;lt;/code&amp;gt; &lt;br /&gt;
# Benutzerdefiniertes Wöerterbuch: &amp;lt;code&amp;gt;Durchsuchen&amp;lt;/code&amp;gt; und die Datei &amp;lt;code&amp;gt;de_DE.dic&amp;lt;/code&amp;gt; selektieren (bzw. &amp;lt;code&amp;gt;${eclipse_home}\dropins\de_DE.dic&amp;lt;/code&amp;gt; eintragen)&lt;br /&gt;
# Codierung: &amp;lt;code&amp;gt;Sonstige&amp;lt;/code&amp;gt; anklicken ? &amp;lt;code&amp;gt;UTF-8&amp;lt;/code&amp;gt; wählen&lt;br /&gt;
# &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tipp: Wenn Sie mit der Maus ein rot unterringeltes Wort anklicken und anschließend &amp;lt;code&amp;gt;Strg-1&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;Ctrl-1&amp;lt;/code&amp;gt;) drücken,&lt;br /&gt;
können Sie das Wort ins Wörterbuch einfügen oder andere Aktionen durchführen, damit ein vermeintlicher Rechtschreibfehler nicht mehr angezeigt wird.&lt;br /&gt;
&lt;br /&gt;
==Installation des Flash Builder (optional)==&lt;br /&gt;
&lt;br /&gt;
[[Flash Builder]] ist eine kommerzielle Software, basierend auf Eclipse Indigo, zum Entwickeln von [[Flash]]-Anwendungen.&lt;br /&gt;
Man kann [http://www.adobe.com/cfusion/tdrc/index.cfm?product=flash_builder&amp;amp;loc=de Flash Builder 4.6] (nach erfolgreicher Registrierung) als 60-Tage-Testlizenz herunterladen.&lt;br /&gt;
&lt;br /&gt;
* [http://www.adobe.com/cfusion/tdrc/index.cfm?product=flash_builder&amp;amp;loc=de Flash Builder 4.6] herunterlanden&lt;br /&gt;
* Eclipse und Browser beenden&lt;br /&gt;
* FlashBuilder_4_6_LS10.exe ausführen und [http://kb2.adobe.com/de/releasenotes/921/cpsid_92180.html#main_Install%20your%20software Flash Builder installieren]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Als Studierender&#039;&#039;&#039; erhält man eine &#039;&#039;&#039;kostenlose Lizenz&#039;&#039;&#039; für den Flash Builder, indem man im [http://www.adobe.com/de/devnet/flex/free/index.html Adobe Flex Developer Center] mit seinen persönliche Daten und JPEG-Kopie der Immatrikulationsbescheinigung Lizenz anfordert. Diese wird einem dann per E-Mail zugeschickt.&lt;br /&gt;
&lt;br /&gt;
Die meisten der nachfolgenden Installations- und Konfigurationsvorschläge funktionieren auch für den Flash-Builder.&lt;br /&gt;
Sie sollten allerdings nur Subclipse und evtl. Rinzo installieren. Die anderen Pakete sind für eine Flash/ActionScript-Entwicklung&lt;br /&gt;
unnötig.&lt;br /&gt;
&lt;br /&gt;
Beachten Sie, dass der Flash Builder auf &#039;&#039;Eclipse Indigo&#039;&#039;, der Vorgänger-Version von &#039;&#039;Eclipse Juno&#039;&#039;, basiert und daher &lt;br /&gt;
die Installationsschritte leicht abweichen können.&lt;br /&gt;
&lt;br /&gt;
Zu guter Letzt sollten Sie den Flash Builder [[Konfiguration von Eclipse|konfigurieren]].&lt;br /&gt;
&lt;br /&gt;
=Eclipse konfigurieren=&lt;br /&gt;
&lt;br /&gt;
Befolgen Sie die Anweisungen von „[[Konfiguration von Eclipse]]“.&lt;br /&gt;
&lt;br /&gt;
=Integration von Tomcat=&lt;br /&gt;
&lt;br /&gt;
Tomcat wird folgendermaßen in Eclipse eingebunden:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;Datei&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Neu&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Andere&amp;lt;/code&amp;gt;&lt;br /&gt;
* Klick auf Dreieck vor &amp;lt;code&amp;gt;Server&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Server&amp;lt;/code&amp;gt;&lt;br /&gt;
* Klick auf Dreieck vor &amp;lt;code&amp;gt;Apache&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Tomcat Version 7.0 - Server&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;Fertig stellen&amp;lt;/code&amp;gt; (je nachdem, welcher Button klickbar ist)&lt;br /&gt;
* Tomcat-Installationsverzeichnis angeben: &amp;lt;code&amp;gt;C:\web\tomcat&amp;lt;/code&amp;gt;&lt;br /&gt;
* Klick auf &amp;lt;code&amp;gt;Fertig stellen&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tomcat-Projekt benötigen eine Laufzeit-Umgebung, in der die eigentlichen Web-Auftritte gespeicher werden. Hierfür gibt es mehrere Möglichkeiten:&lt;br /&gt;
* das Tomcat-Webapps-Verzeichnis (&amp;lt;code&amp;gt;C:\web\tomcat\webapps&amp;lt;/code&amp;gt;)&lt;br /&gt;
* ein spezieller Ordner im versteckten Verzeichnis  &amp;lt;code&amp;gt;C:\web\workspace\.metadata&amp;lt;/code&amp;gt; (schwer zu finden, nicht zu empfehlen)&lt;br /&gt;
* ein Eclipse-Projekt namens Tomcat, auf dessen Inhalt auch direkt über Eclipse zugegriffen werden kann&lt;br /&gt;
&lt;br /&gt;
Hier wird die dritte Möglichkeit verwendet:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;Datei&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Neu&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Andere&amp;lt;/code&amp;gt;&lt;br /&gt;
* Klick auf Dreieck vor &amp;lt;code&amp;gt;Allgemein&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Projekt&amp;lt;/code&amp;gt;&lt;br /&gt;
* Projektname: &amp;lt;code&amp;gt;Tomcat&amp;lt;/code&amp;gt;&lt;br /&gt;
* Tomcat konfigurieren: &amp;lt;code&amp;gt;Server&amp;lt;/code&amp;gt; ? Doppelklick &amp;lt;code&amp;gt;Tomcat Version 7.0 - Server&amp;lt;/code&amp;gt;&lt;br /&gt;
* Tomcat konfigurieren: &amp;lt;code&amp;gt;Use custom Location&amp;lt;/code&amp;gt; ? Server path: &amp;lt;code&amp;gt;Tomcat&amp;lt;/code&amp;gt; (das ist das zuvor angelegte Projekt), Deploy path: &amp;lt;code&amp;gt;webapps&amp;lt;/code&amp;gt;&lt;br /&gt;
* Tomcat ist einsatzbereit: &amp;lt;code&amp;gt;Server&amp;lt;/code&amp;gt; ? Rechtsklick &amp;lt;code&amp;gt;Tomcat Version 7.0 - Server&amp;lt;/code&amp;gt; oder Steuermenü in der Serverleist: Tomcat starten/stoppen etc.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;350&amp;quot; heights=&amp;quot;250&amp;quot; perrow=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
  Medium:Eclipse_Tomcat_01.png | Neue Tomcat-Umgebung erstellen: &amp;lt;code&amp;gt;Andere&amp;lt;/code&amp;gt; wählen&lt;br /&gt;
  Medium:Eclipse_Tomcat_02.png | Neue Tomcat-Umgebung erstellen: &amp;lt;code&amp;gt;Server&amp;lt;/code&amp;gt; wählen&lt;br /&gt;
  Medium:Eclipse_Tomcat_03.png | Neue Tomcat-Umgebung erstellen: &amp;lt;code&amp;gt;Tomcat 6 &amp;lt;/code&amp;gt; wählen&lt;br /&gt;
  Medium:Eclipse_Tomcat_04.png | Pfad zu Tomcat-Server angeben&lt;br /&gt;
  Medium:Eclipse_Tomcat_01.png | Generischs Projekt erstellen: &amp;lt;code&amp;gt;Andere&amp;lt;/code&amp;gt; wählen&lt;br /&gt;
  Medium:Eclipse_Tomcat_05.png | Generische Projekt erstellen: &amp;lt;code&amp;gt;Projekt&amp;lt;/code&amp;gt; wählen&lt;br /&gt;
  Medium:Eclipse_Tomcat_06.png | Projektname &amp;lt;code&amp;gt;Tomcat&amp;lt;/code&amp;gt;&lt;br /&gt;
  Medium:Eclipse_Tomcat_07.png | Tomcat konfigurieren und mit &amp;lt;code&amp;gt;Strg-S&amp;lt;/code&amp;gt; speichern&lt;br /&gt;
  Medium:Eclipse_Tomcat_08.png | Tomcat verwalten: starten/stoppen/etc.&lt;br /&gt;
  Medium:Eclipse_Tomcat_09.png | Tomcat-Log-Datei: Der Start war erfolgreich&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Integration von Apache=&lt;br /&gt;
{{TBD}}&lt;br /&gt;
&lt;br /&gt;
=Quellen=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; {{Quelle|Kowarschick, W.: Content-Management}}&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; {{Quelle|Kowarschick, W.: Multimedia-Datenbanksysteme}}&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; {{Quelle|Kowarschick, W.: Multimedia-Programmierung}}&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
Alle übrigen Quellen wurden direkt im Text angegeben.&lt;br /&gt;
[[Kategorie:Kapitel:Web-Programmierung]][[Kategorie:Web-Programmierung-HowTo]]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== bookmarks.xml ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;bookmarks&amp;gt;&lt;br /&gt;
   &amp;lt;site url=&amp;quot;http://download.aptana.com/studio3/plugin/install&amp;quot; selected=&amp;quot;true&amp;quot; name=&amp;quot;Aptana Studio 3&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;site url=&amp;quot;http://editorxml.sourceforge.net/updates/&amp;quot; selected=&amp;quot;true&amp;quot; name=&amp;quot;Rinzo XML Editor&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;site url=&amp;quot;http://subclipse.tigris.org/update_1.8.x&amp;quot; selected=&amp;quot;true&amp;quot; name=&amp;quot;Subclipse 1.8.x Update Site&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/bookmarks&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rayza</name></author>
	</entry>
	<entry>
		<id>https://glossar.hs-augsburg.de/w/index.php?title=Benutzer_Diskussion:Rayza&amp;diff=23772</id>
		<title>Benutzer Diskussion:Rayza</title>
		<link rel="alternate" type="text/html" href="https://glossar.hs-augsburg.de/w/index.php?title=Benutzer_Diskussion:Rayza&amp;diff=23772"/>
		<updated>2012-10-09T22:47:00Z</updated>

		<summary type="html">&lt;p&gt;Rayza: Umstrukturierungsvorschlag Eclipse Installation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Umstrukturierungsvorschlag Eclipse Installation ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Qualität&lt;br /&gt;
|correctness         = 4&lt;br /&gt;
|extent              = 4&lt;br /&gt;
|numberOfReferences  = 5&lt;br /&gt;
|qualityOfReferences = 4&lt;br /&gt;
|conformance         = 4&lt;br /&gt;
}}&lt;br /&gt;
=Vorbemerkung=&lt;br /&gt;
&lt;br /&gt;
[[Eclipse]] ist für die Entwicklung von dynamische Web-Anwendungen mit und ohne einen Web-Server (wie z.B. Tomcat) recht gut geeignet.&lt;br /&gt;
&lt;br /&gt;
Für Windows werden folgende Annahmen gemacht: Auf der Partition C befindet sich das Windows-System und die Benutzerdaten. &lt;br /&gt;
Da Eclipse „out of the box“ läuft, wird es auf der Partition mit den Benutzerdaten installiert.&lt;br /&gt;
&lt;br /&gt;
==Android SDK (optional)==&lt;br /&gt;
Um mit Eclipse Apps für Android entwickeln zu können, wird das Android SDK benötigt.&lt;br /&gt;
Installieren Sie dies zuerst:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;http://developer.android.com/sdk/index.html&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;installer_r...-windows.exe&amp;lt;/code&amp;gt; herunterladen und ausführen. &lt;br /&gt;
* &#039;&#039;&#039;Wählen Sie einen kurzen Installationspfad ohne Leerzeichen aus, z.B. &amp;lt;code&amp;gt;C:\web\android-sdk&amp;lt;/code&amp;gt; (Windows) bzw. &amp;lt;code&amp;gt;/Benutzer/&#039;&#039;&#039;BENUTZERNAME&#039;&#039;&#039;/Programmierung/web/android-sdk&amp;lt;/code&amp;gt; (Mac OS), auf das Benutzer ohne Administrationsrechte zugreifen können.&#039;&#039;&#039; &lt;br /&gt;
* &amp;lt;code&amp;gt;Start SDK-Manager&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* APIs auswählen für die entwickelt werden soll (z.B. API 16, API 10 und Extras) ? &amp;lt;code&amp;gt;Install ... packages&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Accept All&amp;lt;/code&amp;gt; (rechts!) ? &amp;lt;code&amp;gt;Install&amp;lt;/code&amp;gt;, &#039;&#039;&#039;Achtung: Dieser Vorgang dauert länger. Sie können ihn später nachholen, indem Sie Eclipse starten und &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Android SDK Manager&amp;lt;/code&amp;gt; aufrufen&#039;&#039;&#039;&lt;br /&gt;
* Es erscheinen zwei Aufforderungen, sich einzuloggen. Diese können einfach weggeklickt werden. &lt;br /&gt;
* Aufgrund der vorherigen Aktion werden nicht alle Paktete installiert. Das ist jedoch nicht weiter schlimm.&lt;br /&gt;
* &#039;&#039;&#039;Abschließend sollte das Paket &amp;lt;code&amp;gt;Extras&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Google USB Driver&amp;lt;/code&amp;gt; separat installiert werden, sofern es nicht installiert wurde.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Vorgefertigete Eclipse-Instanzen (derzeit nur für Windows 7)==&lt;br /&gt;
&lt;br /&gt;
Für die in diesem Wiki beschriebenen Tutorien gibt es folgende vorgefertigte Eclipse-Instanzen:&lt;br /&gt;
* [http://glossar.hs-augsburg.de/svn/eclipse/eclipse_mmprog_x64.zip Eclipse für MMProg (Windows 7, 64 Bit)], [http://glossar.hs-augsburg.de/svn/eclipse/workspace_mmprog_x64.zip zugehöriger Workspace &amp;lt;code&amp;gt;workspace_mmprog&amp;lt;/code&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
Sie können diese beiden Dateien herunterladen und in einen Ordner Ihrer Wahl (am Besten &amp;lt;code&amp;gt;C:\web&amp;lt;/code&amp;gt;) entpacken.&lt;br /&gt;
Stellen Sie sicher, das das Android SDK bereits installiert wurde.&lt;br /&gt;
Rufen Sie nun &amp;lt;code&amp;gt;C:\web\eclipse\eclipse.exe&amp;lt;/code&amp;gt; auf und geben Sie &amp;lt;code&amp;gt;C:\web\workspace_mmprog&amp;lt;/code&amp;gt;&lt;br /&gt;
als Workspace an. &lt;br /&gt;
&lt;br /&gt;
Passen Sie nun den Workspace an Ihre Rechner-Umgebung an:&lt;br /&gt;
* Wenn Sie Ihren eigenen Workspace verwenden, so müssen Sie diesen noch [[Konfiguration von Eclipse|konfigurieren]].&lt;br /&gt;
* Wenn Sie den Workspace &amp;lt;code&amp;gt;workspace_mmprog&amp;lt;/code&amp;gt; verwenden, so müssen Sie noch ein Paar [[Konfiguration von Eclipse/Anpassungen_des_MMProg-Workspaces|Anpassungen]] vornehmen.&lt;br /&gt;
* Wenn Sie Eclipse vollkommen neu installieren, so sollten Sie die nachfolgenden Installationshinweise beachten.&lt;br /&gt;
&lt;br /&gt;
Tipp: Wenn man sich nicht manuell um das Updaten von Plugins kümmern möchte, empfiehlt es sich wo möglich Update Sites zu verwenden.&lt;br /&gt;
&lt;br /&gt;
=Installation von Eclipse=&lt;br /&gt;
&lt;br /&gt;
* Eclipse (Juno, 4.2) herunterladen:&lt;br /&gt;
** Eclipse IDE for Java EE Developers (32 Bit oder 64 Bit) [http://eclipse.org/downloads/ herunterladen]&lt;br /&gt;
* Zip-Datei nach &amp;lt;code&amp;gt;C:/web&amp;lt;/code&amp;gt; (Windows) bzw. &amp;lt;code&amp;gt;/Applications/&amp;lt;/code&amp;gt; (Mac OS) entpacken ? &amp;lt;code&amp;gt;C:/web/eclipse&amp;lt;/code&amp;gt; enthält Eclipse (&amp;lt;code&amp;gt;C:/web/eclipse/eclipse.exe&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;/Applications/eclipse/Eclipse.app&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=Diverse weitere Eclipse-Pakete installieren=&lt;br /&gt;
&lt;br /&gt;
==Kurze Variante (Eclipse auf Englisch)==&lt;br /&gt;
&lt;br /&gt;
===XML-Editor „Rinzo“, Subclipse und Aptana===&lt;br /&gt;
* Diese XML-Datei mit den Update-Sites herunterladen.&lt;br /&gt;
* &amp;lt;code&amp;gt;Window&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Install/Update&amp;lt;/code&amp;gt; ausklappen ? &amp;lt;code&amp;gt;Available Software Sites&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Import&amp;lt;/code&amp;gt; ? Datei auswählen ? &amp;lt;code&amp;gt;Öffnen&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Help&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Install New Software...&amp;lt;/code&amp;gt;&lt;br /&gt;
* Work with: &amp;lt;code&amp;gt;--All Available Sites--&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Aptana Studio 3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Rinzo XML Editor&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;Subclipse&amp;lt;/code&amp;gt; auswählen ? &amp;lt;code&amp;gt;Next&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Next&amp;lt;/code&amp;gt; ? Lizenzen akzeptieren ? &amp;lt;code&amp;gt;Finish&amp;lt;/code&amp;gt;&lt;br /&gt;
* Warnung akzeptieren: &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* Neustarten-Frage bejahen: &amp;lt;code&amp;gt;Yes&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Lange Variante==&lt;br /&gt;
&lt;br /&gt;
===XML-Editor „Rinzo“===&lt;br /&gt;
Da in Eclipse ein guter XML-Editor fehlt, sollte ein geeigneter Editor installiert werden.&lt;br /&gt;
Die wirklich guten Editoren gibt es leider nicht als Open-Source-Software. Der XML-Editor &lt;br /&gt;
„Rinzo“ ist zwar nicht sehr leistungsfähig, dafür aber Open-Source-Software.&lt;br /&gt;
&lt;br /&gt;
Variante 1 (Update-Site):&lt;br /&gt;
* &amp;lt;code&amp;gt;C:\web\eclipse\eclipse.exe&amp;lt;/code&amp;gt;  bzw. &amp;lt;code&amp;gt;/Applications/eclipse&amp;lt;/code&amp;gt; starten&lt;br /&gt;
* &amp;lt;code&amp;gt;Hilfe&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Neue Software installieren...&amp;lt;/code&amp;gt;&lt;br /&gt;
* Work with: &amp;lt;code&amp;gt;&#039;&#039;http://editorxml.sourceforge.net/updates&#039;&#039;&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Hinzufügen&amp;lt;/code&amp;gt;&lt;br /&gt;
* Name: &amp;lt;code&amp;gt;&#039;&#039;Subclipse&#039;&#039;&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* Alle Pakete auswählen ? &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Ich akzeptiere ...&amp;lt;/code&amp;gt; auswählen ? &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
* Warnung akzeptieren: &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Jetzt neu starten&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Variante 2 (manuell):&lt;br /&gt;
* XML-Editor Rinzo [http://sourceforge.net/projects/editorxml/ herunterladen]&lt;br /&gt;
* Inhalt der ZIP-Datei in Verzeichnis &amp;lt;code&amp;gt;C:\web\eclipse\dropins&amp;lt;/code&amp;gt;  bzw. &amp;lt;code&amp;gt;/Applications/eclipse/dropins&amp;lt;/code&amp;gt; einfügen&lt;br /&gt;
* Eclipse neu starten&lt;br /&gt;
&lt;br /&gt;
===Subclipse===&lt;br /&gt;
Sublipse ist ein recht guter [[Subversion|Subversion-Client]] für Eclipse.&lt;br /&gt;
&lt;br /&gt;
Die meisten Eclipse-Pakete können sehr einfach mit Hilfe von Update-Sites &lt;br /&gt;
installiert werden, so auch Subclipse.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;C:\web\eclipse\eclipse.exe&amp;lt;/code&amp;gt;  bzw. &amp;lt;code&amp;gt;/Applications/eclipse&amp;lt;/code&amp;gt; starten&lt;br /&gt;
* &amp;lt;code&amp;gt;Hilfe&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Neue Software installieren...&amp;lt;/code&amp;gt;&lt;br /&gt;
* Work with: &amp;lt;code&amp;gt;&#039;&#039;http://subclipse.tigris.org/update_1.8.x&#039;&#039;&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Hinzufügen&amp;lt;/code&amp;gt;&lt;br /&gt;
* Name: &amp;lt;code&amp;gt;&#039;&#039;Subclipse&#039;&#039;&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* Alle Pakete auswählen ? &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Ich akzeptiere ...&amp;lt;/code&amp;gt; auswählen ? &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
* Warnung akzeptieren: &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Jetzt neu starten&amp;lt;/code&amp;gt;&lt;br /&gt;
* Haken vor &amp;lt;code&amp;gt;Report usage ...&amp;lt;/code&amp;gt; entfernen.&lt;br /&gt;
* &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Aptana===&lt;br /&gt;
&lt;br /&gt;
Aptana ist ein Eclipse-Plugin zur Entwicklung von HTML/JavaScript-Anwendungen.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;C:\web\eclipse\eclipse.exe&amp;lt;/code&amp;gt;  bzw. &amp;lt;code&amp;gt;/Applications/eclipse&amp;lt;/code&amp;gt;  starten&lt;br /&gt;
* &amp;lt;code&amp;gt;Hilfe&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Neue Software installieren...&amp;lt;/code&amp;gt;&lt;br /&gt;
* Work with: &amp;lt;code&amp;gt;&#039;&#039;http://download.aptana.com/studio3/plugin/install&#039;&#039;&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Hinzufügen&amp;lt;/code&amp;gt;&lt;br /&gt;
* Name: &amp;lt;code&amp;gt;&#039;&#039;Aptana&#039;&#039;&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* Alle Pakete auswählen ? &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Ich akzeptiere ...&amp;lt;/code&amp;gt; auswählen ? &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
* Warnung akzeptieren: &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Jetzt neu starten&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wem das Aptana-HTML-Farbschema nicht gefällt, der kann dieses ändern:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Benutzervorgaben&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Aptana Studio&amp;lt;/code&amp;gt; aufklappen ? &amp;lt;code&amp;gt;Themes&amp;lt;/code&amp;gt; ? Drop-Down-Men+ (Inhalt &amp;lt;code&amp;gt;Aptana Studio)&amp;lt;/code&amp;gt; öffnen und neues Farbschema wählen ?&amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==YUI Compressor ==&lt;br /&gt;
&lt;br /&gt;
* YUI Compressor ([http://yuilibrary.com/download/yuicompressor/ yuicompressor-2.x.x.zip]) herunterladen&lt;br /&gt;
* yuicompressor-2.x.x.zip in den Ordner &amp;lt;code&amp;gt;C:\web\eclipse\dropins&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;/Applications/eclipse/dropins&amp;lt;/code&amp;gt; entpacken&lt;br /&gt;
* Ordner &amp;lt;code&amp;gt;C:\web\eclipse\dropins\yuicompressor&amp;lt;/code&amp;gt;  bzw. &amp;lt;code&amp;gt;/Applications/eclipse/dropins/yuicompressor&amp;lt;/code&amp;gt; erstellen&lt;br /&gt;
* In den Ordner &amp;lt;code&amp;gt;C:\web\eclipse\dropins\yuicompressor&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;/Applications/eclipse/dropins/yuicompressor&amp;lt;/code&amp;gt; die Datei [http://glossar.hs-augsburg.de/svn/eclipse/build.xml &amp;lt;code&amp;gt;build.xml&amp;lt;/code&amp;gt;]&amp;lt;ref&amp;gt;vgl. {{Quelle|Santos, S. (2009): Combine and minimize JavaScript and CSS files for faster loading}}&amp;lt;/ref&amp;gt; einfügen&lt;br /&gt;
&lt;br /&gt;
Passen Sie in der Datei &amp;lt;code&amp;gt;build.xml&amp;lt;/code&amp;gt; den Pfad und Versionnummer des YUI Compressors in den beiden Zeilen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
Windows...&lt;br /&gt;
  &amp;lt;property name=&amp;quot;BUILD_DIR&amp;quot; value=&amp;quot;C:/web/eclipse/dropins/yuicompressor-2.4.7/build&amp;quot; description=&amp;quot;Files needed to build&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;property name=&amp;quot;YUI&amp;quot; value=&amp;quot;${BUILD_DIR}/yuicompressor-2.4.7.jar&amp;quot; description=&amp;quot;YUICompressor&amp;quot; /&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
OS X...&lt;br /&gt;
  &amp;lt;property name=&amp;quot;BUILD_DIR&amp;quot; value=&amp;quot;/Applications/eclipse/dropins/yuicompressor-2.4.7/build&amp;quot; description=&amp;quot;Files needed to build&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;property name=&amp;quot;YUI&amp;quot; value=&amp;quot;${BUILD_DIR}/yuicompressor-2.4.7.jar&amp;quot; description=&amp;quot;YUICompressor&amp;quot; /&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
an Ihre Gegebenheiten an.&lt;br /&gt;
&lt;br /&gt;
==Optionale Pakete==&lt;br /&gt;
Bei folgende Pakete macht nur in bestimmten Situationen Sinn sie zu installieren.&lt;br /&gt;
&lt;br /&gt;
===ADT===&lt;br /&gt;
ADT ist ein Eclipse-Plugin, dass die Entwicklung von [[Java]]-Anwendungen für [[Android]]-[[Smarphone]]s ermöglicht.&lt;br /&gt;
Voraussetzung ist, dass das Android SDK installiert worden ist.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;C:\web\eclipse\eclipse.exe&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;/Applications/eclipse&amp;lt;/code&amp;gt; starten&lt;br /&gt;
* &amp;lt;code&amp;gt;Hilfe&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Neue Software installieren...&amp;lt;/code&amp;gt;&lt;br /&gt;
* Work with: &amp;lt;code&amp;gt;&#039;&#039;https://dl-ssl.google.com/android/eclipse/&#039;&#039;&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Hinzufügen&amp;lt;/code&amp;gt;&lt;br /&gt;
* Name: &amp;lt;code&amp;gt;&#039;&#039;ADT&#039;&#039;&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* Alle Pakete auswählen ? &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Ich akzeptiere ...&amp;lt;/code&amp;gt; auswählen ? &amp;lt;code&amp;gt;Fertigstellen&amp;lt;/code&amp;gt;&lt;br /&gt;
* Warnung akzeptieren: &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Jetzt neu starten&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Benutzervorgaben&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Android&amp;lt;/code&amp;gt; &lt;br /&gt;
* Wenn dieser Menü-Punkt das erste Mal aufgerufen wird, fragt Eclipse nach, ob ADT-Benutzungsstatistiken an Google gesendet werden sollen. Hier würde ich das ensprechende Häckchen entfernen ? Auf jeden Fall muss &amp;lt;code&amp;gt;Proceed&amp;lt;/code&amp;gt; angeklickt werden.&lt;br /&gt;
* SDK Location: &amp;lt;code&amp;gt;C:\web\android-sdk&amp;lt;/code&amp;gt;  bzw. &amp;lt;code&amp;gt;/Benutzer/&#039;&#039;&#039;BENUTZERNAME&#039;&#039;&#039;/Programmierung/web/android-sdk&amp;lt;/code&amp;gt;  (Installationsverzeichnis des SDK-Managers;&#039;&#039;&#039;der Pfad darf keine Leerzeichen enthalten&#039;&#039;&#039;) ? &amp;lt;code&amp;gt;Anwenden&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Android SDK Manager&amp;lt;/code&amp;gt; starten &lt;br /&gt;
* &amp;lt;code&amp;gt;Android SDK Platformtools&amp;lt;/code&amp;gt; installieren (falls diese nicht bereits installiert worden sind)&lt;br /&gt;
&lt;br /&gt;
===Deutsche Sprachpakete installieren===&lt;br /&gt;
Das [http://www.eclipse.org/babel/downloads.php Eclipse Babel Project] stellt diverse Sprach-Pakete zu Verfügung, die allerdings noch nicht ganz fertiggestellt sind.&lt;br /&gt;
&lt;br /&gt;
# Eclipse starten (&amp;lt;code&amp;gt;C:\web\eclipse\eclipse.exe&amp;lt;/code&amp;gt;  bzw. &amp;lt;code&amp;gt;/Applications/eclipse/Eclipse.app&amp;lt;/code&amp;gt;)&lt;br /&gt;
# Wählen Sie einen geeignet Workspace aus (z.B. &amp;lt;code&amp;gt;C:\web\mmprog&amp;lt;/code&amp;gt;  bzw. &amp;lt;code&amp;gt;/Benutzer/&#039;&#039;&#039;BENUTZERNAME&#039;&#039;&#039;/Studium/mmprog&amp;lt;/code&amp;gt;; auf den Laborrechnern müssen Sie Ihr Home-Verzeichnis nehmen, nicht den Desktop!)&lt;br /&gt;
# &amp;lt;code&amp;gt;Help&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Install New Software&amp;lt;/code&amp;gt;&lt;br /&gt;
# Work with: &amp;lt;code&amp;gt;&#039;&#039;http://download.eclipse.org/technology/babel/update-site/R0.10.0/juno&#039;&#039;&amp;lt;/code&amp;gt; (bei Eclipse Indigo: &amp;lt;code&amp;gt;&#039;&#039;http://archive.eclipse.org/technology/babel/update-site/R0.9.1/indigo&#039;&#039;&amp;lt;/code&amp;gt;) ? &amp;lt;code&amp;gt;Add&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;Name: &#039;&#039;Babel&#039;&#039;&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
# (lange) warten bis &amp;lt;code&amp;gt;Pending&amp;lt;/code&amp;gt; verschwindet&lt;br /&gt;
# &amp;lt;code&amp;gt;Babel Language Packs in German&amp;lt;/code&amp;gt; selektieren ? &amp;lt;code&amp;gt;Next&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Next&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;I accept ...&amp;lt;/code&amp;gt; selektieren ? &amp;lt;code&amp;gt;Finish&amp;lt;/code&amp;gt;&lt;br /&gt;
# Warnung akzeptieren: &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;Restart Now&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Häufig sind die Babel Eclipse Server überlastet und eine manuelle Installation des Sprachpakets ist optional möglich:&lt;br /&gt;
# Downloaden des Pakets &amp;lt;code&amp;gt;&#039;&#039;http://download.eclipse.org/technology/babel/babel_language_packs/R0.10.0/juno/juno.php#de&#039;&#039;&amp;lt;/code&amp;gt;  (vgl. &amp;lt;code&amp;gt;http://www.eclipse.org/babel/downloads.php&amp;lt;/code&amp;gt;)&lt;br /&gt;
# &amp;lt;code&amp;gt;BabelLanguagePack-eclipse-de_4.2.0.v20120721043402.zip&amp;lt;/code&amp;gt; herunterladen&lt;br /&gt;
# Die beiden Ordner, die im Ordner &amp;lt;code&amp;gt;eclipse&amp;lt;/code&amp;gt; des ZIP-Archivs enthalten sind, in den Eclipse-Programm-Ordner &amp;lt;code&amp;gt;C:\web\eclipse&amp;lt;/code&amp;gt;&lt;br /&gt;
# Bei OSX Vorsicht! - Inhalte der Ordner &#039;&#039;&#039;features&#039;&#039;&#039; und &#039;&#039;&#039;plugins&#039;&#039;&#039; in die jeweiligen Ordner &amp;lt;code&amp;gt;/Applications/eclipse/features&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;/Applications/eclipse/plugins&amp;lt;/code&amp;gt; kopieren&lt;br /&gt;
# Eclipse neu starten &lt;br /&gt;
&lt;br /&gt;
====Deutsche Rechtschreibprüfung installieren====&lt;br /&gt;
# [http://a-weinert.de/frame4j/downloads/de_DE.dic de_DE.dic] (von Albrecht Weinert) herunterladen und unter &amp;lt;code&amp;gt;C:/web/eclipse/dropins&amp;lt;/code&amp;gt;  bzw. &amp;lt;code&amp;gt;/Applications/eclipse/dropins&amp;lt;/code&amp;gt; speichern&lt;br /&gt;
# &amp;lt;code&amp;gt;Fenster&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Benutzervorgaben&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Allgemein&amp;lt;/code&amp;gt; aufklappen ? &amp;lt;code&amp;gt;Editoren&amp;lt;/code&amp;gt; aufklappen ? &amp;lt;code&amp;gt;Texteditoren&amp;lt;/code&amp;gt; aufklappen ? &amp;lt;code&amp;gt;Schreibprüfung selektieren&amp;lt;/code&amp;gt; &lt;br /&gt;
# Benutzerdefiniertes Wöerterbuch: &amp;lt;code&amp;gt;Durchsuchen&amp;lt;/code&amp;gt; und die Datei &amp;lt;code&amp;gt;de_DE.dic&amp;lt;/code&amp;gt; selektieren (bzw. &amp;lt;code&amp;gt;${eclipse_home}\dropins\de_DE.dic&amp;lt;/code&amp;gt; eintragen)&lt;br /&gt;
# Codierung: &amp;lt;code&amp;gt;Sonstige&amp;lt;/code&amp;gt; anklicken ? &amp;lt;code&amp;gt;UTF-8&amp;lt;/code&amp;gt; wählen&lt;br /&gt;
# &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tipp: Wenn Sie mit der Maus ein rot unterringeltes Wort anklicken und anschließend &amp;lt;code&amp;gt;Strg-1&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;Ctrl-1&amp;lt;/code&amp;gt;) drücken,&lt;br /&gt;
können Sie das Wort ins Wörterbuch einfügen oder andere Aktionen durchführen, damit ein vermeintlicher Rechtschreibfehler nicht mehr angezeigt wird.&lt;br /&gt;
&lt;br /&gt;
==Installation des Flash Builder (optional)==&lt;br /&gt;
&lt;br /&gt;
[[Flash Builder]] ist eine kommerzielle Software, basierend auf Eclipse Indigo, zum Entwickeln von [[Flash]]-Anwendungen.&lt;br /&gt;
Man kann [http://www.adobe.com/cfusion/tdrc/index.cfm?product=flash_builder&amp;amp;loc=de Flash Builder 4.6] (nach erfolgreicher Registrierung) als 60-Tage-Testlizenz herunterladen.&lt;br /&gt;
&lt;br /&gt;
* [http://www.adobe.com/cfusion/tdrc/index.cfm?product=flash_builder&amp;amp;loc=de Flash Builder 4.6] herunterlanden&lt;br /&gt;
* Eclipse und Browser beenden&lt;br /&gt;
* FlashBuilder_4_6_LS10.exe ausführen und [http://kb2.adobe.com/de/releasenotes/921/cpsid_92180.html#main_Install%20your%20software Flash Builder installieren]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Als Studierender&#039;&#039;&#039; erhält man eine &#039;&#039;&#039;kostenlose Lizenz&#039;&#039;&#039; für den Flash Builder, indem man im [http://www.adobe.com/de/devnet/flex/free/index.html Adobe Flex Developer Center] mit seinen persönliche Daten und JPEG-Kopie der Immatrikulationsbescheinigung Lizenz anfordert. Diese wird einem dann per E-Mail zugeschickt.&lt;br /&gt;
&lt;br /&gt;
Die meisten der nachfolgenden Installations- und Konfigurationsvorschläge funktionieren auch für den Flash-Builder.&lt;br /&gt;
Sie sollten allerdings nur Subclipse und evtl. Rinzo installieren. Die anderen Pakete sind für eine Flash/ActionScript-Entwicklung&lt;br /&gt;
unnötig.&lt;br /&gt;
&lt;br /&gt;
Beachten Sie, dass der Flash Builder auf &#039;&#039;Eclipse Indigo&#039;&#039;, der Vorgänger-Version von &#039;&#039;Eclipse Juno&#039;&#039;, basiert und daher &lt;br /&gt;
die Installationsschritte leicht abweichen können.&lt;br /&gt;
&lt;br /&gt;
Zu guter Letzt sollten Sie den Flash Builder [[Konfiguration von Eclipse|konfigurieren]].&lt;br /&gt;
&lt;br /&gt;
=Eclipse konfigurieren=&lt;br /&gt;
&lt;br /&gt;
Befolgen Sie die Anweisungen von „[[Konfiguration von Eclipse]]“.&lt;br /&gt;
&lt;br /&gt;
=Integration von Tomcat=&lt;br /&gt;
&lt;br /&gt;
Tomcat wird folgendermaßen in Eclipse eingebunden:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;Datei&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Neu&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Andere&amp;lt;/code&amp;gt;&lt;br /&gt;
* Klick auf Dreieck vor &amp;lt;code&amp;gt;Server&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Server&amp;lt;/code&amp;gt;&lt;br /&gt;
* Klick auf Dreieck vor &amp;lt;code&amp;gt;Apache&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Tomcat Version 7.0 - Server&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Weiter&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;Fertig stellen&amp;lt;/code&amp;gt; (je nachdem, welcher Button klickbar ist)&lt;br /&gt;
* Tomcat-Installationsverzeichnis angeben: &amp;lt;code&amp;gt;C:\web\tomcat&amp;lt;/code&amp;gt;&lt;br /&gt;
* Klick auf &amp;lt;code&amp;gt;Fertig stellen&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tomcat-Projekt benötigen eine Laufzeit-Umgebung, in der die eigentlichen Web-Auftritte gespeicher werden. Hierfür gibt es mehrere Möglichkeiten:&lt;br /&gt;
* das Tomcat-Webapps-Verzeichnis (&amp;lt;code&amp;gt;C:\web\tomcat\webapps&amp;lt;/code&amp;gt;)&lt;br /&gt;
* ein spezieller Ordner im versteckten Verzeichnis  &amp;lt;code&amp;gt;C:\web\workspace\.metadata&amp;lt;/code&amp;gt; (schwer zu finden, nicht zu empfehlen)&lt;br /&gt;
* ein Eclipse-Projekt namens Tomcat, auf dessen Inhalt auch direkt über Eclipse zugegriffen werden kann&lt;br /&gt;
&lt;br /&gt;
Hier wird die dritte Möglichkeit verwendet:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;Datei&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Neu&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Andere&amp;lt;/code&amp;gt;&lt;br /&gt;
* Klick auf Dreieck vor &amp;lt;code&amp;gt;Allgemein&amp;lt;/code&amp;gt; ? &amp;lt;code&amp;gt;Projekt&amp;lt;/code&amp;gt;&lt;br /&gt;
* Projektname: &amp;lt;code&amp;gt;Tomcat&amp;lt;/code&amp;gt;&lt;br /&gt;
* Tomcat konfigurieren: &amp;lt;code&amp;gt;Server&amp;lt;/code&amp;gt; ? Doppelklick &amp;lt;code&amp;gt;Tomcat Version 7.0 - Server&amp;lt;/code&amp;gt;&lt;br /&gt;
* Tomcat konfigurieren: &amp;lt;code&amp;gt;Use custom Location&amp;lt;/code&amp;gt; ? Server path: &amp;lt;code&amp;gt;Tomcat&amp;lt;/code&amp;gt; (das ist das zuvor angelegte Projekt), Deploy path: &amp;lt;code&amp;gt;webapps&amp;lt;/code&amp;gt;&lt;br /&gt;
* Tomcat ist einsatzbereit: &amp;lt;code&amp;gt;Server&amp;lt;/code&amp;gt; ? Rechtsklick &amp;lt;code&amp;gt;Tomcat Version 7.0 - Server&amp;lt;/code&amp;gt; oder Steuermenü in der Serverleist: Tomcat starten/stoppen etc.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;350&amp;quot; heights=&amp;quot;250&amp;quot; perrow=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
  Medium:Eclipse_Tomcat_01.png | Neue Tomcat-Umgebung erstellen: &amp;lt;code&amp;gt;Andere&amp;lt;/code&amp;gt; wählen&lt;br /&gt;
  Medium:Eclipse_Tomcat_02.png | Neue Tomcat-Umgebung erstellen: &amp;lt;code&amp;gt;Server&amp;lt;/code&amp;gt; wählen&lt;br /&gt;
  Medium:Eclipse_Tomcat_03.png | Neue Tomcat-Umgebung erstellen: &amp;lt;code&amp;gt;Tomcat 6 &amp;lt;/code&amp;gt; wählen&lt;br /&gt;
  Medium:Eclipse_Tomcat_04.png | Pfad zu Tomcat-Server angeben&lt;br /&gt;
  Medium:Eclipse_Tomcat_01.png | Generischs Projekt erstellen: &amp;lt;code&amp;gt;Andere&amp;lt;/code&amp;gt; wählen&lt;br /&gt;
  Medium:Eclipse_Tomcat_05.png | Generische Projekt erstellen: &amp;lt;code&amp;gt;Projekt&amp;lt;/code&amp;gt; wählen&lt;br /&gt;
  Medium:Eclipse_Tomcat_06.png | Projektname &amp;lt;code&amp;gt;Tomcat&amp;lt;/code&amp;gt;&lt;br /&gt;
  Medium:Eclipse_Tomcat_07.png | Tomcat konfigurieren und mit &amp;lt;code&amp;gt;Strg-S&amp;lt;/code&amp;gt; speichern&lt;br /&gt;
  Medium:Eclipse_Tomcat_08.png | Tomcat verwalten: starten/stoppen/etc.&lt;br /&gt;
  Medium:Eclipse_Tomcat_09.png | Tomcat-Log-Datei: Der Start war erfolgreich&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Integration von Apache=&lt;br /&gt;
{{TBD}}&lt;br /&gt;
&lt;br /&gt;
=Quellen=&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&amp;lt;ol start=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; {{Quelle|Kowarschick, W.: Content-Management}}&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; {{Quelle|Kowarschick, W.: Multimedia-Datenbanksysteme}}&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; {{Quelle|Kowarschick, W.: Multimedia-Programmierung}}&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
Alle übrigen Quellen wurden direkt im Text angegeben.&lt;br /&gt;
[[Kategorie:Kapitel:Web-Programmierung]][[Kategorie:Web-Programmierung-HowTo]]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rayza</name></author>
	</entry>
</feed>