# Java GitHub for Dummies erklärt



## Darknet (8. Okt 2018)

Kann mir einer mal erklären wie man die folgenden GitHub Projekte in sein Projekt einbaut?

Installation und Konfiguration:
https://github.com/adrianulbona/hmm
https://github.com/AhmedHani/Hidden-Markov-Model/blob/master/
eins von beiden reicht.

Ich habe troz Readme probleme das korrekt einzufügen das es funktioniert.

Nutze Eclipse


----------



## mihe7 (8. Okt 2018)

Ah, Eclipse: https://www.youtube.com/watch?v=sNEcpw8LPpo


----------



## Darknet (18. Okt 2018)

Habe das jetzt in Maven eintragen wie geht es weiter?
<dependency>
   <groupId>io.github.adrianulbona</groupId>
   <artifactId>hmm</artifactId>
   <version>0.1.0</version>
</dependency>


----------



## mihe7 (18. Okt 2018)

Der Rest sollte automatisch funktionieren, sprich: Du kannst das Zeug jetzt verwenden.


----------



## Darknet (18. Okt 2018)

das wäre gut nur
wen ich jetzt das einfach zum testen einfüge sind da auch lauter fehler:

```
public enum WikipediaViterbi {
   INSTANCE;

   public final Model<MedicalState, Symptom> model;

   WikipediaViterbi() {
       model = new Model<>(probabilityCalculator(), reachableStatesFinder());
   }

   public enum MedicalState implements State {
       HEALTHY,
       FEVER;
   }
 
   public enum Symptom implements Observation {
       NORMAL,
       COLD,
       DIZZY;
   }
 
   private ProbabilityCalculator<MedicalState, Symptom> probabilityCalculator() {
       return new ProbabilityCalculator<>(StartProbabilities.INSTANCE.data::get,
               EmissionProbabilities.INSTANCE.data::get,
               TransitionProbabilities.INSTANCE.data::get);
   }

   private ReachableStateFinder<MedicalState, Symptom> reachableStatesFinder() {
       return observation -> asList(MedicalState.values());
   }

   private enum StartProbabilities {
       INSTANCE;

       public final Map<MedicalState, Double> data;

       StartProbabilities() {
           data = new HashMap<>();
           data.put(MedicalState.HEALTHY, 0.6);
           data.put(MedicalState.FEVER, 0.4);
       }
   }

   private enum TransitionProbabilities {
       INSTANCE;

       public final Map<Transition<MedicalState>, Double> data;

       TransitionProbabilities() {
           data = new HashMap<>();
           data.put(new Transition<>(MedicalState.HEALTHY, MedicalState.HEALTHY), 0.7);
           data.put(new Transition<>(MedicalState.HEALTHY, MedicalState.FEVER), 0.3);
           data.put(new Transition<>(MedicalState.FEVER, MedicalState.HEALTHY), 0.4);
           data.put(new Transition<>(MedicalState.FEVER, MedicalState.FEVER), 0.6);
       }
   }

   private enum EmissionProbabilities {
       INSTANCE;

       public final Map<Emission<MedicalState, Symptom>, Double> data;

       EmissionProbabilities() {
           data = new HashMap<>();
           data.put(new Emission<>(MedicalState.HEALTHY, Symptom.NORMAL), 0.5);
           data.put(new Emission<>(MedicalState.HEALTHY, Symptom.COLD), 0.4);
           data.put(new Emission<>(MedicalState.HEALTHY, Symptom.DIZZY), 0.1);
           data.put(new Emission<>(MedicalState.FEVER, Symptom.NORMAL), 0.1);
           data.put(new Emission<>(MedicalState.FEVER, Symptom.COLD), 0.3);
           data.put(new Emission<>(MedicalState.FEVER, Symptom.DIZZY), 0.6);
       }
   }
}
```

Deshalb wie verwende ich das?

Tut mir leid wenn die Frage vieleicht zu blöde ist, ich tue mir da etwas schwer damit generell mit GitHub. Maven hat da zig verschiedene Ordner wo muss ich das einfügeen


----------



## mihe7 (18. Okt 2018)

Das hat nichts mehr mit github zu tun. 


Darknet hat gesagt.:


> Maven hat da zig verschiedene Ordner wo muss ich das einfügeen


Wie meinen? Du hast in Deinem Projekt eine pom.xml, dort hast Du hoffentlich die Dependency oben eingefügt. Ansonsten hat Dein Projekt ein Verzeichnis src/main/java - dort liegt Dein Quellcode (i. d. R. in Unterverzeichnissen, die Deiner Paketstruktur entsprechen).


