|
|
|
|
Willkommen im Club... hab gestern den ganzen Tag lang versucht rauszufinden warum die Laufzeit eines Programms exponentiell über die Anzahl der Textzeilen ansteigt die es verarbeiten muss.
... bis ich rausgefunden hab, dass der Kollege der das gemacht hat das 2D-Array dynamisch zur Laufzeit immer vergrößert. Ich habe allerdings das Gefühl dabei weißer geworden zu sein.
|
|
|
|
|
|
|
| Zitat von wuSel
... bis ich rausgefunden hab, dass der Kollege der das gemacht hat das 2D-Array dynamisch zur Laufzeit immer vergrößert.
| |
Ahaha was, das ist die beste Methode, Programme auszubremsen.
|
|
|
|
|
|
|
Jo, deswegen schafft das Tool nach einer leichten Änderung die 1.000.000 Datensätze jetzt auch in 20 Sekunden statt 17 Minuten.
|
|
|
|
|
|
|
Tjo, immer toll, wenn etwas kompliziertere Programmteile von Personen implementiert werden, die keine Ahnung von Algorithmen und Komplexität haben
|
|
|
|
|
|
|
Schlimmer: Er kann nichts dafür, ist Student, der darf sowas bringen. Solche Projekte werden nur gern mal an Studenten gegeben, weil die anderen Entwickler ja keine Zeit dafür haben.
|
|
|
|
|
|
|
|
|
|
|
Sowas wurde uns bereits im zweiten/dritten Semester eingeprügelt.
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von red am 13.06.2017 18:27]
|
|
|
|
|
|
Ich weiß nicht mal wovon ihr redet.
would totally happen
|
|
|
|
|
|
|
| Zitat von red
Sowas wurde uns bereits im zweiten/dritten Semester eingeprügelt.
| |
Mag sein, trotzdem hat man da keine Ahnung wie man größere Projekte der Art umsetzt. Und ich hab ja nicht gesagt er sei Informatikstudent, oder?
|
|
|
|
|
|
|
Ganz am Anfang meiner Bachelorarbeit, als ich gerade angefangen hatte, mir C++ beizubringen, habe ich in einer Analyse in jeder Iteration was in den stdout geschrieben und war dann total frustriert, dass es länger als meine Bachelorarbeit gedauert hätte, die komplette Analyse einmal durchzuführen.
Achja, und ich hatte natürlich auch irgendwo ein memory leak weil ich in einer Schleife mit new allokiert habe, ohne danach aufzuräumen.
|
|
|
|
|
|
|
Address sanitizer und valgrind beschde.
|
|
|
|
|
|
|
Ach komm, ich hab's gerade letzens wiedermal geschafft im Log Strings zu konkatenieren...
Aber ja, ganz viel von dem Zeug lernt man halt einfach erst, wenn man es wirklich anwenden muss. Der harte Weg ist der, der bleibt.
|
|
|
|
|
|
|
Durch Schmerz lernt man einfach am besten.
|
|
|
|
|
|
|
| Zitat von wuSel
Jo, deswegen schafft das Tool nach einer leichten Änderung die 1.000.000 Datensätze jetzt auch in 20 Sekunden statt 17 Minuten.
| |
Und dann kommt der Hass der Sachbearbeiter weil es keine Ausrede mehr für die Kaffeepause gibt!
Do nothing loops, wer hat sie noch nicht implementiert?
Acid
|
|
|
|
|
|
|
| Zitat von statixx
Durch Schmerz lernt man einfach am besten.
| |
Fürwahr.
Dazu kommt, dass die Welt auf Slides und in minmal-working-examples immer viel schöner ist als in echt.
|
|
|
|
|
|
|
Hmja... Slides entwickeln sich ja auch gerne mal...
Kürzlich war die Verarbeitungs-Anforderung noch pro <Zeiteinheit> "ein paar 100.000 Datensätze", die Woche danach ca. 1.000.000, mittlerweile sind wir bei > 10.000.000.000 und die Gespräche sind noch nicht beendet.
Wir haben dann mal eingeworfen, dass solche Zahlen zwar unternehmerisch durchaus lobenswert optimistisch sind, aber wir vermutlich alleine aus den drei aktiven europäischen Ländern nicht unbedingt mehr Kunden als Menschen auf der Welt haben werden, selbst mit möglichen Dopplungen.
Das Unverständnis war groß.
|
|
|
|
|
|
|
|
|
|
|
Da wir sowieso AWS nutzen, können die meisten dieser Fragen tatsächlich relativ beruhigt mit JA beantworten.
Ja, man muss die Software immer noch so bauen, dass sie damit klar kommt und es nicht nur mit mehr Rechenpower verkackt, aber alleine die Möglichkeit im Bedarfsfall halt per Mausklick 50 Maschinen mehr dahin zu stellen, ist schon eine feine Sache. Ich erinnere mich an die Anforderungsverhandlungen für Serverhardware >6 Monate vor einem Projekt... die dann natürlich nicht passte
|
|
|
|
|
|
|
Hat jemand Ahnung, wie ich Matrizen der Art
in Maple eingeben könnte und dann miteinander multipliziere...? Ich kann ein bisschen mit dem physics package und seinen Tensoren rumstümpern, aber nicht mal da weiß ich, wie man konsistent mit Indices rumpfuscht...
Wir müssen wissen. Wir werden wissen.
|
|
|
|
|
|
|
| Zitat von SwissBushIndian
Kack Studenten.
| |
In der Visu zu besagtem Programm hat er gerade seinen Fehler gefunden. Wert X über anderem Wert statt der Zeig anzeigen in einem Diagramm und es kam immer nur ein Punkt raus.
... nach einigen Stunden dann festgestellt, dass der Kerl für X und Y jeweils 300 mal den gleichen Wert als Testdatum genommen hat.
(ノ°Д°)ノ︵ ┻━┻
Eigentlich aber ganz witzig.
|
|
|
|
|
|
|
Der Arme, da kriegt man ja Mitleid
|
|
|
|
|
|
Wimmelbild
|
In den schwarzen Zeilen verstecken sich zwei Vorzeichenfehler!
Suchhinweise: und die Matrizen oben links sollten zueinander invers sein.
Das hat mich jetzt zwei Tage und einiges an geistiger Gesundheit gekostet. Aber ich habe das Wimmelbild gelöst! HA!
Ich musste es auch nur dreimal neu machen! Geilerweise war die Idee in grün sogar richtig - nachdem man den anderen Fehler gefunden hatte...
"It kisses the boy or it gets the hose again."
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von Wraith of Seth am 14.06.2017 14:55]
|
|
|
|
|
|
Irgendwie vermisse ich sowas, aber irgendwie auch nicht.
|
|
|
|
|
|
|
Es ist so schön, wenn der Schmerz nachlässt. Und man weiß, dass man es tatsächlich mal VOR Chef geschafft hat, weil ihm die Kontrollrechnung, ob meine intelligent geratene Inverse stimmt, zu lang war.
Well, nobody's perfect!
|
|
|
|
|
|
|
Benutzt du die musikalischen Isomorphismen oder was bedeuten die #?
|
|
|
|
|
|
|
Das # steht für das Moore-Penrose-Pseudoinverse. Gamma ist _eigentlich_ nicht invertierbar. In C steckt dann auch die "Pseudodeterminante" davon drin. Cooles, nützliches Zeug, das Physiker irgendwie nicht zu kennen scheinen. Außer in einem noch abgefahreneren Kontext - aber nicht mit Matrizen...
Wenn man dann einen geeignet normierten Projektor auf den Nullraum von Gamma addiert, bekommt man was invertierbares. Da wir einen eindimensionalen Nullraum haben, auf den man mit V^a V^b projizieren kann, gilt also
Irgendwie super praktisch, wenn man es mal gerafft hat.
You all saw it! That orphanage attacked me!
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von Wraith of Seth am 14.06.2017 15:10]
|
|
|
|
|
|
Kommt am Ende 1 oder 0 raus?
Sonst taugt das doch alles nicht!
/e: Übrigens habe ich We have no idea! von den PHDComics-Machern gelesen. Fand ich ziemlich gut! Setzt euch da mal ran ihr Physiker, ich will Antworten
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von [smith] am 14.06.2017 15:21]
|
|
|
|
|
|
Hm, ja, "1" oder so. Es ist ein neutrales Element bezüglich Matrixmultiplikation, also "1".
Ahhh. I see it clearly. This is the plane of suck.
|
|
|
|
|
|
|
Wie muss ich meine API description in Swagger machen, damit ich im POST ein JSON file anhaengen kann? Habe momentan folgendes, wobei ich da immer beim Testen ein 400 zurueckbekomme:
Swagger Description:
|
Code: |
...
paths:
/students/add_from_list:
post:
summary: "adds a list of students"
operationId: "add_students_from_list"
consumes:
- "application/json"
produces:
"application/json"
parameters:
- in: "body"
name: "body"
description: "list of student objects"
required: true
schema:
type: "array"
items:
$ref: "#/definitions/body"
responses:
default:
description: "successful operation"
x-swagger-router-controller: "swagger_server.controllers.default_controller"
definitions:
body:
properties:
name:
type: "string"
age:
type: "integer"
weight:
type: "number"
format: "float"
|
|
Ich lass mir daraus nen Python-Flask-Server generieren, starte den und werfe einen Blick auf die Swagger UI. Dort steht dann fuer die POST-Operation als Parameter Content Type "application/json", und als body ist ein Beispiel das so ausschaut und ich in ein data.json kopiere:
|
Code: |
[
{
"name": "bobby",
"weight": 75,
"age": 25
}
]
|
|
Wenn ich jetzt Curl benutze:
|
Code: |
curl -X POST --header "Content-Type: application/json" --header "Accept: application/json" -d "data.json" "http://localhost:8080/students/add_from_list" |
|
Bekomme ich ein 400 - Bad Request zurueck. "None is not of type 'array'". Ich habe ne andere POST Operation direkt fuer den path "student" definiert, die die Parameter eines Students im Query bekommt. Die funktioniert einwandfrei.
Was mach ich falsch?
|
|
|
|
|
|
|
Ich bin gerade nicht in Rechnerreichweite, aber ich glaube was du willst ist -d @"filename" und nicht -d { "json": "data" }.
|
If you start the data with the letter @, the rest should be a file name to read the data from, or - if you want curl to read the data from stdin. Multiple files can also be specified. Posting data from a file named 'foobar' would thus be done with -d, --data @foobar. When --data is told to read from a file like that, carriage returns and newlines will be stripped out. If you don't want the @ character to have a special interpretation use --data-raw instead.
| |
Wichtig ist dann aber, dass du explizit den Contenttype Header setzt (was du ja bereits tust), denn:
|
(HTTP) Sends the specified data in a POST request to the HTTP server, in the same way that a browser does when a user has filled in an HTML form and presses the submit button. This will cause curl to pass the data to the server using the content-type application/x-www-form-urlencoded. Compare to -F, --form.
| |
Related: Ich bin ja grösster command-line fan ever, aber curl ist halt trotzdem jedes Mal ziemliches jonglieren. Deswegen empfehle ich Postman. Das kann man sich problemlos in der Gratisversion gönnen, kann nach CURL exportieren und ist für ein wenig API grinden einfach deutlich die bequemere Lösung.
|
|
|
|
|
|
Thema: pOT-lnformatik, Mathematik, Physik XXI ( X-Ray-Edition ) |