kostenloser Webspace werbefrei: lima-city


Suche auf lima-city

  • in: PHP Session funktioniert auf Localhost, nicht auf Lima

    geschrieben von hackyourlife

    Ganz einfach: lima-city nutzt kein Output-Buffering, während das bei XAMPP per Default aktiv ist. Wenn du also irgendwas ausgibst, bevor die Session gestartet wird, funktioniert das bei dir lokal mit XAMPP, aber nicht auf lima-city. Ein BOM reicht schon aus, um das Problem zu verursachen, und manche Editoren schreiben den immer an den Anfang einer Datei.

    Wenn du mit cURL auf die lima-city-Seite zugreifst, und dir die Header ausgeben lässt, kannst du feststellen, ob das Session-Cookie gesetzt wird.
  • in: Variable zusammenzählen anhand von kriterien.

    geschrieben von hackyourlife

    Wenn
    $ipi = $ipi + 1;
    am Ende
    111
    ergibt, könnte es vllt sein, dass es 111 mal addiert hat?

    Ansonsten:
    1)
    $ipn
    wird nirgendwo definiert.

    2) Nutz unbedingt Prepared Statements, anstatt Parameter direkt in den SQL-String einzubauen!

    3)
    $ipi = $ipi + 0;
    ist völlig unnötig

    4) Zählen kann die Datenbank selbst besser, als du es in PHP kannst. Sieh dir mal die COUNT-Funktion an. Deine Abfrage würde also eher so aussehen:
    SELECT COUNT(*) FROM tabelle WHERE spalte = ?
    mit
    ?
    durch
    $iph
    ersetzt. Als Ergebnis käme dann eine einzelne Zeile heraus, welche die Summe enthält.

    5) Nutz eine konsistente Formatierung. So wie es jetzt ist, ist der Code relativ schwer lesbar.

    6)
    $ipi
    ,
    $iph
    ,
    $ipn
    ,
    $fila
    … etwas aussagekräftigere Namen wären schon schön.
  • in: RaspberryPi VPN Website

    geschrieben von hackyourlife

    matthias-detsch schrieb:
    Oder aber man richtet eine Art Cache auf dem VPN-Server ein, der sich alle paar Minuten die aktuellen Bilder vom raspi holt und selbst bereitstellt.
    In dem Fall wäre auch kein VPN nötig, denn dann könnte das RPi auch per Cron-Job (o.ä.) regelmäßig die Bilder zum Server hochladen.
  • in: Java Memory Bedarf auf Rechencluster

    geschrieben von hackyourlife

    Wenn du den Heap mit -Xmx begrenzt, dann begrenzt du damit nur den Heap. Die VM hat aber Overhead, den du zusätzlich noch berücksichtigen musst. Du könntest auch versuchen, den gesamten Heap von Anfang an anzufordern (-Xms müsste das sein), und schauen, ob es dann läuft. In dem Fall geht es wohl um virtuellen Speicher, aber keine Ahnung, warum die VM so viel anfordert.

    Unabhängig davon: warum musst du überhaupt separate VMs starten? Kann das nicht innerhalb einer VM laufen (= 1x JAR starten, und das JAR startet dann mehrere Threads)?
  • in: Unicode zeichen

    geschrieben von hackyourlife

    mein-wunschname schrieb:
    Danke euch, ich werde mir ein eigenes Keyboard-Layout basteln
    Falls du Neo nutzt, kannst du z.B. mit ♫uu20ac direkt das Unicode-Zeichen 20AC eingeben, und bei Neo gibt es auch eine Taste für »‘« und »’«. Wenn du öfter mal mit solchen Zeichen zu tun hast, wär das sicher einen Blick wert, anstatt selbst ein Keyboard-Layout zu bauen.

    Unter Linux gibt es auch ein erweitertes deutsches Keyboard-Layout, das Anführungszeichen u.ä. enthält, dort fehlt aber natürlich alles, was bei Neo sonst noch auf tieferen Ebenen ist.

    Ein guter Editor hilft dir übrigens auch dabei, Zeichencodes zu ermitteln. In vim kannst du z.B. mit »ga« den Zeichencode des Zeichens unter dem Cursor herausfinden.
  • in: Ideen um gratis Strom gut zu nutzen? (Studentenheim)

    geschrieben von hackyourlife

    technisches-chinesisch schrieb:
    Du kannst hier ungenutze Computerleistung an diverse Forschungsprojekt spenden bzw. für diese mit deinem Computer Berechnungen durchführen: http://boinc.berkeley.edu/
    Wenn du dich dann rein zufällig für das World Community Grid entscheidest, kannst du auch dem Team Lima-City.de beitreten (Lima-City-Gruppe). Link fürs beitreten zum Team: https://join.worldcommunitygrid.org?teamId=367XVR59W1

    EDIT: hat aber eigentlich der Fisch schon erwähnt.

    technisches-chinesisch schrieb:
    Es sind ein paar interessante Projekt dabei, aber achte darauf, dass dadurch auch der gewöhnliche Stromverbrauch steigt und eventuell auch die Lautstärke der Lüfter.
    Normalerweise sollte sich das grob regeln lassen … aber wenn er sowieso Strom »verheizen« will, dann wird ihm das wohl eher egal sein.
  • in: Spielvorschläge und Lieblingsspiele

    geschrieben von hackyourlife

    andy885 schrieb:
    Aber das beste Spiel ist meiner Meinung nach immer noch The Legend of Zelda Ocarina of Time.
    Wenn man mal einen Blick auf »The Legend of Zelda – Breath of the Wild« geworfen hat, dann kommt man schnell zum Schluss: Breath of the Wild ist um WELTEN besser (auch wenn Ocarina of Time deshalb nicht »schlecht« ist o.ä.).

    Womit wir auch schon beim Punkt sind: zur Zeit spiele ich The Legend of Zelda – Breath of the Wild. Das Spiel kann ich auch jedem empfehlen. Ansonsten spiel ich manchmal noch Metroid Prime (1/2/3). Oder AM2R. Aber mangels Zeit hält sich das gerade sehr stark in Grenzen bei mir :-(
  • in: [Java] SQL auf einfache Tabelle ohne Datenbank

    geschrieben von hackyourlife

    Falls deine Anwendung multithreaded ist, hast du mit SQLite schnell ein Problem, denn das kann damit nicht richtig umgehen. Schau dir in dem Fall hsqldb an, das kann auch in-memory, hat aber keine Probleme bei Multithreading (und ist extrem performant).
  • in: Umstieg von Windows 10 auf Linux

    geschrieben von hackyourlife

    invalidenturm schrieb:
    Auch Aqemu kriegt nix in Gang und meldet nur einen Initalisierungsfehler von KVM. Finde ich ganz toll, aus diesem Grund schrecken nämlich die meisten Windows Nutzer vor einem Wechsel zurück...

    Ich werde jetzt mal eine Softwareaktualisierung durchlaufen lassen, und danach weitersehen. Ich hatte nämlich schon bei der Installation des Metapaketes eine Fehlermeldung mit Heilungsversuch, welcher angeblich erfolgreich war.
    Was genau hast du jetzt gemacht, und welcher Fehler kommt? Steht im
    dmesg
    irgendwas interessantes? Vermutung: du hast KVM installiert, während noch das VBox-Kernelmodul installiert war, und das funktioniert nicht gleichzeitig.
    Vermutlich ist 16.10 die falsche Wahl.
    Ziemlich sicher sogar.
  • in: Umstieg von Windows 10 auf Linux

    geschrieben von hackyourlife

    Wenn ich raten muss:
    • Ist KVM sicher aktiv, oder nutzt du nur den Interpreter von qemu? Der Interpreter wäre extrem langsam, während KVM mindestens so schnell wie VBox laufen müsste. VBox mit aktivem vmx/svm und KVM gleichzeitig funktioniert aber, soweit ich weiß nicht, da nur eines der beiden Kernel-Module Zugriff auf vmx/svm hat, und deshalb nur eines geladen sein kann.
    • Hast du die paravirtualisierten Treiber installiert (virtio) und nutzt die entsprechenden Geräte? Das sollte allerdings keinen so großen Geschwindigkeitsunterschied hervorrufen.
    • qemu/KVM emuliert nur eine sehr einfache Grafikkarte. Wenn deine Software eine GPU braucht, musst du entweder mit VT-d eine echte GPU durchreichen, oder du hast Pech.

    Ein 32bit-OS im Gast ist übrigens nicht unbedingt empfehlenswert, da du damit auch den Speicher pro Prozess auf max. 4GB begrenzt (normalerweise sogar noch weniger, eher 3GB oder so), was gerade bei Grafikbearbeitung nicht wirklich eine gute Idee ist.
  • in: Bisher läuft es gut...(Wechsel auf Linux)

    geschrieben von hackyourlife

    all-in1 schrieb:
    Würde ja auch lieber heute als morgen auf eine der Linux Distributionen umsteigen.

    Ein bestimmtes Windows Spiel muss aber darauf laufen und auch ein paar Programme, die ich zum Arbeiten benötige.
    Wenn du ausreichend Speicherplatz hast, kannst du ja ein Dual-Boot-System bauen, und wenn das gewisse Spiel + Programme, die du zwingend unter Windows brauchst, auch in einer VM laufen, könntest stattdessen sogar Linux + KVM mit Windows-VM mit Windows-Only-Spiel/Programmen machen.

    invalidenturm schrieb:
    Ob ich 16.10 drauflasse, weiss ich noch nicht, ich werde den Fall erstmal beobachten, jetzt muss ich schnellstens VirtualBox draufpacken, um ein Windows7 zu installieren, damit ich dann Corel installieren kann.
    Muss es wirklich zwingend VirtualBox sein? Ansonsten solltest du dir wohl eher Qemu/KVM, vorzugsweise mit libvirt, ansehen, da gibts auch paravirtualisierte Geräte + Windows-Treiber, und KVM ist der "standard-Hypervisor, der fixer Bestandteil des Linux-Kernels ist". Wenn du bei libvirt nicht mit XML-Files hantieren willst, gibts mit dem virt-manager auch eine GUI, die ganz ähnlich wie VirtualBox aussieht.
  • in: onion Domain bestellen?

    geschrieben von hackyourlife

    Eine onion-Domain »kauft« oder »bestellt« man nicht, und du kannst dir den Namen auch nicht wirklich aussuchen. Stattdessen berechnest du einen kryptographischen Hash (oder RSA-Key? Ist schon zu lange her, dass ich mir das angeschaut habe), der dann die Domain repräsentiert. Was du tun kannst, ist, so oft einen Hash ausrechnen, bis du per Zufall ein paar sinnvolle Buchstaben in der Domain hast.

    Gehostet wird dann als »hidden service«: dazu ist nichts weiter nötig, als den Tor-Client zu starten, einen hidden Service zu registrieren, und lokal einen Webserver laufen zu lassen. Aber Achtung: bei hidden Services geht es, wie der Name schon sagt, darum, zu verschleiern, wo dieser Service gehostet wird. Deshalb musst du sehr gut aufpassen, dass du auf keinem Weg Informationen über dich mit diesem Service verrätst, denn sonst ist sofort der einzige Zweck des hidden Service zerstört. Heißt: dein Webserver darf keine Rückschlüsse auf dich zulassen.

    Auf lima-city sowas hosten ist recht sinnlos, denn das würde bedeuten, dass du verschleiern willst, dass das auf lima-city gehostet wird. Wenn du wirklich sowas hosten willst, solltest du dir wohl einen vServer holen (wenn ein hidden Service immer wieder online/offline geht, lässt sich das irgendwann mit einem Tor-Node korrelieren, deshalb ist daheim hosten nicht unbedingt die beste Idee), und dort darauf das laufen lassen.

    Eventuell ist dieser (abgelehnte) Wunsch einen Blick wert: https://www.lima-city.de/thread/onion-domain-tor
  • in: Ist Informatik wie Sprachunterricht?

    geschrieben von hackyourlife

    autobert schrieb:
    greedygroot schrieb:
    Ich habe das Gefühl das Lernen von Programmiersprachen hat weniger mit Informatik und Technik oder Mathematik zu tuen als mit Sprachen.
    Ohne Mathemaik und logisches Denken kannst du aber keine Programmiersprache wirklich beherschen.
    Nein, er hat schon recht. Bei den meisten Sprachen (mal von sowas wie Prolog o.ä. abgesehen) brauchst du keine Ahnung von Mathematik, da kannst du einfach die Syntax/Grammatik lernen und dann irgendwas damit fabrizieren. Das ändert natürlich nichts daran, dass du Ahnung von Mathematik, Informatik usw haben solltest, sobald du Programme schreibst (Algorithmen, Datenstrukturen, …).

    Der Titel passt allerdings nicht, denn Informatik hat nicht viel mit dem Lernen von (Programmier-)Sprachen zu tun.
  • in: Session ID (SID), also bei Lima LCWSID wird ständig geändert

    geschrieben von hackyourlife

    bastians-seite schrieb:
    Ach und außerdem; Lima citys neue Version lässt übrigens Fehlermeldungen gar nicht mehr zu. Kann sie hier bei Lima und bei PHP selbst ned mehr aktivieren......
    Unabhängig von der »Verwaltung«: früher™ konnte man per .htaccess-Datei Fehlermeldungen aktivieren. Falls das nicht per admin_value überschrieben wurde, sollte es auch jetzt noch möglich sein, Fehlermeldungen auf diesem Weg zu aktivieren. Hast du das bereits versucht?

    Ansonsten: in der Verwaltung gibt es ein komisches kleines Stethoskop-Symbol neben jeder Domain. Wenn du da drauf klickst, wird es wechselnd rot oder schwarz. Wenn es rot ist, werden Fehlermeldungen ausgegeben.
  • in: Grösse von JSON Datei reduzieren in Python

    geschrieben von hackyourlife

    otisoft schrieb:
    An MySQL Server anmelden -> JSON Datei lesen -> Jeden Datensatz in MySQL Datenbank schreiben -> Verbindung trennen
    Schau dir das Modul MySQLdb (Benutzung: PEP-0249) an, das wird dir dabei helfen. Funktionsweise: Verbindung aufbauen, Prepared Statement erstellen, für jeden Datensatz mit Daten füllen und ausführen, und anschließend die Verbindung wieder schließen.
  • in: Fuck Wort in Mariokart 8

    geschrieben von hackyourlife

    ga0815 schrieb:
    Manche Leute haben seltsame Hobbys,dieser hier zb ,der Youtuber "Harm".
    Ach was, Soundfiles von Spielen durchhören ist doch eigentlich was ganz normales! Normalerweise schaut man auch, ob man Datendateien nutzen kann (z.B. Grafiken, 3D-Modelle usw) …

    ga0815 schrieb:
    Nun hat sich dieser "Harm" die mühe gemacht und sich sämtliche dieser Sounddateien,umzuwandeln
    … zur Info: das macht überhaupt keine Mühe. Dazu gibts Tools wie »vgmstream« oder mit GUI »VGMToolbox«, denen gibst du die Files, und bekommst WAV heraus. Einzig die Files per Audacity zu bearbeiten kann Zeit kosten.

    Der Satz: interessant. Speziell, wenn man bedenkt, dass Nintendo grundsätzlich keine derartigen Worte in Spielen wie Mario Kart erlaubt, und sie per Fehler dann wohl doch vorkommen.

    Aber jetzt die Frage: was ist überhaupt deine Frage? :-D
  • in: preg_replace Zeilenumbruch ignorieren

    geschrieben von hackyourlife

    ggamee schrieb:
    Da du mit deinem Punkt also wirklich alle Zeichen meinst, auch LineBreaks, musst du die oben genannten Mengen nutzen. Das sieht dann so aus:
    '/<img([\s\S]*?)src="([\s\S]*?)"([\s\S]*?)>/'
    Du ersetzt quasi alle Punkte mit [\s\S], da diese Menge wirklich alle möglichen Zeichen umfässt.
    Das ist zwar eine Lösung des Problems, aber weder die einfachste, noch die schönste. Die wohl bessere Lösung ist es, den Modifier
    s
    zu nutzen, siehe auch staymyfriends Variante:
    s (PCRE_DOTALL)
    If this modifier is set, a dot metacharacter in the pattern matches all characters, including newlines. Without it, newlines are excluded.
  • in: Bootstrap "Camelcase" Ziffern

    geschrieben von hackyourlife

    Magst du eventuell markieren, was genau du meinst? Mir fällt hier nix auf: Screenshot

    Könnte es eventuell sein, dass da bei deinem Browser etwas nicht passt, oder bei deiner lokalen Schrift?
  • in: Berechnen von Gewichte

    geschrieben von hackyourlife

    Wie wärs damit: Volumen berechnen, und dann Gewicht = Volumen ⋅ spezifisches Gewicht?
  • in: STM32 Microcontroller [für Mac] Suche IDE

    geschrieben von hackyourlife

    k3y schrieb:
    Ich habe von meinem Prof. gehört das es nur eine Windows IDE gibt. Deshalb wollte ich mal fragen ob sich schon jemand mit dem Controller auseinandergesetzt hat. Ob jemand eine alternative IDE kennt (für macOS oder Linux).
    Wenn du nur eine funktionierende Toolchain brauchst, und dir die IDE egal ist: es gibt einen GCC, der Code für STM32 produzieren kann, und es gibt Tools wie avrdude u.ä., mit denen man ein Binary hochladen kann (wobei das natürlich vom Bootloader abhängt). In dem Fall kannst du dann per Makefile alles bauen lassen, und als IDE irgendwas beliebiges nutzen (von vim über emacs hin zu eclipse o.ä.).

    Interessanter wird es allerdings, wenn du z.B. Debugger u.ä. brauchst …
  • in: mp3-Bearbeitung mit Abblendkurven gesucht.

    geschrieben von hackyourlife

    mein-wunschname schrieb:
    Speichern als mp3 dauert deshalb so lange, weil immer aufs Neue nach mp3 konvertiert wird. Bei mehrfachem Bearbeiten lege ich meist ein Audacity-Projekt und konvertiere erst zum Schluss.
    … was auch zu besserer Qualität führt, da bei jedem Mal konvertieren zu MP3 Qualität verloren geht. Das ist auch der Grund, warum ich vorgeschlagen habe, die Aufnahme zuerst als FLAC (= verlustlose Kompression) zu speichern, und erst am Ende zu MP3 zu konvertieren.

    mein-wunschname schrieb:
    Für so eine Aufgabe (50 Dateien mit Fade in/out) wäre ein Kommandozeilentool, das so etwas im Batch Modus macht, ideal, gibt es aber nach meinen Recherchen nicht.
    Natürlich gibt es sowas, und wie so oft heißt es ffmpeg: *klick*
  • in: WAN ip nur "extern" errreichbar?

    geschrieben von hackyourlife

    Das ist wohl eine Einschränkung deines Routers. Er hat wohl eine Regel für über den WAN-Port kommenden Traffic, aber nicht für über den LAN-Port kommenden Traffic. Nutz einfach intern deine interne IP, und du hast keine Probleme.
  • in: mp3-Bearbeitung mit Abblendkurven gesucht.

    geschrieben von hackyourlife

    Besser wäre es, wenn du nicht direkt in MP3 aufzeichnest, sondern in FLAC, da du dann beliebig editieren kannst, ohne dadurch einen Verlust an Qualität zu bekommen. Am Ende kannst du das dann ja immer noch nach MP3 konvertieren.

    Wie dem auch sei: mit Audacity lässt sich derartiges tun. Einfach das Hüllkurventool nutzen, und die Kurve so zeichnen, wie du sie dir wünschst.
  • in: Auf NAS-Station via Programm zugreifen

    geschrieben von hackyourlife

    Im einfachsten Fall mountest du dein NAS als Netzlaufwerk, und greifst darauf genau so zu, wie du auch auf jede andere Datei auf deinem System zugreifen würdest.
  • in: Summe von n vielen Summen berechnen

    geschrieben von hackyourlife

    computerkurs2011 schrieb:
    Wenn ich das richtig verstehe hast du den Konstruktor von Token dreifach überladen und Token dient als „Behältnis“ für Operatoren oder nummerische Werte?
    Ja. Ein
    Token
    enthält die nötige Information über genau einen Token. Der überladene Konstruktor ist dazu da, dass man die 3 Arten von Tokens ohne unnötigem Schreibaufwand erstellen kann: ein Token, das nur einen Typ hat (z.B. eine Klammer auf; erster Konstruktor), ein Token mit einem String-Wert (z.B. ein Name; zweiter Konstruktor) und ein Token mit einem Zahlenwert (z.B. eine Zahl; dritter Konstruktor). Dadurch kann man z.B.
    Token t = new Token(TokenType.LPAR);
    aber auch
    Token t = new Token(TokenType.IDENT, "sum");
    schreiben, ohne immer alle 3 Werte (Typ, String und Zahl) übergeben zu müssen.

    Der Context erschließt sich mir nicht so wirklich. Was Maps bzw. HashMaps sind weiß ich aber was der Context genau tut außer mit get einen Wert zwischen zu speichern und mit set wieder auszuliefern habe ich noch nicht rausgefunden.
    Die (Hash)Map speichert immer zu einem Schlüssel einen Wert. Jetzt kannst du aber verschachtelt mehrere Summenfunktionen aufrufen, und dabei die Index-Variable in jeder Ebene überschreiben. Der
    Context
    sucht deshalb immer zuerst in seinem eigenen Scope, und wenn er dort nichts findet, dann sucht er im übergeordneten Scope. Das ist nötig, damit z.B. das funktioniert:
    sum(i; 0; 1; i * sum(i; 0; 1; i))
    Das
    i
    hat dabei vor der zweiten
    sum
    den Wert des Indexes der ersten Summe, während es in der zweiten
    sum
    den Wert des Indexes der zweiten Summe hat.

    Check() prüft ob es sich um den richtigen TokenType handelt, wenn mich nicht alles täuscht.
    Korrekt, und zusätzlich ruft es
    scan()
    auf, um zum nächsten Token zu springen.

    Scan() sucht nach Tokens mithilfe von next() ?
    Mit
    scan()
    wird ein weiteres Token gelesen, und das zuletzt gelesene in der Variablen
    t
    , welche immer das zuletzt gelesene Token enthält, gespeichert.

    Frage: warum haben scan() und check() keinen return, sondern speichern den Wert in sym. Wird dieser nicht immer wieder überschrieben?
    Falls du genau schaust siehst du, dass
    next()
    ein Return in jedem Zweig hat.
    scan()
    hingegen hat kein Return, da es nur die Variablen der Klasse aktualisiert. Ein Return ist deshalb hier nicht nötig (was würdest du da denn überhaupt zurückgeben wollen?).
    sym
    wird in dieser Methode zwar jedes Mal überschrieben, aber da es eine Variable der Klasse ist, haben auch alle anderen Methoden darauf Zugriff. Auch hier: wenn du genau schaust, siehst du, dass andere Methoden den Wert von
    sym
    nutzen. Theoretisch könnte man sich den auch sparen, und jedes Mal
    la.type
    schreiben.

    Was expr und summand 100% machen erschließt sich mir nicht ganz durch das -1 im case in Zeile 180.
    Um das besser zu verstehen, solltest du dir wohl die EBNF deiner Syntax denken, dann wird das schnell klar:
    EXPR := SUMMAND { ( "+" | "-" ) SUMMAND } .
    SUMMAND := FACTOR { ( "*" | "/" FACTOR } .
    FACTOR := CALL | number | "(" EXPR ")" .
    CALL := ident [ "(" ident ";" number ";" number ";" EXPR ")" ]  .
    Jede Funktion mit einem Namen einer Regel aus der EBNF parst genau diesen Teil der EBNF.
    expr()
    parst also einen gesamten Ausdruck, während
    summand()
    einen Summanden parst.

    Eine Besonderheit gibt es in der Regel
    CALL
    : da sowohl ein Funktionsaufruf, als auch eine Variable jeweils mit einem Namen beginnt, ist nicht klar, um was es sich handelt. Erst anhand des nachfolgenden (eventuell fehlenden)
    (
    kann dies entschieden werden. Es kann dadurch wieder ausschließlich anhand des nächsten Zeichens festgestellt werden, welche Regel benutzt werden muss. Da das für jede Regel gilt, handelt es sich hier um einen LL(1)-Parser, falls du das je irgendwo hören/lesen solltest (LL wegen der Art des Parsers, in dem Fall rekursiver Abstieg, und 1, weil anhand eines Vorgriffssymbols entschieden werden kann, welche Regel benutzt werden muss).

    Durch diese Grammatik ist übrigens auch sichergestellt, dass Vorrangregeln (z.B. * vor +) korrekt befolgt werden.

    Der Fall mit
    -1
    im
    next()
    sorgt lediglich dafür, dass am Ende der Eingabe ein
    EOF
    Token erstellt wird, sodass ein unerwartetes Ende immer zu einem Syntaxfehler führen wird.
    Außerdem prüft die Funktion
    parse()
    ob am Ende auch wirklich ein
    EOF
    erreicht wurde. Damit wird sichergestellt, dass nach einem Ausdruck nicht noch weitere Tokens übrig geblieben sind.

    Und wie genau funktionieren deine Nodes?
    Stell dir einen
    Node
    als einen Knoten in einem Baum vor, und stell dir vor, dass jeder solche Knoten einem Teil deiner Eingabe entspricht. Wenn du beispielsweise
    1 + 2
    eingibst, so wirst du einen Knoten mit
    +
    bekommen (abgebildet durch einen
    BinOpNode
    ), welcher 2 Kindknoten (je eine Zahl, also ein
    NumberNode
    ) hat. Wenn du jetzt den Knoten mit der Addition nach dem Ergebnis der Berechnung fragst (mit
    execute()
    ), so wird er zuerst die beiden Kindknoten nach deren Ergebnis fragen (der linke Kindknoten wird 1, der rechte wird 2 zurückgeben), anschließend die Berechnung (in dem Fall die Addition) durchführen, und das schließlich Ergebnis zurückliefern.

    P.S. Könnte ich die Ausgabe nicht am Ende, ganz böse, in ein eval packen und dann ausrechnen lassen?

    public static void main(String[] args) throws Exception {
                    String sums = new Sums().run("sum(i;0;4;i*sum(i;2;5;i*sum(i;7;8;i)))");
    		System.out.println(sums);
                    ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript");
                    System.out.println("Ergebnis: "+engine.eval(sums));
    	}

    Das könnte man, wäre aber äußerst ineffizient. Viel einfacher wäre es, in den Nodes nicht einen String zu bestimmen, sondern direkt das Ergebnis zu berechnen (jeweils in der
    execute()
    -Methode, und als Rückgabetyp natürlich
    int
    o.ä. statt
    String
    ).
  • in: Summe von n vielen Summen berechnen

    geschrieben von hackyourlife

    Es sieht nach endloser Rekursion aus. Das entsteht, wenn du keine Abbruchbedingung hast, oder, wenn du in einem Rekursionsschritt keinen Fortschritt erzielst. Bei dir wird das wohl bei summe/searchSum eine falsche Abbruchbedingung sein.

    Prüfen kannst du das alles mit assert-Befehlen, indem du entsprechende Bedingungen einfügst. In deinem Fall musst du dir eine Fortschrittsbedingung ausdenken, die eine Aussage darüber trifft, ob du einen derartigen Fortschritt machst, dass du je eine Abbruchbedingung erreichen kannst.

    Deinen konkreten Beispielfall würde ich ja so lösen (ist Python-Code, weil ich kein C# kann):
    def summe(start, end, f):
            return "+".join([ f(x) for x in range(start, end + 1) ])
    
    result = summe(0, 4, lambda i: "%s*(%s)" % \
                    (i, summe(2, 5, lambda x: str(x))))
    print("result: '%s'" % result)
    Das liefert folgendes Ergebnis, völlig ohne der Möglichkeit, jemals eine endlose Rekursion zu erzeugen:
    result: '0*(2+3+4+5)+1*(2+3+4+5)+2*(2+3+4+5)+3*(2+3+4+5)+4*(2+3+4+5)'
    Wenn du wirklich die Eingabe sinnvoll parsen und effizient verarbeiten willst, dann solltest du auch deine Parse-Funktionen vergessen und das anders lösen. Eine Möglichkeit wäre z.B. das Zerlegen der Eingabe in »Tokens«, die entweder ein Symbol wie »*« oder »+«, eine Zahl, ein Trennzeichen wie »;«, eine Klammer auf/zu (also »(« oder »)«) oder ein Name (z.B. »sum«) sind. Dann liest du im nächsten Schritt immer Token für Token, analysiert die Struktur, und erstellst einen Baum (Abstract Syntax Tree, kurz AST). Den kannst du dann mit sehr wenig Aufwand entweder direkt interpretieren (eher langsam), oder eine Art Bytecode erzeugen, die sich schneller ausführen lässt.

    Ein einfacher Parser mit AST-Interpreter könnte beispielsweise so aussehen (in Java): Sums.java

    Es wäre dabei übrigens einfacher, das Ergebnis direkt zu berechnen, anstatt das als Text auszugeben.
  • in: open_basedir und FTP Zugänge

    geschrieben von hackyourlife

    Im Normalfall ist das open_basedir hier so eingestellt, dass es immer auf den document_root zeigt. Mehrere Webseiten innerhalb eines User-Accounts sind somit automatisch getrennt. Das kannst du übrigens auch ganz einfach mit einer phpinfo prüfen ;-)
  • in: PHP Extension LDAP verfügbar machen

    geschrieben von hackyourlife

    Und die nächste Frage ist dann: wie sieht es mit Sicherheit aus? Normal hat man ein LDAP ja nicht einfach so mal übers Internet erreichbar …
  • in: C oder C++ lernen?

    geschrieben von hackyourlife

    kamakura schrieb:
    "Kontextfrei" bedeutet für den Compilerbauer (und für jeden, der sich für die wirklichen Unterschiede zwischen Programmiersprachen interessiert), dass sich Syntax- und Semantik-Überprüfung sauber, einfach und sinnvoll voneinander trennen lassen. Da macht einem bei C das typedef einen Strich durch die Rechnung, abgesehen davon wäre C (in diesem Sinne) kontextfrei. C++ dagegen hat nicht nur eine solche problematische Stelle, sondern ist generell Lichtjahre von Kontextfreiheit entfernt.
    Deine Argumente funktionieren gerade irgendwie so:
    A: »und wie man sieht, ist selbst 2 + 3 eine große Zahl, nämlich 6«
    B: »keine Ahnung wie du da drauf kommst, aber 2 + 3 = 5 …«
    A: »Sag mal gehts noch? Ich rechne doch in ℂ, das sollte doch klar sein!«
    B: »Und? Ist immer noch 5«
    A: »ich red ja auch nicht von der mathematischen Definition mit + = Addition, sondern von der Multiplikation, wie übrigens jeder andere auch, der sich für Zahlen interessiert«
    Nun gut, wie dem auch sei, ich habe mir nun einmal erlaubt, entsprechende Compilerbauer zu dem Thema zu befragen. Ergebnis:
    Die Syntax [von C] ist parsebar ohne Kontext, da macht das typedef keinen Unterschied.
    Ein »Compilerbauer«, der, so wie du es darstellst, auf die formalen Grundlagen scheißt, und nur anhand von »ich glaub aber, dass es so ist« entscheidet, ist im Übrigen nicht mehr als ein Pfuscher/Bastler.

    Zu C++: da bekommst du lediglich durch Konstruktoren ein Problem (läuft auf die Frage hinaus, ob es sich um einen Typ handelt, und ob somit
    …()
    da stehen darf). Jeder »Compilerbauer« wird das aber so lösen, dass die Syntax (für den Parser) dennoch eine CFG ist (Grund: CFGs sind gut erforscht und verstanden, und es gibt gute Algorithmen dafür, alles darüber ist problematisch), und dann im Semantikanschluss etwaige »Syntaxfehler« erkennen und ausgeben.

    noxious schrieb:
    Totaler Blödsinn, wenn du mich fragst. Python nimmt einem die Dinge ab, welche eben grade wichtig sind, wenn man programmieren will.
    davidlw schrieb, »was man im Alltag brauchen kann«. Und welche Dinge nimmt dir Python überhaupt ab, die wichtig sind, wenn man programmieren will? Effiziente Listen? Strings? Speicherverwaltung? OO? Große Standard-Bibliothek? Paketverwaltung für Bibliotheken? Es hat wohl einen einfachen Grund, warum Sprachen wie Python große Verbreitung haben. Stell dir vor, du hättest ein Problem, bei dem du u.A. Nägel irgendwo einschlagen musst. Der Python-Programmierer sagt: gut, »from werkzeugbox import Hammer; Hammer.einschlagen(Nagel, Wand)«. Und schon kann er sich dem nächsten Problem widmen. Du hingegen stellst erst einmal eine Suche an, ob es denn schon eine fertige Implementierung gibt. Dann stellst du fest: ja, gibts, kann aber genau mit deinen Nägeln nicht umgehen. Also nutzt du die Werkzeugbox, und erweiterst den Gummihammer mit einem Metallkopf zu einem Hammer, sodass er am Ende auch deine Nägel einschlagen kann. Und dann kannst du erst mal genau den einen Nagel einschlagen, für den du das brauchtest. Unterschied? In der Zeit hat der Python-Programmierer schon das nächste Problem gelöst. Vielleicht braucht sein Hammer zwar zum Einschlagen des Nagels 2min, während deiner das in 30s schafft, aber da am Tag sowieso nur ein Nagel eingeschlagen werden muss: egal. Es kommt bei vielen Dingen »im Alltag« nicht darauf an, ob das die effizienteste Lösung ist, aber sehr wohl, ob sie einfach ist, wenige Fehler hat, und schnell entwickelt werden kann. Du musst dir auch keine Gedanken darüber machen, wie eine Liste funktioniert, du willst einfach eine Liste nutzen. Was interessiert mich, wie ich den Speicher verwalten muss, das soll das Ding gefälligst selbst machen. Speicherüberläufe o.ä.? Dann soll es doch mit einem Fehler abstürzen, aber nicht Mist weiter fabrizieren. Ich will mich doch nicht mit der Sprache als Selbstzweck beschäftigen, sondern die soll mir helfen, mein Problem (aus der echten Welt) zu lösen. Und genau das dürfte der Grund sein, warum Sprachen wie Python weit verbreitet sind, wenn es um Algorithmen geht (Algorithmus in Python hast du gleich mal fertig, während du dich in Sprachen wie C/C++/Java/… erst mal um Typen, Wrapper-Objekte, und sonstigen Mist kümmern musst, und dabei willst du sowieso nur wissen, ob der Algorithmus so überhaupt funktioniert), JavaScript, PHP und Ruby, wenn es um Web-Dinge geht usw. Niemand will sich da freiwillig etwas so umständliches wie C(++) antun, wenn es nicht sein muss.

    Dazu kommen vollkommen schwachsinnige/unintuitive Operator-Überladungen. Python ist so ziemlich das schlimmste, was je geschaffen wurde. Es ist der Green-Lantern-Movie unter den Programmiersprachen, lediglich so häufig vertreten, weil es so viele schwachsinnige gibt, welche den blödsinn auch noch hypen. Ich meine: Warum ist
    a = [1, 2, 3, 4]
    b = a
    a = a + [5]
    b=[1, 2, 3, 4]
    aber
    a = [1, 2, 3, 4]
    b = a
    a += [5]
    b=[1,2,3,4,5]
    ?
    Wie lautet dein Vorschlag für ein besseres Overloading der Operatoren, sodass es sowohl konsistent, als auch verständlich ist? Zur Erinnerung:
    x + y
    erzeugt ein neues Objekt als Ergebnis, während
    x += y
    das Objekt
    x
    verändert. Was das bedeutet: bei
    a = a + [5]
    wird eine neue Liste erzeugt, und diese wird
    a
    zugewiesen, während das alte
    a
    , auf das
    b
    eine Referenz hat, unberührt bleibt. Bei
    a += [5]
    hingegen wird das Element zu
    a
    selbst hinzugefügt.
    b
    ist dabei ein Pointer auf das ursprüngliche
    a
    , und deshalb ändert sich auch
    b
    scheinbar. Wenn sich beides gleich verhalten sollte, wie würdest du das machen? Wenn
    +
    dabei
    a
    verändern würde, hättest du ein Problem bei
    c = a + [5]
    , und wenn
    +=
    ein neues Objekt erstellen würde, hättest du ein Problem mit
    a == b
    (und du würdest die Performance in den iMer befördern).

    Den Titel »die schlimmste Sprache überhaupt« kann Python sicher nicht für sich beanspruchen. Da musst du eher in Richtung PHP oder JavaScript schauen :-P

    Dann kommen semantische Whitespaces... Ich mein: Wenn ich semantische Whitespaces will, lern ich Whitespace, aber doch nicht so ein "Mal so, mal so"-Ding wie Python...
    Und wie oft muss ich mir Quellcode ansehen, der einfach nicht lesbar ist, weil Whitespace nicht konsistent/sinnvoll benutzt wurde? Für Anfänger ist gerade das also ein Vorteil, wenn sowas bestraft wird …

    Meiner Meinung nach sollten Leute also mit einer rein Objektorientierten Sprache wie beispielsweise Java beginnen. Man kann damit am Ende wenig sinnvolles machen […]
    Nun, wie viel Software glaubst du, gibt es, die in Java programmiert wurde? Und wenn du dir nun ansiehst, welche Zwecke sowas durchschnittlich erfüllt, glaubst du nicht, dass da fast ausschließlich »sinnvolles« dabei ist, wenn man die ersten Gehversuche der Anfänger dabei ignoriert? Nur so als Hinweis: es gibt wenige Sprachen, die es geschafft haben, von der SmartCard bis hin zum Mainframe eingesetzt zu werden, und es gibt auch relativ wenige Sprachen mit wirklich hochperformanten und effizienten JIT und GC-Implementierungen. Und nun überleg mal, welche Sprachen da wohl dazugehören. Java jedenfalls sicher.
  • in: Unicode Wert für Schriftzeichen finden

    geschrieben von hackyourlife

    Wenn du einen richtigen Editor nutzt, wie z.B. ViM, dann kann auch der dir den Zeichencode anzeigen. Bei ViM wird z.B. mit
    ga
    der Zeichencode des Zeichens, auf dem der Cursor steht, gezeigt.
  • in: Seafile/NGINX auf Raspi als NAS Webinterface

    geschrieben von hackyourlife

    computerkurs2011 schrieb:
    Daher jetzt mal eine einfache Nachfrage... brauche ich die stärkere CPU von Intel, wenn ich einfach nur Backups machen möchte, vllt noch einen VPN einschalte und einen Git Server installiere? Ganz vielleicht probiere ich mal einen eigenen Mailserver, obwohl mir das auf dem Pi schon zu viel Aufwand war und ich mit dem vom Lima eigentlich ganz zufrieden bin.
    Ich habe nur deshalb darauf hingewisen, da die DS215+ nicht einmal mehr vom Hersteller als aktuelles Produkt, sondern nur noch im Support-Bereich gelistet ist, und das Nachfolgermodell schon existiert. Soll heißen: könnte für Updates ein Nachteil sein, jetzt noch das ältere Modell zu besorgen.

    ARM vs Intel: bei Intel wird Kryptographie per Befehlssatz beschleunigt, und der wichtigste Vorteil ist, dass du auch teils virtualisieren kannst usw. Jedenfalls macht es einen Unterschied im zur Verfügung stehenden Softwareangebot, ob du ARM oder Intel hast, speziell beim Thema Virtualisierung, falls du virtuelle Maschinen auf dem NAS ausführen willst, was eventuell für Gitlab o.ä. interessant sein könnte.

    Link Aggregation: keine Ahnung wie gut das ohne HW-Unterstützung des Switches funktioniert, jedenfalls ist das erst interessant, wenn du mehr als ~110MB/s Übertragungsgeschwindigkeit brauchst. Und dann müssen das die Festplatten auch noch hergeben, wenn gleichzeitig unterschiedliche Geräte unterschiedliche Daten lesen. Ob du also wirklich von Link Aggregation profitierst ist die Frage. Wirklich profitieren würdest du jedenfalls, wenn auch dein Rechner mit mehr als einem Link angebunden ist, und du große Dateien überträgst. Ob der Switch das unterstützt: wenn es ein »dummer [Desktop-]Switch« ist ziemlich sicher nicht. Schau einfach im Datenblatt des Switches nach, ob dort etwas von LACP oder 802.3ad steht.

    Bei Link Aggregation geht es übrigens nicht darum, Daten »besser an mehrere Geräte zu verteilen«, sondern einen virtuellen Link zu erzeugen, der beispielsweise 2x1Gbps zu 1x2Gbps kombiniert (grob gesagt).

    Wegen Git: mach dir da keine allzu großen Sorgen, das hat normalerweise extrem niedrige Anforderungen an die Übertragungsgeschwindigkeit.
  • in: Wie bekomme ich mehrere ips von Zuhause aus?

    geschrieben von hackyourlife

    Nur der Vollständigkeit halber: ist das wieder mal so eine Scherz-Aktion wie damals das hier? *klick*
    Der andere Thread mit dem Inhalt »Was brauche ich alles für einen Server zuhause?« lässt es jedenfalls vermuten.

    mein-wunschname schrieb:
    Das Ganze ist ja nicht so einfach. Server sollten in klimatisierten Räumen stehen und müssen ständig gewartet werden.
    Das ist stark von der Hardware abhängig. Manche DELL-Hardware ist beispielsweise dafür gebaut, dass du sie mit Frischluft völlig ohne Klimaanlage u.ä. betreiben kannst (auch im Sommer), bei Temperaturen von max 45°C, extra um sich eine Klimatisierung (und die damit verbundenen Energiekosten) sparen zu können … einzig für eine saubere Luft musst du noch sorgen.

    Was aber dennoch hier komisch klingt: wie will der TE »mehrere Server in Schränken« betreiben, was ja durchaus viele zehn/hunderttausend Euros kostet allein in der Anschaffung, für eine entsprechende Konfiguration, Wartung der Software und entsprechendes Monitoring sorgen usw, wenn er noch nicht einmal weiß, wie er mehr als eine IP vom ISP bekommt? Abgesehen davon gehören da ja nicht nur Server dazu, sondern auch Netzwerk-Hardware + Konfiguration + Monitoring, Stromversorgung usw.
  • in: Java notwendig?

    geschrieben von hackyourlife

    ggamee schrieb:
    Java ist absolut nicht notwendig, und wenn du mich fragst für den Anfang sogar eine schlechte Wahl^^
    Dass es für Anfänger nicht die beste Wahl ist, stimmt wohl. Ob Java »notwendig« ist, ist aber eine ganz andere Frage und hängt von der Definition von »notwendig« ab. Falls es heißen soll »Man muss unbedingt Java programmieren können, und seine Projekte in Java schreiben«: nein, sicher nicht. Falls es aber heißen soll »Java ist [derzeit] notwendig, damit die Welt so funktioniert wie wir sie kennen«: ziemlich sicher, wenn man bedenkt, welche Menge an Java-Code derzeit existiert und eingesetzt wird (vor allem auch: an welchen Stellen eingesetzt wird).

    JavaScript für Anfänger ist allerdings wohl auch nicht gerade die beste Wahl, wenn man an all die kaputten Dinge denkt bis hin zur Umsetzung OOP. OK, mittlerweile wird an einigen Stellen auch mit aktuellen Versionen des Standards nachgebessert, aber wirklich ideal ist das trotzdem noch lange nicht. Wenn man wirklich noch nicht programmieren kann, ist wohl eher eine Sprache wie Python für den Einstieg besser geeignet, die ohne all diesen Quirks auskommt, die sich in JavaScript so verstecken.

    @ggamee: auch wenn du offenbar stark von JS überzeugt bist: mit Embedded-Geräten und Microcontrollern hast du wohl noch nicht allzu viel zu tun gehabt. Es gibt unzählige Microcontroller, die nicht einmal genug ROM haben, um ein JavaScript-Programm überhaupt darin ablegen zu können, und es gibt auch genug Microcontroller, die auch so nicht in der Lage sind, JavaScript auszuführen. Die Sprache der Wahl dort ist C, gefolgt von Assembler. JavaScript (und sonstige Skript-Sprachen) sind da einfach nicht. Dass ein spezieller Arduino das kann: ja, ist richtig. Ist aber auch ein riesiger Controller, genau genommen, und für »echte« Anwendungen würde niemand auch nur einen Cent mehr investieren als nötig (z.B. für mehr Rechenleistung/RAM/ROM, das von JavaScript im Gegensatz zu C/Assembler benötigt wird). Billig muss es sein, und sonst gar nichts. Wenn die Hardware mit besserer Software auch nur um ein paar Cent billiger gemacht werden kann, weil z.B. ein schwächerer μC genommen werden kann, dann wird das gemacht, weil das bei großen Stückzahlen einen deutlichen Unterschied macht. Dass die Software deshalb vllt teurer in der Entwicklung war, ist kein Problem. Und bei Embedded ist JavaScript auch nicht gerade geeignet, wenn es um Echtzeitanforderungen, Performance usw geht (und nein, JS-Performance ist nicht ähnlich wie bei optimiertem C/Assembler-Code). Niemand, der ernsthaft für μC oder embedded-Geräte entwickelt, käme auf die Idee, dort eine Skriptsprache einzusetzen, einfach nur weil das gerate Hip ist. Im Übrigen ist bei einigen Embedded-Anwendungen Sicherheit, und somit die Korrektheit der Software, wichtig (da das sonst zu Schäden bis hin zu Verletzungen/Toten führen kann), und das zu prüfen kannst du mit JavaScript ziemlich vergessen (und nein, nur »Testfälle« schreiben reicht in dem Fall nicht aus, bewiesen fehlerfreier Code wird da gefordert, da selbst ein Update schwer/teuer durchzuführen sein könnte). Also insgesamt: alles keine Einsatzgebiete für JavaScript.
  • in: Seafile/NGINX auf Raspi als NAS Webinterface

    geschrieben von hackyourlife

    computerkurs2011 schrieb:
    Ich hab mir jetzt ein paar NAS angeguckt und fand das Synology Diskstation DS215+ NAS System ganz ansprechen. Wenn ich das richtig verstehe, dann hat das NAS auch einen extra Chip für Verschlüsselungen.

    Soweit ich das sehe, sollte diese NAS für den Heimgebrauch, also Backups und streamen auf den TV, doch vollkommen ausreichen. Oder nicht?
    Ja, dafür reicht es ziemlich sicher. Die Frage, die du dir allerdings stellen solltest: willst du wirklich ein DS215+ kaufen, wenn es schon dessen Nachfolger (DS216+) gibt? Ich würde mir an deiner Stelle eher das oder das ansehen, abhängig davon, ob der Switch LACP kann (und ob du das brauchst) und ob du es je per Expansionseinheit erweitern willst (= weitere Festplatten per Gehäuse anhängen). Siehe Vergleich.
  • in: Speedtest

    geschrieben von hackyourlife

    invalidenturm schrieb:
    Der beste Speedtest ist die Realität. […] Ich habe mit Computerbild´s und AVM´s Speedtest recht unterschiedliche niedrige Werte bekommen, aber als ch den Realitätstest mit Aachen gemacht hatte sah alles besser aus. Ebenfalls ausschlaggebend ist, direkt per Netzwerkkabel am Router zu testen.
    Im Übrigen ist diese »Realität« wieder nicht unabhängig. Wenn ich das beispielsweise hier über aco.net mache (Arch-ISO o.ä. von einem Mirror, der bei einer anderen Uni liegt, herunterladen), dann bekomme ich den ganzen Tag über Übertragungsraten >500Mbps hin, während es zum nächsten Speedtest-Server (bzw sonst ins freie Internet hinaus) hin und wieder auch nur 50Mbps sind, und das auch noch von der Tageszeit abhängt. Soll heißen: nur weil eine Route zu einem einzelnen Server schnell ist, heißt das noch lange nicht, dass du im Normalfall diese Übertragungsgeschwindigkeit wirklich meistens erreichen kannst. Du kannst damit aber durchaus rausfinden, ob der Anschluss maximal die Geschwindigkeit erreicht, die er erreichen soll. Ob dir das hilft ist halt die Frage.

    Abgesehen davon kann selbst der eigene Router die Geschwindigkeit stark beeinflussen, und wenn da irgendwo ein WLAN noch dazwischen ist, dann sowieso.
  • in: Seafile/NGINX auf Raspi als NAS Webinterface

    geschrieben von hackyourlife

    computerkurs2011 schrieb:
    Ich kaufe mir ein Banana Pi M3: hier

    Schließe dort eine SSD: hier

    an. Dann sollte nginx die Daten schneller in den Temp Ordner schieben können, da 1000Mbit/s Leitung und eine SSD mit hohen Lese-/Schreibwerten. Nach dem die Datei vom langsamen NAS mit den von Windows gemessenen 57Mbit/s auf die SSD geschrieben wurden, kann diese ja theoretisch die Daten mit 500Mbit/s lesen und "ausliefern".
    Spar dir das Geld. 1min Google zu »Banana Pi M3 Network Performance« liefert:
    When I used longer test periods (-t 120) then the "Client --> BPi-M3" performance increased up to the theoretical limit: 940 Mbits/s. Then a second iperf thread jumped in, both utilising a single CPU core fully. And that's the problem: Networking is CPU bound, a single client-server connection will not exceed 500-600 Mbits/sec as it was the case when I started with A20 based boards 2 years ago. Since all we have now with the A83T is an outdated 3.4.39 kernel and since I/O bandwidth on the M3 is so low, I stopped here since it's way too boring to try to improve network throughput and also useless (disk access is so slow that it simply doesn't matter when Ethernet is limited to half of the theoretical GBit Ethernet speed... at least for me ;) )
    Und etwas später:
    And obviously the M3's 'SATA port' is the worst choice to connect a disk to. Any dirt-cheap external USB enclosure will perform better.
    Bei dem SATA-Port geht es um Transferraten von 15-30MB/s. Erwarte dir da also auch nicht allzu viel.

    Ich persönlich hätte ja in ein richtiges NAS investiert, selbst wenn es 300€ kostet zahlt sich das allein wegen der Performance locker aus (wenn es der Switch kann, kann man in der Preisklasse oft auch per LACP mehrere Links bündeln, um eine höhere Übertragungsrate zu erzielen). Wenn du basteln willst, dann kannst du es natürlich auch mit Bananen und Pis versuchen. Ich würde mir dann aber wohl eher einen größeren ODROID holen, der SATA kann und tatsächlich den 1Gbps-Netzwerklink auslasten kann. Abgesehen davon bekomme ich hier (mit einem richtigen NAS) selbst mit ganz normalen HDDs (7k2 RPM) eine Übertragungsrate von >1Gbps hin, eine SSD ist dafür also überhaupt nicht nötig.

    Bedenke auch, dass jegliche Art von Kryptographie (z.B. https, aber auch bei ssh) auf einem Raspi die CPU stark auslastet und dadurch die Übertragungsrate durchaus merkbar einbrechen kann.

    Warum legst du bei einem NAS überhaupt so viel Wert auf das Web-Interface? Warum reicht dir CIFS für den Datentransfer nicht? Das kann man immerhin, im Gegensatz zu einem Web-Interface, auf jedem wichtigen Betriebssystem (Linux, Windows, …) direkt mounten und nutzen. Und offenbar ist das ja auch schnell.

    Und eventuell ist für dich ja auch ein Blick in diesen Thread nicht ganz verkehrt: *klick*
  • in: Eure Meinung zu folgendem Studium

    geschrieben von hackyourlife

    technofan schrieb:
    Ich hab's mir mal angesehen und zumindest dieser Bereich kommt mir schon sehr praxisorientiert vor.
    Ich selber studiere Informatik an der Universität Bonn und da ist Praxis eher sowas wie ein Fremdwort, wenn's denn überhaupt existiert dieses Wort...
    Das könnte daran liegen, dass es sich dabei um eine FH handelt (keine Ahnung, ob ihr sowas in DE habt), und eben nicht um eine Universität.

    Meiner Erfahrung nach, läuft alles praktische eher nebenher und der Mathe-teil verbraucht deine gesamte Energie im Studium.

    Denn auch B-Bäume, Binär-Bäume, und wie sie nicht alle heißen, die du brauchen wirst... auch im Web-bereich, sind MATHE!
    Das kommt offenbar stark auf die Universität (und das Können des Studenten?) an. Ich studiere an der JKU in Linz Informatik, und mir kommt es jedenfalls so vor, als ob sich Mathematik durchaus in erträglichen Grenzen halten würde. Obwohl genug andere Studenten dabei fluchen, kann also sein, dass es nur mir so vorkommt. Hier ist es sogar so, dass »der praktische Teil« (= Übungen, in denen man irgendwelche Software o.ä. schreiben muss) teilweise die Leute die meisten Nerven kostet bzw gekostet hat (z.B. einen Teil einer MIPS-CPU in SystemVerilog implementieren; man hörte da oft Fluche von Studenten ala »Ich studier doch Informatik, und nicht CPU-Design!«), aber auch das fand ich erträglich, einfach und nur etwas zeitraubend, jedenfalls aber informativ und interessant :-D

    Ich weiß nicht, wie ein Studium in Österreich abläuft, aber eins kann ich dir sagen... Auch in Österreich ist Informatik in all seinen Formen auf gar keinen Fall zu unterschätzen... Das wird kein Zuckerschlecken. ;)
    An einer FH jedenfalls anders, als an einer Universität. In dem Fall ist nur die Frage, ob der Mathematik-Teil gerade »besser« oder »schlechter« für den TE ist, immerhin ist am Campus Hagenberg auch das RISC, mit all seiner symbolischen Mathematik, die tatsächlich nervig (und natürlich zeitraubend, eh klar) sein kann … aber ja, auch FH sollte man nicht unterschätzen.

    Ich hätte allerdings FH nie gewählt, aber aus einem anderen Grund: dort ist alles viel fixer vorgegeben, vergleichbar mit einer Schule mit Klassen u.ä. Hier an der Universität hingegen kann ich mir aussuchen, was ich wann machen will, und so habe ich aus Langeweile/Interesse auch schon im 2. Semester LVAs vom 4. Semester gemacht, oder jetzt im 4. Semester optionale LVAs und welche von so manchem Master, an einer FH wäre das deutlich schwieriger bis unmöglich. Eventuell sollte der TE also auch an diese Sache denken, wenn er sich für die FH entscheidet …
  • in: Meinung zur Programmiersprache Pascal als Einstieg

    geschrieben von hackyourlife

    Auch wenn es diese Art von Thread schon oft hier gab: an deiner Stelle würde ich mir Python anschauen bzw lernen. Diese Sprache ist relativ einfach zu erlernen (hm, das sagen immer alle über jede Sprache), sie bietet alle möglichen Konzepte für gleich oder auch später (procedural, OO, functional, …), sie wird tatsächlich eingesetzt und du musst hinterher nicht erst eine andere Sprache lernen, wenn du ernsthaft etwas umsetzen willst. Abgesehen davon ist sie nicht an einen Hersteller gebunden (so wie Delphi, C#, …) und auf allen wichtigen Plattformen gibt es eine Laufzeitumgebung, vom Telefon bis zu Mainframe.

    Andere Leute werden dir VB.NET empfehlen, aber das ist wieder etwas, womit du nicht sonderlich weit kommst. Wieder andere werden dir C# oder Java empfehlen, aber beide Sprachen würde ich nicht ganz unbedingt zum Einstieg in die Programmierwelt nehmen (bei Java z.B. wirst du zu OO gezwungen, auch dann, wenn es nicht nötig/sinnvoll ist, du musst viel Code für so ziemlich alles schreiben usw).

    Egal welche Sprache du aber nimmst: nur von Tutorials alleine lernt man nicht gut zu programmieren, genauso wenig wie man es nur durch das Lesen von Büchern lernt. Viel Übung wirst du brauchen, um gut programmieren zu lernen, und da kann man sich leider auch viel Mist angewöhnen, den man schwer wieder los wird. Es wäre also gut für dich, wenn du dir irgend etwas wie ein gutes (E-)Buch o.ä. besorgst oder eine Webseite suchst, wo nicht nur gezeigt wird, wie man irgendwelche Statements schreibt, sondern wo auch darüber hinaus gehende Dinge gezeigt werden, z.B. Konzepte wie Objektorientierung u.ä., Wege, wie man gewisse Arten von Problemen effizient löst (aka »Patterns«), warum/wie man sauberen/wartbaren Code schreibt usw. Wenn dir das hingegen völlig egal ist, dann wirst du später, sei es an einer Schule / Universität oder im Beruf, gewaltige Probleme damit bekommen, denn dort wird nicht nur »Programm läuft« erwartet, sondern eben auch qualitätvoller Code. Und warum ich dir das überhaupt schreibe? Weil ich z.B. an der Uni gesehen habe, dass es genug Leute gibt, die »mal so irgendwie« Programmieren gelernt haben, und damit auf die Schnauze fallen.
  • in: reguläre Ausdrücke von bis

    geschrieben von hackyourlife

    Ja, runde Klammern haben eine Bedeutung. Erstens zur Gruppierung, und zweitens als Match-Gruppen. Also:
    (ab|cd)|(ef|gh)
    ist nicht das selbe wie
    ab|cd|ef|gh
    Match-Gruppen: wenn du jetzt einen Treffer hast, dann willst du vllt wissen, welchen Wert da jetzt ein gewisser Teil hatte. Also z.B:
    das (\w+) Ding
    Da interessiert dich, welches Ding das jetzt war, und mit der Klammer sagst du: der Wert, den das
    \w+
    tatsächlich hatte, interessiert mich. Da kannst du dann auch extra vom Programmcode aus darauf zugreifen.

    In deinem Beispiel kann man die Klammern weglassen, da alle Oder-Operatoren auf der selben Ebene funktionieren sollen, und es einfach nur 3 Möglichkeiten gibt.

    Zeichenklassen wie
    [0]
    kannst du dir übrigens sparen, und einfach direkt das Zeichen angeben, in dem Fall also
    0
    . Mehr als unlesbar wird es durch die unnötige Zeichenklasse jedenfalls nicht.

    Warum du 1x0 extra herausgezogen hast, ist mir auch nicht klar. Vereinfacht man das, erhält man jedenfalls das, was ich bereits geschrieben habe (hat die selbe Bedeutung!):
    [1-4][0-9]0|5[0-2]0
  • in: reguläre Ausdrücke von bis

    geschrieben von hackyourlife

    airfield-manager schrieb:
    Mit den Klammern bin ich mir grad nicht sicher. Wenn es 100 - 520 ist wie muss ich dann Klamern setzen?
    Der Oder-Operator bindet am schwächsten, du brauchst also überhaupt keine Klammern. Für 100-520 wird es allerdings umständlicher:
    [1-4][0-9]{2}|5[01][0-9]|520
    bzw für 10er-Schritte:
    [1-4][0-9]0|5[0-2]0
  • in: reguläre Ausdrücke von bis

    geschrieben von hackyourlife

    davidlw schrieb:
    Ich weiß nicht, ob das optimal ist, aber 100-500 würde ich z.B. so angehen:
    [1-4][1-9][1-9]|500

    Ist jetzt ungetestet aber so in der Art sollte das funktionieren.
    Dass das ungetestet ist merkt man, denn es sollte wohl eher so aussehen:
    [1-4][0-9]{2}|500
    Also je 0-9, sonst könntest du z.B. 100 gar nicht darstellen, sondern min 111.
  • in: Zukunft von Java EE

    geschrieben von hackyourlife

    ggamee schrieb:
    Wie seht ihr das? Ist es in euren Augen auch eine tote Plattform? Oder meint ihr, dass Oracle da noch was im Ärmel hat? Und beeinflusst das eure Zukunft (zb Projektentscheidungen?), wenn ja, was sind Alternativen?
    JEE und tot? Aber noch lange nicht, solange ein Großteil der Anwendungen auf JEE basiert! Mag sein, dass Oracle da bei gewissen Dingen langsam ist, das kann ich nicht beurteilen. Aber was genau würde denn ein neues JEE (in dem Fall: JEE8) bringen, wenn in vielen Firmen noch nicht einmal JEE7 genutzt wird, und selbst Schwergewichte wie WebSphere erst seit ca diesem Jahr überhaupt JEE7 unterstützen? Ich würde dazu sagen: nur keinen Stress, die Welt der JEE-Anwender ist langsamer als man es aus einer JS/PHP/…-verseuchten Umgebung kennt.

    Wenn es sich Oracle allerdings mit IBM, Red Hat usw verspielt, dann könnte es natürlich passieren, dass die gemeinsam eine Alternative auf die Beine stellen. Aber wen störts? Java insgesamt stirbt deshalb nicht, und JEE ≤ 7 wird auch noch Ewigkeiten im Einsatz sein. Was dieses Neue dann bringen würde, müsste sich auch erst zeigen.

    Für Java selbst (nicht EE) baut Oracle übrigens durchaus einige interessante Technologien derzeit (man denke an den Aufwand, den sie z.B. in einen komplett neuen Compiler usw steck(t)en), also auch das ist weit von tot entfernt.

    Zu Projektentscheidungen: da ist eher die Frage, ob man das JEE Full Profile braucht, oder ob einem das Web Profile reicht. Aber ich sehe keinen Grund, warum man JEE nicht nutzen sollte, vor allem, wenn man einmal über das Ökosystem (z.B.: welche Bibliotheken gibt es für Java) sowie die in sich in Entwicklung befindenden, neuen Technologien nachdenkt, und sieht, was es derzeit schon gibt und was künftig noch alles möglich wird (man denke z.B. daran, was Graal/Truffle ermöglichen wird, auch wenn es wohl noch einige Zeit braucht, bis man das standardmäßig nutzen kann).

    mengel schrieb:
    Aus meiner Sicht ist es zu schwierig, mit bloßem Java dort reinzukommen, was die Plattform auch für mich recht unattraktiv macht
    Empfindest du? Wenn du dir das aktuelle JEE ansiehst, dann ist das dank Annotations usw wesentlich einfacher, als es früher mit den Unmengen an XML-Deskriptoren usw war. Man kann heute mit minimalem Aufwand Web-Anwendungen mit REST-APIs usw bauen, und muss zum Lernen nicht einmal viel mehr tun, als ein Tutorial dazu zu lesen … ich sehe das Problem also nicht.

    schrotti12 schrieb:
    Außerdem gibts noch andere Java EE-Implementierungen: Wildfly und Tomcat zum Beispiel. Beide von auch sehr namhaften Größen der IT Branche.
    … wobei Tomcat nur das Web Profile implementiert, und du somit eher TomEE o.ä. für Full Profile brauchst. Falls du überhaupt Full Profile brauchst. Fürs Web Profile gibts dann ja noch so Leichtgewichte wie Jetty, und für beides auch noch so Schwergewichte wie WebSphere … nur der Vollständigkeit halber. Aber ja, um Java selbst (und speziell auch die JVM) braucht man sich wirklich keine Sorgen zu machen :smile:

    Und zu Glassfish: mir ist wirklich niemand bekannt, der das jemals eingesetzt hat. Selbst Oracle bietet mit WebLogic einen anderen Anwendungsserver an …
  • in: Paar fragen über den Raspberry Pi 3B

    geschrieben von hackyourlife

    bruchpilotnr1 schrieb:
    Wäre dann diese auch mit OwnCloud Kompatibel? Es muss ja auch das System bzw. das betriebssystem drauf laufen oder geht das auch getrennt? Mir währs lieber wenn der Speicher auf einer anderen Festplatte läuft und das Owncloud ebenfalls alleine läuft.
    Die mountest du dort hin wo du sie haben willst, und dank VFS kann OwnCloud sie dann auch nutzen, korrekte Konfiguration vorausgesetzt.

    hackyourlife schrieb:
    Ich würde ja nie ein Raspi als »Cloud« nutzen.
    Andere Clouds werden überwacht, vorallem Dropbox und sind nicht sicherer als eine eigende cloud. Und wenn ich das dann auch übers tor netzwerk laufen lasse ist es generell noch sicherer.
    Egal was man unter »Cloud« verstehen kann, ein Raspi ist tendenzeill ungeeignet dafür. Für mich sind Anforderungen an eine »Cloud«, dass sie für mich unsichtbar (= transparent) arbeitet, skalierbar ist, verfügbar ist, und noch ein paar weitere Punkte (Management, …). Kann ein einzelnes Raspi das? Selbst wenn du es als NAS nutzen willst, ist es zu lahm, solange du nicht nur wenig Daten herumschieben willst. Abgesehen davon: was genau soll durch TOR sicherer werden? Bei dir gehe ich sogar eher vom Gegenteil aus: allein dadurch, dass du TOR nutzt, wirst du dir Probleme holen, die du gar nicht haben willst :-D
    Und so wie du hier Fragst, wirst du diese Probleme sowieso haben, sobald du das ans Internet hängst. Da wünsche ich dir schon mal, dass irgendjemand die Konfiguration deines Raspis besser verstanden hat als du, denn das würdest du wohl nicht mehr so schnell vergessen (können).

    Ach etwas perfomance wird das ding wohl hergeben. Außerdem kann ich nicht 24/7 meinen PC angeschaltet lassen. Kostet sehr viel geld und das hab ich nicht. Der Raspberry Pi verbraucht gerade soviel strom dass dieser höchstens 15 euro im jahr kosten wird. Deswegen ist ein Pi herforangend als websever geeignet.
    1) Probier es aus und staune. Aber damit du nicht allzu sehr enttäuscht wirst: mehr als 10MB/s maximum wirst du nie erreichen können.
    2) PC? Wer redet hier von PC?
    3) Stromverbrauch ist Irrglaube: sobald du HDDs dran hängst, bist du nicht wesentlich besser unterwegs, als mit einem normalen NAS, dafür aber wesentlich langsamer.
    4) »hervorragend als Webserver geeignet«: aha, für (d)eine Seite eventuell, auf die sich im Jahr höchstensl 2 Besucher verirren, von denen sich einer noch vertippt hat.

    Ich würde mir, wenn ich wirklich Speicher bräuchte, ein richtiges NAS holen. Selbst ein billiges Consumer-Synology-NAS o.ä. bietet da mehr Geschwindigket und Speicher als ein Raspi, bei relativ wenig Stromverbrauch. Ich würde das einfach hinstellen, einschalten, Account erstellen und läuft, ist schnell und ist einfach, zur Not auch mit Sync-Client usw. So ein Gerät hätte auch USB3, einbaubare Festplatten, Gigabit-Ethernet usw.
    Aber bastel einfach mal, du wirst eh sehen, was ich meine.

    Da du aber sowieso nur OwnCloud nutzt, geh ich mittlerweile auch davon aus, dass du derart anspruchslos bist, dass dir das egal sein wird.


    Wenn ich dennoch so ein Raspi unbedingt nutzen müssten, dann wäre die Frage: immer aktuell sein, oder möglichst stabil sein? Ich würde mir wohl Archlinux installieren, mit dem Risiko, dass ich gewisse Dinge bei Updates prüfen müsste. Raspbian wär da das Gegenteil, wo alles halbwegs stabil laufen sollte. Wie genau das jetzt mit OwnCloud zusammenhängt: keine Ahnung, hab ich nie genutzt, wird aber wohl auf beiden brauchbar laufen.
    Denke ich mir auch. Sonst wäre es wohl nicht so beliebt.
    Was genau soll beliebt sein?

    Sind den Externe festplatten wirklich eine alternative bzw. halten diese denn länger? Dann wäre hier wiederum die frage, bis wieviel Der Pi externe festplatten überhaupt unterstützt?
    Ja, das hält spürbar länger. Wie viel du anhängen kannst: Theoretisch: so viel, wie du an Festplatten per USB anbinden kannst. Praktisch: für dich durch das Geld für HDDs begrenzt.


    Ach ja: »Cloud« ist für mich übrigens AWS, GCE, oder für privat sowas wie OpenStack o.ä., eine (einzelne!) OwnCloud-Instanz als »Cloud« zu bezeichnen wär mir aber nicht eingefallen :-P


    Klar es gibt auch sowas oder MyCloud wo die systeme bis zu 8 Terabyte unterstützen bzw. anbieten aber dessen stomverbrauch ist höher. Und einen Pi ist vielfälltiger als sowas.
    Und was genau hat AWS/GCE/… mit »MyCloud« zu tun? Und warum würde man ein MyCloud besorgen, das von WD kommt? Siehe oben: mit einem richtigen NAS bist du wesentlich besser als »Dateiablage« unterwegs, als mit jeglichem Raspi/OwnCloud-gebastel. Wenn es dir aber nur ums Basteln geht, nur zu.
    Auch »Pi ist vielfältiger als sowas« solltest du dir genau überlegen: als ein MyCloud vermutlich, aber nicht als ein etwas besseres Consumer-NAS. Schau dir beispielsweise ein Synology-NAS wie das DS216+II an, da geht es so weit, dass du Container drauf ausführen kannst. Flexibler geht es wohl nicht mehr, und vom Stromverbrauch her solltest du dir merken: nur das Nichts-tun braucht keinen Strom. Wenn du schnell sein willst, und viele Features haben willst, dann wird das auch Strom ziehen müssen, auch beim Raspi. Und wenn ich mir das so am Beispiel DS216+II ansehe, dann stellt sich heraus: ~17W bei Zugriff auf HDDs (HDDs sind da bereits mitgerechnet!), das ist gar nicht viel, vor allem, wenn man bedenkt, dass allein eine laufende Festplatte schon (abhängig vom Modell) 5-10W Strom ziehen kann, und wenn du die wie beim Raspi als externe Disk betreibst, braucht auch jede ihr eigenes Power Supply mit eigenen Verlusten usw. Aber typisch: erst reden, dann denken. Ist man von dir eh gewohnt :smile:


    Wäre hier sowas erlaubt, hätte ich schon längst hier owncloud installiert. Aber man muss ja fair bleiben und es aktzeptieren. Es gibt zwar auch 5hosting.com aber leider ist deren Speicherplatz auch nicht unbegrenzt. Die maximale Dateianzahl ist auf 100.000 begrenzt. Und warum soll ich 240 € für 2 Jahre zahlen wo der hoster auch noch backups verbietet? da nehme ich lieber einen Pi installiere diesen und dann hab ich für immer eine sehr gute zwar nicht schnelle cloud.

    Der vorteil ist einfach, dass ich damit kontrolle hab über meine dateien und damit etwas sicherer bin als herkömmliche speicherhoster wie google und dropbox.
    Hm? Was genau definierst du als »sehr gut«, und was als »Cloud«? Ich sehe hier jedenfalls kaum etwas, was als »Cloud« durchgehen könnte, außer einen Teil im Namen »OwnCloud« :-P
    Und ganz abgesehen davon: warum überhaupt OwnCloud? Es gibt doch genug (bessere!) Alternativen …

    Und somit bleibe ich dabei: wenn du basteln willst, nur zu. Aber ob Raspi und OwnCloud als brauchbare Dateiablage eine gute Wahl ist, ist die Frage (die manche hier sicher und zu Recht mit »nein« beantworten werden).
  • in: Paar fragen über den Raspberry Pi 3B

    geschrieben von hackyourlife

    Ich würde ja nie ein Raspi als »Cloud« nutzen. Ja, man kann angeblich mittlerweile darauf virtualisieren (für Compute), und ja, man kann auch irgendwie damit Block- oder Object Storage bauen, oder auch sowas wie OwnCloud betreiben, wenn man meint, dass das eine Cloud sei. Aber: warum sollte man sich sowas antun wollen? Am Ende bekommt man sowieso keine brauchbare Performance heraus. Aber gut, so fällt dir wenigstens der Unterschied nicht auf, ob du gerade übers langsame Internet, oder direkt übers LAN aufs Raspi zugreifst.

    Wenn ich dennoch so ein Raspi unbedingt nutzen müssten, dann wäre die Frage: immer aktuell sein, oder möglichst stabil sein? Ich würde mir wohl Archlinux installieren, mit dem Risiko, dass ich gewisse Dinge bei Updates prüfen müsste. Raspbian wär da das Gegenteil, wo alles halbwegs stabil laufen sollte. Wie genau das jetzt mit OwnCloud zusammenhängt: keine Ahnung, hab ich nie genutzt, wird aber wohl auf beiden brauchbar laufen.

    Große MicroSD-Karten: davon würd ich als erstes die Finger lassen. Nicht nur, dass die eher langsam und teuer sind, sondern viel problematischer: Alterung usw., du kannst also nur begrenzt oft überschreiben, und dann geht es ein. Und dieses »begrenzt oft« ist im Normalfall noch weniger als bei einer billigen SSD. Also: wenn du schon wirklich zwanghaft ein Raspi als Dateiablage nutzen willst, dann tu dir selbst den gefallen und nimm externe Festplatten, wenn nicht wichtige Gründe (so wie »muss Solid State und möglichst ein einziges Teil sein«) dagegen sprechen.

    Ach ja: »Cloud« ist für mich übrigens AWS, GCE, oder für privat sowas wie OpenStack o.ä., eine (einzelne!) OwnCloud-Instanz als »Cloud« zu bezeichnen wär mir aber nicht eingefallen :-P
  • in: W-LAN Repeater per Ethernet anschliessen?

    geschrieben von hackyourlife

    xn--94h schrieb:
    test42test schrieb:
    Klar. Du musst nur den zweiten Accespoint mit der selben SSID und Passwort einrichten.
    Davon rate ich ab, da beide Signale in Reichweite sind wechselt der Client zwischen den Accesspoints hin und her und es gibt Probleme mit der Verbindung.

    Es funktioniert besser wenn man ein W-lan Netz "Basis" nennt und das andere "Repeater".
    Damit hast du eines der grundlegenden Konzepte von Infrastruktur-basiertem WLAN verpasst, nämlich das »Roaming«. Soll heißen: doch, funktioniert, ist auch so gedacht, dass es so funktioniert. Kurze, aber durchaus gute Zusammenfassung: *klick*.

    stoerchu schrieb:
    Es ist also nicht möglich beide Netzwerke als eines zu betreiben, wie bei einem Repeater?
    Doch, sollte man so konfigurieren: alle APs mit selber SSID, sowie selben Verschlüsselungsparametern konfigurieren, an das selbe LAN hängen, und auf die Kanal-Wahl achten.

    Wenn dein Client dann unpassend (= ständig, und ohne Grund) dazwischen hin- und herwechselt, dann weißt du auch sofort, dass du den getrost wegschmeißen kannst, da er sich somit nicht so verhält, wie er soll, und da du somit an sehr vielen Stellen auf dieser Welt mit Problemen rechnen musst (z.B. auf Universitäten, in Schulen, auf Flughäfen, auf Bahnhöfen und auch überall sonst, wo größere Flächen mit WLAN versorgt werden).
  • in: Best Practice: Gut skalierbarer Webserver in nativer Sprache

    geschrieben von hackyourlife

    Rust kann und kenne ich nicht, aber mit C / C++ machst du dir wohl direkt viel Aufwand … ich würde mir das erst mal mit Java bauen. Performance-Mäßig solltest du da immer noch Nodejs übertreffen können, aber es ist viel einfacher umzusetzen.

    Threads pro Anfrage spawnen: das tut man nicht. Nicht (nur) deshalb, weil es dann zu viele Threads gibt, sondern vor allem auch weil das Anlegen eines Threads viel Zeit braucht. Normalerweise baut man stattdessen einen Pool mit Worker-Threads, denen man dann Arbeit zuteilt. Du hast dann eine Queue, in die du Arbeit reingibst, und Worker-Threads, die nichts zu tun haben, holen sich dort Arbeit ab. Vorteil davon: es gibt nur begrenzt viele Threads, und es müssen keine Threads neu angelegt werden, während das Verteilen der Arbeit viel weniger Zeit braucht als Threads anzulegen.

    Du musst auch nicht zwingend Verbindungen an Threads binden, sondern kannst stattdessen Dinge wie select nutzen, um in einem Hauptthread darauf zu warten, dass sich irgendwas bei irgend einer Verbindung tut. Du kannst dann beispielsweise wenn sich bei einer Verbindung etwas tut, das wieder als Arbeitspaket in den Arbeitspool einstellen und von einem Worker abarbeiten lassen. Hier musst du nur darauf aufpassen, dass der Hauptthread nicht zum Bottleneck wird, und du auch nicht zu viele viel zu kleine Arbeitspakete generierst.

    Du kannst nun zu solchen Verbindungen weitere Daten (mit einer eigenen Datenstruktur) zuordnen, beispielsweise die Aktion, die als nächstes passieren soll, oder die dazugehörige Datenbankverbindung. Bei diesem Programmiermodell muss dir aber klar sein, dass Arbeitspakete möglichst nicht allzu groß sein sollten, da du sonst zu einem Punkt kommen kannst, an dem alle Workerthreads für längere Zeit beschäftigt sind und neue Arbeit sehr lange warten muss.

    In C/C++ müsstest du dich nun darum kümmern, mit pthreads o.ä. die Worker-Threads zu bauen, deine Arbeitspool-Struktur threadsicher zu gestalten, den Threadpool verwalten (und auch sauberes Terminieren erlauben), Sockets mit select überwachen usw. Warum ich dir da Java vorgeschlagen habe: weil du das dort wesentlich einfacher korrekt umsetzen kannst, ohne allzu viel Performance zu verlieren, und Dinge wie Speicherfehler usw nahezu ausgeschlossen sind. Wenn du das probehalber wirklich in Java baust: nimm nicht die im JDK enthaltenen ExecutorService-Klassen, denn laut Messungen hat sich gezeigt, dass die arg langsam beim Verteilen von Arbeit sind. Und außerdem kannst du dir somit auch das, was du in C bräuchtest, selbst bauen.

    Wenn du das wirklich in C/C++ bauen willst:: in C/C++ ist das genau gleich umzusetzen, aber mit durchaus mehr Aufwand verbunden, dass am Ende auch wirklich keine Lecks, Speicherüberläufe, Deadlocks o.ä. entstehen, und Performance-Mäßig wird das wohl nicht allzu viel schneller sein (auch wenn mich da ein Benchmark natürlich interessieren würde).

    Das mit »Nodejs nachimplementieren« meint wohl: Eine Umgebung bauen, um nach einem ähnlichen Programmiermodell zu programmieren, wie bei Nodejs, oder? Falls ja: das ist wohl richtig. Aber ist das jetzt schlecht? Es heißt übrigens auch noch lange nicht, dass Nodejs an sich wirklich schnell/performant ist, es heißt lediglich, dass durch das Programmiermodell bedingt hohe Performance erreichbar ist. Aber das ist auch mit anderen Managed-Sprachen möglich, genauso wie mit nativen Sprachen. Probier es einfach aus, und bau das mal testweise z.B. in C und in Java, und vergleich dann die Performance.

    Insgesamt würde ich mir übrigens derzeit mit dem Wissen, dass sich gerade bei Technologie wie der JVM u.ä. viel tut, nicht allzu viel auf C/C++/… geben, und für Web-Dinge einfach Java/Nodejs/Python/Ruby/… nutzen, also einfach das, was am einfachsten zu nutzen ist ;-)
  • in: Batch Datei in Unterverzeichnis ausführen

    geschrieben von hackyourlife

    Der Vollständigkeit halber:
    1)
    Desktop.getDesktop().…
    ist nicht der Weg, wie man Programme aus Java heraus startet. Dafür gibt es Runtime.exec() sowie den ProcessBuilder. Grund: wenn man Java Headless nutzt (also Java auf einem System ohne grafischer Oberfläche ausführt), dann funktioniert die Desktop-Klasse nicht.

    2) Gibt man bei exec() oder beim ProcessBuilder nur einen relativen Pfad an, ist er relativ zum CWD, genau so wie man es sich erwarten würde.

    3) Plattform-Unabhängigkeit geht verloren, sobald man sowas wie eine bat-Datei starten will. Startet nun jemand dieses Java-Programm dennoch auf einer anderen Plattform (in dem Fall z.B. Linux), so gibt es Probleme. Um das zu verhindern, solltest du prüfen, ob das Programm gerade auf Windows läuft, und falls es das nicht tut, entsprechend reagieren.

    4) Um Code hier lesbar zu formatieren, gibt es das
    [code]
    -Tag.
  • in: Retro Spiele Tipps (C64, Nintendo Sony, Sega etc)

    geschrieben von hackyourlife

    Es gibt hier übrigens noch einen Thread, in dem es um Emulation ging: *klick*
  • in: Haben Computer-Tastaturen noch Zukunft

    geschrieben von hackyourlife

    tchab schrieb:
    eine Kassiererin könnte auf einer virtuellen Tastatur wohl kaum so schnell zahlen eintippen wie auf der echten, deren Bedienung ihr in das Muskel-Gedächtnis übergegangen ist.
    Interessant, denn hier ist in vielen Supermärkten jeweils nur ein Touch-Bildschirm vorhanden (Spar, Penny, …), und offensichtlich funktioniert das trotzdem.

    Wegen »Gehirnwellen« und »viel zu komplex« usw: Ihr würdet es wohl auch für unmöglich halten, in Bildern Objekte zu erkennen, Musik zu transkribieren, Text zu übersetzen, Text aus Bildern zu gewinnen (fällt eigentlich auch unter »in Bildern Objekte erkennen«), Sprache zu Text zu übersetzen, in Go einen Meister zu besiegen usw, also kurzum alles, was man heute mit ANNs löst. Das Problem bei den Gehirnwellen ist wohl eher: was ist überhaupt ein Gedanke? Und wie misst man am sinnvollsten, ohne alles zu überlagern (so wie es eben bei einer Datenkappe der Fall ist; Elektroden in das Gehirn setzen will man sich schließlich nicht unbedingt)? Und wenn man nicht mal sowas grundlegendes weiß, wie will man Gedanken dann »auslesen«? Aber unabhängig davon wird bestimmt irgendwer dafür noch eine technische Lösung finden (wenn ich raten müsste: durch geschickte Nutzung eines ANN in Verbindung mit einer neuen Variante von Sensoren/Elektroden).

    Und von wegen »Gehirne sind ja so unterschiedlich«: dann braucht so ein Gerät eben am Anfang eine Trainingsphase, in der es dein Gehirn »kennen lernt« (hast du schon mal eine Datenkappe aufgehabt? Da gibts z.B. genau so eine Kalibrierung) :-P
  • in: C oder C++ lernen?

    geschrieben von hackyourlife

    kamakura schrieb:
    Die Frage war hier eher zu verstehen als: Warum kannst du nicht wie ein normaler Mensch auf eine gängige yacc-Grammatik verlinken?
    1) Warum sollte ich das tun? Es gibt schließlich mehr als nur yacc.
    2) Weil Coco/R im Gegensatz zu yacc einen Parser im rekursiven Abstieg erzeugt.
    3) Um sehr schnell zu zeigen, dass du eben nicht verstanden hast, worum es hier geht.

    Und von wegen Naivität: wozu sollte ich bei dir überhaupt irgend etwas voraussetzen, wenn du doch ständig beweist, dass du entweder keine Ahnung von dem hast, wovon du sprichst (z.B. wenn du von Strohmännern redest, wenn man dir lediglich etwas erklärt, was du ganz offensichtlich nicht verstanden hast), oder du auf irgendwelchen Punkten herumreitest, die nicht (vollständig) ausgesprochen wurden, weil man annahm, dass sie »eh klar« sind (z.B. LL(k)-Konflikte haben nichts mit der Chomsky-Hierarchie zu tun)? Oder Kombinationen davon? Für mich siehst du mittlerweile einfach nur wie ein Troll aus. Als Troll hast du dein Ziel also schon erreicht, du darfst dich also wieder verziehen. Dennoch bekommst du von mir eine Antwort auf all deinen Müll, den du hier verbreitest, da leider nicht jeder hier hinreichend viel zu dem Thema weiß oder Lust hat, selbst zu recherchieren.

    Denn das ist das einzige Problem mit dem typedef hier. Würdest du beim Parsen einen GLR-Parser nutzen (kann ebenfalls nur CFGs parsen), dann hättest du nicht einmal ein Problem mit LL(k)-Konflikten.
    Tja, aber hier bleibt es bei der reinen Behauptung. Im Lichte des Kommentars (wenn man's verstanden hat) ist das wohl eben nicht möglich.
    Falsch. Wenn du Ahnung von der Sache hättest, wüsstest du auch warum. Tipp: 1) GLR verstehen, 2) darüber nachdenken, was du gerade behauptet hast, 3) korrekte Aussage tätigen.
    Für die Sache mit dem typedef wirst du aber wohl selbst dann keinen eindeutigen Parse-Baum bekommen. Dass eine Grammatik nicht eindeutig ist, darf sein, hat aber nichts mit der Klasse der Grammatik zu tun.
    Und?
    Nichts »und«, denn um genau diesen Punkt geht es hier. Nicht mehr und nicht weniger. Du müsstest ihn nur endlich mal verstehen. Siehe Wikipedia.
    Ein weiteres Beispiel für uneindeutige Konstrukte ist übrigens z.B. das dangling else, und dort wirst du wohl auch nicht auf die Idee kommen zu behaupten, dass das die Klasse der Grammatik irgendwie berührt.
    Weil wie jeder weiß (außer dir), das nur eine scheinbare Uneindeutigkeit ist. Und ob es möglich ist, einen LL(1)-Parser zu bauen, der damit klar kommt, würde ich schon bezweifeln.
    Ob scheinbar oder nicht, es ist in der Grammatik eine Uneindeutigkeit. Ob sie dir egal ist, weil du den Parser eben so »hinbiegst«, dass er den Baum baut, den du willst, oder nicht, macht hierbei keinen Unterschied. Das dangling else kannst du übrigens problemlos mit LL(1) parsen, dabei bekommst du aber als Ergebnis, dass das else immer zum innersten if gehört.

    Da du offenbar immer noch nicht verstanden hast, worum es hier geht, und ständig LL(k)-Konflikte mit der Klasse lt. Chomsky verwechselst und noch nicht einmal verstanden hast, warum ein LL(k)-Konflikt kein Problem für einen GLR/LALR/LR/…-Parser ist, folgende Checklist für dich:

    [ ] Du hast verstanden, was überhaupt eine CFG ist (falls nicht: *klick* → Type-2; was »non-deterministic« hier heißt musst du schon selbst rausfinden).
    [ ] Du hast verstanden, was das Problem bei einem LL(k)-Konflikt ist bzw wodurch dieser entsteht (falls nicht: *klick*).
    [ ] Du hast die Arbeitsweise von Parsern im rekursiven Abstieg verstanden (falls nicht: *klick*).
    [ ] Du hast verstanden, warum ein LL(k)-Konflikt ein Problem für Parser im rekursiven Abstieg ist (hier darfst du ggf. selbst nachdenken).
    [ ] Du hast die Arbeitsweise von Parsern nach GLR/LR/LALR/… verstanden (siehe GLR, LR, LALR).
    [ ] Du hast verstanden, warum sich GLR/LR/LALR/…-Parser nicht für LL(k)-Konflikte interessieren (falls nicht: basierend auf den vorherigen Punkt selbst nachdenken).
    [ ] Du hast verstanden, welche Art von Konflikten es bei LR/LALR/…-Parsern gibt (falls nicht: siehe vorherige Punkte).

    Wenn du alle Punkte abhaken kannst, dann ist dir auch klar, dass:
    1) eine Grammatik Uneindeutigkeiten haben kann, da es für die Syntaxprüfung nicht nötig ist zu wissen, welche Regel wofür angewandt wurde. Und eine Grammatik sagt schließlich nicht mehr, als »Diese Zeichenkette liegt in der Sprache«, oder »Diese Zeichenkette liegt nicht in der Sprache« (bzw um genau zu sein: die Grammatik generiert alle Strings, die in der Sprache liegen). Nicht mehr. Und auch nicht weniger.
    2) Parser im rekursiven Abstieg wissen müssen, in welche Regel sie als nächstes springen müssen, und immer nur eine Regel verarbeiten können, während LR/LALR/… mehrere Regeln gleichzeitig verfolgt, bis er sich sicher ist, um welche Regel es sich handelt.
    3) yacc im Gegensatz zu Coco/R Parser nach LALR generiert, welche kein Problem mit LL(k)-Konflikten, sondern Probleme bei shift/reduce-Konflikten o.ä. haben.

    Glaubst du nicht? Sieh selbst: C89 oder C11. Natürlich wirst du jetzt fragen: »und was ist ein shift/reduce-Konflikt?«, aber hierfür verweise ich auf Google, denn ich habe keine Lust mehr, Leuten etwas zu erklären, wenn sie eh glauben, selbst alles besser zu wissen. Und wegen »/* identifiers must be flagged as TYPEDEF_NAME */«: auch hier geht es wieder darum, einen eindeutigen Parse-Baum zu erzeugen. Sparst du dir das, bekommst du einen reduce/reduce-Konflikt, und für
    a * b;
    wäre eine Deklaration oder ein Ausruck möglich.

    Und noch ein Beispiel (bzw dein eigenes sogar):
    // typedef int a;
    // int a = 1, b = 2;
    void f(void) {
            a * b;
    }
    Ist dieser Codeschnipsel syntaktisch korrekt? Natürlich könnte es sich, abhängig davon, welche Zeile auskommentiert war, um eine Deklaration handeln, genauso wie es sich sonst um einen Ausdruck handeln kann. Aber ist deshalb eine von beiden Varianten syntaktisch falsch? Nein. Also: egal welche Regel der Parser hier nutzt, er kommt zum richtigen Ergebnis: kein Syntaxfehler. Beim Parser in einem Compiler interessiert dich syntaktische Korrektheit aber nur ein wenig, wichtiger ist dir, welche Bedeutung dieses Konstrukt hat. Und da es hier eine Uneindeutigkeit gibt, hast du damit ein Problem, da du entweder einen Ausdruck oder eine Deklaration vom Parser bekommst. Das löst du bei einem Parser laut rekursiven Abstieg (da es sich hier gleichzeitig um einen LL(1)-Konflikt handelt (sowohl Deklaration als auch Ausdruck kann mit Identifier anfangen)), indem du einen LL(1)-Konfliktlöser einbaust. Und genau das sagt der Kommentar in der ursprünglich verlinkten ATG.

    Um das kurz per vereinfachter Grammatik zu zeigen:
    statement = ( decl | expr ) ";";
    decl = ident { "*" } ident;
    expr = ident "*" ident;
    Welche Regel nimmst du nun in
    statement
    , wenn du
    a * b;
    parsen willst? Du wirst feststellen: es ist völlig egal.

    Aber ist das jetzt eine kontextsensitive Grammatik? Ja, da eine kontextfreie Grammatik auch eine kontextsensitive ist, in diesem Fall wäre das allerdings sogar eine reguläre Sprache (ich nehme jetzt an dieser Stelle trotzdem einfach mal an, dass du zumindest die Beziehung der Klassen zu einander kennst, und die Bedeutung des Unterschiedes zwischen »Grammatik« und »Sprache« in meiner Wortwahl) :-P
    Wie man zeigen könnte, dass es sich hier wirklich um eine reguläre Sprache handelt? Grammatik Umformulieren:
    statement = ident { "*" } ident ";";
    Genau das könntest du auch mit der Grammatik für C tun, und du würdest feststellen: kontextfrei, aber nicht hilfreich für einen Parser, der dein Programm parsen soll. Für die formale Eigenschaft »kontextfrei« interessiert aber niemanden, ob man damit Parser bauen könnte. Und somit ist das, was du ursprünglich behauptet hast (»allein durch typedef wird die Sprache C kontextsensitiv«) schlicht falsch. Die Sprache C ist auch ohne typedef kontextsensitiv (wegen typisierten Variablen), und die Sprache der Syntax von C ist kontextfrei, unabhängig von typedef.

    Namen im Scanner auflösen oder Konfliktresolver wie bei der verlinkten ATG sind übrigens nicht die einzigen Lösungsmöglichkeiten: du könntest auch eine Regel »typedefdecl-or-mul« o.ä. machen, dann kannst du das im Semantikanschluss prüfen. Ergebnis: gar kein Konflikt mehr in der Grammatik.

    Sag was Sache ist, oder lass es bleiben.
    Das passiert schon die ganze Zeit. Nur bist du offensichtlich nicht in der Lage, den Ausführungen bis zu Ende zu folgen und sie auch zu verstehen. Du solltest es auch endlich unterlassen, ständig von Dingen zu reden, von denen du offensichtlich keine Ahnung hast, und dann so tun, als wärst du allwissend, während angeblich alle anderen Unsinn reden.

    Dass du ein Problem mit »Weißt du nicht …?« hast, könnte daran liegen, dass du eben nicht weißt :-P

    annihilus schrieb:
    Das ist eben, was mich an solchen Argumentationen immer ärgert. Ja, Containerklassen haben (logischerweise) gegenüber der minimalistischen Array-Lösung mehr Overhead. Aber nein, das macht sie nicht sofort "unsinnig ineffizient"! Tatsächlich, und das war mein Argument, wird man den Unterschied im Regelfall nicht mal merken, wenn man nicht gerade mit hunderten von Matrizen jonglieren muss... und das muss eine Anwendung in der Regel einfach nicht.
    Du hast doch hier selbst erkannt, was ich meinte:
    Hier überwiegt meiner Ansicht nach dann ganz klar der Vorteil der komfortableren Anwendbarkeit und Sicherheit.
    Also: nach solchen Regeln immer, auch wenn unnötig, hoch abstrakte Dinge nutzen, ist nicht sinnvoll, genauso, wie immer nur ganz low-level-Konstrukte nutzen, weil sie eventuell schneller sind. Eh klar. Nur nach einem Statement wie »was juckt mich schon Performance« (und so las sich das Ursprüngliche von dir), musste sowas einfach kommen :-P

    Igitt, er hat Java VM gesagt! So ein Rotz kann doch nur unsicher und langsam sein! :)
    Spaß beiseite, von so manchem C- oder C++-Entwickler wirst du diesen Einwand garantiert hören.
    Das hört man doch immer wieder, genauso wie man das doch auch bei sysvinit vs systemd usw hört. Aber wen interessiert sowas, wenn er ernsthaft damit zu tun hat und es dadurch handfeste Vorteile gibt?

    Und ganz generell: Selbst wenn diese oder eine beliebige andere neue Sprache das objektiv beste auf Gottes grüner Wiese wäre, wäre das noch lange kein Garant für Erfolg.
    Das ist wohl auch klar. Aber wenn weit verbreitete Sprachen neue Features direkt im Mainstream bekommen (so wie es hier aussieht), dann gibt es zumindest größere Chancen auf Verbreitung. Das Beispiel von mir ist außerdem nur eine Erweiterung, um bestehende Sprachen besser mischen zu können, sodass man also sowas wie »in meinem C-Programm schreib ich einen performancekritischen Teil in Assembler« auch auf höherem Niveau ala »in meinem Java-Programm schreib ich den performancekritischen Teil in C« machen kann, ohne unnötig zusätzliche Komplexität und Performanceverluste (JNI? *schauder*) dadurch dadurch zu bekommen. Oder gar noch höher ala »in meinem Python-Programm schreib ich einen performancekritischen Teil in Java« oder »in meinem Python-Programm nutz ich eine externe Java-Only-Bibliothek«.

    Angesichts dieser Tatsache antworte ich auf die Frage heutzutage meistens "C#". Richtig happy macht mich das nicht. Nichts würd mich mehr freuen, als wenn es bald mal wieder eine Sprache gäbe, die man guten Gewissens jedem Anfänger empfehlen kann.
    Ich würde wohl Python empfehlen, da diese Sprache sehr viel erlaubt und dabei einfach ist (z.B.: man braucht OO? Dann macht man OO. Braucht man es nicht, dann macht man es auch nicht; Listen usw? extrem simpel in der Handhabung; Lambdas? Schon ewig vorhanden; usw), selbst die Sprache schon zu halbwegs lesbarem Code zwingt (wegen Einrückungen), es eine mächtige Core-Bibliothek und eine Unmenge an weiteren Bibliotheken gibt und es dennoch praktisch nichts gibt, was man nicht mit Python tun kann (= man lernt eine Sprache, die man auch später noch sinnvoll nutzen/einsetzen kann). Und weil es außerdem unabhängig von MS ist und (fast) überall brauchbar läuft (im Gegensatz zu C#).
    Andere Leute würden wohl Lua oder Java empfehlen, aber ob das je eine bessere Wahl für einen Anfänger ist, ist die Frage. Entweder wird man mit vielen Konzepten erschlagen (Java ohne OO? Gibts nicht), oder man hat eine Sprache, die nur für Spezialanwendungen wirklich eingesetzt wird (Lua? Findet man wohl eher für Scripting in Spielen).

    Wenn man aber schon eine Sprache kann, und sich zwischen C und C++ entscheiden muss, dann ist das wieder etwas ganz anderes.
  • in: C oder C++ lernen?

    geschrieben von hackyourlife

    kamakura schrieb:
    @hackyourlife: was hat die verlinkte Datei für eine Grammatik? Definitiv nicht yacc. Und dass nur das typedef ein Problem macht, steht sogar in den Comments (ganz oben) der verlinkten Datei.
    Wie zu erwarten war, hat diese Datei die Grammatik »Attributierte EBNF«. Im Speziellen handelt es sich um eine Grammatik-Beschreibung für den Generator Coco/R. Dass du den nicht kennst wundert mich übrigens nicht.

    Zum Problem mit dem typedef: hast du denn auch nur annähernd verstanden, was dir der Kommentar in der Datei sagen will? Sieht nicht so aus, denn sonst wüsstest du, um was es sich bei einem »LL(1)-Konflikt« handelt, und dass das nichts mit kontextsensitiv/kontextfrei zu tun hat. Du leitest mit den LL(1)-Resolvern den Parser lediglich in eine konkrete Regel, um die Uneindeutigkeit (= mehrere Regeln beginnen mit dem selben Token) zu eliminieren. Denn das ist das einzige Problem mit dem typedef hier. Würdest du beim Parsen einen GLR-Parser nutzen (kann ebenfalls nur CFGs parsen), dann hättest du nicht einmal ein Problem mit LL(k)-Konflikten. Für die Sache mit dem typedef wirst du aber wohl selbst dann keinen eindeutigen Parse-Baum bekommen. Dass eine Grammatik nicht eindeutig ist, darf sein, hat aber nichts mit der Klasse der Grammatik zu tun. Ein weiteres Beispiel für uneindeutige Konstrukte ist übrigens z.B. das dangling else, und dort wirst du wohl auch nicht auf die Idee kommen zu behaupten, dass das die Klasse der Grammatik irgendwie berührt.

    Wenn wir schon dabei sind:
    CFG: A → xBy
    Wenn du dir nun die verlinkte Grammatik ansiehst, wirst du feststellen, dass du ganz ohne Resolvern immer noch eine CFG hast (weil immer noch alle Regeln von der Form A → … sind). Nur kannst du die halt nicht mehr mit einem rekursiven Abstieg sinnvoll parsen.

    Und unabhängig davon kann man, wenn man schon Syntax und Semantik trennt, diese Trennung sehr willkürlich wählen und damit praktisch immer eine CFG erhalten. Die Praxisrelevanz deines Beitrages zum Thema »Grammatik« ist also sowieso von vornherein mit 0 zu bewerten. Einzig, dass C++ deutlich komplexer zu parsen ist, ist richtig und hervorzuheben.

    annihilus schrieb:
    Und was erst die Matrizen angeht... wenn ich wiederholt und performancekritisch in meinem Programm mehrdimensionale Felder benötige... dann entwickele ich genau die Art von Anwendung, für die ich ohnehin die Verwendung von C nahegelegt habe.
    In allen anderen Fällen spricht überhaupt nichts dagegen, generische Listen oder Maps (sei es aus std, boost, Qt oder was auch immer) zu schachteln. Wenn Performance-Fetischisten bei der Vorstellung einen Infarkt erleiden ist mir das relativ schnurz, I just work here.
    … was natürlich nicht heißt, dass man bewusst und absichtlich unsinnig ineffizienten Code bauen sollte. Dafür gibt es schließlich besser geeignete Sprachen :-P

    Die C-Kompatibilität war beim ursprünglichen Entwurf ein zentrales Feature des Designs von C++. Die daraus resultierenden Probleme werden von Stroustrup auch offen eingeräumt, aber damals war es für den Erfolg eben essentiell wichtig. Und dass man mich an der Stelle nicht falsch versteht: Es kann auch heute noch nützlich sein. Allerdings nicht für Code den man selbst schreibt, sondern zum Einbinden von C-Fremdbibliotheken.
    Wenigstens hat C eine brauchbare Kompatibilität. Bei C++ hast du ja schon das Problem, dass eine Bibliothek, die mit einem Compiler A erzeugt wurde, nicht unbedingt mit einem anderen Compiler B benutzt (= dagegen gelinkt) werden kann. Ob das in der Praxis ein Problem ist oder nicht sei dahingestellt.

    Genau da kommen dann die sogenannten "C++-Killer" ins Spiel, die im Prinzip die gleiche Mächtigkeit wie C++ bieten wollen ohne den C-Krampf. Ob die nun D, Go oder Rust heißen. Die Idee ist gut, der Erfolg (leider) nicht. Denn diesen Sprachen fehlt das Ökosystem aus Tools, Frameworks und Bibliotheken, das C++ so erfolgreich macht. Und da liegt die Ironie bei der Sache: Genau weil C++ bei seiner Entstehung die alten C-Zöpfe nicht so konsequent abgeschnitten hat, deshalb konnte es überhaupt groß werden, und nun jeder Bemühung trotzen, es genau wegen dieser alten Zöpfe loszuwerden...
    Wie es scheint, wächst da gerade mal wieder was neues heran, was verspricht, sowohl C-Bibliotheken zu unterstützen, als auch »sichere« Sprachen wie Java/Scala/Python/…, mit der Möglichkeit, diese Sprachen perfekt mischen zu können, ohne Performance-Verluste an der Sprachgrenze und ohne umständlichen Foreign Language-APIs. Sollte das tatsächlich etwas werden, hätte das wohl sogar recht schnell große Verbreitung, handelt es sich doch dabei um eine Weiterentwicklung der durchaus verbreiteten Java VM. Und spätestens, wenn das was wird, muss man sich hoffentlich weniger mit C++ o.ä. herumnerven.
  • in: So verwendet ihr euren Raspberry Pi

    geschrieben von hackyourlife

    kalb schrieb:
    Und ggf auch Lokale Videos (als diverse Formate, Iso, Vobs, mpg2 & mpg4)

    Packt der RasPi 1 das überhaupt?
    Das kommt auf das Format und den Player an. Für mpeg2 usw (VOB ist auch nichts anderes) gibt es zwar, soweit ich weiß, einen HW-Decoder, aber den muss man per Lizenz erst freikaufen, wenn ich mich recht erinnere. Ansonsten per SW-Decoding: zu vergessen, das hat eher Diashow-Charakter. Andere Formate wie h264 kannst du hingegen immer per HW-Decoder abspielen, allerdings musst du dann einen entsprechenden Player nutzen, der auch den HW-Decoder verwendet. Das läuft dann allerdings flüssig und braucht kaum CPU-Leistung.

    Du solltest dir aber auch überlegen, wie du Audio aus dem Raspi holst. Über den 3.5mm-Anschluss ist das eher zu vergessen, da die Qualität nicht sonderlich gut ist.
  • in: C oder C++ lernen?

    geschrieben von hackyourlife

    annihilus schrieb:
    Ein kompakter Sprachkern (woraus du wahrscheinlich die angeblich einfache vollständige Erlernbarkeit ableitest) macht eine Sprache nicht simpel, sondern eher ist das Gegenteil der Fall.
    Bestes Beispiel dafür: Assembler. Die Syntax lässt sich selbst mit einem DFA parsen, aber um auch nur irgendetwas damit tun zu können, muss man die (abstrakte) Arbeitsweise der CPU, des OS usw verstanden haben. Das Problem ist hier also: die Sprache hat man sehr schnell verstanden, aber auch nicht mehr. Nur braucht man dieses »mehr« (z.B. I/O), um mit der Sprache sinnvoll etwas anfangen zu können.

    kamakura schrieb:
    Hat man die beiden genannten Bücher durchgearbeitet, was das bearbeiten der Übungen darin natürlich mit einschließt, dann wird man C vollständig verstanden haben, heißt: Es gibt keine Syntaxkonstruktionen oder Eigenheiten der Laufzeitumgebung mehr, die man nicht versteht.
    Syntaxkonstruktion wohl nicht, allerdings gibt es durchaus Compiler- oder Bibliotheks-Eigenheiten, die du nicht verstehst. Dafür musst du die auch nicht verstehen, da es sich dabei um nicht spezifiziertes Verhalten handelt :-P
    Viel wichtiger ist dabei sowieso zu wissen, was überhaupt in diese Kategorie fällt und wie man das vermeidet.

    kamakura schrieb:
    Kannst du zu den fehlenden Typprüfungen Beispiele bringen?
    Vermutlich meint er Laufzeit-Typinformation, die es in C überhaupt nicht gibt.

    Und sind C++-Referenzen denn sicherer als C-Pointer? Was bei dieser ganzen Pointer-Referenzen-Diskussion untergeht, ist, dass allein nur die Existenz eines Garbage-Collectors einen wesentlichen Unterschied machen kann. Bei Go und Java ist aufgrund des Garbage-Collectors garantiert, dass Pointer (Go) bzw. Referenzen (Java) nicht ins Leere zeigen. C und C++ haben aber keinen Garbage-Collector, allein schon daher können ihre Pointer/Referenzen gar nicht sicher sein.
    Richtig, allerdings ist die Aussage, dass C++ keinen GC hat mittlerweile auch überholt, da
    smart_ptr
    u.ä. einen rudimentären GC im Hintergrund nutzen, auch wenn du das natürlich nicht verwenden musst. Das nur der Vollständigkeit halber.

    Bei Go und Java ist aufgrund des Garbage-Collectors garantiert, dass Pointer (Go) bzw. Referenzen (Java) nicht ins Leere zeigen.
    Es gibt allerdings in Java durchaus auch Möglichkeiten, eigenartige Referenzen zu konstruieren oder unsicheren Speicher anzufordern. Man muss das allerdings ganz bewusst und absichtlich tun.

    Sowohl C als auch C++ haben (nachdem der Präprozessor durchgelaufen ist) keine kontextfreie Grammatik. Aber C wird nur durch typedef kontextabhängig.
    Kannst du diese Behauptung auch irgendwie belegen? Die Syntax basiert jedenfalls auf einer kontextfreien Grammatik (gilt auch für C++, darfst du gern selbst suchen), und durch Typinformation (die du nach dem Parsen erst im Semantikanschluss verarbeitest) ist die Sprache der gültigen (= auch semantisch korrekten) C-Programme (so wie übrigens bei den meisten Programmiersprachen) kontextsensitiv. Aber was will das mit
    typedef
    zu tun haben?

    kamakura schrieb:
    C++ ist dagegen extrem kontextabhängig. Je nachdem, welche der beiden Zeilen du in folgendem C++-Code auskommentierst
    // int aa, bb, cc(int);
    // struct aa {int x, y;} *bb;
    aa * cc(bb);
    ist die dritte Zeile ein Ausdruck oder eine Deklaration. In validem C muss die dritte Zeile jedoch sicher ein Ausdruck sein.
    … was allerdings daran liegt, dass in C ein
    struct
    -Datentyp nicht den selben Namensraum nutzt wie alles andere. Änderst du dein Codebeispiel und fügst eine weitere Zeile ein, sodass
    aa
    im selben Namensraum verfügbar wird, in dem du es auch suchst, sagt der Compiler darüber, dass der Parameter nur einen Namen hat, aber keinen Typ (alleine um das feststellen zu können braucht er schon einen Kontext), allerdings übersetzt er (mit c89, pedantic):
    void f(void)
    {
    #ifdef A
            int aa, bb, cc(int);
    #else
            struct aa { int x, y; } *bb; typedef struct aa aa;
    #endif
            aa * cc(bb);
    }
    Ausgabe:
    % gcc -std=c89 -pedantic test.c -c -o test.o
    test.c: In function ‘f’:
    test.c:8:2: warning: parameter names (without types) in function declaration
      aa * cc(bb);
      ^
    Das zusätzliche
    typedef
    (ein
    Decl
    in der zuvor verlinkten Grammatik) ändert ja syntaktisch nichts an der letzten Zeile, allerdings an der Semantik. Das Gute daran: die Variante ohne definiertem
    A
    hat in C eine völlig andere Bedeutung als in C++. Falls das zeigen soll: durch
    typedef
    kann man die Semantik von Statements ändern: korrekt. Falls das zeigen soll, dass erst durch
    typedef
    die Sprache C kontextsensitiv wird: falsch, das ist sie auch so. Beispiel:
    void f(void) {
            a->x = y % 2;
    }
    Ist dieses Programmfragment gültig? Wenn es sich um eine kontextfreie Sprache handeln würde, müsstest du das jetzt entscheiden können. Da dies aber davon abhängt, welchen Typ
    a
    und
    y
    hat, hast du hier einen Kontext. In der Realität ist das aber sowieso relativ egal, da praktisch jeder Parser die kontextfreie Syntax parst, und hinterher erst auswertet, ob das semantisch korrekt ist. Du hast allerdings recht, wenn du sagst, dass die C++-Syntax extrem komplex ist, nicht umsonst parst man C++ normalerweise Bottom-Up und nicht Top-Down.

    Abschließend sei noch gesagt: gut, dass sich VM-Technologie recht brauchbar entwickelt, und mittlerweile schon selbst C auf der JVM mit recht geringem Performance-Verlust im Vergleich zu einem nativen Binary läuft. Denn somit muss man nicht mehr alles in C schreiben um schnell zu sein, oder alles in Java o.ä. um einfach zu sein (grob gesagt), sondern kann fast alles in Java o.ä. bauen und für bestimmte Programmteile auf Features von C zurückgreifen. Ganz ohne durch diese Sprachmischung einen Overhead, der sich negativ auf die Performance auswirkt, zu bekommen.

    @Topic
    Ob man nun mit C oder C++ anfangen sollte, wenn man bereits programmieren kann: C ist sicher die bessere Wahl. Kurz zusammengefasst warum: weil C eben doch die Basis von C++ darstellt (nicht nur zufällig sind viele C-Programme auch gültige C++-Programme). Der Rest wurde hier hoffentlich schon ausführlich genug erklärt.
  • in: Taskmanager deaktivieren

    geschrieben von hackyourlife

    Die wichtigste Frage ist ja: warum willst du ihn überhaupt deaktivieren? Schließlich kann man dann ja immer noch so etwas wie den Process Explorer herunterladen/starten oder die CLI-Befehle »tasklist« oder »taskkill« usw nutzen …
  • in: Samsung Galaxy S5 mini Update auf 6.0

    geschrieben von hackyourlife

    Chatartige Unterhaltungen, deshalb verschoben.
  • in: ARM Laptops - Linux noch Salonfähiger?

    geschrieben von hackyourlife

    Konfiguration per GUI nötig: na und? Da löst du dein Konfigurationsproblem, indem du an einer Stelle irgend eine Zeile änderst. Und diese Zeile kannst du suchen, später für viele Installationen automatisiert ändern, usw. Unter Windows? Erst mal das Internet befragen, wo diese Option überhaupt ist (Systemsteuerung? Registry? Konfigurationsdatei? Group-Policy? Anwendungskonfigurationsdatei?), und dann irgendwie umstellen. Und andere Systeme (ja, es gibt mehr als nur Linux/Windows) liegen irgendwo dazwischen.

    Inkonsistenzen bei der Shell: hast du einmal sowas wie die Kommandozeile unter Windows (cmd) benutzt? Dort konnten sie sich offenbar nicht einmal entscheiden, ob Optionen mit »/« oder mit »-« eingeleitet werden. Unter Linux/Unix hingegen ist fast immer »-« für Optionen, ein einzelnes »-« für kurze Optionen, und »--« für lange Optionen. Ausnahmen (dd oder java) bestätigen natürlich immer die Regel. Außerdem hast du unter Linux/Unix nicht »die Shell«, sondern verschiedenste Shells (siehe bash, csh, ksh, zsh usw). Und von der Shell hängt sowieso nicht ab, wie ein Programm seine Kommandozeile interpretiert. So wie übrigens auf den meisten Systemen.

    Dateisystem / Berechtigungen: das ist sogar ganz intuitiv. Datei löschen = Dateiverzeichnis verändern = Verzeichnisberechtigung spielt eine Rolle. Und außerdem würde dir ein (richtig konfiguriertes) rm beim Versuch eine Datei zu löschen, für die keine Schreibberechtigung vergeben wurde, folgendes sagen:
    rm: remove write-protected regular file 'file'?

    Das VFS unter Linux zeigt sogar, wie gut ein VFS implementiert sein kann, und wie einfach es sein kann, völlig transparent die unterschiedlichsten Dateisysteme bereitzustellen, ohne, dass du das als Anwender überhaupt merkst. Unter Windows? Wunschgedanken. Und unter genügend anderen Systemen auch.

    man/info: und für welche Dinge genau braucht man im täglichen Leben wirklich info? man reicht in fast allen Fällen vollkommen aus. Abgesehen davon ist info eine Eigenheit, die du auf anderen Unixen nicht findest, und zwecks billigem Windows-Vergleich: welches Hilfe-System willst du denn unter Windows nutzen? Also in Anwendungen natürlich, da von Windows selbst eh fast nichts mitkommt. Da wirst du feststellen, dass es da gleich mehrere inkompatible Systeme gibt, mit chm, winhlp32 usw. Und das Beste: manche werden auch nicht mehr unterstützt, wie das eben genannte winhlp32, sodass du unter aktuellen Versionen von Windows ältere Hilfedateien gar nicht mehr (so einfach) lesen kannst.

    Windows-Kommandozeile: die muss man nicht benutzen? Als DAU vermutlich nicht. Aber sobald du irgendwas machen willst, was etwas darüber hinaus geht, kommst du um die Kommandozeile nicht herum. Installer-Image auf einen virtuellen Datenträger installieren? dism, auf der Kommandozeile. Den Bootloader verändern, um beispielsweise per VHD zu starten? Oder bei installiertem Hyper-V (z.B. unter Windows 8) einen Boot-Eintrag erstellen, bei dem Hyper-V deaktiviert ist? Ohne bcdedit kommst du nicht weit. Und da gibt es noch viele weitere Beispiele, wo du zwingend die Kommandozeile brauchst, weil es die entsprechende Funktionalität eben nicht in irgend einer GUI gibt. Aber der normale User braucht das natürlich alles nicht …
    Es ist dann wohl auch reiner Zufall, dass einige Funktionen der Windows PowerShell gewisse Ähnlichkeiten mit von anderen Systemen bekannten Befehlen haben. Und dass diese PowerShell rein zufällig erst viel später dazukam.

    Bibliotheksbinärkompatibilität @ Linux: aus der Philosophie, dass der Programmquelltext verfügbar sein sollte, ergibt sich ganz einfach kein Grund, dass diese Kompatibilität zwingend immer gegeben sein muss. Und ansonsten kann man viele Bibliotheken auch mit verschiedenen Versionen parallel installiert haben, wenn das unbedingt nötig ist, also wo ist das Problem hier? Dass auf einem aktuellen System alte (proprietäre) Software gar nicht mehr (wegen Versionsproblemen bei Bibliotheken) lief, ist mir bisher übrigens auch noch nicht untergekommen.
    Das selbe Problem hast du übrigens auch auf anderen Systemen, einschließlich Windows. Nur dass es dort z.B. nicht (immer) so einfach ist, verschiedene Versionen von Bibliotheken installiert zu haben.

    Vielfalt an Software: was bringt es einem, dass es auf System »*doof« nur einen vorgegebenen Fenstermanager gibt? Was, wenn der meinen Bedürfnissen nicht gerecht wird? Richtig, dann habe ich Pech gehabt. Unter Linux? Da suche ich mir genau die Software, die meine Bedürfnisse (bestmöglich) erfüllt. Und wenn ich einen Tiling-WM haben will, den ich per Keyboard bedienen kann, dann ist das kein Problem, während das unter Windows fast unlösbar ist. Linux/Windows ist hier nur ein Beispiel dafür, das lässt sich auch auf die meisten anderen Systeme übertragen. Und auch Paketmanager haben Stärken und Schwächen. Von wegen Paketmanager Paketmanager: wie sieht es denn da unter Windows, Android o.ä. aus? Gibt es dort denn überhaupt einen zentralen Paketmanager, der sich um Updates, Abhängigkeiten usw kümmert? Eher nicht. Und mit der Leistungsfähigkeit eines normalen Paketmanagers kann so etwas wie der App-Store unter Android sowieso nicht mithalten.

    Nach dieser Logik könnte ich jedenfalls auch sagen: Warum Chrome/Firefox/Opera/Internet Explorer/…? Internet Explorer reicht doch für alle(s)!

    Ubuntu-Tutorial: wenn dort steht, dass der User »kill prozess; rm -rf ~/irgendwas« tun sollte, dann wohl deshalb, weil dies einfacher zu erklären, kopieren und durchzuführen ist, als »Öffne den Taskmanager, suche nach dem Prozess ›prozess‹ und terminiere Ihn. Mach anschließend den Dateimanager auf, stell versteckte Dateien auf sichtbar, und lösche anschließend im Home-Ordner ›irgendwas‹«. Einen Zwang zur Shell gibt es bei deinem Beispiel jedenfalls ganz offensichtlich nicht.

    Bricks durch UEFI: seit wann war das ein Problem, welches die Ursache im Linux-Kernel hatte? Jegliche UEFI-Probleme waren bisher auf fehlerhafte Implementierungen seitens der Hersteller zurückzuführen, und Linux hielt sich lediglich an den Standard und erlaubte Dinge, die erlaubt sind. Dass Linux allerdings Fehler der Hardware-Hersteller korrigieren muss (UEFI-Bugs, Calendar-Bug, …), sollte zu Denken geben!

    Kommandozeileneditoren u.ä.: etwas, was auf Unix-Systemen angenommen wird, dass existiert, meinst du, sei ein Problem? Umgekehrt gibt es auf anderen Systemen (z.B. Windows) nicht einmal unbedingt eine vernünftige Möglichkeit, über eine serielle Schnittstelle (oder SSH o.ä., was wenig Traffic braucht) eine Datei zu editieren!

    Erlernbarkeit der Shell: Wenn du ein neues System benutzen willst, welches du noch nicht kennst, dann solltest du dich damit auseinander setzen. Wenn du das nicht tust, dann solltest du auch nicht erwarten, dass du es bedienen kannst. Die Unix-Shell + restlicher Userspace ist sogar, genau genommen, sehr einfach zu erlernen, da eben doch vieles immer ähnlich ist, und man es sich schnell merkt. Auch bei Windows musst du die Bedienung erst einmal erlernen, und auch dort ist vieles (auch in der GUI) alles andere als intuitiv. Warum sollte man beispielsweise um den Rechner herunterzufahren auf »Start« klicken (ok, heute steht da gar nix mehr)? Oder wieso gibt es unter Windows 8 zwei Stellen, wo die Systemsteuerung zu finden ist, natürlich mit jeweils unterschiedlichem Funktionsumfang? Und warum braucht man Laufwerksbuchstaben? Usw.

    Audio: da darf der david nicht vergessen, dass er unter Arch einen recht modernen Kernel hat, der auch Hardware meist besser unterstützt. Und ALSA vs Pulse: dir ist schon klar, dass du kein Pulse brauchst, um ALSA nutzen zu können (da ALSA das Kernel-Interface ist, neben dem veralteten OSS), aber Pulse ALSA braucht, wenn du was hören willst? Dir ist auch klar, dass Pulse Features bietet, die der Kernel über ALSA eben nicht bietet (z.B. Recording/Playback übers Netzwerk)? Und dir ist auch klar, dass diese so banal klingende Funktionalität (oder mitschneiden irgend eines Kanals, o.ä.) dich unter Windows zur Verzweiflung bringen kann, weil es das dort eben nicht gibt (außer ein Soundkartentreiber bietet das von sich aus)? ALSA, Pulse, Jack usw haben also durchaus eine Existenzberechtigung. Und die Vorteile davon, dass Funktionalität im Userspace anstatt im Kernel abgebildet wird, sollte wohl auch jedem klar sein. Wie es mit Audio auf Android aussieht? Keine Ahnung.

    GNU: hast du denn mal ein UNIX ohne GNU benutzt? GNU bietet dir mehr, als nur das, was durch POSIX gefordert wird. Und genau über diesen Komfort sowie die zusätzliche Funktionalität beschwerst du dich?

    Copyleft: vermutlich verwechselst du was, denn für das Linken gegen den Linux-Kernel gibt es keine Ausnahme! Was glaubst du denn, warum es (derzeit?) kein ZFS im Kernel gibt? Oder warum du dir für die proprietären GPU-Treiber selbst die Kernel-Module bauen musst? Also solange du die aktuellen rechtlichen Experimente ignorierst natürlich. Was am Copyleft rechtlich fragwürdig sein soll, ist übrigens auch die Frage. Wenn der Entwickler ein proprietäres Stück Code und eine GPL-Bibliothek separat zum Download anbietet, dann kann er das tun. Dann darfst du dir als User das sogar linken. Du darfst das dann allerdings nicht weiter verbreiten o.ä., und der Entwickler darf dir deshalb auch nicht das gelinkte Binary direkt geben. Siehe Kernel-Module. Wo ist da also das Problem? Und von wegen juristischer Experimente: ganz offensichtlich lassen sich da durchaus Leute darauf ein. Oder ist das mit Canonical + ZFS, VMware usw an dir vorbeigegangen?
    Ich würde übrigens sogar behaupten, dass Linux gerade wegen des Copyleft so erfolgreich ist wie es ist. Wenn dir das Copyleft nicht passt, dann nimm ein anderes System, das kein Copyleft hat. Z.B. BSD. Komischerweise hat sich das aber nicht in der Form durchgesetzt wie Linux (also solche Systeme wie auf der PlayStation, oder so manches proprietäre BSD-basierte Router-/Firewall-OS, von denen du nie auch nur eine Zeile Quellcode zu sehen bekommen wirst, ausgenommen). Warum wohl?
  • in: IMS-Hosting stellt sich vor!

    geschrieben von hackyourlife

    1) »IMS«? Das klingt so wie ein Datenbanksystem von IBM
    2) Warum bekomme ich bei den Links unter »Kundenarea« entweder ein Timeout (http://vserver.ims-hosting.de:5353/login.php) oder einen HSTS-Fehler (https://webspace.ims-hosting.de:8443/) in Chrome bzw Chromium, und warum sagt mir Firefox beim letztgenannten Link, dass das Zertifikat für eine andere Domain ausgestellt wurde?
    3) Warum sind diese Links überhaupt auf einem anderen Port als 80 bzw 443?
    4) Warum steht überall »Traffic: unbegrenzt«, ohne Hinweis darauf, dass in den AGB dann irgendwo klein steht »wenn nicht anders vereinbart: 1TB«? Oder ist dieses »Traffic: unbegrenzt« somit »anders vereinbart«?
    5) »Bestellen Sie Ihren Server, bezahlen Sie direkt online und starten Sie ohne Verzögerungen mit Ihrem Vorhaben durch« → »Einrichtung: innerhalb von 5 Stunden«. 5h sind also keine Verzögerung?
  • in: Music Production

    geschrieben von hackyourlife

    Wie wäre es, wenn du dir für den Anfang mal die Java-eigenen Packages ansiehst, also javax.sound? Damit kannst du sampled Audio aufnehmen/ausgeben und die Puffer mit deinem eigenen Code füllen/verarbeiten/… (Beispiel). Genauso gibt es für MIDI ein entsprechendes Subsystem, mit dem du sowohl Echtzeit-Verarbeitung als auch Sequenzen bauen/editieren/abspielen kannst. Eventuell ist das mal einen Blick wert, bevor du OpenAL o.ä. nutzt. Allerdings: OpenAL ist für etwas ganz anderes gedacht: beispielsweise um Audio-Quellen dreidimensional im Raum zu platzieren usw, wie man es normalerweise in Spielen finden würde. Das wirst du mit den Java-eigenen Packages wohl nicht (oder zumindest nicht so einfach) hinbekommen. Und unter Android ist Audio sowieso wieder anders.
  • in: Musik auf Lima-City

    geschrieben von hackyourlife

    Was genau hast du denn vor? Nur, den Besuchern die Möglichkeit zu geben, Musik anzuhören? Dann ist eventuell sowas wie Youtube o.ä. sinnvoll (Vor/Nachteil: lässt sich auch einfach vom Besucher herunterladen). Im Fall einer Band-Webseite kann man da eventuell sogar sinnvollen visuellen Inhalt dazugeben :-P
    Oder für nur Musik ohne Bild vllt auch Soundcloud o.ä.

    Wenn du wirklich MP3-Dateien o.ä. (was übrigens nicht jeder Browser abspielen kann) direkt anbieten willst, dann kannst du auch lima-city Premium nutzen, denn dort ist es erlaubt, Audio-Dateien am Webspace abzulegen.

    Wenn das allerdings automatisch spielen soll, wenn die Seite geladen wurde, dann solltest du noch einmal überdenken, ob du das wirklich willst.
  • in: Linux aus Linux heraus installieren

    geschrieben von hackyourlife

    stimmbande schrieb:
    Konkreter Fall ist mein etwas leistungsschwacher Laptop mit Mint/Cinnamon auf dem ich mal ubuntu und debian je mit xfce ausprobieren möchte.
    In diesem Fall würde ich mir an deiner Stelle (ausreichend Linux-Kenntnisse vorausgesetzt) direkt Archlinux ansehen. Ständig neu installieren usw müsstest du da nix, und wenn dir xfce zu wenig Performance bringt, dann deinstallierst du dieses Paket eben wieder und nutzt was anderes, wie z.B. fvwm, i3 o.ä.
    Da ich damit rechne, verschiedene Installations-Konfigurationen auszuprobieren möchte ich es gerne vermeiden, jedes mal einen Rohling zu verbrennen.
    Die meisten Distributionen lassen sich auch per PXE installieren. Wenn deine Netzwerkkarte das unterstützt, und du noch irgend einen Rechner hast, der gleichzeitig läuft (selbst ein Raspi sollte reichen), dann kannst du PXE zum Booten nutzen, ohne ständig irgendwelche Datenträger (CDs o.ä.) erstellen zu müssen. Alternativ kann man auch einige Distributionen via USB-Stick installieren, solange dein Rechner das Booten von USB-Geräten unterstützt (was auf uralt-Geräten nicht der Fall ist).
  • in: Netzwerk-Switch mit mindestens GBit

    geschrieben von hackyourlife

    Also ich habe hier so einen Switch: Netgear GS108, allerdings hat der, wenn ich mich recht erinnere, zwischen 30 und 35€ gekostet. Außer »kostet unter 30€« und eventuell »sieht gut aus« erfüllt er wohl deine Anforderungen. Erfahrung: läuft seit >3 Jahren im Dauerbetrieb, ohne Probleme.
  • in: Terminalserver-Nutzung

    geschrieben von hackyourlife

    waytogermany schrieb:
    Wäre TeamViewer denn eine alternative?

    Teamviewer müßte dann auf dem Server vom Administrator installiert werden. Dies scheidet wohl in dem konkreten Fall aus. Aber auch Teamviewer ist immer eine bidirektionale Verbindung.
    Unabhängig davon stellt sich die Frage, ob TeamViewer überhaupt funktional auch nur annähernd mit RDS (= Remote Desktop Services = aktuelle Bezeichnung der »Terminalserver«-Funktionalität) mithalten kann. Diese Frage würde ich mit »Nein« beantworten.

    Zur Sicherheitsfrage: per RDP kann man alle möglichen Geräte weiterleiten (z.B. Mikrofone, Drucker usw), sowie lokale Festplatten freigeben. Dann kann der Server auf diese freigegebenen Ressourcen zugreifen und auch Daten auslesen (oder verändern). Wenn man das nicht will, muss man das vor dem Verbindungsaufbau einfach deaktivieren. Im Fall einer rdp-Konfigurationsdatei müsste man dazu diese Datei entsprechend mit einem Editor anpassen und falls vorhanden die Prüfsumme anschließend entfernen, da sie dann ja nicht mehr stimmt.

    Im Normalfall ist es allerdings dem Administrator viel wichtiger, dass du keine Daten vom Server herunterlädst und auch nichts hochladen kannst! Runterladen = Informationen könnten in falsche Hände gelangen, Hochladen = Sicherheitsproblem (Viren, …)

    Wenn du überhaupt niemandem traust, also auch deinem RDP-Client trotz entsprechender Konfiguration nicht, dann bleibt dir wohl nur übrig, RDP in einer VM zu nutzen, und alle interessanten Daten (und Geräte, wie z.B. Mikrofone) von dieser VM fernzuhalten.

    Mit Protokollieren wird es übrigens ziemlich sicher nichts werden, da die via RDP übertragenen Daten (normalerweise) mit SSL verschlüsselt werden.
  • in: Windows vom Netzwerk Pfad starten

    geschrieben von hackyourlife

    Das kann man mit PXE und iSCSI lösen. Allerdings: Will man das wirklich? Das bringt immerhin hohe Last am Netzwerk, und du brauchst dennoch 4 (virtuelle) Festplatten für die 4 Rechner.

    Was ist denn derzeit das Problem, wenn Daten in einer Netzwerkfreigabe gespeichert werden? Oder ist das auf jedem Rechner eine Freigabe? Was genau willst du denn erreichen? Und welche Dateien willst du da denn »synchronisieren«?
  • in: PWM Audio vs. Analoges Audio

    geschrieben von hackyourlife

    1) CD vs WAV: auf einer Audio-CD werden Audio-Daten unkomprimiert als PCM, mit 44100Hz Abtastrate, 16bit/Sample und mit 2 Kanälen (= Stereo) abgespeichert. In einer WAV-Datei kannst du exakt die selben Daten speichern. Deshalb wirst du auch eine CD zu WAV rippen (und eventuell das mit flac komprimieren), wenn dir Qualität wichtig ist. Einen Unterschied dazwischen hören kannst du allerdings nie, da es exakt die selben Daten bei der Wiedergabe sind (außer natürlich du nutzt in der WAV-Datei andere Sampling-Raten, Bit-Tiefen, oder gar Kompressionsverfahren). Oder meinst du »CD über CD-Player auf Stereoanlage, aber WAV-Datei über Raspi abgespielt«? Siehe Punkt 3.

    2) PWM: Du modulierst ein hochfrequentes Rechteck-Signal mit den Nutzdaten per Frequenzmodulation, mit dem Zweck, das Signal dann per Transistor digital schalten zu können, anstatt es linear verstärken zu müssen. Anschließend filterst du das Signal (theoretisch kann da ein Lautsprecher alleine schon ausreichen, praktisch würde das extreme Störungen verursachen (denk an EMV)). Was dabei passiert: die durchschnittliche Energie wird deinen Lautsprecher dazu bringen, sich entsprechend zu bewegen. Die höheren Frequenzen (die im MHz-Bereich liegen können) kannst du allerdings niemals hören, da sowohl dein Ohr als auch der Lautsprecher zu träge sind (und sie normalerweise vorher schon per Filter weggefiltert werden, um keine Störungen zu senden). Denke hierbei an die Fourier-Zerlegung.

    Lesestoff: Class-D amplifier

    3) Raspi: Das hat einen extrem miesen Audio-Ausgang. Warum, weshalb, usw: keine Ahnung. Womit das zusammen hängt: auch keine Ahnung. Aber ja, das kann man durchaus hören, dass das schlecht ist. Relativ einfach sogar. Zumindest war das auf einem Raspi, als ich das mal ausprobiert habe, deutlich hörbar. Es kann allerdings sein, dass das auf aktuelleren Revisionen irgendwie verändert/verbessert wurde. Am deutlichsten hörte man das auf dem Raspi, auf dem ich das getestet habe, jedenfalls mit Kopfhörern.
  • in: LED Blink-/Flashschaltung

    geschrieben von hackyourlife

    Welche Schaltung baust du dir denn überhaupt? Schließlich gibt es da verschiedene Varianten, wie man das erreichen kann … und das hat natürlich einen Einfluss darauf, wie du die Bauteile dimensionieren musst.

    Falls du beispielsweise astabilen Multivibrator mit Transistoren bauen willst, gibt es selbst auf Wikipedia eine entsprechende Erklärung: *klick*
    Für eine Variante mit NE555 kannt du auch hier nachlesen: *klick*
  • in: Event Handling in Python

    geschrieben von hackyourlife

    Reicht dir »Multithreading« als Stichwort? Da kannst du (pseudo)parallel etwas verarbeiten, während du gleichzeitig schon wieder auf das nächste Event wartest.

    Würde ca so aussehen (Pseudocode):
    while(1) {
    	event = serial_read();
    	fork handle(event);
    }
    Der Handler, der nun parallel läuft, würde das Tag überprüfen, und falls nötig das Relais schalten usw.
  • in: Javascript erkennt XML nicht

    geschrieben von hackyourlife

    ggamee schrieb:
    Erstmal sollte das XML in einem <xml> Tag gewrapped sein.
    Wozu? Der XML-Standard schreibt lediglich vor, dass es genau 1 Root-Element geben muss. Das gibt es auch in seinem Dokument, mit dem Namen »data«. Passt also …
  • in: Headset - Mono zu stereo LIVE

    geschrieben von hackyourlife

    test42test schrieb:
    Wenn du dir sicher bist, dass es ein Stereo-Stecker ist und nur Mono ankommt, kannst du die Isolierschicht zwischen dem rechten und linken Kanal überbrücken.
    Zum Beispiel an einer stelle etwas anfeilen und dann mit Lötzinn auffüllen. Danach noch glatt schleifen, falls es übersteht.
    Oder einen einfachen Adapter bauen, mit Stereo-Buchse und Mono-Stecker, wo dann nur der »funktionierende« Kanal durchkommt … bevor man am Stecker des Headsets selbst herumbastelt, und ziemlich sicher dabei was kaputt macht.

    Wobei sich die Frage stellt, ob das so überhaupt sein sollte, oder ob das Headset etwa selbst defekt ist … oder ob es einen speziellen Adapter/eine spezielle Funktion der Soundkarte brauchen würde, um wie erwartet zu funktionieren …
  • in: Headset - Mono zu stereo LIVE

    geschrieben von hackyourlife

    Ein einzelnes Mikrofon kann sinnvollerweise nur ein einzelnes Signal ausgeben, was dann ja der Definition von »Mono« entspricht. Du müsstest also dieses Mono-Signal auch als solches verarbeiten, und dann würde (fast) jedes Programm damit umgehen können, einschließlich TS3. Ich habe jedenfalls noch kein Stereo-Mikrofon (was dann ja mehrere Mikrofone sein müssten, in entsprechendem Abstand usw) gehabt, und dennoch gab es keine irgendwie gearteten Probleme mit Mono/Stereo.

    Also: was genau hast du aufgeführt, sodass was eigentlich passiert? Wird etwa nur auf einem von beiden Kanälen das Signal ausgegeben? Und was passiert, wenn du bei Windows »Mono« einstellst? Oder ist dein »Problem« eh ganz was anderes?
  • in: Proxyserver am eigenen Router betreiben

    geschrieben von hackyourlife

    ctrl schrieb:
    Stimmt, aber wenn ich schon einen Router besitze mit dem ich ein Proxy selbst hosten kann, wieso sollte ich es dann nicht wenigstens erst mal versuchen? Mich intressiert hier auch der technische Aspekt. Ein VPN kann ich mir ja im Zweifelsfall immer noch besorgen. Außerdem kann ich mir mit einem selbstgehosteten Proxyserver auch sicher sein, dass mein Traffic nicht irgendwo beim VPN Host zwischengespeichert wird. Ein weiterer Pluspunkt könnte auch noch sein, dass ich mich dann ja nachweislich nur mit einem Gerät in meinem Heimnetz und nicht auf eine VPN IP verbinde. Sollte der Admin irgendwann mal auf die Idee kommen meine Verbindungen etwas genauer unter die Lupe zu nehmen (wovon ich allerdings ehrlich gesagt auch nicht wirklich ausgehe), hätte ich so zumindest eine bessere Möglichkeit mich rauszureden - ich connecte ja nur arbeitsbedingt auf meinen Homeserver :smokin:.
    Schon mal daran gedacht, dass du deinen VPN-Dienst selbst hosten kannst? Im Übrigen reicht es für ein wirklich »einfaches« Proxy, wenn du dem sshd Port Forwarding erlaubst, und du auf deinem Rechner mit »ssh -D 1080 user@host« o.ä. die Verbindung aufbaust (auch PuTTY kann das (nennt sich »dynamic port forwarding«), falls du Windows am Client nutzt). Dann hast du ein SOCKS5-Proxy, welches du nur noch in deinem Programm eintragen musst. Verschlüsselung bei der Übertragung gibts dann gleich gratis dazu.

    Einziger Nachteil dieser Methode: du musst dich durch die Firmen-FW auf einen beliebigen Port verbinden können, und du musst durch die Firmen-FW ein beliebiges Protokoll sprechen können. Wenn das nicht geht, kannst du allerdings deinen sshd auf Port 443 lauschen lassen, denn das kommt meist durch ein Proxy/Firewall noch durch (solange nicht geprüft wird, ob das wirklich SSL/TLS ist, was du überträgst).
  • in: Guter Editor für PHP

    geschrieben von hackyourlife

    Ich nutz ja für fast alles (= alles, außer Java EE-Angelegenheiten, denn dort kommt Eclipse [mit Vrapper-Plugin] zum Einsatz) vim als Editor. Der kann alles, was ein Editor können muss, einschließlich Syntax-Highlighting, Syntax-Prüfung usw. Ich halte übrigens auch so manches Feature, welches eine durchschnittliche IDE mir aufzuzwängen versucht, beispielsweise Auto-Complete, für äußerst störend und zeitraubend.

    hddg schrieb:
    […] und ich nicht weiss, ob das Editieren von Dateien direkt auf dem Server (für mich das Killer-Feature von Bluefish) unter Windows so gut geht wie unter Linux.
    Dateien direkt am Server editieren? Das ist etwas, was man zwar durchaus immer wieder von den »Bastlern« (z.b. hier auf lima-city) sieht, aber das ist etwas, was man niemals tun sollte. Und ein Entwicklungs-Server ist sowieso im Normalfall so eingerichtet, dass da nix extra herumkopiert oder irgendwo auf einem Remote-System editiert werden muss.
  • in: So verwendet ihr euren Raspberry Pi

    geschrieben von hackyourlife

    arcardy schrieb:
    […] das liegt einfach am instabilen Linux.
    Deswegen werde ich mir nun Darwin auf meinem Pi installieren.
    Interessant, denn Linux läuft hier am Raspi durchaus stabil (mit Uptime bis ~200 Tage, und dann war ein Stromausfall :-(, aber bis jetzt sind es schon wieder ~140 Tage) …

    Ansonsten gibt es zu diesem Thema schon einige Threads: *klick*, *klick*, *klick*. Und wie damals auch, läuft bei mir übrigens immer noch das Raspi als VNC- (und SSH-)Client, in Verbindung mit einem Server daneben. Allerdings hat mittlerweile irgendwas aufgegeben (eventuell die SD-Karte), jedenfalls ist derzeit die Paketdatenbank in einem inkonsistenten Zustand, weil »update-menus« per Segfault stirbt. Warum es das tut weiß ich noch nicht, aber ich hatte auch noch keine Zeit das herauszufinden.

    //EDIT: das ist jetzt auch repariert, die Datei /usr/bin/update-menus war einfach korrupt. Entfernen des Pakets (ohne Ausführen der Skripte) und neu installieren hat es behoben.
  • in: ARM Laptops - Linux noch Salonfähiger?

    geschrieben von hackyourlife

    arcardy schrieb:
    Warum er sich trotzdem ein Macbook holen soll? Weil dort UNIX drauf läuft und Unix stabiler läuft als Linux/GNU und MacOSX extrem Akkusparend ist, das Teil läuft dir 12h durch.
    Seit wann läuft »UNIX stabiler als Linux«? Was wäre, wenn beide stabil laufen? Soll vorkommen … sogar fast immer :-P
    Akkulaufzeit usw hängt dann wieder davon ab, wie gut das System mit Stromsparmechanismen usw umgehen kann. Dass ein System von Apple auf Hardware von Apple gut laufen sollte (und diese Mechanismen perfekt nutzen sollte), ist wohl auch klar.

    Und wieso sollte ich Linux nicht mit MacOsx vergleichen?
    Linux ist doch GNU... GNU wollte immer WIE Unix sein. Es ist zwar nicht UNIX, aber du kannst GNU eine gewisse Ähnlichkeit zu UNIX nicht abstreiten, weswegen MACOSX und Linux miteinander auf unterster Ebene verglichen werden können.
    Und stell dir vor, da gibt es sogar einen Standard (POSIX), der vorschreibt, wie genau das auszusehen hat, damit Programme von einem konformen System (fast) ohne Änderungen auf einem anderen konformen System übersetzt und genutzt werden können.

    seven-sign schrieb:
    Der enorme Vorteil den ich darin sehe, ist vorallem das Energieersparnis im Vergleich zu den
    "normalen mobielen Prozessoren" bei gleicher Leistung.
    Zu dem lässt sich so eine noch dünnere Bauweise realisieren, längere Akkulaufzeiten (vorallem mit Linux)
    und andere Preisklassen werden wahrscheinlich.
    seven-sign schrieb:
    sicherlich muss noch einiges verbessert werden.
    Dennoch sind schon Taktraten bis zu 3GHZ mörglich (ARMv8),
    wenn man sich diverse Vergleiche ansieht hat ARM immerhin
    schon die bekannteren x84 Prozessoren (Intel Atom z.B.) in Sachen "Leistung" fast eingeholt.
    Also so extrem »stromsparend« sind diese ARM-Prozessoren ja gar nicht, wenn man sie etwas genauer ansieht. Man sollte sich mal überlegen, wie sich verschiedene Prozessoren (z.B. Intel Atom und ARM) schlagen, wenn man sie mit vergleichbaren Lasten rechnen lässt. Dann stellt man schnell fest, dass ARM maximal im Mobil-Bereich einen kleinen, aber sonst gar keinen Vorteil gegenüber Intel hat. Auch wenn das schon etwas älter ist, grundlegend geändert hat sich daran bis heute nichts: *klick*.

    ARM hat(te) halt den Vorteil, dass es sehr effizient schlafen kann, und ausnutzt, dass es einen Großteil der Zeit auch schlafen kann, weil es nichts zu tun gibt (z.B. bei Telefonen, die gerade nicht aktiv benutzt werden). Allerdings ist auch das nichts, was ARM jetzt einzigartig gut kann, auch hier wurde längst schon von Intel aufgeholt. Sobald es jedenfalls um Rechenleistung geht, sieht es für ARM nicht allzu gut aus.

    Von daher würde ich jetzt nicht unbedingt meinen, dass ARM-Laptops o.ä. einen derart großen Vorteil bieten, dass sie sich auch durchsetzen können. Im Gegenteil, derzeit sieht es eher nach einem Gleichstand zwischen x86 und ARM aus. Und man sollte auch nicht vergessen, dass viele ältere, proprietäre Software, die x86 voraussetzt, natürlich auf ARM nicht läuft. Und selbst bei aktueller proprietärer Software ist es nicht unbedingt der Fall, dass sie auch für ARM erhältlich ist.

    teammeininternet schrieb:
    […] und ARM ist viel OpenSource-orientierter […]
    … viel OpenSource-orientierter als was? Im Übrigen sind es ARM-SoCs, für die es keine brauchbaren Linux-Grafiktreiber gibt, und wenn es sie gibt, dann als Blob. Abgesehen von der Bastelei mit Android-Treibern, die es dann doch meistens irgendwo gibt. Ausnahmen bestätigen natürlich die Regel. Aber sowas nennst du »OpenSource-orientiert«? Das Einzige was bei ARM wirklich »offen« ist, ist die Möglichkeit, das Design zu lizenzieren. Das kannst du mit Intel-Designs o.ä. nicht tun. Aber selbst das ist keine Sache, die es nur bei ARM gibt.

    Ob Linux Salonfähig wird/ist oder nicht, könnte auch an ganz anderen Faktoren hängen. Wenn beispielsweise Windows (in Editionen, die »der Durchschnitts-DAU« kauft + Konfiguration, wie sie vom »Durchschnitts-DAU« genutzt wird) ständig riesige Updates braucht (und immer wieder auch kaputte Updates bekommt), unvermeidbar schnüffelt, nur auf aktueller Hardware läuft, eng und unvermeidlich mit der Cloud verwoben ist und selbst bei einer Datenträgerverschlüsselung die Schlüssel als Backup ausplaudert (sowas soll ja vorgekommen sein), dann kann es durchaus passieren, dass irgendwann die Masse erkennt: »das kann es wohl nicht sein, das lassen wir uns nicht gefallen!«, und dann kann sich eventuell eines Tages Linux am Desktop verbreiten. Einige der nötigen Voraussetzungen dafür werden ja gerade von Microsoft (so mancher meint »Windows 10 = Schnüffelsystem«), Valve (Spiele unter Linux), AMD (gute GPU-Treiber unter Linux, zumindest in naher Zukunft) usw geschaffen.

    Um die CPU-Architektur, auf der das dann läuft, würde ich mir jetzt jedenfalls die wenigsten Sorgen machen. Ob das ARM wird, oder ob AMD wieder was derart Gutes herausbringt, dass es vom Durchschnitts-DAU gekauft wird, oder ob gar irgendwas ganz anderes kommt (OpenPOWER? RISC-V? MIPS? …), das weiß heute niemand.
  • in: XML Modifizieren

    geschrieben von hackyourlife

    Du könntest nach der XML-Deklaration (oder falls es keine gibt direkt an den Anfang) dein Start-Tag
    <items>
    einfügen und an das Ende des Dokuments ein
    </items>
    anhängen. Dann lässt sich das Ergebnis problemlos parsen. Die »Umformung« wäre hier also lediglich eine String-Manipulation.
  • in: OpenGL - Maus Position im Koordinatensystem

    geschrieben von hackyourlife

    4) Beispiel: Du hast einen Bildschirm mit Koordinaten von (0|0) bis (640|480). Nach der Transformation muss (-1|-1) den Koordinaten (0|0) entsprechen, und (1|1) den Koordinaten (640|480). Also:
    Formel: p_x = \frac{2 \cdot mouse_x}{width} - 1
    Formel: p_y = \frac{2 \cdot mouse_y}{height} - 1

    Wie du Formel: p_z wählen musst, häng davon ab, was du insgesamt tust. Dieser Wert ist jedenfalls jener Wert, der im Z-Puffer zu finden ist. Nötig ist das, da du von 2D-Koordinaten auf 3D-Koordinaten zurückschließen willst, und dazu fehlt dir sonst Information. Wenn du beispielsweise nur eine 2D-Szene darstellst, und alle Z-Werte nach der Transformation den Wert 0 haben (= »gerade auf die Szene schauen«), dann kannst du fix 0 wählen. Ansonsten musst du wohl den Z-Puffer an den Mauskoordinaten lesen, und diesen Wert für Formel: p_z nutzen. Wie? Siehe Link,
    glReadPixels
    macht das möglich. In C würde das ca. so aussehen:
    float z = 0.0f;
    
    glReadBuffer(GL_FRONT);
    glReadPixels(x, y, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &z);
    
    // z enthält nun die Tiefeninformation


    Ansonsten sieht das, was du tust, ungefähr richtig aus. Es könnte eventuell könnte sein, dass die Reihenfolge der Operanden bei 2) nicht passt, aber das wirst du eh merken. Und was auch noch sein könnte ist, dass du Formel: p_y invertieren musst (also *(-1)), aber auch das wirst du wohl merken.
  • in: OpenGL - Maus Position im Koordinatensystem

    geschrieben von hackyourlife

    Dazu erstellt man eine Transformationsmatrix, die Bildschirm-Koordinaten in Welt-Koordinaten transformiert. Grundsätzlich ist diese Transformationsmatrix nichts anderes, als die Inverse zu deiner »normalen« Transformationsmatrix, die Welt-Koordinaten in Bildschirm-Koordinaten transformiert, und die ist nicht mehr als das Produkt der Projection- und View-Matrix (Annahme: du nutzt keine Model-Matrix, sonst müsstest du die eben auch dazumultiplizieren, natürlich unter Berücksichtigung der Reihenfolge). Eine halbwegs brauchbare Anleitung dazu gibt es hier: *klick*.
  • in: OpenGL - Objekt mit konstanter Geschwindigkeit bewegen

    geschrieben von hackyourlife

    davidlw schrieb:
    Ich glaube, Du hast mich nicht richtig verstanden. Bisher sieht es für mich so aus, als ob er in jedem Frame eine fixe Geschwindigkeit der Position hinzu addiert. Daher kommt ja dann bei langsamer Hardware das Zeitlupenproblem. Ich meinte, dass er die Geschwindigkeit nocheinmal mit der Zeit seit dem letzten Frame multiplizieren sollte, damit läuft das Spiel dann auch bei langsameren Systemen gleich schnell. Wie gesagt, man sollte eben nicht davon ausgehen, dass jeder Frame immer gleichlang benötigt.
    Doch, ich hab dich schon richtig verstanden. Ich sagte lediglich, dass es durchaus auch Fälle gibt, in denen man das genau so (= fixe Frame-Zeit annehmen) problemlos tun kann (und die sind genau dann, wenn man dafür sorgt, dass jedes Frame gleich lange braucht, mit Warten usw). Und beispielsweise auf einer Konsole hast du auch nicht das Problem mit »jeder hat andere HW«, sondern dort kannst du einfach auf das V-Sync warten und gut ist es. Und schon hast du konstant 60 Frames pro Sekunde, von denen jedes genau gleich lang braucht (natürlich nur, wenn Berechnungen für ein Frame auch schnell genug sind, sonst geht das so natürlich nicht). Und, man wird es kaum glauben, bei einigen Konsolenspielen ist das sogar tatsächlich so gelöst (Frame-Zeit = 1/60s, am Ende des Frames auf das V-Sync warten).

    Falls diese Überlegungen für zu viel Verwirrung gesorgt haben: Sorry.
    Falls jetzt kommt »das macht der TE aber sicher nicht!«: vermutlich ist das richtig. Für ihn ist tatsächlich die Variante mit variabler Framezeit (= wie du es vorgeschlagen hast) besser. Aber das heißt noch lange nicht, dass nur die Variante mit variabler Framezeit möglich/richtig ist! Und grundsätzlich war es nur das, worauf ich hinweisen wollte :-P
  • in: OpenGL - Objekt mit konstanter Geschwindigkeit bewegen

    geschrieben von hackyourlife

    Was du außerdem noch tun könntest: einfach eine Geschwindigkeit (bei dir: 0.008) und einen zufälligen Winkel wählen. Dann lässt sich mit sin/cos von Polarkoordinaten (Winkel & Länge) in kartesische Koordinaten (x und y) umrechnen, welche du ja als Vektor haben willst. Falls du sin/cos schnell berechnen kannst, kannst du dir auch die Polarkoordinaten merken und bei Richtungsänderungen ändern, und dir jedes Mal aufs Neue die kartesischen Koordinaten ausrechnen, die du für die Bewegung der Kugel brauchst.

    Wenn es um 3D-Koordinaten geht, macht man es übrigens oft auch so: Richtungsvektor (normalisiert auf Länge 1) und Geschwindigkeit (Skalar) speichern, und bei Änderung der Richtung den Richtungsvektor per Matrix »drehen« (und anschließend wegen auftretenden Rundungsfehlern wieder normalisieren). Für eine Verschiebung rechnet man dann mit Richtungsvektor ⋅ Geschwindigkeit.

    davidlw schrieb:
    Nebenbei erwähnt solltest Du nicht davon ausgehen, dass jeder Frame gleich viel Zeit benötigt, die Geschwindigkeit also immer noch mit der vergangenen Zeit seit dem letzten Frame multiplizieren!
    Das kann man durchaus tun, aber nur, wenn man dafür sorgt, dass jeder Frame wirklich gleich lange braucht. Das hat dann allerdings immer noch den Nachteil, dass alles in »Zeitlupe« abläuft, wenn die Hardware aus irgend einem Grund zu langsam ist. Zu empfehlen ist dieses Verfahren daher eher nicht.

    ultimate-bravery schrieb:
    Normalerweise ist es bei Breakout ja so, dass man am Anfang an eine Stelle klicken kann, wo die Kugel hin fliegen soll. Vielleicht mach ich es später auch noch so […]
    Das ist übrigens ganz einfach lösbar:
    Richtung = Mausklick - Startpunkt;
    Richtung = Richtung / Richtung.length();
    Der Vektor
    Richtung
    hat nun eine Länge von 1 und zeigt in die Richtung, in die die Kugel fliegen soll. Du kannst dann
    Richtung
    noch mit einer beliebigen Geschwindigkeit multiplizieren, oder dies in jedem Frame durchführen, je nachdem wie du das implementierst.
  • in: virtuelles und reales interface verbinden

    geschrieben von hackyourlife

    1) Ich würde an deiner Stelle mit
    tcpdump
    nachsehen, welche Pakete über welche Interfaces tatsächlich übertragen werden (also z.B.
    tcpdump -i br0 icmp
    ). Dann siehst du auch »wie weit« sie kommen, und wo du nach dem Fehler suchen musst. Es könnte übrigens sein, dass dein Gast eine falsche Routing-Tabelle hat (bzw ihm das Default-Gateway fehlt).

    2) Ich würde KVM in Verbindung mit libvirt nutzen, denn dann muss man sich nicht um tap-Interfaces o.ä. kümmern, sondern das wird dann von libvirt selbst erledigt. Lediglich das Bridge-Interface braucht man dann noch. Falls du dich »an Virtualisierung mittels KVM versuchen« willst, ist libvirt jedenfalls sicher einen Blick wert.
  • in: Kennt sich jemand mit der IBM i5 aus?

    geschrieben von hackyourlife

    teammeininternet schrieb:
    Ich brauch die i5 in der Schule und für das Examen.
    Schön für dich. Abgesehen davon: welches Examen überhaupt?

    teammeininternet schrieb:
    Aber irgendwie ist das etwas sehr abstrakt
    Was ist abstrakt?

    teammeininternet schrieb:
    kann mir da wer helfen?!
    Ziemlich sicher. Allerdings: auch wenn es grundsätzlich nicht ausgeschlossen ist, so ist die Wahrscheinlichkeit, dass du auf Lima jemanden findest, der mit einer i zu tun hat (+ sich auskennt) und dir auch noch helfen will vermutlich eher gering.
  • in: eignet sich ein Raspberry Pi als Webserver

    geschrieben von hackyourlife

    Das ist zwar abhängig davon, wie viel serverseitige Dinge da passieren (PHP? Datenbank? …), aber ohne nähere Informationen zu kennen: vermutlich ja. Probier es einfach aus.

    Worauf du aber aufpassen solltest: das läuft auf einer SD-Karte, und die kann nicht beliebig oft überschrieben werden. Eine Datenbank (wie z.B. MySQL o.ä.) ist also nicht unbedingt das, was man da drauf laufen lassen will.
  • in: .NET wird Open Source

    geschrieben von hackyourlife

    hddg schrieb:
    Also das run-time system - und davon auch nur der kleine Teil, der für ASP.NET gebraucht wird - wird open source, nicht die Werkzeuge, um Programme zu erstellen, die diese run-time benutzen.
    Allerdings stimmt das so auch nicht, denn beispielsweise Roslyn (Wikipedia) sowie die CLI-Tools gibt es mit Quellcode. Also sind die »Werkzeuge, um Programme zu erstellen, die diese Runtime benutzen« sehr wohl Open Source (was du aber natürlich bereits im verlinkten Artikel auf Golem gelesen hast) :-D

    Viel interessanter finde ich, das sie ihre Zusammenarbeit mit dem Mono-Projekt "erneuern" wollen ... hatte es da etwa gekrieselt ?
    Das könnte daran liegen, dass es mit Java eine tatsächlich platformunabhängige Laufzeitumgebung gibt, während .NET bisher nicht damit vergleichbar war/ist (bisher: Platformunabhängig bei MS = es läuft auf Windows Server und Client, und eventuell noch auf unterschiedlichen Versionen dieser). Vermutlich will Microsoft mit diesem Schritt versuchen, da aufzuholen, und richtige Linux-/Mac-Unterstützung bieten …
  • in: Anwendung für "umgewidmeten" Thin-Client gesucht

    geschrieben von hackyourlife

    hddg schrieb:
    Der Klassiker unter den Thin-Clients - den es schon gab, bevor man das so nannte - wäre ein X-Terminal. Und so was würde sich in meine heimische Linux-Infrastruktur ganz gut einfügen. Muss ich mal recherchieren, was ich da an Software nehmen kann ...
    Grundsätzlich brauchst du nicht viel mehr als den xorg-Server und eventuell xdm oder ssh, je nachdem wie du das machen willst. Für XDM + XDMCP: (minimalistische) Anleitung.

    Es könnte dir allerdings bei grafikintensiven Anwendungen durchaus passieren, dass beispielsweise TurboVNC deutlich performanter ist.
  • in: Anwendung für "umgewidmeten" Thin-Client gesucht

    geschrieben von hackyourlife

    Ich würde so ein Gerät ziemlich sicher für genau das nutzen, wofür es gedacht ist: als Thin Client. In Verbindung mit einem (halbwegs leistungsstarken) Server im Schrank, der sowieso immer läuft, macht sowas durchaus Sinn. Ob das bei dir der Fall ist, ist halt die Frage. Der Vorteil daheim ist jedenfalls, dass man im Zimmer keinen Rechner mehr hat der Lärm macht, und auch keine große Kiste die nur Platz braucht (wie es bei einem normalen Rechner im Normalfall der Fall wäre).

    Was man sonst mit sowas machen kann: wohl ähnliche Dinge wie mit einem Raspi (wobei z.B. ich mein Raspi als minimal-Thin Client nutz :-P):
    • Surf-/Mail-/Chat-Station
    • Multimedia-Station (Video, falls die HW schnell genug ist, das musst du halt testen; sicher aber Audio)
    • Statusanzeige für Verschiedenstes (z.B. Heizungs-/Temperaturüberwachung usw)
    • …
    • Webserver
    • Git-Server (eventuell mit Daten auf einer USB-Festplatte)

    Dank geringem Strombedarf kann man sich jedenfalls auch eher erlauben, das System permanent an zu haben, ohne unnötig viel Strom dabei zu verschwenden.
  • in: USB Defekt

    geschrieben von hackyourlife

    laex630 schrieb:
    Auf die 2-3 Bilder kann ich aber verzichten, und möchte nun den USB formatieren, aber nicht mal das ist irgendwie möglich, da das er formatieren fehlgeschlagen mit Schnell/Normalformatierung.
    Dann würde ich an deiner Stelle einen neuen USB-Stick nehmen, denn du hast sehr gute Chancen, dass du, selbst wenn du es jetzt irgendwie mit Magie zum Laufen bekommst, in Zukunft wieder Probleme damit hast ;-)

    Es kann übrigens durchaus sein, dass die Flash-Zellen selbst am Ende sind, weil sie z.B. zu oft überschrieben wurden (wobei das unwahrscheinlich ist), oder es ist aus sonstigen Gründen irgendwas an der Elektronik nicht in dem Zustand, wie es sein sollte … für Nicht-Funktionieren von USB-Sticks gibt es jedenfalls viele Gründe.
  • in: USB Defekt

    geschrieben von hackyourlife

    Starte ein (Live-)Linux und hänge den Stick an. Sieh dir anschließend an, was dmesg sagt. Wenn der Stick tatsächlich kaputt ist (wovon ich hier übrigens fast ausgehen würde), dann wirst du dort entsprechende Fehlermeldungen sehen. Die Chancen, dann noch (selbst, ohne Profis damit zu beauftragen) Daten vollständig wiederherstellen zu können, sind nicht allzu groß.
  • in: amd a6 quad core

    geschrieben von hackyourlife

    gansicast schrieb:
    Weil ich ernsthaft am überlegen war einen i5 hinein zu machen, desshalb
    Dir ist aber schon klar, dass du auf ein Board, welches für einen AMD-Prozessor gedacht ist, nicht einfach mal einen Intel-Prozessor bauen kannst? Das geht sogar noch weiter: du kannst z.B. auf ein Board für einen i5 v2 nicht mal einen i5 v5 bauen …
  • in: Was ist das beste VPN Programm für Mac und Windows?

    geschrieben von hackyourlife

    letsch323 schrieb:
    was findet ihr als bestes VPN Programm für Mac und/oder Windows?
    OpenVPN, denn es funktioniert problemlos durch NAT u.ä. und ist sehr einfach zu konfigurieren. Außerdem ist der Quellcode frei verfügbar und es gibt Client-Software für praktisch alle verbreiteten (Desktop-)Betriebssysteme.

    letsch323 schrieb:
    Ich finde CyberGhost ganz gut...
    Was meint ihr?
    Und warum soll CyberGhost gut sein? Was kann das, was andere nicht können?
  • in: CPU-Leistung: Single- vs. Dual- vs. Quad-Core

    geschrieben von hackyourlife

    Zuerst einmal solltest du dir, um das mit den GHz zu verstehen, das hier ansehen: *klick*.

    Und dann folgende Überlegungen:
    Angenommen du hast ein Programm, bei welchem du folgende Berechnung ausführen willst:
    Formel: x = (a + 1) \cdot b - (c - 3) / 5
    Jetzt könntest du das auf einer RISC-Maschine folgendermaßen ausführen:
    t3 = c - 3
    t1 = a + 1
    t4 = t3 / 5
    t2 = t1 * b
    x = t2 - t4
    Das würde 5 Schritte benötigen. Natürlich könnte man das jetzt auch noch umsortieren, z.B. so, und würde das selbe Ergebnis erhalten:
    t1  =a + 1
    t2 = t1 * b
    t3 = c - 3
    t4 = t3 / 5
    x = t2 - t4
    Und wieder werden 5 Schritte benötigt. Du kannst feststellen, dass du das auf so einer Maschine nicht schneller hinbekommst, da Berechnungen von den Ergebnissen anderer Berechnungen abhängen. Wenn du dir das nun als Baum aufzeichnest, also all diese Daten-Abhängigkeiten, dann wirst du sehen, dass grundsätzlich folgendes gleichzeitig passieren könnte:
    t1 = a + 1;  t3 = c - 3
    t2 = t1 * b; t4 = t3 / 5
    x = t2 - t4
    Das würde nur noch 3 Schritte benötigen, und je 2 Operationen gleichzeitig ausführen. Du kannst aber auch sehen, dass es nicht möglich wäre, durch einen 3. Prozessor das noch weiter zu beschleunigen, da bereits alles, was parallel ausgeführt werden kann, auch parallel ausgeführt wird.

    Auf dein Problem übertragen: nur weil du einen Prozessor dazu gibst heißt das noch lange nicht, dass dieser auch genutzt werden kann. Von daher muss ein Prozessor mit mehr Kernen nicht besser als einer mit weniger Kernen sein.

    Es gibt aber noch mehr Dinge, die zu beachten sind:
    Wenn du dir heute einen Intel-Prozessor mit 18 Kernen kaufst, dann hat dieser typischerweise eine Clock von ~2.5 GHz. Da die Architektur mit den restlichen Prozessoren aus dieser Reihe vergleichbar ist, wirst du dir schon die Frage stellen: warum ist dann ein 4-Kern-Prozessor plötzlich 3.6 GHz schnell? Das liegt beispielsweise an der Abwärme, die jeder einzelne Kern produziert. Deshalb kann der 4-Kern-Prozessor pro Kern mehr Abwärme produzieren als der mit 18 Kernen, weshalb der mit 4 Kernen schneller laufen kann und somit pro Kern eine höhere Performance erzielen (warum? Weil insgesamt nicht mehr als x Watt Abwärme produziert werden können, um den Chip nicht zu beschädigen).
    Wenn deine Arbeitslast also immer nur genau einen Kern nutzen kann, bist du mit einem Prozessor mit wenigen, aber schnellen Kernen besser dran, als mit einem mit vielen langsameren.

    Umgekehrt gibt es aber auch Anwendungen, die von sehr vielen Kernen profitieren können. Ein Beispiel wäre Grafik-Verarbeitung, andere Beispiele wären maschinelles Lernen oder eine Webseite mit vielen tausend gleichzeitigen Anfragen. In diesen Fällen ist es möglich, das Programm auf mehrere Kerne zu verteilen, sodass diese Kerne auch ausgenutzt werden können. Wenn dann mehr Kerne vorhanden sind, kann mehr gleichzeitig ausgeführt werden, und insgesamt wird das System schneller, obwohl jeder einzelne Kern eventuell deutlich langsamer ist, als auf einem System mit wenigen Kernen. Sieh dir hier beispielsweise 3D-Grafik-Rendering an (also z.B. in 3D-Egoshootern): Grundsätzlich könnte hier jedes einzelne Pixel gleichzeitig berechnet werden, und dann wäre bereits nach einem Schritt das gesamte Bild fertig. Allgemeiner beim rendern von Filmen wird man das Bild in kleine Kacheln unterteilen und all diese Kacheln (die ja von einander unabhängig sind) gleichzeitig berechnen. Das funktioniert aber nur, weil diese Einzelteile des Bildes von einander unabhängig sind.

    Zusammenfassend: es gibt kein allgemein gültiges »Octa-Core ist besser als Quad-Core« o.ä., sondern das muss für jeden Einzelfall betrachtet werden, denn in jedem Einzelfall kann das anders sein. Du hast hingegen angenommen gehabt, dass jedes Programm immer vollständig parallelisiert werden kann, was nicht der Fall ist.

    Hoffentlich reicht dir das als Erklärung …
  • in: Werte von Domains bei Auktionen

    geschrieben von hackyourlife

    waytogermany schrieb:
    Übrigends scheint der Wert der Domains seit Beginn dieses Threads wieder runter zu gehen. Ich denke die jetzige wird unter 700 unter den Hammer kommen. Irgendwie scheinen sich doch viele zu überlegen, wieviel ein Gulden wert ist.
    Nein. Es scheint einfach nur niemanden zu geben, den eine (.de-)Domain interessiert.

    waytogermany schrieb:
    Damit kann man keine Inflation von 100% innerhalb von 2 Monaten erklären.
    Dir ist aber schon klar, dass früher™ Domains um weit über 1000 Gulden unter den Hammer kamen? Wenn ich dann sehe, dass jetzt Domains um etwas mehr als 400 Gulden ersteigert werden, dann ist jegliche Diskussion zum Thema »Domain-Preis steigt« o.ä. hinfällig!

    waytogermany schrieb:
    Dann mache einen anderen Vorschlag, wie man den Wert der Gulden monetär bewerten könnte!
    Warum muss immer alles monetär bewertet werden?!

    Außerdem: Was glaubst du wohl, warum man Gulden nicht kaufen, verschenken oder verkaufen kann? Sie sollen die Aktivität eines Users wiederspiegeln, und nicht eine reine Währung sein. »Jemand schreibt nur um Gulden zu bekommen, um sich damit etwas zu kaufen« mag zwar für Neulinge zutreffen (wegen einer DB), und eventuell auch noch für gewisse hpatschen und Aviateure (die dann Domains erspammen), aber ansonsten sind Gulden nur ein netter Nebeneffekt, wenn man im Forum unterwegs ist … falls denn mal wieder genügend interessante Themen existieren würden, sodass man auch wirklich im Forum unterwegs sein will.

    Deshalb auch als Antwort auf diese Frage:
    bruchpilotnr1 schrieb:
    Über den Wert der Domains bei den Auktionen bzw. wie man diesen am besten im Theoretischen fall" errechnen kann.
    ein klares: »gar nicht«. Allein schon deshalb nicht, weil Datenbanken nicht immer 50 Gulden kosteten, und ich nicht einmal weiß, ob der Preis in € immer so war wie er jetzt ist (aber ich meine mich zu erinnern, dass er einmal anders war). Und, weil es einmal »Download-Volumen« gab, welches wieder nicht in die Rechnung passt. Und, weil Domains eben mal 400G und mal um 1000G kosten. Und dann war/ist ja noch bei einer Domain eine Datenbank dabei (ob das immer schon so war? keine Ahnung). Und und und …

    davidmuc schrieb:
    Ich glaub ich hab den Faden verloren...worüber diskutieren wir hier?
    Gute Frage :-D

    Wenn sich hier also weiter nur im Kreis gedreht wird und weiterhin nur nutzlose, uninteressante Meldungen zwecks Guldenspamming abgegeben werden (nach viel Anderem sieht das derzeit jedenfalls nicht aus), und weiterhin nicht wirklich klar ist, worum es hier überhaupt geht bzw was der TE will (außer 2 Gulden pro Beitrag + immer mal wieder 5 noch dazu), dann mach ich hier zu (oder verschieb das in den unvergüteten Bereich :-P).
  • in: günstiger Server mit Windows

    geschrieben von hackyourlife

    lc-123 schrieb:
    Ich hatte ja bereits einen Server, nur die Leistung der CPU mit nur 2,3 GHz (bei dedizierten Kernen) oder 2,49 GHz (bei virtuellen Kernen) ist für mein derzeitiges Anwendungsgebiet viel zu wenig. Alleine die Gameserver brauchen mind. 2,8 GHz Taktrate. Da habe ich den Voice- und Webserver noch gar nicht zusammengezählt.
    Das klingt nach einem typischen Kind, welches keine Ahnung hat. Was sagt denn die Taktrate über die Leistung aus? Einen (älteren) AMD mit 4GHz Taktrate könntest du beispielsweise mit einem aktuellen Intel mit 2.4GHz schlagen … warum? Nun, das hängt stark von der Mikroarchitektur ab, und da speziell von so Dingen wie dem IPC.

    Vergleichen kannst du die Frequenz nur sinnvoll bei sehr ähnlich bis gleicher Mikroarchitektur (also z.B. zwischen Intel-CPUs der x-ten Generation).

    Dir bleibt also nichts übrig als zu testen und festzustellen, ob die CPU ausreichend Leistung für deine Anwendung hat, oder nicht. Und deshalb: hat dir also dein aktueller vServer tatsächlich nicht gereicht (Probleme bei den Anwendungen o.ä.), oder reicht er dir nur wegen den Zahlen am (virtuellen) Papier nicht?

    Meine Anwendungen laufen nur über Windows.
    Voice? Das gibt es ziemlich sicher auch für Linux. Webserver? Das gibt es für Linux (solang du kein MSSQL, ASP.NET o.ä. brauchst). Gameserver? Oft gibt es Software für dezidierte Server für Linux.

    Kennst du oder jemand anderes eigentlich noch andere vServer-Anbieter (außer Netcup) ?
    Ja, nur zu dem Preis? Nicht wirklich. Mit ≤20€ würdest du allerdings schon sehr weit kommen …
  • in: Java mit MySQL-Datenbank verbinden

    geschrieben von hackyourlife

    Indem du den JDBC-Treiber nutzt. Und natürlich musst du dann auch wissen, wie man damit SQL ausführt.

    Eine Google-Suche hätte dir das übrigens innerhalb von 0.21 Sekunden verraten.
  • in: Symmetrisches Internet mit 10 GBit/s

    geschrieben von hackyourlife

    all-in1 schrieb:
    Die Frage ist nur was Nutzen einem die 10GB, wenn der Router diese nicht zum Rechner/Tablet/Notebook usw. bringen kann?

    Das einzige was mir einfällt, wo man solche Verbindungen gebrauchen kann sind Rechenzentren, Firmen mit entsprechenden Internetzugängen und Shoppingmalls, die ja jetzt mittlerweile alle Gratis WLAN anbieten. Also überall dort, wo viele sich einen Internetzugang teilen.
    Ach? Also ich würde mich über 10Gbit Upstream und Downstream freuen, da ich dann endlich Dateien von verschiedenen Rechnern übers Internet austauschen könnte, ohne für ein paar GB schon stundenlang warten zu müssen, so wie beim jetzigen DSL-Anschluss (mit schlappen 3Mbit/s Upstream). Ok, mit 100Mbps wirds schon langsam benutzbar, aber dann fühlt sich das immer noch wie ein uralter, extrem langsamer USB-Stick an.

    Außerdem gibt es für 10GbE sogar sehr günstige Verkabelungsmöglichkeiten auf Basis von RJ45/CAT6(a), also ist das wohl auch für daheim geeignet. Die Daten so schnell an den Rechner zu bringen dürfte also wohl nicht das Problem sein. Und selbst wenn dann am Laptop/Tablet wegen Funk nur noch 1Gbit/s ankommen ist das immer noch sehr weit von dem entfernt, was du heute daheim so bekommst.

    kalinawalsjakoff schrieb:
    Um ehrlich zu sein b ei einer solchen symmetrischen 10 GB/s Anbindung mache ich mir wirklich große Sorgen. 10 GB im Downstream und 10 GB im Upstream, ich glaube da freuen sich Geheimdienste und Hacker gleichermaßen, die dann die Festplatten in Nullkommanix kopieren können so eben mal klammheimlich.
    Schneller Downstream ist für dich dann also auch schlecht/böse, weil man darüber schneller mehr Malware saugen kann? Komische Logik … ist so, wie wenn die Eisenbahn nicht schneller als Schrittempo fahren dürfte, weil man bei einem Crash ja sonst verletzt werden könnte, aber dass das vernachlässigbar selten vorkommt und man im Normalfall nur möglichst schnell von A nach B kommen will ist dir dabei egal :-P

    Falls sich »die Cloud« tatsächlich so durchsetzen soll, wie es von Unternehmen immer ausgemalt / gewünscht wird, ist eine derartige Internetverbindung aus genau dem genannten Grund wohl auch nötig. Und gegen dieses »die Wolke klaut!« gibt es schließlich Verschlüsselung, zumindest solange man »Cloud = Speicher« sieht.
  • in: Symmetrisches Internet mit 10 GBit/s

    geschrieben von hackyourlife

    computergottshomepage schrieb:
    In 10 Jahren brauchen wir zum Filme kucken keine Fernseher/PCs mehr...
    So wie wir jetzt schon fliegende Autos usw haben? Ja, ist klar :-D

    Zum Thema 10Gbps-Internet: wäre durchaus interessant, hat aber den Nachteil, dass dann der Backbone sehr viel mehr aushalten muss als heute, und wie man sieht wird ja in gewissen Ländern ewig herumgetan, bis überhaupt mal mäßig schnelles Internet verfügbar ist … und wie war das? Bis 20x0 solls gerade mal flächendeckend wie viel doch gleich geben? 100Mbps? Viel Spaß beim Warten auf die 10Gbps.
  • in: Website kreieren - mit welchen Hilfsmitteln?

    geschrieben von hackyourlife

    Der Profi nutzt vim mit mehr oder weniger Plugins in Verbindung mit Git. Außerdem hat er eine kleine Linux-VM mit einem Apache + PHP + MySQL, die direkt das Netzlaufwerk als DocumentRoot gemountet hat, auf dem man all seine Entwicklungen speichert. Somit sind Änderungen nach einem F5 im Browser sofort sichtbar.

    Der »Web-Designer« hat noch ein Bildbearbeitungsprogramm ala Gimp oder Photoshop.

    Bibliotheken: darüber streitet man sich ganz gern, speziell auch darüber »wo ist JavaScript sinnvoll?«. Bedenke aber: je weniger du an unnötigen Dingen einbaust, desto kleiner wird die Seite (vom Speicherbedarf) und desto schneller lädt sie.

    Sicherheit: darüber gibt es Unmengen an Informationen. Escaping gegen SQL-Injection ist da nur ein ganz kleiner (aber auch wichtiger!) Punkt. Da gibts noch einiges mehr, z.B. über XSS bis hin zu CSRF.
  • in: OpenGL - Zwei Objekte rotieren lassen

    geschrieben von hackyourlife

    Du berechnest ja Δt korrekt, aber du nutzt es nicht sinnvoll. Δt ist bei dir in der Einheit Millisekunde, also müssen 1000 solche Zeitschritte vergehen, bis 1s vergangen ist. Und was du jetzt machst: damit sich deine Umdrehung in einer Sekunde ereignet, teilst du die Drehung in 1000 Schritte, von denen du so viele ausführst, wie in Δt steht. Also in Pseudocode:
    // Initialisierung
    Rotation = 0° // Rotation der Szene
    ObjektTransformation = Rotate(29°, IrgendEineAchse) × Move(7, 5, 3)
    
    Render() {
    	// Ermitteln der Rotation
    	ermittle Δt
    	Rotation = Rotation + (Δt × 360° / 0.5s) // 1 Umdrehung pro halbe Sekunde
    	Rotation = Begrenze(Rotation, 0°, 360°) // = Rotation modulo 360°
    
    	// Anwenden der Matrix
    	Transformation = RotateYMatrix(Rotation) × ObjektTransformation
    	SetMatrix(Transformation)
    	Render(Objekt)
    }
    Deine Rotationsmatrix ist also das »rotateY«, du speicherst das nicht explizit. Du musst das aber mit deiner Objekt-Transformationsmatrix in der richtigen Reihenfolge multiplizieren … hoffentlich hilft dir der Pseudocode weiter.
  • in: OpenGL - Zwei Objekte rotieren lassen

    geschrieben von hackyourlife

    Das mit der Zeit löst man anders: du wartest nicht, sondern du zeichnest eben nur einen 1/Zeit-Schritt. Dadurch wird das auf schnellerer Hardware flüssiger, während es auf langsamer Hardware zwar weniger FPS rendert, aber dennoch zur selben Zeit das selbe zeigt (nur halt abgehackter).

    Die Rotation selbst: das hängt mit der Matrizenmultiplikation zusammen, und speziell damit, dass A × B ≠ B × A. Also: zuerst mit der globalen Rotationsmatrix multiplizieren (= die gesamte Szene dreht sich um den Mittelpunkt), und dann jeweils die einzelnen Translationsmatrizen der Objekte anwenden.

    Bemerkung am Rande: du entwickelst offenbar in Java. Das ist zwar durchaus möglich, erzielt aber in Verbindung mit OpenGL sicher nicht die beste Performance. Ich an deiner Stelle würde zu C (oder falls nötig C++) greifen ;-)
  • in: Datennetze mit PHP-Software abbilden

    geschrieben von hackyourlife

    Das, was du da abbilden möchtest, ist ein (ungerichteter?) Graph (siehe auch Graphentheorie für weiterführende Informationen). Nach einer kurzen Suche bin ich z.B. auf Graphviz gestoßen, das sieht wohl fast (weil nicht PHP/…) genau danach aus, wonach du suchst. Eventuell reicht auch ein einfach(er)es Tool wie z.B. draw.io (ist aber nur Online).

    Falls du Größeres vor haben solltest: es gibt eine ganze Familie von Datenbanken, die sog. Graph-Datenbanken, die genau solche Datenstrukturen effizient speichern und abfragen können, allerdings müsstest du dann selbst etwas (= deine spezifische Anwendung) programmieren.

    Und selbst eine Eigenbau-Version auf Basis einer relationalen Datenbank ist nicht allzu schwer … außer man muss MySQL nutzen, denn da fehlt zumindest ein ganz nützliches Feature für sowas.
  • in: TTF - erlaubtes Dateiformat?

    geschrieben von hackyourlife

    gandharxeno schrieb:
    Was ich fragen wollte ist ob TTF (true type font) ein erlaubtes Dateiformat seitens lima city ist? Will die Schrift für einen selbst-erstellen counter(Zugriffszähler) verwenden.
    Unter der Voraussetzung, dass du die entsprechenden Rechte besitzt, diese Schrift-Datei verbreiten zu dürfen, sei es dir gestattet, sie auch auf lima-city hochzuladen.
  • in: Alternativer DNS Server IPv4 und IPv6 (Nicht Google)

    geschrieben von hackyourlife

    Mach Folgendes:
    1) Linux-Distribution der Wahl (z.B. CentOS) herunterladen und installieren (falls du sowas haben solltest: auch Raspi o.ä. reicht), unter Nutzung der Google DNS-Server (zum Suchen/Finden des Installationsmediums und eventuell der Paketquellen)
    2) Paket »bind« installieren und als recursive resolver konfigurieren, ebenfalls unter Nutzung der Google DNS-Server (wegen den Paketquellen nötig)
    3) Diesen Linux-Rechner als DNS-Server bei dir eintragen.

    Was das bringt: du hast einen völlig unabhängigen Resolver.

Login zum Webhosting ohne Werbung!