----------



## Darknet (18. Okt 2018)

Ja das tun sie da liegen ich meine was ich dann damit anstellen kann. Ich meine nicht grunsätzlich mit den Programm das sucht Muster, ich meine wie ich das einstelle das es was macht.


----------



## mihe7 (19. Okt 2018)

Darknet hat gesagt.:


> Ich meine nicht grunsätzlich mit den Programm das sucht Muster, ich meine wie ich das einstelle das es was macht.


Zeigt Dir Eclipse jetzt Fehler an oder nicht? Wenn ja, welche? Vielleicht fehlen Dir noch die import-Anweisungen (Source -> Organize Imports).

Wenn nein, dann ist die Frage, wie Du mit speziell dieser Bibliothek ein Programm schreiben kannst. Das weiß ich nicht, ich würde mich da an die Doku dieser Bibliothek halten.


----------



## L0oNY (19. Okt 2018)

Ihr redet wunderbar an einander Vorbei.
@Darknet, wenn du die Bibliotheken mit Maven importierst, dann sollst du nicht den Code kopieren um ihn auszuführen, sondern die Schnittstellen/Methoden etc. verwenden, sprich ausführen oder Objekte von den vorhandenen Klassen zu verwenden.
Beispielsweise sieht das so aus (aus deinem oberen Beispiel rauskopiert)


```
Model<MedicalState, Symptom> model = new Model<>(probabilityCalculator(), reachableStatesFinder())
```

Das solltest du jetzt in einer Deiner Methoden aufrufen können, wenn du alles richtig importiert hast.

Was das Model kann und wozu es gut ist, ist (sollte sein) wiederum in der Doku der jeweiligen Bibliothek beschrieben sein. Ohne dir nahe treten zu wollen, sehe ich es allerdings schwarz, dass du verstehst, was du da machst oder auch nur was du da machen willst. Ich glaube da fehlt das allgemeine Verständnis des Aufbaus einer Java Anwendung.

Grüße
L0oNY


----------



## mihe7 (19. Okt 2018)

L0oNY hat gesagt.:


> Ihr redet wunderbar an einander Vorbei.


Das Gefühl habe ich auch


----------



## Darknet (21. Okt 2018)

```
Model<MedicalState, Symptom> model = new Model<>(probabilityCalculator(), reachableStatesFinder())
```
 Das wird alles nicht erkannt von Model bis reachableStatesFinder(). Habe das in Maven jetzt zig mal gemacht.


----------



## mihe7 (21. Okt 2018)

mihe7 hat gesagt.:


> Vielleicht fehlen Dir noch die import-Anweisungen (Source -> Organize Imports).


----------



## looparda (21. Okt 2018)

Vermutlich benutzt du maven falsch oder deine IDE. Du musst genau erklären wie du vorgehst damit wir den Fehler im Vorgehen finden können.


----------



## mihe7 (21. Okt 2018)

@looparda hat Recht. Das wird hier zum munteren Rätselraten.

Habe auf meinem Rechner noch ein altes Eclipse neon.2 gefunden, da funktioniert das z. B. wie folgt:

File -> New Project -> Maven -> Maven Project
Default Einstellungen verwenden, maven-archetype-quickstart, groupId org.javaforum, artifactId hmmtest -> Finish
Im Explorer Rechtsklick auf pom.xml -> Open with -> Text Editor, Dependency hinzufügen, Datei speichern
Im Explorer Rechtsklick auf das Projekt -> Maven -> Update Project -> OK
Jetzt lassen sich die Klassen aus der Maven-Dependency verwenden.


----------



## Darknet (21. Okt 2018)

So siehts bei mir aus:



das hmm1 und hmm.java habe ich selbst eigefügt

Unter Mave Project habe ich Articat Group ID und Articat ID eingeben wie es auf Github steht. Danach gelange ich auf dieser Ansicht siehe Bild. Dann weiß ich nicht mehr weiter. Auch wo ich bei dn vielen Ordner was einfügen muss


----------



## mrBrown (21. Okt 2018)

Auf dem Bild erkennt man nicht wirklich irgendwas...


Zeig mal den Inhalt der pom.xml und deiner hmm.java, aber nicht als Bild.


Dein Code muss unter src/main/java liegen, dort kannst du ganz normal deine packages und Klassen anlegen.


----------



## mihe7 (21. Okt 2018)

Darknet hat gesagt.:


> Unter Mave Project habe ich Articat Group ID und Articat ID eingeben wie es auf Github steht.


