Bekannte in Java geschriebene Software?

YMMD :smiley:

Ja das kann passieren, wobei google recht gut korrigiert. Außer es fällt einen das wort nicht ein. Aber mal die Seitenleiste nach dem Licence Link durchzusehen, kann nicht zu viel verlangt sein.

und wenn man nicht gut Englisch kann und jemand vll die Lizenz Schon kennt

Wenn du dich mit Englisch nicht anfreunden kannst, bist du im falschen Bereich unterwegs.
Viele gute Quellen und fast jede Dokumentation im IT-Bereich findest du in Englisch.

Für einzelne Wörter gibt es noch dict.leo.org

Gruß

Diese Lizenz findest du auch auf Wikipedia. Apache-Lizenz – Wikipedia

wenn du nichts kommerzielles machst sind nahezu alle Lizenzen recht unkritisch. Apache ist eine der freundlicheren

sollte man als angehender programmierer drigend was daran ändern

natürlich gibt es auch vieles übersetzt, aber man läuft immer gefahr eine veraltete oder fehlerhaft übersetzte version zu greifen, und dann hat man erst richtig die probleme
außerdem sollte man was lizenzen angeht sich schon eher in richtung englisch orientieren, denn wenn du eine lizenz in deutsch schreibst und jemand der kein deutsch kann sich diese erst übersetzen lassen muss können dabei genau solche übersetzungsfehler auftreten
englisch dagegen ist weltsprache und wird in jedem halbwegs zivilisierten land mitlerweile schon in der grundschule gelehrt und auch in sehr vielen ländern (unter anderem auch deutschland) prüfungsfach
es macht also schon durch aus sinn in der IT über gute englisch kenntnisse zu verfügen
man muss es ja nicht gleich fließend sprechen können, aber zumindest lesen und verstehen und ggf kurze dinge selbst schreiben

Meiner bescheidenen Meinung nach spielt die Sprache an sich nicht die erste Geige. Mir sind die Tools und die Bibliotheken viel wichtiger als die Sprache. Z.B. in Java habe ich a) Eclipse, b) Maven und tausende an freien Bibliotheken für jedes erdenkliche Problem. In C++ hätte ich zwar ähnlich viele oder mehr freie Bibliotheken, aber die Tools fehlen mir. Make, Automake, CMake kommen nicht an Maven heran. Auch fehlt mir Eclipse, eine der besten IDEs dass ich je hatte (und ich benutzte schon Borland Builder, Visual Studio, und diverse andere IDEs).

Dazu fehlen mir noch in C++ viele Sprach-Features die Java einfach effektiver machen. GC ist natürlich das wichtigste Feature, aber es fehlen auch Annotations und Reflection. Dies macht Bibliotheken wie z.B. Guice (Dependency injection) möglich. Dazu noch die JDK und vor allem: java.lang.String.

In C++ hätte ich zwar ähnlich viele oder mehr freie Bibliotheken, aber die Tools fehlen mir.

Problem ist eher, das es in c++ nicht so das „Standardvorgehen“ gibt, wie in der Java Welt … deswegen gibts auch nicht das „tool für alles“
Sondern man scriptet lieber um die Umgebung seinen beduerfnissen anzupassen.

GC ist natürlich das wichtigste Feature,

Es gibt auch GC ähnliche konzepte in C++
Aber eigentlich ist es das Feature von C/C++ ohne ein GC auszukommen. Also man den Speicher und Ressourcenverbrauch unmittelbar beeinflussen zu koennen, also theorethisch .

Auch fehlt mir Eclipse

Bei mir iss andersrum. Ich bin mit c/c++ quasi grossgeworden und darf/muss mich nu bissi mit Java EE beschaeftigen.
Und mir fehlt die VS Ide … ich kann Eclipse ned ganz so gut … Ausserdem fühlt sich eclipse lahm an im Gegensatz zu VS …
Das es kaum gute freie Ide’s gibt für c++ ist nen anderes thema …

