Hi gamer :)

so eine Frage hat scheinbar schon einmal jemand gehabt:
https://community.bahn.de/questions/2135013-videouberwachung-zugen

gemäß DSGVO und DSG werden Videoaufnahmen in Zügen maximal für 72h gespeichert und nur auf Anordnung (Bundespolizei, Staatsanwaltschaft) angeschaut. Sofern keine Einsicht gefordert, werden diese gelöscht bzw. neu überspielt.

Falls das deine Frage nicht beantwortet, solltest du dich damit direkt an die Deutsche Bahn wenden.

Liebe Grüße
Win7User

...zur Antwort

Nur Drachen und evtl. Wutzauber sind oft eine sichere 100%-Taktik ;-)

Ich spiele clash of clans aber nur gelegentlich, vielleicht hat sich also auch wieder etwas geändert .....

...zur Antwort

Ich habe es jetzt so gelöst, dass ich das eingelesene Zeichen mit Zahlenwert des Ó-Zeichens vergleiche und falls es das ist, das nächste Zeichen als Pfeiltaste einlese:

char c;
while(1){
  while(!kbhit());
  if((c = getch()) == 224){
    c = getch();
    printf("Pfeiltaste Code: %c", c);
}

Falls jemand eine bessere Idee hat (abgesehen davon auf Linux zu programmieren ;-)), bitte einfach schreiben.

...zur Antwort

Falls du dich mit der Konsole ein bisschen auskennst, wäre meiner Meinung nach youtube-dl die beste Wahl. Das ist ein Konsolenprogramm, bei dem man sehr viele Optionen für den Download hat. Damit ist es z.B. auch möglich, eine ganze Liste/Playlist von Videos herunterzuladen.

Falls du misstrauisch sein solltest, kannst du auf Github den Quellcode herunterladen, alles überprüfen und selbst noch einmal packen ... weil es aber ein Konsolenprogramm ist, ist auch nirgendswo Werbung/Malware ;-)

...zur Antwort

Du könntest einfach einmal eine alte Version ausprobieren, die funktionieren vielleicht noch, wenn sie es einmal getan haben ;-)

-> https://github.com/cheat-engine/cheat-engine/releases

Was genau funktioniert denn bei dir nicht mehr? Wenn du ein bisschen spezifischere Angaben machen würdest, müsste man nicht so viel raten.

...zur Antwort

Die maximale Drehung eines Servos ist mechanisch begrenzt. Wie du einen Servo so umbauen kannst, dass er um 360° drehbar ist, kannst du auf dieser Seite nachlesen: https://www.instructables.com/id/How-to-Make-a-TowerPro-Micro-Servo-Spin-360/

Ein Servo ist aber eigentlich dafür da, ein Ruder (bei Modellflugzeugen) oder eine Achse zu drehen (bei Modellautos). Bei diesen Sachen darf er sich oft nicht weiter als 90° in beide Richtungen bewegen, weil sonst eine falsche oder unvorhergesehene Bewegung kommen könnte (z.B. Ruder bewegt sich wieder richtung Neutralstellung/Lenkrad dreht sich wirder in andere Richtung).

Wenn du ein 360° Servo brauchen würdest, solltest du über einen Schrittmotor nachdenken. Die sind nicht so schnell wie Servos aber sie können sich um 360° drehen und man kann je nach Motor die Position sehr genau bestimmen.

...zur Antwort
Zu teuer

Der Preis wird immer über Angebot und Nachfrage geregelt. So lange es noch genug Idioten gibt, die so viel Geld für das neuste Handy ausgeben, wird der Preis auch nicht fallen, weil die Firmen so den höchsten Gewinn machen können.

...zur Antwort

Er kann eine ganze Menge über den Browser und das Betriebssystem herausfinden.

  • Browser (z.B. Firefox, Chrome, Opera etc.)
  • Betriebssystem (z.B. Windows, Linux, OSX etc.)
  • Endgerät (z.B. Smartphone, Tablet, Pc, Konsole etc.)
  • Bildschirmgröße
  • Fenstergröße des Browsers
  • IP-Adresse
  • Standort deines ISP (Internet Service Provider)
  • Alles was du irgendwo auf der Seite eingibst

Cookies sind kleine Textdateien, in denen der Seitenbetreiber Sachen speichern kann, die bei einem erneuten Besuch wieder abgerufen werden können. Das wird oft für ein Login verwendet: im Cookie wird gespeichert, dass man schon angemeldet ist und man so nicht nach jeden klicken auf einen Link noch einmal das Passwort eingeben muss.

Standardmäßig werden die Cookies gelöscht, sobald der Browser geschlossen wird. Der Betreiber kann aber auch angeben, dass er bis zu einem bestimmten Datum behalten werden soll. In den meisten Browsern kann man sie aber auch in den Einstellungen löschen.

