|
|
|
|
Pff, nichtmal nen Operator überladen
|
|
|
|
|
|
|
Ja, und außerdem gehört doWork eigentlich in ein Lambda.
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von Admiral Bohm am 23.09.2013 23:56]
|
|
|
|
|
|
pfff, freaks. ( == unlesbar.)
|
|
|
|
|
|
|
|
|
|
|
Aber das ist ja garnicht multicore....
|
|
|
|
|
|
|
Die Sache ist die: Ich glaube wenn rABBI einfach mal losgelegt hätte mit ner nicht-Multicore Lösung wäre das Problem schon durch
|
|
|
|
|
|
|
Man könnte ja ein Absurdeste-Lösung-Codegolf daraus machen.
|
|
|
|
|
|
|
| Zitat von Daddi89
Die Sache ist die: Ich glaube wenn rABBI einfach mal losgelegt hätte mit ner nicht-Multicore Lösung wäre das Problem schon durch
| |
richtig. das muss aber irgendwann live performen auf echtzeitdaten.
| Zitat von cms
Man könnte ja ein Absurdeste-Lösung-Codegolf daraus machen.
| |
witzige idee. mag jemand was in brainfuck vorstellen?
|
|
|
|
|
|
Crosspost
|
http://forum.mods.de/bb/thread.php?TID=211257&PID=1244944242#reply_1244944242
Hmmm,
ich habe zwei Formular-Klassen, einmal für Create und davon abgeleitet eine Update. Update hat die gleichen Felder + 2 weitere.
Nun will ich für ein bestimmtes Projekt noch bei beiden die extakt gleiche Anzahl von Zusatzfeldern hinzufügen.
Ich kann das ja schlecht über Vererbung lösen, dann müsste ich die Zusatzfelder doppelt einpflegen.
Gibts da ein passendes Pattern? Decorator könnte eventuell passen?
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von Gore am 24.09.2013 10:15]
|
|
|
|
|
|
|
|
|
|
Das ist das Ende von Microsoft!
|
|
|
|
|
|
|
oder besser, das könnte der Anfang von Linux sein.
|
|
|
|
|
|
|
Oder aber Nobody gives a shit
|
|
|
|
|
|
|
/e:
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von SirSiggi am 24.09.2013 12:04]
|
|
|
|
|
|
| Zitat von Gore
http://forum.mods.de/bb/thread.php?TID=211257&PID=1244944242#reply_1244944242
Hmmm,
ich habe zwei Formular-Klassen, einmal für Create und davon abgeleitet eine Update. Update hat die gleichen Felder + 2 weitere.
Nun will ich für ein bestimmtes Projekt noch bei beiden die extakt gleiche Anzahl von Zusatzfeldern hinzufügen.
Ich kann das ja schlecht über Vererbung lösen, dann müsste ich die Zusatzfelder doppelt einpflegen.
Gibts da ein passendes Pattern? Decorator könnte eventuell passen?
| |
Ein Framework das ich lange Zeit benutzt hat, hat die von Hand hinzugefügt. Wobei für die Ausgabe aber jeweils die gleiche View genutzt wurde, d.h. in der Controller Klasse wurden pro Feld nur ein paar Zeilen ergänzt.
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von Daddi89 am 24.09.2013 12:19]
|
|
|
|
|
|
Bedeutet ja trotzdem das ich denselben Code doppelt habe, jweils für Create und einmal für Update. Das will ich vermeiden.
|
|
|
|
|
|
|
Wie ist das denn aktuell mit den Felder in der Updateklasse? Da musst du doch eh die Formulardaten von allen Feldern wieder abfragen, oder hast du da ne generische Lösung gebastelt?
Ich kenne ja deinen Code-Aufbau nich, aber vielleicht kannst du was mit Traits machen? (ab PHP 5.4)
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von Daddi89 am 24.09.2013 12:29]
|
|
|
|
|
|
Die Formulardaten füllen über eine Art Mapping-Objekt (Zend\Stdlib\Hydrator) meine Entität (Benutzer) und schiebt es in einen data mapper.
Die View iteriert nur über die Elemente, ist also auch dynamisch.
Hab extra ohne PHP-Bezug gefragt, da ich eher allgemeine Herangehensweisen nutzen möchte und ich Traits bisher nicht genutzt habe.
Wie ich das aber grade lese kann man die eh nicht dynamisch setzen?
|
[Dieser Beitrag wurde 2 mal editiert; zum letzten Mal von Gore am 24.09.2013 12:36]
|
|
|
|
|
|
Was heisst denn dynamisch? Du kannst halt ein Trait definieren und mehreren Klassen zuordnen.
Kannst du mir kurz was zu diesem Hydrator schreiben? Klingt interessant und die Stdlib gibts auch per Composer wie ich sehe (https://packagist.org/packages/zendframework/zend-stdlib)
Btw. für die PHP-Hater, jetzt gibts auch den oft erwarteten Package-Manager dafür
|
|
|
|
|
|
|
Hab die normale Create und Update halt für einige Bereiche und in anderen Bereichen die gepimpte Version.
In den pimped Bereichen müsste ich halt dynamisch das Trait hinzufügen, das scheint ja nicht zu gehen oder ich war blind.
Zum Hydrator:
|
Code: |
namespace Zend\Stdlib\Hydrator;
interface HydratorInterface
{
/**
* Extract values from an object
*
* @param object $object
* @return array
*/
public function extract($object);
/**
* Hydrate $object with the provided $data.
*
* @param array $data
* @param object $object
* @return object
*/
public function hydrate(array $data, $object);
}
|
|
Sitzt z.B. im ZF2 zwischen (Form und Entität) und (Db und Entität). Mappt quasi überall dort wo das Objekt nicht mit den Formulardaten oder Spalten der DB überein stimmt.
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von Gore am 24.09.2013 12:50]
|
|
|
|
|
|
Heisst, du schmeisst ihm dein Objekt rein und $_POST und er befüllt die Daten damit automatisiert oder versteh ich hier was ganz falsch?
|
|
|
|
|
|
|
Nop, genau das heißt es.
Der Db-Adapter haut dir dann auch direkt deine gefüllten Klassen raus und keine generische row-Klasse.
|
|
|
|
|
|
|
| Zitat von Gore
Nop, genau das heißt es.
Der Db-Adapter haut dir dann auch direkt deine gefüllten Klassen raus und keine generische row-Klasse.
| |
Hätte ich das mal vorher gekannt
Nette Sache, werde ich in Zukunft sicher mal benutzen
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von Daddi89 am 24.09.2013 13:14]
|
|
|
|
|
|
| Zitat von rABBI
aaaaaah, hass.
ruby ist nicht mehrprozessorfähig, wenn man es im ersten jahr betreibt. der scheduler von go ist räudig an guten tagen und meistens schlimmer. python ist noch übrig und tut nicht, was die doku sagt, dass es tun würde.
ich habe 25-35GB textdaten. alles json, dass ich gern per regex parsen und danach weiterverarbeiten würde. regex, weil json noch langsamer ist. jede datei == 1/2 bis 1mb groß == ein zu parsendes datenpaket. zur verfügung steht ein 5 jahre alter xeon, also schon nicht das aller schlechteste. ich hab sogar schon überlegt, ob ich das in shellscript baue, aber das ist schon garnicht multicorefähig. noch irgendjemand ideen für eine sprache/ein framework, bei dem man nicht das datei einlesen neu erfinden muss und das trotzdem multicore kann und performt? c/c++ ist mir definitiv zu low level. c# heißt wine und das will ich nicht auf einem headless server. noch irgendwas, das ich übersehen habe?
für die leute, die mir vielleicht einfach sagen können, warum das mit den futures nicht parallelisiert, hier mal das skript:
|
Code: |
#!/usr/bin/env python
import time
import sys
import os
import concurrent.futures
################################################################################
def analyze(file):
contents = open(fi).read()
# somthing will happen here
return "" #return list of all ids in this file
################################################################################
def workthelist(filelist):
#iterate over list and analyze
print("analyzing", len(filelist), "files")
for f in filelist:
analyze(os.path.join(folder, f))
return "" #later this year return the list of all ids in this filelist
################################################################################
# start stopwatch
timeStart = time.perf_counter()
# read folder from commandline
if len(sys.argv)<2:
print("specify path please.")
exit(1)
folder = sys.argv[1]
# count number of files
filelist = os.listdir(folder)
print("number of files, predicted: ", len(filelist))
halfcount = round(len(filelist)/2)
firsthalf = filelist[:halfcount]
secondhalf = filelist[halfcount:]
# sum size
sumsize = 0
filecount = 0
for f in filelist:
filecount += 1
fi = os.path.join(folder, f)
fileinfo = os.stat(fi)
sumsize += fileinfo.st_size
# analyze(fi)
print("number of files, counted: ", filecount)
print("size summarized: ", round(sumsize/1024/1024), "M")
print("mean size per file: ", round(sumsize/1024/filecount), "K")
# parse each file via regex
# use parallel shit and stuff
executor = concurrent.futures.ProcessPoolExecutor(max_workers=2)
a = executor.submit(workthelist(firsthalf))
b = executor.submit(workthelist(secondhalf))
# save list of matches to new file
# ahhh, not yet
# stop stopwatch
timeEnd = time.perf_counter()
print("Execution time: ", timeEnd-timeStart, "seconds")
|
|
| |
Hier ist eine einfach parallelisierte Variante in Scala:
|
Code: |
import java.io.File
import scala.io.Source
object Main {
def analyze(file: File): String = {
val lines = Source.fromFile(file).getLines
// do something with the lines
"DUMMY"
}
def main(args: Array[String]) = {
if(args.length < 1) {
println("specify path please")
exit(1)
}
val folder = new File(args(0))
val files = folder.listFiles.filter(_.isFile)
println(s"number of files, predicted: ${files.length}")
val ids = files.par.map(analyze)
println(ids)
}
}
|
|
Wenn du aus der analyze Methode mehr als eine Sachen zurückgeben willst, änderst du einfach den Rückgabetype zu Seq[String] und ersetzt das .par.map durch .par.flatMap
|
|
|
|
|
|
|
Da wollt ich eben das Licht in meinem Schlafzimmer ausmachen... Dabei war nur der Rolladen oben :-(
|
|
|
|
|
|
|
Man nennt es Sonne. Scheint täglich.
|
|
|
|
|
|
|
"Die gelbe Sau", wie man hier sagt.
|
|
|
|
|
|
|
Dir aus dem Arsch vielleicht. :/
|
|
|
|
|
|
|
So, das wars fuer die Woche fuer mich. Ich werde einfach zu alt /o\
Freitag und Samstag Hannover, Montag und heute Wiesn. Aber ich bleib beim Alkohol! :x
|
|
|
|
|
|
|
Prost, ich bin schon dabei
|
|
|
|
|
|
Thema: Gehirnsalat ( wir unter uns ) |