Ja, clientseitig mit JS, vermutlich unter Hinzunahme von irgendeinem aufgeblasenen Framework, und serverseitig mit irgendeiner beliebigen Sprache, z. B. PHP, Python, Ruby, Java, wasauchimmer.

Wenn die Audiodateien auf dem Server als PCM vorliegen (WAV, AU, AIFF, etc.) kannste die im Speicher als eine Hauptspur zusammen fügen, und dann durch einen Encoder jagen. Da die Längen ja gleich sind, kannst du an den Client MP3, OGG, AAC, o. ä. senden um Bandbreite zu sparen. Der client muss dir ja dann nur noch die Position und Länge der einzelnen Audiodateien auf der Hauptspur mitteilen, was ein einziger kleiner Request sein dürfte.

Ich habe auch mal genau das gleiche gemacht, und etwas gebaut, was entfernt an LMMS erinnert. Dabei bin ich vorgegangen wie oben beschrieben, nur ohne den Teil mit dem "aufgeblasenen Framework". Am Ende war der gesamte Code, sowohl client- als auch serverseitig, sehr schlank, flink und sauber.

Für den Client hab ich JS, CSS und HTML genutzt (was sonst?), und auf dem Server PHP (ekelhaft, aber halt billig und überall verfügbar). Nur den eigentlichen "Kern" habe ich in C++ geschrieben, weil das Bearbeiten der PCM-Daten und das Encoding in ein verlustbehaftetes Format einige Tausend mal schneller war, als Gefrickel mit PHP.

...zur Antwort

Häh? Ja, dann nimm doch einfach LaTeX, dafür ist es doch da!

Das eigentliche Kompilieren in eine PDF oder Bilddatei der *.tex-Datei dauert verglichen mit dem Erzeugen eines Prozesses extrem lange, sodass du in der Sprache deiner Wahl einfach nur eine Kommandozeile abfeuern musst.

Ob du jetzt mit system(), exec(), ShellExecute(), Runtime.exec(), System.Diagnostics, oder was auch immer arbeitest, ist dabei völlig egal.

Ich hab das ebenfalls gemacht, und bei mir werden Formeln noch etwas angepasst, bzw. für LaTeX vorbereitet.

Eine Textdatei enthält also z. B. nur diesen Inhalt:

(c^2=a^2+b^2)
\Rightarrow
(c=\sqrt{a^2 + b^2})

Innerhalb von meinem C++ Programm wird LaTeX aufgerufen, und ca. 0,1 Sekunde später, habe ich folgendes PNG-Bild an vorher spezifizierter Stelle liegen:

Bild zum Beitrag

Dabei wird Auflösung, und viele andere Dinge innerhalb von C++ über eine selbstgebaute Klasse spezifiziert.

Alles in allem sehr klein, schlank und keine große Sache! :)

...zur Antwort

Hab vor ein paar Jahren mal eine Doku gesehen, in der es darum ging, dass es wohl eine Welle von Fällen irgendwo in Afrika gab, in denen junge und gutaussehende Frauen mit Auto, Männer ansprechen, die allein unterwegs sind, und sie fragen, ob sie mitfahren wollen.

Die Männer freuen sich dann, eine Mitfahrgelegenheit gefunden zu haben, und steigen ins Auto. Ein paar Ecken weiter, steigen von beiden Seiten mehrere muskulöse Frauen ein, und hindern ihn an der Flucht.

Die Männer werden dann irgenwo hin verschleppt, an ein Bett gefesselt, mit Viagra voll gepumpt, und über Stunden oder Tage von mehreren Täterinnen vergewaltigt.

Ein Interviewtes Opfer sagt damals sinngemäß, dass es am Ende für ihn so schmerzhaft war, dass er das Bewusstsein verloren hat, und wegen dem ständigen Viagra ging die Errektion auch nicht einfach so weg.

Das war wohl mal eine Zeit lang ein Trend unter afrikanischen Frauengangs, aber ob das heute noch so ist, weiß ich nicht.

Also ja, auch Männer können vergewaltigt werden!