Neben Cookies gibt es auch noch localStorage und sessionStorage. Ersteres wird so lange behalten, bis es der Betreiber wieder löscht (oder du in den Einstellungen). Letzteres wird wie der Name schon sagt nur für die Dauer der Sitzung gespeichert und dann automatisch gelöscht.

...zur Antwort

Du kannst das Input-Feld mit CSS verstecken und dann einfach ein Button-Element hinzufügen, worüber es angeklickt werden kann.
Beispiel (Quick and Dirty):

https://jsbin.com/habequsehu/edit?html,css,output

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
  <style>
    /* Elemente mit der Klasse 'hidden' verstecken */
    .hidden
    { display: none }
  </style>
</head>
<body>
  <form name="ticketerstellung" method="post">
    <input type="text" name="inputbetreff" placeholder="Betreff" required>
    <textarea name="inputtext" placeholder="Text" maxlength="1000" required></textarea>
 
    <!-- Sichtbarer Button -->
    <button onclick="this.parentNode.querySelector('input[name=inputdatei]').click()">Datei hinzufügen</button>
 
    <!-- verstecktes Dateiinputfeld -->
    <input class="hidden" type="file" name="inputdatei" size="20000000" multiple>

  </form>
</body>
</html>
...zur Antwort

Ich frage mich echt, warum das hier scheinbar alle abgesehen von einem mit einer .htaccess-Datei machen wollen! Du erstellst einfach ein Verzeichnis mit dem Namen unterseite, verschiebst die Datei da rein und nennst sie index.html. Alle anderen Ressourcen, die dazugehören, kommen natürlich auch in diesen Ordner.

Wenn deine Verzeichnisstruktur vorher etwa so ausgesehen hat:

/var/www/
  - index.html
  - index.css
  - index.js
  - unterseite.html
  - unterseite.css
  - unterseite.js

könnte sie dannach so aussehen:

/var/www/
  - index.html
  - index.css
  - index.js
  /unterseite/
    - index.html
    - unterseite.css
    - unterseite.js

Es wird einfach alles in ein Unterverzeichnis (Ordner) verschoben, der alle Dateien enthällt, die zu der Seite gehören.

So ist es auch besser geordnet und man muss nicht so lange suchen, um etwas bestimmtes zu finden. Würde man die erste Struktur verwenden und das ganze mit einer RewriteRule umschreiben, würde es (für den Administrator) nur noch unübersichtlicher werden als es sowiso schon ist!

...zur Antwort

Deine delay-Funktion kannst du noch kürzer schreiben. Das von Stackoverflow ist sehr idiotensicher gehalten. Hier eine verkürzte Schreibweise:

function delay(ms){
  var start_tick     = +new Date,
      ms_passed      = 0;
 
  while (ms_passed < ms)
    ms_passed = +new Date - start_tick;
}

Bei mir hat dein Beispiel aber auch so funktioniert, wie es sein soll:

while(1){
  delay(200);
  console.log('.');
}

Alle 200 Millisekunden wurde ein Punkt geloggt. So eine delay-funktion und ein while(1) ist in JavaScript aber zu vermeiden, da es eine Event basierte Programmiersprache ist und so etwas die komplette Seite anhalten würde. Dafür gibt es asyncrone alternativen, wie schon von den anderen erwähnt wurde.

Beispiel mit setInterval und setTimeout:

// mit setInterval
// 10 mal mit 200ms Verzögerung ausführen
(function(){
  var i = 0;
  var intID = setInterval(function(){
    if (++i >= 10)
      clearInterval(intID);

    // irgendetwas dass 10 mal ausgeführt werden soll
    console.log('.');

  }, 200);
})();

// mit setTimeout
// 10 mal mit 200ms Verzögerung ausführen
(function(){
  var i = 0;
  var toutID = setTimeout(function x(){
    if (++i < 10)
      toutID = setTimeout(x, 200);

    // irgendwas dass 10 mal ausgeführt werden soll
    console.log('.');

  }, 200);
})();

Weil man immer noch eine Zählervariable (hier i) braucht, habe ich es immer in einen eigenen Namespace geschrieben (die wrapper-Funktion (function(){ ... })() ). So wird verhindert, dass sie überschrieben wird und Fehler entstehen, die nicht sehr leicht zu finden sind.

Liebe Grüße
Win7User

...zur Antwort

Hier wie du es machen könntest:

const Discord = require('discord.js');

// Prefix um zu verhindern, dass versehentlich ein Befehl ausgeführt wird
const prefix = '>';

var client = new Discord.Client()
.on('ready', () => console.log('Client ready'))
.on('message', message => {

    // prüfen, ob das Prefix angegeben wurde
    if (!message.content.match(new RegExp('^' + prefix)))
        return;

    // Hier wird die eingegebene Nachricht überprüft (groß-kleinschreibung irrelevant)
    switch (message.content.replace(new RegExp('^' + prefix + '\\s*'), '').toLowerCase()) {

        case 'alle nachrichten löschen':

            // alle Nachrichten anfordern
            message.channel.fetchMessages()
            .then(messages => {

                // Funktion für alle Nachrichten ausführen
                messages.map(msg => {

                    // Falls Nachricht nicht angepinnt ist und gelöscht werden kann ...
                    if (!msg.pinned && msg.deletable)

                        // ... wird sie gelöscht
                        msg.delete();
                })
            })
            .catch(err => console.error(err));
            break;
    }
})

