Zum Inhalt springen

speedi

Mitglieder
  • Gesamte Inhalte

    813
  • Benutzer seit

  • Letzter Besuch

Beiträge von speedi

  1. Lösung: Datenbankverbindung als Singleton und kein zwanghaftes Schließen der Connection

    Richtig. Wird sonst lustig, wenn jede Datenbank-Abfrage einen eigenen Socket erfordert. Der Socket ist auch nicht zwangsläufig sofort nach dem schließen der Verbindung wieder weg (ich weiß nicht wie das bei den jeweiligen Connectoren gemacht ist, aber generell muss man sich da bei einem TCP-Socket selbst drum kümmern, wenn man will das er danach gleich weg ist - vielleicht arbeiten viele Connectoren so, aber drauf wetten würd ich eben nicht). Ressourcen-Verschwenung ist es auch.

  2. Als Startwert deiner variablen könntest du einfach einen negativen Wert nehmen und die Dateneingabe in eine while-Schleife packen. Solang der Variablen-Wert negativ ist wiederholst du das Prozedere.

    Exceptions werden geworfen wenn Fehler auftreten. Eine IOException tritt auf, wenn beim lesen eines Streams irgendwas schief geht. Beim lesen von der Konsole kenn ich jetzt keinen Fall wo sowas passiert, von daher nicht so schlimm wenn du da einfach nur die Error-Message ausgiebst im catch-Teil (ich würde aber besser e.printStackTrace() verwenden, dann bekommst du nämlich genaue Infos welche methoden-Aufrufe dazu geführt haben.

    Wenn beim parsen eines Strings zu einem einfachen Datentyp (short, int, boolean, double, long, float) etwas schief geht wird eine NumberFormatException geworfen. Wenn du diese Abfängst kannst du angemessen drauf reagieren. Wenn du sie nicht abfängst würgst du damit den Prozess ab: dein Programm knackt weg.

    try{
    
       Integer.parseInt(...)
    
    }catch(IOException e){
    
       System.out.println("Dussl du! gib eine Zahl ein! Außerdem hab ich hier Integer verwendet"
    
    +" und das kann keine Kommas! Außerdem müsste man bei Double . anstatt , verwenden, weil sich "
    
    +"Programmiersprachen leider an der englischen Schreibweise orientieren! Das könnte man allerdings "
    
    +"umgehen indem man vor dem parsen des Strings alle kommas im String durch einen Punkt ersetzt. Die "
    
    +"replace-Methode der Klasse String hilft hier weiter.");
    
    }

  3. Danke. Du kennst also jetzt spontan keine Libs, die das mit AWT/Swing ermöglichen? Naja... werds schon irgendwie schaffen, notfalls selbst was über JNI machen.

    Danke jedenfalls für den Tip mit SWT. Da kann ich da mal schauen, wie die das regeln.

  4. Hi Leute,

    vielleicht ist dem ein oder anderen schon aufgefallen, dass bei Windows7 recht häufig der Fortschritt eines Ladebalkens im Icon der Taskleiste angezeigt indem sich dieses proportional zum balken von links nach rechts grün füllt.

    Weiß jemand wie man diesen Effekt auch bei Java-Anwendungen nutzen kann?

    gruß Daniel

  5. Ein Kollege von mir hat sich eines aus einem China-Urlaub mitgebracht. Meine Meinung: Totaler Murks, aber wen es darum geht Blicke auf sich zu ziehen für den ists vielleicht trotzdem was.

    Das Ding schaut von Außen zu 95% wie ein iPhone aus. Es ist nur etwas länglicher. Die Display-Qualität ist einfach unter aller Sau (wenig Farben und schlechte Auflösung). Die Software ist Java-Basiert und der iPhone-Software nachempfunden. Die Steuerung im Hauptmenü ist sehr ähnlich, aber sobald man in die Apps klickt sieht man den Unterschied und der Browser kann keine Website so anzeigen wie sie aussehen sollte (Bilder fehlen halt einfach: das konnte mein altes SoneEricsson k810 auch schon so anzeigen). Multitouch gibts nicht.

    Die Bedürfnisse die mich zum Kauf des iPhones bewogen habe werden mit einem billig-Plagiat jedenfalls nicht abgedeckt:

    - Exchange-Anbindung

    - ordentliches Internet

    - Virtual-Voice-Mail

    - anbindung an iTunes (für Podcasts und Nachrichten)

    - breites Angebot an zusätzlicher Software

    Zur rechtlichen Situation:

    Es ist in Deutschland nicht verboten in Punkto Software und Design von anderen abzuschauen (solang man kein Copyright verletzt und den Software-Code vielleicht sogar selbst schreibt und das Ergebnis nur das gleiche ist), aber es ist selbstverständlich verboten unter einem geschützten fremden Namen ein Produkt anzubieten welches dann sogar noch darauf abzielt durch täuschung verkauft zu werden.

  6. Aus deinem Post geht leider nicht hervor, was du genau willst. Generell gibts zwei bzw drei Möglichkeiten:

    1. Einbauen des jetzigen Codes in eine HTML_Seite als Applet (Strinknormaler Java-Code, dein Hauptfenster erbst dann halt nicht mehr von JFrame oder Frame sondern von Applet).

    Nachteil: Der Client muss eine Java-Runtime mit entsprechendem Browser-Plugin installiert haben.

    2. Java Webstart (Alles bleibt wie es ist und beim Click auf einen Link wird das Programm mit standardisierten Java-Webstart-Technologien, auf dden Client übertragen und ausgeführt)

    Nachteil: Der Client muss eine Java-Runtime installiert haben und das Programm läuft am Ende nicht im Browser sondern als eigenes Fenster.

    3. Du ersetzt die GUI durch ein HTML-Pendant und arbeitest mit einem Dynamischen-Webserver (z.B. Java-Servlets). Hierbei ist jedoch ein gewisser Implementierungsaufwand zu erwarten und einige Sachen sind damit nicht oder nur schwer möglich (z.B. Animationen die du bereits in deiner JAVA-GUI implementiert hast).

    Nachteil: Aufwand und zum Teil eingeschränkte Möglichkeiten und ein entsprechender Webserver muss natürlich auch vorhanden sein.

    Vorteil: Der Client benötigt kein JAVA, da er die JAVA-Code geschcikt bekommt, sondern lediglich HTML-Code, welcher mittels JAVA-Technologien auf dem Server dynamisch erzeugt wird.

  7. Ich hatte gehofft, man könne das einfach irgendwie oder irgendwo auslesen.

    In den Ordnern die SVN Anlegt erstellt es automatisch einen unsichtbaren Ordner namens ".SVN". Darin befindet sich eine Datei namens "Entries". Das Datenformat schaut nicht super schwer aus - müsste eigentlich zu machen sein. Die Revision findest du darin jedenfalls auch.

  8. Ich habe mir sowas schonmal gebaut - allerdings innerhalb eines Servlets. Wobei das mit Applets eigentlich genau das gleiche in grün sein sollte.

    Bei JSP:

    Speicher die SessionID, die IP und den Usernamen des Clients in einer DatenbanktTabelle mit der Zeit des einloggens. Wenn der User dann abfragen stellt musst nur in der Datenbank schauen, ob der Eintrag für diese Verbindung existiert und wie der Username dazu ist. Die IP habe ich nur gespeichert um zu verhindern, dass ein anderer die SessionID fäschen kann - bei der IP dürfte das nämlich schon etwas schwerer werden (aber auch nicht unmöglich).

    Bei Applets:

    Da kannst du eigentlich genau so vorgehen, nur dass du dir die Session-ID selbst erzeugen musst. Am besten erzeugst du die Serverseitig um sicher zu gehen dass nicht zufällig ein anderer User die gleiche ID hat und schickst sie dann dem Client(z.B. byte[16] mit Random-Werten - dann prüfst du, ob das mit einem anderen eingeloggten user übereinstimmt und we ja erzeugst eine neue id).

    Ich hatte damals noch einen Thread am laufen, der einmal in der Minute der Login-Tabelle gesagt hat, dass sie alle einträge rausschmeißen soll die älter als 15 minuten sind (Auto-Logoff).

    Die Login-Infos kannst du anstelle einer Datenbank-Tabelle auch genauso gut in einer lokalen Objekt-Liste halten ich hab das damals nur so gelöst um sicher zu stellen, dass mehrere JSP-Server parallel arbeiten können.

    _________________________________

    Die Idee als Authentifizierung das Socket-Objekt zu verwenden ist gar nicht übel. Ich würde aber zusätzlich trotzdem noch eine klassische SessionID (eine zufällige, einmale Abfolge von z.B. 128-Bit verwenden) - kommt halt bissl drauf an wie gut du den Laden abdichten willst/musst. Referenzen auf gleichheit prüfen geht nämlich schwupp-die-wupp wenn du aber bei zwei Arrays auf ihren Inhalt vergleichen musst ist das langsamer.

  9. Das Problem ist, daß Du das so ohne Weiteres nicht können wirst.

    Probleme gibts ab dem Zeitpunkt, wo Du einen Text reinschreiben willst, der erheblich kürzer ist und den Rest quasi auffüllen mußt, oder wenn Du einen Text hast, der länger ist, dann überschreibst Du theoretisch den Rest der Datei.

    Vorschlag: Datei in Hauptspeicher einlesen, modifizieren, und komplett "neu" wieder auf Speichermedium schieben - fertig.

    ??

    Respekt. Bei dieser Fragestellung wärs mir jetzt nicht möglich gesewen solche Probleme zu erkennen.

    Wo liegt denn genau das Problem? Willst du die Ganze Datei neu schreiben und dabei alle enthaltenen Daten ersetzen? Willst du nur einen bestimmten Teil finden und ändern? Wie groß ist die Datei üblicherweise?(bei mehreren MB würde ich das etwas anders lösen als wenns nur ein paar KB-Config-File ist)

    Wie schaut das Dateiformat aus?

  10. Was den Treiber und das Windows Update angeht:

    MS hatte vor 2 Jahren oder so mal ein Windows Update welches die alten Realtek-Treiber irgendwie gekillt hat. Sound hat man zwar immer noch gehabt aber glaub nur Stereo und die Konfigurationssoftware ging nicht mehr. Kurz darauf gabs von MS wieder ein Update welches das Problem gelöst hat. Klar das Realtek dieses Update mittlerweile gleich zum Treiber mit dazu packt.

    Aber ich glaub kaum, dass das beschriebene Problem damit zu lösen ist. Übers automatische Update wurde das Update schon vor zwei Jahren an die betroffenen Rechner verteilt und der Effekt das gar nichts mehr geht auch unter Linux ist damit nicht erklärt. Ahnung hab ich aber auch keine.

  11. Was ich konkret verwenden würde, würde ich von der Problemstellung abhängig machen

    Klar. Die von mir gennanten Varianten funktionieren nur bei Funktionsgraphen (jede X-Coordinate wird nur einmal vom Graphen "befahren").

    DrawPolygon macht wirklich nicht immer das was man will... Da gibts schnell mal "komische Effekte". Kann man aber für Graphen mit raltiv wenigen zu verbindenden Punkten durchaus machen.

    Die Methode mit drawLine nach unten hat bei mir bislang immer gefunzt. Zuletzt hab ich die bei einem Höhendiagramm verwendet mit zig 1000 Punkten von denen natürlich nur ein bruchteil gezeichnet werden konnte. War schon flott genug. Wenn man weniger Punkte hat oder die Punkte mehrere X-Pixel auseinander liegen muss man sich die punkte dazwischen halt interpolieren, das ist aber auch recht einfache Mathematik.

    Ich hab bislang meist mit linearen Projektionen gearbeitet und mit der drawLine-Methode. War eigentlich recht simpel und hat mich auch bei dem Höhendiagramm nicht im Stich gelassen.

  12. Schau dir mal Java-Ist auch eine Insel von Galileo Computing an. Das Bucht ist kostenlos im Internet zu finden.

    -Bubblesort

    Zum Thema Bubblesort solltest du dich erstmal allgemein über den Alogithmus informieren. Wenn du es dann noch schaffst das ganze als PAP oder Struktogramm auf Papier zu bringen ist es eigentlich ein klacks, das dann in Java zu codieren - vorausgesetzt du besitzt das nötige Grundwissen was Schleifen und Arrays angeht.

    -OOP

    -Klassen, Datenkapselung

    -Vererbung

    Das oben genannte Buch anschauen! Aber am besten bevor du damit anfängst dich am Bubble-Sort zu versuchen. Das du nach diesen Dingen fragst lässt mich stark vermuten, dass du bislang noch überhaupt keine Erfahrung mit (objektorientierter) Programmierung hast. Diese solltest du dir erstmal aneignen. Der Bubble-Sort Alogithmus wäre obendrei eine nette Übungsaufgabe. Toll wärs wenn du ihn erstmal mittels Arrays löst und dann auf selbst implementierte verkettete Listen umbaust (zum Thema Klassen, Referenzen, Objektorientierung).

  13. Da fallen mir mehrere Sachen ein. Entweder zu zeichnest bei jeden Pixel, den du auf der x-Achse nach vorn gehst eine Linie nach unten oder du arbeitest mit ((Graphics)g).drawPolygon(...). Da kannst dann den Startpunkt des Diagrammsegments, den Endpunkt und dann natürlich die Drunterliegenden Punkte auf der x-Achse angeben. So hab ich solche Dinge bis jetzt meistens gemacht.

  14. Ich denke da auch grad an den Fachinformatiker/Anwendungsentwicklung.

    Da ich das selbst aus so ziemlichen gleichen Gründen gelernt hate die du grade geschildert hast kann ich dir folgendes sagen:

    Der kaufmännische Anteil steht heute bei vielen Berufen mit im Lehrplan. Aber ich denk der Anwendungsentwickler ist von den großen IT-Ausbildungsberufen da am weitesten weg (außer du musst Buchhaltungssoftware schreiben :) ).

    Ob du allerdings in der Ausbildung ordentlich programmieren lernst ist sehr abhängig von der Firma die dich ausbildet. Die Berufsschule ist dafür nach meiner Erfahrung kein großer Beitrag und viele Firmen fördern den Nachwuchs unzureichend (beim Windows installieren, kabel ziehen und anderen weniger anspruchsvollen Tstigkeiten lernt man halt nicht programmieren). Deshalb halte ich es für wichtig darauf bei der Ausbildungsplatzsuche besonders zu achten. Im Münchner Raum gibt es sehr viele Firmen die Fachinformatiker ausbilden und einige kümmern sich auch recht gut um den Nachwuchs - ist aber zum pendeln wahrscheinlich zu weit weg von Passau.

  15. Ich denke das wird nicht so funktionieren, denn wenn der Thread schläft und der Button geklickt wird, dann wird nachdem der Button wieder aktiv ist, die Aktion des Listeners trotzdem ausgeführt. Man unterbindet ja mit einem sleep nicht die Abarbeitung.

    So wie ich es geschrieben habe würde es funktionieren. Du legst ja nicht die GUI schlafen sondern erstellst einen neuen Thread der zuersteinmal die Buttons abschaltet dann schläft(nur dieser eine Thread schläft! - alle anderen natürlich nicht) und dann die Buttons wieder anschaltet.

    Wenn du auf einen deaktivierten Button klickst werden seine ActionListener natürlich nicht gerufen, aber der klick wird natürlich verarbeitet, da die GUI eben nicht schläft.

    Ich würde einen Thread bevor ein paralleler Thread schläft eine synchronisierte und final Boolvariable entsprechend setzen und diese innerhalb des Button-Listeners abfragen. Zusätzlich wäre es dann auch sinnvoll eine Statusnachricht einzubauen, die dem User mitteilt, dass gerade gearbeitet wird.

    Wenn der Grund wieso teile der GUI disabled sind nicht ersichtlich ist wäre das sicher eine sinnvolle Sache. Allerdings darf man dann die Buttons nicht mit setEnabled(boolean B) bearbeiten, da nütlich ausgeschaltete Buttons ihre ActionListener nicht mehr rufen - d.h. man müsste sich was einfallen lassen, damit der User nicht erst beim clicken merkt, dass sein vorhaben nicht möglich ist (z.B. manuelles setzen der Farbe).

  16. Wenn du jemand findest der dir für das System noch 150-200 € gibt kannst eigentlich sehr glücklich sein (zumal das Gerät in Punkto Energieeffizienz einem neuem System mit ähnlicher Leistung meilenweit unterlegen sein dürfte).

    Wenn du die Schrammen am Gehäuse ausbesserst kannst das vielleicht einzeln nochmal zu Geld machen und damit unterm Strich eventuell sogar mehr raus schlagen.

    Eine gute Platform zum PC verkaufen ist immer auch Ebay.

    Da scheint der Spruch "Jeden Tag geht ein Depp durchs Isartor" wirklich zu stimmen, wenn ich mir anschaue, was da manche bereitwillig für gebrauchte PCs von vor 4 Jahren hinblättern nur weil Schlagworte wie "Gaming-PC", "Multimedia" oder "High-End-Grafikkarte" drinnen stehen.

  17. new Thread(){
    
    public void run(){
    
    DeineHauptKlasse.this.ButtonStandard.setEnabled(false);
    
    DeineHauptKlasse.this.ButtonFine.setEnabled(false);
    
    DeineHauptKlasse.this.ButtonSwitchOutput.setEnabled(false);
    
    DeineHauptKlasse.this.ButtonMinMax.setEnabled(false);
    
    DeineHauptKlasse.this.ButtonGetConfigFile.setEnabled(false);
    
    DeineHauptKlasse.this.ButtonGetFiles.setEnabled(false);
    
    DeineHauptKlasse.this.ButtonDeleteMeassurement.setEnabled(false);
    
    DeineHauptKlasse.this.ButtonFirmware.setEnabled(false);
    
    DeineHauptKlasse.this.ButtonGetFtpFile.setEnabled(false);
    
    DeineHauptKlasse.this.ButtonSetFtpFile.setEnabled(false);
    
    
    
    DeineHauptKlasse.this.ButtonStandard.paintImmediately(0, 0, 500, 600);
    
    DeineHauptKlasse.this.ButtonFine.paintImmediately(0, 0, 500, 600);
    
    DeineHauptKlasse.this.ButtonSwitchOutput.paintImmediately(0, 0, 500, 600);
    
    DeineHauptKlasse.this.ButtonMinMax.paintImmediately(0, 0, 500, 600);
    
    DeineHauptKlasse.this.ButtonGetConfigFile.paintImmediately(0, 0, 500, 600);
    
    DeineHauptKlasse.this.ButtonGetFiles.paintImmediately(0, 0, 500, 600);
    
    DeineHauptKlasse.this.ButtonDeleteMeassurement.paintImmediately(0, 0, 500, 600);
    
    DeineHauptKlasse.this.ButtonFirmware.paintImmediately(0, 0, 500, 600);
    
    DeineHauptKlasse.this.ButtonGetFtpFile.paintImmediately(0, 0, 500, 600);
    
    DeineHauptKlasse.this.ButtonGetFtpFile.paintImmediately(0, 0, 500, 600);
    
    
    try
    
    {
    
    Thread.sleep(10000);
    
    }
    
    catch (InterruptedException e)
    
    {
    
    System.out.println("geht nicht");
    
    }
    
    
    DeineHauptKlasse.this.ButtonStandard.setEnabled(true);
    
    DeineHauptKlasse.this.ButtonFine.setEnabled(true);
    
    DeineHauptKlasse.this.ButtonSwitchOutput.setEnabled(true);
    
    DeineHauptKlasse.this.ButtonMinMax.setEnabled(true);
    
    DeineHauptKlasse.this.ButtonGetConfigFile.setEnabled(true);
    
    DeineHauptKlasse.this.ButtonGetFiles.setEnabled(true);
    
    DeineHauptKlasse.this.ButtonDeleteMeassurement.setEnabled(true);
    
    DeineHauptKlasse.this.ButtonFirmware.setEnabled(true);
    
    DeineHauptKlasse.this.ButtonGetFtpFile.setEnabled(true);
    
    DeineHauptKlasse.this.ButtonSetFtpFile.setEnabled(true);
    
    
    }
    
    }
    
    }.start();

    Wenn du Thread.sleep einfach so direkt im ActionListener rufst legst du den gesamten GUI-Thread schlafen. Das musst du einfach nur parallelisieren, dann hauts hin. Ob du das direkt über einen Thread oder über einen Timer machst ist am Ende Jacke wie Hose.

    Übrigens: Klassen-Variablen werden klein geschrieben. Neue Wörter in der Variable beginnen mit einem großbuchstaben (z.B. "buttonForClosingTheApplication").

  18. So langsam werd ich echt blöd hier. Ich wollte einem JDesktopPane als Hintergrund eine bedienbare Karte(eine komplette Komponente mit MouseListenern etc...) geben. Damit die JDesktopPanes über dieser liegen habe ich dann einfach die add(Component comp) überschrieben, so dass die Componente dort immer an oberster Stelle eingefügt wird (es sei denn es handelt sich um die Karte - die ist immer an niedrigster Stelle).

    Soweit funktioniert das auch ganz gut, allerdings in dem Moment wo ich ein JInternalFrame minimiere wird das entsprechende JDesktopIcon erstmal nicht angezeigt, solang bis ich an die Stelle klicke wo es sein sollte (dann tauchts auf). Hab auch schon versucht das teil repainten zu lassen - negativ.

    Wie würdet ihr das angehen, wenn ihr eine Komponente als Hintergrund eines JDesktopPanes setzen wollt?

    Source-Code:

    		desktop = new JDesktopPane(){
    
    			@Override
    
    			public Component add(Component comp) {
    
    				if(comp == viewer){
    
    					return super.add(comp,getComponentCount());
    
    				}else{
    
    					return super.add(comp,0);
    
    				}
    
    			}
    
    
    		};
    
    		viewer = new GeoViewPanel();
    
    		desktop.add(viewer,desktop.getComponentCount());

  19. Sorry... ich hab die falsche Methode gepostet.

    Nimm mal:

    
    JOptionPane.showConfirmDialog(frame,"Frage?","Eine Frage", JOptionPane.YES_NO_OPTION);

    Dieser Weg ist der übliche für kleine Standard-Dialoge, deshalb bietet Java-Swing hier auch zig Möglichkeiten vordefinierte Dialoge in einer Zeile zu erstellen und Rückgabewerte genauso einfach zu bekommen.

  20. Jedoch können

    die Rechner aus VLAN 1 nicht mehr ohne weiteres mit Rechnern aus VLAN 2 kommunizieren.

    Toll... und was nützt mir das dann für meinen konkreten Problemfall? Wie ich oben schon geschrieben habe, wird die Lösung jetzt ein 3Com-Switch werden der entsprechende Funktionen zum Limitieren/Blockieren des Broadcast/Multicast-Traffics drinnen hat. Ich denk die Lösung ist halbwegs kostengünstig und vor allem gibts bei umbauten am Netz keinerlei zusätzlichen Aufwand wenn das Teil einmal konfiguriert ist.

  21. probiers mal mit:

    int i = JOptionPane.showMessageDialog(null,message,"Frage",JOptionPane.OK_CANCEL_OPTION);

    Sicherlich gibts bei deiner Variante auch ne möglichkeit den Rückgabewert abzufragen, lies doch einfach mal in der Java-API-Documentation nach.

  22. Also die Variante mit dem Router fällt weg. Die Kommunikation von Testnetz ins Frmennetz wäre zwar so möglich aber anders rum schauts nicht so toll aus (vom Firmennetz ins Testnetz). natürlich lässt sich das alles Konfigurieren, aber da wir unser testnetz häufiger mal verlegen und damit auch wieder sämtliche Netzwerkkonfigurationen umbauen ist das viel zusätziche Arbeit. Ein Fass ohne Boden. Was wäre z.B. wenn ich vom Hausnetz Remote an die Rechner im testnetz will? Das geht dann nichtmal wirklich mit Portforwarding, weil ich natürlich jeden Port nur an einen Rechner weiterleiten kann.

    Der Tipp mit dem Cisco Routerwar gar nicht so abwegig. Ich hab nochmal fleißig Handbücher von besseren Switches geladen und geselen. Hab jetzt einen entdeckt, der so ne Art Multicast/Broadcast Limiter drinnen hat (in %, Bits/s oder Packets/s). Ich denk der wirds jetzt werden. Dann kann ich auch mal wenns not tut ein klein wenig ins Firmennetz Broadcasten, um was zu testen - Hauptsache ich blas nicht wieder 100 MBit da rein.

    Was den PC mit zwei Netzwerkkarten angeht: Das hatte ich mal mit Windows XP versucht => Das Firmennetz hat uns automatisch vom Netz genommen weils irgendwie nen Ring gab - unser Netz war aber definitv nur mit über den PC mit zwei NICs mit dem Hausnetz verbunden.

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...