<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Webzeugs]]></title><description><![CDATA[Web-Programmierung - rund um PHP, CGI, JavaScript, TypeScript, CSS, ASP&amp;#46;NET und natürlich HTML. Fragen zu Programmen wie Dreamweaver oder Frontpage gehören aber nicht dazu.]]></description><link>https://www.c-plusplus.net/forum/category/40</link><generator>RSS for Node</generator><lastBuildDate>Sat, 11 Apr 2026 11:46:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/category/40.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 02 Apr 2013 11:36:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Linksammlung (postet eure Webzeugs Links)]]></title><description><![CDATA[Response JS - mobile-first responsive design in HTML5
]]></description><link>https://www.c-plusplus.net/forum/topic/313335/linksammlung-postet-eure-webzeugs-links</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/313335/linksammlung-postet-eure-webzeugs-links</guid><dc:creator><![CDATA[PuppetMaster2k]]></dc:creator><pubDate>Tue, 02 Apr 2013 11:36:50 GMT</pubDate></item><item><title><![CDATA[PHP json]]></title><description><![CDATA[Suchst du einfach json_encode?
https://www.php.net/manual/en/function.json-encode.php
]]></description><link>https://www.c-plusplus.net/forum/topic/355423/php-json</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/355423/php-json</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sun, 04 Jan 2026 22:48:02 GMT</pubDate></item><item><title><![CDATA[floating point -&gt; rational number]]></title><description><![CDATA[Das hat sich schon gelöst... Ich hatte einen Denkfehler, denn nicht alle reelle Zahlen lassen sich &quot;schön&quot; in der Form xx/yy als reine rationale Zahlen darstellen... das ist auch logisch, weil die Menge der reellen Zahlen ja größer ist... (ok, beide sind unendlich, aber darum geht's mir nicht).
Oder mathematischer, selbst, wenn man die Urbildmenge auf [-99.99,+99.99] begrenzen würde und die Bildmenge auf alle Zahlen in der Form (-)xx/yy, wäre die Injektivität, Surjektivität und Bidirektionalität nicht mehr gegeben.
Oder einfacher, 10/2 könnte sowohl 5.0 als auch 4.99 gewesen sein (da 499/100 nicht mehr in der Form xx/yy wäre).
]]></description><link>https://www.c-plusplus.net/forum/topic/355421/floating-point-rational-number</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/355421/floating-point-rational-number</guid><dc:creator><![CDATA[Lennox]]></dc:creator><pubDate>Tue, 23 Dec 2025 21:54:30 GMT</pubDate></item><item><title><![CDATA[Nodejs Express App ist über Traefik Auth Middleware nicht erreichbar]]></title><description><![CDATA[Hi, kurze Frage an die Gelehrten ...
Ich habe eine Nodejs Express App, die ich nicht selber geschrieben habe, und auf die ich keinen Einfluss habe.
Ich starte diese App (und Traefik auch) in einem Docker-Container. Nennen wir den Service einfach &quot;a&quot;, das macht es einfacher.
Ich kann http://a:3000 lokal aufrufen, kein Problem. Ich kann auch den Service extern durch Traefik aufrufen: https://a.domain.tld/, kein Problem.
Was allerdings nicht funktioniert, ist eine Auth oder ForwardAuth Middleware einzusetzen, denn dann startet der Service immer ein HTTP Basic Auth Prompt, und ich komme an der Stelle in einen Redirect/Reload Loop.
Ich vermute, dass der Service alle (XForwardAuth)Header killt oder zumindest &quot;nicht mag&quot;, aber ich weiß es nicht genau.
Hätte jemand eine Idee?
Ich muss also (neben dem Auth) https -&gt; http -&gt; https, :443 -&gt; :3000 -&gt; :443 und den Host bzw. Location Header überwinden.
]]></description><link>https://www.c-plusplus.net/forum/topic/355307/nodejs-express-app-ist-über-traefik-auth-middleware-nicht-erreichbar</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/355307/nodejs-express-app-ist-über-traefik-auth-middleware-nicht-erreichbar</guid><dc:creator><![CDATA[GenXy]]></dc:creator><pubDate>Tue, 27 May 2025 23:41:23 GMT</pubDate></item><item><title><![CDATA[mkv-web &quot;compilieren&quot;?]]></title><description><![CDATA[Ich habe ein wenig in den Issues gewühlt und bin offenbar nicht der einzige Ochs vorm Berg ...
a) letzter Commit ist fast 3 Jahre her, und seitdem ist nix mehr passiert,
b) das Repo wird nicht mehr gepflegt,
c) und meine Intelligenz reicht scheinbar nicht aus, um dieses Bundle zu erstellen. 
Ich hisse mal die  ... 
]]></description><link>https://www.c-plusplus.net/forum/topic/355131/mkv-web-compilieren</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/355131/mkv-web-compilieren</guid><dc:creator><![CDATA[ShredderButtonOn]]></dc:creator><pubDate>Sun, 10 Nov 2024 22:35:17 GMT</pubDate></item><item><title><![CDATA[Welches kostenlose WYSIWYG Tool verwendet ihr für html-Websites?]]></title><description><![CDATA[Mit der Kombination aus MS Expression Web 4 für die visuelle Bearbeitung und Visual Studio Code mit Live Server für die Live-Vorschau arbeite ich bisher. Das ist etwas umständlich, aber kostenlos. Auf die Darstellung von MS Expression Web 4 kann man sich leider nicht verlassen. Da ich bisher nicht direkt in html arbeiten möchte, gebe ich den Text und die Bilder in MS Expression Web 4 ein, kopiere den html-Text nach Visual Code und beobachte es im Live Server. Eine funktionierende WYSIWYG Editor Erweiterung für Visual Code fand ich bisher leider nicht. Wie macht ihr das kostenlos oder sehr preisgünstig?
Ich habe auch ChatGPT-4o gefragt:
Mal eine direkte Frage: Wenn ich dir einen normalen Text gebe, oder einen schlechten html code (libre office), kannst du mir dann einen perfekten HTML-Code liefern?
ChatGPT:
Ja, ich kann dir gerne helfen, aus einem normalen Text oder einem &quot;schlechten&quot; HTML-Code (zum Beispiel aus LibreOffice) einen gut strukturierten und sauberen HTML-Code zu erstellen. Wenn du mir den Text oder den vorhandenen HTML-Code gibst, werde ich ihn in ein optimiertes, sauberes HTML-Format umwandeln, das den aktuellen Standards entspricht und einfacher zu bearbeiten ist. Schicke mir einfach den Text oder den HTML-Code, und ich werde ihn für dich umwandeln!
]]></description><link>https://www.c-plusplus.net/forum/topic/355067/welches-kostenlose-wysiwyg-tool-verwendet-ihr-für-html-websites</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/355067/welches-kostenlose-wysiwyg-tool-verwendet-ihr-für-html-websites</guid><dc:creator><![CDATA[Erhard Henkes]]></dc:creator><pubDate>Fri, 06 Sep 2024 14:46:26 GMT</pubDate></item><item><title><![CDATA[Einen RGB-Farbverlauf (Schwarz-Rot-Gold) in JS&#x2F;TS programmieren?]]></title><description><![CDATA[Ist leider weg. 
]]></description><link>https://www.c-plusplus.net/forum/topic/354674/einen-rgb-farbverlauf-schwarz-rot-gold-in-js-ts-programmieren</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/354674/einen-rgb-farbverlauf-schwarz-rot-gold-in-js-ts-programmieren</guid><dc:creator><![CDATA[noLust]]></dc:creator><pubDate>Tue, 25 Jun 2024 11:12:12 GMT</pubDate></item><item><title><![CDATA[Sichere API]]></title><description><![CDATA[JWT hat mit Authentication nichts zu tun.
Zum Thema selbst habe ich was geschrieben:
http://rolfrost.de/aubase.html
MFG
]]></description><link>https://www.c-plusplus.net/forum/topic/354669/sichere-api</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/354669/sichere-api</guid><dc:creator><![CDATA[_ro_ro]]></dc:creator><pubDate>Mon, 17 Jun 2024 06:54:09 GMT</pubDate></item><item><title><![CDATA[Kann eine Website versteckt werden (temporär)?]]></title><description><![CDATA[Schade, dass davon keiner Ahnung hat, aber alle erst mal auf negative Bewertung klicken.  Das spricht für eure Forenmitglieder.
]]></description><link>https://www.c-plusplus.net/forum/topic/354650/kann-eine-website-versteckt-werden-temporär</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/354650/kann-eine-website-versteckt-werden-temporär</guid><dc:creator><![CDATA[webbi]]></dc:creator><pubDate>Wed, 22 May 2024 16:46:40 GMT</pubDate></item><item><title><![CDATA[JavaScript: Wie baue ich einen sicheren GET-Req zusammen?]]></title><description><![CDATA[Ok, Zeile 27 könnte ich als URL codieren. Das ginge in JS mit:
var myOtherUrl = 
       &quot;http://example.com/index.html?url=&quot; + encodeURIComponent(myUrl);

