Wie kann ich eine Webseite auf mehreren Clients gleichzeitig aktualisieren?

Hallo alle zusammen,

Ich hab Grundkentnisse in HTML/CSS/JS/PHP und würde gerne versuchen, eine Quiz-Webapp zu programmieren, die man vor Ort gemeinsam spielt.

Ich stelle es mir so vor: Alle Mitspieler rufen zunächst auf ihrem Handy eine Webseite auf, auf der aber zunächst nichts angezeigt wird. Dann wird eine Frage vorgelesen bzw. auf einem Bildschirm angezeigt, und anschließend werden bei allen Mitspielern gleichzeitig auf dem Smartphone die Antwortmöglichkeiten eingeblendet (wird natürlich vom Quizmaster über eine Webapp gesteuert), von der sie dann eine auswählen können.

Es gibt bereits ein Spiel, das genau das macht, Jackbox Party. Auch hier wählen sich die Mitspieler über eine Webseite ein, um am Spiel teilzunehmen. Allerdings will ich eben ein eigenes Quiz mit eigenen Fragen und eigenen Regeln machen.

Meine Frage ist es jetzt, wie ich es schaffe, dass auf allen Smartphones die Antwortmöglichkeiten möglichst gleichzeitig freigeschaltet werden. Der Server kann ja eigentlich den Browsern der Smartphones kein Signal geben, wenn sie nicht vorher eine Anfrage schicken. Ich kann ja aber auch wohl schlecht 10-Mal in der Sekunde eine AJAX-Anfrage an den Server schicken, ob es jetzt soweit ist, oder doch? Würde das überhaupt gehen oder brauchen die Requests da nicht schon zu lange, als dass man es so oft machen kann?

Wie würdet ihr das umsetzen?

Ich freue mich auf eure Vorschläge.

...zum Beitrag

Eine bidirektionale Verbindung ist mithilfe von WebSockets umsetzbar. Für PHP gibt es die Bibliothek Ratchet. Auf der verlinkten Website findest du ein gutes Tutorial.

Alle Mitspieler rufen zunächst auf ihrem Handy eine Webseite auf, auf der aber zunächst nichts angezeigt wird. Dann wird eine Frage vorgelesen bzw. auf einem Bildschirm angezeigt, und anschließend werden bei allen Mitspielern gleichzeitig auf dem Smartphone die Antwortmöglichkeiten eingeblendet (wird natürlich vom Quizmaster über eine Webapp gesteuert), von der sie dann eine auswählen können.

Letztendlich kann über Ratchet eine Nachricht mit Inhalt der Frage sowie den Antwortmöglichkeiten an die Clients gesendet werden. Mithilfe von JavaScript können diese in die Seite eingebaut werden.

...zur Antwort

Für die RTL8821CE existiert ein entsprechendes GitHub-Repository: Realtek RTL8821CE Driver

Wie in der README angegeben, funktioniert dieser Treiber unter GNU/Linux-Systemen auf Debian- oder Arch-Basis, wobei der Kernel mindestens von Version 4.14 sein sollte. Du kannst also auf Systeme wie Debian, Ubuntu, Mint, Arch, Manjaro sowie viele weitere setzen. Der Installationsvorgang ist auf der verlinkten Seite in Form von Konsolenbefehlen ebenfalls beschrieben, die du einfach in ein Terminal eingeben kannst. Unter Arch kannst du zur Hilfe einen AUR-Helper wie yaourt (veraltet) oder yay installieren.

...zur Antwort

Unter Android wird das recht schwierig. Du könntest diese Website ausprobieren: https://www.matrix.com/virtual-hair-color-try-on

Richtig gut ist das nicht, denn die automatische Erkennung von Haaren ist recht komplex. Besser bekommst du es nur am PC mit einem professionellen Bildbearbeitungsprogramm wie GIMP hin. Dies geschieht jedoch nicht automatisch, sondern du musst alles manuell machen.

...zur Antwort
verbessert er Wörter oft in die falsche Richtung

