<?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>Mobile USTP MKL</title>
	<atom:link href="https://mobile.fhstp.ac.at/feed/" rel="self" type="application/rss+xml" />
	<link>https://mobile.fhstp.ac.at/</link>
	<description>Die &#34;Mobile Forschungsgruppe&#34; der USTP, sie  sammelt hier alles zu den Themen Design, UX und Entwicklung mobiler Applikationen</description>
	<lastBuildDate>Thu, 19 Mar 2026 08:03:47 +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>Mobile USTP MKL</title>
	<link>https://mobile.fhstp.ac.at/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Print2Mobile &#124; Audio Book &#8211; Static Web APP</title>
		<link>https://mobile.fhstp.ac.at/allgemein/print2mobile-audio-book-static-web-app/</link>
					<comments>https://mobile.fhstp.ac.at/allgemein/print2mobile-audio-book-static-web-app/#respond</comments>
		
		<dc:creator><![CDATA[Csongor]]></dc:creator>
		<pubDate>Thu, 19 Mar 2026 08:03:46 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[Print-to-mobile]]></category>
		<category><![CDATA[QR-Code]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Web-App]]></category>
		<guid isPermaLink="false">https://mobile.fhstp.ac.at/?p=14984</guid>

					<description><![CDATA[<p>A book titled Flightpath filled to the brim with interesting facts, stories and visuals about aviation, but the question remains: How could we add even more value to an already great product.</p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/print2mobile-audio-book-static-web-app/">Print2Mobile | Audio Book &#8211; Static Web APP</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p style="font-size:1.2rem"><em>A book titled Flightpath filled to the brim with interesting facts, stories and visuals about aviation, but the question remains: How could we add even more value to an already great product.</em></p>



<p class="has-large-font-size"><strong>Project Overview</strong></p>



<p>To start off I invented a fictional product to which our lectures topic, Print to Mobile(Web) and the use of QR Codes can be applied to. I worked to gain added value for the product, as the title suggest my approach was by extending the physical product with a digital audio book. The project aims to provide an immersive experience through the scanning process and accommodate readers who may prefer to listen to books over reading or just want to listen while being occupied by something else.</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full is-resized"><img fetchpriority="high" decoding="async" width="1024" height="1536" src="https://mobile.fhstp.ac.at/wp-content/uploads/2025/10/cover-print-7.jpg" alt="" class="wp-image-15035" style="width:450px"/></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full"><img decoding="async" width="895" height="385" src="https://mobile.fhstp.ac.at/wp-content/uploads/2025/10/image-6.png" alt="" class="wp-image-15036"/></figure>



<p>A moment after the QR code is scanned the user is met with a book that opens its cover (the same as the physical book cover) and reviles an audio player where the user can listen to the audio book. Test it your self <a href="https://curious-mousse-8bd688.netlify.app/?auto=1">HERE</a>.</p>
</div>
</div>



<p class="has-large-font-size"><strong>Implementation</strong></p>



<p>I decided to create a static web application as the title suggests. This was in order to simplify the project by having no server side. For the creation of the app I used a famous front end framework called <a href="https://nuxt.com/">Nuxt.js </a>that is based on <a href="https://vuejs.org/">Vue.js</a> for template files. Following the chronological order of how the user would encounter interact with the app. The opening of the book cover is created using <a href="https://tailwindcss.com/">Tailwindcss</a> and some additional custom css code where the built in tools of tailwind were not enough. When the book is opened the user encounters the audio player which is created using the <a href="https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API">Web Audio API</a> that is available in the browser by default. Finally I used the extremely user friendly deployment service of <a href="https://www.netlify.com/">Netlify</a> to publish my application to the web within minutes.</p>



<p class="has-large-font-size"><strong>Summary</strong></p>



<p>The product of this project is a prototype that shows how there can be added value to an existing products by incorporating the Print2Mobile concept. Future iterations of the project could also make use of augmented reality to further enhance the book by showing the plane models &#8220;pop-out&#8221; of the book through the users cameras into their surroundings and allow them to have a closer look.</p>



<p>I personally had fun seeing what&#8217;s the most creative way I can integrate the Print2Mobile concept in my project.</p>



<p>Find the application at: <a href="https://curious-mousse-8bd688.netlify.app/?auto=1">https://curious-mousse-8bd688.netlify.app/?auto=1</a><br><br><strong>Disclaimer: </strong><em>This is a personal project created for educational and illustrative purposes. It is not affiliated with any existing organizations or products.</em></p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/print2mobile-audio-book-static-web-app/">Print2Mobile | Audio Book &#8211; Static Web APP</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/allgemein/print2mobile-audio-book-static-web-app/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Freemium, Subscriptions, and Ads: A Technical and Economic Look at App Revenues</title>
		<link>https://mobile.fhstp.ac.at/allgemein/freemium-subscriptions-and-ads-a-technical-and-economic-look-at-app-revenues/</link>
		
		<dc:creator><![CDATA[Kevin Kraushofer]]></dc:creator>
		<pubDate>Mon, 09 Mar 2026 10:26:08 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<guid isPermaLink="false">https://mobile.fhstp.ac.at/?p=15805</guid>

					<description><![CDATA[<p>Whether it&#8217;s social media apps, games, or news, all these apps are offered for free nowadays. For us users, it has become a habit not to pay anything for software on our phones. Hard to believe: Back in 2009, a proud 77% of apps in the App Store were paid. Today, that number is just <a class="read-more" href="https://mobile.fhstp.ac.at/allgemein/freemium-subscriptions-and-ads-a-technical-and-economic-look-at-app-revenues/">[...]</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/freemium-subscriptions-and-ads-a-technical-and-economic-look-at-app-revenues/">Freemium, Subscriptions, and Ads: A Technical and Economic Look at App Revenues</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Whether it&#8217;s social media apps, games, or news, all these apps are offered for free nowadays. For us users, it has become a habit not to pay anything for software on our phones.</p>



<p>Hard to believe: Back in 2009, a proud 77% of apps in the App Store were paid. Today, that number is just 4.9%. Because of this, it is increasingly difficult for developers to find indirect or even invisible ways to finance server costs and their own work. Nevertheless, giants like Snapchat, WhatsApp, Instagram, or Facebook manage to be part of a multi-billion dollar economic empire, even though their download button says &#8220;Free&#8221;. How does that add up?</p>



<p>In this blog post, we will take a look at the three biggest monetization strategies, their technical hurdles, and why the classic &#8220;pay once&#8221; model is almost extinct.</p>



<h2 class="wp-block-heading"><strong>In-App Advertising</strong></h2>



<p>In-app advertising remains the most well-known and successful method of app monetization. These are ads that users see while using the app. According to Netimperative, this leads to up to a 12% increase in users&#8217; purchase intent. The most common formats are:</p>



<ul class="wp-block-list">
<li><strong>Banner Ads:</strong> Small ads, usually at the top or bottom edge of the screen.</li>



<li><strong>Video Ads:</strong> Short clips played before or during use.</li>



<li><strong>Interstitial Ads:</strong> Full-screen ads that often appear during natural pauses (e.g., after completing a level).</li>



<li><strong>Native Ads:</strong> Ads that blend seamlessly into the visual design of the app.</li>
</ul>



<p>These formats are typically found in social media apps, news apps, and very frequently in gaming apps.</p>



<h2 class="wp-block-heading"><strong>In-App Purchases</strong></h2>



<p>In addition to in-app advertising, developers can generate revenue through in-app purchases. This method is especially popular in the gaming sector. The business model behind it is that players can acquire skins, items, or objects. This type of monetization is also often exploited through the &#8220;Pay-to-Win&#8221; pattern. In this scenario, purchases are offered that give players an unfair advantage over others. Games are often specifically designed to offer helpful (but paid) items at particularly tricky spots. For example, to skip a level or gain more power.</p>



<p>Generally, we distinguish between two categories:</p>



<ul class="wp-block-list">
<li><strong>Consumables:</strong> In-game currency (coins/gems), health points, power-ups, or building materials. These can be bought over and over again.</li>



<li><strong>Non-Consumables:</strong> Unlocking hidden levels, new characters, or cosmetic goods like &#8220;skins&#8221; and outfits. These are purchased only once.</li>
</ul>



<h2 class="wp-block-heading"><strong>Freemium</strong></h2>



<p>With the freemium model (a portmanteau of &#8220;free&#8221; and &#8220;premium&#8221;), the basic version of the app is completely free. However, if you want to use additional features, exclusive content, or an ad-free environment, you hit a so-called paywall. The goal is simple: users should get to know and love the app, so they are then willing to invest in the best user experience. The most prominent example of this is Spotify. You can easily use the service for free, but you have to take out a monthly subscription for features like offline listening, unrestricted song selection, and the removal of ads.</p>



<h2 class="wp-block-heading"><strong>Technical Implementation: How Does the Money Get Into the App?</strong></h2>



<p>Integrating these monetization models into an app requires some technical groundwork. Fortunately, developers no longer write these systems entirely from scratch; instead, they rely on proven interfaces. For ad integration, so-called SDKs (Software Development Kits) from large ad networks like Google AdMob or Unity Ads are embedded directly into the code. These communicate with the servers in the background and fetch perfectly tailored ads in real-time.</p>



<p>When it comes to in-app purchases and subscriptions, the payment processing doesn&#8217;t go through the developer&#8217;s private bank account, but always through the secure infrastructure of the respective operating system. Apple provides the StoreKit framework, and Android offers the Google Play Billing API. To ensure everything is secure and fraud is prevented during these transactions, server-side validation is essential. The app&#8217;s backend directly asks Apple or Google whether the user&#8217;s digital receipt is actually genuine before virtual items or premium features are unlocked in the app.</p>



<h2 class="wp-block-heading"><strong>The Balance Between Profit and User Experience (UX)</strong></h2>



<p>The biggest challenge with all these models is the fine line between maximizing revenue and annoying users. A poor user experience (UX) caused by overly aggressive monetization inevitably leads to the app being uninstalled quickly. For example, pop-up full-screen ads or poorly optimized video ads not only consume valuable data volume but can also cause annoying delays and longer loading times due to their size.</p>



<p>If you add too many ad interruptions, paywalls in inappropriate places, or a strong pay-to-win feeling, the trust of the user base is usually completely lost. A smart way out of this dilemma is often so-called Rewarded Video Ads. Here, the user decides for themselves whether they want to watch a commercial and receives an in-app reward as a thank you. To find out exactly where their own target audience&#8217;s pain threshold lies, experienced development teams also rely on A/B testing. This helps determine how many ads will be tolerated without people bouncing.</p>



<h2 class="wp-block-heading"><strong>Conclusion: &#8220;Free&#8221; Always Has a Price</strong></h2>



<p>At the end of the day, it becomes clear: no app is truly completely free. Even if we don&#8217;t pay a cent when downloading from the App Store, we indirectly co-finance the development and server costs. Be it through our attention to advertising, the purchase of virtual coins, or signing up for a premium subscription. The free-to-play and freemium models have prevailed because they lower the barrier to entry for us users to zero.</p>



<p>For development studios, however, it remains a constant balancing act. Only those who have a firm grip on the complex technology in the background and find a fair balance between monetization and a great user experience will survive on users&#8217; smartphones in the long run. Ultimately, the apps that win are the ones that offer real value without making us feel like walking wallets.</p>



<p>Sources:</p>



<p>Picture is generated with Gemini (Nanobanana)</p>



<p><a href="https://startup-creator.com/blog/app-monetarisierung">https://startup-creator.com/blog/app-monetarisierung</a></p>



<p><a href="https://www.publift.com/de/blog/app-monetization">https://www.publift.com/de/blog/app-monetization</a></p>



<p><a href="https://www.adpushup.com/de/blog/game-monetization-model">https://www.adpushup.com/de/blog/game-monetization-model</a></p>



<p><a href="https://www.devteam.space/blog/how-to-add-ads-to-your-app">https://www.devteam.space/blog/how-to-add-ads-to-your-app</a></p>



<p><a href="https://nirajpaul2.medium.com/storekit-2-0-part-1-dcacd1a1e861">https://nirajpaul2.medium.com/storekit-2-0-part-1-dcacd1a1e861</a></p>



<p><a href="https://developer.android.com/google/play/billing?hl=de">https://developer.android.com/google/play/billing?hl=de</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/freemium-subscriptions-and-ads-a-technical-and-economic-look-at-app-revenues/">Freemium, Subscriptions, and Ads: A Technical and Economic Look at App Revenues</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Projekt WS25 &#124; MixMatch (Fortsetzung)</title>
		<link>https://mobile.fhstp.ac.at/allgemein/projekt-ws25-mixmatch-fortsetzung/</link>
		
		<dc:creator><![CDATA[Andreas Kaiser]]></dc:creator>
		<pubDate>Sun, 01 Mar 2026 23:41:03 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Native Development]]></category>
		<category><![CDATA[Projekte]]></category>
		<category><![CDATA[Studium]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[mobile]]></category>
		<guid isPermaLink="false">https://mobile.fhstp.ac.at/?p=15368</guid>

					<description><![CDATA[<p>Um mein Projekt &#8220;MixMatch&#8221; näher in die Richtung production-ready Zustand zu bringen wurde das 3. Semester von mir genutzt, nahtlos an den zuvor vorhandenen Stand der Entwicklung anzuschließen.Im Semester habe ich mich im wesentlichen darauf fokussiert, Community Features, wie Sterne-Bewertungen und Kommentier- bzw. Antwortfunktion, in meine Nativescript-App zu integrieren und deutlich mehr Zeit in Bugfixing <a class="read-more" href="https://mobile.fhstp.ac.at/allgemein/projekt-ws25-mixmatch-fortsetzung/">[...]</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/projekt-ws25-mixmatch-fortsetzung/">Projekt WS25 | MixMatch (Fortsetzung)</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Um mein Projekt &#8220;MixMatch&#8221; näher in die Richtung production-ready Zustand zu bringen wurde das 3. Semester von mir genutzt, nahtlos an den zuvor vorhandenen Stand der Entwicklung anzuschließen.<br>Im Semester habe ich mich im wesentlichen darauf fokussiert, Community Features, wie Sterne-Bewertungen und Kommentier- bzw. Antwortfunktion, in meine Nativescript-App zu integrieren und deutlich mehr Zeit in Bugfixing zu investieren. Nebenbei wurde stellenweise das Design weiter optimiert, sowie das Fehlerhandling überarbeitet. Zur Abrundung wurde im Projektabschnitt eine exportierbare Einkaufliste für Zutaten, die der/die User:in braucht, um die Rezepte nachzumachen, integriert.</p>



<h2 class="wp-block-heading"><strong>Neuerungen seit dem letzten Semester</strong></h2>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.34%">
<figure class="wp-block-image size-full is-resized"><img decoding="async" width="1224" height="2570" src="https://mobile.fhstp.ac.at/wp-content/uploads/2026/03/Screenshot_20260301_232048.png" alt="" class="wp-image-15782" style="width:232px;height:auto" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2026/03/Screenshot_20260301_232048.png 1224w, https://mobile.fhstp.ac.at/wp-content/uploads/2026/03/Screenshot_20260301_232048-732x1536.png 732w, https://mobile.fhstp.ac.at/wp-content/uploads/2026/03/Screenshot_20260301_232048-975x2048.png 975w" sizes="(max-width: 1224px) 100vw, 1224px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="1224" height="2570" src="https://mobile.fhstp.ac.at/wp-content/uploads/2026/03/Screenshot_20260302_003203.png" alt="" class="wp-image-15787" style="width:231px;height:auto" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2026/03/Screenshot_20260302_003203.png 1224w, https://mobile.fhstp.ac.at/wp-content/uploads/2026/03/Screenshot_20260302_003203-732x1536.png 732w, https://mobile.fhstp.ac.at/wp-content/uploads/2026/03/Screenshot_20260302_003203-975x2048.png 975w" sizes="auto, (max-width: 1224px) 100vw, 1224px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="1224" height="2570" src="https://mobile.fhstp.ac.at/wp-content/uploads/2026/03/Screenshot_20260301_232236.png" alt="" class="wp-image-15784" style="width:234px;height:auto" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2026/03/Screenshot_20260301_232236.png 1224w, https://mobile.fhstp.ac.at/wp-content/uploads/2026/03/Screenshot_20260301_232236-732x1536.png 732w, https://mobile.fhstp.ac.at/wp-content/uploads/2026/03/Screenshot_20260301_232236-975x2048.png 975w" sizes="auto, (max-width: 1224px) 100vw, 1224px" /></figure>
</div>
</div>



<ul class="wp-block-list">
<li><strong>Filteroptionen in der Rezeptliste</strong></li>
</ul>



<p>Der größte strukturelle Umbau fand in der Rezeptliste statt. Bisher wurden die Rezepte einfach als rohe Liste angezeigt, ohne Möglichkeit zur Filterung. Jetzt gibt es eine eigene Suchleiste mit Autocomplete-Vorschlägen der gefilterten Drinks, eine alphabetische Sortierung mit Drink-Nummer pro Karte, sowie einen Toggle-Filter für Signature Drinks.</p>



<ul class="wp-block-list">
<li><strong>Kommentar-Sektion bei den Recipes</strong></li>
</ul>



<p>Das Herzstück des Projektes war die Erweiterung, dass jedes Rezept nun eine vollwertige Community-Section hat. User:innen können Kommentare mit Sternebewertung hinterlassen, auf Kommentare anderer antworten und eigene Kommentare wieder löschen. Die Bewertungen fließen in eine Durchschnittsbewertung ein, die prominent im Header der Rezeptkarte angezeigt wird. Die gesamte Kommunikation läuft in Echtzeit über WebSockets.</p>



<ul class="wp-block-list">
<li><strong>Benötigte Zutaten einer Einkaufsliste hinzufügen</strong></li>
</ul>



<p>Bisher wurden alle nicht angegebenen Zutaten bei der Hauptsuche automatisch gesammelt und global in meinem Code zwischengespeichert. Das wurde grundlegend über ein Einkaufslisten-Feature überarbeitet: Pro Rezept kann der/die Nutzer:in nun selbst entscheiden, ob er/sie die fehlenden Zutaten zur Einkaufsliste hinzufügen möchte. Fehlende Zutaten werden in der Zutatenliste farblich in Orange hervorgehoben. Ein einzelner Button pro Rezept überträgt dann gezielt nur die fehlenden Zutaten in die Einkaufsliste. Die Einkaufsliste selbst unterstützt den Export als PDF über den nativen Android PrintManager sowie im CSV-Format.<br><br>Neben diesen Änderungen konnten viele Bugs behoben werden. Speziell einige Bugs, die die Funktionalität rund um die Erstellung von &#8220;Signature Drinks&#8221; (anlegen/löschen) als auch den Umgang mit gekennzeichneten Favoriten-Rezepten, eingeschränkt haben, existieren nicht mehr.</p>



<h2 class="wp-block-heading"><strong>Technischer Part</strong></h2>



<p>Der Großteil an Technologien ist gleich geblieben. Im Frontend setze ich weiterhin auf NativeScript Angular bzw. Tailwind für das Design und im Backend SpringBoot. Das Backend habe ich dieses Semester erstmalig über den Online-Service Railway gehostet. Dazugekommen sind vor allem die WebSocket-Bibliothek <code>@stomp/stompjs</code> im Frontend sowie die entsprechende Spring WebSocket-Abhängigkeit im Backend.</p>



<p>Für die Kommentar-Funktion war von Anfang an klar, dass klassische HTTP-Requests nicht ausreichen , sonst wäre ein ständiges manuelles Aktualisieren notwendig gewesen, um neue Kommentare zu sehen. Die Wahl fiel auf WebSockets mit STOMP, einem einfachen Messaging-Protokoll das auf WebSocket aufsetzt und ein Publish-Subscribe-Modell ermöglicht. Im Spring Boot Backend wird dabei ein Message-Broker konfiguriert der eingehende Nachrichten an alle Subscriber des jeweiligen Rezept-Topics weiterleitet. Jedes Rezept hat seinen eigenen Kanal, zum Beispiel <code>/topic/recipe/42/comments</code>. Nur Nutzer:innen die gerade dieses Rezept offen haben, empfangen die Kommentar, die zu diesem Rezept abgegeben wurden. Der Controller nimmt neue Kommentare entgegen, speichert sie und schickt sie sofort an alle aktiven Subscriber:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: java; title: ; notranslate">
@MessageMapping(&quot;/comments/create&quot;)
public void createComment(CreateCommentRequestDto request, Principal principal) {
    User author = userRepository.findByUsername(principal.getName())...;
    CommentResponseDto saved = commentService.createComment(request, author);
    messagingTemplate.convertAndSend(
        &quot;/topic/recipe/&quot; + request.getRecipeId() + &quot;/comments&quot;, 
        saved
    );
}
</pre></div>


<p>Im Frontend übernimmt ein dedizierter <code>CommentWebSocketService</code> die gesamte Verbindungslogik. Er verwendet die <code>@stomp/stompjs</code> Bibliothek, schickt den JWT-Token beim Verbindungsaufbau mit und subscribt auf den zum Rezept passenden Topic-Kanal:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
this.stompClient = new Client({
    webSocketFactory: () =&gt; new WebSocket(`wss://...railway.app/ws`),
    connectHeaders: { Authorization: `Bearer ${this.authToken}` },
    reconnectDelay: 5000,
});

this.stompClient.onConnect = () =&gt; {
    this.stompClient.subscribe(
        `/topic/recipe/${this.recipeId}/comments`,
        (message) =&gt; {
            const comment = JSON.parse(message.body);
            onCommentReceived(comment);
        }
    );
};
</pre></div>


<h2 class="wp-block-heading"><strong>Herausforderungen &amp; Learning(s) daraus</strong></h2>



<p>Die größte Herausforderung des Semesters waren eindeutig die WebSockets. Theoretisch klingt es simpel (Verbindung öffnen und Nachrichten empfangen), jedoch in der Praxis gab es einige Hürden. Zuerst die Authentifizierung: anders als bei normalen HTTP-Requests musste der JWT-Token über die STOMP <code>connectHeaders</code> mitgeschickt und im Backend extra validiert werden. Dann das Problem mit inaktiven Verbindungen, denn ohne der sogenannten &#8220;Heartbeat-Konfiguration&#8221; auf beiden Seiten kamen Nachrichten irgendwann einfach nicht mehr an (Fehlermeldungen wurden nicht geworfen). Zu guter Letzt das Aufräumen der Verbindungen, denn ohne explizites <code>disconnect()</code> blieben im Hintergrund immer mehr aktive Verbindungen offen.</p>



<p>Was das Aufräumen so schwierig gemacht hat, war der Pager, mit dem man zwischen den Rezepten swipen kann. NativeScript&#8217;s Pager-Komponente erstellt alle Rezept-Items gleichzeitig beim Laden, bei 14 Rezepten also sofort 14 WebSocket-Verbindungen und 14 HTTP-Requests, obwohl der/die Nutzer:in nur ein einziges Rezept sieht. Noch dazu wird <code>ngOnDestroy</code> beim Wischen zwischen den Items nicht zuverlässig aufgerufen, weil der Pager seine Views intern recycelt statt sie wirklich zu zerstören. Dadurch hat die Cleanup-Logik nie gefeuert.</p>



<p>Die Lösung war letztlich ein Umdenken: statt auf <code>ngOnDestroy</code> zu vertrauen, steuert jetzt ein Flag, ob die Kommentar-Sektion überhaupt gerendert wird. Sobald der Nutzer wegwischt, verschwindet die Komponente via <code>*ngIf</code> aus dem DOM, damit das Cleanup zuverlässig durchläuft. Das wesentliche Learning dabei, war ein gut ausgebautes Debugging zu haben.</p>



<h2 class="wp-block-heading"><strong>Fazit und zukünftige TODOs</strong></h2>



<p>In diesem Projektabschnitt konnte ich mich erstmalig herausfordernd damit befassen, wie WebSockets technisch umgesetzt werden. Das war gleichzeitig eines der interessantesten und aufwändigsten Themen des Semesters. Die vielen Debugging-Sessions haben mich aber auch am meisten weitergebracht. Rückblickend bin ich sehr zufrieden damit, was ich mir vorgenommen hatte auch tatsächlich vollständig umgesetzt zu haben. Gerade das Bugfixing war diesmal besonders aufwändig, hat aber mit großem Erfolg geendet und manche Features meiner App brauchbarer gemacht.</p>



<p>An diesen Dingen sollte nun weitergearbeitet werden: Performance-seitig gibt es noch Luft nach oben, sowohl beim initialen Laden als auch bei den Screen-Wechseln merkt man stellenweise noch Verzögerungen die es zu optimieren gilt. Auch das Design ist noch nicht wirklich durchgängig einheitlich, was ich in einem nächsten Schritt konsequenter angehen möchte. Dazu kommt, dass ich bisher kaum echtes User-Feedback eingeholt habe, das soll sich ändern. Auf technischer Seite fehlen noch automatisierte Tests, die zur noch besseren Stabilität der App beitragen sollen. Schlussendlich wäre das große Ziel die App veröffentlichen zu können.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p><strong>Beitragsbild</strong>: dieses wurde mittels Einsatz von KI erzeugt</p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/projekt-ws25-mixmatch-fortsetzung/">Projekt WS25 | MixMatch (Fortsetzung)</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Projekt &#124; VS Code Extension</title>
		<link>https://mobile.fhstp.ac.at/studium/studium-projekte/projekt-vs-code-extension/</link>
		
		<dc:creator><![CDATA[Katharina Wurm]]></dc:creator>
		<pubDate>Thu, 26 Feb 2026 11:32:36 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Projekte]]></category>
		<category><![CDATA[Studium]]></category>
		<category><![CDATA[extension]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Typescript]]></category>
		<category><![CDATA[Visual Studio Code]]></category>
		<guid isPermaLink="false">https://mobile.fhstp.ac.at/?p=15534</guid>

					<description><![CDATA[<p>IDEs wie Visual Studio Code gehören zum Alltag jeder Softwareentwicklerin und jedes Softwareentwicklers – egal ob im Mobile-, Web- oder Backend-Bereich. Was VS Code besonders spannend macht, ist, dass es sich erweitern lässt. Sogenannte &#8220;Extensions&#8221; ermöglichen es, die Arbeitsumgebung individuell zu gestalten, Prozesse zu automatisieren und neue Funktionen direkt in den Editor zu integrieren. Obwohl <a class="read-more" href="https://mobile.fhstp.ac.at/studium/studium-projekte/projekt-vs-code-extension/">[...]</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/studium/studium-projekte/projekt-vs-code-extension/">Projekt | VS Code Extension</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><span style="font-size: revert; white-space: normal;">IDEs wie Visual Studio Code gehören zum Alltag jeder Softwareentwicklerin und jedes Softwareentwicklers – egal ob im Mobile-, Web- oder Backend-Bereich. </span>Was VS Code besonders spannend macht, ist, dass es sich erweitern lässt. Sogenannte &#8220;Extensions&#8221; ermöglichen es, die Arbeitsumgebung individuell zu gestalten, Prozesse zu automatisieren und neue Funktionen direkt in den Editor zu integrieren.</p>



<p>Obwohl ich bereits unzählige Stunden in IDEs wie VS Code verbracht habe, um Apps und mehr zu entwickeln, hatte ich mich bisher nie damit beschäftigt, wie sich die Entwicklungsumgebung selbst erweitern lässt.</p>



<p>Da ich die Idee hatte, in meiner Masterarbeit eine VS Code Extension zu entwickeln, wollte ich das Einzelprojekt im 3. Semester der Masterklasse Mobile nutzen, um erste praktische Erfahrungen mit der Entwicklung von VS Code Extensions zu sammeln, bevor ich mich an die separate Entwicklung des Masterarbeitsprojekts mache.</p>



<p>Das Ergebnis dieses explorativen Projekts ist &#8220;Cute Cat&#8221;: eine süße VS Code Extension, die unterschiedliche Möglichkeiten von VS Code Extensions kombiniert.</p>



<h2 class="wp-block-heading">Features</h2>



<h3 class="wp-block-heading">Commands</h3>



<p>Die Extension stellt mehrere Commands zur Verfügung, die direkt über die Command Palette in VS Code aufgerufen werden können:</p>



<ul class="wp-block-list">
<li><strong>&#8220;Meow!&#8221;</strong> zeigt eine kurze Informationsnachricht.</li>



<li>&#8220;<strong>Show me the cat“</strong>&nbsp;öffnet ein Informations-Popup, in welchem auch mehrzeiliger Text verwendet werden kann.</li>



<li>&#8220;<strong>Wake up cat“</strong>&nbsp;aktiviert die WebView im Side Panel (falls sie nicht schon angezeigt wird) und zeigt eine überraschte Katze für ein paar Sekunden. Die WebView wird weiter unten im Detail beschrieben.</li>



<li>&#8220;<strong>Wrap selection in try catch block“</strong>&nbsp;erweitert den ausgewählten Code automatisch um einen&nbsp;try-catch-Block oder gibt eine Warnung aus, falls keine Auswahl getroffen wurde.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="1255" height="652" src="https://mobile.fhstp.ac.at/wp-content/uploads/2026/02/commands.png" alt="" class="wp-image-15614" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2026/02/commands.png 1255w, https://mobile.fhstp.ac.at/wp-content/uploads/2026/02/commands-770x400.png 770w" sizes="auto, (max-width: 1255px) 100vw, 1255px" /></figure></div>


<h3 class="wp-block-heading">Themes</h3>



<p>Neben funktionalen Features wurden auch eigene Designkomponenten umgesetzt:</p>



<ul class="wp-block-list">
<li><strong>&#8220;Cute Cat Pastel Dark&#8221;</strong> Colour Theme</li>



<li><strong>&#8220;Cute Cat Pastel Icons&#8221;</strong> Icon Theme</li>
</ul>



<p>Dabei lag der Fokus auf einer konsistenten visuellen Identität. Die Kombination aus sanften Pastelltönen und angepassten Icons verleiht der Extension einen klaren Wiedererkennungswert.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1255" height="652" src="https://mobile.fhstp.ac.at/wp-content/uploads/2026/02/theme-demo-2.jpg" alt="" class="wp-image-15612" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2026/02/theme-demo-2.jpg 1255w, https://mobile.fhstp.ac.at/wp-content/uploads/2026/02/theme-demo-2-770x400.jpg 770w" sizes="auto, (max-width: 1255px) 100vw, 1255px" /></figure>



<h3 class="wp-block-heading"><strong>WebView Side Panel</strong></h3>



<p>Ein zentrales Element der Extension ist die WebView im Side Panel. Dort wird ein animiertes Katzen-GIF angezeigt, das dynamisch auf Kontextinformationen reagiert:</p>



<ul class="wp-block-list">
<li>Anpassung an die Tageszeit (z. B. „Good Morning“)</li>



<li>Reaktion auf lange Coding-Sessions (z. B. schlägt die Katze dem*der User*in nach 4 Stunden vor, eine Kaffeepause einzulegen)</li>



<li>Anzeige der aktuellen Session-Dauer</li>



<li>Anzeige, wie lange die Extension insgesamt schon aktiv ist (&#8220;<em>Did you know we have been friends for 19h 58min?</em>&#8220;)</li>
</ul>



<p>Zusätzlich kann innerhalb der WebView über ein Settings-Icon ein Modal geöffnet werden, in dem User*innen mit einem Klick die bereitgestellte Colour bzw. Icon Theme (de)aktivieren können.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1255" height="652" src="https://mobile.fhstp.ac.at/wp-content/uploads/2026/02/webview.png" alt="" class="wp-image-15616" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2026/02/webview.png 1255w, https://mobile.fhstp.ac.at/wp-content/uploads/2026/02/webview-770x400.png 770w" sizes="auto, (max-width: 1255px) 100vw, 1255px" /></figure>



<h3 class="wp-block-heading">Text Decorations</h3>



<p>Ein weiteres Feature der Extension sind dynamische Text Decorations. In den geöffneten Texteditoren werden Schlüsselwörter wie &#8220;cat&#8221; und &#8220;cute&#8221; mit kleinen dekorativen Elementen versehen.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1255" height="652" src="https://mobile.fhstp.ac.at/wp-content/uploads/2026/02/decorations.png" alt="" class="wp-image-15618" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2026/02/decorations.png 1255w, https://mobile.fhstp.ac.at/wp-content/uploads/2026/02/decorations-770x400.png 770w" sizes="auto, (max-width: 1255px) 100vw, 1255px" /></figure>



<details class="wp-block-details is-layout-flow wp-block-details-is-layout-flow"><summary><em>Attribution</em></summary>
<ul class="wp-block-list">
<li><em>Cat&nbsp;SVG Vector (mit geänderter Farbe): bereitgestellt auf <a href="https://www.svgrepo.com/svg/522779/cat">https://www.svgrepo.com/svg/522779/cat</a> von <a href="https://www.svgrepo.com/author/Solar%20Icons/">Solar Icons</a> unter der <a href="https://www.svgrepo.com/page/licensing/#CC%20Attribution">CC Attribution Lizenz</a></em></li>



<li><em>Bow Tie Ribbon&nbsp;SVG Vector (mit geänderter Farbe): bereitgestellt auf <a href="https://www.svgrepo.com/svg/321894/bow-tie-ribbon">https://www.svgrepo.com/svg/321894/bow-tie-ribbon</a> von <a href="https://www.svgrepo.com/collection/game-interface-icons/">Game Interface Icons</a> unter der <a href="https://www.svgrepo.com/page/licensing/#CC%20Attribution">CC Attribution Lizenz</a></em></li>
</ul>
</details>



<h2 class="wp-block-heading">Projektaufbau</h2>



<p>Vereinfacht dargestellt ist das Projekt wie folgt aufgebaut:</p>



<pre class="wp-block-code"><code>- media/
  - webViewScript.js
  - webViewStyles.css
  - &#91;...Bilder]
- src/
  - extension.ts (Einstiegspunkt)
  - &#91;...]
- themes/
  - color-theme.json
  - icon-theme.json
- &#91;...]
- package.json (Manifest)</code></pre>



<p>Wichtig sind hierbei die <code>package.json</code> Datei, in welcher die Commands, WebView und Themes deklariert werden, und die <code>src/extension.ts</code> Datei, welche den Einstiegspunkt der Extension darstellt:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
import * as vscode from &#039;vscode&#039;;

export function activate(context: vscode.ExtensionContext) {
    // ...
}

export function deactivate() {}
</pre></div>


<h2 class="wp-block-heading">Challenges und Learnings</h2>



<h3 class="wp-block-heading">API-Dokumentation</h3>



<p>VS Code bietet einen <a href="https://code.visualstudio.com/api/get-started/your-first-extension">&#8220;Your First Extension&#8221; Guide</a> und stellt viele Beispielprojekte zu unterschiedlichen Extension-Funktionalitäten für Entwickler*innen zur Verfügung. Trotzdem ist es manchmal nicht so leicht, das genaue Beispielprojekt, welches man sucht, zu finden. Ich würde zukünftigen Extension-Developer*innen empfehlen, direkt auf GitHub zu schauen (<a href="https://github.com/microsoft/vscode-extension-samples">https://github.com/microsoft/vscode-extension-samples</a>), anstatt nur in der <a href="https://code.visualstudio.com/api">VS Code Extension API</a> zu suchen.</p>



<p>Falls man etwas Bestimmtes zur <a href="https://code.visualstudio.com/api/references/vscode-api">VS Code API</a> nachschauen will, ist diese recht gut dokumentiert. Leider funktionieren einige Links auf der Website allerdings nicht, weshalb ich mich hauptsächlich mit der Suchfunktion (STRG+F) durch die API-Dokumentation arbeiten musste.</p>



<p>Von der Community gibt es eher weniger Tutorials und Online-Beiträge. Um die VS Code Extension zu entwickeln, kombinierte ich daher Informationen aus der API-Dokumentation, aus Beispielprojekten und Tutorials und erarbeitete mir die fehlenden Details eigenständig durch &#8220;Learning by Doing&#8221;.</p>



<h3 class="wp-block-heading">Text Decoration Icons</h3>



<p>Man würde denken, ein Bild als Text Decoration zu setzen, wäre trivial. Doch hat es mich einige Zeit gekostet, bis ich Folgendes realisiert habe: Wenn man ein SVG Icon verwenden will, darf dieses nicht selbst &#8220;width&#8221; und &#8220;height&#8221; angeben. Obwohl man der Text Decoration sowohl width, als auch height, mitgeben kann, werden diese Angaben ignoriert, wenn das SVG seine eigene Größe vorgibt. </p>



<p>Weiters werden die Icons nicht mitting in der Zeile positioniert (siehe das Bild der Text Decorations: die Icons sind etwas weiter oben positioniert als der Text). Man kann der Decoration zwar auch einen Margin mitgeben, allerdings würde z. B. ein Top-Margin (um den extra Platz unterhalb des Icons auszugleichen) nicht nur das Icon, sondern die ganze Zeile nach unten schieben.</p>



<h3 class="wp-block-heading">Kommunikation zwischen Extension und WebView</h3>



<p>Eine weitere Challenge war die Kommunikation zwischen der Extension und der WebView, um insbesondere bei den &#8220;Theme Toggles&#8221; beide Seiten am gleichen Stand zu halten (wenn das Theme (extern) aktiviert wurde, sollte auch der Toggle in der WebView automatisch aktiviert werden). Dank der VS Code API können aber Nachrichten recht einfach zwischen der Extension und der WebView ausgetauscht werden.</p>



<h3 class="wp-block-heading">Debugging</h3>



<p>Ich fand es sehr spannend, insbesondere die WebView zu debuggen. Über die Command Palette in VS Code lässt sich der Web Inspector öffnen (&#8220;Toggle Developer Tools&#8221;), mit welcher sowohl der Console-Output, als auch die HTML-Elemente der ganzen IDE inspiziert werden können. Innerhalb von den Sourcefiles (abgesehen von <code>webViewScript.js</code>) lassen sich allerdings auch Breakpoints setzen.</p>



<p>Obwohl der sogenannte &#8220;Extension Development Host&#8221; (das separate VS Code Fenster, in welchem die Extension während der Entwicklung läuft) viel zu bieten hat, konnte ich nicht die komplette Funktionalität meiner Extension darin testen. Das Icon Theme lässt sich innerhalb des Extension Hosts zum Beispiel nicht programmatisch für den Workspace setzen (innerhalb von <code>.vscode/settings.json</code>), weshalb ich die Extension mit dem &#8220;<code>vsce package</code>&#8221; Command zuerst builden und installieren musste, um den &#8220;Icon Theme Toggle&#8221; innerhalb der WebView zu testen.</p>



<h2 class="wp-block-heading">Conclusion</h2>



<p>Mit dem Projekt &#8220;Cute Cat&#8221; konnte ich einen intensiven Einblick in die Möglichkeiten und Herausforderungen von VS Code Extensions gewinnen. Besonders wertvoll war für mich dabei der explorative Charakter des Projekts: Ich konnte vieles ausprobieren und dadurch ein tiefes Verständnis für die Entwicklung von VS Code Extensions aufbauen.</p>



<p>Ich bin stolz auf das, was ich erreicht habe, und fühle mich nun bestens vorbereitet, das nächste Projekt anzugehen: die Entwicklung meiner eigenen VS Code Extension im Rahmen der Masterarbeit.</p>
<p>The post <a href="https://mobile.fhstp.ac.at/studium/studium-projekte/projekt-vs-code-extension/">Projekt | VS Code Extension</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Projekt &#124; Timelapse Android App</title>
		<link>https://mobile.fhstp.ac.at/studium/studium-projekte/projekt-timelapse-android-app/</link>
		
		<dc:creator><![CDATA[David Grünberger]]></dc:creator>
		<pubDate>Thu, 26 Feb 2026 10:19:46 +0000</pubDate>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Dokumentation]]></category>
		<category><![CDATA[Native Development]]></category>
		<category><![CDATA[Projekte]]></category>
		<category><![CDATA[Studium]]></category>
		<category><![CDATA[Trends]]></category>
		<category><![CDATA[User Experience]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[design systems]]></category>
		<category><![CDATA[Jetpack Compose]]></category>
		<category><![CDATA[Material Design]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[Semesterprojekt]]></category>
		<guid isPermaLink="false">https://mobile.fhstp.ac.at/?p=15691</guid>

					<description><![CDATA[<p>Im Rahmen des Semesterprojekts im 3. Semester der Masterklasse Mobile habe ich die Android-App &#8220;Timelapse&#8221; entwickelt. Die Idee dahinter: Aus vielen einzelnen Momentaufnahmen wird automatisch ein visueller Zeitstrahl – als Video, das langfristige Veränderungen sichtbar macht. Egal ob Bartwachstum, Fitness-Progress oder das Wachstum einer Zimmerpflanze: Timelapse hilft dabei, diese Reise festzuhalten. Ziel des Projekts war ein alltagstauglicher MVP, der den kompletten Ablauf abdeckt: vom Erstellen <a class="read-more" href="https://mobile.fhstp.ac.at/studium/studium-projekte/projekt-timelapse-android-app/">[...]</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/studium/studium-projekte/projekt-timelapse-android-app/">Projekt | Timelapse Android App</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Im Rahmen des Semesterprojekts im 3. Semester der Masterklasse Mobile habe ich die Android-App &#8220;Timelapse&#8221; entwickelt. Die Idee dahinter: Aus vielen einzelnen Momentaufnahmen wird automatisch ein visueller Zeitstrahl – als Video, das langfristige Veränderungen sichtbar macht. Egal ob Bartwachstum, Fitness-Progress oder das Wachstum einer Zimmerpflanze: Timelapse hilft dabei, diese Reise festzuhalten. Ziel des Projekts war ein alltagstauglicher MVP, der den kompletten Ablauf abdeckt: vom Erstellen eines Projekts über tägliche Erinnerungen und eine übersichtliche Tage-Ansicht bis hin zur fertigen Video-Montage, die sich teilen oder archivieren lässt.</p>



<h2 class="wp-block-heading">Worum es in der&nbsp;App geht</h2>



<p>Im Kern funktioniert Timelapse wie ein&nbsp;visuelles&nbsp;Tagebuch:</p>



<ul class="wp-block-list">
<li>Nutzer:innen legen Projekte an (z. B. „Daily Selfie“ oder „Zimmerpflanze“).</li>



<li>Die App erinnert regelmäßig daran, neue Fotos aufzunehmen.</li>



<li>Alle Bilder werden zeitlich geordnet, mit Datum und optionalen Kommentaren gespeichert.</li>



<li>Auf einer kompakten Übersicht sieht man, wann man etwas aufgenommen hat, welche Tage besonders wichtig waren und wie sich das Projekt über Wochen und Monate entwickelt.</li>



<li>Aus dieser Sammlung erzeugt Timelapse auf Knopfdruck ein Zeitraffervideo, das die Geschichte des Projekts in wenigen Sekunden erzählt.</li>
</ul>



<h2 class="wp-block-heading">Zentrale&nbsp;Funktionen&nbsp;in&nbsp;Kürze</h2>



<ul class="wp-block-list">
<li><strong>Projektorganisation:</strong> Mehrere parallele Timelapse-Projekte mit Titel, Beschreibung und individuellen Einstellungen.</li>



<li><strong>Visuelle Timeline:</strong> Eine kombinierte Wochen- und Listenansicht zeigt, welche Tage schon dokumentiert sind und welche Lücken es noch gibt.</li>



<li><strong>Erinnerungen:</strong> Konfigurierbare Benachrichtigungen, damit die tägliche Aufnahme zur Routine wird und die Timeline nicht abreißt.</li>



<li>F<strong>avoriten &amp; Notizen:</strong> Einzelne Tage können hervorgehoben und mit kurzen Kommentaren versehen werden – etwa um Meilensteine oder besondere Momente zu markieren.</li>



<li><strong>Automatische Video-Montage:</strong> Die App erstellt aus den Bildern ein Video, berücksichtigt Ausrichtung, Datum, optionales Wasserzeichen und Kommentare und bietet Konfigurationsmöglichkeiten für Qualität oder Textstil.</li>
</ul>



<figure class="wp-block-gallery has-nested-images columns-4 wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1080" height="2400" data-id="15763" src="https://mobile.fhstp.ac.at/wp-content/uploads/2026/02/Screenshot_20260226_122653_Timelapse.jpg" alt="" class="wp-image-15763" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2026/02/Screenshot_20260226_122653_Timelapse.jpg 1080w, https://mobile.fhstp.ac.at/wp-content/uploads/2026/02/Screenshot_20260226_122653_Timelapse-691x1536.jpg 691w, https://mobile.fhstp.ac.at/wp-content/uploads/2026/02/Screenshot_20260226_122653_Timelapse-922x2048.jpg 922w" sizes="auto, (max-width: 1080px) 100vw, 1080px" /></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1080" height="2400" data-id="15765" src="https://mobile.fhstp.ac.at/wp-content/uploads/2026/02/Screenshot_20260226_122559_Timelapse.jpg" alt="" class="wp-image-15765" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2026/02/Screenshot_20260226_122559_Timelapse.jpg 1080w, https://mobile.fhstp.ac.at/wp-content/uploads/2026/02/Screenshot_20260226_122559_Timelapse-691x1536.jpg 691w, https://mobile.fhstp.ac.at/wp-content/uploads/2026/02/Screenshot_20260226_122559_Timelapse-922x2048.jpg 922w" sizes="auto, (max-width: 1080px) 100vw, 1080px" /></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1080" height="2400" data-id="15764" src="https://mobile.fhstp.ac.at/wp-content/uploads/2026/02/Screenshot_20260226_122619_Timelapse.jpg" alt="" class="wp-image-15764" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2026/02/Screenshot_20260226_122619_Timelapse.jpg 1080w, https://mobile.fhstp.ac.at/wp-content/uploads/2026/02/Screenshot_20260226_122619_Timelapse-691x1536.jpg 691w, https://mobile.fhstp.ac.at/wp-content/uploads/2026/02/Screenshot_20260226_122619_Timelapse-922x2048.jpg 922w" sizes="auto, (max-width: 1080px) 100vw, 1080px" /></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1080" height="2400" data-id="15766" src="https://mobile.fhstp.ac.at/wp-content/uploads/2026/02/Screenshot_20260226_122700_Timelapse.jpg" alt="" class="wp-image-15766" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2026/02/Screenshot_20260226_122700_Timelapse.jpg 1080w, https://mobile.fhstp.ac.at/wp-content/uploads/2026/02/Screenshot_20260226_122700_Timelapse-691x1536.jpg 691w, https://mobile.fhstp.ac.at/wp-content/uploads/2026/02/Screenshot_20260226_122700_Timelapse-922x2048.jpg 922w" sizes="auto, (max-width: 1080px) 100vw, 1080px" /></figure>
<figcaption class="blocks-gallery-caption wp-element-caption"><strong>Abb. 1: App Screenshots</strong></figcaption></figure>



<h2 class="wp-block-heading">Technologie-Stack</h2>



<p>Die&nbsp;App ist&nbsp;als&nbsp;native&nbsp;Android-Anwendung mit Jetpack Compose&nbsp;umgesetzt und&nbsp;nutzt&nbsp;moderne&nbsp;Android-APIs sowie eine&nbsp;klare&nbsp;Schichtung&nbsp;zwischen&nbsp;UI, Logik&nbsp;und Medienverarbeitung.</p>



<ul class="wp-block-list">
<li><strong>UI: Jetpack Compose + Material 3</strong>
<ul class="wp-block-list">
<li>Alle Screens (Projektliste, Details, Dialoge, Konfiguration) sind vollständig in Compose realisiert.</li>



<li>Material-3-Komponenten wie LargeFlexibleTopAppBar, Listen, Cards und Dialoge sorgen für ein konsistentes Look &amp; Feel.</li>



<li>Ein zentrales TimelapseTheme verwaltet App-Theme (Light/Dark), Seed-Farbe und den Palette-Stil.</li>
</ul>
</li>



<li><strong>Material 3 Expressive &amp; Material You</strong>
<ul class="wp-block-list">
<li>Die App nutzt Material 3 Expressive, um eine lebendige, charakterstarke Farb- und Typografie-Sprache umzusetzen – passend zu einer App, die persönliche Veränderungen dokumentiert.</li>



<li>Über einen integrierten Color Picker wählen Nutzer:innen eine eigene Akzentfarbe.</li>



<li>Aus dieser Seed-Farbe wird mit Material You ein komplettes Farbschema generiert, das sich konsistent über die gesamte App zieht.</li>



<li>Dadurch wirkt Timelapse auf jedem Gerät persönlich, bleibt aber immer klar strukturiert und gut lesbar – unabhängig davon, ob Light- oder Dark-Mode aktiv ist.</li>
</ul>
</li>



<li><strong>Video-Montage &amp; Bildverarbeitung</strong>
<ul class="wp-block-list">
<li>Die Montage-Logik läuft in einem eigenen Modul:</li>



<li>Bilder werden anhand ihrer EXIF-Daten korrekt ausgerichtet.</li>



<li>Ein Canvas setzt die Frames zusammen, ergänzt Texte (Datum, Kommentare, Wasserzeichen) und kümmert sich um Hintergrundfarbe und Zensurflächen.</li>



<li>Ein Muxer erzeugt daraus ein MP4-Video, gesteuert über Kotlin Flows, die den Fortschritt an die UI melden.</li>



<li>So entsteht aus einer losen Sammlung von Bildern ein stimmiges Timelapse-Video, ohne dass externe Tools nötig sind.</li>
</ul>
</li>
</ul>



<h2 class="wp-block-heading">Material&nbsp;3 Expressive&nbsp;&amp; Material You im&nbsp;Einsatz</h2>



<p>Ein großer&nbsp;Fokus&nbsp;des&nbsp;Projekts lag&nbsp;auf einer&nbsp;modernen, adaptiven&nbsp;UI, die sich&nbsp;nach&nbsp;den&nbsp;Nutzer:innen richtet:</p>



<ul class="wp-block-list">
<li><strong>Dynamische Farbwelten</strong>
<ul class="wp-block-list">
<li>Durch den Seed-Color-Ansatz wirkt die App nicht wie ein statisch durchgestyltes Produkt, sondern wie ein Rahmen, der sich der jeweiligen Geschichte anpasst.</li>



<li>Projekte mit emotionalem Kontext (z. B. Schwangerschaft, Beziehungen, erste Wohnung) profitieren von den kräftigen, expressiven Paletten, die Material 3 bereitstellt.</li>
</ul>
</li>



<li><strong>Einheitliche, weiche Formsprache</strong>
<ul class="wp-block-list">
<li>Großzügige Rundungen (z. B. extra große Card-Shapes in Dialogen), expressive Typografie und bewusst eingesetzte Icons unterstützen den Tagebuch-Charakter der App.</li>



<li>Die App verzichtet auf überladene UI-Elemente und setzt auf Ruhe, Klarheit und Fokus – wichtig, wenn man sich über Monate immer wieder mit derselben Oberfläche beschäftigt.</li>
</ul>
</li>



<li><strong>Konsistentes Theming</strong>
<ul class="wp-block-list">
<li>Alle Bausteine – von Erfassungsdialogs über Erinnerungs-Settings bis hin zu Fortschrittsanzeigen bei Scans und Montage – hängen am gleichen Theme.</li>



<li>Änderungen an Theme, Palette oder Seed-Farbe greifen sofort durch, ohne dass einzelne Screens speziell angepasst werden müssen.</li>
</ul>
</li>
</ul>



<h2 class="wp-block-heading">Herausforderungen&nbsp;&amp; Learnings</h2>



<ul class="wp-block-list">
<li><strong>Balance zwischen Einfachheit und Kontrolle</strong>
<ul class="wp-block-list">
<li>Nutzer:innen sollen einerseits „einfach nur“ ein Timelapse-Video erstellen können, andererseits genug Einstellmöglichkeiten für Qualität, Text, Stabilisierung und Privatsphäre haben.</li>



<li>Ein wichtiger Lernpunkt war, die Komplexität hinter klaren Dialogen und wenigen, gut erklärten Optionen zu verstecken.</li>
</ul>
</li>



<li><strong>Stabile, angenehme Timelapse-Videos</strong>
<ul class="wp-block-list">
<li>Kleine Fehler bei Skalierung oder Matrix-Transformation führen schnell zu Sprüngen oder abgeschnittenen Bereichen – hier war viel Feintuning nötig.</li>
</ul>
</li>



<li><strong>Durchgängiges Theming mit Material 3 / Material You</strong>
<ul class="wp-block-list">
<li>Seed-Farben, dynamische Paletten und unterschiedliche Palettenstile (z. B. Expressive) lassen sich mächtig kombinieren – aber nur, wenn das Theming-Konzept von Anfang an klar definiert ist.</li>



<li>Die wichtigste Erkenntnis: Ein zentrales Theme-Objekt vereinfacht langfristig alle Entscheidungen rund um Farben, Typografie und Component-Styling.</li>
</ul>
</li>
</ul>



<h2 class="wp-block-heading">Fazit</h2>



<p>Timelapse war für mich ein Projekt, in dem sich User Experience, modernes Android-Design und Medienverarbeitung sehr gut ergänzt haben. Die App zeigt, wie sich mit Jetpack Compose, Material 3 Expressive und Material You eine Oberfläche bauen lässt, die technisch anspruchsvolle Abläufe (zB. Videomontage) hinter einem einfachen, persönlichen Nutzungserlebnis versteckt. Besonders spannend war zu sehen, wie stark sich die Wahrnehmung der App ändert, wenn man eine eigene Farbwelt definieren kann und diese sich konsequent durch alle Screens zieht. In zukünftigen Schritten möchte ich die App um Themen wie Musik, Export-Presets und umfangreichere Sharing-Optionen erweitern – immer mit dem Ziel, den Kern beizubehalten: Veränderung sichtbar machen, ohne dass sich der Aufwand danach anfühlt.</p>
<p>The post <a href="https://mobile.fhstp.ac.at/studium/studium-projekte/projekt-timelapse-android-app/">Projekt | Timelapse Android App</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Projekt &#124; MusicGuesser</title>
		<link>https://mobile.fhstp.ac.at/allgemein/projekt-musicguesser/</link>
		
		<dc:creator><![CDATA[Sebastian Zettl]]></dc:creator>
		<pubDate>Thu, 26 Feb 2026 08:51:28 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<guid isPermaLink="false">https://mobile.fhstp.ac.at/?p=15677</guid>

					<description><![CDATA[<p>Im dritten Semester ist es uns frei in der Mobile Masterklasse überlassen, wie wir neben dem Semesterprojekt auf unsere Punkte kommen wollen. Um auf die Punkte zu kommen, habe ich in diesem Semester, ein eigenes Kotlin Projekt gemacht. Diese ist ein MusicGuesser. Man kann aus lokalen MP3s Quizzen erstellen und dann in einem Quiz den <a class="read-more" href="https://mobile.fhstp.ac.at/allgemein/projekt-musicguesser/">[...]</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/projekt-musicguesser/">Projekt | MusicGuesser</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Im dritten Semester ist es uns frei in der Mobile Masterklasse überlassen, wie wir neben dem Semesterprojekt auf unsere Punkte kommen wollen. Um auf die Punkte zu kommen, habe ich in diesem Semester, ein eigenes Kotlin Projekt gemacht. Diese ist ein MusicGuesser. Man kann aus lokalen MP3s Quizzen erstellen und dann in einem Quiz den Liedtitel aus einem kurzen Snippet des Liedes erraten</p>



<h2 class="wp-block-heading">Features</h2>



<h3 class="wp-block-heading">Quiz erstellen</h3>



<p>Beim Start der App kann man einen Order mit lokaler Musik aussuchen. Danach landet man am Hauptscreen. Mithilfe des FloatinACtionButtons kann man ein neues Quiz erstellen. Diesem kann man einen Namen geben und per ausgewählter Suchbegriffe die Liedtitel aussuchen und dem Quiz hinzufügen. Danach kann man das Quiz in der Liste sehen, mit Information wie dem Namen, der Anzahl der Lieder und welchen Rang man in welchem Modus hat.</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1080" height="2400" data-id="15678" src="https://mobile.fhstp.ac.at/wp-content/uploads/2026/02/Screenshot_20260128_080004_MusicGuesser.jpg" alt="" class="wp-image-15678" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2026/02/Screenshot_20260128_080004_MusicGuesser.jpg 1080w, https://mobile.fhstp.ac.at/wp-content/uploads/2026/02/Screenshot_20260128_080004_MusicGuesser-691x1536.jpg 691w, https://mobile.fhstp.ac.at/wp-content/uploads/2026/02/Screenshot_20260128_080004_MusicGuesser-922x2048.jpg 922w" sizes="auto, (max-width: 1080px) 100vw, 1080px" /></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1080" height="2400" data-id="15682" src="https://mobile.fhstp.ac.at/wp-content/uploads/2026/02/Screenshot_20260208_123540_MusicGuesser.jpg" alt="" class="wp-image-15682" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2026/02/Screenshot_20260208_123540_MusicGuesser.jpg 1080w, https://mobile.fhstp.ac.at/wp-content/uploads/2026/02/Screenshot_20260208_123540_MusicGuesser-691x1536.jpg 691w, https://mobile.fhstp.ac.at/wp-content/uploads/2026/02/Screenshot_20260208_123540_MusicGuesser-922x2048.jpg 922w" sizes="auto, (max-width: 1080px) 100vw, 1080px" /></figure>
</figure>



<h3 class="wp-block-heading">Quiz starten</h3>



<p>Wenn man auf ein Quiz drückt, dann kommt man auf den Start Screen des Quiz. Dort kann man den Modus auswählen, Random und Progression, zusammen mit der Schwierigkeit. Der Mode entscheidet, wie man die Lieder navigieren kann. Auf Random, kann man zwischen jedem Lied hin und her springen. Bei Progression, muss man das derzeitige Lied erraten bevor man weitergehen kann. Die Schwierigkeit gibt an, wie lange der Ausschnitt des Liedes ist, und mit höherer Schwierigkeit wird der Ausschnitt kürzer.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1080" height="2400" src="https://mobile.fhstp.ac.at/wp-content/uploads/2026/02/Screenshot_20260128_080015_MusicGuesser.jpg" alt="" class="wp-image-15679" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2026/02/Screenshot_20260128_080015_MusicGuesser.jpg 1080w, https://mobile.fhstp.ac.at/wp-content/uploads/2026/02/Screenshot_20260128_080015_MusicGuesser-691x1536.jpg 691w, https://mobile.fhstp.ac.at/wp-content/uploads/2026/02/Screenshot_20260128_080015_MusicGuesser-922x2048.jpg 922w" sizes="auto, (max-width: 1080px) 100vw, 1080px" /></figure>



<h3 class="wp-block-heading">Quiz spielen</h3>



<p>Beim Spielen hat man oben einmal den Player, mithilfe wessen man den Ausschnitt abspielen kann. Darunter hat man die Navigation, köpfe fürs vorwärts und rückwärts springen und im Random Gamemode auch Dot Indikators, auf welchem Lied man sich befindet und mithilfe dessen man auch navigieren kann. Wenn man fertig mit einem Lied ist, kommt man auf den result screen. Dort bekommt man eine Medaille, wenn man alle Lieder richtig hatte. Wenn man das Lied auf einer höheren Schwierigkeit schafft, dann bekommt man auch eine bessere Medaille. Zuletzt hat man auch eine Ansicht, was man bei welchem Lied geraten hat und ob es richtig war.</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-3 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1080" height="2400" data-id="15680" src="https://mobile.fhstp.ac.at/wp-content/uploads/2026/02/Screenshot_20260128_080039_MusicGuesser.jpg" alt="" class="wp-image-15680" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2026/02/Screenshot_20260128_080039_MusicGuesser.jpg 1080w, https://mobile.fhstp.ac.at/wp-content/uploads/2026/02/Screenshot_20260128_080039_MusicGuesser-691x1536.jpg 691w, https://mobile.fhstp.ac.at/wp-content/uploads/2026/02/Screenshot_20260128_080039_MusicGuesser-922x2048.jpg 922w" sizes="auto, (max-width: 1080px) 100vw, 1080px" /></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1080" height="2400" data-id="15681" src="https://mobile.fhstp.ac.at/wp-content/uploads/2026/02/Screenshot_20260128_080105_MusicGuesser.jpg" alt="" class="wp-image-15681" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2026/02/Screenshot_20260128_080105_MusicGuesser.jpg 1080w, https://mobile.fhstp.ac.at/wp-content/uploads/2026/02/Screenshot_20260128_080105_MusicGuesser-691x1536.jpg 691w, https://mobile.fhstp.ac.at/wp-content/uploads/2026/02/Screenshot_20260128_080105_MusicGuesser-922x2048.jpg 922w" sizes="auto, (max-width: 1080px) 100vw, 1080px" /></figure>
</figure>



<h2 class="wp-block-heading">Technologien</h2>



<p>Die App wurde als eine native Android-App mithilfe von Kotlin entwickelt. Als UI Tool Kit wurde Jetpack compose verwendet. Manche der anderen verwendetetn Libnries wären:</p>



<ul class="wp-block-list">
<li>Room: Eine Persistenz Library, welche über einen Abstraktionen-Layer wie Entity und DAO Klassen mit einer SQLite Datenbank interagiert und managen.</li>



<li>Media3 ExoPlayer: Einer der Basis Mediaplayer auf Android und von Jetpack Compose. Erlaubt die Basisfunktionalitäten, wie abspielen, pausieren, etc.<br>Weiter kleiner Libraries welcher verwendet wurde, sind zum Beispiel Koin für die Dependency injection oder Compose Navigation.</li>
</ul>



<h2 class="wp-block-heading">Herausforderungen</h2>



<p>Die wahrscheinlich größte Herausforderung war die generelle Verwendung von Kotlin. Im zweiten Semester hatten wir zwar eine Einführung in Kotlin und auch für unser Semesterprojekt im dritten Semester haben wir Kotlin verwendeten. Aber eine ganze App alleine zu entwickeln war noch einmal etwas anderes und eine größere Herausforderung.</p>



<p>Eine andere Herausforderung war das Installieren der Libraries. Oft stand auf den Dokumentationsseiten nicht alle nötigen dependincies zum Installieren, oder sie waren über verschiedene Seiten aufgeteilt/stand etwas anderes. Auch standen sie oft noch in der alten Form auf den Seiten, wo die Versionen direkt im build gradle eingetragen wurde. Jetzt gibt es die neuere Version, die Version <code>libs.versions.otml</code> einzutragen und das dependency definieren im <code>build.gradle.kts</code> zu machen. Wenn man aber die generelle Struktur weiß, war dies ein geringeres Problem.</p>



<p>Ein anderes Problem war die Größe meiner Musik Bibliothek. Ich habe über 1000 lokale Lieder, welche die Optimierung des Durchsuchens wichtig gemacht hat. Nach etwas herumprobieren habe ich den MediaStore, welche automatisch einen Index aller Media Dateien am Handy besitzt, und der Zugriff und Abruf meiner Bibliothek in Sekunden vollziehen konnte</p>



<h2 class="wp-block-heading">Learnings und Nächste Schritte</h2>



<p>Ich habe einiges über die generelle Verwendung und Entwicklung mit Kotlin gelernt. Auch das von einer meiner Kollegen beigebrachte MVC Prinzips, anhand eines BaseViewModels mit Action, State und Effekt Klassen.</p>



<p>Es gibt einige Richtungen, wie dieses Projekt erweitert werden könnte, viele Ideen, welche von meinem Kollegen beim Herzeigen kamen. Zum Beispiel das Erstellen von Online quizzen, welche von anderen Personen gesehen werden könnten. Auch neue Spielmodi, wie das Hören von Song in reverse oder einen endlosen Modus kamen.</p>



<p>Images from me and banner image from: https://pixabay.com/vectors/vinyl-platinum-disk-music-dj-2241789/</p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/projekt-musicguesser/">Projekt | MusicGuesser</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Blogeintrag &#124; Proxmox</title>
		<link>https://mobile.fhstp.ac.at/allgemein/blogeintrag-proxmox/</link>
		
		<dc:creator><![CDATA[Sebastian Zettl]]></dc:creator>
		<pubDate>Thu, 26 Feb 2026 08:42:08 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<guid isPermaLink="false">https://mobile.fhstp.ac.at/?p=15674</guid>

					<description><![CDATA[<p>Virtualisierung spielt in der modernen IT eine zentrale Rolle, sei es im Rechenzentrum, in Unternehmen oder im Homelab. Sie ermöglicht es, Hardware effizient zu nutzen, Systeme voneinander zu trennen und flexibel auf neue Anforderungen zu reagieren. Vor allem für Leute mit einem HomeLab ermöglicht sie es diesen, eigene Services leicht zu erstellen und managenProxmox VE <a class="read-more" href="https://mobile.fhstp.ac.at/allgemein/blogeintrag-proxmox/">[...]</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/blogeintrag-proxmox/">Blogeintrag | Proxmox</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Virtualisierung spielt in der modernen IT eine zentrale Rolle, sei es im Rechenzentrum, in Unternehmen oder im Homelab. Sie ermöglicht es, Hardware effizient zu nutzen, Systeme voneinander zu trennen und flexibel auf neue Anforderungen zu reagieren. Vor allem für Leute mit einem HomeLab ermöglicht sie es diesen, eigene Services leicht zu erstellen und managen<br>Proxmox VE (Virtual Environemnt) (<a href="https://www.proxmox.com">https://www.proxmox.com</a>) ist eine Open-Source-Plattform für Virtualisierung und Containerisierung, die genau für diese Anforderungen entwickelt wurde. In diesem Blogartikel gebe ich einen Überblick über Proxmox: Was es ist, wie es funktioniert, wo es eingesetzt wird und welche Vor- und Nachteile es mit sich bringt.</p>



<h2 class="wp-block-heading">Was ist Proxmox?</h2>



<p>Proxmox VE ist eine auf Linux basierende Open Source-Virtualisierungsplattform für Server. Mitfile von ihr kann man mehrere VMs (Virtuelle Maschinen) und Containern auf einem oder mehreren physikalischen Servern betreiben und verwalten. Im Gegenteil zu reinen Cloud Diensten, kombiniert Proxmox VE mehrerer Technologien in einer Oberfläche, für Unternehmen wie auch Privatnutzer:innen. Proxmox setzt komplett auf seinen Open Source Ansatz, wodurch es komplett ohne Lizenzkosten verwendet werden kann, obwohl es ein Abonnement für Enterprise Support gibt.</p>



<h2 class="wp-block-heading">Wie funktioniert Proxmox?</h2>



<p>Proxmox basiert auf Debian Linux und nutzt bewährte Open-Source-Technologien zur Virtualisierung und Verwaltung. Die komplette Administration erfolgt über ein webbasiertes Interface, das sowohl lokal als auch remote erreichbar ist.</p>



<h3 class="wp-block-heading">Technische Basis</h3>



<ul class="wp-block-list">
<li>Betriebssystem: Debian Linux</li>



<li>Hypervisor: KVM (Kernel-based Virtual Machine)</li>



<li>Container-Technologie: LXC (Linux Containers)</li>



<li>Webinterface: Verwaltung über Browser</li>



<li>Storage: Lokale Disks, ZFS, NFS, iSCSI, Ceph, etc.</li>
</ul>



<h3 class="wp-block-heading">Zentrale Konzepte</h3>



<p>Proxmox gliedert sich in mehrere Kernbereiche:</p>



<h4 class="wp-block-heading">Virtuelle Maschinen (VMs)</h4>



<p>Virtuelle Maschinen emulieren vollständige Computer inklusive eigener Hardware. Jede VM kann ein eigenes Betriebssystem wie Linux oder Windows ausführen. Diese können dann einzeln und nach Belieben verwaltet werden.<br>Diese eignen sich besonders für:</p>



<ul class="wp-block-list">
<li>isolierte Serverdienste</li>



<li>Betriebssysteme mit eigenen Kernel-Anforderungen</li>



<li>komplexere Anwendungen</li>
</ul>



<h4 class="wp-block-heading">Container (LXC)</h4>



<p>Container sind leichtgewichtiger als VMs, da sie sich den Linux-Kernel des Hosts teilen. Sie starten schneller und benötigen weniger Ressourcen. LXC sind nicht Docker-Container, sondern System-Container, die ein vollständiges Linux-Userspace bereitstellen und sich daher anders verwalten und einsetzen lassen.<br>Typische Einsatzgebiete sind:</p>



<ul class="wp-block-list">
<li>Webserver</li>



<li>Microservices</li>



<li>Entwicklungs- und Testumgebungen</li>
</ul>



<h4 class="wp-block-heading">Nodes und Cluster</h4>



<p>Ein Node ist ein einzelner Proxmox-Server. Mehrere Nodes können zu einem Cluster verbunden werden, um:</p>



<ul class="wp-block-list">
<li>Hochverfügbarkeit zu ermöglichen</li>



<li>VMs zwischen Servern zu verschieben (Live-Migration)</li>



<li>Ressourcen zentral zu verwalten</li>
</ul>



<h4 class="wp-block-heading">Storage-Management</h4>



<p>Proxmox unterstützt zahlreiche Speicherlösungen. Besonders beliebt ist ZFS, da es Snapshots, Replikation und hohe Datensicherheit bietet.<br>Backups können automatisiert erstellt und auf externe Speicher abgelegt werden.</p>



<h2 class="wp-block-heading">Typischer Funktionszyklus</h2>



<p>Ein typischer Arbeitsablauf mit Proxmox sieht folgendermaßen aus:</p>



<ol class="wp-block-list">
<li>Installation: Proxmox wird direkt auf der Hardware installiert. Dies kann entweder direkt, wie ein eigenes Betriebssystem installiert werden, oder es kann auf einem bestehen Linux Rechnern installiert werden.</li>



<li>Node konfigurieren: Man konfiguriert den Proxmox Node. Sachen wie Netzwerk, Speicher und Benutzer können festlegt und verwaltet werden.</li>



<li>VMs oder Container erstellen: Wenn man zufrieden mit der Konfiguration des Proxmox Nodes ist, dann kann man anfangen, VMs und Container aufzusetzen. Dies verhält sich ganz normal, mit der Auswahl eines Betriebssystems und dem Zuweisen von Ressourcen.</li>



<li>Dienste betreiben: Auf diesen VMs und Container kann man dann die Services, Datenbanken und oder Anwendungen aufsetzen. Diese kann man wie ganz normale VMs verwenden.</li>



<li>Snapshots &amp; Backups: Danach sollte man auch regelmäßige Sicherungen und Wiederherstellungspunkte einstellen, wie man es auf einem normalen Server macht.</li>



<li>Wartung &amp; Monitoring: Zuletzt sollte man Monitoring aufzusetzen, für das Überwachen vom Ressourcenverbrauch wie auch Wartungswerkzeuge wie Logs und Updates.</li>
</ol>



<p>Durch das Webinterface lassen sich diese Schritte ohne zusätzliche Tools durchführen.</p>



<h2 class="wp-block-heading">Vorteile und Nachteile</h2>



<h3 class="wp-block-heading">Vorteile</h3>



<p>Proxmox VE ist komplett Open Source und kann ohne Lizenzkosten genutzt werden. Die Verwaltung läuft über ein übersichtliches Webinterface, sodass man viele Aufgaben ohne zusätzliche Tools erledigen kann. Praktisch ist außerdem die Kombination aus klassischen VMs (KVM) und Containern (LXC) in einer Oberfläche, weil man je nach Use-Case flexibel entscheiden kann. Für den Betrieb sind die Snapshot-, Backup- und Restore-Funktionen sehr hilfreich, da man damit schnell sichern und im Notfall auch unkompliziert wiederherstellen kann. Wenn man mehrere Server hat, lassen sich diese zu einem Cluster verbinden, wodurch Funktionen wie zentrale Verwaltung, Live-Migration und Hochverfügbarkeit möglich werden. Zusätzlich profitiert man von einer großen Community und guter Dokumentation, wodurch man für die meisten Themen schnell Lösungen und Beispiele findet.</p>



<h3 class="wp-block-heading">Nachteile</h3>



<p>Für komplette Anfänger:innen kann Proxmox am Anfang etwas überwältigend sein, da viele Optionen und Begriffe aus dem Server- und Virtualisierungsbereich kommen. Grundlegende Linux- und Netzwerkkenntnisse sind in der Praxis fast immer nötig, spätestens wenn es um Storage, VLANs, Firewall oder Rechteverwaltung geht. Außerdem ist Proxmox kein klassischer Cloud-Service, weil man in der Regel eigene Hardware betreibt und sich damit auch selbst um Dinge wie Updates, Backups und Ausfallsicherheit kümmern muss. Wer ausschließlich die Enterprise-Repositories mit entsprechend getesteten Updates nutzen möchte, braucht dafür ein kostenpflichtiges Support-Abo, auch wenn die Community-Repositories grundsätzlich frei verfügbar sind.</p>



<h2 class="wp-block-heading">Links</h2>



<ul class="wp-block-list">
<li>Offizielle Proxmox Seite: https://www.proxmox.com/en/</li>



<li>Linux Containers: https://linuxcontainers.org/lxc/introduction/</li>



<li>Red Hat &#8211; Linux Containers: https://www.redhat.com/en/topics/containers/whats-a-linux-container</li>



<li>What is Proxmox: https://www.hornetsecurity.com/en/blog/proxmox/</li>



<li>Banner image from: https://dashboardicons.com/icons/proxmox</li>
</ul>



<p></p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/blogeintrag-proxmox/">Blogeintrag | Proxmox</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