Aber die Sache ist: Das Backend muss ohnehin mit ALLEN Get-Requests korrekt umgehen können + prüfen können, ob nur ein gültiger long-, ein gültiger char- (a oder b), ein gültiger double- und noch ein gültiger double-Wert ankommt. Wenn nicht, dann ist das einfach noise, und kann verworfen werden.
Das heißt, ich brauche mir den zusätzlichen Aufwand im Frontend gar nicht machen.
Das Thema ist schon gelöst.
]]></description><link>https://www.c-plusplus.net/forum/topic/354601/javascript-wie-baue-ich-einen-sicheren-get-req-zusammen</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/354601/javascript-wie-baue-ich-einen-sicheren-get-req-zusammen</guid><dc:creator><![CDATA[omggg]]></dc:creator><pubDate>Wed, 27 Mar 2024 16:53:02 GMT</pubDate></item><item><title><![CDATA[JS: Das Orakel befragen]]></title><description><![CDATA[Schon gelöst:
function getScores(words, removals) {
        let scores = [];
        for (let i = 0; i &lt; words.length; i++) {
          let w = words[i];
          let array1 = [...w];
          let set2 = new Set(array1.filter((x) =&gt; !removals.includes(x)));
          scores.push([w, array1, set2, 0, i + 1]);
        }
        for (let i = 0; i &lt; scores.length; i++) {
          for (let j = i + 1; j &lt; scores.length; j++) {
            for (let k = 0; k &lt; scores[i][1].length; k++) {
              let e = scores[i][1][k];
              if (scores[j][2].has(e)) {
                scores[i][3]++;
                scores[j][3]++;
                break;
              }
            }
          }
        }
        scores.sort((a, b) =&gt; {
          return b[3] - a[3];
        });
        return scores;
      }


Nur eine Set
Halbierung der Laufzeit
Verringerung der inneren Laufzeit
Geht jetzt unter 1 Sekunde

]]></description><link>https://www.c-plusplus.net/forum/topic/354550/js-das-orakel-befragen</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/354550/js-das-orakel-befragen</guid><dc:creator><![CDATA[omggg]]></dc:creator><pubDate>Thu, 22 Feb 2024 21:21:33 GMT</pubDate></item><item><title><![CDATA[Prozentrechnung vereinfachen (Genauigkeit)]]></title><description><![CDATA[@omggg
Du hast, wie immer, mein Post nicht gelesen oder nicht verstanden.
Ich habe nirgends geschrieben, dass man mehrere Accounts benutzen soll. Es soll nur ein Depot modelliert werden mit zwei verrechnungskonten.
Kann man auch ohne machen. Denke die grundsätzliche Aussage ist klar.
Wenn du das nicht schaffst ist ja auch nicht so schlimm. Du trollst erst seit 20 Jahren. Da hat man nicht so viel aufgeschnappt .
Tief durchatmen hilft da.
]]></description><link>https://www.c-plusplus.net/forum/topic/354481/prozentrechnung-vereinfachen-genauigkeit</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/354481/prozentrechnung-vereinfachen-genauigkeit</guid><dc:creator><![CDATA[oxide]]></dc:creator><pubDate>Sat, 27 Jan 2024 09:33:45 GMT</pubDate></item><item><title><![CDATA[ajax response]]></title><description><![CDATA[@firefly sagte in ajax response:

@_ro_ro sagte in ajax response:

@Achromat
na das ist doch mal ne gute Nachricht 
Falls Du öfter was mit Ajax machst, lohnt es sich evntl. über eine eigene Library nachzudenken. Die man in etwa so anwendet:

Wieso eine eigene library erstellen wenn es schon ein haufen gibt, welche das schon machen.

Wieso überhaupt selber programmieren!?
MFG
PS: jquery ja aber nicht für ajax. Viel zu umständlich.
]]></description><link>https://www.c-plusplus.net/forum/topic/354408/ajax-response</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/354408/ajax-response</guid><dc:creator><![CDATA[_ro_ro]]></dc:creator><pubDate>Tue, 23 Jan 2024 21:01:23 GMT</pubDate></item><item><title><![CDATA[CGI]]></title><description><![CDATA[Ich glaube nicht, dass die Enkelkinder der Fragestellenden daran noch interessiert sind.
]]></description><link>https://www.c-plusplus.net/forum/topic/91942/cgi</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/91942/cgi</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 08 Jan 2024 07:54:04 GMT</pubDate></item><item><title><![CDATA[Vereinfachtes GIF-Format, Decoder in JS]]></title><description><![CDATA[Ich hab wieder &quot;rein zufällig&quot; etwas im www gefunden. 
Ein vereinfachtes GIF-Format könnte so sein:

Byte: Breite in Pixeln
Byte: Höhe in Pxeln
Byte: Anzahl Bit für die Anzahl aufeinanderfolgender Pixel gleicher Farbe
Byte: Farbtiefe
Danach Farbindex: 3 Byte für jede Farbe (Farbangabe in RGB, je 1 Byte pro Farbkanal)
Danach immer: Pixelfarbe (laut Index) und Anzahl Pixel dieser Farbe; die Pixel werden v.l.n.r., Zeile für Zeile notiert

Und hier wäre ein Beispiel: https://postimg.cc/RqS0kyt5
Ich dachte, ich schreibe einen kleinen Decoder dafür JS (damit ist das, glaube ich, am einfachsten?). Könnt ihr bitte einmal schauen, ob man Zeile 18 bis 39 (die Decodierung im Innern der Schleife) vereinfachen könnte?
function getImage(binaryData) {
  const width = 150;
  const height = 150;
  const cellSize = 30;

  // create canvas
  let canvas = document.createElement(&quot;canvas&quot;),
    context = canvas.getContext(&quot;2d&quot;),
    imgData = context.createImageData(width, height);

  canvas.height = height;
  canvas.width = width;

  let width2, height2, blockSize, colorDepth;
  let colors = [];
  let pixels = [];
  for (let i = 0; i &lt; binaryData.length; ) {
    if (i == 0) {
      width2 = parseInt(binaryData.substring(i, i + 8), 2);
      height2 = parseInt(binaryData.substring(i + 8, i + 16), 2);
      blockSize = parseInt(binaryData.substring(i + 16, i + 24), 2);
      colorDepth = parseInt(binaryData.substring(i + 24, i + 32), 2);
      i += 32;
    }
    if (i &gt;= 32 &amp;&amp; i &lt; Math.pow(2, colorDepth) * 24 + 32) {
      let r = parseInt(binaryData.substring(i, i + 8), 2);
      let g = parseInt(binaryData.substring(i + 8, i + 16), 2);
      let b = parseInt(binaryData.substring(i + 16, i + 24), 2);
      colors.push([r, g, b]);
      i += 24;
    }
    if (i &gt;= Math.pow(2, colorDepth) * 24 + 32) {
      let color = colors[parseInt(binaryData.substring(i, i + colorDepth), 2)];
      let size = parseInt(binaryData.substring(i + colorDepth, i + colorDepth + blockSize), 2);
      for (let j = 0; j &lt; size; j++) {
        pixels.push(color);
      }
      i += colorDepth + blockSize;
    }
  }

  for (let i = 0; i &lt; width * height; i++) {
    let x = Math.floor((i % width) / cellSize);
    let y = Math.floor(i / height / cellSize);
    let i2 = y * width2 + x;
    let i3 = i * 4;
    if (x &lt; width2 &amp;&amp; y &lt; height2) {
      let color = pixels[i2];
      imgData.data[i3] = color[0];
      imgData.data[i3 + 1] = color[1];
      imgData.data[i3 + 2] = color[2];
      imgData.data[i3 + 3] = 255; // Alpha channel
    } else {
      imgData.data[i3] = 255;
      imgData.data[i3 + 1] = 255;
      imgData.data[i3 + 2] = 255;
      imgData.data[i3 + 3] = 255; // Alpha channel
    }
  }

  // put data to context at (0, 0)
  context.putImageData(imgData, 0, 0);

  // output image
  var img = new Image();
  img.src = canvas.toDataURL(&quot;image/png&quot;);

  return img;
}

document.body.appendChild(
  getImage(
    &quot;00000100 00000101 00000010 00000010 00000000 00000000 00000000 01010101 01010101 01010101 01010101 01010101 01010101 11111111 11111111 11111111 01110001 01011110 10010110 11010001 01011110 00010111 0001&quot;
      .split(&quot; &quot;)
      .join(&quot;&quot;)
  )
);


Run: https://jsfiddle.net/z6c1nw7j/
]]></description><link>https://www.c-plusplus.net/forum/topic/354374/vereinfachtes-gif-format-decoder-in-js</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/354374/vereinfachtes-gif-format-decoder-in-js</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Wed, 01 Nov 2023 23:12:28 GMT</pubDate></item><item><title><![CDATA[Latex springt]]></title><description><![CDATA[MathML ist die Lösung !
]]></description><link>https://www.c-plusplus.net/forum/topic/354370/latex-springt</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/354370/latex-springt</guid><dc:creator><![CDATA[biter]]></dc:creator><pubDate>Mon, 30 Oct 2023 14:52:37 GMT</pubDate></item><item><title><![CDATA[Alternative zu Discourse mit geringerem Footprint]]></title><description><![CDATA[Hab's hinbekommen. 
Siehe Scan-Summary: https://i.postimg.cc/zXcwMdHb/grafik.png
Ich habe für MariaDB jetzt das offizielle Docker-Image und einen eigenen Container verwendet. (So, wie man das ja auch eigentlich tun sollte ...)
Hier kann dann zu, nach meiner Meinung
]]></description><link>https://www.c-plusplus.net/forum/topic/354023/alternative-zu-discourse-mit-geringerem-footprint</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/354023/alternative-zu-discourse-mit-geringerem-footprint</guid><dc:creator><![CDATA[CyborgBeta]]></dc:creator><pubDate>Tue, 05 Sep 2023 16:17:35 GMT</pubDate></item><item><title><![CDATA[Umrechnungstabelle in JavaScript!]]></title><description><![CDATA[Ja, habe es inzwischen selber hinbekommen. Es ist jetzt kürzer, besser und &quot;schöner&quot;:
&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;de&quot;&gt;
  &lt;head&gt;
    &lt;meta charset=&quot;utf-8&quot; /&gt;
    &lt;title&gt;Umrechnungstabelle&lt;/title&gt;
    &lt;style&gt;
      table,
      th,
      td {
        border: solid black 1px;
      }
      td {
        width: 125px;
      }
      main {
        font-family: &quot;Segoe UI&quot;, Tahoma, Geneva, Verdana, sans-serif;
      }
    &lt;/style&gt;
  &lt;/head&gt;

  &lt;body&gt;
    &lt;header&gt;&lt;/header&gt;
    &lt;main&gt;
      &lt;div id=&quot;div-1&quot;&gt;&lt;/div&gt;
      &lt;br /&gt;
      &lt;div&gt;
        &lt;button
          id=&quot;button-1&quot;
          onclick=&quot;(function (btn) {
            btn.disabled = true;
            let t = new Date();
            t.setSeconds(t.getSeconds() + 30);
            let inter = setInterval(function() {
              let t2 = new Date();
              if (t2 &lt; t) {
                btn.textContent = 'Kurse aktualisieren! (' + Number((t - t2) / 1000.0).toFixed(1) + ')'; 
              } else {
                clearInterval(inter);
                btn.textContent = 'Kurse aktualisieren!';
                btn.disabled = false;
              }
            }, 100);
        initTable();
      })(this);
      return false;&quot;
        &gt;
          Kurse aktualisieren!
        &lt;/button&gt;
      &lt;/div&gt;
      &lt;br /&gt;
      &lt;table id=&quot;table-1&quot;&gt;
        &lt;tr&gt;
          &lt;th&gt;Coin&lt;/th&gt;
          &lt;th&gt;Betrag&lt;/th&gt;
          &lt;th&gt;Betrag $&lt;/th&gt;
          &lt;th&gt;Kurs&lt;/th&gt;
          &lt;th&gt;Betrag Neu&lt;/th&gt;
        &lt;/tr&gt;
      &lt;/table&gt;
    &lt;/main&gt;
    &lt;footer&gt;&lt;/footer&gt;
    &lt;script&gt;
      let prices;

      async function getPrices() {
        const response1 = await fetch(&quot;https://api.livecoinwatch.com/coins/list&quot;, {
          method: &quot;POST&quot;,
          headers: {
            &quot;content-type&quot;: &quot;application/json&quot;,
            &quot;x-api-key&quot;: &quot;&quot;,
          },
          body: JSON.stringify({
            currency: &quot;USD&quot;,
            sort: &quot;rank&quot;,
            order: &quot;ascending&quot;,
            offset: 0,
            limit: 100,
            meta: false,
          }),
        });
        const jsonData1 = await response1.json();
        console.log(jsonData1);
        return jsonData1;
      }

      function insertRow(table, name, rate) {
        let row = table.insertRow();
        {
          let c = row.insertCell(0);
          c.textContent = name;
        }
        {
          let c = row.insertCell(1);
          c.textContent = round10(rate);
        }
        {
          let c = row.insertCell(2);
          c.textContent = round10(1.0);
        }
        {
          let c = row.insertCell(3);
          c.textContent = round10(rate);
        }
        {
          let c = row.insertCell(4);
          let inp = document.createElement(&quot;input&quot;);
          inp.addEventListener(&quot;input&quot;, function (evt) {
            if (this.value.length &gt; 0 &amp;&amp; Number(this.value) === parseFloat(this.value)) {
              let amount = parseFloat(this.value);
              let usdAmount = amount * rate;
              table.rows[1].cells[1].textContent = round10(usdAmount);
              table.rows[1].cells[2].textContent = round10(usdAmount);
              for (let i = 2; i &lt; table.rows.length; i++) {
                let row2 = table.rows[i];
                let rate2 = parseFloat(prices[i - 2].rate);
                row2.cells[1].textContent = round10(usdAmount / rate2);
                row2.cells[2].textContent = round10(usdAmount);
              }
            }
          });
          c.appendChild(inp);
        }
      }

      async function initTable() {
        prices = await getPrices();
        let table = document.getElementById(&quot;table-1&quot;);
        for (let i = table.rows.length - 1; i &gt; 0; i--) {
          table.deleteRow(i);
        }
        insertRow(table, &quot;$&quot;, 1.0);
        prices.forEach((p) =&gt; {
          insertRow(table, p.code.replaceAll(&quot;_&quot;, &quot;&quot;), parseFloat(p.rate));
        });
        document.getElementById(&quot;div-1&quot;).textContent = &quot;Stand: &quot; + new Date();
      }

      initTable();

      function round10(value) {
        return Number(value).toFixed(10);
      }
    &lt;/script&gt;
  &lt;/body&gt;
&lt;/html&gt;

Die inline-Funktion konnte ich mit this aufrufen, und der float-Wert wird mit Number(this.value) === parseFloat(this.value) auf Validität überprüft, und die letzten Preise werden jetzt zwischengespeichert und nicht mehr (umständlich) aus der Tabelle gezogen und geparst.
Falls dennoch irgendetwas Komisches auffällt, bin ich für Ratschläge offen.
]]></description><link>https://www.c-plusplus.net/forum/topic/354272/umrechnungstabelle-in-javascript</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/354272/umrechnungstabelle-in-javascript</guid><dc:creator><![CDATA[CyborgBeta]]></dc:creator><pubDate>Fri, 01 Sep 2023 12:29:18 GMT</pubDate></item><item><title><![CDATA[Videos im Browser abspielen (mit Ton!)]]></title><description><![CDATA[Hm, hab etwas herausgefunden. Wenn ich die Intervall-Zeit in Zeile 93 von 500ms auf 1500ms erhöhe, dann kann ich anstatt ca. 5 Minuten, ca. 7 Minuten Video schauen - als würde der Browser irgendwann sagen, so, nun sind insgesamt zu viele Anfragen &quot;unbeantwortet geblieben/ins Leere gelaufen&quot;, jetzt breche ich die Verarbeitung ab. Aber erklären kann ich mir das nicht.
JavaScript verhält sich manchmal merkwürdig ...
]]></description><link>https://www.c-plusplus.net/forum/topic/354211/videos-im-browser-abspielen-mit-ton</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/354211/videos-im-browser-abspielen-mit-ton</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Sun, 23 Jul 2023 13:28:28 GMT</pubDate></item><item><title><![CDATA[js, Reihenfolge der Ausgaben erzwingen]]></title><description><![CDATA[Ist doch gut jetzt. Man kann auch von etwas Ahnung haben, ohne es zu gelesen haben müssen.
]]></description><link>https://www.c-plusplus.net/forum/topic/354196/js-reihenfolge-der-ausgaben-erzwingen</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/354196/js-reihenfolge-der-ausgaben-erzwingen</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Sun, 16 Jul 2023 19:06:47 GMT</pubDate></item><item><title><![CDATA[Focalboard mit docker compose und sqlite3 db starten]]></title><description><![CDATA[Hm, mit
&quot;dbconfig&quot;: &quot;./focalboard.db?_busy_timeout=5000&quot;,
scheint es zu funktionieren. Hier gefunden: https://github.com/mattermost/focalboard/blob/main/config.json . Weiß nur noch nicht, ob die Daten jetzt auch persistiert werden.
]]></description><link>https://www.c-plusplus.net/forum/topic/354175/focalboard-mit-docker-compose-und-sqlite3-db-starten</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/354175/focalboard-mit-docker-compose-und-sqlite3-db-starten</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Tue, 04 Jul 2023 19:15:35 GMT</pubDate></item><item><title><![CDATA[JS: Bitcoin-Umrechnungsmatrix selber schreiben]]></title><description><![CDATA[Keiner?  So schlimm ist JavaScript ( ES) doch auch wieder nicht... *duck*
E: Laut W3C Markup Validation Service auch keine Fehler...
E2: Ihr könnt euch mit wenigen Klicks auch selber einen API-Key generieren lassen und es ausprobieren.
]]></description><link>https://www.c-plusplus.net/forum/topic/354143/js-bitcoin-umrechnungsmatrix-selber-schreiben</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/354143/js-bitcoin-umrechnungsmatrix-selber-schreiben</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Tue, 13 Jun 2023 16:17:54 GMT</pubDate></item><item><title><![CDATA[Google Home Web... wieso geht das nicht?]]></title><description><![CDATA[https://i.postimg.cc/KvX1Jy0V/grafik.png

