nileshtrivedi 2024-11-28 13:35:50 +05:30
rodzic 558ef2c019
commit bfa2fa4f04
5 zmienionych plików z 60 dodań i 20 usunięć

Wyświetl plik

@ -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.

Wyświetl plik

@ -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

Wyświetl plik

@ -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">

22
package-lock.json wygenerowano
Wyświetl plik

@ -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",

Wyświetl plik

@ -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",