Oh, oh, ich ahne Böses... aber stell mal die Dateien rein, wie @mrBrown gesagt hat.


----------



## Darknet (21. Okt 2018)

```
<project xmlns="[URL]http://maven.apache.org/POM/4.0.0[/URL]" xmlns:xsi="[URL]http://www.w3.org/2001/XMLSchema-instance[/URL]" xsi:schemaLocation="[URL]http://maven.apache.org/POM/4.0.0[/URL] [URL]http://maven.apache.org/xsd/maven-4.0.0.xsd[/URL]">
  <modelVersion>4.0.0</modelVersion>
  <groupId>io.github.adrianulbona</groupId>
  <artifactId>hmm1</artifactId>
  <version>0.1.0</version>
</project>
```

hmm.java

```
package hmm1;

public class hmm {
   Model<MedicalState, Symptom> model = new Model<>(probabilityCalculator(), reachableStatesFinder())
}
```


----------



## mrBrown (21. Okt 2018)

@mihe7 deine Befürchtung hat sich bewahrheitet


----------



## mihe7 (21. Okt 2018)

@Darknet so funktioniert das nicht. Mal ein Beispiel, wie die pom.xml aussehen müsste (damit solltest Du Deines überschreiben können):

```
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.javaforum</groupId>
  <artifactId>hmm1</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>hmm1</name>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>io.github.adrianulbona</groupId>
      <artifactId>hmm</artifactId>
      <version>0.1.0</version>
    </dependency>
  </dependencies>
</project>
```
Danach Rechtsklick auf das Projekt -> Maven -> Update Project...


----------



## Xyz1 (21. Okt 2018)

Klassennamen werden großgeschrieben, Paketnamen klein....
Dementsprechend: Hmm

Außerdem wenn der Paketname hmm1 ist gilt für den Klassenname Hmm11 , um der Konvention zu folgen....


----------



## mihe7 (21. Okt 2018)

@DerWissende jetzt verwirr den armen Kerl doch nicht noch zusätzlich


----------



## Darknet (27. Okt 2018)

VIELEN DANK,
Habs jetzt eigefügt.
Jetzt nur noch HOW to use it:
Die Vorlage:

```
public class hmm<MedicalState, Symptom> {
   Model<MedicalState, Symptom> model = WikipediaViterbi.INSTANCE.model;
   List<Symptom> symptoms = asList(NORMAL, COLD, DIZZY);
   List<MedicalState> evolution = new MostProbableStateSequenceFinder<>(model).basedOn(symptoms);}
```
Gibt diese Fehler
Bound mismatch: The type MedicalState is not a valid substitute for the bounded parameter <S extends State> of the type Model<S,O>

Bound mismatch: The type Symptom is not a valid substitute for the bounded parameter <O extends Observation> of the type Model<S,O>
WikipediaViterbi cannot be resolved to a variable


----------



## mrBrown (27. Okt 2018)

Wie sehen denn deine MedicalState, Symptom und WikipediaViterbi aus?


----------



## mihe7 (27. Okt 2018)

@mrBrown kommt alles vom readme.md: https://github.com/adrianulbona/hmm 

@Darknet die enums MedicalState und Symptom sind innerhalb von WikipediaViterbi definiert. Wenn Du sie außerhalb von WikipediaViterbi verwenden willst, musst Du dem Compiler schon sagen, wo er sie findet. 

Einfachste Variante: `import static hmm1.WikipediaViterbi.*;` (wenn Du die Klasse woanders eingefügt hast, musst natürlich den Paketnamen anpassen).

Zweite Möglichkeit, Du setzt jeweils `WikipediaViterbi.` davor, z. B. `WikipediaViterbi.MedicalState`.


----------



## Darknet (28. Okt 2018)

Ist das das Model von WikipediaViterbi
worauf
	
	
	
	





```
import static hmm1.WikipediaViterbi.*;
```
 verweist?
So wie ich festgestellt habe gibt es das nicht in der Ursprungsdatei au Github.