...zur Antwort

Also ich kann dir von meinem Physikstudium sagen, dass in der Aufnahmeprüfung Dinge abgefragt wurden, die an einer deutschen Uni erst im dritten bis fünften Semester gelehrt werden.

Tensorrechnung, auf einem Niveau, welches die meisten Studenten in DE nach 6 Semestern nicht haben, bzw. nicht ohne freiwillige Zusatzkurse erwerbbar ist, wurde dort in den Aufnahmetests voraus gesetzt. (Wobei ich sagen muss, dass in Deutschland an vielen Unis Tensoren generell etwas vernachlässigt werden, aber egal ...)

Quellen für übersetzte Aufnahmetests habe ich nicht, höchstens Originale auf Japanisch, aber die werden dich nicht weiter bringen. Sorry!

Allerdings ist das Niveau je nach Universität extrem unterschiedlich und die staatlichen Aufnahmeprüfungen unterscheiden sich sehr stark von denen privater Unis. Das Spektrum umfasst so ziemlich alles, sodass es entweder jedes Kindergartenkind schaffen kann, oder man ein Savant sein muss, um aufgenommen zu werden. :)

...zur Antwort

Arrays mit Variabler Länge auf dem Stack anzulegen, war einer der größten Fehler des C99 Standards, weshalb diese Katastrophe glücklicherweise nicht in C++ übernommen wurde und somit einen der Punkte darstellt, in denen C und C++ inkompatibel sind.

Wenn du mit dynamischem Speicher arbeiten willst, lass die Finger vom Stack, und arbeite mit dem Heap. Das heißt, dass du in deinem Falle einen geeigneten Standardcontainer (vector oder deque) nutzen solltest.

Im Idealfall solltest du dir eine eigene kleine Klasse dafür bauen, um Konsistenz garantieren zu können.

Falls du Verständnisprobleme mit dem haben solltest, was ich geschrieben habe, dann leg deinen Code beiseite, und lerne erst mal die Grundlagen, und zwar Stück für Stück, aufeinander aufbauend. Alles andere bringt nichts, und wird dich nur frustrieren!

Viel Spaß! :)

...zur Antwort

Das ist mit Java leider nur sehr "unschön" möglich, vorausgesetzt, es soll korrekt funktionieren, sicher und auch noch performant sein.

Hier ist ein Beispiel:

import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.LineNumberReader;

public class Main {

  public static int countLines(final String fnam, final String enc) throws Exception {
    try (LineNumberReader lnr = new LineNumberReader(new InputStreamReader(new FileInputStream(fnam), enc), 8192)) {
      lnr.skip(Long.MAX_VALUE);

      return lnr.getLineNumber();
    }
  }

  public static int countLines(final String fnam) throws Exception {
    return countLines(fnam, "UTF-8");
  }

  public static void main(String[] args) throws Exception {
	System.out.println(countLines("Main.java"));
  }

}

Die ellenlange Zeile im try-Kopf ist nötig um die Kodierung und Puffergröße anzugeben. Beides sollte beim Lesen von Textdateien IMMER angegeben werden, ansonsten öffnest du Tür und Tor für Sicherheitslücken, vor allem, falls dein Code irgendwann mal am Netz hängt.

Eine kürzere Lösung, die ähnlich viele Dinge berücksichtigt wie mein Code oben, fällt mir spontan nicht ein, auch wenn du sicher etwas mit der NIO oder Streams basteln kannst ... aber ich lese z. B. oft Wörterbuchdateien o. ä. ein, und da macht sich schon sehr bemerkbar, wenn mehrere hundert MB im RAM verplempert werden, wobei sich Speichermangager und GC um den ungenutzten Müll kümmern müssen.

Wie gesagt, die ultralange try-Zeile ist zwar unschön, aber nur so werden ...

  1. Speicherverschwendung
  2. Kodierungsfehler
  3. verschluckte Fehlermeldungen
  4. Probleme bei sehr großen Dateien
  5. daraus resultierende Angriffsvektoren

... vermieden.

