Zum Inhalt springen

Finux

Mitglieder
  • Gesamte Inhalte

    46
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von Finux

  1. Hallo, zunächst kleine Anmerkung: Ich bin Anfänger, mit Netzwerkkommunikation nicht gut vertraut und aktuell noch in der Ausbildung/Umschulung FiAe. Bitte werdet nicht ungemütlich... Ich bin sehr am verzweifeln. Meine aktuelle Aufgabe ist es Server- und Clientsockets in Python3 zu programmieren. Die Voraussetzung, die die aufgebaute Kommunikation erfüllen muss ist folgende: 1. Es sollen mehrere Clients zeitgleich von der server.py bedient werden können. 2. Es müssen Funktionsaufrufe von der client.py auf der server.py möglich gemacht werden 3. Die ganze Kommunikation muss via SSL verschlüsselt sein (hierzu habe ich bereits ein eigenes Zertifikat + Schlüssel von OpenSSL) Einzelne Pythonscripts mit den unterschiedlichen Funktionen habe ich bereits, und sie funktionieren wunderbar (also [1; threading], [2; xmlrpc-multicall], [3; SSL]). Ich schaffe es einfach nicht diese 3 Funktionalitäten übereinander in ein Script zu bekommen. Vielleicht gehe ich das aber auch falsch an, vielleicht ist mein Code nicht aufgeräumt, bzw. so unübersichtlich durch unterschiedliche Namensgebung etc., dass ich einfach nicht mehr durchblicke? Es ist eben leider zusammenkopiert, weil ich zunächst die Funktionalität der einzelnen funktionellen Ansprüche sicher stellen wollte. (Vielleicht ist die Herangehensweise aber schlecht, und man sollte sofort seinen "eigenen Code" also Namensgebung etc. daraus machen?). Mir fehlt vieles an Grundwissen, aber ich bin nicht bereit "aufzugeben"! ? Recherchen haben mir leider keinen Aufschluss gebracht, und ich weiß einfach nicht mehr weiter. Zunächst habe ich versucht das xmlrpc-skript mit dem ssl zu vereinen. Fakt ist: xmlrpc kann offiziell mit openssl genutzt werden. Aber wie ich diese 2 Funktionalitäten vereint bekomme- dazu finde ich nichts im Netz. Hier meine bisher noch hilfreichsten Quellen: Python docs zu xmlrpc (client) Python docs zu SSL Hintergrund ist, dass die Clientsockets von einer Homepage geöffnet werden. Hier sollen Funktionsaufrufe für den Nutzer möglich gemacht werden (daher meine Idee mit dem xmlrpc Multicall). Vielleicht sehe ich den Wald vor lauter Baum nicht mehr, aber ich weiß weder wo ich "anfangen" soll, noch ob ich überhaupt auf dem richtigen Weg bin und mich nicht gerade ins Jenseits schleppe. Vielleicht kann jemand helfen. Ich bin wirklich für jeden Tipp dankbar. Greez, Finux Was ich bisher zusammentragen oder programmieren konnte sind hier die Einzelscripts: [1; threading] #################################################################### ################# MULTITHREADING EINFACH SCK ################### ############# + --------- server.py --------- + ############## #################################################################### import socket import argparse import threading parser = argparse.ArgumentParser(description="This is the server for the multithreaded socket demo!") parser.add_argument('--host', metavar='host', type=str, nargs='?', default='xx.xxx.xx.xx') # host ip parser.add_argument('--port', metavar='port', type=int, nargs='?', default=xxxx) # port args = parser.parse_args() print("Running the server on: {} and port: {}".format(args.host, args.port)) sck = socket.socket() #TODO: IPv4 & IPv6 Erkennung sck.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) try: sck.bind((args.host, args.port)) sck.listen(5) except Exception as e: raise SystemExit("We could not bind the server on host: {} to port: {}, because: {}".format(args.host, args.port, e)) def on_new_client(client, connection): ip = connection[0] port = connection[1] print("Client: {} \n Connection: {}".format(client, connection)) print("The new connection was made from IP: {}, and port: {}!".format(ip, port)) while True: msg = client.recv(1024) if msg.decode() == 'exit': break print("The client said: {}".format(msg.decode())) reply = "You told me: {}".format(msg.decode()) client.sendall(reply.encode('utf-8')) #TODO: .send oder .sendall? (Kontrollmöglichkeit der gesendeten Daten) print("The client from ip: {}, and port: {}, has gracefully diconnected!".format(ip, port)) client.close() while True: try: client, ip = sck.accept() threading._start_new_thread(on_new_client, (client, ip)) except KeyboardInterrupt: print("Gracefully shutting down the server!") except Exception as e: print("Well I did not anticipate this: {}".format(e)) sck.close() # ========================================================================== # # ============================ B R E A K =================================== # # ========================================================================== # #################################################################### #################### MULTITHREADING EINFACH SCK #################### ############### + --------- client.py --------- + ################ #################################################################### import socket import argparse parser = argparse.ArgumentParser(description="This is the client for the multi threaded socket server!") parser.add_argument('--host', metavar='host', type=str, nargs='?', default='xx.xxx.x.xxx') # host ip parser.add_argument('--port', metavar='port', type=int, nargs='?', default=xxxx) # port args = parser.parse_args() with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sck: try: print("TRYING to connect to server: {} on port: {}".format(args.host, args.port)) sck.connect((args.host, args.port)) print("Connected to server: {} on port: {}".format(args.host, args.port)) except Exception as e: raise SystemExit("We have failed to connect to host: {} on port: {}, because: {}".format(args.host, args.port, e)) while True: msg = input("What do we want to send to the server?: ") sck.sendall(msg.encode('utf-8')) if msg == 'exit': print("Client is saying goodbye!") break data = sck.recv(1024) print("The server's response was: {}".format(data.decode())) [2; xmlrpc-multicall] #=============================# #=========== CSK Funktionsaufrufe mehrfach ===========# #=============== server.py =================# #===================# from xmlrpc.server import SimpleXMLRPCServer as Server def fak(n): """ Berechnet die Fakultaet der ganzen Zahl n. """ erg = 1 for i in range(2, n+1): erg *= i print(erg) return erg def quad(n): """ Berechnet das Quadrat der Zahl n. """ print(n*n) return n*n def name(): """ Standort: Nirgendwo """ standort = "Irgendwo im Nirgendwo" return standort srv = Server(("xx.xxx.x.xxx", xxxx)) # ip, port srv.register_function(fak) srv.register_function(quad) srv.register_function(name) srv.register_multicall_functions() # ermöglicht mehrfach Funktionsaufruf, Funktionen müssen mit .register_function(funktionsname) registriert sein # srv.register_introspection_functions() # SICHERHEITSLÜCKE! ermöglicht .listMethods, .methodHelp, .methodSignature srv.serve_forever() # ========================================================================== # # ============================ B R E A K =================================== # # ========================================================================== # #=============================# #=========== CSK Funktionsaufrufe mehrfach ===========# #=============== client.py =================# #===================# from xmlrpc.client import ServerProxy, MultiCall cli = ServerProxy("http://xx.xxx.x.xxx:xxxx") # ip, port als ein string! mc = MultiCall(cli) # mc.system.listMethods() # SICHERHEITSLÜCKE! listet alle Funktionen auf # mc.system.methodHelp('name') # SICHERHEITSLÜCKE! gibt Doc-string der jew.Funktion zurück # mc.system.methodSignature('fak') # SICHERHEITSLÜCKE! listet alle Schnittstellen der Funktion auf for i in range(10): mc.fak(i) mc.quad(i) mc.name() for ergebnis in mc(): print(ergebnis) [3; SSL] # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # # ~~~~~~~~~~~~~~~~~ SSL Verschlüsselung ~~~~~~~~~~~~~~~ # # ~~~~~~~~~~~~~~~~~~ server.py ~~~~~~~~~~~~~~~~~~# # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # """ To make ur own SSL-certificate on linux type: openssl req -new -days 999 -newkey rsa:4096bits -sha512 -x509 -nodes -out server.crt -keyout server.key Note: CN (Common Name) has to be the server adress (e.g. IP) Don't forget to change rights for server.crt and server.key (chmod -v 777 server.crt) Source: https://wiki.manitu.de/index.php/Server:Selbst-signiertes_SSL-Zertifikat_erstellen/erzeugen """ import socket, ssl def deal_with_client(connstream): data = connstream.recv(1024) while data: if not data: connstream.close() break data = connstream.recv(1024) context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH) context.load_cert_chain(certfile="/home/PFADNAME/server.crt", keyfile="/home/PFADNAME/server.key") bindsocket = socket.socket() bindsocket.bind(('127.0.0.1', xxxx)) # zu internen zwecken, da nur 1x linux auf vm vorhanden, port bindsocket.listen(5) while True: newsocket, fromaddr = bindsocket.accept() connstream = context.wrap_socket(newsocket, server_side=True) try: deal_with_client(connstream) finally: connstream.shutdown(socket.SHUT_RDWR) connstream.close() # ========================================================================== # # ============================ B R E A K =================================== # # ========================================================================== # # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # # ~~~~~~~~~~~~~~~~~ SSL Verschlüsselung ~~~~~~~~~~~~~~~ # # ~~~~~~~~~~~~~~~~~~ client.py ~~~~~~~~~~~~~~~~~~# # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # try: import socket, ssl, pprint except ImportError: pass context = ssl.SSLContext() context.verify_mode = ssl.CERT_REQUIRED context.check_hostname = True context.load_verify_locations("/home/PFADNAME/server.crt") conn = context.wrap_socket(socket.socket(socket.AF_INET, socket.SOCK_STREAM), server_hostname="127.0.0.1") conn.connect(('127.0.0.1', xxxx)) # port cert = conn.getpeercert() pprint.pprint(cert)
  2. Hallo, eine recht knappe Frage: Wann muss/sollte ein Programm Allgemeingültigkeit aufweisen? Woran erkenne ich das? (z.B. in schulischen Aufgabenstellungen, aber auch im Job als FiAe) Die einzigen Dinge die mir einfallen sind hier gewisse Dinge im Vorfeld (z.B. Lastenheft/ anderweitige Absprache oder Kenntnisnahme von "Zuständen" und Umgebung möglicher Einsatzbereiche etc.). Aber gibt es grundlegend Dinge, die mir signalisieren sollten, dass ein allgemeingültiges Programmieren von Vorteil / zwingend erforderlich ist? (Habe dazu iwie im Netz nichts finden können, sry, aber habe glaube mit euch hier gute Ansprechpartner gefunden... ?) Hinzu meine nächste Frage: In unten stehender Aufgabe habe ich zuerst den Ansatz gehabt die Bedingungen zu programmieren, um dann eine Liste von möglichen Zahlen unter diesen Bedingungen zu generieren. Ich kam jedoch als Neuling nicht wirklich weiter als geschlagene 5 Zeilen Code. Ich wählte diesen Ansatz zu Anfang, weil ich mir dachte "das Programm durchläuft ja unnötig Codezeilen (sozusagen "Verschnitt"), das muss doch performanter gehen...? Mein Ausbilder sagte dann, dass ein anderer Ansatz dafür vorgesehen ist: "Generiere erst die Zahlencodes, und sortiere dann mithilfe deiner Bedingungen aus." Hier die Programmieraufgabe: Ein 5-stelliges Zahlenschloss wurde verstellt. Das Zahlenschloss beseteht aus 5 Ringen mit je 10 möglichen Einstellungen ('0', '1', '2', ..., '9'). Der neue Coode ist leider unbekannt. Aufgrund von Lieblingszahlen und Mustern sind folgende Informationen bekannt: - Der neue Code enthält keine 5. - Er enthält mind. einmal die Ziffer 3. - Er enthält mind. einmal die Ziffer 6. - Er startet nicht mit einer geraden Ziffer, auch nicht mit der '0'. - Er ist fast aufsteigend. Das heißt, die nachfolgenden Ziffern sind nicht kleiner als die vorangehenden (z.B. '23368'). Dies jedoch mit maximal einer Ausnahme. - An einer Stelle darf die Ziffernfolge absteigend sein (z.B. '23326'); aber wie erwähnt, maximal einmal! Lohnt es sich nun von den theoretisch 100.000 Möglichkeiten die verbleibenden auszuprobieren? a) Schreiben Sie ein Programm, dass alle verbleibenden Möglichkeiten ausgibt und die Anzahl. b) Eine Kombination auszuprobieren dauert 3 Sekunden. Angenommen durch manuelles Probieren nach etwa der Hälfte aller Kombinationsmöglichkeiten wurde die richtige Kombination eingegeben- ist dies innerhalb von 60 Minuten möglich? Wie immer- besten Dank! Fin
  3. Und gerade dann doch verstanden. Danke dennoch. Ich arbeite mich fleißig vor, denn ich muss die Kleinigkeiten ja verstehen, wenn ich eine monströse Rekursionsaufgabe lösen muss. (Da werde ich dann ggfs. nochmal hier nachfragen)
  4. Hallo, als Anfänger beschäftige ich mich gerade mit der Rekursion. Was eine Rekursion ist, weiß ich, aber ich verstehe den genauen Ablauf von folgendem Code nicht. Vielleicht hat jemand die Muße mir jeden Schritt der ausgeführt wird zu verschriftlichen.. ich glaube anders verstehe ich es nicht. Die Funktion ist fehlerfrei, mir gehts nur ums Verständnis. 1. Wie sieht jeder einzelne Schritt aus der durchgeführt wird + was ist im Zwischenspeicher? 2. Wofür genau brauche ich das n%10 vor dem sum_func(n//10)? (Ohne komme ich aufs falsche Ergebnis, aber wieso?) Was die Funktion letztlich tut: Übergabe von 4321 an Funktion, diese rechnet dann 4+3+2+1 und gibt 10 als Ergebnis zurück def sum_func(n): if len(str(n)) == 1: return n else: return n % 10 + sum_func(n//10) print(sum_func(4321)) LG, Fin P.S.: Das Debuggen hatte mir keine Erleuchtung bringen können.
  5. Finux

    Rekursion Python

    Hallo, bin gerade dann letztlich doch selbst auf eine Lösung gekommen, aber wer schon dabei geschaut und eine schöne Lösung gefunden hat- ich bin neugierig- postet sie mir bitte hier rein! Meine finale Lösung: # --------------------------------------- Höchste Summer einer Teilfolge von Liste mit Integer --------------------- # """ Aufgabe 4: b) Gegeben sei eine Folge von n ganzen Zahlen in einem Array. Gesucht ist die maximale Summe aller Elemente in einer Teilfolge aufeinanderfolgender Zahlen. Die Eingangsfolge 12 -34 56 -5 -6 78 liefert bspw. die Summe 56 -5 -6 +78 = 123. """ # --------------------------------------- Funktion ----------------------------------------------------------------- # def save_to_dict(k, v): dict_of_num[k] = v def sum_list(num_list): pieces_add1 = num_list[:-1] pieces_add2 = num_list[1:] if len(num_list) > 2: if pieces_add1 not in dict_of_num.values(): add1 = sum(num_list[:-1]) print(add1, pieces_add1, "wurde berechnet!") save_to_dict(add1, pieces_add1) sum_list(num_list[:-1]) if pieces_add2 not in dict_of_num.values(): add2 = sum(num_list[1:]) print(add2, pieces_add2, "wurde berechnet!") save_to_dict(add2, pieces_add2) sum_list(num_list[1:]) else: print("Alrdy in dict!", pieces_add1, pieces_add2) else: print("rdy") # --------------------------------------- Programmstart ------------------------------------------------------------ # dict_of_num = {} num_list = [12, -34, 56, -5, -6, 78] #num_list = [4, 4, 4, 12] # Testliste für Trigger doppelter Berechnung! sum_list(num_list) for result in dict_of_num.keys(): print("DICT", result) #ToDo: Vermeide redundante Berechnungen! (Unterschiedliche Teilfolgen mit gleichem Ergebnis müssen zugelassen sein!) // Kein return, Kein string
  6. Hallo, etlche Infoquellen, Erklärungen, Skripte, Buchzeilen bin ich durchgegangen, und dennoch: Ich benötige Hilfe bei einer Aufgabe. Bin angehender FiAe, arbeite aktuell ausschließlich mit Python und bin noch sehr unerfahren was Programmieren (insb. Algor. angeht), daher seht mir evtl. "Dummheiten" bitte nach. Ich schreibe ja hier um zu lernen wie ich es besser mache. Daher wären evtl. Bsp. am meisten für mich von Nutzen wenn ich sie erstmal in Python lesen kann. Vielen Dank! Vorab die Info: Rekursion ist eine sich selbst aufrufende Funktion. Das habe ich verstanden, und in dem folgenden Mini-Programm umgesetzt: (Entwickle Algorithmus welcher rekursiv die Quersumme einer natürlichen Zahl berechnet) def calc_checksum(n): n = sum([int(i) for i in str(n)]) if n > 10: calc_checksum(n) else: print(n) # --------------------------------------- Programmstart ------------------------------------------------------------ # n = 123456789 calc_checksum(n) Nun sitze ich an folgender Aufgabe, die mein Verständnis für rekursive Programmierung absolut zu übersteigen scheint: (Gegeben ist eine Folge von ganzen Zahlen in einem Array. Gesucht ist die maximale Summe aller Elemente in einer Teilfolge aufeinanderfolgender Zahlen. Die Eingangsfolge 12, -34, 56, -5, -6, 78 liefert bspw. die höchste Teilfolgensumme von 123 in der Teilfolge 56-5-6+78) Gegeben: vollständige Liste L [12, -34, 56, -5, -6, 78] <-- eine Teilfolge besteht nicht aus allen Elementen der vollständigen Liste! Es gibt insgesamt 14 Kombinationsmöglichkeiten, wie sich Teilfolgen zusammensetzen können. Hier die möglichen Kombinationen: 23 = [12, -34, 56, -5, -6] 29 = [12, -34, 56, -5] 34 = [12, -34, 56] -22 = [12, -34] 89 = [-34, 56, -5, -6, 78] 11 = [-34, 56, -5, -6] 17 = [-34, 56, -5] 22 = [-34, 56] 123 = [56, -5, -6, 78] 45 = [56, -5, -6] 51 = [56, -5] 67 = [-5, -6, 78] -11 = [-5, -6] 72 = [-6, 78] Ich möchte diese Aufgabe lösen, stoße dabei aber auf unterschiedliche Probleme: 1. Ich verstehe trotz Debuggen den Ablauf der Rekursion (Funktionsaufrufe) nicht. 2. Dadurch ist mir nicht klar, was ich tun muss um alle 14 Möglichkeiten durchlaufen zu lassen 3. Jede durchlaufene Möglichkeit möchte ich in einem Dictionary speichern. Innerhalb der Funktion "addition" überschreibt es sich logischerweise immer wieder selbst. Das Dict. global zu machen hilft mir leider auch nicht. Zumindest funktioniert es nicht. 4. Theoretsich möchte ich ausschließlich Teilfolgen berechnen lassen. Dazu müsste ich die Funktion "addition" allerdings von außen mehr als 1 Mal aufrufen... Mein bisheriger Programmcode zu dieser Aufgabe sieht aktuell so aus: Besten Dank schon mal an alle die sich freundlicherweise mit diesem komplizierten Problem beschäftigen!! LG, Fin
  7. Hallo nochmal! Hier ist also mein aktueller Stand im Punkto Projektantrag! Das in Klammern stehende betrifft explizite Angaben zu meinem Betrieb, und möchte diese daher allgemein gehalten benennen. Mit dem Titel bin ich noch nicht wirklich glücklich, habt ihr evtl. ne Idee? Vielen Dank im Voraus! Fin 1.* Titel / Bezeichnung der betrieblichen Projektarbeit (Auftrag / Teilauftrag) Entwicklung einer Client-Server-Kommunikation zur Informationsübertragung und Visualisierung 2.* Verantwortliche/r im Ausbildungs-/Praktikumsbetrieb (inkl. Telefonnummer) (Angaben) 3.* Geplanter Durchführungszeitraum Geben Sie hier Ihren geplanten Bearbeitungszeitraum an. Die Bearbeitung der Projektarbeit kann frühestens mit bzw. nach der Genehmigung des Prüfungsausschusses beginnen und sollte einen Zeitraum von 4 bis 6 Wochen nicht überschreiten. Der Tag der Genehmigung kann als Startzeitpunkt festgesetzt werden (Bsp. „Tag der Genehmigung bis xx.xx.xxxx). 16.09.2019 bis 11.10.2019 4.* Geplante Hilfsmittel zur Präsentation Die IHK wird dafür Sorge tragen, dass in den Prüfungsräumlichkeiten folgende Hilfsmittel vorhanden sind: - Beamer mit HDMI- / VGA-Kabel - Flipchart Darüber hinausgehende Präsentationstechnik ist von Ihnen zum Prüfungstermin mitzubringen und funktionsfähig vorzubereiten. Für die Funktionsfähigkeit der mitgebrachten Präsentationsmittel sind Sie selbst verantwortlich. Stellen Sie sicher, dass die technische Ausrüstung einsatzbereit ist (Rüstzeit). Tragen Sie hier bitte die Präsentationsmittel ein, die von Ihnen voraussichtlich zur Präsentation mitgebracht werden. Laptop und Laserpointer/Zeigestab 5.* Kurzbeschreibung der betrieblichen Projektarbeit Bitte beschreiben Sie hier kurz und verständlich Ihre geplante betriebliche Projektarbeit und den Geschäftsprozess, sodass auch betriebsfremde Personen die Beschreibung nachvollziehen können. Dabei sollen Sie den Ausgangszustand (Ist-Zustand), die Zielgruppe bzw. den Auftraggeber sowie die Ziele und den Nutzen Ihrer Arbeit darstellen. Ihre persönliche Prüfungsleistung bzw. die von Ihnen auszuführenden Tätigkeiten müssen klar von den Tätigkeiten anderer Personen abgegrenzt werden. Die eingebundenen Schnittstellen (Ansprechpartner) müssen beschrieben werden. Bitte achten Sie bei der Auswahl der Aufgabe darauf, dass das Projekt aus Ihrem Einsatzgebiet stammt und einen IT-Bezug hat. Außerdem muss es als Abschlussprüfung sowohl zeitlich als auch dem Anspruch entsprechend geeignet sein. Bei den kaufmännischen Berufen ist es notwendig, dass die kaufmännischen Aspekte auch deutlich aufgezeigt werden. Bitte achten Sie darauf, dass es sich nicht um einen „ausgedachten“ Auftrag handelt. Nach Möglichkeit sollten Sie Ihr Projekt zeitnah umsetzen und auch in der Art und Weise, in der Sie es in Ihrem Projektantrag planen. Hinweis: Es muss sichergestellt sein, dass weder dieser Antrag noch die spätere Dokumentation schutzwürdige Betriebs- oder Kundendaten enthält und das Urheberrecht beachtet wird. (Kurzeinleitung zur Firma) IST-Zustand: Um eine realistische Einschätzung der maschinellen Zustände verschiedener (Anlagenkomponenten) zu bekommen, werden im laufenden Betrieb Daten erfasst. Diese werden vor Ort bei den Kunden auf einem Server (Programmiersprache) gespeichert und bedürfen ständiger Überwachung. SOLL-Zustand: Um diese Überwachung gewährleisten zu können, ist die Einrichtung der Kommunikation ab dem Abruf der Daten in der „Fog-Computing“-Ebene vonnöten. Sowohl Performance als auch der Sicherheitsaspekt sind besonders zu berücksichtigen, da eine reibungslose und geschützte Kommunikation von grundlegender Bedeutung ist. Meine Aufgabe besteht darin, diese Daten durch Benutzerinteraktion gesteuert darzustellen. Sie sollen befugten Mitarbeitern der (Firma) zugänglich sein. Der zu erwartende Nutzen dieses Projektes lässt sich in verschiedenen Stichpunkten wiederspiegeln: - verbesserte Supportmöglichkeiten - Steigerung der Kundenzufriedenheit - Kostenersparnis durch Reduktion von Dienstreisenden 6.* Projektphasen mit Zeitplanung in Stunden Die einzelnen Projektphasen müssen deutlich herausgearbeitet und ein Soll- / Ist-Vergleich mit Zielsetzung benannt werden. Bitte geben Sie hier aussagekräftige Bezeichnungen der einzelnen Projektphasen mit dem geschätzten Zeitbedarf (in Stunden) Ihrer persönlichen Arbeit an. Bitte achten Sie darauf, dass inklusive der Dokumentation ein Zeitrahmen von 35 Stunden bzw. bei den Fachinformatikern Anwendungsentwicklung 70 Stunden nicht überschritten werden darf. Sie müssen also die technische, wirtschaftliche und zeitliche Durchführbarkeit beachten. Phase 1 – Planung: à 15 Std. - Konkretisierung der Anforderungen - IST – Konzept - SOLL – Konzept - Auswahl geeigneter Werkzeuge und Technologien - Zeitplanung - Kostenbetrachtung Phase 2 – Durchführung: à 38 Std. - Umsetzung SOLL-Konzept (Informationsübertragung, Visualisierung) - Problemmanagement - Test / Kontrollen Phase 3 – Abschluss: à 4 Std - SOLL / IST -Vergleich - Wirtschaftlichkeitsrechnung - Projektabnahme - Fazit / Reflexion Phase 5 – Dokumentation: à 13 Std.
  8. Hallo zusammen, ich bin Neuling was die Programmierung angeht (angehender FiAe). Ich suche seit einigeer Zeit ein Nachschlagewerk/anderes Material, welches einfach (möglichst Sprachenunabhängig!) ganz Grundlegendes beinhaltet unter dem Gesichtspunkt: "Was gehört zum guten Ton eines Programmierers?" Ich meine damit so Dinge wie --> "Man sollte aus Grund X und Y seinen geschriebenen Code möglichst gut dokumentieren. Das kann in etwa so aussehen [Bsp.Abbildung]" --> "Man sollte nie Funktionen und Variablen gleich benennen (Es gibt Programmiersprachen wo das möglich ist)" Es gibt sicherlich eine ganze, ganze Menge dieser Dinge, ich als Frischling habe aber keine Übersicht darüber. Manches kommt mit der Erfahrung, einiges steht auch vielleicht in Sprachenbezogenen Lehrbüchern, aber diese Zeilen in diesen 1.000 Büchern zu finden ist schier unmöglich, und ich möchte mir so früh wie möglich ganz bewusst "den guten Ton" antrainieren, weil ich selbst auch viel Wert darauf lege. Ich hoffe es ist verständlich geworden, was ich suche, möglicherweise gibts den perfekten Suchbegriff- in dem Falle, ich steh aufm Schlauch, helft mir mal runter ? P.S.: Dass es natürlich keine zwingende Voraussetzung ist sich "den guten Ton" anzueignen ist mir natürlich klar. Vielen Dank im Voraus! FIN
  9. Ich habe eine Checkliste zum Projektantrag gefunden. Hier habe ich einige Punkte gefunden, die mir in ihrer Notwendigkeit der Nennung nicht ganz klar sind... Wie wichtig/notwendig ist es, auf folgende Punkte einzugehen? (Ich weiß nicht, ob ich die ganze Liste posten darf, daher nur ein kleiner Auszug an Unterpunkten) - Wird eine Kalkulation/Amortisationsrechnung durchgeführt? - Alle Projektphasen detailliert runterbrechen (max. 8 Std.) - Wird die geplante Form des Programms deutlich? (Webanwendung, GUI etc) - Wird die eingesetzte Programmiersprache / Plattform / Datenbank genannt? [- Wird der verwendete Entwicklungsprozess genannt? (Was ist damit genau gemeint? Gibts ein einfaches Bsp.?)] - Ist ein methodisches Vorgehen bei der Softwareentwicklung zu erkennen? - Werden alle zu erstellenden Artefakte und anzuwendenden Methoden genannt? (Was ist hier gemeint? Und notwendig?) Wie gesagt, die Punkte beziehen sich auf eine Checkliste für einen Projektantrag. Ich habe bisher eher grob umrissene Projektanträge gesehen, die aber ohne Probleme "durch gewunken" wurden. Sicher ist das auch eine IHK-abhängige Sache.. Ich könnte z.B. auch die Phasen säuberlich auseinanderfuzzeln, aber es soll ja im Sinne des Antrags eine Grobübersicht des ganzen Projekts geben können. Dass eine Projektphase oder Unterpunkt solchem höchstens in 8 Std. zusammengefasst werden darf höre ich so zum ersten mal.. LG, FIN
  10. Alles klar! Danke euch allen erstmal für alle Antworten! Geeignetes Thema für FiAe? Definitiv! --> Socketprogrammierung und Einbindung auf HTML Seite eines Monitorings. Zusätzlich werde ich seitens "HTML-Konsolenfunktion"/Remote eigene Befehle programmieren, die der Server auf der anderen Seite dann ausführen soll (welche sind noch unbekannt). Und die Phase Kickoffmeeting werde ich rausnehmen (somit dann -1 Std, hatte ich in der Tat verrechnet) Ich bekam als Tipp möglichst oberflächliche Angaben zu machen um mir selbst bei der Durchführung mehr Spielraum zu lassen. Daher wollte ich die IDE und auch die Programmiersprache bewusst unerwähnt lassen. Die langfristige Speicherung und das Monitoring dafür ist bereits gegeben. In meinem Fall geht es nur um die Daten die genau in dem Moment erfasst werden, in dem sie auch wiedergegeben (visualisiert) werden. Vielleicht sollte ich das besser erkenntlich machen? ? Morgen formulier ich es dann mal um und lade mein neues Ergebnis dazu hoch LG, FIN
  11. Hallo, ich bitte um kurze Rückmeldung eurerseits. Besten Dank im Voraus! Bisher sieht mein Projektantrag so aus: 4.* Geplante Hilfsmittel zur Präsentation Die IHK wird dafür Sorge tragen, dass in den Prüfungsräumlichkeiten folgende Hilfsmittel vorhanden sind: - Beamer mit HDMI- / VGA-Kabel - Flipchart Darüber hinausgehende Präsentationstechnik ist von Ihnen zum Prüfungstermin mitzubringen und funktionsfähig vorzubereiten. Für die Funktionsfähigkeit der mitgebrachten Präsentationsmittel sind Sie selbst verantwortlich. Stellen Sie sicher, dass die technische Ausrüstung einsatzbereit ist (Rüstzeit). Tragen Sie hier bitte die Präsentationsmittel ein, die von Ihnen voraussichtlich zur Präsentation mitgebracht werden. Laptop und Laserpointer/Zeigestab 5.* Kurzbeschreibung der betrieblichen Projektarbeit Bitte beschreiben Sie hier kurz und verständlich Ihre geplante betriebliche Projektarbeit und den Geschäftsprozess, sodass auch betriebsfremde Personen die Beschreibung nachvollziehen können. Dabei sollen Sie den Ausgangszustand (Ist-Zustand), die Zielgruppe bzw. den Auftraggeber sowie die Ziele und den Nutzen Ihrer Arbeit darstellen. Ihre persönliche Prüfungsleistung bzw. die von Ihnen auszuführenden Tätigkeiten müssen klar von den Tätigkeiten anderer Personen abgegrenzt werden. Die eingebundenen Schnittstellen (Ansprechpartner) müssen beschrieben werden. Bitte achten Sie bei der Auswahl der Aufgabe darauf, dass das Projekt aus Ihrem Einsatzgebiet stammt und einen IT-Bezug hat. Außerdem muss es als Abschlussprüfung sowohl zeitlich als auch dem Anspruch entsprechend geeignet sein. Bei den kaufmännischen Berufen ist es notwendig, dass die kaufmännischen Aspekte auch deutlich aufgezeigt werden. Bitte achten Sie darauf, dass es sich nicht um einen „ausgedachten“ Auftrag handelt. Nach Möglichkeit sollten Sie Ihr Projekt zeitnah umsetzen und auch in der Art und Weise, in der Sie es in Ihrem Projektantrag planen. Hinweis: Es muss sichergestellt sein, dass weder dieser Antrag noch die spätere Dokumentation schutzwürdige Betriebs- oder Kundendaten enthält und das Urheberrecht beachtet wird. IST-Zustand: Um eine realistische Einschätzung der maschinellen Zustände verschiedener Walzwerkabschnitte zu bekommen, werden im laufenden Betrieb Messdaten mittels Sensoren erfasst und gesammelt. Diese kontinuierlich übertragenen Messdaten bedürfen ständiger Überwachung und werden auf unterschiedlichen Servern gespeichert. Um ein geeignetes Monitoring zu gewährleisten wurde im Vorfeld eine Internetseite für die Kunden, aber auch für eigenbetriebliche Zwecke erstellt. Diese spiegelt den Messdatenverlauf unterschiedlicher Geräte der Walzwerkabschnitte wieder. SOLL-Zustand: Um ggfs. auch in Akutsituationen (z.B. Fehlproduktion bis zum Ausfall eines Maschinenabschnitts) gezielt handlungsfähig bleiben zu können, ist auch der Zugriff auf „Just-In-Time“-Daten notwendig. Gefordert ist somit die Einrichtung einer Übertragungsmöglichkeit welche akute Messdaten und Serverzustände transportieren soll. Diese wiederum sind vereinfacht darzustellen. Letztlich soll der Zugriff auf diese Visualisierung für befugte Mitarbeiter der Firma XYZ ermöglicht werden. Sowohl Performance als auch der Sicherheitsaspekt spielen eine große Rolle, da die Server mit vorbenannten Daten weit außerhalb der Betriebsstandorte liegen und der Zugriff auf das „Akut-Monitoring“ weltweit gewährleistet sein soll. Der Nutzen dieser Übertragungseinrichtung und des „Akut-Monitorings“ lässt sich in verschiedenen Stichpunkten wiederspiegeln: --> deutlich verbesserte Supportmöglichkeiten --> Steigerung der Kundenzufriedenheit --> Kostenersparnis von Servicemitarbeitern und Dienstreisenden Dass meine Projektarbeit Bestandteil der Maßnahmen von „Industrie 4.0“ (Projekt gehört zur Digitalisierungsstrategie des Unternehmens) ist, möchte ich nicht unerwähnt lassen. 6.* Projektphasen mit Zeitplanung in Stunden Die einzelnen Projektphasen müssen deutlich herausgearbeitet und ein Soll- / Ist-Vergleich mit Zielsetzung benannt werden. Bitte geben Sie hier aussagekräftige Bezeichnungen der einzelnen Projektphasen mit dem geschätzten Zeitbedarf (in Stunden) Ihrer persönlichen Arbeit an. Bitte achten Sie darauf, dass inklusive der Dokumentation ein Zeitrahmen von 35 Stunden bzw. bei den Fachinformatikern Anwendungsentwicklung 70 Stunden nicht überschritten werden darf. Sie müssen also die technische, wirtschaftliche und zeitliche Durchführbarkeit beachten. Phase 1 – Kick-Off-Meeting: --> 1 Std. - Themenfindung - Projektauftrag Phase 2 – Planung: --> 15 Std. - Konkretisierung der Anforderungen - IST – Konzept - SOLL – Konzept - Zeitplanung - Kostenbetrachtung - Alternativmöglichkeiten im Projekt bedenken Phase 3 – Durchführung: --> 38 Std. - Umsetzung SOLL-Konzept - Problemmanagement - Test / Kontrollen Phase 4 – Abschluss: --> 4 Std - Wirtschaftlichkeitsrechnung - Projektabnahme - Fazit / Selbstreflexion Phase 5 – Dokumentation: --> 13 Std.
  12. Ouh, da hab ich mich verschrieben was die Zeit der Dokumentation angeht. Also Gesamtzeit sollte 70 Std nicht übersteigen, davon ca 30 Std. Durchführung des Projektes. Ich war so unschlau die Differenz als Doku anzugeben, ist natürlich nicht richtig. ^^ Bzgl meinem Wissensstand- meine Ausbilder im Betrieb (Praktikum!) tun gerade alles dafür mir mit den Defiziten zu helfen. Im Vordergrund stehen Übungsaufgaben für Python um ein wesentlich besseres Gefühl für die Entwicklung eines Algorithmus zu bekommen. Ein Socket zu programmieren sollte nicht allzu schwer sein, darin sehen sie auch weniger die Probleme (gibt ja genügend Tutorials, z.B. https://realpython.com/python-sockets/), aber dieses dann zu verfeinern- nämlich ein Terminal zu bauen welches Befehle entgegennimmt, diese über den WebSocket kommuniziert und an Gegenstelle tatsächlich ausgeführt wird, da gehört mehr zu. Und genau da sehen sie meine Schwächen. Zumal ich auch Fehler abfangen muss (z.B. was passiert wenn die Gegenstelle aus ist usw usw). Ich bin mir über den zeitlichen Aspekt noch sehr unsicher. Ich kann nicht einschätzen wie lang diese Aktion zu programmieren in etwa dauern wird... ? Ich muss dazu sagen, den Theorieteil habe ich bei einem Träger (1,5 Jahre) gemacht, und hier gab es massig Schwächen bei den Dozenten (alles lief auf rein virtueller Ebene), ich arbeite seit Mai das erste mal wirklich Praktisch, und auch das erste mal im Betrieb. Meinen Projektantrag muss ich bis Mitte/Ende August einreichen. Ich bin nur unruhig, will dass alles möglichst glatt läuft. Daher mein Hilfesuchen bei euch und ggfs. Erfahrungsaustausch Bisher erstmal danke für eure Antworten, ich schreib nochmal ein Update meiner Situation hier rein, denn im Laufe der nächsten Woche sollte sich das ein oder andere geklärt haben. Kann mir jemand noch grob sagen, auch wenn es kleine Projekte sein dürfen, wo sieht man seitens IHK hier eine Grenze zu "macht Sinn als Projekt", und "ist einfach zu wenig Content o.ä."? Dass ich keine kleine Homepage bauen brauche weil das nicht anerkannt würde ist mir klar, und es muss auch einen praktischen Bezug zu meinem Praktikumsbetrieb haben, aber gibts genauere Kriterien an denen ich, oder auch meine Ausbilder sich orientieren könnten? Beste Grüße, Fin
  13. Hallo, ich bin FiAe-Umschüler, 6 Monate Praktikum von 2 Jahren Umschulungszeit am Ende- hier bin ich nun. Seit April im Betrieb, und habe das Problem, dass sich mein Betrieb schwer damit tut ein geeignetes Thema für mein Abschlussprojekt zu finden. Ich brauche extrem viel Übung was den Aufbau eines Algorithmus angeht, da lediglich einfache Grundlagen von C bzw C# in meiner virtuellen Schule besprochen wurden. Im Betrieb arbeite ich mit Python, soweit kein Problem, aber Programmlogik muss ich einfach trainieren. Es gibt nun aktuell die Idee, dass ich ein Socket programmiere, welches mir die Kommunikation auf einer HTML-Seite zu einem anderen Gerät in der Ferne möglich macht. Hierüber sollen einzelne kleine Befehle eingegeben werden können und von dem Gerät in der Ferne entsprechend verarbeitet, ggfs. eine Rückmeldung an mein HTML gesendet werden. Nun sei gesagt- mit Python kann ich mittlerweile einigermaßen gut arbeiten, HTML/CSS ist gar kein Problem, aber ich bin mir nicht sicher, ob ein Neuling wie ich diese Aufgabe legitim in einer Abschlussprüfung als Thema wählen sollte (was Hardware angeht bin ich nicht der Prof vom Dienst..). Haltet ihr das für "sinnvoll"? In Anbetracht von meinem schlechten Wissensstand und der Vorgabe der Zeit von 30 Std. Arbeit+ 40 Std. Doku? Vielleicht kann mir jemand einen Rat geben oder so. Meine Ausbilder im Betrieb sind ratlos, meine virtuelle "Schule" ist bereits informiert, aber wie es immer so ist- zuständige Personen krank/Urlaub/nicht erreichbar, Vertretung kann nicht weiterhelfen. Daher meine Frage bei euch. Beste Grüße, und Danke für eure Antworten, Fin
  14. Hallo, habe das Problem über eine globale Variable in JS gelöst. Ich hatte es mir fast gedacht, mir war nur nicht klar, wie ich diese syntaktisch aufstellen muss, damit mein Vorhaben auch funktioniert. Besten Dank für deine Antwort! Finux
  15. Hallo! Ich bin im Rahmen einer Umschulung gerade als Praktikant für 6 Monate in einer Firma eingesetzt (als FIAE). Ich stehe vor dem Problem, dass ich in Django (Framework) ein Socket (Python) erstellt habe, welches von einer .js mit "chatsocket.onmessage = function(e)" (oder so ähnlich) empfange und als Tabelle dargestellt wird. Soweit läuft alles! Aber der Datensatz (in meinem Fall eine Liste die Dictioniaries enthält) wird jede Sekunde neu gesendet, und somit habe ich diesen in meiner Tabelle nicht nur 1x drin stehen, sondern sie wird jede Sekunde aufs Neue unter die schon vorhandenen Rows gepackt. Mein Ziel ist es, den Datensatz (der ja sekündlich neu gesendet wird, und das muss auch so bleiben) in der Tabelle nur einmal abzubilden, und wenn die Datenbank neue/frische Daten bekommt, lediglich diese als Row unter meine alten Daten zu schreiben. Theoretisch könnte ich bei jedem Neu-Empfang von Daten wieder die Tabelle löschen bevor ich neue hinzufüge, aber das halte ich für eine äußerst schlechte Lösungsmöglichkeit. Könnt ihr mir da irgenwie helfen? Ich bin neu und unwissend, habe wirklich nach so einigem Stuff gegoogelt, aber mir ist nicht klar, wo oder wie ich den Filter anbringen muss, dass er nur neue Daten hinzuschreibt (Filterung wäre möglich über Datum/Uhrzeit). Ich bin was JavaScript angeht auch mehr als Neuling, vielleicht könnte man den alten Datensatz irgendwie in einer art globalen Variable abspeichern um dann neuen Datensatz mit altem vergleichen zu können? Nur wenn die .js Funktion neu aufgerufen wird, ist ja alles an Variablenwerten der .js weg...? Sorry für so blöde Fragen, aber mein Mentor ist quasi im Urlaub, und ich bin wirklich bemüht das Problem zu lösen... Beste Grüße, Finux EDIT: Vielleicht gehe ich das ganze auch falsch an, und ich muss in der .py schon was machen?
  16. @KeeperOfCoffee Ich weiß deine Mühe sehr zu schätzen, habe allerdings nur noch bis Freitag morgen Zeit (habe dieses Projekt als Klausurgegenstand gewählt). So richtig verstehe ich leider auch nicht was nun MVVM genau sein soll, bzw wo hier Unterschiede liegen (shame on me, bin ein echt krass langsamer Lerntyp, und ich stehe quasi noch in the very beginning..) - Was ist das INotifyPropertyChanged Interface? - Was ist ein Datacontext? - Was ist eine ObservableCollection? Geht das in die Richtung MVVM? (sry für die blöden Fragen, ich checks einfach nicht)
  17. Erstmal fetten Dank an alle Antwortenden! Hab gar nicht mit so viel Help/Feedback gerechnet! Top! Gestern bin ich nach fürchterlich langer Zeit erst auf den richtigen "Google"-Pfad der "Erlösung" gekommen. Denn mir war einfach nicht klar, wie ich mit nem ClickEvent ein 2. Fenster provozieren kann (ne MessageBox bringt mir ja nix). Ich hab bisher ein bissl was zusammengeschustert, ich zeigs euch einfach mal (soll auf jeden Fall ein WPF-Projekt bleiben!) using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace Stay_Alive { /// <summary> /// Interaktionslogik für MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void WelcomeWindow_B1_Ja_Click(object sender, RoutedEventArgs e) { name name = new name(); name.Show(); this.Close(); } private void WelcomeWindow_B2_Nein_Click(object sender, RoutedEventArgs e) { this.Close(); } } } <Application x:Class="Stay_Alive.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:Stay_Alive" StartupUri="MainWindow.xaml"> <Application.Resources> <LinearGradientBrush x:Key="gradientBackground" EndPoint="1,0.5" StartPoint="0,0.5"> <GradientStop Color="Black" Offset="0"/> <GradientStop Color="#FF006A00" Offset="1"/> </LinearGradientBrush> <Style TargetType="Button"> <Setter Property="Height" Value="25"/> <Setter Property="Width" Value="100"/> <Setter Property="Background" Value="Black"/> <Setter Property="Foreground" Value="#FF0AD300"/> <Setter Property="BorderBrush" Value="#FF0AD300"/> <Style.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="Foreground" Value="Black"/> </Trigger> </Style.Triggers> </Style> <Style x:Name="Name_Frage" TargetType="{x:Type TextBox}"> <Setter Property="HorizontalAlignment" Value="Left"/> <Setter Property="VerticalAlignment" Value="Center"/> <Setter Property="FontSize" Value="12"/> <Setter Property="Background" Value="Black"/> </Style> </Application.Resources> </Application> <Window x:Class="Stay_Alive.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:Stay_Alive" mc:Ignorable="d" Title="Stay Alive!" Icon="K:\+++BEWERBUNG PRAKTIKUM+++\+++ eigene Programme +++\Stay_Alive\Stay_Alive\Symbol1.ico" Height="400" Width="798" ResizeMode="CanMinimize"> <Window.Effect> <DropShadowEffect/> </Window.Effect> <StackPanel Background="{StaticResource gradientBackground}"> <TextBlock Name="WelcomeWindow" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="53,50,52,50" TextWrapping="Wrap" FontSize="18" Foreground="#FF00FF07"> <TextBlock.Effect> <DropShadowEffect/> </TextBlock.Effect><Run Text="Stay Alive ist eine kleine Story, in der es ums Überleben geht. Sie befindet sich noch im Ausbau, du kannst sie aber vorab testen."/></TextBlock> <TextBlock x:Name="WelcomeWindow_Frage" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="52,0,0,0" TextWrapping="Wrap" FontSize="18" IsEnabled="False"> <TextBlock.Effect> <DropShadowEffect/> </TextBlock.Effect><Run Text="Möchtest du Teil dieses Abenteuers werden?" Foreground="#FF00FF07"/></TextBlock> <Grid Margin="10,20,30,20"> <Grid.Effect> <DropShadowEffect/> </Grid.Effect> <Grid.ColumnDefinitions> <ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="*"/> </Grid.RowDefinitions> <Button Grid.Column="0" Grid.Row="1" Name="WelcomeWindow_B1_Ja" Margin="0,0,0,0" Click="WelcomeWindow_B1_Ja_Click">Ja</Button> <Button Grid.Column="1" Grid.Row="1" Name="WelcomeWindow_B2_Nein" Margin="22" Click="WelcomeWindow_B2_Nein_Click">Nein</Button> <Image Source="K:\+++BEWERBUNG PRAKTIKUM+++\+++ eigene Programme +++\Stay_Alive\Stay_Alive\Selfmade_Icon.ico" VerticalAlignment="Top" Grid.Column="3" Grid.Row="1" Name="WelcomeWindow_B3_Nein" Margin="52" Height="45" Width="100"></Image> <TextBox Grid.Column="3" Height="20" Width="65" Margin="112,70,0,45" Text="Version 1.0" Foreground="#FF00FF05" BorderBrush="Black" Background="Black" IsEnabled="False"/> </Grid> </StackPanel> </Window> <Window x:Class="Stay_Alive.name" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:Stay_Alive" mc:Ignorable="d" Title="Stay Alive!" Icon="K:\+++BEWERBUNG PRAKTIKUM+++\+++ eigene Programme +++\Stay_Alive\Stay_Alive\Symbol1.ico" Height="450" Width="798" ResizeMode="CanMinimize"> <StackPanel Background="{StaticResource gradientBackground}"> <TextBlock Name="Name_Äxx" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="53,50,52,50" TextWrapping="Wrap" FontSize="18" Foreground="#FF00FF07"> <TextBlock.Effect> <DropShadowEffect/> </TextBlock.Effect><Run Text="Hallo Fremder. Mein Name ist Äxx.Wenn du dieses Programm gefunden hast bedeutet das, dass das Virus ausgebrochen ist und zumindest DU überlebt hast. Wenn du bereit bist dir mein Gequatsche anzuhören und wirklich überleben willst, dann verrate mir vorerst deinen Namen:"/></TextBlock> <TextBox x:Name="Name_Frage" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="53,0,0,0" TextWrapping="Wrap" FontSize="18" Text="" Foreground="#FF00FF07" Width="270"> <TextBox.Effect> <DropShadowEffect/> </TextBox.Effect> </TextBox> <Grid Margin="0,20" RenderTransformOrigin="0.499,0.926" Height="179"> <Grid.ColumnDefinitions> <ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="*"/> </Grid.RowDefinitions> <Image Source="K:\+++BEWERBUNG PRAKTIKUM+++\+++ eigene Programme +++\Stay_Alive\Stay_Alive\Selfmade_Icon.ico" VerticalAlignment="Top" Grid.Column="3" x:Name="WelcomeWindow_B3_Nein" Margin="38,78,60,0" Height="45" Width="100"/> <TextBox Grid.Column="3" Height="20" Width="65" Margin="106,102,0,57" Text="Version 1.0" Foreground="#FF00FF05" BorderBrush="Black" Background="Black" IsEnabled="False"/> </Grid> </StackPanel> </Window> Sieht dann bisher so aus: Hier der Konsolencode, den ich einfach nur funktional in WPF visualisieren möchte : using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace StayAlive { class Program { static void Main(string[] args) { string name = ""; Begruessung(ref name); KraftBeweglichkeitAusdauer(ref name); Temperaturabfrage(); Console.WriteLine(" :] "); Console.ReadKey(); } public static void Begruessung(ref string name) { Console.WriteLine("Hallo Fremder."); Console.WriteLine("Mein Name ist Äxx."); Console.WriteLine("Wenn du dieses Programm gefunden hast heißt das, dass das Virus ausgebrochen ist und zumindest DU überlebt hast."); Console.WriteLine("Wenn du bereit bist, dir mein Gequatsche anzuhören und wirklich überleben willst, dann verrate mir vorerst deinen Namen: "); name = Console.ReadLine(); Console.WriteLine("Ich muss prüfen, ob du nicht in der Mitarbeiterdatenbank der 'W-H-A' auftauchst und mich nun ausspionieren willst.."); Console.ReadKey(); Console.WriteLine(".. progress 38%"); Console.Write(".. progress 58%"); Console.WriteLine(".. progress 100%"); Console.WriteLine(); Console.WriteLine("No match found."); Console.WriteLine(); Console.Write("Okay, {0}, Keine ID zu diesem Namen vorhanden.", name); Console.WriteLine(); Console.WriteLine("Vorerst muss das reichen."); Console.WriteLine("Der Weg den wir beide bestreiten wird nicht leicht. Überall lauern die Auswirkungen des Virus. Tote, Lebendige,"); Console.ForegroundColor = ConsoleColor.DarkGray; Console.WriteLine(" und die... dazwischen...... "); Console.WriteLine(); Console.WriteLine(); Console.ResetColor(); Console.Write("Fangen wir lieber an uns vorzubereiten. "); Console.WriteLine(); } public static string KraftBeweglichkeitAusdauer(ref string name) { Console.WriteLine("Um dir wirklich gute Tipps geben zu können, muss ich wissen, wie es um deine sportlichen Körperlichkeiten steht. Zunächst brauche ich dein Gewicht: "); string gewicht = Console.ReadLine(); int geparsedGewicht = Int32.Parse(gewicht); Console.WriteLine(); if (geparsedGewicht >= 80) { Console.WriteLine("Du bist sicherlich jemand mit viel Kraft. "); } if (geparsedGewicht < 80 && geparsedGewicht > 60) { Console.WriteLine("Ein Schwächling bist du sicher nicht. Aber wir sollten evtl. andere Wege offenhalten, wenn deine Stärken weniger in der Körperkraft liegen."); } if (geparsedGewicht <= 60 && geparsedGewicht >= 50) { Console.WriteLine("Um eine gesunde Balance zu den Attributen Kraft, Beweglichkeit und Ausdauer zu bekommen, solltest du auf jeden Fall -falls es die Situation zulässt- täglich deine Körperkraft trainieren. "); } if (geparsedGewicht < 50) { Console.WriteLine("Was? Hast du dich vielleicht vertippt? (y/n)"); string abfrageVertippt = Console.ReadLine(); if (abfrageVertippt == "y" || abfrageVertippt == "Y") { Console.WriteLine(); Console.WriteLine("Zum Glück. Das wäre hart geworden, und die Chancen deines Überlebens hätten bei unter {0} % gelegen.", geparsedGewicht); Console.WriteLine("Um ehrlich zu sein, in diesem Fall hätte ich dir nahegelegt Suizid zu begehen. Alles andere wäre Quälerei gewesen!"); } else { Console.WriteLine(); Console.WriteLine(); Console.WriteLine(); Console.WriteLine(); Console.WriteLine(); Console.WriteLine("Oha. "); Console.WriteLine("....Schnuckelchen, in der Vitrine im Obergeschoss steht hochprozentiger Alkohol. Eine geladene Pistole wirst du im Wandschrank finden. Trinke dir Mut an, und dann lösche dich selbst aus, denn du hast keine Chance zu überleben. Machs gut {0}.... ", name); Console.WriteLine(); Console.WriteLine(); Console.WriteLine(); Console.WriteLine(); Console.WriteLine("Deine Erbanlagen und das, was du aus deiner Gesundheit gemacht hast in deinem Leben, bewegt sich im unterirdischen Bereich. Letztlich bist du an einer Alkoholvergiftung gestorben, denn dein kleiner, dürrer Körper hat der alkoholischen Belastung nicht mehr stand gehalten. Mögliche Überlebende hatten nie die Chance die vorher erwähnte Pistole zu finden. Auch sie haben es nicht geschafft. Weil du so klein und dünn warst. "); return "ENDE"; } } Console.WriteLine(); Console.Write("Aber wie steht es um deine Beweglichkeit? Würdest du sagen, dass du recht gelenkig bist? (y/n)"); string abfrageBeweglichkeit = Console.ReadLine(); Console.WriteLine(); if (abfrageBeweglichkeit == "y" || abfrageBeweglichkeit == "Y") { Console.WriteLine(); Console.WriteLine("Das freut mich sehr! Mit dieser Information sind deine Überlebenschancen nach meinen Berechnungen gerade um 14 % gestiegen! "); } if (abfrageBeweglichkeit == "n" || abfrageBeweglichkeit == "N") { Console.WriteLine(); Console.WriteLine("Das macht nichts. Aber wir sollten aufpassen, dass wir uns nicht in Situationen begeben, die gymnastisch eine hohe Beweglichkeit erfordern könnte.."); } Console.Write("Nun zum wichtigsten aller Eigenschaften. Ausdauer. Wie schätzt du dich selbst ein, bist du ein Raucher mit chronischer Unlust zur Bewegung? (y/n)"); string abfrageAusdauer = Console.ReadLine(); Console.WriteLine(); if (abfrageAusdauer == "y" || abfrageAusdauer == "Y") { Console.WriteLine(); Console.WriteLine("Hat dein Arzt dir nie gesagt, dass Rauchen ungesund ist!? Vermutlich hast du mit dem Qualmen angefangen, als alles um dich herum kontaminierte.. ich verstehe. "); } if (abfrageAusdauer == "n" || abfrageAusdauer == "N") { Console.WriteLine(); Console.WriteLine("Super! Ausdauer ist das A und O. Wer mentale und körperliche Ausdauer vorweisen kann, der kann schon so gut wie alles erreichen im Leben."); } if ((abfrageBeweglichkeit == "y" || abfrageBeweglichkeit == "Y") && (abfrageAusdauer == "n" || abfrageAusdauer == "N")) { Console.WriteLine(); Console.WriteLine("Deine körperlichen Voraussetzungen könnten kaum besser sein! Ehrlich, ich sehe eine gute Zukunft für dich. Wir schaffen das!"); } if ((abfrageBeweglichkeit == "n" || abfrageBeweglichkeit == "N") && (abfrageAusdauer == "y" || abfrageAusdauer == "Y")) { Console.WriteLine(); Console.WriteLine("Meine Bytes schulden dir Ehrlichkeit: Es wird sehr hart für dich. Hier können wir festhalten, dass deine Vorgehensweise niemals offensiv sein sollte. Du musst extrem deine Körperkraft pushen, sonst hast du einfach keine Chance!"); } if ((abfrageBeweglichkeit == "y" || abfrageBeweglichkeit == "Y") && (abfrageAusdauer == "y" || abfrageAusdauer == "Y")) { Console.WriteLine(); Console.WriteLine("Nun, es nützt nicht sehr viel, wenn du eine gute Beweglichkeit vorweisen kannst, aber keine Ausdauer hast. An der Stelle wird dich dein Verstand auffangen müssen. Aber mich hast du ja jederzeit in der Tasche."); } if ((abfrageBeweglichkeit == "n" || abfrageBeweglichkeit == "N") && (abfrageAusdauer == "n" || abfrageAusdauer == "N")) { Console.WriteLine(); Console.WriteLine("Du bist nicht gelenkig, aber dafür ausdauernd? Nun. Nutze deine Ausdauer gut. Wenn du schlau bist und sich die Gelegenheit bietet, mache so oft du kannst Dehnübungen, vor allem bevor es körperlich anstrengend wird. Aber wenn du schon nicht allzu gelenkig bist, vernachlässige bloß deine Körperkraft nicht!"); } Console.WriteLine(); Console.WriteLine(); return "ergebnisKraftBeweglichkeitAusdauer"; } public static void Temperaturabfrage() { string yesOrNo = "c"; int geparsedTemp = 0; do { Console.WriteLine("Die Welt ist hart da draußen. Sag mir, ob du einschätzen kannst, wie viel °C draußen in etwa herrschen: "); string temp = Console.ReadLine(); Console.WriteLine("Die Temperatur beträgt {0} °C? (y/n)", temp); yesOrNo = Console.ReadLine(); geparsedTemp = Int32.Parse(temp); } while (yesOrNo == "n" || yesOrNo == "N"); Console.WriteLine("Danke für deine Offenheit!"); if (geparsedTemp < 10) { Console.WriteLine("Wenn du ohne Jacke raus gehst, wird dir kalt! Unterkühlung in deiner Situation wäre ein Fehler, der lebensgefährlich werden kann! Außerdem hast du zusätzliche Taschen um wichtige Materialien zu verstauen."); } if (geparsedTemp == 10) { Console.WriteLine("Eine leichte Übergangsjacke wäre sinnvoll."); } if (geparsedTemp > 10 && geparsedTemp <= 15) { Console.WriteLine("Ein Pullover genügt völlig."); } if (geparsedTemp > 20 && geparsedTemp < 29) { Console.WriteLine("Dir wird auf jeden Fall ein T-Shirt reichen!"); } if (geparsedTemp > 30) { Console.WriteLine("Geh lieber oben Ohne. Aber denk an eine leichte Kopfbedeckung!"); } Console.WriteLine("Nun hast du die Klamottenfrage geklärt- kommen wir zu etwas Wichtigerem.."); } } } Ist btw mein erstes WPF Projekt, und ich werde vermutlich nach diesen 2 Fenstern weitere "Seiten" hinzufügen und die "forward"+"backward"-Buttons entsprechend zu meinen Antwortmöglichkeiten verknüpfen. Bei den Zahleneingaben nehm ich z.B. einfach erstmal nen Slider. Und die Umsetzungsmöglichkeit für eine Art Lauftext suche ich auch schon eine Weile (will es halt möglichst einfach halten, damit ich auch wirklich selbst verstehen lerne was ich da tue) Das Ding hat meiner Meinung nach für mich großes Potential, weil ich es Storytechnisch immer weiter ausbauen kann, und vor allem neue Kenntnisse (von weiteren folgenden Sprachen) in diesem Projekt mit kleinen Gimmiks immer weiter umsetzen kann. Nochmal besten Dank! Fin
  18. Hallo! Als Frischling habe ich eine Konsolenapp geschrieben. Grober Inhalt/Ablauf: Starttext in Konsole: "Hallo, wie ist dein Name?" App wartet auf Eingabe + Bestätigung, folgend: Rückgabe der Konsole "Wunderbar, willst du ein Abenteuer mit mir erleben?" App wartet auf Eingabe + Bestätigung, folgend: Rückgabe der Konsole "Ist es draußen warm oder kalt?" App wartet auf Eingabe + Bestätigung usw usw usw Nun habe ich mein erstes Willkommensfenster in WPF erstellt. Aber wie setze ich nun das Clickevent so um, dass sich einfach nur der Text im Fenster ändert, sodass sich quasi eine Art "Konversation" ergibt? Vielleicht sehe ich den Wald vor lauter Bäumen nicht, bitte um möglichst anfängerfreundliche / sinnvollste Varianten mein Vorhaben umzusetzen... Die Eingabe der Nutzerantworten erfolgt zumeist via ButtonClicks. Beste Grüße, Fin
  19. Hallo! Ich schreibe gerade an meiner ersten eigenen HP. Nutze bewusst ausschließlich Html/Css. Für meine Hobbys habe ich Hexagonbilder erstellt. Soweit alles gut. Aber ich möchte sie nicht einfach "in den Raum werfen". Mir kam also die Idee, etwa 5 Hexagonbilder einfach mittig zu platzieren. Habt ihr ne Idee, wie ich das am einfachsten umgesetzt bekomme? Ich hab mir das etwa so vorgestellt, wie unten im Bild zu sehen. LG FIN
  20. Hallo Leute, wäre echt dankbar, wenn mir jemand Zwischenprüfungen für FIAE (am liebsten der letzten 5 Jahre inkl. Lösungen) schicken könnte: fl.behner@gmx.de Habe krankheitsbedingt (unverschuldet) leider über 5 Wochen gefehlt, bin echt drauf angewiesen, und habe keine money zum kaufen. ? Mit bestem Dank!

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...