add a basic example of a page
This commit is contained in:
parent
447e402929
commit
cf562b6ec1
10 changed files with 117 additions and 20 deletions
|
@ -3,5 +3,5 @@ root = true
|
|||
[*]
|
||||
indent_style = space
|
||||
|
||||
[*.{svelte,ts,json}]
|
||||
[*.{svelte,ts,json,rst}]
|
||||
indent_size = 2
|
||||
|
|
1
compile-database/.gitignore
vendored
Normal file
1
compile-database/.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
/test.db
|
14
compile-database/db.ts
Normal file
14
compile-database/db.ts
Normal file
|
@ -0,0 +1,14 @@
|
|||
import { Sequelize, Model, DataTypes } from "sequelize";
|
||||
|
||||
class Page extends Model {}
|
||||
|
||||
export async function init(path: string) {
|
||||
let sequelize = new Sequelize(`sqlite:${path}`);
|
||||
|
||||
Page.init({
|
||||
|
||||
}, { sequelize, modelName: "page" });
|
||||
|
||||
await sequelize.sync();
|
||||
return sequelize;
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
import { readdir, readFile } from "fs/promises";
|
||||
import { join } from "path";
|
||||
import * as yaml from "js-yaml";
|
||||
|
||||
import { init } from "./db";
|
||||
|
||||
class Page {
|
||||
}
|
||||
|
||||
async function main() {
|
||||
// TODO: configure this thru cmdline or something later
|
||||
let materials_dir = "../material";
|
||||
let db_file = "test.db";
|
||||
|
||||
let db = await init(db_file);
|
||||
|
||||
let names = await readdir(materials_dir);
|
||||
|
||||
await Promise.all(names
|
||||
.filter(name => name.toLowerCase().endsWith(".yml"))
|
||||
.map(async name => {
|
||||
let path = join(materials_dir, name);
|
||||
let rawData = await readFile(path, { encoding: "utf8" });
|
||||
let parsedData = yaml.load(rawData);
|
||||
console.log("data", parsedData);
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
main();
|
|
@ -1,6 +1,14 @@
|
|||
{
|
||||
"name": "compile-database",
|
||||
"scripts": {
|
||||
"start": "ts-node index.ts"
|
||||
},
|
||||
"devDependencies": {
|
||||
"ts-node": "^10.2.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"js-yaml": "^4.1.0",
|
||||
"sequelize": "^6.6.5",
|
||||
"sqlite3": "^5.0.2"
|
||||
}
|
||||
}
|
||||
|
|
5
compile-database/tsconfig.json
Normal file
5
compile-database/tsconfig.json
Normal file
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"compilerOptions": {
|
||||
"experimentalDecorators": true
|
||||
}
|
||||
}
|
|
@ -1,19 +1,2 @@
|
|||
material
|
||||
===
|
||||
|
||||
This directory contains the material that's used in eduproj. The documents are
|
||||
all written using restructured text, chosen over markdown for its ability to
|
||||
specify more structured data while still appearing readable to humans.
|
||||
|
||||
Recognized fields
|
||||
---
|
||||
|
||||
General fields:
|
||||
|
||||
- `:title:` specifies the title that will be used when rendering it to a page.
|
||||
|
||||
- `:summary:` is a paragraph-long description of what the topic being discussed
|
||||
is, and will be included in hover boxes or info boxes when included in other
|
||||
pages.
|
||||
|
||||
|
||||
|
|
4
material/fp-course.yml
Normal file
4
material/fp-course.yml
Normal file
|
@ -0,0 +1,4 @@
|
|||
title: Functional Programming Basics
|
||||
content: |
|
||||
This listing contains some of the basics of functional programming.
|
||||
|
33
material/fp-function.yml
Normal file
33
material/fp-function.yml
Normal file
|
@ -0,0 +1,33 @@
|
|||
title: Functions
|
||||
summary: |
|
||||
Functions describe a process of turning *inputs* into *outputs*.
|
||||
|
||||
content: |
|
||||
In a purely mathematical setting, functions typically have one input and one
|
||||
output, but in functional programming, we can usually get around this either
|
||||
by using [tuples][1] or by [currying][2].
|
||||
|
||||
[1]: page://tuples
|
||||
[2]: page://currying
|
||||
|
||||
exercises:
|
||||
|
||||
- description: |
|
||||
Write a function called `doubleIt` that takes an integer and doubles it.
|
||||
|
||||
examples:
|
||||
ocaml:
|
||||
- |
|
||||
|
||||
grader:
|
||||
ocaml:
|
||||
style: studentModule
|
||||
props:
|
||||
interface: |
|
||||
val doubleIt : int -> int
|
||||
driver: |
|
||||
open List
|
||||
let () = List.iter
|
||||
(fun x -> assert ((doubleIt x) = (x * 2)))
|
||||
(List.init 100 (fun x -> x + 1));
|
||||
|
|
@ -1,9 +1,11 @@
|
|||
concepts:
|
||||
- learning targets
|
||||
- can relate to other concepts in the following ways:
|
||||
- concept A "depends" on concept B; explaining concept A requires some information from concept B
|
||||
- concept A "depends" on concept B; explaining concept A requires some
|
||||
information from concept B
|
||||
- concept A "optdepends" on concept B
|
||||
- concept A "satisfies" concept B; mastery of concept A implies mastery of concept B
|
||||
- concept A "satisfies" concept B; mastery of concept A implies mastery of
|
||||
concept B
|
||||
|
||||
topics:
|
||||
- groups of concepts
|
||||
|
@ -15,3 +17,20 @@ each user has a mastery level for each concept
|
|||
|
||||
references:
|
||||
- super memo algorithm used by anki: https://en.wikipedia.org/wiki/SuperMemo#Description_of_SM-2_algorithm
|
||||
|
||||
---
|
||||
|
||||
ocaml should have a runner studentModule, which just puts the student code into
|
||||
a file called student.ml
|
||||
|
||||
the material file defines a student.mli, as well as a driver.ml, then they all
|
||||
get called using:
|
||||
|
||||
```
|
||||
ocamlc -c student.mli # produces student.cmi
|
||||
ocamlc -c student.ml # produces student.cmo
|
||||
ocaml student.cmo driver.ml
|
||||
```
|
||||
|
||||
probably should have like $OCAMLCFLAGS in there to be able to customize each
|
||||
step as well
|
Loading…
Reference in a new issue