// Hier loggst du dich mit einem Token (von deinem Benutzer oder einem Bot) ein
.login('[DISCORD-TOKEN]');

Du musst natürlich noch in der letzten Zeile einen Token einfügen, dass sich der Bot anmelden kann.

Dann kann man mit dieser Nachricht alle Nachrichten löschen:

alle nachrichten löschen

Angepinnte Nachrichten werden nicht gelöscht. Fehlt die Berechtigung natürlich auch nicht.

...zur Antwort

Du könntest das mit Benutzerskripten machen. Dafür installierst du dir Tampermonkey/Greasemonkey oder irgendeinen anderen Manager für Benutzerskripte.

Damit kannst du dann JavaScript-Code vor-/nachladen.

...zur Antwort

Hi MinerSnack,

ich habe es so wie du es beschrieben hast einfach eimal geschrieben:

https://jsbin.com/rikagujoxe/1/edit?html,css,js,output

So hat es aber relativ wenig Sinn, wenn du mit dem Wert nichts anderes machen willst ;-)

...zur Antwort
Kann ein Container eine größere Opacity haben, wenn der in einem anderen Container mit geringerer Opacity steckt?

Nein. Die Opacity Eigenschaft verändert die Sichtbarkeit eines Elementes, wird aber nicht normal an die Kindelemente vererbt:

HTML

<div class="outer">
  <div class="inner">
    content
  </div>
</div>

CSS

.outer {
  opacity: 0.5; /* 50% des Standartwertes also 0.5 */
  background: grey;
}

.inner {
  opacity: 1; /* entspricht dem Wert von .outer also 0.5 */
  background: red;
}

Der Referenzwert für diese Eigenschaft ist immer der Container, in dem sich das Element befindet. Der Maximalwert ist also immer das, was im Elternelement angegeben wurde.

Wird im Kindelement ein kleinerer Wert verwendet, wird dieser auf die geerbte Eigenschaft bezogen:

.outer {
  opacity: 0.5; /* 50% des Standartwertes also 0.5 */
  background: grey;
}

.inner {
  opacity: 0.5; /* 50% von dem geerbten Wert also 0.25 */
  background: red;
}

Das ist ein bisschen verwirrend und auch nicht immer gewünscht. Diesen Effekt kann man aber mit dem Alpha-Kanal umgehen (RGBA-Farbwerte), wie dir @MrSchockiert schon geschrieben hat.

.outer {
  background: rgba(255, 255, 255, 0.5); /* Tranzparenz 50% */
  padding: 1em;
}

.inner {
  background: orange; /* Transparenz wird nicht vererbt */
}

Liebe Grüße
Win7User

...zur Antwort

Wenn du wissen willst, wie du das lokale Windows-Passwort zurücksetzen kannst, kannst du dir einmal eine Antwort durchlesen, die ich einmal vor 2 Jahren geschrieben habe: https://www.gutefrage.net/frage/windows-7-passwort-vergessenn#answer-263638197

Mit dieser Methode musst du nichts an den Systemdateien (oder nur an der, wo die Passwörter sind) ändern.

Liebe Grüße
Win7User

...zur Antwort
Mit welcher Funktion liest ein C-Hauptprogramm Eingaben vom Benutzer? Mit welcher Funktion gibt es Ausgaben für den Benutzer aus?

Das hast du ja schon beantwortet.

Wie erhält eine Funktion Eingaben? Auf welchen zwei Wegen kann eine Funktion Ausgaben machen?

Funktionen werden Argumente übergeben. Diese sind wahrscheinlich mit Eingaben gemeint.
Beispiel:

float addieren(float a, float b, float * result){
  return *result = a + b;
};

Hier werden drei Argumente an die Funktion addieren übergeben ('Eingaben' für die Funktion). Das dritte Argument ist ein Pointer und wird dafür verwendet, einen Wert zurückzugeben (in einer Variable zu speichern). So können mehrere Werte zurückgegeben werden (einfach mehrere Pointer übergeben).

Die andere 'Ausgabe' ist dann sicherlich der return-Wert. Das ist einfach das, was die Funktion zurückgibt.

int main(){
  float ergebnis;
  float returnWert = addieren(1, 2, &ergebnis);

  printf("ergebnis: %f\nreturnWert: %f", ergebnis, returnWert);

  return 0;
}

Das sollte zweimal 3 ausgeben ('Ausgaben' der Funktion). Einmal den Wert, der in der Variable gespeichert wurde (ergebnis) und einmal der, der von der Funktion zurückgegeben wurde (returnWert).

Liebe Grüße
Win7User

...zur Antwort