Dann schalte die Autokorrektur ab. Du kannst nicht erwarten, dass die Software genauso denkt wie du. Es hat bisher noch niemand ein Interface zu Deinen Gedanken entwickelt.

Wäre er also Google oder Sony denn haftbar zu machen wenn mir aufgrund orthografischer Defizite eine Leistung, zB ein wichtiger Vertrag oder Anmeldung zum Vorstellungsgespräch verwehrt wird?

Nein, denn Du kannst solch wichtigen Texte vorher Korrektur lesen. Gerade Anschreiben für Bewerbungen sollte man mehrfach überprüfen und am besten auch mal Freunde lesen lassen. Wenn dabei dann Fehler vorliegen, ist das einzig und allein Deine Schuld.

Ganz ehrlich, ich würde niemanden einstellen, der nicht die nötige Zeit aufwenden will, um eine ordentliche Bewerbung zu schreiben. Benutze am besten noch die Spracheingabe dafür. Kannst Du Google dann verklagen, wenn falsche Worte dabei herauskommen? Oder kannst Du Google verklagen, wenn der Google Übersetzer etwas falsch übersetzt und Du dadurch Schwierigkeiten bekommst?

Wenn man die Entwickler für das alles verklagen könnte, würde einfach niemand solche Software entwickeln. Autokorrektur ist nicht notwendig und trotzdem ist sie in Deiner Tastatur vorhanden. Freue Dich doch darüber oder nutze sie nicht, wenn sie Dir nicht gefällt. Keiner zwingt Dich, sie zu nutzen, und keiner zwingt die Entwickler, ein solches Feature überhaupt anzubieten.

Die tastatur heisst SwiftKey wenn das hilft.

Ganz ehrlich, das ist m. E. die beste Tastatur, die es für Android gibt. Ich habe viele ausprobiert und wenn Dir diese nicht zusagt, probiere andere Tastaturen aus oder kaufe Dir gleich eine haptische Tastatur.

Ausserdem ist die Tastatur ein bisschen zu klein

Bei SwiftKey lässt sich das einstellen. Dies kannst Du in den SwiftKey-Einstellungen tun. Wenn Dir selbst die größte Einstellung zu klein ist, hättest Du ein größeres Gerät kaufen müssen. Oder kaufe Dir, wie gesagt, eine haptische Tastatur.

Im Demo Modus in Saturn war das aber nicht festzustellen. Soll man dann saturn belangen?

Niemand zwingt Saturn, die Geräte überhaupt auszustellen. Es gibt auch Läden, in denen Du Smartphones vorher nicht ausprobieren kannst. Sollte Saturn jetzt diesen Service nicht mehr anbieten, damit man sie nicht verklagen kann?

Wenn Du willst, klage doch, aber erreichen wirst Du überhaupt nichts. Wird Dir nur sehr viel Geld kosten...

Getippt auf meinem OnePlus 6 mit SwiftKey.

...zur Antwort

SwiftKey ist m. E. die beste Tastatur für Android. Es gibt unzählige Themes, die du installieren kannst, um dir eine „süße Tastatur“ zusammenzustellen. Außerdem gibt es sehr viele Einstellungsmöglichkeiten und eine intelligente Wortvorhersage.

...zur Antwort

Welchen Raspberry Pi hast du und wie alt ist das Raspbian konkret? Du musst beachten, dass keine Aufwärtskompatibilität gegeben ist, lediglich Aufwärtskompatibilität. Daher musst du schauen, ob es damals den jeweiligen Raspberry Pi schon gegeben hat. Wenn ja, sollte das funktionieren, ansonsten nicht. Hier eine Tabelle dazu: https://en.wikipedia.org/w/index.php?title=Raspbian&oldid=875141376

...zur Antwort