Annotations und Reflection

Konzept frage … es gibt RTTI. Aber auf RTTI angewiesen zu sein, wird als Designschwaeche angesehen.
Die normalen Muster für c++ sind so, das ne klasse nix ueber sich wissen sollte, sondern einfach nur funktionieren muss :slight_smile:

Java is definitiv die schönere Sprache (Interfaces in C++ waeren scho geil … )
Aber groessere Dinge, nicht vom projectumfang her sondern eher dinge die nicht in den Hauptspeicher passen, ordentlich ressourcen verbraten, den Prozessor zum schwitzen bringen, da bist bei c/c++ besser aufgehoben :slight_smile:

Ich denk die typischen anwendungsfälle für beide Sprachen sind schon sehr verschieden ^^

Ciao …

[QUOTE=HBerger]Aber groessere Dinge, nicht vom projectumfang her sondern eher dinge die nicht in den Hauptspeicher passen, ordentlich ressourcen verbraten, den Prozessor zum schwitzen bringen, da bist bei c/c++ besser aufgehoben

Ich denk die typischen anwendungsfälle für beide Sprachen sind schon sehr verschieden ^^

Ciao …[/QUOTE]

Das bezweifle ich eher. Du kannst richtig gut Programme für große Daten in Java schreiben, dank distributed caching systems wie z.B. JCS,
Ehcache, Hazelcast, Infinispan, Hadoop, usw. Auch multi-threading is einfacher in Java, dank der JDK und Sprachfeatures we synchronized.

C++ hat den Vorteil dass man alles statisch kompilieren kann, so dass der Benutzer sich die Java Runtime nicht installieren muss. Und man kann System-Spezifische Features in C++ leichter nutzen, wie Transparenz-Effekte. Auch ist Swing ziemlich veraltet, da ist ein Framework wie Qt weit fortgeschrittener. Und Hartware-Nahe Programmierung ist in C/C++ natürlich viel einfacher als in Java.

Aber ansonsten sehe ich persönlich keinen Verwendungszweck für C/C++ mehr. Niemand würde es merken wenn Mozilla Firefox z.B. in Java entwickelt hätte (wenn man den Unterschied zwischen GTK+ und Swing mal außen vor lässt). Auch für viele Spiele eignet sich Java sehr gut, wie man an Minecraft z.B. sehen kann. JMonkeyEngine ist extrem gut für OpenGL Spiele.

Ach, ich dachte diese riesen Pixel wären absichtlich so. Jetzt macht das Ganze Sinn… :smiley:

Aber ansonsten sehe ich persönlich keinen Verwendungszweck für C/C++ mehr.

Also ich weiss nicht ob ich eine andere Wahrnehmung habe …
Aber „guten“ sprich optimierten C/C++ Programmen fühlt man es an … Der unterschied wird geringer, aber trotzdem …
nimm mal eclipse und nen VS … klar schwer zu vergleichen, aber so kleinigkeiten wie menues öffnen, nen file auswahl dialog anzeigen … geht alles flotter.
Was natürlich nicht heissen muss, das VS generell schneller ist ^^ das kann man eh kaum vergleichen. Aber trotzdem fühlen sich java anwendungen generell „zäher“ an, find ich.

und eclipse ist noch nen positver fall von optimierten java …

Du kannst richtig gut Programme für große Daten in Java schreiben, dank distributed caching systems wie z.B. JCS,

DIe frage ist, was verstehst Du unter groß ?
Beispielsweisse hab ich „datenbanken“ im xml vorliegen, ne ganze menge links drinnen … bis zu 400MB …
DIe zu parsen schaff ich mit dem xerxes-c (32 bit) DOM in 90 sec …
selbe machine selbe datei mit java org.w3c.dom.Document parsen: 12 min (angepasste jvm, ner normalen wuerde der speicher ausgehen)