```
public enum WikipediaViterbi {
   INSTANCE;

   public final Model<MedicalState, Symptom> model;

   WikipediaViterbi() {
       model = new Model<>(probabilityCalculator(), reachableStatesFinder());
   }

   public enum MedicalState implements State {
       HEALTHY,
       FEVER;
   }
   
   public enum Symptom implements Observation {
       NORMAL,
       COLD,
       DIZZY;
   }
   
   private ProbabilityCalculator<MedicalState, Symptom> probabilityCalculator() {
       return new ProbabilityCalculator<>(StartProbabilities.INSTANCE.data::get,
               EmissionProbabilities.INSTANCE.data::get,
               TransitionProbabilities.INSTANCE.data::get);
   }

   private ReachableStateFinder<MedicalState, Symptom> reachableStatesFinder() {
       return observation -> asList(MedicalState.values());
   }

   private enum StartProbabilities {
       INSTANCE;

       public final Map<MedicalState, Double> data;

       StartProbabilities() {
           data = new HashMap<>();
           data.put(MedicalState.HEALTHY, 0.6);
           data.put(MedicalState.FEVER, 0.4);
       }
   }

   private enum TransitionProbabilities {
       INSTANCE;

       public final Map<Transition<MedicalState>, Double> data;

       TransitionProbabilities() {
           data = new HashMap<>();
           data.put(new Transition<>(MedicalState.HEALTHY, MedicalState.HEALTHY), 0.7);
           data.put(new Transition<>(MedicalState.HEALTHY, MedicalState.FEVER), 0.3);
           data.put(new Transition<>(MedicalState.FEVER, MedicalState.HEALTHY), 0.4);
           data.put(new Transition<>(MedicalState.FEVER, MedicalState.FEVER), 0.6);
       }
   }

   private enum EmissionProbabilities {
       INSTANCE;

       public final Map<Emission<MedicalState, Symptom>, Double> data;

       EmissionProbabilities() {
           data = new HashMap<>();
           data.put(new Emission<>(MedicalState.HEALTHY, Symptom.NORMAL), 0.5);
           data.put(new Emission<>(MedicalState.HEALTHY, Symptom.COLD), 0.4);
           data.put(new Emission<>(MedicalState.HEALTHY, Symptom.DIZZY), 0.1);
           data.put(new Emission<>(MedicalState.FEVER, Symptom.NORMAL), 0.1);
           data.put(new Emission<>(MedicalState.FEVER, Symptom.COLD), 0.3);
           data.put(new Emission<>(MedicalState.FEVER, Symptom.DIZZY), 0.6);
       }
   }
}
```
 Dieser Code von der Readme hat aber die gleichen Fehler


----------



## mihe7 (28. Okt 2018)

Die anderen Klassen/Interfaces kommen aus der Lib.



Darknet hat gesagt.:


> Dieser Code von der Readme hat aber die gleichen Fehler


Der Code hat keinen Fehler, es sind nur die Imports nicht angegeben.


----------



## Darknet (29. Okt 2018)

Dann mach mich glücklich und sage mir wo diese Imports zu finden sind, vermut mal in der libary aber wo da genau


----------



## Thallius (29. Okt 2018)

Schon geil. 14 Tage rumwurschteln mit einem Build Tool. Ich hätte in der zeit ohne Build Tool mehrere Projekte fertig gehabt...

Aber schon voll effektiv son Build tool...


----------



## mrBrown (29. Okt 2018)

Thallius hat gesagt.:


> Schon geil. 14 Tage rumwurschteln mit einem Build Tool. Ich hätte in der zeit ohne Build Tool mehrere Projekte fertig gehabt...
> 
> Aber schon voll effektiv son Build tool...



Wenn du in 14 Tagen mehrere Projekte ohne Build-Tool fertig stellst, sagt das mehr über deine Projekte als über die Effektivität von Build-Tools aus...



Darknet hat gesagt.:


> Dann mach mich glücklich und sage mir wo diese Imports zu finden sind, vermut mal in der libary aber wo da genau


Nutz ne IDE.
Oder lies die Doku davon.
Wenn man dir jede Zeile vorkaust, wird hier niemand glücklich.


----------



## Meniskusschaden (29. Okt 2018)

Thallius hat gesagt.:


> Schon geil. 14 Tage rumwurschteln mit einem Build Tool. Ich hätte in der zeit ohne Build Tool mehrere Projekte fertig gehabt...
> 
> Aber schon voll effektiv son Build tool...


Na ja, nur weil ich jemanden finde, der z.B. mit Mathematik nicht klar kommt, ist das der Nachweis, dass Mathematik nichts bringt? Für einen Effizienzvergleich müsstest du schon für beide Ansätze Personen nehmen, die das auch können. Die Lehre aus diesem Thread ist doch eher, dass die "Zeitersparnis" durch den Verzicht des Erlernens der Grundlagen gerne überschätzt wird.


----------



## mihe7 (30. Okt 2018)

mrBrown hat gesagt.:


> Nutz ne IDE.


Das schlimme ist ja, dass er das bereits macht...


----------

