<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Flask on Phillip Kühne</title><link>https://phillipkuehne.de/tags/flask/</link><description>Recent content in Flask on Phillip Kühne</description><generator>Hugo</generator><language>de-DE</language><lastBuildDate>Tue, 01 Oct 2019 00:00:00 +0000</lastBuildDate><atom:link href="https://phillipkuehne.de/tags/flask/index.xml" rel="self" type="application/rss+xml"/><item><title>KaraoQueue (2019)</title><link>https://phillipkuehne.de/projekte/karaoqueue/</link><pubDate>Tue, 01 Oct 2019 00:00:00 +0000</pubDate><guid>https://phillipkuehne.de/projekte/karaoqueue/</guid><description>&lt;style&gt;&#10; div.splitbox {width:100%; overflow:auto;}&#10;&#10; div.splitbox div.column-left {&#10; width:48%;&#10; float:left;}&#10; div.splitbox div.column-right {&#10; width:48%;&#10; float:right;}&#10;&#10; @media only screen and (max-width: 600px) {&#10; div.splitbox div.column-left {&#10; width:100%;&#10; float:left;}&#10; div.splitbox div.column-right {&#10; width:100%;&#10; float:left;}&#10; }&#10; &lt;/style&gt;&lt;div class="splitbox"&gt;&lt;div class="column-left"&gt;&#10;&lt;p&gt;Ursprünglich kurz vor der COVID-19-Pandemie zur Vereinfachung der&#10;Veranstaltungen entwickelt, und dann im späteren Verlauf dieser als Teil von&#10;Maßnahmen eingeführt, die es uns ermöglichen sollten, Karaoke-Abende wieder&#10;durchzuführen und gleichzeitig den Kontakt zwischen Menschen zu minimieren. Das&#10;Tool wurde bis 2025 vom &lt;a href="https://stuk-leipzig.de/" class="external-link" target="_blank" rel="noopener"&gt;Studentenklub StuK Leipzig&lt;/a&gt;&#10;verwendet, für den ich es geschrieben habe, während ich dort aktiv involviert&#10;war.&lt;/p&gt;&#10;&lt;p&gt;Die Gäste können den Liederkatalog durchstöbern (mit Vorschlägen für Lieder, die&#10;bei den vorherigen Veranstaltungen häufig gesungen wurden), die Metadaten der&#10;Lieder einsehen und sich für ihren Auftritt am Mikro eintragen. Der Moderator&#10;des Abends kann die Warteschlange einsehen und Einträge entweder annehmen oder&#10;ablehnen. Wenn ein Eintrag akzeptiert wird, wird er (anonym) zu einer&#10;Aufzeichnung der gespielten Songs der Veranstaltung sowie zu den Statistiken&#10;hinzugefügt, aus denen sich die Vorschläge ableiten.&lt;/p&gt;&#10;&lt;p&gt;Das Projekt ist in Python geschrieben und nutzt das Flask-Framework. Die&#10;Architektur ist als ältestes meiner überlebenden Projekte sehr simpel; zum&#10;Beispiel besteht das Frontend komplett aus handgeschriebenen Jinja-Templates,&#10;wobei alles (einschließlich handgeschriebenem JavaScript) inline enthalten ist.&#10;Als UI-Framework wird Bootstrap per statischer CSS/JS-Einbindung genutzt.&lt;/p&gt;&#10;&lt;p&gt;Auf der Backend-Seite wird eine MariaDB für die Datenspeicherung verwendet, und&#10;es können derzeit Katalog-CSV-Dateien im Format von&#10;&lt;a href="https://www.karafun.de/karaoke-song-list.html" class="external-link" target="_blank" rel="noopener"&gt;Recisios KaraFun&lt;/a&gt; eingelesen werden.&#10;Wiedergabestatistiken können exportiert und importiert werden, funktionieren&#10;aber nur mit dem entsprechenden Katalog.&lt;/p&gt;&#10;&#10;&#10;&lt;/div&gt;&lt;div class="column-right"&gt;&#10;&#10;&#10;&lt;div class="splitbox"&gt;&lt;div class="column-left"&gt;&#10;&lt;p&gt;&lt;figure class="project-figure"&gt;&#10; &lt;div class="project-figure-media"&gt;&#10; &lt;a href="https://phillipkuehne.de/images/projects/karaoqueue/queue.png"&#10; &#10; class="lightbox-image"&#10; &#10; &#10; data-description="Screenshot der Hauptseite"&#10; data-title="Screenshot der Hauptseite" title="Screenshot der Hauptseite"&#10; &#10; &gt;&#10; &lt;img&#10; src="https://phillipkuehne.de/images/projects/karaoqueue/queue.png"&#10; alt="Screenshot der Hauptseite"&#10; &#10; &#10; loading="lazy"&#10; decoding="async"&#10; /&gt;&#10; &#10; &lt;span class="project-zoom-badge" aria-hidden="true"&gt;&#10; &lt;i class="fa fa-expand"&gt;&lt;/i&gt;&#10; &lt;/span&gt;&#10; &#10; &lt;/a&gt;&#10; &lt;/div&gt;&lt;figcaption&gt;&lt;p&gt;Screenshot der Hauptseite&lt;/p&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;&#10;&lt;figure class="project-figure"&gt;&#10; &lt;div class="project-figure-media"&gt;&#10; &lt;a href="https://phillipkuehne.de/images/projects/karaoqueue/metadata.png"&#10; &#10; class="lightbox-image"&#10; &#10; &#10; data-description="Ansicht der Metadaten eines Songs"&#10; data-title="Ansicht der Metadaten eines Songs" title="Ansicht der Metadaten eines Songs"&#10; &#10; &gt;&#10; &lt;img&#10; src="https://phillipkuehne.de/images/projects/karaoqueue/metadata.png"&#10; alt="Ansicht der Metadaten eines Songs"&#10; &#10; &#10; loading="lazy"&#10; decoding="async"&#10; /&gt;&#10; &#10; &lt;span class="project-zoom-badge" aria-hidden="true"&gt;&#10; &lt;i class="fa fa-expand"&gt;&lt;/i&gt;&#10; &lt;/span&gt;&#10; &#10; &lt;/a&gt;&#10; &lt;/div&gt;&lt;figcaption&gt;&lt;p&gt;Ansicht der Metadaten eines Songs&lt;/p&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&#10;&#10;&lt;/div&gt;&lt;div class="column-right"&gt;&#10;&lt;p&gt;&lt;figure class="project-figure"&gt;&#10; &lt;div class="project-figure-media"&gt;&#10; &lt;a href="https://phillipkuehne.de/images/projects/karaoqueue/suggestions.png"&#10; &#10; class="lightbox-image"&#10; &#10; &#10; data-description="Suchansicht mit Vorschlägen"&#10; data-title="Suchansicht mit Vorschlägen" title="Suchansicht mit Vorschlägen"&#10; &#10; &gt;&#10; &lt;img&#10; src="https://phillipkuehne.de/images/projects/karaoqueue/suggestions.png"&#10; alt="Suchansicht mit Vorschlägen"&#10; &#10; &#10; loading="lazy"&#10; decoding="async"&#10; /&gt;&#10; &#10; &lt;span class="project-zoom-badge" aria-hidden="true"&gt;&#10; &lt;i class="fa fa-expand"&gt;&lt;/i&gt;&#10; &lt;/span&gt;&#10; &#10; &lt;/a&gt;&#10; &lt;/div&gt;&lt;figcaption&gt;&lt;p&gt;Suchansicht mit Vorschlägen&lt;/p&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;&#10;&lt;figure class="project-figure"&gt;&#10; &lt;div class="project-figure-media"&gt;&#10; &lt;a href="https://phillipkuehne.de/images/projects/karaoqueue/protocol.png"&#10; &#10; class="lightbox-image"&#10; &#10; &#10; data-description="Liste der gespielten Songs des aktuellen Events"&#10; data-title="Liste der gespielten Songs des aktuellen Events" title="Liste der gespielten Songs des aktuellen Events"&#10; &#10; &gt;&#10; &lt;img&#10; src="https://phillipkuehne.de/images/projects/karaoqueue/protocol.png"&#10; alt="Liste der gespielten Songs des aktuellen Events"&#10; &#10; &#10; loading="lazy"&#10; decoding="async"&#10; /&gt;&#10; &#10; &lt;span class="project-zoom-badge" aria-hidden="true"&gt;&#10; &lt;i class="fa fa-expand"&gt;&lt;/i&gt;&#10; &lt;/span&gt;&#10; &#10; &lt;/a&gt;&#10; &lt;/div&gt;&lt;figcaption&gt;&lt;p&gt;Liste der gespielten Songs des aktuellen Events&lt;/p&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;/p&gt;&#10;&#10;&#10;&lt;/div&gt;&lt;div style="clear:both"&gt;&lt;/div&gt;&lt;/div&gt;&#10;&#10;&#10;&lt;/div&gt;&lt;div style="clear:both"&gt;&lt;/div&gt;&lt;/div&gt;</description></item></channel></rss>