Skip to content

Instantly share code, notes, and snippets.

@javagl
Created November 9, 2018 14:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save javagl/fc4969e4e296ba749fd5fa3a85af20fa to your computer and use it in GitHub Desktop.
Save javagl/fc4969e4e296ba749fd5fa3a85af20fa to your computer and use it in GitHub Desktop.
CUB-extended-setup

CUB-extended-setup

Was kann man denn sonst noch so mit Computern machen?

Ein Maven-Projekt erstellen

Maven ist ein System, mit dem man in Java besonders leicht Bibliotheken (Libraries) verwenden kann, die eine vorgefertigte Funktionalität anbieten. (Man muss Maven nicht verwenden. Das alles könnte man auch in einem "reinen Java-Projekt" machen. Aber mit Maven ist es vieeel einfacher...)

Anleitung:

  • Starte Eclipse
  • (Im Menü: ) "File" -> "New" -> "Other" auswählen
  • (Im Dialog:) "Maven" -> "Maven Project" auswählen
  • "Next" klicken
  • (Im Dialog: ) Checkbox oben bei "Create a simple project" wählen
  • "Next" klicken
  • Im Dialog eingeben:
    • Group Id: com.example
    • Artifact Id: cub"
    • "Finish" klicken

Projekt vorbereiten für die Chemie-Library

In diesem Projekt soll eine Bibliothek verwendet werden, die einige vorgefertigte Funktionen für Chemiker anbietet. Disclaimer: Diese Library ist keine "Empfehlung". Ich stehe in keiner Verbindung mit den Autoren. Es war nur eine der erstbesten Libraries, die bei einer Suche nach "java chemistry library" auftauchten, und die einige interessante Funktionen bietet...

Die library muss als Abhängigkeit ("depencency") zum Projekt hinzugefügt werden.

Anleitung:

  • In der "Project Explorer"-Ansicht auf der linken Seite das "cub"-Projekt ausklappen.
  • Ganz unten die "pom.xml"-Datei doppelklicken. Es öffnet sich eine Übersichtsseite (dort, wo sonst der Java-Code zu sehen ist).
  • Am unteren Rand der Übersichtsseite das Tab mit dem Namen "pom.xml" auswählen. Es erscheint der Editor mit ein bißchen XML-Code.
  • Den kompletten Inhalt dieser Datei hiermit ersetzen: (wie das am einfachsten geht, steht unten)
<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>com.example</groupId>
  <artifactId>cub</artifactId>
  <version>0.0.1-SNAPSHOT</version>

  <dependencies>
  <dependency>
    <groupId>com.epam.indigo</groupId>
    <artifactId>indigo</artifactId>
    <version>1.2.3.r0</version>
  </dependency>
  <dependency>
    <groupId>com.epam.indigo</groupId>
    <artifactId>indigo-renderer</artifactId>
    <version>1.2.3.r0</version>
  </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.3.2</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
    </plugins>
  </build>

</project>
  • Am einfachsten:
    • Den Inhalt hier mit der Maus markieren
    • STRG+C drücken (zum Kopieren)
    • Zum Editor in Eclipse wechseln
    • STRG+A drücken (um alles auszuwählen)
    • STRG+V drücken (um das Kopierte einzufügen)
    • STRG+S drücken (um die Datei zu speichern)
  • Evtl. erscheint dann ein Dialog, in dem steht, dass die Library runtergeladen wird. Einfach kurz warten.
  • Wichtig: Das Projekt muss dann "aktualisiert" werden
    • Das "cub"-Projekt im Project Explorer auswählen
    • ALT+F5 drücken
    • Dialog mit "OK" bestätigen

Häh und was war das jetzt?

Wenn Software-Projekte im Lauf der Zeit größer werden, werden sie of sehr kompliziert. Eine der wichtigsten Aufgaben von Softwareentwicklern ist es, diese Komplexität so gering wie möglich zu halten, und die Komplexität, die sich nicht vermeiden läßt, handhabbar zu machen.

Praktisch jedes Software-Projekt verwendet Bibliothen, wie in diesem Fall die Chemie-Library. Und oft werden viele Bibliotheken verwendet, mit verschiedenen Versionsnummern. Wenn man Maven verwendet, werden alle Informationen über das Projekt und die verwendeten Bibliotheken in der pom.xml-Datei zusammengefasst. Diese Datei kann von Maven verarbeitet werden, um alle benötigten Bibiotheken automatisch runterzuladen.

