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

<channel>
	<title>Beiträge von Bibiana Bayer - Mobile USTP MKL</title>
	<atom:link href="https://mobile.fhstp.ac.at/author/dm131501/feed/" rel="self" type="application/rss+xml" />
	<link>https://mobile.fhstp.ac.at/author/dm131501/</link>
	<description>Die &#34;Mobile Forschungsgruppe&#34; der USTP, sie  sammelt hier alles zu den Themen Design, UX und Entwicklung mobiler Applikationen</description>
	<lastBuildDate>Sat, 31 Jan 2015 00:09:09 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://mobile.fhstp.ac.at/wp-content/uploads/2025/03/icon-120x120.webp</url>
	<title>Beiträge von Bibiana Bayer - Mobile USTP MKL</title>
	<link>https://mobile.fhstp.ac.at/author/dm131501/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Erste Schritte mit LibGDX &#8211; Android</title>
		<link>https://mobile.fhstp.ac.at/development/erste-schritte-mit-libgdx-android/</link>
					<comments>https://mobile.fhstp.ac.at/development/erste-schritte-mit-libgdx-android/#comments</comments>
		
		<dc:creator><![CDATA[Bibiana Bayer]]></dc:creator>
		<pubDate>Sat, 31 Jan 2015 00:09:09 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Native Development]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Game Development]]></category>
		<category><![CDATA[Java]]></category>
		<guid isPermaLink="false">https://akirchknopf-21110.php.fhstp.cc/?p=5158</guid>

					<description><![CDATA[<p>LibGDX ist ein Open Source Gaming Framework und erlaubt Game Development für iOS, Android, Blackberry und HTML5. Laut Homepage beinhaltet LibGDX nicht nur eine Physics Engine sondern liefert auch wichtige Tools für effektives Game Development, wie einen z.B. TexturePacker. Außerdem ist die Community riesig und die Dokumentation umfangreich und ausgiebig &#8211; deshalb kein Wunder, dass <a class="read-more" href="https://mobile.fhstp.ac.at/development/erste-schritte-mit-libgdx-android/">[...]</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/development/erste-schritte-mit-libgdx-android/">Erste Schritte mit LibGDX &#8211; Android</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><a href="http://libgdx.badlogicgames.com/index.html">LibGDX</a> ist ein Open Source Gaming Framework und erlaubt Game Development für iOS, Android, Blackberry und HTML5. Laut Homepage beinhaltet LibGDX nicht nur eine Physics Engine sondern liefert auch wichtige Tools für effektives Game Development, wie einen z.B. TexturePacker. Außerdem ist die <a href="http://www.badlogicgames.com/forum/">Community</a> riesig und die <a href="https://github.com/libgdx/libgdx/wiki">Dokumentation</a> umfangreich und ausgiebig &#8211; deshalb kein Wunder, dass ich mich bei der Suche nach einem passenden Framework für mein Android Game für LibGDX entschieden habe. In dem Artikel werde ich mich hauptsächlich mit den ersten Schritten beschäftigen die für ein Game-Development nötig sind: erkennen der Struktur des Frameworks und Aufbau eines Interfaces mit einem kleinen Einblick in Animationen. Unten findet ihr noch weitere praktische Links bezüglich Gesturedetection oder MapRendering.</p>
<p><span id="more-5158"></span></p>
<h2>LibGDX in Android Studio</h2>
<p>Wie oben erwähnt beschäftigt sich dieser Artikel ausschließlich mit LibGDX für Android. Der Erstellungsvorgang der Projektdateien zur Integration in Android Studio ist denkbar einfach. Von der Homepage erhält man eine .jar Datei &#8211; welches die ganze Arbeit bezüglich Ordnerstruktur erledigt.</p>
<p><a href="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2015/01/Bildschirmfoto-2015-01-29-um-22.41.54.png"><img fetchpriority="high" decoding="async" class="aligncenter wp-image-5163" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2015/01/Bildschirmfoto-2015-01-29-um-22.41.54-888x1024.png" alt="libgdx-create dialog" width="600" height="692" /></a>Box2d ist die Physics Engine die von LibGDX mitgeliefert wird. Sollte man im Nachhinein noch weitere Extensionen hinzufügen, kann man das ganz einfach über das Gradle File in Android Studio erledigen. Später mehr dazu! Nachdem die wunderbare Ordnerstruktur im Ordner der Wahl erstellt wurde, kann man im Android Studio über File-&gt;Import Projects das Projekt importieren. Einfach in der Ordnerhierachie im Ordner libs build.gradle auswählen &#8211; fertig. Die App sollte bereits auf dem Smartphone laufen &#8211; sieht zwar (noch)  nicht sehr sexy aus aber ein rascher Anfang!</p>
<p><a href="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2015/01/Bildschirmfoto-2015-01-29-um-22.47.57.png"><img decoding="async" class=" size-medium wp-image-5166 alignleft" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2015/01/Bildschirmfoto-2015-01-29-um-22.47.57-263x300.png" alt="Importieren des Projektes" width="263" height="300" /></a><a href="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2015/01/AndroidBuild.jpg"><img decoding="async" class=" size-medium wp-image-5168 alignright" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2015/01/AndroidBuild-300x169.jpg" alt="AndroidBuild - Erster Test" width="300" height="169" /></a></p>
<h2></h2>
<h2></h2>
<h2></h2>
<h2></h2>
<h2></h2>
<h2></h2>
<h2></h2>
<h2>Game Aufbau &#8211; erste Schritte</h2>
<p>Eins soll dem Java-Programmierer hier klar sein: der normale App-Aufbau mit Activities usw. findet mit LibGDX nicht statt. Hier wird das Game vielmehr in einzelne Screens aufgeteilt, die wiederum den Spieleinhalt je nach Framerate rendern. Aber eins nach dem anderen.</p>
<p>Vorgehensweisen variieren hier &#8211; genaue Vor- und Nachteile der einzelen Herangehensweisen sind mir nicht ganz klar geworden, ich denke es hängt hier einfach vom Programmierstil ab. Ich habe mich dafür Entschieden eine Art Main zu erstellen welches die diversen Screens beinhaltet und sich um den Screenwechsel kümmert. Die Screens wiederum kümmern sich um die Darstellung, Rendern und wenn nötig um die Spielelogik. Natürlich kann man das je nach Spielekomplexität anders schachteln &#8211; bei einigen wird vielleicht die Main-Klasse nicht nötig sein.</p>
<p>Ein grober Aufbau wäre:</p>
<p><a href="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2015/01/hierachie.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-5185" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2015/01/hierachie-1024x568.png" alt="hierachie-aufbau-libgdx" width="500" height="277" /></a></p>
<p>Wichtig: Eure Main Klasse muss von der Klasse Game erben und erhält so die Funktion create &#8211; in der sich dann auch der Einstieg in euren Programmiercode befinden wird. Hier ist ein Beispiel für die Funktionen des Screen-Wechsels, dazu wird einfach die Methode setScreen der Game-Klasse verwendet. Zur statischen Klasse AssetLoader kommen wir später.</p>
<pre>public class GameMain extends Game
{
    private StartScreen startScreen;
    private GameScreen gameScreen;
    private IntroductionScreen introductionScreen;

    @Override
    public void create() {
        AssetLoader.load(); //load all assets!!
        this.setStartScreen();
    }

    public void setStartScreen()
    {
        startScreen = new StartScreen(this);
        setScreen(startScreen);
    }

    public void setGameScreen()
    {
        gameScreen = new GameScreen(this);
        setScreen(gameScreen);
    }
}</pre>
<p>Eure verschiedenen Screens &#8211; also zum Beispiel der Anfangs-Screen, der Extras-Screen und natürlich der InGame-Screens, müssen das Interface Screen implementieren &#8211; denn das liefert euch gleich die sechs heiligen Methoden des Game-Development mit LibGDX:</p>
<ul>
<li>show() &#8211; wird aufgerufen wenn dieser Screen durch setScreen aufgerufen wird &#8211; hier sollte der Grundaufbau der graphischen Elemente stattfinden</li>
<li>render() &#8211; wird jedes Frame aufgerufen und rendert die Grafiken &#8211; es kann immer nur ein Screen gleichzeitig gerendert werden. In die ersten Zeilen der render() Methode gehören diese zwei kryptischen Zeilen (diese dienen zum löschen des Screens vor dem erneuten Zeichnen &#8211; und in diesem Fall würde der Hintergrund blau gemalt werden):
<pre>Gdx.gl.glClearColor(34 / 255f, 187 / 255f, 255 / 255f, 1);</pre>
<pre>Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);</pre>
</li>
<li>pause() &#8211; wird aufgerufen, wenn die App in den Hintergrund gelegt wird (sollte man auch händisch aufrufen, wenn man das Spiel manuell pausiert)</li>
<li>resume() &#8211; wird aufgerufen, wenn die App vom Hintergrund wieder in den Vordergrund gerufen wird (sollte man auch händisch aufrufen, wenn man das Spiel manuell fortsetzt)</li>
<li>hide() &#8211; wird aufgerufen, wenn durch die setScreen Methode ein anderer Screen aufgerufen wird</li>
<li>resize()</li>
<li>dispose() &#8211; wird von selbst nicht aufgerufen &#8211; sollte aufgerufen werden wenn der Screen alle Elemente freigeben soll (Stages, Tables, Sprites)</li>
</ul>
<p>Wie man sich denkt ist während eines laufenden Spiels das Herzstück des Programmiercodes die render() Methode der GameScreen Klasse (oder wie auch immer euer In-Game Screen heißen mag).</p>
<h2>Sprites, Buttons, Skins, &#8230; &#8211; alles rund um ums Interface</h2>
<p>Das Look&#8217;n&#8217;Feel ist bei einem Game natürlich das A und O. LibGDX liefert mit dem <a href="http://libgdx.badlogicgames.com/nightlies/">Nightlies</a> build einige nützliche Tools rund ums Interface und Grafik erstellen. Beginnen wir mit einigen wichtigen Elementen.</p>
<p><strong>Exkurs AssetLoader</strong></p>
<p>Bevor wir mit dem Erstellen von Grafiken und Buttons weitermachen, kommen wir zu der mysteriösen Code-Zeile</p>
<p>AssetLoader.load();</p>
<p>in der oben gezeigten GameMain Klasse. Wie gewohnt sind beim Android-Development Assets alles &#8220;externe&#8221; was währen der Laufzeit der Applikation verwendet werden soll. Grafiken, text, xml, json, videos und quasi alles Multimedia-mäßige gehört in den asset-folder der Projektes. Der AssetLoader ist meine selbst erstellte statische Klasse, die am Anfang alle für das Spiel benötigten Assets in eine statische Variable lädt &#8211; damit man einfach von überall aus auf diesen asset zugreifen kann. Ein einfaches Beispiel wäre:</p>
<pre>tree = new TextureRegion(graphic_atlas.findRegion("tree"));</pre>
<p>&nbsp;</p>
<p>Nun habe ich die Möglichkeit in jeder meiner Klassen mit AssetLoader.tree einen Baum zu zeichnen. Quasi alle Elemente, die wir nachher erstellen werden, werden mit dem AssetLoader geladen. Mehr dazu jedoch später.</p>
<p><strong>Bitmap Font</strong></p>
<p>Um alle Schriftarten ohne Probleme anzeigen zu können werden Bitmap Fonts verwendet. Hierfür gibt es diverse Tools. Diese erstellen im Prinzip ein großes Bild aller zu verwendeten Zeichen und einem File, in dem steht bei welchen Koordinaten welches Zeichen zu finden ist. Im <a href="https://github.com/libgdx/libgdx/wiki">LibGDX Wiki</a> werden einige Tools empfohlen &#8211; unter anderem Hiero oder GlyphDesigner. Ich habe mich für Hiero entschieden &#8211; verschiedene Möglichkeiten es zum Laufen zu bringen (sei es über die Konsole oder über Gradle) findet man <a href="https://github.com/libgdx/libgdx/wiki/Hiero">hier</a>.</p>
<p><a href="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2015/01/Bildschirmfoto-2015-01-30-um-00.45.47.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-5174" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2015/01/Bildschirmfoto-2015-01-30-um-00.45.47-1024x799.png" alt="Hiero Oberfläche" width="500" height="390" /></a></p>
<p>Das Erstellen der Font ist denkbar einfach: die Zeichen, die benötigt werden auswählen, Größe einstellen, Farbe auswählen und eventuelle Effekte hinzufügen, speichern und fertig. Das .png File und das .fnt File müssen natürlich beide sicher in den asset Ordner der Projekts abgelegt werden &#8211; damit die Applikation auch darauf zugreifen kann.</p>
<h4>Skins</h4>
<p>Um unsere Bitmap Font nun in Labels und Buttons zu verwenden, erstellt man im besten Fall einen Skin für alle Styles, die man verwenden will. Ein Skin ist im Prinzip eine JSON-Datei in der alle Styles definiert werden. Als erstes erstellt man eine BitmapFont, hernach kann man Farben definieren, dann gewünschte Labels und Buttons:</p>
<pre>{
 "com.badlogic.gdx.graphics.g2d.BitmapFont": {
    "cooperBlackSmall": { "file": "fonts/cooperBlack_small.fnt" },
 },
 "com.badlogic.gdx.graphics.Color": {
    "white": { "r": 1, "g": 1, "b": 1, "a": 1 },
    "black": { "r": 0, "g": 0, "b": 0, "a": 1 },
 },
 "com.badlogic.gdx.scenes.scene2d.ui.Label$LabelStyle": {
    "textWhiteSmall": { "font": cooperBlackSmall ,"fontColor": white },
 },
 "com.badlogic.gdx.scenes.scene2d.ui.TextButton$TextButtonStyle": {
    "menuButton": { "up": menu_button_blue_normal, "down": menu_button_blue_pressed, "font": cooperBlackSmall},
 },
}</pre>
<p>Die JSON-Datei wird in den asset Ordner gespeichert. Wie wir zu den Grafiken für die Button-States kommen wird im nächsten Teil erklärt &#8211; also keine Sorge.</p>
<h4>Buttons und Labels</h4>
<p>Für einen Button fehlt uns noch etwas essentielles: die Grafiken. Für die simpelste Version wären dies zwei Grafiken: eine für den Button selbst und eine für den &#8220;down&#8221;- Modus &#8211; also wenn dieser geklickt oder getoucht wird. Damit sich die Buttons, dann auch optimal an den Text anpassen können, sollte man die Grafiken vorerst einmal 9patchen. Dies bedeutet, dass man die Bereiche definiert, welche im Button dehnbar sein sollten und auch die Bereiche in denen Inhalt stehen darf. Die Android-sdks kommen mit einem einfachen grafischen Tool dafür. Es befindet sich im sdk-Ordner/tools/draw9patch und sieht in etwa so aus:</p>
<p><a href="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2015/01/Bildschirmfoto-2015-01-30-um-23.41.15.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-5179" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2015/01/Bildschirmfoto-2015-01-30-um-23.41.15-1024x642.png" alt="draw9patch" width="600" height="376" /></a></p>
<p>Die schwarzen Linien an der oberen und der linken Seite definieren den Dehnbereich die Linien an der rechten und unteren Seite den Content-Bereich. Wenn man alles Speichert sollten die Grafiken die Endung 9.png haben. Der nächste Schritt wäre nun, beide Grafiken bzw. alle Interface Grafiken mit einem Texturepacker in ein großes .png zu packen (ähnlich wie bei der Bitmap-Font). Dies bietet performance- und speichertechnisch große Vorteile. Anstatt tausend Grafiken laden zu müssen, lädt die Applikation nur die gepackte Datei und erhält von einer externen Datei wieder die Positinen der einzelnen Grafiken im Bild. Auch einen TexturePacker findet man in der <a href="http://libgdx.badlogicgames.com/nightlies/">Nightlies</a>-Distribution von LibGDX. Da bei mir die Graphishe Oberfläche allerdings nicht funktionier hat, habe ich das Ganze dann über die Konsole gemacht. Man könnte auch über Gradle die Tools zur IDE hinzufügen und von dort aus laufen lasse. Eine genaue Beschreibung wie ihr eure Grafiken mit dem TexturePacker packt findet ihr <a href="https://github.com/libgdx/libgdx/wiki/Texture-packer">hier</a>. Herauskommen sollte eine Text-Datei meist mit der Endung .pack oder .atlas und eine .png-Datei, die in etwa so aussehen könnte:</p>
<p><a href="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2015/01/gameGraphics.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-5180 size-medium" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2015/01/gameGraphics-300x300.png" alt="Beispiel TexturePacker" width="300" height="300" /></a></p>
<p>Ab damit in den asset-Folder! Weiter geht es mit dem Laden des TextureAtlas und des Skins im AssetLoader:</p>
<pre>TextureAtlas buttons_atlas = new TextureAtlas("skins/buttons_stuff.pack");
Skin skin = new Skin(Gdx.files.internal("skins/skin.json"),buttons_atlas);</pre>
<p>&nbsp;</p>
<p>Da wir nun unsere Styles in einem Skin definiert haben, die Grafiken in mit einem Texturepacker gepackt, die passende Schrift als Bitmap-Font gespeichert und alles im AssetLoader geladen haben, können wir endlich loslegen. Ein Label wird zum Beispiel folgendermaßen instanziert:</p>
<pre>private Label highscore_label = new Label("Highscore: 40",AssetLoader.skin,"textWhiteSmall");


</pre>
<p>Unser Highscore-Label wird als Klassenvariable instanziert, der erste Parameter ist der Text, der zweite greift auf unser JSON-Skin-File über den AssetLoader zu und der dritte Parameter zeigt auf den Namen des Styles den wir im Skin definiert haben. Ein Beispiel für einen Funktionierenden Button hätten wir hier:</p>
<pre>private TextButton buttonPlay = new TextButton("Go!", AssetLoader.skin,"menuButton");

</pre>
<p>Damit der Button allerdings noch klickbar wird müssen wir zwei Dinge tun. Erstens: In dem Konstruktor des Screens müssen wir angeben, dass die Stage (Erklärung zu Stages findet ihr im nächsten Abschnitt) auf die der Button hinzugefügt wird, auf die Eingaben des Users reagieren soll.</p>
<pre>Gdx.input.setInputProcessor(stageName);

</pre>
<p>Zweitens: einen ActionListener auf den Button hängen (meist in der show() Methode):</p>
<pre>buttonPlay.addListener(new ClickListener(){
                @Override
                public void clicked(InputEvent event,float x, float y) {
                    //HIER DEIN CODE WENN AUF DEN BUTTON GEKLICKT WURDE
               }
        });</pre>
<h4>Anordnen der Elemente</h4>
<p>Die Andordnung der Elemente erfolgt durch Stages und Tables. Die Elemente werden in einem Table angeordnet &#8211; dieser übernimmt dann die Ausrichtung am Screen des Smartphones. Das Table wird wiederum zur Stage hinzugefügt. Der Aufbau und die Anordnung erfolgt meist in der show() Methode des jeweiligen Screens. In der render() Methode wird das Ganze dann noch in jedem Frame gerendert bzw. gezeichnet. Will ich jetzt zum Beispiel ein Label und einen Button untereinander in der Mitte des Screens anordnen, könnte das so aussehen:</p>
<pre>startTable.add(highscore_label).padBottom(30).row();
startTable.add(buttonPlay).width(500).padBottom(30).row();
startTable.setFillParent(true);
startStage.addActor(startTable);

</pre>
<p>Es gibt diverse Funktionen für die Ausrichtung und Anordnung der Elemente. row() schließt eine Zeile ab. Weiteres zum Table findet man <a href="https://github.com/libgdx/libgdx/wiki/Table">hier</a>. Der obere Code-Auszug würde in der show() Methode stehen. Damit man den Aufbau auch dann zur Laufzeit bewundern kann müsste man noch in die render() Methode folgendes schreiben:</p>
<pre>startStage.act();
startStage.draw();</pre>
<h2></h2>
<h2>Animations</h2>
<p>Da wir nun wissen, wie man statische Elemente zeichnet, kommen wir zum spannenden Teil &#8211; die Animationen. Einface Animationen &#8211; zb eine konitnuierliche Fortbewegung entlang der x-Achse erfolgt in der render() Methode indem man zu dem jeweiligen Element einfach immer einen bestimmten Wert zur x-Position dazuaddiert. Allerding sollten dynamische Elemente nicht mit einem Table positioniert werden sondern über einen sogenannten Spritebatch immer neu gezeichnet werden. Auch dies erfolgt natürlich jedes Frame und steht deshalb in der render() Methode des jeweiligen Screens. Hier ein einfaches Beispiel:</p>
<pre>batch = new SpriteBatch(); //instanzierungen erfolgen natürlich im Konstruktor
tree = new Sprite(new TextureRegion(AssetLoader.tree));
tree.setPosition(400,400);</pre>
<pre>batch.setProjectionMatrix(camera.combined); //ab hier alles in der render() Methode
batch.begin();
tree.setPosition(tree.getX()+5,tree.getY());
tree.draw(batch);
batch.end();

</pre>
<p>Die ersten drei Zeilen dienen der Definition des SpriteBatches und einem Sprite. Der Sprite zeigt eine TextureRegion aus einem TextureAtlas an. Dies bedeutet einfach er zeigt auf eine spezielle Grafik in einem gepackten .png. Praktischerweise können wir alle unsere einzelnen Grafiken (besonders wenn man sie öfter als einmal verwendet) vorher im AssetLoader laden:</p>
<pre>TextureAtlas graphic_atlas = new TextureAtlas("skins/gameGraphics.pack");
tree = new TextureRegion(graphic_atlas.findRegion("tree"));</pre>
<p>&nbsp;</p>
<p>Zuerst wir die gesamte .atlas oder .pack Datei geladen und nachher mit der Funktion .findRegion kann die gewünschte Region bzw. das gewünschte Einzelbild gefunden werden. Der Name in der Klammer bezieht sie auf den Dateinamen der Grafik bevor sie gepackt wurde.</p>
<p>Bevor gezeichnet wird muss der Batch auf die Kamera ausgerichtet werden. In LibGDX benötigt jedes Spiel eine Kamera &#8211; sie zeigt auf einen speziellen Teil der gesamten Spielewelt &#8211; eben das was man am Smartphone dann auch sieht. Mehr zu Kameras findet ihr <a href="https://github.com/libgdx/libgdx/wiki/Orthographic-camera">hier</a>. Danach wird mit begin() der Anfang der Zeichensequenz eröffnet. Der Baum wird um jeweils 5 Einheiten auf der x-Achse verschoben und dann gezeichnet. Nicht auf das Beenden der Sequenz mit .end() vergessen!</p>
<h4>Sprite Animations</h4>
<p>Da aber nicht immer eine einfache Verschiebung eines Elemente für realistische Ergebnisse sorgt ist es auch wichtig, die Elemente selbst animieren zu können. Soll eine Figur laufen können ist natürlich der erste Schritt alle benötigten Grafiken einer Gehbewegung zu malen und diese zu packen. Im primitivsten Fall wären dies zwei Grafiken:</p>
<p><a href="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2015/01/pack.png"><img loading="lazy" decoding="async" class="aligncenter size-medium wp-image-5183" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2015/01/pack-300x150.png" alt="Beispiel Grafik" width="300" height="150" /></a>Diese zwei Grafiken müssen auch im AssetLoader wieder als TextureRegion definiert werden. Nun zur eigentlichen Animation. Man benötigt ein TextureRegion Array in dem alle States der Animation gespeichert werden. In diesem Fall hätte das Array eine Länge von 2. Hernach muss die Animation definiert werden &#8211; als Parameter werden die gewünschte Framerate (also Schnelligkeit) und das Array übergeben.</p>
<pre>walkFrames = new TextureRegion[2];
walkFrames[0] = AssetLoader.pug_walking1;
walkFrames[1] = AssetLoader.pug_walking2;
walkAnimation = new Animation(0.25f,walkFrames);


</pre>
<p>In der render() Methode des jeweiligen Screens kann dann gezeichnet werden, den Keyframe der angezeigt werden soll errechnet sich LibGDX aus der vergangenen Laufzeit des Spiels:</p>
<pre>batch.start();
batch.draw(walkAnimation.getKeyFrame(Gdx.graphics.getDeltaTime(),true),posX,posY);
batch.end();</pre>
<h2>Andere interessante Features &#8211; weiterführende Links</h2>
<p>Mir ist klar, dass dieser Artikel nur der allererste kleinste Schritt in Richtung Game-Development ist. Es geht vorwiegend um die Interfacegestaltung und das Verständnis des Grundgerüsts von LibGDX. Deshalb liste ich hier noch einige Tipps und Tricks und Tutorials die mir sehr weitergeholfen haben:</p>
<p>Sollte man auch Schriften, Buttons, einfache Sprites mit Tween-Animations versehen wollen, stößt man nur mit LibGDX leider an Grenzen. Dafür empfehle ich die Klasse <a href="http://www.aurelienribon.com/blog/projects/universal-tween-engine/">Tween Universal</a>, welche einfach über Gradle zu LibGDX hinzuzufügen ist und auf JEDE! Klasse anwendbar ist. Eine Beschreibung für die Integration in euer LibGDX Projekt findet ihr <a href="https://github.com/libgdx/libgdx/wiki/Universal-Tween-Engine">hier</a> und ein Tutorial für die Anwendung mit LibGDX Objekten <a href="http://droid-blog.net/2013/09/13/getting-started-with-the-universal-tween-engine/">hier</a>.</p>
<p>Wer Lust hat einen Shooter oder ein Jump&#8217;n&#8217;Run zu programmieren sollte auf die Physics Engine Box2D nicht verzichten. Ein super Tutorial zum Einstieg damit findet ihr <a href="http://www.gamefromscratch.com/post/2014/08/27/LibGDX-Tutorial-13-Physics-with-Box2D-Part-1-A-Basic-Physics-Simulations.aspx">hier</a>.</p>
<p>Was wäre ein Android-Game ohne gute und effiziente Gestenerkennung. Die Doku dafür ist zwar super, doch wer kein großer Mathematiker ist kann sich beim Ausrechnen der swipe-Gesten schnell verlieren. <a href="http://truongtx.me/2013/04/27/simple-swipe-gesture-detection-for-libgdx/">Hier</a> ist ein großartiger Post darüber wie man schnell erkennen kann ob eine Swipegeste nach oben, unten links oder rechts ausgeführt wurde und bietet eine tolle Grundlage dafür noch komplexere Gestenerkennung umzusetzen.</p>
<p>Eine tolle Seite für allerhand gute Tutorials bezüglich LibGDX:  <a href="http://libdgxtutorials.blogspot.co.at/">http://libdgxtutorials.blogspot.co.at/</a></p>
<p>Auch eine sehr tiefgehende Tutorialreihe (inklusive TileMaps mit Level-Editor!) mit ausführlichen Erklärungen: <a href="http://www.gamefromscratch.com/page/LibGDX-Tutorial-series.aspx">http://www.gamefromscratch.com/page/LibGDX-Tutorial-series.aspx</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/development/erste-schritte-mit-libgdx-android/">Erste Schritte mit LibGDX &#8211; Android</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mobile.fhstp.ac.at/development/erste-schritte-mit-libgdx-android/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Performance im Web</title>
		<link>https://mobile.fhstp.ac.at/allgemein/performance-im-web/</link>
		
		<dc:creator><![CDATA[Bibiana Bayer]]></dc:creator>
		<pubDate>Wed, 21 Jan 2015 22:36:16 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Webdevelopment]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Fontface]]></category>
		<category><![CDATA[Optimierung]]></category>
		<category><![CDATA[performance]]></category>
		<guid isPermaLink="false">https://akirchknopf-21110.php.fhstp.cc/?p=5121</guid>

					<description><![CDATA[<p>Menschen sind besessen vom Internet. Wir verbringen mehr und mehr Zeit online. Jeder kleine Moment wird vor einem Bildschirm verbracht. Sei es das  Abrufen von E-Mails während man im Bett liegt, News lesen auf Twitter im Zug, Surfen auf Facebook während dem Unterricht oder Kurznachrichten schreiben während man auf der Toilette sitzt. Ständig werden wir <a class="read-more" href="https://mobile.fhstp.ac.at/allgemein/performance-im-web/">[...]</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/performance-im-web/">Performance im Web</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Menschen sind besessen vom Internet. Wir verbringen mehr und mehr Zeit online. Jeder kleine Moment wird vor einem Bildschirm verbracht. Sei es das  Abrufen von E-Mails während man im Bett liegt, News lesen auf Twitter im Zug, Surfen auf Facebook während dem Unterricht oder Kurznachrichten schreiben während man auf der Toilette sitzt. Ständig werden wir bombardiert mit Likes, Retweets, Favourites, Requests, Alerts.</p>
<p>Hier ein paar Aussagen über Internet-Nutzung:</p>
<ul>
<li>Im Durchschnitt verbringt ein Erwachsener 5 Stunden pro Tag im<br />
Internet</li>
<li>Angestellte senden und empfangen in etwa 40 E-Mails am Tag und<br />
20 Benachrichtigungen</li>
<li>Leute besuchen etwa 10 Websites pro Tag</li>
<li>Ein Smartphone-Nutzer nimmt sein Smartphone etwa 1.500 Mal in<br />
der Woche in die Hand</li>
</ul>
<p><span id="more-5121"></span></p>
<p>Ladezeiten um die 10 Sekunden sind, vor allem in mobilen Netzwerken, zur Normalität geworden. Der Grund liegt teilweise in der Komplexität der Websites aber auch darin, dass Websites oft nicht so ausgeliefert werden, wie es für Browser gut wäre. In diesem Blog-Post wurden etwa 30 Artikel aus unterschiedlichsten Gebieten der Performance-Optimierung zusammengefasst. Dennoch ist dies nur ein sehr kleiner Teil aller möglichen Optimierungslösungen. Mit Hilfe dieses Blog Posts ist es jedoch möglich sich einen Überblick über die Funktionsweise von Browsern, mögliche Optimierungsbereiche und nützliche Tools zu verschaffen.</p>
<h3><strong>Funktionsweise der Browser</strong></h3>
<p>Zu verstehen wie Browser funktionieren kann helfen Websites performanter zu entwickeln.<br />
<strong>HTTP Request</strong></p>
<p>Die Grundlage von allem, was im Web passiert, ist der Austausch von Daten zwischen einem Client (Browser) und einem Server. Sobald der<br />
User Enter drückt wird ein Initialer Request zum DNS geschickt, der die URL in die IP-Adresse des Servers übersetzt.</p>
<p><a href="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2015/01/Bildschirmfoto-2015-01-18-um-12.55.12.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-5133 " src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2015/01/Bildschirmfoto-2015-01-18-um-12.55.12-300x109.png" alt="Grafik DNS-Request" width="501" height="182" /></a></p>
<p>Zumindest ist das die vereinfachte Vorgehensweise für Geräte, die mit einem LAN oder WLAN verbunden sind. Mobile Geräte müssen einen Extra-Schritt machen, denn der Browser sendet den Request zunächst noch an einen Sende-Mast in der Nähe. Aus diesem Grund kann das Aufbauen einer Verbindung auf mobilen Geräten bis zu zwei Sekunden länger dauern.</p>
<p><a href="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2015/01/Bildschirmfoto-2015-01-18-um-14.29.03.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-5134" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2015/01/Bildschirmfoto-2015-01-18-um-14.29.03.png" alt="DNS-Request Mobile" width="500" height="274" /></a></p>
<p>Ruft der Browser eine HTML-Datei auf, bekommt er sie Stück für Stück vom Server zugeschickt und parst sie prozedural. Dabei achtet er auf Verweise zu anderen Dateien im HTML-Dokument, die ebenfalls geladen werden müssen. Die HTML Datei wird dabei in einen strukturierten Baum konvertiert, bekannt als DOM (Document Object Model). Wenn der DOM erstellt wurde, kann dieser danach mit JavaScript manipuliert werden. CSS gibt den Elementen ihr Aussehen. Das Parsen von HTML ist sehr kompliziert und füllt ganze Bücher. Leider gibt es auch Unterschiede von Browser zu Browser. Wichtig zu wissen ist aber folgendes:</p>
<ul>
<li>CSS funktioniert am besten, wenn es geladen wird BEVOR das</li>
<li>HTML Dokument im Browser sichtbar ist.<br />
JavaScript hingegen wird oft erst dann angewendet NACHDEM<br />
Elemente geladen wurden.</li>
</ul>
<p>Dies führt uns zum nächsten Thema:</p>
<p><strong>Rendering und Blocking</strong><br />
Ein HTML, das sehr schnell geladen werden kann ist eines, welches auf keine externen Dateien verweist. Doch sind solche HTML-Dateien in der heutigen Zeit eher untypisch. Eine typische HTML-Datei verweist auf eine Vielzahl von Dateien wie CSS, JavaScript oder Bilder. Standardmäßig warten Browser mit dem Rendern von Inhalten bis CSS und JavaScript geladen wurden. Dieses Verhalten ist als Blocking bekannt.</p>
<h3>Performance Budget</h3>
<p>Ein gutes Performance Budget bringt User Experience und Browser Experience in Einklang. Zu einer guten User Experience gehören Milestone Timing und der Speed Index. Das Smashing Magazine empfiehlt für den WebPageTest einen Speed Index von 1000. Außerdem sollen alle HTML, CSS und JavaScript Dateien mit 14KB geladen werden können. Der Speed Index ist die durchschnittliche Dauer, bis sichtbare Teile einer Website geladen werden konnten. Sie wird in Millisekunden angegeben und ist abhängig von der Größe des Viewports. Diese Art Performance ist natürlich sehr sinnvoll. „Above the fold“-Inhalte sollen rasch geladen werden. Dazu gehört beispielsweise nicht der Footer einer Website, denn dieser ist typischerweise beim Laden einer Webpage zuerst einmal außerhalb des sichtbaren Bereichs Meist legt man sich Meilensteine, die eingehalten werden sollen. Beispielsweise dass die gesamte Website in 5 Sekunden geladen werden soll und dabei das Budget von z.B. max. 10 Bilder und 2 Webfonts oder 2 Bilder und 10 Webfonts eingehalten werden soll. Doch wie genau kommt man zu so einem Meilenstein? Zunächst wird eine Performancenalyse der eigenen Webpage. Danach sieht man sich die Konkurrenz-Websites an. Eine<br />
Statistik besagt, dass Leute etwas als schneller oder langsamer wahrnehmen können, wenn etwa ein 20% Unterschied besteht. So sucht man sich am Besten die<br />
schnellste Konkurrenz-Website und versucht diese bezüglich Ladezeit um 20% zu unterbieten.</p>
<p><a href="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2015/01/Bildschirmfoto-2015-01-18-um-15.41.37.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-5135" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2015/01/Bildschirmfoto-2015-01-18-um-15.41.37.png" alt="Ladezeitmessung Webpage" width="500" height="102" /></a></p>
<p>Diese Ladezeiten, können je nach verfügbarem Netzwerk (WLAN, 3G, Edge) in Kilobyte umgerechnet werden. 1.194 Sekunden sind bei 3G Verbindung 114 KB. Dieser Wert kann auf die verschiedenen Dateien, die geladen werden sollen aufgeteilt werden.</p>
<p><a href="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2015/01/Bildschirmfoto-2015-01-18-um-15.44.22.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-5136" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2015/01/Bildschirmfoto-2015-01-18-um-15.44.22.png" alt="Aufteilung der KB auf mehrere Dateien" width="500" height="151" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2015/01/Bildschirmfoto-2015-01-18-um-15.44.22.png 777w, https://mobile.fhstp.ac.at/wp-content/uploads/2015/01/Bildschirmfoto-2015-01-18-um-15.44.22-770x234.png 770w" sizes="auto, (max-width: 500px) 100vw, 500px" /></a></p>
<h3>CSS</h3>
<ul>
<li>Nicht benötigte Klassen und IDs entfernen</li>
<li>Selektoren verkürzen und Specificity reduzieren</li>
<li>eigene Print Style-Sheets vermeiden oder im Haupt-Stylesheet<br />
inkludieren, damit das Rendering nicht blockiert wird</li>
</ul>
<h3>Bilder</h3>
<ul>
<li>PNGs verkleinern<br />
Der Vorteil von PNG gegenüber JPEG ist klarerweise die Möglichkeit von Transparenz. Doch die Kompression bei JPEGs ist um einiges besser. Mit einem SVG ist es möglich die Vorteile von beiden Bildformaten zu kombinieren. Dazu wird ein Bild als JPEG gespeichert und so weit komprimiert, wie man möchte. Dazu speichert man ein PNG, das als Maske dient. Es enthält nur weiß und schwarz und hat daher eine sehr geringe Dateigröße. Diese<br />
beiden Bilder werden in einem SVG so kombiniert, dass sie wiederum ein PNG ergeben.<br />
Hierfür gibt es verschiedene Tools:<br />
&#8211; MozJPEG (<a href="https://github.com/mozilla/mozjpeg">https://github.com/mozilla/mozjpeg</a>)<br />
Artikel darüber: <a href="http://calendar.perfplanet.com/2014/mozjpe-3-0/">http://calendar.perfplanet.com/2014/mozjpe-3-0/</a><br />
&#8211; tinypng (<a href="https://tinypng.com/">https://tinypng.com/</a>)<br />
&#8211; JPEGmini (<a href="http://www.jpegmini.com/">http://www.jpegmini.com/</a>)<br />
&#8211; ImageAlpha (<a href="http://pngmini.com/">http://pngmini.com/</a>)</li>
<li>SVGs verwenden<br />
SVG sind sehr beliebt seit Responsive Webdesign, doch wie bei jedem anderen Dateiformat, gibt es auch hier Möglichkeiten zu optimieren.</p>
<ul>
<li>
<address>Gzip Komprimierung aktivieren</address>
<address>SVGs sind textbasiert und eignen sich daher hervorragend für eine verlustfreie Komprimierung. Damit können um die 80% Dateigröße eingespart werden.</address>
</li>
<li>
<address>Mehrere Requests bei der Verwendung des &lt;object&gt;-Tags vermeiden</address>
<address>Der &lt;object&gt;-Tag ist eine sehr beliebte Methode um SVGs einzubinden, weil er viele Vorteile bietet. Unter anderem ermöglicht er das Einbinden eines Fallbacks für Browser, die SVGs nicht unterstützen. <a href="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2015/01/Bildschirmfoto-2015-01-18-um-11.46.40.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-5129" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2015/01/Bildschirmfoto-2015-01-18-um-11.46.40.png" alt="SVG Fallback" width="437" height="66" /></a></address>
<address>Doch hier wird von Browsern, die SVGs unterstützen sowohl das SVG als auch die Bitmap-Datei geladen. Dies kann jedoch wie folgt umgangen werden:<a href="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2015/01/Bildschirmfoto-2015-01-18-um-11.48.21.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-5130" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2015/01/Bildschirmfoto-2015-01-18-um-11.48.21.png" alt="SVG Fallback" width="442" height="63" /></a><a href="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2015/01/Bildschirmfoto-2015-01-18-um-11.48.32.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-5131" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2015/01/Bildschirmfoto-2015-01-18-um-11.48.32.png" alt="SVG CSS" width="452" height="76" /></a></address>
</li>
<li>
<address>SVGs nicht als Data URIs einbetten</address>
</li>
<li>
<address>SVGs nicht mit base64 inlinen, sondern mit charset=utf-8<a href="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2015/01/Bildschirmfoto-2015-01-18-um-11.51.24.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-5132" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2015/01/Bildschirmfoto-2015-01-18-um-11.51.24.png" alt="SVG charset" width="500" height="122" /></a></address>
</li>
<li>
<address>SVG Sprites verwenden</address>
<address>Sprites sind schon seit Jahren bekannt und werden gerne für PNG Icons verwendet. Anstatt 50 Icons mit 50 einzelnen HTTP Requests zu laden wird nur ein PNG geladen. Die selbe Technik kann auch für SVGs verwendet werden.</address>
</li>
<li>
<address>Pfade so einfach wie möglich halten</address>
</li>
<li>
<address>Schlagschatten, Glühen und Blur vermeiden</address>
</li>
<li>
<address>SVGs nach Export nochmal optimieren</address>
<address>Beispielsweise möglich mit diesem Online-Editor: <a href="http://petercollingridge.appspot.com/svg-editor">http://petercollingridge.appspot.com/svg-editor</a></address>
</li>
</ul>
</li>
</ul>
<h3>Fonts</h3>
<p>Fonts können eine hohe Belastung für Websites darstellen. Verwendet man beispielsweise Roboto, so hat eine Datei etwa 140 KB. Doch Roboto hat nicht nur einen Schriftschnitt sondern 12. Addiert sind das etwa 1,7 MB allein nur für das Laden der Schriften. Hier gibt es natürlich auch einige Optimierungsansätze:</p>
<ul>
<li>Anzahl an Fonts klein halten</li>
<li>subsetting<br />
Hier können Zeichen, die nicht benötigt werden, aus dem Font entfernt werden. Etwas vorsichtig sollte man dabei jedoch sein, weil es nicht sehr schön aussieht, wenn ein Zeichen angezeigt werden muss, das nicht mehr vorhanden ist. Möchte man auf keine Zeichen verzichten, ist es möglich verschiedene Fonts für unterschiedliche Zeichensätze anzulegen. Unicode-Range „U+0-A0“ deckt normale Zeichen, Ziffern und Satzzeichen während weitere Zeichen wie beispielsweise é nur in der erweiterten Version zu finden ist. Die Browserunterstützung dafür ist allerdings sehr gering. Nur Chrome und Opera unterstützen dies derzeit. Ein Tool, mit dem subsetting sehr einfach möglich ist, ist der Webfont-Generator von fontsquirrel: <a href="http://www.fontsquirrel.com/tools/webfont-generator">http://www.fontsquirrel.com/tools/webfont-generator</a><a href="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2015/01/Bildschirmfoto-2015-01-11-um-17.24.58.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-5127" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2015/01/Bildschirmfoto-2015-01-11-um-17.24.58.png" alt="Beispiel Fontface" width="461" height="242" /></a></li>
<li>WOFF2</li>
<li>Fonts asynchron laden<br />
Das Laden der Fonts dauert mitunter recht lange und genau so lange muss der User dann auch warten, bis der Text angezeigt wird, wie diese Grafik zeigt. <a href="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2015/01/default-thumb.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-5138" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2015/01/default-thumb.png" alt="Ladezeiten Fonts" width="500" height="78" /></a>Um dieses Problem zu umgehen hat die Filament Group einen ganz eigenen Weg gewählt. Zunächst muss es einen nativen-Font-Fallback geben, der angezeigt werden kann, während die andere Schrift geladen wird. font-family: Open-Sans, sans-serif; Dann wird JavaScript benutzt, um herauszufinden, welches Font-Format (WOFF2, WOFF, TTF, …) gebraucht wird um diese hernach asynchron zu laden. Dazu ist es notwendig Fonts zu Data URIs zu encoden. Also Open-Sans-Regular.tff, Open-Sans-Regular.woff, Open-Sans-Regular.woff2 werden encoded und das Ergebnis wird in drei<br />
verschiedene Stylesheets kopiert, welche dann asychron geladen werden können.<br />
Für das encoden von Fonts gibt es verschiedene Möglichkeiten: SASS (<a href="http://compassstyle.%20org/reference/compass/helpers/inline-data/#inline-fontfiles">http://compassstyle.</a><a href="http://compassstyle.%20org/reference/compass/helpers/inline-data/#inline-fontfiles">org/reference/compass/helpers/inline-data/#inline-fontfiles</a>), PHP (<a href="http://css-tricks.com/snippets/php/create-datauris/">http://css-tricks.com/snippets/php/create-datauris/</a>), Online-Generator (<a href="http://dopiaza.org/tools/datauri/index.php">http://dopiaza.org/tools/datauri/index.php</a>)<br />
Das Ergebnis sieht dann so aus:<a href="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2015/01/Bildschirmfoto-2015-01-18-um-11.30.45.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-5128" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2015/01/Bildschirmfoto-2015-01-18-um-11.30.45.png" alt="FontFallback" width="500" height="162" /></a><br />
Durch das asynchrone Laden hat der User von Beginn an lesbaren Text, auch wenn dieser zunächst nicht die richtige Schriftart hat.<a href="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2015/01/current-thumb.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-5137" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2015/01/current-thumb.png" alt="Ladezeiten Fonts" width="500" height="68" /></a></li>
<li>Fonts im LocalStorage speichern<br />
So werden sie nur ein mal geladen und werden dann für alle<br />
weiteren Besuche im Speicher behalten.</li>
</ul>
<h3>Tools</h3>
<ul>
<li>perf-tooling.today<br />
<a href="http://perf-tooling.today/">http://perf-tooling.today/</a><br />
Eine Sammlung von Resourcen, die helfen sollen den Workflow zu verbessern und damit schnellere und bessere Websites zu<br />
erstellen.</li>
<li>WebPageTest<br />
<a href="http://www.webpagetest.org/">http://www.webpagetest.org/</a><br />
Testet detailliert die Performance einer Website</li>
<li>PERFROCKS<br />
<a href="http://www.perf.rocks/">http://www.perf.rocks/</a><br />
Eine Sammlung von Resourcen, die es ermöglichen sollen schnelle Websites zu erstellen.</li>
<li>Google Page Speed Insights<br />
<a href="https://developers.google.com/speed/pagespeed/insights/">https://developers.google.com/speed/pagespeed/insights/</a><br />
Testet detailliert die Performance einer Website, jedoch mit einer anderen Herangehensweise als WebpageTest</li>
<li>BrowserDiet<br />
<a href="http://browserdiet.com/en/">http://browserdiet.com/en/</a><br />
Blog über Performance</li>
</ul>
<p><strong>Quellen</strong><br />
Allgemein:</p>
<ul>
<li><a href="http://www.smashingmagazine.com/2014/09/08/improvingsmashing-magazine-performance-case-study/">http://www.smashingmagazine.com/2014/09/08/improvingsmashing-magazine-performance-case-study/</a></li>
<li><a href="http://alistapart.com/article/planning-for-performance">http://alistapart.com/article/planning-for-performance</a></li>
<li><a href="http://uxmas.com/2014/were-living-in-the-fast-web">http://uxmas.com/2014/were-living-in-the-fast-web</a></li>
</ul>
<p>Performance Budget:</p>
<ul>
<li><a href="https://sites.google.com/a/webpagetest.org/docs/usingwebpagetest/metrics/speed-index">https://sites.google.com/a/webpagetest.org/docs/usingwebpagetest/metrics/speed-index</a></li>
<li><a href="http://chimera.labs.oreilly.com/books/1230000000545/ch10.html#SPEED_PERFORMANCE_HUMAN_PERCEPTION">http://chimera.labs.oreilly.com/books/1230000000545/ch10.html#SPEED_PERFORMANCE_HUMAN_PERCEPTION</a></li>
<li><a href="http://timkadlec.com/2013/01/setting-a-performance-budget/">http://timkadlec.com/2013/01/setting-a-performance-budget/</a></li>
<li><a href="http://danielmall.com/articles/how-to-make-a-performancebudget/">http://danielmall.com/articles/how-to-make-a-performancebudget/</a></li>
</ul>
<p>CSS:</p>
<ul>
<li><a href="https://www.nccgroup.com/en/blog/2014/10/does-a-print-css-fileslow-your-site-down/">https://www.nccgroup.com/en/blog/2014/10/does-a-print-css-fileslow-your-site-down/</a></li>
</ul>
<p>Bilder:</p>
<ul>
<li><a href="http://peterhrynkow.com/how-to-compress-a-png-like-a-jpeg/">http://peterhrynkow.com/how-to-compress-a-png-like-a-jpeg/</a></li>
<li><a href="http://calendar.perfplanet.com/2014/tips-for-optimising-svgdelivery-for-the-web/">http://calendar.perfplanet.com/2014/tips-for-optimising-svgdelivery-for-the-web/</a></li>
</ul>
<p>Fonts:</p>
<ul>
<li><a href="http://jakearchibald.com/2014/minimising-font-downloads/">http://jakearchibald.com/2014/minimising-font-downloads/</a></li>
<li><a href="http://www.filamentgroup.com/lab/font-loading.html">http://www.filamentgroup.com/lab/font-loading.html</a></li>
<li><a href="http://bdadam.com/blog/better-webfont-loading-with-localstorageand-woff2.html">http://bdadam.com/blog/better-webfont-loading-with-localstorageand-woff2.html</a></li>
</ul>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/performance-im-web/">Performance im Web</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Initialprojekt: Rezepte für Studenten</title>
		<link>https://mobile.fhstp.ac.at/studium/studium-projekte/initialprojekt-rezepte-fuer-studenten/</link>
		
		<dc:creator><![CDATA[Bibiana Bayer]]></dc:creator>
		<pubDate>Sat, 18 Jan 2014 13:25:54 +0000</pubDate>
				<category><![CDATA[Projekte]]></category>
		<category><![CDATA[QR-Code]]></category>
		<guid isPermaLink="false">https://akirchknopf-21110.php.fhstp.cc/?p=3823</guid>

					<description><![CDATA[<p>Das Initialprojekt im Mobilen Masterstudiengang bestand daraus durch ein interessantes Konzept Leute dazu zu bringen einen QR-Code zu scannen, welche zu einer beliebigen mobilen Anwendung führen sollen.Bei meinem Projekt habe ich in mehreren Unis und FHs Plakate aufgehängt, welche zu Rezepten speziell für Studenten führen. Plakate Die A3 Plakate wurden in Photoshop erstellt. Die Bilder <a class="read-more" href="https://mobile.fhstp.ac.at/studium/studium-projekte/initialprojekt-rezepte-fuer-studenten/">[...]</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/studium/studium-projekte/initialprojekt-rezepte-fuer-studenten/">Initialprojekt: Rezepte für Studenten</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Das Initialprojekt im Mobilen Masterstudiengang bestand daraus durch ein interessantes Konzept Leute dazu zu bringen einen QR-Code zu scannen, welche zu einer beliebigen mobilen Anwendung führen sollen.Bei meinem Projekt habe ich in mehreren Unis und FHs Plakate aufgehängt, welche zu Rezepten speziell für Studenten führen.</p>
<p><strong>Plakate</strong></p>
<p>Die A3 Plakate wurden in Photoshop erstellt. Die Bilder im Hintergrund selbst mit Bleistift gezeichnet, eingescannt und in Photoshop coloriert. Der QR-Code darauf führt zu einer für mobile Geräte optimierten Website mit den Rezepten.</p>
<p><span id="more-3823"></span></p>
<p><a href="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2014/01/QR_plakat_3.jpg"><img loading="lazy" decoding="async" class="alignnone  wp-image-3825" alt="QR_plakat_3" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2014/01/QR_plakat_3-724x1024.jpg" width="182" height="258" /></a> <a href="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2014/01/QR_plakat_1.jpg"><img loading="lazy" decoding="async" class="alignnone  wp-image-3826" alt="QR_plakat_1" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2014/01/QR_plakat_1-724x1024.jpg" width="182" height="258" /></a> <a href="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2014/01/QR_plakat_2.jpg"><img loading="lazy" decoding="async" class="alignnone  wp-image-3827" alt="QR_plakat_2" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2014/01/QR_plakat_2-724x1024.jpg" width="182" height="258" /></a></p>
<p><strong>Rezepte</strong></p>
<p>Insgesamt gibt es 31 verschiedene Rezepte, die täglich wechseln. Die Rezepte sind hauptsächlich aus eigner Küche und teilweise von Rezepten von Freunden und Bekannten zusammengetragen worden.</p>
<p><strong>Umsetzung</strong></p>
<p>Die Rezepte ändern sich täglich, sind alle Rezepte bereits durchgelaufen, wird wieder von vorne begonnen. Man hat die Möglichkeit zu bereist gescannten Rezepten zurückzukehren und sich jedes Rezept mailen zu lassen. Kategorien für die Rezepte beinhalten ganze Mahlzeiten, was für Zwischendurch, Partysnacks, Tassenkuchen, usw.</p>
<p>Dazu wurden die Rezepte in eine kleine MySQL Datenbank eingetragen. Bei dem ersten Aufruf der Seite an diesem Tag wird das nächste Rezept in der Reihe mit dem aktuellen Datum aktiv gesetzt. Aufgerufene Rezepte werden im LocalStorage gespeichert und als vierter Menüpunkt angezeigt. Die bereits besuchten Rezepte kann man per Link aufrufen. Dazu wird ein GET-PArameter übergeben. Der übergebene GET-Parameter wird mit den Daten im LocalStorage verglichen um einen Aufruf eines Rezeptes, welches noch nicht freigeschalten wurde, zu verhindern.</p>
<p><a href="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2014/01/screeny2.jpg"><img loading="lazy" decoding="async" class="alignnone  wp-image-3829" alt="screeny2" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2014/01/screeny2.jpg" width="227" height="403" /></a><a href="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2014/01/screeny1.jpg"><img loading="lazy" decoding="async" class="alignnone  wp-image-3828" alt="screeny1" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2014/01/screeny1.jpg" width="227" height="403" /></a></p>
<p><strong>Aufhängen der Plakate</strong></p>
<p>Die Plakate wurden in der FH St. Pölten, der FH Campus Wien und in der Universität für Bodenkultur Wien aufgehängt. Dieser Punkt hat sich als äußert kompliziert gestaltet, da die  Zuständigen entweder sehr lange nicht geantwortet haben, oder diverse Bedenken gegenüber eines QR-Codes hatten im Bezug auf Datenschutz und Anderem. Nachdem das Konzept und die funktionsweise der QR-Codes genau erklärt wurden, war es kein Problem mehr die Plakate aufzuhängen. Lediglich die Wirtschaftsuniversität Wien hat kein Einverständnis gegeben.</p>
<p><strong>Auswertung</strong></p>
<p>Die Aufrufe der Seite werden per Google Analytics gezählt. Die Seite wurde allerdings nur von 13 Leuten besucht, davon 8 wiederkehrende Besucher.</p>
<p>The post <a href="https://mobile.fhstp.ac.at/studium/studium-projekte/initialprojekt-rezepte-fuer-studenten/">Initialprojekt: Rezepte für Studenten</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Fonts in SVGs</title>
		<link>https://mobile.fhstp.ac.at/allgemein/fonts-svgs/</link>
		
		<dc:creator><![CDATA[Bibiana Bayer]]></dc:creator>
		<pubDate>Thu, 16 Jan 2014 17:26:15 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<guid isPermaLink="false">https://akirchknopf-21110.php.fhstp.cc/?p=3745</guid>

					<description><![CDATA[<p>Es gibt so viele Geräte, die unterschiedliche Auflösungen und Bildschirmgrößen haben. Daher sind Entwickler immer auf der Suche nach auflösungsunabhängigen Lösungen. SVG ist solch eine Lösung, die mittlerweile von den meisten Browsern unterstützt wird auch viele Möglichkeiten bietet. Doch auch hier kann es Probleme geben. SVG steht für Scalable Vector Graphics. Es ermöglich also das <a class="read-more" href="https://mobile.fhstp.ac.at/allgemein/fonts-svgs/">[...]</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/fonts-svgs/">Fonts in SVGs</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Es gibt so viele Geräte, die unterschiedliche Auflösungen und Bildschirmgrößen haben. Daher sind Entwickler immer auf der Suche nach auflösungsunabhängigen Lösungen. SVG ist solch eine Lösung, die mittlerweile von den meisten Browsern unterstützt wird auch viele Möglichkeiten bietet. Doch auch hier kann es Probleme geben.</p>
<p><span id="more-3745"></span></p>
<p>SVG steht für Scalable Vector Graphics. Es ermöglich also das auflösungsunabhängige Darstellen von Grafiken. Es nützt XML um Pfade, Formen, Schriften und Farben zu definieren. So haben wir uns das auch für unser Logo von Mobile-O-Poly gewünscht.</p>
<p><a href="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2014/01/mop-logo-klein-v3.png"><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-3746" alt="mop-logo-klein-v3" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2014/01/mop-logo-klein-v3-300x41.png" width="300" height="41" /></a></p>
<p>Das Logo besteht links aus Pfaden und Formen und rechts davon ein Schriftzug in Open Sans extrabold. Schnell war das SVG Image eingebunden, in Chrome geöffnet. Hat perfekt funktioniert.</p>
<p>Dann habe ich das ganze in anderen Browsern getestet und musste feststellen, dass der Font nicht dargestellt wird.</p>
<p><a href="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2014/01/Bildschirmfoto-2014-01-12-um-01.08.17.png"><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-3747" alt="Bildschirmfoto 2014-01-12 um 01.08.17" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2014/01/Bildschirmfoto-2014-01-12-um-01.08.17-300x50.png" width="300" height="50" /></a></p>
<p>Ein kurzer Blick auf <a href="http://caniuse.com/svg-fonts" target="_blank">CanIUse</a> hat mir dann bestätigt, dass Firefox und Internet Explorer Fonts in SVGs nicht unterstützen.</p>
<p>Bis diese Browser die Funktion einbauen, ist es notwendig den Text in Pfade umzuwandeln, dann funktioniert das in <a href="http://caniuse.com/svg" target="_blank">allen Browsern</a>.</p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/fonts-svgs/">Fonts in SVGs</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Responsive Images</title>
		<link>https://mobile.fhstp.ac.at/development/responsive-images/</link>
		
		<dc:creator><![CDATA[Bibiana Bayer]]></dc:creator>
		<pubDate>Sat, 11 Jan 2014 22:54:09 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Webdevelopment]]></category>
		<category><![CDATA[picture]]></category>
		<category><![CDATA[responsive images]]></category>
		<category><![CDATA[responsive webdesign]]></category>
		<category><![CDATA[rsrc.it]]></category>
		<category><![CDATA[srcset]]></category>
		<guid isPermaLink="false">https://akirchknopf-21110.php.fhstp.cc/?p=3717</guid>

					<description><![CDATA[<p>Als Ethan Marcotte 2010 über Responsive Web Design geschrieben hat, teilte er das Thema in drei Bereiche: flexibles Grid, flexible Bilder und Medien und Media Queries. Responsive Images sind auch drei Jahre später noch immer ein heißes Thema, weil es bislang keine zufriedenstellende Lösung dafür gibt. The reason why Entwickler sind heutzutage mit einer Fülle <a class="read-more" href="https://mobile.fhstp.ac.at/development/responsive-images/">[...]</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/development/responsive-images/">Responsive Images</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Als Ethan Marcotte 2010 über Responsive Web Design geschrieben hat, teilte er das Thema in drei Bereiche: flexibles Grid, flexible Bilder und Medien und Media Queries. Responsive Images sind auch drei Jahre später noch immer ein heißes Thema, weil es bislang keine zufriedenstellende Lösung dafür gibt.</p>
<p><span id="more-3717"></span></p>
<h2>The reason why</h2>
<p>Entwickler sind heutzutage mit einer Fülle von Displaygrößen und Auflösungen konfrontiert. Daher rührt das Bedürfnis nach flexiblen Bildern, ohne aber die Ladezeiten zu beeinträchtigen. Da wir bei Mobile-O-Poly einen hohen Wert auf Performance legen, wollen wir dies auch bei unseren Bildern berücksichtigen und haben daher nach einer für uns passenden Lösung gesucht.</p>
<h2>Ask-A-Cop Methode</h2>
<p>Steve Ballmer, CEO von Microsoft, sagte kürzlich:</p>
<blockquote><p>“If you ask someone if they’re a cop, they have to tell you,” said Ballmer during a press conference announcing the new responsive image spec, “the same thing should apply to site images. Ask the site what size it wants, and it has to tell you.”</p></blockquote>
<p>Dieser Ansatz funktioniert wie folgt. Der User öffnet eine Website. Diese fragt ihn, ob er die Website mit einem mobile Gerät oder Desktop aufruft. Je nach Anwort, wird das richtige Bild geliefert.</p>
<p><a title="Ask-A-Cop-Methode" href="http://pancaketheorem.com/stuff/stupid/respimg/" target="_blank">Demo</a><br />
<a title="Ask-A-Cop on Github" href="https://github.com/jennschiffer/Ask-a-Cop-Responsive-Images-Solution" target="_blank">Github</a></p>
<p>Diese client-seitige Methode nutzt switch-Statements und jQuery. Dass der User, beim Aufrufen einer Website angeben muss, mit was für einem Gerät er surft, wirkt allerdings etwas befremdlich.</p>
<h2>ReSRC.it</h2>
<blockquote><p>„Responsive images on demand, directly form the cloud“</p></blockquote>
<p>Dieser Service verspricht eine einfache Methode für Responsive Images und arbeitet dabei mit JavaScript. Dabei werden die Source-Adressen der Grafiken mit Prefixen versehen und mit Data-Attributes, die Bilder gekennzeichnet.</p>
<div id="attachment_3718" style="width: 310px" class="wp-caption alignnone"><a href="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2014/01/Bildschirmfoto-2014-01-11-um-23.11.16.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-3718" class="size-medium wp-image-3718" alt="ReSRC.it" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2014/01/Bildschirmfoto-2014-01-11-um-23.11.16-300x221.png" width="300" height="221" /></a><p id="caption-attachment-3718" class="wp-caption-text">ReSRC.it</p></div>
<p>Doch dieser Service ist nur die ersten 30 Tage gratis.</p>
<p><a title="resrc.it" href="http://www.resrc.it/" target="_blank"><span style="text-decoration: underline;">http://www.resrc.it/</span></a></p>
<h2>srcset-Attribut Methode</h2>
<p>Das srcset-Attribut erlaubt es Entwicklern, eine Liste von Quellen für ein img-Element basierend auf der Pixel-Dichte eines Display zu spezifizieren.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;img src=&quot;low-res.jpg&quot; srcset=&quot;high-res.jpg 2x&quot;&gt;
</pre>
<p>Das Bild „low-res.jpg“ wird an niedrig auflösenden Displays geliefert und von Browsern geladen, die das srcset-Attribut nicht untersützten. „high-res.jpg“ wird geladen, wenn der Browser das srcset-Attribut unterstützt und ein hochauflösendes Display vorhanden ist.</p>
<p>So können User, die keine hochauflösenden Displays besitzen, Bandbreite sparen und bekommen ein eigenes Bild geliefert.</p>
<p>Leider wird das Attribut bislang nur von Webkit-Browsern unterstützt.</p>
<h2>&lt;picture&gt;-Element Methode</h2>
<p>Es ist bekannt, dass der &lt;video&gt;-Tag mehrere Videos referenzieren kann. Außerdem ist es möglich, einen Fallback zu definieren. In Kombination mit Media-Queries kann auch definiert werden, welches Video für welche Displaygröße verwendet wird.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;video&gt;
    &lt;source src=&quot;high-res.webm&quot; media=&quot;min-width:800px&quot; /&gt;
    &lt;source src=&quot;low-res.webm&quot; /&gt;
    &lt;img src=&quot;poster.jpg&quot; /&gt;
&lt;/video&gt;
</pre>
<p>Doch gibt es das auch für Bilder?</p>
<pre class="brush: xml; title: ; notranslate">
&lt;picture&gt;
   &lt;source src=&quot;high-res.jpg&quot; media=&quot;min-width: 800px&quot; /&gt;
   &lt;source src=&quot;mobile.jpg&quot; /&gt;
   &lt;!-- Fallback content: --&gt;
   &lt;img src=&quot;mobile.jpg&quot; /&gt;
&lt;/picture&gt;
</pre>
<p>Es gibt eine Gruppe von Leuten, die derzeit an einem solchen Standard arbeitet. Doch man ist noch weit davon entfernt, das durchzusetzen.</p>
<h2>Picturefill</h2>
<p>Picturefill.js ist für uns die beste Lösung, denn sie ahmt das &lt;picture&gt;-Element nach.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;span data-picturedata-alt=&quot;A giant stone face at The Bayon temple in Angkor Thom, Cambodia&quot;]]&gt;
    &lt;span data-src=&quot;small.jpg&quot;&gt;&lt;/span&gt;
    &lt;span data-src=&quot;medium.jpg&quot;     data-media=&quot;(min-width: 400px)&quot;&gt;&lt;/span&gt;
    &lt;span data-src=&quot;large.jpg&quot;      data-media=&quot;(min-width: 800px)&quot;&gt;&lt;/span&gt;
    &lt;span data-src=&quot;extralarge.jpg&quot; data-media=&quot;(min-width: 1000px)&quot;&gt;&lt;/span&gt;

    &lt;!-- Fallback content for non-JS browsers. Same img src as the initial, unqualified source element. --&gt;
    &lt;noscript&gt;
        &lt;imgsrc=&quot;small.jpg&quot;alt=&quot;A giant stone face at The Bayon temple in Angkor Thom, Cambodia&quot;]]&gt;
    &lt;/noscript&gt;
&lt;/span&gt;
</pre>
<p>The post <a href="https://mobile.fhstp.ac.at/development/responsive-images/">Responsive Images</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Responsive Grids mit Susy</title>
		<link>https://mobile.fhstp.ac.at/ux/design/responsive-grids-mit-susy/</link>
		
		<dc:creator><![CDATA[Bibiana Bayer]]></dc:creator>
		<pubDate>Sat, 04 Jan 2014 12:51:34 +0000</pubDate>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[compass]]></category>
		<category><![CDATA[grid]]></category>
		<category><![CDATA[modular]]></category>
		<category><![CDATA[responsive]]></category>
		<category><![CDATA[Sass]]></category>
		<category><![CDATA[susy]]></category>
		<guid isPermaLink="false">https://akirchknopf-21110.php.fhstp.cc/?p=3700</guid>

					<description><![CDATA[<p>Grid Systeme im Web sind interessanter Weise erst in den letzten Jahren beliebt geworden. Doch diese Technik ist nicht neu, es ist eine anerkannte Design-Technik, die beispielsweise schon in den 60er Jahren für Poster verwendet wurde. Ein Grid System ist nichts anderes als horizontale und vertikale Linien, die in gleichmäßigen Abständen verteilt sind. Modular betrachtet <a class="read-more" href="https://mobile.fhstp.ac.at/ux/design/responsive-grids-mit-susy/">[...]</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/ux/design/responsive-grids-mit-susy/">Responsive Grids mit Susy</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Grid Systeme im Web sind interessanter Weise erst in den letzten Jahren beliebt geworden. Doch diese Technik ist nicht neu, es ist eine anerkannte Design-Technik, die beispielsweise schon in den 60er Jahren für Poster verwendet wurde. Ein Grid System ist nichts anderes als horizontale und vertikale Linien, die in gleichmäßigen Abständen verteilt sind. Modular betrachtet gehört das Grid zu den Layout-Rules eines CSS Stylesheets, denn sie dienen dazu, den Inhalt einer Seite zu strukturieren.</p>
<p><span id="more-3700"></span><br />
Auf dem Markt gibt es verschiedene fertige Systeme, doch für <a href="https://www.facebook.com/MobileoPoly" target="_blank">Mobile-o-Poly</a> haben wir uns für das Susy Grid entschieden.  Susy ist ein sehr mächtiges responsive Grid für Compass mit dem komplexe Layouts erstellt werden können.</p>
<p>Susy ist schon allein deswegen perfekt für unser Projekt geeignet, da wir mit Sass und Compass arbeiten. Doch die Handhabung von Susy ist einfach nur ein Traum und erspart sehr viel Arbeit.</p>
<h2>Installation</h2>
<p>Installiert Susy, wie üblich, über den Terminal mit folgendem Befehl:</p>
<p><em>gem install susy</em></p>
<p><a href="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2014/01/1.png"><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-3701" alt="1" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2014/01/1-300x191.png" width="300" height="191" /></a></p>
<h2>Erstellung eines Projekts</h2>
<p>Danach kann mit folgendem Befehl ein neues Compass Projekt erstellt werden, welches das Susy Grid beinhaltet:</p>
<p><em>compass create &lt;PROJEKTNAME&gt; -r susy -u susy</em></p>
<p><a href="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2014/01/2.png"><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-3702" alt="2" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2014/01/2-276x300.png" width="276" height="300" /></a></p>
<p>Hat man schon ein existierendes Compass Projekt, kann man Susy integrieren, in dem man die Konfigurations-Datei config.rb um folgende Zeile erweitert:</p>
<p><em>require „susy“</em></p>
<p><a href="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2014/01/3.png"><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-3703" alt="3" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2014/01/3-300x180.png" width="300" height="180" /></a></p>
<h2>Einstellungen</h2>
<p>In dem neu erstellten Projekt befindet sich jetzt eine Datei _grid.scss, in der alle Einstellungen mittels Variablen vorgenommen werden können. Dies betrifft beispielsweise die Anzahl der Spalten, deren Breite, die Abstände zwischen den einzelnen Spalten und die Außenränder des gesamten Grids.</p>
<p>Im gesamten Projekt von Mobile-o-Poly arbeiten wir mit relativen Einheiten. Da Susy jedoch em-Werte verlangt, müssen diese Einheiten konvertiert werden.</p>
<p><a href="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2014/01/4.png"><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-3704" alt="4" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2014/01/4-300x114.png" width="300" height="114" /></a></p>
<p>Mit Susy ist es auch möglich, für jeden Breakpoint eine andere Anzahl von Spalten zu verwenden.</p>
<p><a href="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2014/01/5.png"><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-3705" alt="5" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2014/01/5-300x253.png" width="300" height="253" /></a></p>
<p>Im nächsten Schritt muss das Grid jetzt auf ein HTML Element angewendet werden. In unserem Fall ist das einfach ein div-Container mit der Klasse page. Gerade zu Beginn des Entwicklungsprozesses ist es hilfreich zu wissen, in welchem Breakpoint man gerade arbeitet. Es hilft auch sehr, wenn die Spalten sichtbar sind. Dies kann man mit den beiden unteren Zeilen erreichen.</p>
<p><a href="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2014/01/6.png"><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-3706" alt="6" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2014/01/6-300x62.png" width="300" height="62" /></a></p>
<p>Jetzt muss man nur noch für jeden Breakpoint die Spaltenanzahl angeben sowie die einzelnen Debug-Messages, und das System ist fertig aufgesetzt.</p>
<p><a href="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2014/01/7.png"><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-3707" alt="7" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2014/01/7-300x54.png" width="300" height="54" /></a></p>
<h2>Das Ergebnis</h2>
<p><a href="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2014/01/8.png"><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-3708" alt="8" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2014/01/8-300x164.png" width="300" height="164" /></a></p>
<p>Das Grid-System kann gerne unter folgender URL getestet werden: <a href="http://mop.fhstp.ac.at/Patterns/grid/html/" target="_blank">http://mop.fhstp.ac.at/Patterns/grid/html/</a></p>
<h2>Arbeiten mit Susy</h2>
<p>Im folgenden Screenshot werden die wichtigsten Befehle gezeigt. Mit span-columns wird angegeben, wie viele Spalten ein Element einnehmen sollen. Im kleinsten Breakpoint soll das Element also eine Spalte von insgesamt zwei Spalten einnehmen. Die Elemente floaten dann links. Jedes zweite Elemente, soll aber rechts floaten. Dies erreicht man mit omega.</p>
<p>Im nächsten Breakpoint sollen die Elemente dann zwei von vier Spalten einnehmen. Jedes zweite Elemente floatet wieder rechts. Diese Einstellung wird noch vom vorigen Breakpoint übernommen.</p>
<p>Im nächsten Breakpoint sollen die Elemente zwei von sechs Spalten einnehmen. Insgesamt sollen so also drei Elemente Platz haben. Daher muss jedes zweite Element wieder links floaten, aber jedes dritte rechts.</p>
<p><a href="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2014/01/9.png"><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-3709" alt="9" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2014/01/9-227x300.png" width="227" height="300" /></a></p>
<p>Die wichtigsten Begriffe werden in der <a href="http://susy.oddbird.net/guides/reference/" target="_blank">Dokumentation</a> von Susy sehr gut erklärt. Auf manche Sachen muss man allerdings erst kommen. Sobald man Susy einmal verstanden hat, wird man es gegen kein anderes Grid System mehr tauschen wollen.</p>
<p>The post <a href="https://mobile.fhstp.ac.at/ux/design/responsive-grids-mit-susy/">Responsive Grids mit Susy</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Atomic Design für Mobile-o-Poly</title>
		<link>https://mobile.fhstp.ac.at/trends/atomic-design-fuer-mobile-o-poly/</link>
		
		<dc:creator><![CDATA[Bibiana Bayer]]></dc:creator>
		<pubDate>Wed, 20 Nov 2013 16:05:38 +0000</pubDate>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Trends]]></category>
		<category><![CDATA[User Experience]]></category>
		<category><![CDATA[Atomic Design]]></category>
		<category><![CDATA[Atoms]]></category>
		<category><![CDATA[beyondtellerrand]]></category>
		<category><![CDATA[Brad Frost]]></category>
		<category><![CDATA[mobile-o-poly]]></category>
		<category><![CDATA[Molecules]]></category>
		<category><![CDATA[Organisms]]></category>
		<category><![CDATA[Pages]]></category>
		<category><![CDATA[Pattern Lab]]></category>
		<category><![CDATA[Patterns]]></category>
		<category><![CDATA[Style Tiles]]></category>
		<category><![CDATA[Templates]]></category>
		<guid isPermaLink="false">https://akirchknopf-21110.php.fhstp.cc/?p=3567</guid>

					<description><![CDATA[<p>Als ich dieses Jahr im Mai auf der beyondtellerrand Konferenz in Düsseldorf teilnahm, war es vermutlich der Vortrag von Brad Frost über Atomic Design, der mich am meisten inspiriert hat. „We’re not designing pages, we’re designing systems of components.“ &#8211; Stephen Hay Das Handwerk des Web Design ist einem ständigen Wandel unterlegen und es zeigt <a class="read-more" href="https://mobile.fhstp.ac.at/trends/atomic-design-fuer-mobile-o-poly/">[...]</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/trends/atomic-design-fuer-mobile-o-poly/">Atomic Design für Mobile-o-Poly</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Als ich dieses Jahr im Mai auf der <a href="http://2013.beyondtellerrand.com/" target="_blank">beyondtellerrand</a> Konferenz in Düsseldorf teilnahm, war es vermutlich der Vortrag von Brad Frost über Atomic Design, der mich am meisten inspiriert hat.</p>
<p>„We’re not designing pages, we’re designing systems of components.“ &#8211; <a href="http://bradfrostweb.com/blog/mobile/bdconf-stephen-hay-presents-responsive-design-workflow/ " target="_blank">Stephen Hay</a></p>
<p>Das Handwerk des Web Design ist einem ständigen Wandel unterlegen und es zeigt sich, dass ein Bedarf an umsichtigen Design Systemen, anstatt einfacher Sammlungen von Webseiten besteht.</p>
<p>In der Vergangenheit wurde schon einiges am Design Prozess geändert und viele Artikel über die Entwicklung von Design Systemen geschrieben. Der Fokus hierbei liegt auf der Entwicklung einer Grundlage für Farben, Typographie, Grids und Texturen. Das Problem daran ist, dass diese Komponenten subjektiv sind.</p>
<p>Auf der Suche nach Inspiration ist Brad Frost auf die Chemie gestoßen. Die kleinsten Elemente, die Grundlage für alles Leben sind, sind Atome. Diese Atome bilden zusammen Moleküle, die wiederum komplexe Organismen erschaffen. Das ist die Grundlage für Atomic Design.</p>
<p><span id="more-3567"></span></p>
<p>Atomic Design bedeutet das methodische entwickeln eines Design Systems in 5 Leveln:</p>
<p><b>Atome</b><br />
In der Chemie sind Atome die kleinsten Bestandteile. Sie können nicht verkleinert werden, ohne ihre Bedeutung zu verlieren. Übertragen auf Interfaces sind Atome Basis-Elemente wie Labels, Inputs, Buttons. Dazu gehören aber auch abstrakte Elemente wie Farben, Fonts und Animationen. Atome sind meist abstrakt und alleine nicht sinnvoll einsetzbar.</p>
<p><b>Moleküle</b><br />
Aus chemischer Sicht sind Moleküle Verbände aus einzelnen Atomen welche durch den Zusammenschluss auch neue Eigenschaften haben. In Bezug auf Interfaces sind Moleküle einzelne Elemente, die gemeinsam eine Gruppe bilden und auch als solche funktionieren. Beispielweise bilden ein Label, ein Eingabefeld und ein Button eine Suche. Aus Atomen Moleküle zu formen ermutigt zu einer &#8220;do one thing and do it well&#8221;-Mentalität. Interface Patterns werden ein Mal perfekt entwickelt und können dann immer wieder verwendet werden.</p>
<p><b>Organismen</b><br />
Organismen sind eine Gruppe von Molekülen und unter Umständen auch Atomen und bilden einen eindeutigen Bereich eines Interfaces. Organismen können sowohl aus gleichen als auch unterschiedlichen Molekülen bestehen. Ein Beispiel für einen Organismus aus unterschiedlichen Molekülen ist ein Header, welcher aus einem Logo, einer Navigation und einer Suche besteht. Eine Liste von Produkten angeordnet in einem Grid ist aber ebenfalls ein gutes Beispiel für einen Organismus. Dadurch entstehen eigenständige, portable und wiederverwendbare Komponenten.</p>
<p><b>Templates</b><br />
Templates bestehen hauptsächlich aus Organismen und bilden so ganze Seiten. In diesem Level sieht man, wie die Organismen in Layouts angeordnet werden. Sie liefern den Kontext für die sonst so abstrakten Atome und Moleküle. In diesem Level kann auch der Kunde eingebunden werden. Üblicherweise wird hier auch mit dem Erstellen von HTML Wireframes begonnen.</p>
<p><b>Seiten</b><br />
Seiten sind Instanzen von Templates. Platzhalter für Bilder, Texte, oder Ähnlichem werden durch echte Inhalte ersetzt. Seiten haben den höchsten Genauigkeitslevel. In diesem Schritt wird vor allem die Effektivität des Design Systems getestet, da alles im Kontext betrachtet werden kann. Passt etwas nicht, können Moleküle und Organismen angepasst werden.</p>
<p>Auf der beyondtellerand 2013 hat Brad Frost auch das <a href="http://pattern-lab.info/" target="_blank">Pattern Lab</a> vorgestellt, welches dafür entwickelt wurde solche Design Systeme zu entwickeln.</p>
<p>Als Basis für die weitere Entwicklung der Patterns für Mobile-o-Poly wurde anhand der Screendesigns und der ersten Version des Spiels alle Komponenten in die drei Level Atome, Moleküle und Organismen eingeteilt.</p>
<p><a href="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2013/11/Foto.jpg"><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-3568" alt="Foto" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2013/11/Foto-300x225.jpg" width="300" height="225" /></a></p>
<p>Auf diesem Screen sind folgende Atome sichtbar:</p>
<ul>
<li>Icon</li>
<li>Heading 1</li>
<li>Paragraph</li>
<li>Label</li>
<li>Input Field</li>
<li>Button</li>
</ul>
<p>Daraus ergeben sich folgende Moleküle:</p>
<ul>
<li>Drop-Down Navigation</li>
<li>Form</li>
</ul>
<p>Dies wiederum ergibt einen speziellen Organismus:</p>
<ul>
<li>Title Bar</li>
</ul>
<p>Alles zusammen bildet ein Template:</p>
<ul>
<li>Standard Template</li>
</ul>
<p><a href="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2013/11/Screendesign_Aleks-02.png"><img loading="lazy" decoding="async" class="alignnone size-medium wp-image-3569" alt="Screendesign_Aleks-02" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2013/11/Screendesign_Aleks-02-168x300.png" width="168" height="300" /></a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/trends/atomic-design-fuer-mobile-o-poly/">Atomic Design für Mobile-o-Poly</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
