Net als de Force-Based-Graph gemaakt in Scala.js, en voor de GUI is weer gebruik gemaakt van
Webix.
De oorspronkelijke Java-code (en uitleg van het algoritme) is te vinden op deze site: Doyle B. Myers.
(De oorspronkelijke code valt onder een GNU-licentie (alles mag er mee, geen aansprakelijkheid).
De code staat nog niet op github. Dat gaat gebeuren.)
Korte uitleg:
- Het BM-algoritme probeert de zoekstring met steeds de lengte van het woord op te laten schuiven.
- Als dat niet kan kiest het de voordeligste van twee substrategiën: de goodSuffix- en badCharacter-skip strategie.
- Het vergelijkt de sequenties van achter naar voor, en bouwt van tevoren tabellen op.
- Spaties in de statusregel zijn overgeslagen bij het zoeken, en dus winst voor het algoritme.
Het Poisson-programmaatje toont de kansverdeling van tamelijk zeldzame discrete voorvallen.
Er wordt een faculteit berekend om de relative frequentie voor een aantal te vinden. Vandaar dat het aantal staafjes tot 20 gaat.
(Misschien op te hogen door gebruik te maken van BigIntegers.)
Van de technische kant was Poisson vooral een poging het canvas alsnog in te bedden in webix. Dat is (nog) niet gelukt. Het voornaamste doel dat het nu dient is dat het leuk is om te zien.
Toch heeft het enkele Scala.js leermomentjes opgeleverd:
Per html-pagina heb je één codefile nodig. Als je werk-htmlbestand veel meer bevat (in dit geval bijvoorbeeld de FBG code), kun je het beste steeds een aparte branche maken waarna je die extra code eruit sloopt.
Je communiceert nl. op minstens vier manieren tussen Scala.js en html/javascript:
- via parameters van de opstart-main()
- via vanuit Scala direct aan te roepen native js code
- via direct benaderde HTML-elementen
(Bijvoorbeeld: dom.document.getElementById("xxx").innerHTML)
- via vanuit js aan te roepen JSExport-Scalamethoden
De eerste twee moeten tussen beide kanten corresponderen, je kan niet zomaar code niet gebruiken, dan missen er referenties.
Vandaar die aparte branche waarin je alles wat een pagina niet kan gebruiken verwijdert.