Ich habe dazu nichts im Internet finden können. Beim S3 habe ich gerade nachgemessen: ca. 1,2x1,2 cm. Beim S4 seien es 1,11x,1,06 cm¹. Im S4 wurde ein Snapdragon 800 verwendet. Da das S5 einen Snapdragon 801 einsetzt, wird es von den Abmessungen her recht ähnlich sein. Die Höhe ist meist kleiner als ein Millimeter (mit RAM oben drauf² vielleicht 1,5-2 mm).

...zur Antwort
kann man das auslesen ?

Ja, dazu kannst du die Entwicklertools verwenden. Dadurch findest du das:

.head-title:before {
  position: absolute;
  content: "";
  left: 50%;
  top: 58px;
  width: 20px;
  height: 6px;
  background: #3f8ee8;
  margin: 0 auto;
  transform: translateX(-53%);
}

.head-title:after {
  position: absolute;
  content: "";
  left: 50%;
  top: 60px;
  width: 100px;
  height: 2px;
  background: #3f8ee8;
  margin: 0 auto;
  transform: translateX(-53%);
}

Fiddle: https://jsfiddle.net/25q403dc/

...zur Antwort

Die ersten fünf Zeichen erhältst du folgendermaßen:

print(eingabe1[:5])

Die Zeichen bis zum ersten Slash erhältst du über split:

print(eingabe1.split('/')[0])
...zur Antwort

Wie kommst du zu diesem Schluss? Systeme mit Linux-Kernel werden in allen möglichen Bereichen verwendet, für die ein Betriebssystem erforderlich ist. Bis auf den Desktop-Markt sind Linux-Systeme nahezu überall die am weitesten verbreiteten Systeme. Ein paar Beispiele:

  • Embedded Systems: Beispiele für Embedded Systems findest du hier und hier. Daran wird schon deutlich, dass wir in unserem Alltag unwissentlich sehr viel mit Linux-Systemen zu tun haben.
  • Server, Großrechner, Supercomputer
  • Smart Devices (z. B. Smartphones, Smartwatches, Tablets, Smart-TVs, Infotainmentsysteme von Autos)
  • Penetrationstests, digitale Forensik oder Ethical Hacking
  • Systemwiederherstellung und Partitionierung
  • Luft- und Raumfahrt
  • Bildung und Forschung
Beispiele

Ein paar interessante Beispiele sind zudem auf dieser Seite aufgeführt: https://www.comparebusinessproducts.com/fyi/50-places-linux-running-you-might-not-expect

Auf Desktop-PCs werden GNU/Linux-Systeme nicht so häufig eingesetzt wie z.B. Windows- oder macOS-Systeme. Sie sind nämlich, mit Ausnahme von z.B. Chrome OS auf Chromebooks oder Android auf Convertibles, nur sehr selten auf den gekauften Rechnern vorinstalliert und nur wenige Menschen trauen sich, den Schritt zu etwas Neuem zu machen. Es existieren jedoch viele Vorteile, die ich hier und hier schon genauer ausgeführt habe.

Außerdem ist die Annahme selbst für den Desktop-Bereich nicht korrekt:

  • 2009: 0,81%
  • 2012: 1,07%
  • 2015: 1,52%
  • 2019: 1,34%

Es gibt seit 10 Jahren trotz Chrome OS kaum eine nennenswerte Veränderung.

...zur Antwort
Was mache ich hier falsch (Python)?

Hey!

Ich wollte mir einen kleinen Rechner mit Python erstellen, doch irgendwas scheint falsch zu sein:

print ("Kugel Berechner")
choice=float(input("Drücke '1' um zu starten oder '2' um das Programm zu beenden"))