Auf home.google.com werden nur Kameras unterstützt

Ich möchte Licht(er) via Website steuern. Wieso darf ich das nicht? Gibt es eine andere Schnittstelle?
]]></description><link>https://www.c-plusplus.net/forum/topic/354087/google-home-web-wieso-geht-das-nicht</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/354087/google-home-web-wieso-geht-das-nicht</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Tue, 09 May 2023 18:06:57 GMT</pubDate></item><item><title><![CDATA[(Einfache) JavaScript Library (pure), um Line Chart mit Dates zu zeichnen]]></title><description><![CDATA[Hat schon geklappt  https://i.postimg.cc/xdDLyYBR/grafik.png
&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;de&quot;&gt;

&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;title&gt;Chart(s)&lt;/title&gt;
  &lt;script type=&quot;text/javascript&quot; src=&quot;https://unpkg.com/dygraphs@2.2.1/dist/dygraph.min.js&quot;&gt;&lt;/script&gt;
  &lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;https://unpkg.com/dygraphs@2.2.1/dist/dygraph.min.css&quot; /&gt;
&lt;/head&gt;

&lt;body&gt;
  &lt;header&gt;&lt;/header&gt;
  &lt;main&gt;
    &lt;div id=&quot;chart1&quot; width=&quot;600&quot; height=&quot;600&quot;&gt;&lt;/div&gt;
  &lt;/main&gt;
  &lt;footer&gt;&lt;/footer&gt;
  &lt;script&gt;
    function loadChart(id, fn) {
      fetch(fn)
        .then(res =&gt; res.json())
        .then(data =&gt; {
          let data2 = [];
          for (let i = 0; i &lt; data.length; i++) {
            let e = data[i];
            data2.push([new Date(e.x), e.y]);
          }
          console.log(data);
          console.log(data2);

          let g = new Dygraph(document.getElementById(id), data2, {
            legend: &quot;always&quot;,
            title: fn,
            labels: [&quot;x&quot;, &quot;A&quot;],
          });
        });
    }
    loadChart(&quot;chart1&quot;, &quot;./sums.json&quot;);
  &lt;/script&gt;
&lt;/body&gt;

&lt;/html&gt;

Merke: Verwende am besten niemals eine Library, die nicht open source ist...
]]></description><link>https://www.c-plusplus.net/forum/topic/354074/einfache-javascript-library-pure-um-line-chart-mit-dates-zu-zeichnen</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/354074/einfache-javascript-library-pure-um-line-chart-mit-dates-zu-zeichnen</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Tue, 02 May 2023 08:03:14 GMT</pubDate></item><item><title><![CDATA[SSH port forwarding nicht an localhost]]></title><description><![CDATA[@Fragender sagte in SSH port forwarding nicht an localhost:

dann stimmt was mit meiner FW net

lag an der FW (diese hatte noch zu viele Ausnahmen).
Das, was ich möchte, kann logisch gesehen nicht funktionieren. Win kann nicht wissen, ob ich mit dem Domainnamen nun ssh oder den Dienst ansteuern möchte. Oder ich hab was übersehen.
Durchgelesen hab ich mir das:
https://superuser.com/questions/1345341/ssh-local-port-forwarding-to-a-website
https://superuser.com/questions/1361611/ssh-tunnel-bind-to-domain
https://serverfault.com/questions/347499/how-to-assign-a-hostname-to-ssh-tunnel
Falls jemand noch eine Idee hat, gerne sagen.
]]></description><link>https://www.c-plusplus.net/forum/topic/353987/ssh-port-forwarding-nicht-an-localhost</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/353987/ssh-port-forwarding-nicht-an-localhost</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Fri, 24 Mar 2023 14:26:50 GMT</pubDate></item><item><title><![CDATA[Wie python-binance API (richtig) verwenden?]]></title><description><![CDATA[@Leon0402 sagte in Wie python-binance API (richtig) verwenden?:

Geht halt nicht genau auf,

Das ist nicht schlimm. Ich hab es jetzt hinbekommen:
from binance.helpers import round_step_size
from binance.enums import *
from binance import Client


def getStepSize(einfo, symbol):
    for s in einfo[&quot;symbols&quot;]:
        if s[&quot;symbol&quot;] == symbol:
            for f in s[&quot;filters&quot;]:
                if f[&quot;filterType&quot;] == &quot;LOT_SIZE&quot;:
                    return float(f[&quot;stepSize&quot;])
    raise Exception(&quot;Symbol on einfo not found.&quot;)


client = Client(
    &quot;&quot;,
    &quot;&quot;)
info = client.get_account()
einfo = client.get_exchange_info()
balances = info[&quot;balances&quot;]
prices = client.get_all_tickers()
assets = []
for b in balances:
    f = float(b[&quot;free&quot;])
    if f != 0:
        n = b[&quot;asset&quot;]
        if n == &quot;NFT&quot; or n == &quot;ETHW&quot;:
            continue
        busd = 1.0 if n == &quot;USDT&quot; else float(
            next(p for p in prices if p[&quot;symbol&quot;] == n+&quot;BUSD&quot;)[&quot;price&quot;])
        sum1 = f + float(b[&quot;locked&quot;])
        sum2 = round(busd * sum1, 2)
        assets.append({
            &quot;name&quot;: n,
            &quot;busd&quot;: busd,
            &quot;sum1&quot;: sum1,
            &quot;sum2&quot;: sum2
        })
assets = sorted(assets, key=lambda d: d[&quot;sum2&quot;], reverse=True)
sum3 = sum(d[&quot;sum2&quot;] for d in assets)
sum4 = round(sum3 / 6, 2)
print(sum3, sum4)
print(*assets, sep=&quot;\n&quot;)

assets = list(filter(lambda d: d[&quot;name&quot;] != &quot;USDT&quot; and d[&quot;sum2&quot;] &gt; 10 and abs(sum4 - d[&quot;sum2&quot;]) &gt; 10, assets))
for d in assets:
    symbol = d[&quot;name&quot;]+&quot;USDT&quot;
    if d[&quot;sum2&quot;] &gt;= sum4:
        print(d)
        print(d[&quot;name&quot;]+&quot; -&gt; USDT (Sell): &quot; + str(d[&quot;sum2&quot;] - sum4) + &quot; $&quot;)
        amount = (d[&quot;sum2&quot;] - sum4) / d[&quot;busd&quot;]
        amount = round_step_size(amount, getStepSize(einfo, symbol))
        print(client.create_test_order(
            symbol=symbol,
            side=SIDE_SELL,
            type=ORDER_TYPE_MARKET,
            quantity=amount))

# to avoid negative balance:
sum3 -= 5
sum4 = round(sum3 / 6, 2)
print(sum3, sum4)
for d in assets:
    symbol = d[&quot;name&quot;]+&quot;USDT&quot;
    if d[&quot;sum2&quot;] &lt; sum4:
        print(d)
        print(&quot;USDT -&gt; &quot;+d[&quot;name&quot;]+&quot; (Buy): &quot; + str(sum4 - d[&quot;sum2&quot;]) + &quot; $&quot;)
        amount = (sum4 - d[&quot;sum2&quot;]) / d[&quot;busd&quot;]
        amount = round_step_size(amount, getStepSize(einfo, symbol))
        print(client.create_test_order(
            symbol=symbol,
            side=SIDE_BUY,
            type=ORDER_TYPE_MARKET,
            quantity=amount))


Bei create_test_order kann man _test weglassen, dann ist das Ganze scharfgestellt...
War halt &quot;blödes&quot; rechnen mit der step_size...
Danke nochmals
]]></description><link>https://www.c-plusplus.net/forum/topic/353965/wie-python-binance-api-richtig-verwenden</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/353965/wie-python-binance-api-richtig-verwenden</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Sat, 18 Mar 2023 11:30:50 GMT</pubDate></item></channel></rss>