Giter VIP home page Giter VIP logo

hode's People

Contributors

jeffreybenjaminbrown avatar kindaro avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

hode's Issues

`Addr` should be a UUID

Using a UUID instead of an Int for the Addr type synonym would be better, as they are less prone to collision[1].

There are some conditions under which a user needs to actually know the address of an expression -- when deleting an Expr, for example. If Addr was a UUID, that would become awkward. A solution would be for the UI to define temporary low-digit synonyms for each Addr.

Footnote 1

(If a billion people each had a billion 128-bit UUIDs, the probability that any two UUIDs would be the same is about 0.15%:

> let n = 1e9**2 in 1 - exp( -(n**2) / (2 * 2**128) )
1.4682889460021498e-3

See the approximations section of the Wikipedia article on the birthday problem for where that formula comes from.)

Permit other UIs

Some of the discussion on this earlier issue regards permitting other applications, say Vim, to access Hode without having to go through ncurses. It's possible. @adaszko suggests a REPL with autocomplete. I haven't got autocomplete, but GHCI itself is a REPL that lets you do everything you'd want to do in the GUI. I'll write this up further later, but here's a sketch:

The module Hode.UI.NoUI provides all the needed functions. It's not very many -- all there is to do, after all, is add statements and search for them. For instance, if you have defined this code:

r = either (error "bad parse") id $
nInserts (mkRslt mempty)
[ "0 #is mystical"
, "0 #is a number"
, "1 #is mystical"
, "1 #is a number"
, "the sun #is mystical"
, "the sun #is a great flaming ball of gas"
, "5000 #is a number"
]
you'll have defined a graph that describes some properties of some numbers and the sun. You can then run the following in GHCI to find all mystical numbers:

nFindStringsIO r "/eval (/it= /eval /it #is a number) #is mystical"
3: 0
6: 1
(Before each colon appears the address of the expression after the colon.) You could then add a few more statements to the graph interactively:

Right r <- return $ nInsert' r "birds #eat fish"
Right r <- return $ nInsert' r "bears #eat fish"
Right r <- return $ nInsert' r "fish #eat bugs"
Right r <- return $ nInsert' r "bugs #eat glyphosate"
and search for everything that eats glyphosate:

nFindStringsIO r "/tr /it #eat glyphosate"
19: birds
20: fish
22: bears
24: bugs
26: glyphosate
(Transitive relationships are a new feature. Currently the system assumes any transitive relationship is reflexive, which is why glyphosate appears in the results for things that eat glyphosate. If you don't want it there, for now you'll have to do the subtraction manually, like the following.)

nFindStringsIO r "(/tr /it #eat glyphosate) \ glyphosate"
19: birds
20: fish
22: bears
24: bugs

First-order rules of inference

I would like the system to be able to infer from "turtles #eat kelp" that "a turtle #eats kelp".

Hode can do a little inference already, via transitive relationships. The relationships themselves are first-order, but the inference is not: It is hard-coded into Hode how to deduce from, say, "1 #< 2" and "2 #< 3" that "1 #< 3".

The natural solutio=n is to introduce a new Expr constructor for rules of inference.

Telescopic Text/StretchText for Hode?

http://www.telescopictext.org/write/

