How to visualize the current knowledge base
Every Pharo snippet is populated with a thisSnippet
variable. Through that, we can just get access to the entire database and the registered pages.
pages := thisSnippet database pages
All pages are connected to one another. Let's visualize that graph:
m := GtMondrian new. m nodes stencil: [ :each | BlElement new background: Color black; size: 5 @ 5; when: BlClickEvent do: [ :e | e currentTarget phlow spawnTool: each asPhlowTool ] ]; with: pages. m edges stencil: [ BlLineElement new border: Color veryVeryLightGray; zIndex: -1 ]; connectToAll: [ :page | page allOutgoingTextualLinks collectAsSet: #target ]. m layout force nbIterations: 30. m asElement
Ah, that graph is a little too crowded because Glamorous Toolkit Book is linked to all pages in the database. So, let's take that page out.
pages := thisSnippet database pages reject: [:each | each title = 'Glamorous Toolkit Book']
That's better, but still not particularly valuable. That's because the visualization is generic. Value is always specific. So, in trueMoldable Development fashion, let's enhance our visualization with a contextual mapping. For example, highlighting where Lepiter
is found in titles.
m := GtMondrian new. m nodes stencil: [ :each | BlElement new background: ((each title includesSubstring: 'Lepiter') ifTrue: [ Color red ] ifFalse: [ Color black ]); size: 5 @ 5; when: BlClickEvent do: [ :e | e consumed: true. e currentTarget phlow spawnTool: each asPhlowTool ] ]; with: pages. m edges stencil: [ BlLineElement new border: Color veryVeryLightGray; zIndex: -1 ]; connectToAll: [ :page | page allOutgoingTextualLinks collectAsSet: #target ]. m layout force nbIterations: 50. m
Now, go and click on one of the nodes. What happens?