kopia lustrzana https://github.com/learn-awesome/learndb
misc
rodzic
558ef2c019
commit
bfa2fa4f04
|
@ -1,4 +1,4 @@
|
|||
# LearnAwesome
|
||||
# SkillTree
|
||||
|
||||
[Visit the online version at https://skilltree.worldclass.quest/](https://skilltree.worldclass.quest/) but you can also run it on your own machine.
|
||||
|
||||
|
|
45
db/README.md
45
db/README.md
|
@ -1,8 +1,49 @@
|
|||
# JSON format
|
||||
|
||||
These JSON files are now not the master data but will be generated from a PostgreSQL database whose schema is defined in `schema.sql`.
|
||||
These JSON files can also be generated from a PostgreSQL database whose schema is defined in `schema.sql`.
|
||||
|
||||
We have 4 top-level entities: Topics, Creators and Items. Reviews are are nested within Items and have links to either another Item or a Creator.
|
||||
We have 3 top-level entities: [Topics](topics.json), [Creators](creators.json), [Items](items.json). Reviews are are nested within Items and have links to either another Item or a Creator.
|
||||
|
||||
topis (name, hname, parent, rank)
|
||||
creators (name, hname, links)
|
||||
items (id, name, description, image, splinks, topics, creators, reviews, tags, difficulty, rating)
|
||||
|
||||
spnames are topic names designed to fix many shortcomings of traditional names:
|
||||
- we want case-insensitive, unique, URL-safe, hashtag-compatible names as topic identifiers
|
||||
- but case-sensitive and including special characters for human display. Eg: "AT & T" or "C++ 20"
|
||||
- topics have a taxonomy, typically a hierarchy. For eg: comp.lang.python
|
||||
- within a parent, we usually want to preserve display order which is not alphabetical. This can be done with names like "100-physics", "200-chemistry", "300-biology" etc.
|
||||
|
||||
Wikipedia handles it awkwardly (escape characters that are hard to type manually, no hierarchy):
|
||||
- https://en.wikipedia.org/wiki/Zorn%27s_lemma
|
||||
- https://en.wikipedia.org/wiki/C%2B%2B
|
||||
|
||||
[Newsgroups](https://www.big-8.org/wiki/Big-8_Usenet_hierarchies) are quite nice, but the taxonomy is not granular enough for us to build a universal knowledge graph. For eg: there is [no name yet](https://news.novabbs.org/usenet/article-flat.php?id=34&group=news.announce.newgroups#34) for quadratic equations. Also, everything other than Big-8 (comp, humanities, misc, news, rec, sci, soc, and talk) is shoved into the alt.* hierarchy (the historical reason for that is European networks did not want to pay for groups like religion or racism)
|
||||
|
||||
Taxonomy maintenance is not easy. When does a concept/subtopic deserve its own topic-name? What happens when topics get merged or retired? Should they be language-agnostic or English-first?
|
||||
|
||||
Should names optimize for brevity or readability? What if names get really long?
|
||||
Should names always fully-specified like `math.algebra.quadratics` or just `quadratics`?
|
||||
If sort order is included in the name, do we expect the users to write "100-science.200-chemistry"?
|
||||
If sort order is NOT included in the name then it (and other attributes) needs to be looked up elsewhere.
|
||||
What if a topic belongs under two separate parent topics? statistics.machine_learning or computer_science.machine_learning?
|
||||
Can names be compatible with hashtags?
|
||||
How to handle disambiguation (a name that belongs to 2+ things or a thing that has 2+ names?
|
||||
How about nameless things or topics?
|
||||
Should names be meaningful or randomized?
|
||||
Are names properties (like DNS or ENS)? If not, who assigns them?
|
||||
How can a taxonomy keep up with expanding knowledge?
|
||||
|
||||
|
||||
splinks are HTTP URLs modified specially in a few ways:
|
||||
- Link should indicate the learning media type (eg: book/course/video/game/event etc)
|
||||
- Link should optionally include content-hash for integrity check and alternat fetch mechanism like IPFS
|
||||
- Link should optionally include enable easy lookup for its snapshot on places like Wayback machine
|
||||
- Link should optionally indicate its open-access status:
|
||||
- Does it require login?
|
||||
- Does it require payment?
|
||||
- Does it require ads?
|
||||
- Links should be backward-compatible and should navigate to primary location in the usual way
|
||||
|
||||
## topics.json
|
||||
|
||||
|
|
|
@ -38,12 +38,11 @@
|
|||
|
||||
<script type="module" src='/src/main.js'></script>
|
||||
|
||||
<link rel="stylesheet"
|
||||
href="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.0.0-beta.86/dist/themes/light.css" />
|
||||
<script type="module"
|
||||
src="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.0.0-beta.86/dist/shoelace.js"></script>
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.18.0/cdn/themes/light.css" />
|
||||
<script type="module" src="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.18.0/cdn/shoelace.js" ></script>
|
||||
|
||||
<script type="module" src="https://unpkg.com/@fluentui/web-components"></script>
|
||||
<title>LearnAwesome</title>
|
||||
<title>SkillTree</title>
|
||||
|
||||
<!-- fonts -->
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
"marked": "^15.0.2",
|
||||
"postcss": "^8.4.30",
|
||||
"postcss-load-config": "^6.0.1",
|
||||
"svelte": "^5.2.9",
|
||||
"svelte": "^5.2.10",
|
||||
"svelte-bricks": "^0.2.1",
|
||||
"svelte-preprocess": "^6.0.0",
|
||||
"tailwindcss": "^3.3.3",
|
||||
|
@ -1397,9 +1397,9 @@
|
|||
"license": "MIT"
|
||||
},
|
||||
"node_modules/electron-to-chromium": {
|
||||
"version": "1.5.65",
|
||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.65.tgz",
|
||||
"integrity": "sha512-PWVzBjghx7/wop6n22vS2MLU8tKGd4Q91aCEGhG/TYmW6PP5OcSXcdnxTe1NNt0T66N8D6jxh4kC8UsdzOGaIw==",
|
||||
"version": "1.5.66",
|
||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.66.tgz",
|
||||
"integrity": "sha512-pI2QF6+i+zjPbqRzJwkMvtvkdI7MjVbSh2g8dlMguDJIXEPw+kwasS1Jl+YGPEBfGVxsVgGUratAKymPdPo2vQ==",
|
||||
"dev": true,
|
||||
"license": "ISC"
|
||||
},
|
||||
|
@ -1460,9 +1460,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/esm-env": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.1.4.tgz",
|
||||
"integrity": "sha512-oO82nKPHKkzIj/hbtuDYy/JHqBHFlMIW36SDiPCVsj87ntDLcWN+sJ1erdVryd4NxODacFTsdrIE3b7IamqbOg==",
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.0.tgz",
|
||||
"integrity": "sha512-OhSQuHL3mUcaQHjGe8UMG8GsJIJHYYz0flR0h9fiTPNMupLMkb7TvcRD0EeJXW5a8GHBgfz08b6FDLNK7kkPQA==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/esrap": {
|
||||
|
@ -2699,9 +2699,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/svelte": {
|
||||
"version": "5.2.9",
|
||||
"resolved": "https://registry.npmjs.org/svelte/-/svelte-5.2.9.tgz",
|
||||
"integrity": "sha512-LjO7R6K8FI8dA3l+4CcsbJ3djIe2TtokHGzfpDTro5g8nworMbTz9alCR95EQXGsqlzIAvqJtZ7Yy0o33lL09Q==",
|
||||
"version": "5.2.10",
|
||||
"resolved": "https://registry.npmjs.org/svelte/-/svelte-5.2.10.tgz",
|
||||
"integrity": "sha512-ON0OyO7vOmSjTc9mLjusu3vf1I7BvjovbiRB7j84F1WZMXV6dR+Tj4btIzxQxMHfzbGskaFmRa7qjgmBSVBnhQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@ampproject/remapping": "^2.3.0",
|
||||
|
@ -2711,7 +2711,7 @@
|
|||
"acorn-typescript": "^1.4.13",
|
||||
"aria-query": "^5.3.1",
|
||||
"axobject-query": "^4.1.0",
|
||||
"esm-env": "^1.0.0",
|
||||
"esm-env": "^1.2.0",
|
||||
"esrap": "^1.2.2",
|
||||
"is-reference": "^3.0.3",
|
||||
"locate-character": "^3.0.0",
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
"marked": "^15.0.2",
|
||||
"postcss": "^8.4.30",
|
||||
"postcss-load-config": "^6.0.1",
|
||||
"svelte": "^5.2.9",
|
||||
"svelte": "^5.2.10",
|
||||
"svelte-bricks": "^0.2.1",
|
||||
"svelte-preprocess": "^6.0.0",
|
||||
"tailwindcss": "^3.3.3",
|
||||
|
|
Ładowanie…
Reference in New Issue