- Write a new
GlyphGridwhich combines the best of both versions:- the original (see commit
b2bff2566bor previous) has a nice coils-back-on-itself structure, but maybe folds back too densely so that especially near boundaries every possibly glyph location in the grid is taken. - the current (
glyphgrid2.jlin older commits) has a nice multiple-path structure but could be denser and coil back more.
- the original (see commit
- Take another stab at linear layouts, right now they don't seem better than just using a strict grid layout. Maybe try varying glyph size a bit?
- Fix some more edge cases of glyph overlap.
- This probably requires a fully general computation in
geometry.jlof whether two glyphs with different transforms overlap. - Then a spiral layout could pack glyphs more densely without suffering overlap.
- This probably requires a fully general computation in
- Modify the mapping of
String => Oracle => GlyphGridso that the eventual grid is only locally sensitive to input changes, not globally sensitive. For example, maybe each word contributes independently to the eventual Nomai text, so that"abc def"and"abc xyz"have the same initial glyphs. One idea for how to do this:- Define a
MetaOraclewith the same interface (ask!, etc.) as anOracle. EachMetaOraclewraps a sequence of one or moreOraclesand exhausts them one by one. - Split input strings on whitespace and generate an
Oraclefor each word, then combine these into aMetaOracle. - When building a
GlyphGridfrom aMetaOracle, have a special sentinel glyph at the start of each word in the same row on the grid. After an individualOraclein aMetaOracleis exhausted, the place the next sentinel glyph and have the existing paths join at that new sentinel. Then the next word can begin from a fixed glyph (the sentinel) at a fixed position (row), so changes to one word in the input message won't affect the rest of the embedding.
- Define a
- Somewhat relatedly, generate special sentinel glyphs when an
Oracleis exhausted so that we can distinguish between anOraclewrapping back on itself and a longerOraclewith the same sequence of initial answers. E.g. twoOraclesthat respond to which-of-three questions respectively(2,1,3)and(2,1,3,2)will look the same if ask exactly 4 questions. This means in rare cases distinct messages can have the same spiral when anOracleneeds to loop back on itself to complete a glyph that another similarOraclecan complete exactly. - Re-enable server functionality (see commit
b2bff2566b) with a package extension. We don't need it as a full dependency, especially for use on AWS Lambda. - More glyphs and/or annotations?
- Refactor so that core glyph digits aren't in the type system? This stemmed from an earlier design which didn't end up materializing. Or use the type system more so that we actually benefit from dispatch. As-is, we could just have an array of core glyph digits without defining any types.
- Probably write some tests, we should be adults after all...