if choice==1:
  radius=float(input("Wie ist der Radius deiner Kugel? (angabe in mm)"))
  volumen= 4/33.14159265radius3
  print ("Deine Kugel hat einen Radius von",volumen,"mm³")
  loesung=float(input("drücke nun '1' um das Gewicht zu berechnen oder '2' um das Programm zu beenden"))

  if loesung==1:
    fuelle=float(input("Ist deine Kugel gefüllt '1' oder hohl? '2'"))
    if fuelle==1:
      print ("Aus was besteht deine Kugel?")
      material=float(input("Holz(Fichte, trocken) '1' , (Sand)Stein '2' , Stahl '3'"))

      if material==1:
        hgewicht=(volumen/1000000)470
        float(input("Deine Kugel wiegt ca.",hgewicht,"gramm")
      elif material==2:
        sgewicht=(volumen/1000000)2600
        float(input("Deine Kugel wiegt ca.",sgewicht,"gramm")
      elif material==3:
        egewicht=(volumen/1000000)7850
        float(input("Deine Kugel wiegt ca.",egewicht,"gramm")
      else:
        print ("Tschau")

    else:
      wand=float(input("Wie dick ist die Wand deiner Kugel?"))
      wvolumen=volumen-(3/43.14159265(radius-wand)3
      print ("Aus was besteht deine Kugel?")
      material=float(input("Holz(Fichte, trocken) '1' , (Sand)Stein '2' , Stahl '3'"))

      if material==1:
        whgewicht=(wvolumen/1000000)470
        float(input("Deine Kugel wiegt ca.",whgewicht,"gramm")
      elif material==2:
        wsgewicht=(wvolumen/1000000)2600
        float(input("Deine Kugel wiegt ca.",wsgewicht,"gramm")
      elif material==3:
        wegewicht=(wvolumen/1000000)7850
        float(input("Deine Kugel wiegt ca.",wegewicht,"gramm")
      else:
        print ("Tschau")

  else:
    print ("Tschau")
else:
  print("Tschau!")

Vielleicht findet jemand den Fehler, denn das Programm will nicht starten.

...zum Beitrag

Dir fehlen schließende Klammern in folgenden Zeilen:

float(input(...))

Ebenso fehlt hier eine schließende Klammer:

wvolumen=volumen-(3/4*3.14159265*(radius-wand))**3
...zur Antwort
Wie wurde der erste Computer der Welt Programmiert wo es doch noch gar keine Programmiersprachen gab?

Mit Nullen und Einsen. Wie das funktioniert? Das ist im Grunde genommen einfach nur eine taktbasierte elektrische Schaltung. Es würde hier den Rahmen sprengen, die gesamten Grundlagen zu erläutern. Kurz umrissen habe ich das bereits in dieser Antwort. Aber eigentlich kannst du dich mit diesem Thema ein halbes Jahr beschäftigen ;-)

Wollen wir es also ein bisschen greifbarer machen. Hier ist eine beispielhafte 4-Bit-CPU: https://simulator.io/board/AWZpw7Fy3I/2

Diese CPU hat folgenden Befehlssatz: https://imgur.com/a/zuRd1ZP

Die Programme werden in dem Beispiel einfach fest in den ROM eingespeichert. Ein Programm, um zwei Zahlen zu addieren würde beispielsweise so aussehen:

0000
0011
0000
0100
0001

Probiere es einfach aus! Das kannst du auf der Website direkt oben links im ROM per Edit eintragen und die Simulation per Klick auf das dritte Taktsignal starten. So sollte es aussehen: https://imgur.com/a/UFwdGLj

Etwas lesbarer ist es natürlich, wenn man statt Nullen und Einsen (Maschinencode) eine Assemblersprache verwendet:

IN
SWP
IN
ADD
OUT

Auf Basis dieser Assemblersprachen (Programmiersprachen zweiter Generation) konnte man Compiler entwickeln, welche Programme in höheren Programmiersprachen in eine Assemblersprache übersetzen (kompilieren). Und dadurch wiederum kann man nun Compiler auch in höheren Programmiersprachen schreiben. Diese Vorgehensweise bezeichnet man als Bootstrapping.

Wie sah das konkret in der Praxis aus? Es wurden beispielsweise Lochstreifen verwendet. Im Wikipedia-Artikel heißt es:

Ein konkreter Arbeitstag für einen Programmierer sah dann so aus, dass er an einem Fernschreiber (oder später Lochstreifenterminal) ein Programm eintippte, danach einen weiteren Lochstreifen mit einem Datensatz erstellte und damit schließlich zum Computer ging.
Dort las er den [...][Compilerlochstreifen][...] ein, danach seinen Programmlochstreifen und nach dem Start des Programms den Datenstreifen. Der Computer produzierte dann einen Ergebnis-Lochstreifen, den man entweder in Klartext am Fernschreiber ausdruckte oder[...] in einen weiteren Raum ging, wo ein schreibtischgroßer Plotter stand, der [...] ein Diagramm produzierte. [...]

Beim Zuse Z3, dem ersten funktionsfähigen Digitalrechner der Welt, sah die Codierung auf diesen Lochstreifen so aus (vgl. Wikipedia):

+-----------------------------+-----------------------------------------+
| Opcode auf dem Lochstreifen |              Beschreibung               |
+-----------------------------+-----------------------------------------+
| -O·OO----                   | Anhalten, Dezimalzahl einlesen in R1/R2 |
| -O·OOO---                   | R1 als Binärzahl ausgeben               |
| OO·zzzzzz                   | Speicherzelle z in Register R1/R2 laden |
| O-·zzzzzz                   | R1 in Speicherzelle z schreiben         |
| -O·O-----                   | Addition: R1 := R1 + R2                 |
| -O·O-O---                   | Subtraktion: R1 := R1 – R2              |
| -O·--O---                   | Multiplikation: R1 := R1 * R2           |
| -O·-O----                   | Division: R1 := R1 / R2                 |
| -O·-OO---                   | Quadratwurzel: R1 := √(R1)              |
+-----------------------------+-----------------------------------------+

O : Loch
- : kein Loch
· : Transportloch

Das sind quasi diese Nullen und Einsen. Hier ein wirklich empfehlenswertes Video dazu:

https://www.youtube.com/watch?v=aUXnhVrT4CI

Ich denke, damit ist deine Frage relativ gut beantwortet, denn der Z3 ist der erste funktionsfähige Digitalrechner der Welt und wurde genau so, wie beschrieben, programmiert :-)

...zur Antwort

Guten Tag,

das Wort „Enttäuschung“ setzt sich zusammen aus der Vorsilbe „Ent-“ und dem Wort „Täuschung“. „Ent-“ bedeutet so viel wie „wegführen von etw., befreien von etw.“. Eine Täuschung ist eine falsche Auffassung eines Sachverhalts, eine Fehlvorstellung, die nicht der Wahrheit entspricht. Eine Enttäuschung ist also die Befreiung von Täuschungen, von Fehlvorstellungen, ein Schritt näher in Richtung Wahrheit.

Enttäuschungen sind mehr oder weniger selbstverschuldet. Das zu akzeptieren ist meist schwierig, aber man muss sich klar machen, dass man, bevor man enttäuscht werden kann, eine bestimmte Erfahrung bezüglich einer Situation oder einer Person haben muss. Man erhofft sich und wünscht sich etwas, man erwartet etwas, aber es tritt nicht ein. Mark Twain sagte einst:

Man ist nicht enttäuscht von dem, was ein anderer tut (oder nicht tut), sondern nur über die eigene Erwartung an den anderen.

Auf den Punkt gebracht: Eine Enttäuschung entsteht, wenn wir uns selbst etwas vormachen und wir erkennen, dass wir uns getäuscht haben. Dass es nicht der richtige Weg ist. Aus diesem Grund ist eine Enttäuschung etwas Positives. Enttäuschungen zeigen uns, was falsch ist und wie es vielleicht besser sein könnte. Sie weisen uns durchs Leben! Wie in Deinem Zitat erwähnt, geben sie uns die Gelegenheit umzusteigen, wenn wir in die falsche Richtung fahren. Sie geben uns die Chance, etwas Besseres aus unserem Leben zu machen.

Man muss akzeptieren, dass Enttäuschungen ein essentieller und unvermeidbarer Bestandteil des Lebens sind. Natürlich ist man für den Moment etwas negativ gestimmt, aber langfristig sollte man sich keine Selbstvorwürfe machen. Niemand kann die Zukunft vorhersehen und es kann nicht alles so verlaufen, wie man es sich wünscht. Nichts ist perfekt! Daher sollte man sich sogar loben: Man hat die Täuschung durchschaut und wird daraus lernen.

Wie gehe ich also mit Enttäuschungen um? Ich frage mich genau, wie es zu dieser Enttäuschung kommen konnte: Was habe ich mir erhofft und war dieses Ziel vielleicht zu unrealistisch, zu optimistisch, zu utopisch? Hätte ich die Enttäuschung irgendwie verhindern können? Was sollte ich beim nächsten Mal anders machen, besser machen? Durch all diese Fragen lerne ich immer mehr über die Enttäuschung und komme somit zur Selbsterkenntnis. Ich komme der Wahrheit, dem richtigen Weg durchs Leben immer ein Stückchen näher.

Enttäuschungen sind Chancen!

Einen schönen Sonntag wünsche ich allen ;-)

...zur Antwort

Guten Morgen,

mich ärgert am meisten, dass mich nichts ärgert :-)

Ich könnte mich natürlich über alles Mögliche aufregen: über das Verhalten anderer Menschen, über den verspäteten Bus, über meine Nachbarn, über die Politik, über den Klimawandel, über den heruntergefallenen Stift, über das Wetter, über andere Autofahrer, über Stau, über das Schulsystem, über den Drucker, über unpassende Bohrlöcher, über ausverkaufte Artikel, über die Steuern, über Verschmutzung, über gutefrage-Nutzer etc. Es gibt so viel, worüber man sich aufregen kann.

Aber was bringt mir das? Oder bringt es überhaupt jemandem etwas? Genau: nichts. Wenn mir also etwas nicht gefällt, ignoriere ich es einfach. Sollen andere Menschen das tun, was sie nicht lassen können. Und wenn ich eine Änderung will, dann evaluiere ich, welche Möglichkeiten ich habe, solch eine Änderung zu bewirken. Denn das bringt viel mehr, als sich einfach nur aufzuregen. Außerdem ist es gut für die Nerven und die Gesundheit ;-)

Natürlich gelingt es mir nicht in jeder Situation die Fassung zu bewahren, aber ich gebe mir Mühe. Am ehesten regen mich wahrscheinlich Drucker und Technik allgemein auf. Bin zwar Softwareentwickler, aber es funktioniert leider trotzdem nicht immer so, wie es funktionieren soll... Dafür ist es umso schöner, wenn alles klappt.

Schönen Donnerstag allen! 😀

...zur Antwort

Führe die Permutationen so oft in einer Schleife durch, bis wieder das Ursprungsarray herauskommt. Zähle dabei, wie oft permutiert wurde:

private int getOrder(int[] a) {
  int[] b = permute(a, a);
  int i;

  for (i = 1; !Arrays.equals(a, b); ++i) {
    b = permute (b, a);
  }

  return i;
}
...zur Antwort
Für die mint partition habe ich zwar das Passwort, jedoch läuft sie langsam und irgendwwie schaltet sich das internet alle 10 minuten ab, sodass ich den ganzen rechner neustarten muss.

Seit wann ist das so? Hast du irgendetwas verändert? Ist genügend Speicherplatz vorhanden (ein bisschen freier Speicher sollte immer vorhanden sein)? Hast du schon mal eine Neuinstallation in Erwägung gezogen?

kann ich irgendwie vom linux aus auf die windows partition zurückgreifen und auf Werkseinstellungen zurückstellen oder das Passwort ändern?

Die Partition solltest du nach der Installation von NTFS-3G problemlos einbinden können:

apt-get install ntfs-3g

Eine ausführliche Anleitung dazu findest du hier. Melde Dich gerne bei Fragen ;-)

...zur Antwort