Im Beispiel oben ist in der pom.xml die Information enthalten, dass die Chemie-Library benötigt wird:

<dependencies>
  <dependency>
    <groupId>com.epam.indigo</groupId>
    <artifactId>indigo</artifactId>
    <version>1.2.3.r0</version>
  </dependency>
  ...
</dependencies>

(und eine weitere für das Anzeigen der Moleküle). Wenn man eine andere Library verwenden will, findet man auf der Webseite dieser Library meistens Informationen, wie die "Maven Koordinaten" sind - das heißt, wie der <dependency>-Eintrag aussieht, den man in den <dependencies> hinzufügen muss, damit Maven die Library automatisch findet.

(Man muss das nicht per Hand in der XML-Datei machen. Eclipse bietet da auch eigene Funktionen dafür. Aber tatsächlich ist es per Hand nicht viel aufwändiger...)

Chemie-Library in einem Beispielprogramm verwenden

In einem kleinen Beispielprogramm soll jetzt die Library verwendet werden, um ein Bild von einem Molekül zu erstellen. Das Beispielprogramm ist von http://ctr.wikia.com/wiki/Depict_a_compound_as_an_image#Indigo.2FJava übernommen.

Anleitung:

  • Diesen Quellcode hier als neue Klasse einfügen: (wie das am einfachsten geht, steht unten)
import java.io.IOException;

import com.epam.indigo.Indigo;
import com.epam.indigo.IndigoObject;
import com.epam.indigo.IndigoRenderer;

// From http://ctr.wikia.com/wiki/Depict_a_compound_as_an_image#Indigo.2FJava
public class RenderMoleculeToFile {
    public static void main(String[] args) throws IOException {
        Indigo indigo = new Indigo();
        IndigoRenderer renderer = new IndigoRenderer(indigo);

        IndigoObject mol = indigo.loadMolecule("CN1C=NC2=C1C(=O)N(C(=O)N2C)C");
        mol.layout();
        indigo.setOption("render-output-format", "png");
        indigo.setOption("render-comment", "Caffeine");
        indigo.setOption("render-comment-position", "top");
        indigo.setOption("render-image-size", 200, 250);
        indigo.setOption("render-background-color", 1.0f, 1.0f, 1.0f);
        renderer.renderToFile(mol, "caffeine.png");
    }
}
  • Am einfachsten:
    • Den Inhalt hier mit der Maus markieren
    • STRG+C drücken (zum Kopieren)
    • Zu Eclipse wechseln
    • Im Project Explorer den Ordner "src/main/java" auswählen
    • STRG+V drücken (um das Kopierte einzufügen - Eclipse erkennt automatisch, dass das eine Klasse ist)
  • Das Programm starten. Es wird eine Datei caffeine.png erstellt, die ein Koffein-Molekül darstellt.
  • Im Project-Explorer das "cub"-Projekt auswählen
  • F5 drücken
  • Im Project-Explorer erscheint unten caffeine.png. Diese Datei doppelklicken zum Anzeigen.

Was macht das Programm genau?

Ich hab' keine Ahnung :-)

In der Zeile

IndigoObject mol = indigo.loadMolecule("CN1C=NC2=C1C(=O)N(C(=O)N2C)C");

wird offenbar ein "Molekül"-Objekt Namens mol erstellt. Danach werden einige Parameter gesetzt, die festlegen, wie das Bild aussehen soll, das erstellt wird. In der letzten Zeile wird dann das Molekül-Objekt mol in eine Datei gemalt.

Der String, aus dem dieses Molekül erstellt wird, ist offenbar im https://de.wikipedia.org/wiki/Simplified_Molecular_Input_Line_Entry_Specification - Format. Versuche einfach mal, dort einen anderen String einzusetzen, und schau', welches Bild rauskommt.

Auf https://lifescience.opensource.epam.com/indigo/api/index.html gibt es eine ausführliche Dokumentation für die Library, mit vielen kleinen Beispielen. Schau' dir die Beispiele an, und versuche, einige der Funktionen dort zu nutzen. Als Test habe ich eben die Zeile mit loadMolecule ersetzt durch das hier:

IndigoObject mol = indigo.createMolecule();
IndigoObject atom1 = mol.addAtom("H");
IndigoObject atom2 = mol.addAtom("H");
IndigoObject atom3 = mol.addAtom("O");
IndigoObject bond1 = atom1.addBond(atom3, 1);
IndigoObject bond2 = atom2.addBond(atom3, 1);

und das Bild hat dann ein Wasser-Molekül gezeigt.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment