!bckdVuIloZOXRjKIXO:matrix.org

JavaScript in Jena

36 Members
MeatSpace treffen mit Leuten die gerne JavaScript programmieren | https://jena.js.org8 Servers

Load older messages


SenderMessageTime
4 Dec 2019
@gelight:matrix.orggelightFakt ist bei uns auch, dass praktisch jedes Team solche Web-Components schreiben darf. Nun kommen natürlich immer wieder Fragen von anderen Teams wie: "Welche UI Komponenten gibt es, wo finden wir die, wie benutzen wir die, was können die alles und wie sehen sie aus?"13:48:09
@gelight:matrix.orggelight

Dazu hatte ich nun die grundlegende Idee, ein Package einer WC einfach so aufzubauen, dass man förmlich einen Ordner hat, worin man die reine Component entwickelt und einen weiteren, wo man Docu-Snippets und auch Live-Demos oder sowas drin ablegen kann. Allgemein war meine Idee zu den Doku's so, dass man , um einen visuellen einheitlichen Stil zu gewährleisten, alle Informationen als *.md ( MarkDown ) Files schreibt.

Frage 1 wäre nun:
Wie würdet ihr die "einzelnen" Live-Demo-Beispiele bauen und zur Verfügung stellen?

Frage 1 wäre nun:

13:52:44
@gelight:matrix.orggelight *

Dazu hatte ich nun die grundlegende Idee, ein Package einer WC einfach so aufzubauen, dass man förmlich einen Ordner hat, worin man die reine Component entwickelt und einen weiteren, wo man Docu-Snippets und auch Live-Demos oder sowas drin ablegen kann. Allgemein war meine Idee zu den Doku's so, dass man , um einen visuellen einheitlichen Stil zu gewährleisten, alle Informationen als *.md ( MarkDown ) Files schreibt.

Frage 1 wäre nun:
Wie würdet ihr die "einzelnen" Live-Demo-Beispiele bauen und zur Verfügung stellen?

Frage 2:
Wie könnte das Package des Living-Style-Guide aussehen bzw. wie könnte man die ganzen Informationen "möglichst" automatisiert so zusammen mergen, dass am Ende eine HTML bei raus kommt, die halt Infos zur Komponente gibt, wie auch Live-Demos zeigt etc......

13:54:09
@gelight:matrix.orggelightBeispiel: https://material.io/components/buttons/13:54:40
@gelight:matrix.orggelightWie gesagt... andere Teams sollen auf basis eigener Techniken ihre Komponenten bauen können. Das Einzige, was man vorgeben könnte, wäre eine Struktur, die für eine automatische Anzeige der Informationen im Styleguide, denke ich ....13:56:27
6 Dec 2019
@tobi:im.kabi.tkTobikann jemand von starmaker.com downloaden? Ist JS, aber die haben die files so versteckt das youtube-dl nicht mehr geht21:06:59
@tobi:im.kabi.tkTobi * kann jemand von starmakerstudios.com downloaden? Ist JS, aber die haben die files so versteckt das youtube-dl nicht mehr geht21:07:29
7 Jan 2020
@tobi:im.kabi.tkTobi kein Java aber vielleicht kann jemand schnell helfen: Excel-VBA. Ich wähle einige Spalten mit
Range("a1,b1,e1").Entire.Column.ExportAsFixedFormat _
um sie als PDF zu exportieren. Natürlich sind die jetzt jeweils auf einer Seite und nicht nebeneinander. Muss ich die vorher erst selektieren mit .select und dann wie weiter... ?
12:56:28
@tobi:im.kabi.tkTobi

hmm mit select ist es das gleich, eigentlich klar

wsA.Range("a1,b1").EntireColumn.Select

        Selection.ExportAsFixedFormat _

        Type:=xlTypePDF, _

        Filename:=myFile, _

Auch so wird jede Spalte auf einem extra Blatt ausgegeben

13:04:28
@tobi:im.kabi.tkTobiwsA ist eine variable13:04:35
20 Jan 2020
@tarvos90:matrix.orgtarvos90uh VBA ist leider zu lange her, aber konntest du es lösen?11:46:58
@tarvos90:matrix.orgtarvos90

Ich hab auch eine Frage, vielleicht weiß ja jemand wie man das bequem löst.
Ich muss Elemente miteinander vergleichen und wenn ein Element mit allen bisherigen Elementen
der Liste mir ein 'unknown' liefert, dann ist das ein neues Element.
Wenn das NICHT so ist, hätte ich gern das label des bereits bekannten Elements.

Mir wurde geraten dafür ein Maybe Pattern (in TypeScript) zu verwenden aber so richtig werde ich daraus nicht schlau.
Naja hier erst mal mein Code:

function knownState(
  referenceList: UpgradedDecetionInterface[],
  currentElement: UpgradedDecetionInterface
): boolean {
  const newPerson = referenceList.every(referenceFace => {
    const bestMatch = referenceFace.faceMatcher.findBestMatch(
      currentElement.descriptor[0]
    );

    return bestMatch.label === 'unknown';
  });

  return newPerson;
}```
`newPerson` ist nur dann true, wenn das `every` bei jedem bisherigen Element 'unknown' ist, wie schon erwähnt.
Das Ding ist, wie komm ich jetzt am besten an das Label rann, ohne noch mal `findBestMatch` auszuführen?

Benutzen tue ich das bisher so:
```Javascript
const copyListOfDetections = listOfDetections;
let resultList: UpgradedDecetionInterface[] = [];

copyListOfDetections.map((detection, index) => {
    if (index >= 1) {
        const stateOfDetection = knownState(resultList, detection);

        if (stateOfDetection.known) {
            console.log('Kenn ich');
        } else {
            console.log('Kenn ich nicht');
            resultList.push(detection);
        }
    }
}```

11:53:24
@tarvos90:matrix.orgtarvos90 *

Ich hab auch eine Frage, vielleicht weiß ja jemand wie man das bequem löst.
Ich muss Elemente miteinander vergleichen und wenn ein Element mit allen bisherigen Elementen
der Liste mir ein 'unknown' liefert, dann ist das ein neues Element.

Wenn das NICHT so ist, hätte ich gern das label des bereits bekannten Elements.

Mir wurde geraten dafür ein Maybe Pattern (in TypeScript) zu verwenden aber so richtig werde ich daraus nicht schlau.
Naja hier erst mal mein Code:

function knownState(
  referenceList: UpgradedDecetionInterface[],
  currentElement: UpgradedDecetionInterface
): boolean {
  const newPerson = referenceList.every(referenceFace => {
    const bestMatch = referenceFace.faceMatcher.findBestMatch(
      currentElement.descriptor[0]
    );

    return bestMatch.label === 'unknown';
  });

  return newPerson;
}

newPerson ist nur dann true, wenn das every bei jedem bisherigen Element 'unknown' ist, wie schon erwähnt.
Das Ding ist, wie komm ich jetzt am besten an das Label rann, ohne noch mal findBestMatch auszuführen?

Benutzen tue ich das bisher so:

const copyListOfDetections = listOfDetections;
let resultList: UpgradedDecetionInterface[] = [];

copyListOfDetections.map((detection, index) => {
    if (index >= 1) {
        const stateOfDetection = knownState(resultList, detection);

        if (stateOfDetection.known) {
            console.log('Kenn ich');
        } else {
            console.log('Kenn ich nicht');
            resultList.push(detection);
        }
    }
}```

11:53:47
@tarvos90:matrix.orgtarvos90 *

Ich hab auch eine Frage, vielleicht weiß ja jemand wie man das bequem löst.
Ich muss Elemente miteinander vergleichen und wenn ein Element mit allen bisherigen Elementen
der Liste mir ein 'unknown' liefert, dann ist das ein neues Element.

Wenn das NICHT so ist, hätte ich gern das label des bereits bekannten Elements.

Mir wurde geraten dafür ein Maybe Pattern (in TypeScript) zu verwenden aber so richtig werde ich daraus nicht schlau.
Naja hier erst mal mein Code:

function knownState(
  referenceList: UpgradedDecetionInterface[],
  currentElement: UpgradedDecetionInterface
): boolean {
  const newPerson = referenceList.every(referenceFace => {
    const bestMatch = referenceFace.faceMatcher.findBestMatch(
      currentElement.descriptor[0]
    );

    return bestMatch.label === 'unknown';
  });

  return newPerson;
}

newPerson ist nur dann true, wenn das every bei jedem bisherigen Element 'unknown' ist, wie schon erwähnt.
Das Ding ist, wie komm ich jetzt am besten an das Label rann, ohne noch mal findBestMatch auszuführen?

Benutzen tue ich das bisher so:

const copyListOfDetections = listOfDetections;
let resultList: UpgradedDecetionInterface[] = [];

copyListOfDetections.map((detection, index) => {
    if (index >= 1) {
        const stateOfDetection = knownState(resultList, detection);

        if (stateOfDetection.known) {
            console.log('Kenn ich');
        } else {
            console.log('Kenn ich nicht');
            resultList.push(detection);
        }
    }
}
11:54:06
@tarvos90:matrix.orgtarvos90Jedenfalls hab ich dann mal etwas zu diesem Maybe Pattern gelesen, und versucht anzuwenden:11:54:35
@tarvos90:matrix.orgtarvos90
export class UnknownDetection {
    known: boolean = false;
}

export class KnownDetection {
    known: boolean = true;
    label: string;
    distance: number;
}

export type knownDetection = UnknownDetection | KnownDetection;
11:54:52
@tarvos90:matrix.orgtarvos90

sah dann so aus:

function knownState(
    referenceFaces: UpgradedDecetionInterface[],
    currentDetection: UpgradedDecetionInterface,
): knownDetection {
    let knownPersonLabel: knownDetection = { known: false };

    const newPerson = referenceFaces.every(referenceFace => {
        const bestMatch = referenceFace.faceMatcher.findBestMatch(
            currentDetection.descriptor[0],
        );

        if (bestMatch.label !== 'unknown') {
            knownPersonLabel = {
                distance: bestMatch.distance,
                known: true,
                label: bestMatch.label,
            };
        }

        return bestMatch.label === 'unknown';
    });

    if (newPerson) {
        const unknownState = {
            known: false,
        };
        console.log(unknownState);

        return unknownState
    } else {
        console.log(knownPersonLabel);

        knownPersonLabel;
    }
}
11:55:36
@tarvos90:matrix.orgtarvos90aber das ist irgendwie alles nicht so geil :D11:55:43
@tim:schumacher.im0xAFFE tarvos90: Könnte man dafür nicht auch Array.prototype.reduce benutzen? 11:57:46
@tarvos90:matrix.orgtarvos90statt dem every? hm11:58:22
@tim:schumacher.im0xAFFE

tarvos90: sowas in der Richtung:

    let result: { label: knownDetection, newPerson: boolean } = {
        label: { known: false },
        newPerson: false,
    }

    const result = referenceFaces.reduce((prev, current) => {
        
    })
12:17:05
@tarvos90:matrix.orgtarvos90Probier ich gleich, muss erstmal essen^^12:27:22
@tarvos90:matrix.orgtarvos90mag reduce immer nicht all zu sehr wenn es nicht wirklich etwas arithmetisches ist :D TS meckert auch gerade irgendwie13:18:42
@tarvos90:matrix.orgtarvos90

so geht's lol :D

function getKnownState(
    referenceFaces: UpgradedDecetionInterface[],
    currentDetection: UpgradedDecetionInterface,
): knownStateInterface {
    // Returns true if every referenceFace in referenceFaces
    // compared to one Detection is labeled as 'unknown'.
    const isNew = referenceFaces.every(referenceFace => {
        const bestMatch = referenceFace.faceMatcher.findBestMatch(
            currentDetection.descriptor[0],
        );

        return bestMatch.label === 'unknown';
    });

    if (isNew) {
        const newDetection = {
            known: false,
        };

        return newDetection;
    }

    const bestMatchLabels = referenceFaces.map(referenceFace => {
        const bestMatch = referenceFace.faceMatcher.findBestMatch(
            currentDetection.descriptor[0],
        );

        return bestMatch.toString(false);
    });

    const bestMatchLabel = bestMatchLabels.filter(label => {
        return label !== 'unknown';
    })[0];

    const knownDetection = {
        known: true,
        label: bestMatchLabel,
    };

    return knownDetection;
}
16:20:28
@tim:schumacher.im0xAFFE

tarvos90: Würde das eher so machen:

    const bestMatchLabel = bestMatchLabels.filter(label => {
        return label !== 'unknown';
    }).shift();

Finde so Array-Access über index nicht so optimal, weil es ja nicht umbedingt gegeben sein muss das es das Element gibt.

16:23:25
@tarvos90:matrix.orgtarvos90ah danke, ja das ist besser :D16:24:00
21 Jan 2020
@gelight:matrix.orggelightHi all ... wer hätte Lust mal wieder auf ein kleines Treffen? 13:40:04
27 Jan 2020
@tarvos90:matrix.orgtarvos90Ich gerne, kann ja auch im kleineren stattfinden :+1:00:11:55
@tarvos90:matrix.orgtarvos90

Ich hab außerdem zur späten Stunde noch mal ein rxjs Anliegen :D, ich hab einen Stream von Daten einer Webcam und erkenne dort Gesichter mit einer API. Ich möchte jetzt alle erfassten Gesichter emitten (eine Liste/Array), wenn eine gewisse Zeitlang nichts erkannt wurde. Der Stream soll aber nicht enden, es soll dann eine neue Liste angefangen werden.

Mein erster Ansatz sieht so aus:

const detector = interval(intervalValue).pipe(
    exhaustMap(() => {
        return this.detectFaces();
    }),
    filter(x => x !== undefined),
    map(detections => {
        return detections.map(this.faceApiService.transformDetection);
    }),
    timeout(5000),
);

detectFaces gibt mir entweder eine Liste von Detections oder eben undefined, deswegen fand ich das mit filter und timeout eigentlich ganz gut so. Aber ist ja nun nicht ganz das was ich brauche.
Irgendwie denke ich, müsste ich bufferTime mit timeout kombinieren aber ich nicht wirklich Ahnung von rxja und hab mir das nur mit diesem decision tree zusammengebaut

00:17:09
@tarvos90:matrix.orgtarvos90irgendwie sowas: https://i.imgur.com/isONFBr.jpg00:18:01

Show newer messages


Back to Room ListRoom Version: