{"id":22650,"date":"2025-04-13T07:02:57","date_gmt":"2025-04-13T05:02:57","guid":{"rendered":"http:\/\/blog.wenzlaff.de\/?p=22650"},"modified":"2025-04-12T15:39:57","modified_gmt":"2025-04-12T13:39:57","slug":"java-programm-mit-ki-in-1-stunde-erzeugen","status":"publish","type":"post","link":"http:\/\/blog.wenzlaff.de\/?p=22650","title":{"rendered":"Java Programm mit KI in 1 Stunde erzeugen"},"content":{"rendered":"<p>Das <strong>Grok-2-Model<\/strong>l das im August 2024 ver\u00f6ffentlicht wurde, bietet eine Reihe von Verbesserungen und Funktionen, unter anderem ist das Kontextfenster von 131072 Tokens m\u00f6glich. Also mal in Perplexity das Grok-2-Modell f\u00fcr ein Java Programm-Generierung verwenden. Hier mal das Endergebnis vorweg:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/04\/final-7.jpeg\" alt=\"\" width=\"640\" height=\"248\" class=\"aligncenter size-full wp-image-22659\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/04\/final-7.jpeg 640w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/04\/final-7-300x116.jpeg 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/p>\n<p>Ich hatte die Idee, mal f\u00fcr jeden Tag, bis zur Rente einen Eintrag in meinen Kalender mit Counter eintragen zu lassen. Also z.B, in der Form &#8222;Noch 33 Tage bis zur Rente&#8220;. Rausgekommen ist dann ein universelles Programm, das auch f\u00fcr alle anderen Ereignisse verwendet werden kann, also z.B. noch &#8222;55 Tage bis zum Urlaub&#8220; usw. <\/p>\n<p>Ganz zum Schluss, gibt es auch das Programm zum <strong>kostenlosen<\/strong> Download.<\/p>\n<p>Hier mal alle Schritte bzw. Promps die an die KI gingen. <!--more--><\/p>\n<p><strong>Vorraussetzung<\/strong> sind ein Gitlab Account, Eclipse IDE, Maven, Java 21 und Perplexity mit Grok-2-Modell<\/p>\n<p>Die Schritte sind jeweils im <a href=\"https:\/\/gitlab.com\/IT-Berater\/twrente\/-\/commits\/main?ref_type=heads\" target=\"_blank\">GitLab Repo<\/a> als Tags bzw. Commit zu sehen.<\/p>\n<p>Also:<br \/>\n-Ein Projekt in Gitlab anlegen: https:\/\/gitlab.com\/IT-Berater\/twrente<br \/>\n-Eclipse starten<br \/>\n-Projekt clonen und importieren git clone https:\/\/gitlab.com\/IT-Berater\/twrente<br \/>\n-als Maven Projekt setzen<br \/>\n-Java Version 21 setzen<\/p>\n<p>Nun zur 1. KI Anfrage mit Prompt in Perplexity:<\/p>\n<pre class=\"theme:mm-dark-blue lang:default decode:true \" >\r\n\r\nErstelle ein Java 21 Programm das \u00fcber eine Swing GUI ein Ziel Datum abfragt. \r\nDas Datum soll in der Zukunft liegen. \r\nVon diesem Datum aus soll f\u00fcr jeden Tag r\u00fcckw\u00e4rts ein Kalender \r\nEintrag pro Tag erstellt werden bis zu aktuellen Tag. \r\nEs soll jeweils ein Eintrag im iCalendar Format erstellt werden, \r\nund alle Termine bis zum heutigen\/aktuellen Tag in einer \r\nDatei im *.ics Format gespeichert werden.\r\n\r\n<\/pre>\n<p>Antwort von der KI ua.:<br \/>\nFunktionsweise<br \/>\n\t1.\tSwing-GUI:<br \/>\n\t\u2022\tDie GUI enth\u00e4lt ein Textfeld f\u00fcr die Eingabe des Zieldatums und einen Button zum Generieren der Kalenderdatei.<br \/>\n\t\u2022\tDas eingegebene Datum wird \u00fcberpr\u00fcft, ob es in der Zukunft liegt.<br \/>\n\t2.\tICS-Datei-Erstellung:<br \/>\n\t\u2022\tDas Programm erstellt Kalender-Eintr\u00e4ge f\u00fcr jeden Tag r\u00fcckw\u00e4rts vom Zieldatum bis zum aktuellen Datum.<br \/>\n\t\u2022\tJeder Eintrag wird im iCalendar-Format (`VEVENT`) gespeichert.<br \/>\n\t3.\tSpeichern der Datei:<br \/>\n\t\u2022\tDie generierten Termine werden in einer Datei namens `calendar.ics` gespeichert.<\/p>\n<p>Dann habe ich das generierte Programm in ein Java Projekt importiert und gestartet. Version 1 nach Gitlab hochladen und Tag v0.0.1 gesetzt (25 Min hat das gedauert).<br \/>\nKurzer Test, Gui l\u00e4uft schon mal:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/04\/1-ergebnis.png\" alt=\"\" width=\"868\" height=\"454\" class=\"aligncenter size-full wp-image-22654\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/04\/1-ergebnis.png 868w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/04\/1-ergebnis-300x157.png 300w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/04\/1-ergebnis-768x402.png 768w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/p>\n<p>Die n\u00e4chsten 15 Min habe ich mit Anpassungen verwendet. Der 2. Prompt:<\/p>\n<pre class=\"theme:mm-dark-blue lang:default decode:true \" >\r\n\r\nErmittle die Gesamtzahl an Tage bis zum Zieldatum \r\nund passe jeden Kalendereintrag an mit der Anzahl Tage bis zum Ziel. \r\n\r\nDer Eintrag soll lauten: \u201e Noch ? Tage bis zur Rente\u201c\r\n\r\n<\/pre>\n<p>Antwort ua.:<br \/>\nUm die Gesamtzahl der Tage bis zum Zieldatum zu berechnen und jeden Kalendereintrag entsprechend anzupassen, k\u00f6nnen wir das Java-Programm wie folgt erweitern. Die Kalendereintr\u00e4ge enthalten nun den Text \u201cNoch ? Tage bis zur Rente\u201d, wobei `?` durch die verbleibende Anzahl an Tagen ersetzt wird.<\/p>\n<p>Der 3. Prompt: <\/p>\n<pre class=\"theme:mm-dark-blue lang:default decode:true \" >\r\n\r\nDer Conter soll r\u00fcckw\u00e4rts laufen\r\n\r\n<\/pre>\n<p>Antwort \u00c4nderungen und Funktionsweise<br \/>\n\t1.\tR\u00fcckw\u00e4rtslaufender Countdown:<br \/>\n\t\u2022\tDer Countdown startet mit der Gesamtanzahl der Tage (`totalDays`) zwischen dem heutigen Datum und dem Zieldatum.<br \/>\n\t\u2022\tF\u00fcr jeden Tag wird `daysRemaining` um 1 reduziert.<br \/>\n\t2.\tIterieren vom heutigen Datum:<br \/>\n\t\u2022\tDie Schleife beginnt beim aktuellen Datum (`today`) und l\u00e4uft vorw\u00e4rts bis zum Zieldatum (`targetDate`).<br \/>\n\t3.\tAnpassung des Kalendereintrags:<br \/>\n\t\u2022\tDer `SUMMARY`-Text lautet weiterhin: \u201cNoch ? Tage bis zur Rente\u201d.<br \/>\n\t\u2022\tDas `?` wird durch den aktuellen Wert von `daysRemaining` ersetzt.<\/p>\n<p>Also mit KI in 40 Minuten zum ersten Ergebnis wie gew\u00fcnscht. Jetzt noch etwas weitere Kosmetik.<\/p>\n<p>4. Prompt:<\/p>\n<pre class=\"theme:mm-dark-blue lang:default decode:true \" >\r\n\r\nMache noch folgende Anpassung das Eingabeformat soll lauten dd.MM.yyyy  \r\nund das \"Zieldatum ausw\u00e4hlen\" so ersetzt werden durch \"Datum des Renteneintritts\" \r\nund entferne in der UID die EMail Adresse und \r\nerg\u00e4nze noch einen Button der das Programm beendet.\r\n\r\n<\/pre>\n<p>Antwort ua.:<br \/>\n\t1.\tEingabeformat: Das Datum wird nun im Format `dd.MM.yyyy` eingegeben.<br \/>\n\t2.\tText\u00e4nderung: Der Titel des Fensters und die Beschriftung des Labels wurden zu \u201cDatum des Renteneintritts\u201d ge\u00e4ndert.<br \/>\n\t3.\tUID-Anpassung: Die UID enth\u00e4lt keine E-Mail-Adresse mehr, sondern nur das Datum.<br \/>\n\t4.\tBeenden-Button: Ein zus\u00e4tzlicher Button wurde hinzugef\u00fcgt, um das Programm zu beenden.<\/p>\n<p>Endergebnis:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/04\/3-ergebnis.jpeg\" alt=\"\" width=\"640\" height=\"543\" class=\"aligncenter size-full wp-image-22656\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/04\/3-ergebnis.jpeg 640w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/04\/3-ergebnis-300x255.jpeg 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/p>\n<p>5. Prompt:Test muss sein: <\/p>\n<pre class=\"theme:mm-dark-blue lang:default decode:true \" >\r\n\r\nErstelle eine Juni Testklasse f\u00fcr das Programm es ist so okay\r\n\r\n<\/pre>\n<p>6. Prompt: <\/p>\n<pre class=\"theme:mm-dark-blue lang:default decode:true \" >\r\n\r\nWie erg\u00e4nzt man die UID um einen Universally Unique Identifiers und der Domain @wenzlaff.info\r\n\r\n<\/pre>\n<p>Nach dem Test habe ich festgestellt, das es besser w\u00e4hre, ein ganzt\u00e4giges Kalenderereignis zu machen. Alo noch ein Fix nach Test: <\/p>\n<pre class=\"theme:mm-dark-blue lang:default decode:true \" >\r\n\r\n Und wie als ganzt\u00e4giges Ereignis?\r\n\r\n<\/pre>\n<p>Antwort von der KI ua.:<\/p>\n<p>Um die Termine als ganzt\u00e4gige Ereignisse im Kalender einzutragen, m\u00fcssen die Felder `DTSTART` und `DTEND` angepasst werden, sodass sie nur das Datum enthalten, ohne eine Uhrzeit. Im iCalendar-Format wird dies durch das Hinzuf\u00fcgen des Parameters `VALUE=DATE` erreicht. Ganzt\u00e4gige Ereignisse beginnen um Mitternacht und enden am Ende des Tages.<\/p>\n<p>So, die Stunde ist nun um, einige Kleinigkeiten wurde auch per Hand noch angepasst, wie rename der Klassen und JUnit Test bzw. Methode auf public gesetzt. Hier das Ergebnis:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/04\/4-prompt.jpeg\" alt=\"\" width=\"640\" height=\"553\" class=\"aligncenter size-full wp-image-22657\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/04\/4-prompt.jpeg 640w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/04\/4-prompt-300x259.jpeg 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/p>\n<p>Dann noch ein Diagramm generieren lassen:<\/p>\n<figure id=\"attachment_22658\" aria-describedby=\"caption-attachment-22658\" style=\"width: 432px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/04\/ablauf-twrente.jpeg\" alt=\"\" width=\"432\" height=\"640\" class=\"size-full wp-image-22658\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/04\/ablauf-twrente.jpeg 432w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/04\/ablauf-twrente-203x300.jpeg 203w\" sizes=\"auto, (max-width: 432px) 100vw, 432px\" \/><figcaption id=\"caption-attachment-22658\" class=\"wp-caption-text\">ablauf<\/figcaption><\/figure>\n<p>Nun hatte ich noch die Idee, alles zu generalisiere, so das man das Programm nicht nur f\u00fcr die Rente verwenden kann.<\/p>\n<p>7. Prompt:<\/p>\n<pre class=\"theme:mm-dark-blue lang:default decode:true \" >\r\n\r\nPasse das Programm so an, dass noch ein weiteres Eingabefeld f\u00fcr das Summary erstellt wird. \r\nDefault soll \"# Tage bis zur Rente\" erscheinen. \r\nDer Text soll aber frei editierbar sein, so das man jeden String mit # als Counter eingeben kann.\r\n\r\n<\/pre>\n<p>Dann habe ich noch manuell etwas Refactoring gemacht, GUI von Logik getrennt, pom.xml angepasst und alles nach Maven-Central geladen. So sieht es nun aus:<\/p>\n<figure id=\"attachment_22659\" aria-describedby=\"caption-attachment-22659\" style=\"width: 640px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/04\/final-7.jpeg\" alt=\"\" width=\"640\" height=\"248\" class=\"size-full wp-image-22659\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/04\/final-7.jpeg 640w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/04\/final-7-300x116.jpeg 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><figcaption id=\"caption-attachment-22659\" class=\"wp-caption-text\">TWRente final 7<\/figcaption><\/figure>\n<p>Hier kann man das Programm laden <a href=\"https:\/\/gitlab.com\/IT-Berater\/twrente\/-\/tags\" target=\"_blank\">https:\/\/gitlab.com\/IT-Berater\/twrente\/-\/tags<\/a> links auf den Pfeil neben dem Papierkorb dann auf &#8222;Artefakt herunterladen&#8220;  das Zip auspacken und auf der Konsole starte mit:<\/p>\n<p><strong>java -jar de.wenzlaff.twrente-1.1.1-jar-with-dependencies.jar<\/strong><\/p>\n<p>und es startet das Programm. Das Ergebnis wird dann in der <strong>calendar.ics <\/strong>Datei zu finden sein. <\/p>\n<p>Vorhandene Dateien werden noch \u00fcberschrieben.<\/p>\n<p>Der Quellcode, kann wie geschrieben <a href=\"https:\/\/gitlab.com\/IT-Berater\/twrente\/-\/tree\/main\/src\/main\/java\/de\/wenzlaff\/twrente?ref_type=heads\" target=\"_blank\">hier<\/a> angeschaut werden.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Das Grok-2-Modell das im August 2024 ver\u00f6ffentlicht wurde, bietet eine Reihe von Verbesserungen und Funktionen, unter anderem ist das Kontextfenster von 131072 Tokens m\u00f6glich. Also mal in Perplexity das Grok-2-Modell f\u00fcr ein Java Programm-Generierung verwenden. Hier mal das Endergebnis vorweg: Ich hatte die Idee, mal f\u00fcr jeden Tag, bis zur Rente einen Eintrag in meinen &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/blog.wenzlaff.de\/?p=22650\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eJava Programm mit KI in 1 Stunde erzeugen\u201c <\/span>weiterlesen<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[220,4],"tags":[6179,6177,6178,3751,2178,6076,6077,6176,6175,341],"class_list":["post-22650","post","type-post","status-publish","format-standard","hentry","category-anleitung","category-eclipse","tag-calendar","tag-calender","tag-ereignis","tag-ical","tag-java","tag-ki","tag-perplexity","tag-rente","tag-twrente","tag-urlaub"],"_links":{"self":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/22650","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=22650"}],"version-history":[{"count":0,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/22650\/revisions"}],"wp:attachment":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=22650"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=22650"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=22650"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}