Allerdings liefert getLineNumber() von LineNumberReader dank massivst verkorkstem API-Design keinen "long", sondern einen "int", was ein sehr unsauberes Geschmäckle hat. Im Zweifelsfalle, musst du also einen eigenen Puffer bauen und selber zählen, falls du diesen Punkt ausräumen willst.

Aber wenn du garantiert nur Dateien mit weniger als 2GB Größe aus zuverlässigen Quellen einliest, sollte das kein Problem sein. :)

...zur Antwort

Die kürzeste Lösung ohne zusätzliche Imports dürfte das hier sein:

l = ['8', '7', 6, 5]
i = int(''.join(map(str, l))

print(i, type(i)) # 8765 <class 'int'>

Disclaimer: Zwei Idioten, ein Gedanke ... Dory1 hatte bereits exakt diese Lösung lange vor mir gepostet. Die Credits gehen also zu 100% an Dory1 im Kommentar unter der dazu gehörigen Antwort. Sorry, hab ich vorher nicht gelesen!

...zur Antwort

Mach es doch genauso mit exec(), wie ich es dir in deiner anderen Frage geschrieben habe:

s = 'a = 4.12, b = 13.2, c = 4.25 '

exec(s.strip().replace(',', ';'))

print(a) # 4.12
print(b) # 13.2
print(c) # 4.25

Dabei ist völlig irrelevant, wieviele Leerzeichen (wenn überhaupt) im String vorhanden sind, und deine Variablen a, b und c sind danach automatisch definiert.

Ich bin mir ziemlich sicher, dass es keine kürzere und elegantere Lösung gibt. :)

...zur Antwort

Du kannst C++ Code sehr komfortabel in Java-Programmen über das JNI aufrufen. Welche IDE du dafür verwendest, ist völlig Wurst.

Innerhalb von Java erinnert eine Methode mit JNI entfernt an einen Prototypen in C++:

native void foobar();

Mithilfe des Java-Compilers kannst du dann aus deiner *.java Datei eine dazugehörige *.h Datei erzeugen lassen, die unter anderem diese Zeile enthält:

JNIEXPORT void JNICALL Java_FooBar_foobar(JNIEnv *, jobject);

Du musst dann "nur noch" eine passende Übersetzungseinheit basteln, also eine passende Implementierung in C++.

Nach ein paar Zwischenschritten musst du dann am Ende eine normal kompilierte dynamische Bibliothek (z. B. *.dll oder *.so) zusammen mit deiner *.class Datei ausliefern.

Das hat aber zwei große Nachteile:

  1. Innerhalb von Java benötigt ein Aufruf von "native" markierten verglichen mit herkömmlichen Methoden viiiieeel mehr Zeit. Diesen Overhead kann man in vielen Situationen nicht vernachlässigen. Also überlege dir genau wann es sich wirklich lohnt, C++ Code aufzurufen, denn meistens wird der Schuss nach hinten los gehen.
  2. Kompilierte Javaklassen sind portabel, aber den dazugehörigen C++ Code musst du für jede Plattform (Windows, Linux, Mac, BSD, ...) extra kompilieren, und eine entsprechende Bibliothek mitliefern.

Lua kannst du nutzen um C oder C++ Programme um eine schlanke Skriptsprache zu erweitern und bestimmte Dinge zur Laufzeit zu automatisieren.

Abgesehen davon ist jede Kombination von Programmiersprachen sehr speziell und muss individuell abgewogen werden, da so etwas auch immer neben Vorteilen, vielfältige Nachteile hat.

...zur Antwort

Wenn du diese Frage hier auf GF stellen musst, ist das ein ziemlich sicheres Zeichen dafür, dass es kaum etwas von Wert geben wird, was du als Buch veröffentlichen könntest.

Es sei denn, du willst ein Buch "von Anfängern für Anfänger" über Kinderkram wie Kali, Metasploit(able), oder ähnliches Zeug schreiben. Aber das ist genau genommen auch kein "Hacking", sondern einfach nur ein "Werkzeug-Benutzing".