I just found this tool(via https://raindrop.io/collection/613587?q=), and immediately like this kind of interface could work extremely well for a lot forms of data entry as well as browsing for Hode. (Doubly so since I had imagined this kind of interface numerous times in the past, and never found anything like it, despite searching!)

And, surprise, surprise (no really, this actually did surprise the hell out of me!), this led me to learn that Ted Nelson came up with that idea first, too:

https://en.wikipedia.org/wiki/StretchText

Clarify hode's relation to Semantic Synchrony

Hello Jeffrey. Please excuse me for polluting the issues with this question which might seem silly but How does Hode differ and relate to Semantic Synchrony? Or are they completely unrelated? I am new to both.

Thank you

Computational metadata like "transitive"

Tom (what's your Github handle?) emailed:

Transitivity and general computation

The transitivity property seems like the first toe in the ocean of general computation, and seems to be a great example of why at least some computation is really valuable. Turning a nice restricted language into a general programming language gets really tough really fast, so that's not what I'm recommending, but I'd love to know if you have any thoughts on expanding these "property generators."

One possibility might be to keep computation out of the knowledge base - including possibly even removing the #transitive relation - but embed more in the query language. I could see "/find a < c" (where "" is a made-up query operator) desugaring to some prolog-style search function that allows for "a #< b" + "b #< c"

Unification across synonyms

(This issue began as an email.)

you mention a "_ eats _" relationship, but in the turtle example it's "turtles #eat kelp" - is there some way to unify the #eats in "tom #eats pizza" with the #eat in "turtles #eat kelp"?

There is not. I would like to introduce a "_ and _ are synonyms" template, such that relationships using it get special treatment, like "_ #is transitive" relationships do.

(And similarly for "turtles" and "a turtle" in eg "alice #has a turtle" + "turtles #eat kelp", etc?)

In that case yes: to distinguish "a turtle" from "turtle", you can divide it into "#a turtle". Such fine-grained data has the advantage that you can really let the system know what you mean. "turtles #eat kelp", after all, is ambiguous. It really needs a qualifier on turtles -- either some turtles or every turtle eats kelp.

That begs the question: Can the system infer from "turtles #eat kelp" that "a turtle #eat kelp"? It can't. I would like to implement first-order rules of inference.

Does not build: missing `Fix`.

When trying to build the project, I am seeing this error:

Hode/Rslt/Show/Util.hs:45:25: error:
    Not in scope: type constructor or class ‘Fix’
   |
45 |   :: forall att. Int -> Fix (ExprFWith att)
   |                         ^^^

— And many of the same further down the road.

Is this a dependency problem?

Can't `stack run` on macOS

Hi, this is an amazing project. I was trying to build it on macOS and failed due to a dependency on a X11 library:

(master)% stack run
X11-1.9: configure
kan-extensions-5.2: download
X11-1.9: build
kan-extensions-5.2: configure
kan-extensions-5.2: build
kan-extensions-5.2: copy/register
lens-4.17: download
lens-4.17: configure
lens-4.17: build
lens-4.17: copy/register
Progress 3/6

--  While building package X11-1.9 using:
      /private/var/folders/t5/cscwwl_n3n1_8_5j_00x_3t40000gn/T/stack-3bc6286fcc933911/X11-1.9/.stack-work/dist/x86_64-osx/Cabal-2.4.0.1/setup/setup --builddir=.stack-work/dist/x86_64-osx/Cabal-2.4.0.1 build --ghc-options " -ddump-hi -ddump-to-file -fdiagnostics-color=always"
    Process exited with code: ExitFailure 1
    Logs have been written to: /Users/adaszko/repos/hode/.stack-work/logs/X11-1.9.log

    [1 of 2] Compiling Main             ( /private/var/folders/t5/cscwwl_n3n1_8_5j_00x_3t40000gn/T/stack-3bc6286fcc933911/X11-1.9/Setup.hs, /private/var/folders/t5/cscwwl_n3n1_8_5j_00x_3t40000gn/T/stack-3bc6286fcc933911/X11-1.9/.stack-work/dist/x86_64-osx/Cabal-2.4.0.1/setup/Main.o )

    /private/var/folders/t5/cscwwl_n3n1_8_5j_00x_3t40000gn/T/stack-3bc6286fcc933911/X11-1.9/Setup.hs:6:29: warning: [-Wdeprecations]
        In the use of ‘defaultUserHooks’
        (imported from Distribution.Simple):
        Deprecated: "Use simpleUserHooks or autoconfUserHooks, unless you need Cabal-1.2
                 compatibility in which case you must stick with defaultUserHooks"
      |
    6 | main = defaultMainWithHooks defaultUserHooks
      |                             ^^^^^^^^^^^^^^^^
    [2 of 2] Compiling StackSetupShim   ( /Users/adaszko/.stack/setup-exe-src/setup-shim-mPHDZzAJ.hs, /private/var/folders/t5/cscwwl_n3n1_8_5j_00x_3t40000gn/T/stack-3bc6286fcc933911/X11-1.9/.stack-work/dist/x86_64-osx/Cabal-2.4.0.1/setup/StackSetupShim.o )
    Linking /private/var/folders/t5/cscwwl_n3n1_8_5j_00x_3t40000gn/T/stack-3bc6286fcc933911/X11-1.9/.stack-work/dist/x86_64-osx/Cabal-2.4.0.1/setup/setup ...
    Warning: defaultUserHooks in Setup script is deprecated.
    Configuring X11-1.9...
    configure: WARNING: unrecognized options: --with-hc
    checking for gcc... /usr/bin/gcc
    checking whether the C compiler works... yes
    checking for C compiler default output file name... a.out
    checking for suffix of executables...
    checking whether we are cross compiling... no
    checking for suffix of object files... o
    checking whether we are using the GNU C compiler... yes
    checking whether /usr/bin/gcc accepts -g... yes
    checking for /usr/bin/gcc option to accept ISO C89... none needed
    checking how to run the C preprocessor... /usr/bin/gcc -E
    checking for X... libraries /usr/X11/lib, headers /usr/X11/include
    checking whether -R must be followed by a space... neither works
    checking for gethostbyname... yes
    checking for connect... yes
    checking for remove... yes
    checking for shmat... yes
    checking for IceConnectionNumber in -lICE... yes
    checking whether to build Xinerama... yes
    checking for grep that handles long lines and -e... /usr/local/bin/ggrep
    checking for egrep... /usr/local/bin/ggrep -E
    checking for ANSI C header files... yes
    checking for sys/types.h... yes
    checking for sys/stat.h... yes
    checking for stdlib.h... yes
    checking for string.h... yes
    checking for memory.h... yes
    checking for strings.h... yes
    checking for inttypes.h... yes
    checking for stdint.h... yes
    checking for unistd.h... yes
    checking X11/extensions/Xinerama.h usability... yes
    checking X11/extensions/Xinerama.h presence... yes
    checking for X11/extensions/Xinerama.h... yes
    checking X11/extensions/Xrandr.h usability... yes
    checking X11/extensions/Xrandr.h presence... yes
    checking for X11/extensions/Xrandr.h... yes
    checking X11/extensions/scrnsaver.h usability... yes
    checking X11/extensions/scrnsaver.h presence... yes
    checking for X11/extensions/scrnsaver.h... yes
    checking whether to include X.org keysyms... yes
    checking X11/keysym.h usability... yes
    checking X11/keysym.h presence... yes
    checking for X11/keysym.h... yes
    checking X11/DECkeysym.h usability... yes
    checking X11/DECkeysym.h presence... yes
    checking for X11/DECkeysym.h... yes
    checking X11/Sunkeysym.h usability... yes
    checking X11/Sunkeysym.h presence... yes
    checking for X11/Sunkeysym.h... yes
    checking X11/ap_keysym.h usability... yes
    checking X11/ap_keysym.h presence... yes
    checking for X11/ap_keysym.h... yes
    checking X11/HPkeysym.h usability... yes
    checking X11/HPkeysym.h presence... yes
    checking for X11/HPkeysym.h... yes
    checking X11/XF86keysym.h usability... yes
    checking X11/XF86keysym.h presence... yes
    checking for X11/XF86keysym.h... yes
    checking X11/keysymdef.h usability... yes
    checking X11/keysymdef.h presence... yes
    checking for X11/keysymdef.h... yes
    checking X11/cursorfont.h usability... yes
    checking X11/cursorfont.h presence... yes
    checking for X11/cursorfont.h... yes
    configure: creating ./config.status
    config.status: creating config.mk
    config.status: creating X11.buildinfo
    config.status: creating include/HsX11Config.h
    config.status: creating include/X11_extras_config.h
    configure: WARNING: unrecognized options: --with-hc
    Preprocessing library for X11-1.9..
    In file included from AP.hsc:166:
    In file included from include/HsAllKeysyms.h:48:
    /opt/X11/include/X11/HPkeysym.h:58:9: warning: '_HPKEYSYM_H' is used as a header guard here, followed by #define of a different macro [-Wheader-guard]
    #ifndef _HPKEYSYM_H
            ^~~~~~~~~~~
    /opt/X11/include/X11/HPkeysym.h:60:9: note: '_HPKEYSYM' is defined here; did you mean '_HPKEYSYM_H'?
    #define _HPKEYSYM
            ^~~~~~~~~
            _HPKEYSYM_H
    1 warning generated.
    In file included from DEC.hsc:111:
    In file included from include/HsAllKeysyms.h:48:
    /opt/X11/include/X11/HPkeysym.h:58:9: warning: '_HPKEYSYM_H' is used as a header guard here, followed by #define of a different macro [-Wheader-guard]
    #ifndef _HPKEYSYM_H
            ^~~~~~~~~~~
    /opt/X11/include/X11/HPkeysym.h:60:9: note: '_HPKEYSYM' is defined here; did you mean '_HPKEYSYM_H'?
    #define _HPKEYSYM
            ^~~~~~~~~
            _HPKEYSYM_H
    1 warning generated.
    In file included from HP.hsc:504:
    In file included from include/HsAllKeysyms.h:48:
    /opt/X11/include/X11/HPkeysym.h:58:9: warning: '_HPKEYSYM_H' is used as a header guard here, followed by #define of a different macro [-Wheader-guard]
    #ifndef _HPKEYSYM_H
            ^~~~~~~~~~~
    /opt/X11/include/X11/HPkeysym.h:60:9: note: '_HPKEYSYM' is defined here; did you mean '_HPKEYSYM_H'?
    #define _HPKEYSYM
            ^~~~~~~~~
            _HPKEYSYM_H
    1 warning generated.
    In file included from Sun.hsc:236:
    In file included from include/HsAllKeysyms.h:48:
    /opt/X11/include/X11/HPkeysym.h:58:9: warning: '_HPKEYSYM_H' is used as a header guard here, followed by #define of a different macro [-Wheader-guard]
    #ifndef _HPKEYSYM_H
            ^~~~~~~~~~~
    /opt/X11/include/X11/HPkeysym.h:60:9: note: '_HPKEYSYM' is defined here; did you mean '_HPKEYSYM_H'?
    #define _HPKEYSYM
            ^~~~~~~~~
            _HPKEYSYM_H
    1 warning generated.
    In file included from XF86.hsc:915:
    In file included from include/HsAllKeysyms.h:48:
    /opt/X11/include/X11/HPkeysym.h:58:9: warning: '_HPKEYSYM_H' is used as a header guard here, followed by #define of a different macro [-Wheader-guard]
    #ifndef _HPKEYSYM_H
            ^~~~~~~~~~~
    /opt/X11/include/X11/HPkeysym.h:60:9: note: '_HPKEYSYM' is defined here; did you mean '_HPKEYSYM_H'?
    #define _HPKEYSYM
            ^~~~~~~~~
            _HPKEYSYM_H
    1 warning generated.
    In file included from XorgDefault.hsc:10047:
    In file included from include/HsAllKeysyms.h:48:
    /opt/X11/include/X11/HPkeysym.h:58:9: warning: '_HPKEYSYM_H' is used as a header guard here, followed by #define of a different macro [-Wheader-guard]
    #ifndef _HPKEYSYM_H
            ^~~~~~~~~~~
    /opt/X11/include/X11/HPkeysym.h:60:9: note: '_HPKEYSYM' is defined here; did you mean '_HPKEYSYM_H'?
    #define _HPKEYSYM
            ^~~~~~~~~
            _HPKEYSYM_H
    1 warning generated.
    Building library for X11-1.9..
    [ 1 of 28] Compiling Graphics.X11.Types ( .stack-work/dist/x86_64-osx/Cabal-2.4.0.1/build/Graphics/X11/Types.hs, .stack-work/dist/x86_64-osx/Cabal-2.4.0.1/build/Graphics/X11/Types.o )
    [ 2 of 28] Compiling Graphics.X11.ExtraTypes.XorgDefault ( .stack-work/dist/x86_64-osx/Cabal-2.4.0.1/build/Graphics/X11/ExtraTypes/XorgDefault.hs, .stack-work/dist/x86_64-osx/Cabal-2.4.0.1/build/Graphics/X11/ExtraTypes/XorgDefault.o )
    [ 3 of 28] Compiling Graphics.X11.ExtraTypes.XF86 ( .stack-work/dist/x86_64-osx/Cabal-2.4.0.1/build/Graphics/X11/ExtraTypes/XF86.hs, .stack-work/dist/x86_64-osx/Cabal-2.4.0.1/build/Graphics/X11/ExtraTypes/XF86.o )
    [ 4 of 28] Compiling Graphics.X11.ExtraTypes.Sun ( .stack-work/dist/x86_64-osx/Cabal-2.4.0.1/build/Graphics/X11/ExtraTypes/Sun.hs, .stack-work/dist/x86_64-osx/Cabal-2.4.0.1/build/Graphics/X11/ExtraTypes/Sun.o )
    [ 5 of 28] Compiling Graphics.X11.ExtraTypes.HP ( .stack-work/dist/x86_64-osx/Cabal-2.4.0.1/build/Graphics/X11/ExtraTypes/HP.hs, .stack-work/dist/x86_64-osx/Cabal-2.4.0.1/build/Graphics/X11/ExtraTypes/HP.o )
    [ 6 of 28] Compiling Graphics.X11.ExtraTypes.DEC ( .stack-work/dist/x86_64-osx/Cabal-2.4.0.1/build/Graphics/X11/ExtraTypes/DEC.hs, .stack-work/dist/x86_64-osx/Cabal-2.4.0.1/build/Graphics/X11/ExtraTypes/DEC.o )
    [ 7 of 28] Compiling Graphics.X11.ExtraTypes.AP ( .stack-work/dist/x86_64-osx/Cabal-2.4.0.1/build/Graphics/X11/ExtraTypes/AP.hs, .stack-work/dist/x86_64-osx/Cabal-2.4.0.1/build/Graphics/X11/ExtraTypes/AP.o )
    [ 8 of 28] Compiling Graphics.X11.ExtraTypes ( Graphics/X11/ExtraTypes.hs, .stack-work/dist/x86_64-osx/Cabal-2.4.0.1/build/Graphics/X11/ExtraTypes.o )
    [ 9 of 28] Compiling Graphics.X11.Xlib.Internal ( .stack-work/dist/x86_64-osx/Cabal-2.4.0.1/build/Graphics/X11/Xlib/Internal.hs, .stack-work/dist/x86_64-osx/Cabal-2.4.0.1/build/Graphics/X11/Xlib/Internal.o )
    [10 of 28] Compiling Graphics.X11.Xlib.Types ( .stack-work/dist/x86_64-osx/Cabal-2.4.0.1/build/Graphics/X11/Xlib/Types.hs, .stack-work/dist/x86_64-osx/Cabal-2.4.0.1/build/Graphics/X11/Xlib/Types.o )
    [11 of 28] Compiling Graphics.X11.Xlib.Screen ( Graphics/X11/Xlib/Screen.hs, .stack-work/dist/x86_64-osx/Cabal-2.4.0.1/build/Graphics/X11/Xlib/Screen.o )
    [12 of 28] Compiling Graphics.X11.Xlib.Region ( Graphics/X11/Xlib/Region.hs, .stack-work/dist/x86_64-osx/Cabal-2.4.0.1/build/Graphics/X11/Xlib/Region.o )
    [13 of 28] Compiling Graphics.X11.Xlib.Image ( Graphics/X11/Xlib/Image.hs, .stack-work/dist/x86_64-osx/Cabal-2.4.0.1/build/Graphics/X11/Xlib/Image.o )
    [14 of 28] Compiling Graphics.X11.Xlib.Font ( .stack-work/dist/x86_64-osx/Cabal-2.4.0.1/build/Graphics/X11/Xlib/Font.hs, .stack-work/dist/x86_64-osx/Cabal-2.4.0.1/build/Graphics/X11/Xlib/Font.o )
    [15 of 28] Compiling Graphics.X11.Xlib.Cursor ( .stack-work/dist/x86_64-osx/Cabal-2.4.0.1/build/Graphics/X11/Xlib/Cursor.hs, .stack-work/dist/x86_64-osx/Cabal-2.4.0.1/build/Graphics/X11/Xlib/Cursor.o )
    [16 of 28] Compiling Graphics.X11.Xlib.Display ( Graphics/X11/Xlib/Display.hs, .stack-work/dist/x86_64-osx/Cabal-2.4.0.1/build/Graphics/X11/Xlib/Display.o )
    [17 of 28] Compiling Graphics.X11.Xlib.Event ( .stack-work/dist/x86_64-osx/Cabal-2.4.0.1/build/Graphics/X11/Xlib/Event.hs, .stack-work/dist/x86_64-osx/Cabal-2.4.0.1/build/Graphics/X11/Xlib/Event.o )
    [18 of 28] Compiling Graphics.X11.Xlib.Context ( Graphics/X11/Xlib/Context.hs, .stack-work/dist/x86_64-osx/Cabal-2.4.0.1/build/Graphics/X11/Xlib/Context.o )
    [19 of 28] Compiling Graphics.X11.Xlib.Color ( Graphics/X11/Xlib/Color.hs, .stack-work/dist/x86_64-osx/Cabal-2.4.0.1/build/Graphics/X11/Xlib/Color.o )
    [20 of 28] Compiling Graphics.X11.Xlib.Atom ( .stack-work/dist/x86_64-osx/Cabal-2.4.0.1/build/Graphics/X11/Xlib/Atom.hs, .stack-work/dist/x86_64-osx/Cabal-2.4.0.1/build/Graphics/X11/Xlib/Atom.o )
    [21 of 28] Compiling Graphics.X11.Xlib.Misc ( .stack-work/dist/x86_64-osx/Cabal-2.4.0.1/build/Graphics/X11/Xlib/Misc.hs, .stack-work/dist/x86_64-osx/Cabal-2.4.0.1/build/Graphics/X11/Xlib/Misc.o )
    [22 of 28] Compiling Graphics.X11.Xlib.Window ( Graphics/X11/Xlib/Window.hs, .stack-work/dist/x86_64-osx/Cabal-2.4.0.1/build/Graphics/X11/Xlib/Window.o )
    [23 of 28] Compiling Graphics.X11.Xlib ( Graphics/X11/Xlib.hs, .stack-work/dist/x86_64-osx/Cabal-2.4.0.1/build/Graphics/X11/Xlib.o )
    [24 of 28] Compiling Graphics.X11.XScreenSaver ( .stack-work/dist/x86_64-osx/Cabal-2.4.0.1/build/Graphics/X11/XScreenSaver.hs, .stack-work/dist/x86_64-osx/Cabal-2.4.0.1/build/Graphics/X11/XScreenSaver.o )
    [25 of 28] Compiling Graphics.X11     ( Graphics/X11.hs, .stack-work/dist/x86_64-osx/Cabal-2.4.0.1/build/Graphics/X11.o )
    [26 of 28] Compiling Graphics.X11.Xrandr ( .stack-work/dist/x86_64-osx/Cabal-2.4.0.1/build/Graphics/X11/Xrandr.hs, .stack-work/dist/x86_64-osx/Cabal-2.4.0.1/build/Graphics/X11/Xrandr.o )
    [27 of 28] Compiling Graphics.X11.Xlib.Extras ( .stack-work/dist/x86_64-osx/Cabal-2.4.0.1/build/Graphics/X11/Xlib/Extras.hs, .stack-work/dist/x86_64-osx/Cabal-2.4.0.1/build/Graphics/X11/Xlib/Extras.o )
    [28 of 28] Compiling Graphics.X11.Xinerama ( .stack-work/dist/x86_64-osx/Cabal-2.4.0.1/build/Graphics/X11/Xinerama.hs, .stack-work/dist/x86_64-osx/Cabal-2.4.0.1/build/Graphics/X11/Xinerama.o )
    ld: library not found for -lXss
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    `gcc' failed in phase `Linker'. (Exit code: 1)
zsh: exit 1     stack run

Can the dependency be made optional so that the project is usable on macOS too?

Provide typical use cases

While the idea looks very cool, it would be great to see some typical use cases of this. In that way, it's much easier to compare it with existing solutions of notetaking (I'm assuming one use case is notetaking) and to see how it solves the problems that existing options cannot.

Merges and automatic disambiguation

[This duplicates what I just posted to Twitter, in response to @mwotton who wrote https://twitter.com/mwotton/status/1383429467306008585.]

Yes [there's a good way to handle merges], although it's not coded yet. Say you wrote about (the) Ben Franklin, and I about my cousin Ben Franklin. On merging our data, the two would by default look like one expression, decorated with a note that there might be a conflict. 1/4

If you later notice a mismatch -- "Franklin never went to Arizona, what the hell?" -- you could automatically split them into "#the Ben Franklin #(written about by) Jeff" and "#the Ben Franklin #(written about by) Mark", because Hode had invisibly retained their provenance. 2/4

Optionally, you could then rename your Ben Franklin in a completely disambiguating way, such as "#the Ben Franklin #(described by) https://es.wikipedia.org/wiki/Benjamin_Franklin". 3/4

There does arise the possibility that our data contradict each other. Even with true AI, that would be impossible to avoid automatically. But the data model does not permit a merge to create an invalid state. 4/4

Disambiguation

Tom (what's your Github handle?) emailed the following:

Universality by default

When talking about merging peoples' knowledge bases, we discussed the difference between "local" vs "universal" atoms (lmk if you have better terms for these!). For example, "my cousin vinnie" could either refer to the movie we can all point to and be speaking of the same thing, or it could be referring to my - the author of a particular knowledge base-'s actual cousin named Vinnie. If we don't draw a distinction between local and universal, each term in the combined knowledge base is a Schrodinger's box of meaning - we never know quite what "my cousin vinnie #is popular" means if it's coming from someone else's knowledge base.

My current thinking is not only that a mind map should make explicit distinctions between universality and locality (or different kinds of localities), but also that the universality should be tightly embedded. So, for example, Hode (or my hypothetical replacement - let's call it Toad for Tom's Hode :) ) could by default have a list of all wikipedia article titles, and when you /add "turtles #are green", it suggests (in pseudo-syntax) ":wiki:turtles #are :wiki:green". The advantage of defaulting or suggesting is that it's low-effort, as compared to after the fact attempting to unify years of work on different knowledge bases.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.