jeffreybenjaminbrown / hode Goto Github PK
View Code? Open in Web Editor NEWrslt, take five-ish
License: GNU General Public License v3.0
rslt, take five-ish
License: GNU General Public License v3.0
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
.
(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.)
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
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.
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:
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
Tom (what's your Github handle?) emailed:
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"
(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.
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?
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?
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.
[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
Seems like that could seem feasible:
https://en.wikipedia.org/wiki/Never-Ending_Language_Learning
See the packages here:
https://hackage.haskell.org/user/Norfair
And the blogposts by @NorfairKing here:
https://cs-syd.eu/tags/cursors
Seems like this might make a few things easier
Tom (what's your Github handle?) emailed the following:
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.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.