Lerne lieber selbst noch ein paar Jahre länger, als dich übereilt mit dem 100sten drittklassigen Buch über Pseudo-Hacking zu blamieren. ;)

...zur Antwort

Der eigentliche Skandal ist, dass in Deutschland - wo wir alle ja so stolz auf unser "duales System" sind - nur ca. 12% vom Kunststoffmüll aus der gelben Tonne wirklich wiederverwertet werden.

Der Rest wurde bis vor kurzem zum größten Teil nach China exportiert, wo er auf gigantischen Deponien "gelagert" wird.

...zur Antwort

Ein sehr dummer Arbeitskollege von mir hat das auch mal gemacht, und hatte dann erst mal ein ganzes Jahr keinen Führerschein mehr.

Hinzu kamen neben den "normalen" Entsorgungskosten von einigen hundert Euro noch eine Strafzahlung von einigen Tausend, und ebenfalls nochmal einige Tausend Euro für die Entfernung von Restöl auf dem Waldboden durch eine Spezialfirma.

Insgesamt hat er damals glaube ich so um die 12000 bis 14000 Euro bezahlt, hat jetzt einen Eintrag im Vorstrafenregister und durfte ein Jahr kein Auto führen.

Wie teuer das in dem Fall von deinem Kumpel werden wird, weiß ich nicht, da ich die Details nicht kenne, aber mit etwas mehr als 10000 Euro wird er sicher rechnen können.

...zur Antwort

time schreibt automatisch nach stderr, von daher musst du den 2ten FD umbiegen:

time foo 2>file.txt

Oder du lässt stderr auf stdout zeigen:

time foo 2>&1

Aber da das ja auch die Streams von deinem Kommando in Mitleidenschaft zieht, einfach die Ausgabedatei und optional "append" angeben:

time -o file.txt --append foo

Anstatt file.txt kannst du natürlich auch eine FIFO nehmen, wenn du von anderen Prozessen aus die Standardausgabe umleiten willst.

Bei allen obigen Beispielen kannst du die Umleitung ">" natürlich auch durch Anhängen ">>" ersetzen, falls der vorherige Inhalt der Datei nicht überschrieben werden soll.

...zur Antwort

JavaScript hat sehr viele merkwürdige Eigenheiten, noch viel mehr als Java! Die sind zwar alle beherrschbar, aber wirken auf den ersten Blick für Einsteiger oft merkwürdig. Biespiel:

var a = [1, 2];
var b = [3, 4];

var c = a + b;

console.log(a.length, b.length, c.length);
// Ausgabe: 2 2 6

Oder das hier:

var foo = function() {
  return
  123;
};

console.log(foo());
// Ausgabe: undefined

Das Konzept von "truthy" und "falsy" ist auch etwas, was man von Java her nicht kennt:

var a = [ ];
var b = " ";
var c = 000;

console.log(a == c && b == c && a != b);
// Ausgabe: true

Wie gesagt, das ist alles kein Beinbruch, aber dennoch schon ziemlich anders als Java.

Außerdem gibt es bei JS das sog. Ducktyping mit dem man Objekte erzeugt, anstelle von Klassen. (Seit ES6 gibt es allerdings syntaktischen Zucker in Form von einer Java-artigen class-Syntax.)

Dann gibt es (fast) nur den globalen und einen funktionslokalen Gültigkeitsbereich, aber auch hier gibt es seit ES6 das let-Schlüsselwort, zum definieren von blocklokalen Variablen.

Gerade im Webbereich sind hier viele APIs auch nicht so ordentlich und konsistent wie man es von Java gewohnt ist. Das gilt vor allem für Array-artige Typen oder die Benennung von Objektmethoden. (z. B. getElementById, XMLHttpRequest, usw.)

Alles in allem stimme ich dem Feuerlöscher zu, dass es teils gewaltige Unterschiede zwischen Java und JavaScript gibt. Auf Englisch hört man auch oft: "Java is to JavaScript as Car is to Carpet". :)

Trotzdem kommst du mit Java-Erfahrung natürlich leichter in JS rein, als ein blutiger Anfänger. :)

...zur Antwort