Knoten-Kalkulator

Veröffentlicht: 21.04.2019 Aktualisiert: 23.04.2019

Unser Hund erfreut sich an einer umfangreichen Kollektion diverser Halsbänder und Hundeleinen in verschiedenen Farben und Formen. Diese wurden mit Paracord (Fallschirm-Seile) geknüpft. Man muss hierzu das Knüpfmuster kennen und vorab berechnen, wie viele Paracord benötigt wird. Eine Webanwendung zur Berechnung der benötigten Länge vereinfacht dies. Zum Einsatz kamen EmberJS / JavaScript und Flask / Python.

Steckbrief

Nutzen
Berechnung der benötigten Längen von Paracord-Schnüren zum Knüpfen eines Halsbandes für Hunde
Beginn
05.11.2017
Server
Debian 9, Apache Webserver
Webseite
https://kk.pimux.de
Repository
https://github.com/Finn10111/knoten-kalkulator/
Framework(s)
Flask - Ember.js

Das Projekt

Für das Knüpfen von Paracord muss man vorab die gewünschte Länge des Hals- oder Armbandes kennen. Je nach Knüpfart braucht man von jedem Strang dann eine vielfache Länge der gewünschten Endlänge. Bei einem 45 cm Halsband benötigt man also z.B. 2 Stränge mit je der 7,5-fachen Länge, also 2 Stränge zu je 45 cm x 7,5 = 337,5 cm. Biegt man ein etwa 1 cm dickes Band zu einem Ring, reduziert sich der Innendurchmesser, so dass ein Halsband also zu eng wird. Daher muss man noch das Pi-fache der Dicke zur Länge addieren. Für ein 1 cm dickes Halsband mit 45 cm Innendurchmesser benötigt man also der Länge nach gemessen ein ca. 48 cm Langes Ergebnis. Für Interessierte: Stichwort neutrale Faser oder Biegeverkürzung.

Der Knoten-Kalkulator kennt also die Faktoren, mit denen man die Halsbandlänge multiplizieren muss. Die Biegeverkürzung kann ebenfalls berücksichtigt werden, bei einer Leine wird sie aber nicht benötigt. Man sucht sich also das gewünschte Halsbandmuster aus, gibt die gewünschte Länge ein und erhält als Ergebnis die benötigten Paracord-Längen.

Die Anwendung selbst habe ich mit 2 Frameworks erstellt. Im Backend arbeiten Flask (Python Framework) mit unter anderem SQLAlchemy und Marshmallow. Das Ergebnis ist eine schöne REST API, die dann im Frontend von der EmberJS (JavaScript Framework) genutzt wird. Zum Pflegen der Daten habe ich eine Authentifizierung mit Hilfe von JSON Web Tokens implementiert.

Der Abruf aller Knoten per API lässt sich mit Flask sehr übersichtlich implementieren:

@api.route('/knots', methods=['GET'])
@io.from_query('order_by', fields.String(missing='name'))
@io.marshal_with(knots_schema)
def get_knots(order_by):
    query = Knot.query

    if order_by:
        query = sort_query(query, order_by)

    knots = query.all()
    return knots

Im Frontend in EmberJS sieht der Controller zum Anzeigen eines Knotes und Berechnen der Länge so aus:

import Ember from 'ember';

export default Ember.Controller.extend({
  actions: {
    calcLength() {
      var model = this.get('model');
      var cords = model.get('cords');
      cords.forEach(function(cord) {
        var factor = cord.get('factor');
        var neededLength = factor * model.get('realNeededLength');
        cord.set('result', neededLength);
      });
    },
    toggleIsRound(value) {
      this.set('model.isRound', value);
      this.send('calcLength');
    }
  }
});

Der Knoten-Kalkulator ist unter kk.pimux.de erreichbar und der Quellcode steht auf GitHub zur Verfügung.

Bilder