Das Programm was die erzeugt ist uebrigens nen Java programm- frontend zu ner DB. der export dieser datei dauert im 20 min bereich.
früher hatten wir nur nen java parser … mussten den in nen c++ modul packen mittels jni um das laufen zu koennen …
das hat auch zig minuten gebraucht.

Ob solche mengen mit DOM zu parsen sinnvoll ist, ist ne andere frage, aber nur der „laufzeitunterschied“ ist schon gravierend

Ich mach hier Messdaten auswertung. Ich krieg datenstroeme von bis zu 20Mbit und muss die „online“ auswerten.
Dazu muss ich packete in signale zerlegen nach ner Vorschrift aus ner DB klar … und die Werte „validieren“.
bei bis zu 800k Packete/s …
Selbst ohne die Hw anbindung zu betrachten, die datenmengen kriegst in java nie hin … da fehlt einfach der direkte speicherzugriff. ich kann mir selbst unter c++ nicht erlauben, alles als object zu bauen.
Aber als HW Nahe programmierung wuerd ich das dann auch noch nicht bezeichnen …

Ciao …

DIe frage ist, was verstehst Du unter groß ?

Wie waere es mit terabyte an Daten wie bei BigData ueblich?

Beispielsweisse hab ich „datenbanken“ im xml vorliegen, ne ganze menge links drinnen … bis zu 400MB …
DIe zu parsen schaff ich mit dem xerxes-c (32 bit) DOM in 90 sec …
selbe machine selbe datei mit java org.w3c.dom.Document parsen: 12 min

Schlechter vergleich, wieso nicht java Xerces vs. xerces-c?
… wo bleibt StaX? :wink:

Sorry, aber in so einem Umfeld wird IME fast nur Java (bzw. 'ne JVM) verwendet.

Was gefällt dir denn an CodeBlocksnicht? Eclipse für C++ zu verwenden ist halt suboptimal. Genauso wie Eclipse für PHP, Javascript, etc. Eclipse wird mit spezialisierten IDEs nie mithalten können, außer für Java, und selbst da wird es im Bereich Android wohl bald den ersten Platz an AndroidStudio verlieren.

Was gefällt dir denn an CodeBlocks nicht?

  • das configurationsmanagment ist etwas … zu bedienen. Das macht VS selber besser. entfällt aber eh, wenn man nen buildgenerator verwendet.
  • Intellisense und autovervollstaendigung ist noch nicht ganz so ausgereift … ob die bei VS besser ist, keine Ahnung … aber deswegen der naechste Punkt:
  • es gibt kein Visual Assist plugin! noch nicht …
  • ich komm mit der ProjectNavigation da nicht ganz so gut zurecht …

Ich verwend codeblocks schon, wenn ich was unter linux machen darf, leider viel zu selten … aber VS ist schon ne nummer besser IMHO …
Vieles ist aber sicher Gewoehnungssache.

Sorry, aber in so einem Umfeld wird IME fast nur Java (bzw. 'ne JVM) verwendet.

Dann sind wir ne Ausnahme ^^
Bei uns wird Auswertung und Konvertierung fast alles in c/c++ entwickelt.
Kleinere tools fangen als scripte an, klar, aber da ist hier mittel zum zweck eher python …
Selbst Programme in C# haben wir mehr
Wenn wer denkt er machts gleich richtig und nimmt was für grössere Projecte geeignetes : dann nimmt er C# oder c/c++.
Wobei wir tendentiell eher desktop orientiert sind, also richtige Datenbanken und verteilte Anwendungen so gut wie gar kein Thema sind.
Da ist GUI natuerlich eher nen Thema …
Wobei man sagen muss, das wir kein Software unternehmen sind. ALso bei uns ist Software immer Eigenbedarf und mittel zum zweck.
Aber wir kaufen auch viel Software … da iss aber auch kaum was in java bei …

Ciao …

Ich arbeite mich seit ein paar Monaten in C++ ein. Allerdings auf einem sehr “lowen” Level. Sprich Code caves. Zuerst dachte ich auch, super meine lieblings IDE Eclipse unterstützt auch C++, also MinGW installiert und C/C++ Plugin geholt. Nach 2 Tage konfigurieren hat er mir immer noch unresolved Compile Problems angezeigt. In dem Umfeld ist eine IDE wie VS natürlich sehr gut. Was mir dabei am meisten fehlt ist die fehlende API Doku. Gerade wenn man neu in einer Sprache ist, weiß man nicht genau was welche Funktion macht. Da ist eine IDE integrierte Doku natürlich das Opti.

Ich selbst glaube vm basierte Sprachen wie Java oder C# sind die Zukunft. Das Motto “Compile once, run everywhere” ist so gefragt wie nie. Warum sollte ich die Software auf X Systeme potieren und dann wohlmöglich auf jedem System spezifische Bugs fixen, wenn es auch anders funktioniert. Leider haben viele C/C++ Programmierer die Art, Code im Stile von “Hauptsache es funktioniert” zu schreiben. Sobald man sagt das es auch ohne diese “bösen” Hacks geht wird erwiedert: Entweder kann man Code lesen oder man kann es nicht. Das ist schade. Es ist in C++ sehr schnell möglich sich in seinem eigenen Code zu “erhängen”, da es einfach sehr viele Möglichkeiten gibt Probleme zu lösen.

Im allgemeinen muss man sagen Java ist die schönere Sprache. Gerade C++ ist überladen mit Schlüsselwörtern die zum Teil auch noch Compiler abhängig sind. Die Standartbibilo von Java ist besonders gut. Wirklich jede Methode ist ausreichend dokumentiert (leider kann ich das von C# nicht behaupten). Gerade große Projekte profitieren von verschiedenen Design Vorlagen und Clean Code. Java ist auch von Quereinsteigern schnell zu lernen und “subjektive Meinung” günstiger und besser zu warten.

Zur Geschwindigkeit kann man nur sagen, dass Java immer noch langsam ist wenn es darum geht Grafiken oder auch Menüs darzustellen (sieht man sehr gut an Lotus Notes von IBM).
Mal sehen was sich da jetzt mit JavaFX tut. Die ersten Tests sehen schon einmal sehr viel versprechend aus.

Negative Punke für Java sind auch die hohe Anzahl an Frameworks. Es gibt für jedes Problem gleich X Frameworks. Jedes will das beste sein, funktioniert aber unter umständen ganz anders und schnell befindet man sich in einem Lizens Jungle und weiß gar nicht mehr so recht weiter.

[quote=HBerger]Ich mach hier Messdaten auswertung. Ich krieg datenstroeme von bis zu 20Mbit und muss die “online” auswerten.
Dazu muss ich packete in signale zerlegen nach ner Vorschrift aus ner DB klar … und die Werte “validieren”.
bei bis zu 800k Packete/s …
Selbst ohne die Hw anbindung zu betrachten, die datenmengen kriegst in java nie hin[/quote]

In einem Projekt an meiner Uni wurde mal so etwas ähnliches gemacht, da ging es um Abfragen an Echtzeitdaten im Bereich > 5 Millionen (Netzwerk)Events / Sekunde.
Ich habe leider nicht mehr technische Details, allerdings wurde dort auch Java (allerdings stark parallel) eingesetzt, um die Events zu registrieren, die gewünschte Eventrate wurde nach meinen Infos ebenfalls erreicht.
Allerdings waren dort die Events sehr klein, das parsen der Events war wohl ebenfalls das Bottleneck.

Gruß

Intressant …

Wir haben ein „Project“ das „scheitert“ grad an der performance.
Das heisst unsere SW liefert Signal-Werte interpretiert (double) oder ints und nen Zeitstempel(8 byte) so 8-12k pro sec.
die bekommen das per JNI injiziert (die laufen in einer von unserem Prozess aufgezogenen JVM)
die versuchen die werte zu nehmen, simple vergleiche zu machen <>== gegen Werte aus ner DB und schreiben die ergebnisse in ne konsole und log.
Die Fehler die sie finden sind gering, also IO ist ueberhaupt nicht das Problem …
nur kommen sie trotzdem mit der Input-Datenmenge nicht klar …
laut deren aussage kann java keine 8k/s Instanzen pro Sek instanziieren, und damit scheitert die sache schon an der Übergabe per JNI …
Vielleicht ist es auch JNI selber, keine Ahnung …

da ging es um Abfragen an Echtzeitdaten im Bereich > 5 Millionen (Netzwerk)Events / Sekunde.

Ihr muesstet doch da weit mehr als paar k Instanzen/s erzeugen ?
Von was fuer ner VM reden wir da ? läuft sowas noch aufm PC oder habts da spezialhardware ? Standard VM (Oracle z.b. ) oder was ganz eigenes ?
und sicher das ihr die „h > 5 Millionen (Netzwerk)Events / Sekunde“ in der JVM abgearbeitet habt und nicht irgendwie ne Brücke zu compilierten code ?

Ciao …

Rein am instanzieren wirds wohl nicht liegen:

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.*;

/**
 * Created with IntelliJ IDEA.
 * User: Zuegg
 * Date: 18.10.13
 * Time: 18:18
 * To change this template use File | Settings | File Templates.
 */
public class InstancingTest {
    ExecutorService executorService;
    ArrayList<Runner> runners;

    public InstancingTest() {
        executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
        runners = new ArrayList<>();
        for (int i = 0; i < Runtime.getRuntime().availableProcessors(); i++) {
            runners.add(new Runner());
        }
    }

    private class TestObject {
        int i = 0;
        float v1;
        float v2;
    }


    private class Runner implements Callable<Long> {

        @Override
        public Long call() throws Exception {
            Long counter = 0l;
            while (System.nanoTime() < tEnd) {
                TestObject object = new TestObject();
                counter++;
            }
            return counter;
        }
    }

    public long tEnd;

    public void run() throws InterruptedException, ExecutionException {

        tEnd = System.nanoTime() + 1000000000;
        List<Future<Long>> futures = executorService.invokeAll(runners);
        Long total = 0l;
        for (Future<Long> future : futures) {
            total += future.get();
        }
        System.out.println(total);
    }

    public static void main(String args[]) {
        InstancingTest instancingTest = new InstancingTest();
        try {
            for (int i = 0; i < 10; i++) {
                instancingTest.run();
            }
        } catch (InterruptedException e) {
            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
        } catch (ExecutionException e) {
            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
        }
    }
}

Damit schaff ich 300 millionen instanzierungen im ersten durchlauf und 390 wenn die vm warmgelaufen ist.

Aber ja, sobald man beginnt was zu berechnen/überprüfen geht die zahl schnell runter.

[QUOTE=HBerger]Intressant …

Wir haben ein “Project” das “scheitert” grad an der performance.
Das heisst unsere SW liefert Signal-Werte interpretiert (double) oder ints und nen Zeitstempel(8 byte) so 8-12k pro sec.
die bekommen das per JNI injiziert (die laufen in einer von unserem Prozess aufgezogenen JVM)
die versuchen die werte zu nehmen, simple vergleiche zu machen <>== gegen Werte aus ner DB und schreiben die ergebnisse in ne konsole und log.
Die Fehler die sie finden sind gering, also IO ist ueberhaupt nicht das Problem …
nur kommen sie trotzdem mit der Input-Datenmenge nicht klar …
laut deren aussage kann java keine 8k/s Instanzen pro Sek instanziieren, und damit scheitert die sache schon an der Übergabe per JNI …
Vielleicht ist es auch JNI selber, keine Ahnung …
[/QUOTE]
Hmm… habe selber schon in Projekten gearbeitet wo es um viel hoehere Datenmengen ging, da kamen die Signale aber uebers Netzwerk, ohne JNI.