Cover Image

Ha-GUID! Gesundheit!

GUIDs für Jedermann

Juni 30, 2021 - Lesezeit: ~1 Minute

GUIDs sind eine tolle Möglichkeit eine Eindeutigkeit z. B. an einem Datensatz zu erzeugen. Im Gegensatz zu Zahlenindetifiaktionen sind GUIDs absolut eindeutig und übergreifend. Als Entwickler braucht man immer mal wieder eine GUID für alle möglichen Zwecke. Deshalb haben wir ein kleines Programm entwickelt, dass einfach eine GUID erzeugt und in die Zwischenablage schiebt.

GUID Generator

Kann man auch als App verknüpfen.


Cover Image

Bruchailromantik

Bruchrechnen in JavaScript

Mai 3, 2021 - Lesezeit: 41 Minuten

So, hier jetzt also ein JavaScript für Bruchrechenaufgaben. Das ist diesmal etwas größer, um der Anzeige von Bruchzahlen auch gerecht zu werden und nicht irgendeine komische Schreibweise verwenden zu müssen.

//(
var myCalcer = (NumberToUsetargetElement=> {
  // the brain -> calcing stuff
  function Fraction(zahl) {
    let numerator = 0;
    let denominator = 0;
    for (i = 1truei *= 10) {
      if ((zahl * i) == Math.floor(zahl * i)) {
        numerator = (zahl * i);
        denominator = i;
        break;
      }
    }
    return ([numeratordenominator]);
  }

  function calc_ggt(ab) {
    let h = (a > b) ? b : a;
    for (i = hi > 1i--) {
      if ((a % i) == 0 && (b % i) == 0) {
        return i;
      }
    }
    return 1;
  }
  // the eye -> formatting output
  function writeFraction(zaehlernenner) {
    let outSpan = document.createElement("SPAN");
    outSpan.setAttribute('class''frac');
    outSpan.setAttribute('style''padding-right:5px;');
    outSpan.innerHTML = `<sup>${zaehler}</sup><span>/</span><sub>${nenner}</sub>`;
    targetElement.appendChild(outSpan);
  }

  function writeOperatorOrLine(opToWrite) {
    let outSpan = document.createElement("SPAN");
    outSpan.setAttribute('style''vertical-align:14px;padding-right:5px;');
    outSpan.innerText = opToWrite;
    targetElement.appendChild(outSpan);
  }

  function addcss() {
    let styleHelper = document.createElement("style");
    styleHelper.id = 'styleHelper';
    styleHelper.innerHTML = `span.frac {
          display: inline-block;
          text-align: center;
        }

        span.frac>sup {
          display: block;
          border-bottom: 1px solid;
          font: inherit;
        }

        span.frac>span {
          display: none;
        }

        span.frac>sub {
          display: block;
          font: inherit;
        }`;
    targetElement.appendChild(styleHelper);
  }
  // the hand -> doing things
  let bruch = Fraction(NumberToUse);
  let ggt = calc_ggt(bruch[0], bruch[1]);
  addcss();
  writeOperatorOrLine(NumberToUse);
  writeOperatorOrLine("=");
  writeFraction(bruch[0], bruch[1]);
  writeOperatorOrLine(":");
  writeOperatorOrLine(ggt);
  writeOperatorOrLine("=");
  writeFraction(bruch[0] / ggtbruch[1] / ggt);
};
//)(0.45);
var inputElement = document.createElement("INPUT");
var buttonElement = document.createElement("BUTTON");
var targetOutElement = document.createElement("DIV");
buttonElement.innerHTML = "Calc";
buttonElement.onclick = () => {
  /*
  for(var mainCounter = 1; mainCounter < 100; mainCounter++ ) {
    myCalcer(
      mainCounter /
      Math.pow(10, ("" + mainCounter).length),
      targetElement
    );
    targetElement.appendChild(document.createElement("BR"));
    targetElement.appendChild(document.createElement("BR"));
  }
  */
  targetOutElement.innerHTML = "";
  let numberToUse = parseFloat(inputElement.value.replace(',''.'));
  myCalcer(numberToUsetargetOutElement);
};
targetOutElement.style.backgroundColor = "white";
targetOutElement.style.border = '1px solid black';
targetOutElement.style.borderRadius = '4px';
targetOutElement.style.padding = '10px';
targetOutElement.style.margin = 'auto';
targetOutElement.style.width = '200px';
targetOutElement.style.textAlign = 'center';
document.body.appendChild(inputElement);
document.body.appendChild(buttonElement);
document.body.appendChild(targetOutElement);

Hierbei teilt sich die Funktion myCalcer in 3 Teile. Der erste Teil sind die Berechnungsfunktionen. Der zweite Teil regelt die Ausgabe und der dritte Teil macht die Rechnung. Am Ende kommt noch ein bisschen Styling dazu, damit das auch was hermacht. Kann man direkt in der Konsole benutzen oder hier:

EOF


Cover Image

Alle Teiler einer Zahl

Mathe in JavaScript

März 12, 2021 - Lesezeit: ~1 Minute

Mal schnell alle Teiler einer Zahl zu finden erfordert nicht unbedingt ein großes Programm. Statt dessen kann man das schnell in der Konsole erledigen.

The Power of JavaScript unleashed.

Hier eine einfache schnelle Lösung, CopyUndPaste fertig:


var totest = 120; // hier einfach die Zahl einsetzen.
// ermittelt alle Teiler und gibt sie auf der Konsole aus.
for(let i = 0;i < (totest+1); i++) {
  if(totest % i === 0) {
    console.log(i);
  }
}


Hier noch ein passender Generator für irgendwelche Zahlen.


for(let j = 0;j < 100; j++) {
let teilerCount=0;
for(let i = 0;i < (j+1); i++) {
if(j % i === 0) {
teilerCount++;
}
}
if(teilerCount === 6){
console.log(j); //,teilerCount);
}

}

Cover Image

"Man sieht ihnen ihren Zeilenumbruch gar nicht an."

Textdateien, Zeilenumbrüche und Betriebssysteme

Februar 10, 2021 - Lesezeit: 5 Minuten

Eine Textdatei ist nicht nur eine der ältesten Möglichkeiten Informationen auf einem PC abzulegen, sondern auch Dateien in einem Format zu speichern, dass sich gut zwischen verschiedenen Betriebssystemen übertragen lässt. Die Buchstaben werden mit Hilfe einer Tabelle (z.B. ASCII-Tabelle) in einen Binärcode übersetzt und solange die Gegenseite die Tabelle auch kennt, kann das Ganze wieder zurück übersetzt werden.

Nun ist eine Standard ASCII-Tabelle nicht ausreichend, um die ganzen möglichen Schriftzeichen der Welt aufzunehmen. Ist einfach nicht genug Platz. Also gibt es mehrere Tabellen, für jedes Land quasi eine. Da diese Listen irgendwann nicht mehr ausgereicht haben, beziehungsweise man immer wissen musste, mit welcher Tabelle man die Datei lesen musste und die PCs in immer mehr Bereichen zu Einsatz kommen, gib es auch neue Tabellen, die mehr Zeichen fassen können. Die Textdatei wird dann auch größer, doppelt so groß um genau zu sein. Aber Speicher ist ja heute kein so großes Thema mehr. Zudem hat man sich dazu durchringen können, in bestimmten Fällen in der Datei ein Startzeichen zu hinterlegen, mit dem die Kodierung (Welche Tabelle muss benutzt werden?) durch Auslesen ermitteln kann. Stichwort: Byte Order Mark

Dadurch, dass das Interpretieren der Datei jeweils dem Betriebssystem überlassen wird, kann eine Datei normalerweise unkompliziert zwischen Betriebssystemen hin und hergeschoben und auch bearbeitet werden. Zudem ist für das Bearbeiten solcher Dateien eigentlich immer ein Editor mit an Bord. 

Aber ein kleiner Unterschied kann einen immer mal wieder großen und aufwendigen Suchaufwand verursachen.

Der Zeilenumbruch

Also Cursor nach unten und zurück zum Anfang. Dieses Zeilenende wird in verschiedenen Betriebssystemen auch nicht immer gleich gehandhabt. Während Windows hier die nicht druckbaren Zeichen CR (Carriage return - Wagenrücklauf) und LF (Line feed - Zeilenvorschub) verwendet, wollen UNIX- Derivate (Linux, macOS und so weiter) nur ein LF. Das ist im Normalfall gar nicht so schlimm. Die meisten Texteditoren erkennen einfach den benutzten Zeilenumbruch und nutzen ihn einfach weiter. Problematisch kann die Sache werden, wenn man diese Datei irgendwo im Betriebssystem nutzen möchte und das Programm davon ausgeht, dass der richtige Zeilenumbruch verwendet wurde. Bei Unixdateien muss nur ein Zeichen zum Trennen benutzt werden. Benutzt man eine Windowsdatei bleibt ein nicht druckbares Zeichen übrig: CR.

Programme, die dies nicht berücksichtigen, haben dann ein Zeichen in den Skripten oder Einstellungen, welches Probleme verursachen kann. Wenn man die Datei in Windows erstellt und dazu noch einen Texteditor benutzt, der versucht einem die Arbeit des Zeilenumbruchs abzunehmen und automatisch die Betriebssystemwahl trifft, kann es unter Umständen sein, dass man seinen Fehler beim Übertragen der Datei auf Linux gar nicht bemerkt. Unter Linux könnte es dann komische Fehlermeldungen geben, die beim Betrachten der Datei gar nicht auffallen, weil es ja nicht druckbare Zeichen sind.

Nur LF ohne CR funktioniert auch unter Windows gut, weshalb alle neuen Dateien in meinen Texteditoren immer nur noch direkt mit LF als Zeilenumbruch gespeichert werden. Einmal einstellen und fertig. Das kann eigentlich jeder gute Texteditor. Ansonsten sollte man über ein Alternative nachdenken. Was machen wir aber mit Dateien, die schon irgendwo abgelegt sind und über eine falsche Kodierung verfügen? Klar, man kann die Datei jetzt umständlich in einem Editor der Wahl öffnen, ändern und neu speichern. Das ist aber unter Unix-Systemen ohne grafische Oberfläche unter Umständen ein bisschen aufwändig. Unter Unix gibt es ein tolles Tool für die Kommandozeile, mit dem man (unter anderem) den Zeilenumbruch in einer Zeile für x-beliebig große Dateien ändern kann. Der sed - stream editor. Dieses Tool ist eine Standardausstattung und dürfte in jeder Linuxdistribution immer mit an Bord sein. 

Mit folgender Zeile lässt sich das Zeilenende anpassen:

[sudo] sed -i.bak 's/\r$//' <Dateiname hier>

Kurze Erklärung:
  • sudo : wenn man mal wieder mehr Rechte braucht
  • -i.bak : mach eine Sicherheitskopie mit Dateiende .bak
  • 's/\r$//' : hier passiert die Magie, das s/ für Suche, CR Zeichen zum finden und kein neues Zeichen (//) einfügen
  • dann noch der Dateiname und fertig

Es gibt noch mehr solche tollen Einzeiler für jede Menge Anwendungsfälle.