Browse Source

Moving the API out so it's not included in the sapper build.

pull/23/head
Zed A. Shaw 1 month ago
parent
commit
744892907c
34 changed files with 20 additions and 60 deletions
  1. +1
    -1
      db/live/streams/20200410-drawing-basics.md
  2. +0
    -13
      db/videos/drawing_basics/01_Sight_Sized.json
  3. +11
    -11
      generator.js
  4. +2
    -2
      lib/buildrules.js
  5. +4
    -4
      notes/generator.md
  6. +0
    -1
      static/api/blog/index.json
  7. +0
    -1
      static/api/blog/posts/01-first-blog-post.json
  8. +0
    -1
      static/api/blog/posts/02-svelte-and-sapper-so-far.json
  9. +0
    -1
      static/api/games/0.json
  10. +0
    -1
      static/api/games/1.json
  11. +0
    -1
      static/api/live/index.json
  12. +0
    -1
      static/api/live/streams/20200410-drawing-basics.json
  13. +0
    -1
      static/api/live/streams/20200417-html-basics-tags.json
  14. +0
    -1
      static/api/modules/drawing_basics/exercises/01-sight-sized.json
  15. +0
    -1
      static/api/modules/drawing_basics/index.json
  16. +0
    -1
      static/api/modules/html_basics/exercises/01-intro.json
  17. +0
    -1
      static/api/modules/html_basics/exercises/02-attributes.json
  18. +0
    -1
      static/api/modules/html_basics/exercises/03-links.json
  19. +0
    -1
      static/api/modules/html_basics/exercises/04-html5.json
  20. +0
    -1
      static/api/modules/html_basics/exercises/05-major-tags.json
  21. +0
    -1
      static/api/modules/html_basics/exercises/06-major-attributes.json
  22. +0
    -1
      static/api/modules/html_basics/exercises/07-layout-tags.json
  23. +0
    -1
      static/api/modules/html_basics/exercises/08-tables.json
  24. +0
    -1
      static/api/modules/html_basics/exercises/09-forms.json
  25. +0
    -1
      static/api/modules/html_basics/exercises/10-forbidden-tags.json
  26. +0
    -1
      static/api/modules/html_basics/exercises/11-custom-tags.json
  27. +0
    -1
      static/api/modules/html_basics/exercises/12-final-exam.json
  28. +0
    -1
      static/api/modules/html_basics/index.json
  29. +0
    -1
      static/api/modules/index.json
  30. +0
    -1
      static/api/slides/1.json
  31. +0
    -1
      static/api/videos/Drawing_Basics_01_Sight_Sized.json
  32. +0
    -1
      static/api/videos/drawing_basics/01_Sight_Sized.json
  33. +1
    -1
      static/feed.atom
  34. +1
    -1
      static/feed.rss

+ 1
- 1
db/live/streams/20200410-drawing-basics.md View File

@@ -6,7 +6,7 @@
"summary": "I go through some basics of learning to draw.",
"video": {
"src": "/media/videos/drawing_basics/Drawing_Basics_01_Sight_Sized.webm",
"poster": "/media/thumbs/400/drawing_basics/01_Sight_Sized.jpg",
"poster": "/media/thumbs/400/drawing_basics/Drawing_Basics_01_Sight_Sized.jpg",
"preload": "none"
}
}

+ 0
- 13
db/videos/drawing_basics/01_Sight_Sized.json View File

@@ -1,13 +0,0 @@
{
"id": 10,
"torrent_url": "/torrents/drawing_basics_01_sight_sized.torrent",
"title": "Drawing Basics #1 -- Sight Sized",
"short_description": "In this video I show you the basics of sight sized drawing and the basic terminology for the rest of the course.",
"tags": "#art #drawing",
"published_on": "2020",
"covers": {"small":"/media/video_stills/thumbs/128/drawing_basics/01_sight_sized.jpg","medium":"/media/video_stills/thumbs/400/drawing_basics/01_sight_sized.jpg","large":"/media/video_stills/thumbs/1024/drawing_basics/01_sight_sized.jpg"},
"quality": "2160p",
"url": "/media/videos/drawing_basics/01_sight_sized.mp4"
}



+ 11
- 11
generator.js View File

@@ -14,11 +14,11 @@ const watch = require('watch');


const facts = {
api: build.from_to("db/", "**/*.json", "static/api/", "**/*.json", build.with_extension),
api: build.from_to("db/", "**/*.json", "protected/api/", "**/*.json", build.with_extension),
blog: build.from_to("db/blog/", "**/*.md", "protected/media/blog/", "**/*.html"),
live: build.from_to("db/live/", "**/*.md", "protected/media/live/", "**/*.html"),
modules: build.from_to("db/modules/", "**/*.md", "protected/media/modules/", "**/*.html"),
videos: build.from_to("protected/media/videos/", "**/*.mp4",
videos: build.from_to("protected/media/videos/", "**/*.webm",
"protected/media/video_stills/", "**/*.jpg"),
}

@@ -66,8 +66,8 @@ const needs_live_streams = build.rule('live needs to be updated',
const need_live_index = build.rule('update the live index', {
when: f => f.live.updated,
then: f => {
let index = build.index_rollup('db/live/index.json', 'static/api/live/index.json',
'static/api/live/streams/*.json', 'streams');
let index = build.index_rollup('db/live/index.json', 'protected/api/live/index.json',
'protected/api/live/streams/*.json', 'streams');

log.debug("Adding streams to feed", index.streams);
index.streams.forEach(stream => {
@@ -90,8 +90,8 @@ const need_live_index = build.rule('update the live index', {
const need_blog_index = build.rule('create the blog index', {
when: f => f.blog.updated,
then: f => {
let index = build.index_rollup('db/blog/index.json', 'static/api/blog/index.json',
'static/api/blog/posts/*.json', 'posts');
let index = build.index_rollup('db/blog/index.json', 'protected/api/blog/index.json',
'protected/api/blog/posts/*.json', 'posts');

let posts = index.posts;
delete index[posts]; // clear these out for the feed generator
@@ -122,12 +122,12 @@ const need_modules_index = build.rule('create the modules index', {
when: f => f.modules.updated,
then: async (f) => {
let master_index = [];
let dir = await fs.promises.opendir('static/api/modules');
let dir = await fs.promises.opendir('protected/api/modules');
for await(let dirent of dir) {
if(dirent.isDirectory()) {
let index = build.index_rollup(`db/modules/${dirent.name}/index.json`,
`static/api/modules/${dirent.name}/index.json`,
`static/api/modules/${dirent.name}/exercises/*.json`,
`protected/api/modules/${dirent.name}/index.json`,
`protected/api/modules/${dirent.name}/exercises/*.json`,
'exercises');
// TODO: I mean...I don't think this would get *that* big so we could just consolidate
// but for now I'll remove them and keep it slim
@@ -136,7 +136,7 @@ const need_modules_index = build.rule('create the modules index', {
}
}

build.write('static/api/modules/index.json', JSON.stringify(master_index));
build.write('protected/api/modules/index.json', JSON.stringify(master_index));
}
});

@@ -223,7 +223,7 @@ const need_video_data = build.rule('video info written', {
log.error("No description information found at", md_json_path);
}

build.write(`static/api/videos/${t.tail_no_ext}.json`, JSON.stringify(t.json));
build.write(`protected/api/videos/${t.tail_no_ext}.json`, JSON.stringify(t.json));
}
}
});

+ 2
- 2
lib/buildrules.js View File

@@ -17,7 +17,7 @@ const markdown = (key, base_url_filter) => {
metadata.slug = t.stem;
build.write(`protected/media/${key}/${t.tail_no_ext}.html`, content);
build.write(
`static/api/${key}/${t.tail_no_ext}.json`,
`protected/api/${key}/${t.tail_no_ext}.json`,
JSON.stringify( { toc, metadata} ));
}

@@ -33,7 +33,7 @@ const copy = (key, filter) => {
let targets = _.concat(f[key].changed, f[key].missing).filter(f => !f.path.includes('proto'));
for(let t of targets) {
log.debug(`Convert ${t.path} to ${t.other ? t.other.path : "COPY"} with tail ${t.tail_no_ext}`);
let dest = `static/api/${t.tail}`;
let dest = `protected/api/${t.tail}`;
if(filter) {
build.copy(t.path, dest, (src, dest, data) => filter(t, data));
} else {

+ 4
- 4
notes/generator.md View File

@@ -7,13 +7,13 @@ The model is there are 3 directories:

1. db -- This is source material and does not go on the internet. It has json, markdown, and anything else that is used to generate the other directories.
2. media -- This is where some generated content from db goes for distribution to the internet, but it also houses large video and image files for proformance reasons. This is on the internet, but usually protected from people who are not logged in.
3. static/api -- This is publicly accessible metadata about the content and can be served static to the internet. It gets generated from db and media to produce json files *only*.
3. protected/api -- This is publicly accessible metadata about the content and can be served static to the internet. It gets generated from db and media to produce json files *only*.

Examples of processing:

* markdown -- db/X/file.md -> static/api/X/file.json & media/X/file.html
* videos -- db/videos/file.json + media/videos/file.webm/mp4 -> static/api/videos/file.json
* json -- db/content/data.json -> static/api/content/data.json : straight copy but maybe more added
* markdown -- db/X/file.md -> protected/api/X/file.json & media/X/file.html
* videos -- db/videos/file.json + media/videos/file.webm/mp4 -> protected/api/videos/file.json
* json -- db/content/data.json -> protected/api/content/data.json : straight copy but maybe more added

One current problem is the content in media is hosted directly so there's no /media in URLs, which makes it conflict with the app's URLs, and sirv seems to be unable to add a directory to a prefix path. Based on that I'll move media to protected/media in the next round.


+ 0
- 1
static/api/blog/index.json View File

@@ -1 +0,0 @@
{"title":"Learn JavaScript the Hard Way","description":"The blog for the Learn JavaScript the Hard Way course.","id":"https://learnjsthehardway.com/","link":"https://learnjsthehardway.com/","language":"en","image":"https://learnjsthehardway.com/zed_small.jpg","favicon":"https://learnjsthehardway.com/favicon.ico","copyright":"All rights reserved 2019 and beyond, Zed A. Shaw","generator":"LJSTHW Custom Generator","feedLinks":{"json":"https://learnjsthehardway.com/feed.json","atom":"https://learnjsthehardway.com/feed.atom","rss":"https://learnjsthehardway.com/feed.rss"},"author":{"name":"Zed A. Shaw","email":"zed@learnjsthehardway.com","link":"https://learnjsthehardway.com/about"},"posts":[{"toc":[{"level":1,"content":"The First Real Blog Post","slug":"the-first-real-blog-post","html":"The First Real Blog Post"},{"level":2,"content":"Enough with the Bureaucracy, Web Frameworks","slug":"enough-with-the-bureaucracy-web-frameworks","html":"Enough with the Bureaucracy, Web Frameworks"},{"level":2,"content":"UI First Development","slug":"ui-first-development","html":"UI First Development"},{"level":2,"content":"Close, But Not Perfect","slug":"close-but-not-perfect","html":"Close, But Not Perfect"},{"level":2,"content":"What's Working","slug":"what-s-working","html":"What's Working"},{"level":2,"content":"Bug Reports","slug":"bug-reports","html":"Bug Reports"}],"metadata":{"author":"Zed A. Shaw","date":"Apr 10, 2020","has_image":true,"summary":"A new kind of blog post for a new kind of blog.","title":"The First Real Blog Post","slug":"01-first-blog-post"}},{"toc":[{"level":1,"content":"Svelte and Sapper So Far","slug":"svelte-and-sapper-so-far","html":"Svelte and Sapper So Far"}],"metadata":{"author":"Zed A. Shaw","date":"Apr 11, 2020","has_image":true,"summary":"How is Svelte and Sapper working for this website.","title":"Svelte and Sapper So Far","slug":"02-svelte-and-sapper-so-far"}}]}

+ 0
- 1
static/api/blog/posts/01-first-blog-post.json View File

@@ -1 +0,0 @@
{"toc":[{"level":1,"content":"The First Real Blog Post","slug":"the-first-real-blog-post","html":"The First Real Blog Post"},{"level":2,"content":"Enough with the Bureaucracy, Web Frameworks","slug":"enough-with-the-bureaucracy-web-frameworks","html":"Enough with the Bureaucracy, Web Frameworks"},{"level":2,"content":"UI First Development","slug":"ui-first-development","html":"UI First Development"},{"level":2,"content":"Close, But Not Perfect","slug":"close-but-not-perfect","html":"Close, But Not Perfect"},{"level":2,"content":"What's Working","slug":"what-s-working","html":"What's Working"},{"level":2,"content":"Bug Reports","slug":"bug-reports","html":"Bug Reports"}],"metadata":{"author":"Zed A. Shaw","date":"Apr 10, 2020","has_image":true,"summary":"A new kind of blog post for a new kind of blog.","title":"The First Real Blog Post","slug":"01-first-blog-post"}}

+ 0
- 1
static/api/blog/posts/02-svelte-and-sapper-so-far.json View File

@@ -1 +0,0 @@
{"toc":[{"level":1,"content":"Svelte and Sapper So Far","slug":"svelte-and-sapper-so-far","html":"Svelte and Sapper So Far"}],"metadata":{"author":"Zed A. Shaw","date":"Apr 11, 2020","has_image":true,"summary":"How is Svelte and Sapper working for this website.","title":"Svelte and Sapper So Far","slug":"02-svelte-and-sapper-so-far"}}

+ 0
- 1
static/api/games/0.json View File

@@ -1 +0,0 @@
undefined

+ 0
- 1
static/api/games/1.json View File

@@ -1 +0,0 @@
undefined

+ 0
- 1
static/api/live/index.json View File

@@ -1 +0,0 @@
{"title":"Learn JavaScript the Hard Way - Live","description":"JavaScript live streams by Zed A. Shaw.","id":"https://learnjsthehardway.com/live/","link":"https://learnjsthehardway.com/live/","language":"en","image":"https://learnjsthehardway.com/zed_small.jpg","favicon":"https://learnjsthehardway.com/favicon.ico","copyright":"All rights reserved 2019 and beyond, Zed A. Shaw","generator":"LJSTHW Custom Generator","feedLinks":{"json":"https://learnjsthehardway.com/feed.json","atom":"https://learnjsthehardway.com/feed.atom","rss":"https://learnjsthehardway.com/feed.rss"},"author":{"name":"Zed A. Shaw","email":"zed@learnjsthehardway.com","link":"https://learnjsthehardway.com/about"},"streams":[{"toc":[{"level":1,"content":"Drawing Basics: Sight Sized","slug":"drawing-basics-sight-sized","html":"Drawing Basics: Sight Sized"}],"metadata":{"author":"Zed A. Shaw","date":"Apr 13, 2020","id":"20200413","state":"done","summary":"I go through some basics of learning to draw.","video":{"src":"/media/videos/drawing_basics/Drawing_Basics_01_Sight_Sized.webm","poster":"/media/thumbs/400/drawing_basics/01_Sight_Sized.jpg","preload":"none"},"title":"Drawing Basics: Sight Sized","slug":"20200410-drawing-basics"}},{"toc":[{"level":1,"content":"HTML Basics: Tags","slug":"html-basics-tags","html":"HTML Basics: Tags"},{"level":2,"content":"Goal","slug":"goal","html":"Goal"}],"metadata":{"author":"Zed A. Shaw","date":"Apr 17, 2020 14:00:00 EST","id":"20200417","state":"published","summary":"I get your started with the basics of HTML files and explain tags.","title":"HTML Basics: Tags","slug":"20200417-html-basics-tags"}}]}

+ 0
- 1
static/api/live/streams/20200410-drawing-basics.json View File

@@ -1 +0,0 @@
{"toc":[{"level":1,"content":"Drawing Basics: Sight Sized","slug":"drawing-basics-sight-sized","html":"Drawing Basics: Sight Sized"}],"metadata":{"author":"Zed A. Shaw","date":"Apr 13, 2020","id":"20200413","state":"done","summary":"I go through some basics of learning to draw.","video":{"src":"/media/videos/drawing_basics/Drawing_Basics_01_Sight_Sized.webm","poster":"/media/thumbs/400/drawing_basics/01_Sight_Sized.jpg","preload":"none"},"title":"Drawing Basics: Sight Sized","slug":"20200410-drawing-basics"}}

+ 0
- 1
static/api/live/streams/20200417-html-basics-tags.json View File

@@ -1 +0,0 @@
{"toc":[{"level":1,"content":"HTML Basics: Tags","slug":"html-basics-tags","html":"HTML Basics: Tags"},{"level":2,"content":"Goal","slug":"goal","html":"Goal"}],"metadata":{"author":"Zed A. Shaw","date":"Apr 17, 2020 14:00:00 EST","id":"20200417","state":"published","summary":"I get your started with the basics of HTML files and explain tags.","title":"HTML Basics: Tags","slug":"20200417-html-basics-tags"}}

+ 0
- 1
static/api/modules/drawing_basics/exercises/01-sight-sized.json View File

@@ -1 +0,0 @@
{"toc":[{"level":1,"content":"Sight Sized Drawing","slug":"sight-sized-drawing","html":"Sight Sized Drawing"}],"metadata":{"author":"Zed A. Shaw","date":"Mar 25, 2020","module":"/modules/drawin_basics","id":1,"title":"Sight Sized Drawing","completed":false,"image":"/media/thumbs/800/drawing_basics/01_Sight_Sized.jpg","summary":"The first lesson where you learn about basic drawing terms and how to do sight sized drawing.","video":{"src":"/media/videos/drawing_basics/Drawing_Basics_01_Sight_Sized.webm","poster":"/media/thumbs/400/drawing_basics/01_Sight_Sized.jpg","preload":"none"},"slug":"01-sight-sized"}}

+ 0
- 1
static/api/modules/drawing_basics/index.json View File

@@ -1 +0,0 @@
{"author":"Zed A. Shaw","date":"Mar 25, 2020","url":"/modules/drawing_basics","slug":"drawing_basics","title":"Drawing Basics","status":"draft","tag":"what","subtitle":"Learn just enough drawing to be deadly.","summary":"An introduction to drawing with pencil and digitally to get an understanding of it for the web.","exercises":[{"toc":[{"level":1,"content":"Sight Sized Drawing","slug":"sight-sized-drawing","html":"Sight Sized Drawing"}],"metadata":{"author":"Zed A. Shaw","date":"Mar 25, 2020","module":"/modules/drawin_basics","id":1,"title":"Sight Sized Drawing","completed":false,"image":"/media/thumbs/800/drawing_basics/01_Sight_Sized.jpg","summary":"The first lesson where you learn about basic drawing terms and how to do sight sized drawing.","video":{"src":"/media/videos/drawing_basics/Drawing_Basics_01_Sight_Sized.webm","poster":"/media/thumbs/400/drawing_basics/01_Sight_Sized.jpg","preload":"none"},"slug":"01-sight-sized"}}]}

+ 0
- 1
static/api/modules/html_basics/exercises/01-intro.json View File

@@ -1 +0,0 @@
{"toc":[{"level":1,"content":"01: Tags","slug":"01-tags","html":"01: Tags"},{"level":2,"content":"What _Is_ HTML?","slug":"what-is-html","html":"What <em>Is</em> HTML?"},{"level":2,"content":"What Does HTML _Code_ Look Like?","slug":"what-does-html-code-look-like","html":"What Does HTML <em>Code</em> Look Like?"},{"level":3,"content":"Breaking It Down","slug":"breaking-it-down","html":"Breaking It Down"},{"level":2,"content":"Programmers _Love_ Nesting","slug":"programmers-love-nesting","html":"Programmers <em>Love</em> Nesting"},{"level":2,"content":"A Complete HTML Page","slug":"a-complete-html-page","html":"A Complete HTML Page"},{"level":2,"content":"About The Video","slug":"about-the-video","html":"About The Video"}],"metadata":{"author":"Zed A. Shaw","date":"Mar 25, 2020","module":"/modules/html_basics","id":1,"completed":false,"image":"/images/hero-holder.svg","summary":"This will first introduce some basic terminology for HTML.","title":"01: Tags","slug":"01-intro"}}

+ 0
- 1
static/api/modules/html_basics/exercises/02-attributes.json View File

@@ -1 +0,0 @@
{"toc":[{"level":1,"content":"02: Attributes","slug":"02-attributes","html":"02: Attributes"}],"metadata":{"author":"Zed A. Shaw","date":"Mar 25, 2020","module":"/modules/html_basics","id":2,"completed":false,"image":"/images/hero-holder.svg","summary":"Learn about how attributes modify tags, and aren't used much anymore.","title":"02: Attributes","slug":"02-attributes"}}

+ 0
- 1
static/api/modules/html_basics/exercises/03-links.json View File

@@ -1 +0,0 @@
{"toc":[{"level":1,"content":"03: Links","slug":"03-links","html":"03: Links"}],"metadata":{"author":"Zed A. Shaw","date":"Mar 25, 2020","module":"/modules/html_basics","id":3,"completed":false,"image":"/images/hero-holder.svg","summary":"Learn how to link to another HTML document.","title":"03: Links","slug":"03-links"}}

+ 0
- 1
static/api/modules/html_basics/exercises/04-html5.json View File

@@ -1 +0,0 @@
{"toc":[{"level":1,"content":"04: HTML5 Files","slug":"04-html5-files","html":"04: HTML5 Files"}],"metadata":{"author":"Zed A. Shaw","date":"Mar 25, 2020","module":"/modules/html_basics","id":1,"completed":false,"image":"/images/hero-holder.svg","summary":"Special considerations for a modern HTML5 file.","title":"04: HTML5 Files","slug":"04-html5"}}

+ 0
- 1
static/api/modules/html_basics/exercises/05-major-tags.json View File

@@ -1 +0,0 @@
{"toc":[{"level":1,"content":"05: Major Tags","slug":"05-major-tags","html":"05: Major Tags"}],"metadata":{"author":"Zed A. Shaw","date":"Mar 25, 2020","module":"/modules/html_basics","id":1,"completed":false,"image":"/images/hero-holder.svg","summary":"A quick reference of the major HTML tags you'll use the most.","title":"05: Major Tags","slug":"05-major-tags"}}

+ 0
- 1
static/api/modules/html_basics/exercises/06-major-attributes.json View File

@@ -1 +0,0 @@
{"toc":[{"level":1,"content":"06: Major Attributes","slug":"06-major-attributes","html":"06: Major Attributes"}],"metadata":{"author":"Zed A. Shaw","date":"Mar 25, 2020","module":"/modules/html_basics","id":1,"completed":false,"image":"/images/hero-holder.svg","summary":"A list of the major attributes on tags you'll most likely use.","title":"06: Major Attributes","slug":"06-major-attributes"}}

+ 0
- 1
static/api/modules/html_basics/exercises/07-layout-tags.json View File

@@ -1 +0,0 @@
{"toc":[{"level":1,"content":"07: Layout Tags","slug":"07-layout-tags","html":"07: Layout Tags"}],"metadata":{"author":"Zed A. Shaw","date":"Mar 25, 2020","module":"/modules/html_basics","id":1,"completed":false,"image":"/images/hero-holder.svg","summary":"Focus on tags that are mostly for layout and design, not information.","title":"07: Layout Tags","slug":"07-layout-tags"}}

+ 0
- 1
static/api/modules/html_basics/exercises/08-tables.json View File

@@ -1 +0,0 @@
{"toc":[{"level":1,"content":"08: Tables","slug":"08-tables","html":"08: Tables"}],"metadata":{"author":"Zed A. Shaw","date":"Mar 25, 2020","module":"/modules/html_basics","id":1,"completed":false,"image":"/images/hero-holder.svg","summary":"Focus on tables for tabular data.","title":"08: Tables","slug":"08-tables"}}

+ 0
- 1
static/api/modules/html_basics/exercises/09-forms.json View File

@@ -1 +0,0 @@
{"toc":[{"level":1,"content":"09: Forms","slug":"09-forms","html":"09: Forms"}],"metadata":{"author":"Zed A. Shaw","date":"Mar 25, 2020","module":"/modules/html_basics","id":9,"completed":false,"image":"/images/hero-holder.svg","summary":"Focus on forms for collecting information from the user and submitting it.","title":"09: Forms","slug":"09-forms"}}

+ 0
- 1
static/api/modules/html_basics/exercises/10-forbidden-tags.json View File

@@ -1 +0,0 @@
{"toc":[{"level":1,"content":"02: Forbidden Tags","slug":"02-forbidden-tags","html":"02: Forbidden Tags"}],"metadata":{"author":"Zed A. Shaw","date":"Mar 25, 2020","module":"/modules/html_basics","id":1,"completed":false,"image":"/images/hero-holder.svg","summary":"A compendium of fun but hilariously forbidden tags.","title":"02: Forbidden Tags","slug":"10-forbidden-tags"}}

+ 0
- 1
static/api/modules/html_basics/exercises/11-custom-tags.json View File

@@ -1 +0,0 @@
{"toc":[{"level":1,"content":"11: Custom Tags","slug":"11-custom-tags","html":"11: Custom Tags"}],"metadata":{"author":"Zed A. Shaw","date":"Mar 25, 2020","module":"/modules/html_basics","id":1,"completed":false,"image":"/images/hero-holder.svg","summary":"An explanation of using your own tags, and why it's not common.","title":"11: Custom Tags","slug":"11-custom-tags"}}

+ 0
- 1
static/api/modules/html_basics/exercises/12-final-exam.json View File

@@ -1 +0,0 @@
{"toc":[{"level":1,"content":"12: Final Exam","slug":"12-final-exam","html":"12: Final Exam"}],"metadata":{"author":"Zed A. Shaw","date":"Mar 25, 2020","module":"/modules/html_basics","id":1,"completed":false,"image":"/images/hero-holder.svg","summary":"A set of exercises to test your knowledge so far.","title":"12: Final Exam","slug":"12-final-exam"}}

+ 0
- 1
static/api/modules/html_basics/index.json
File diff suppressed because it is too large
View File


+ 0
- 1
static/api/modules/index.json View File

@@ -1 +0,0 @@
[{"author":"Zed A. Shaw","date":"Mar 25, 2020","url":"/modules/drawing_basics","slug":"drawing_basics","title":"Drawing Basics","status":"draft","tag":"what","subtitle":"Learn just enough drawing to be deadly.","summary":"An introduction to drawing with pencil and digitally to get an understanding of it for the web."},{"author":"Zed A. Shaw","date":"Mar 25, 2020","url":"/modules/html_basics","slug":"html_basics","title":"HTML Basics","status":"draft","tag":"what","subtitle":"Start here if you know nothing.","summary":"An introduction to basic HTML for the web."}]

+ 0
- 1
static/api/slides/1.json View File

@@ -1 +0,0 @@
undefined

+ 0
- 1
static/api/videos/Drawing_Basics_01_Sight_Sized.json View File

@@ -1 +0,0 @@
{"probe":{"streams":[{"index":0,"codec_name":"h264","codec_long_name":"H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10","profile":"High","codec_type":"video","codec_time_base":"1/48","codec_tag_string":"avc1","codec_tag":"0x31637661","width":3840,"height":2160,"coded_width":3840,"coded_height":2160,"has_b_frames":2,"sample_aspect_ratio":"1:1","display_aspect_ratio":"16:9","pix_fmt":"yuv420p","level":60,"chroma_location":"left","refs":1,"is_avc":"true","nal_length_size":"4","r_frame_rate":"24/1","avg_frame_rate":"24/1","time_base":"1/12288","start_pts":0,"start_time":"0.000000","duration_ts":45864960,"duration":"3732.500000","bit_rate":"799759","bits_per_raw_sample":"8","nb_frames":"89580","disposition":{"default":1,"dub":0,"original":0,"comment":0,"lyrics":0,"karaoke":0,"forced":0,"hearing_impaired":0,"visual_impaired":0,"clean_effects":0,"attached_pic":0,"timed_thumbnails":0},"tags":{"language":"eng","handler_name":"VideoHandler","timecode":"01:00:00:00"}},{"index":1,"codec_name":"aac","codec_long_name":"AAC (Advanced Audio Coding)","profile":"LC","codec_type":"audio","codec_time_base":"1/48000","codec_tag_string":"mp4a","codec_tag":"0x6134706d","sample_fmt":"fltp","sample_rate":"48000","channels":2,"channel_layout":"stereo","bits_per_sample":0,"r_frame_rate":"0/0","avg_frame_rate":"0/0","time_base":"1/48000","start_pts":0,"start_time":"0.000000","duration_ts":179160000,"duration":"3732.500000","bit_rate":"126959","max_bit_rate":"128000","nb_frames":"174962","disposition":{"default":1,"dub":0,"original":0,"comment":0,"lyrics":0,"karaoke":0,"forced":0,"hearing_impaired":0,"visual_impaired":0,"clean_effects":0,"attached_pic":0,"timed_thumbnails":0},"tags":{"language":"eng","handler_name":"SoundHandler"}},{"index":2,"codec_type":"data","codec_tag_string":"tmcd","codec_tag":"0x64636d74","r_frame_rate":"0/0","avg_frame_rate":"24/1","time_base":"1/12288","start_pts":0,"start_time":"0.000000","duration_ts":45864960,"duration":"3732.500000","nb_frames":"1","disposition":{"default":0,"dub":0,"original":0,"comment":0,"lyrics":0,"karaoke":0,"forced":0,"hearing_impaired":0,"visual_impaired":0,"clean_effects":0,"attached_pic":0,"timed_thumbnails":0},"tags":{"language":"eng","handler_name":"VideoHandler","timecode":"01:00:00:00"}}],"format":{"filename":"./protected/media/videos/Drawing_Basics_01_Sight_Sized.mp4","nb_streams":3,"nb_programs":0,"format_name":"mov,mp4,m4a,3gp,3g2,mj2","format_long_name":"QuickTime / MOV","start_time":"0.000000","duration":"3732.522000","size":"434658077","bit_rate":"931612","probe_score":100,"tags":{"major_brand":"isom","minor_version":"512","compatible_brands":"isomiso2avc1mp41","encoder":"Lavf58.29.100"}}},"slug":"Drawing_Basics_01_Sight_Sized.mp4","still":"/media/video_stills/Drawing_Basics_01_Sight_Sized.jpg","thumbs":{"128":{"size":128,"url":"/media/thumbs/128/Drawing_Basics_01_Sight_Sized.jpg"},"400":{"size":400,"url":"/media/thumbs/400/Drawing_Basics_01_Sight_Sized.jpg"},"800":{"size":800,"url":"/media/thumbs/800/Drawing_Basics_01_Sight_Sized.jpg"}}}

+ 0
- 1
static/api/videos/drawing_basics/01_Sight_Sized.json View File

@@ -1 +0,0 @@
{"probe":{"streams":[{"index":0,"codec_name":"h264","codec_long_name":"H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10","profile":"High","codec_type":"video","codec_time_base":"1/48","codec_tag_string":"avc1","codec_tag":"0x31637661","width":3840,"height":2160,"coded_width":3840,"coded_height":2160,"has_b_frames":2,"sample_aspect_ratio":"1:1","display_aspect_ratio":"16:9","pix_fmt":"yuv420p","level":60,"chroma_location":"left","refs":1,"is_avc":"true","nal_length_size":"4","r_frame_rate":"24/1","avg_frame_rate":"24/1","time_base":"1/12288","start_pts":0,"start_time":"0.000000","duration_ts":45864960,"duration":"3732.500000","bit_rate":"799759","bits_per_raw_sample":"8","nb_frames":"89580","disposition":{"default":1,"dub":0,"original":0,"comment":0,"lyrics":0,"karaoke":0,"forced":0,"hearing_impaired":0,"visual_impaired":0,"clean_effects":0,"attached_pic":0,"timed_thumbnails":0},"tags":{"language":"eng","handler_name":"VideoHandler","timecode":"01:00:00:00"}},{"index":1,"codec_name":"aac","codec_long_name":"AAC (Advanced Audio Coding)","profile":"LC","codec_type":"audio","codec_time_base":"1/48000","codec_tag_string":"mp4a","codec_tag":"0x6134706d","sample_fmt":"fltp","sample_rate":"48000","channels":2,"channel_layout":"stereo","bits_per_sample":0,"r_frame_rate":"0/0","avg_frame_rate":"0/0","time_base":"1/48000","start_pts":0,"start_time":"0.000000","duration_ts":179160000,"duration":"3732.500000","bit_rate":"126959","max_bit_rate":"128000","nb_frames":"174962","disposition":{"default":1,"dub":0,"original":0,"comment":0,"lyrics":0,"karaoke":0,"forced":0,"hearing_impaired":0,"visual_impaired":0,"clean_effects":0,"attached_pic":0,"timed_thumbnails":0},"tags":{"language":"eng","handler_name":"SoundHandler"}},{"index":2,"codec_type":"data","codec_tag_string":"tmcd","codec_tag":"0x64636d74","r_frame_rate":"0/0","avg_frame_rate":"24/1","time_base":"1/12288","start_pts":0,"start_time":"0.000000","duration_ts":45864960,"duration":"3732.500000","nb_frames":"1","disposition":{"default":0,"dub":0,"original":0,"comment":0,"lyrics":0,"karaoke":0,"forced":0,"hearing_impaired":0,"visual_impaired":0,"clean_effects":0,"attached_pic":0,"timed_thumbnails":0},"tags":{"language":"eng","handler_name":"VideoHandler","timecode":"01:00:00:00"}}],"format":{"filename":"./protected/media/videos/drawing_basics/01_Sight_Sized.mp4","nb_streams":3,"nb_programs":0,"format_name":"mov,mp4,m4a,3gp,3g2,mj2","format_long_name":"QuickTime / MOV","start_time":"0.000000","duration":"3732.522000","size":"434658077","bit_rate":"931612","probe_score":100,"tags":{"major_brand":"isom","minor_version":"512","compatible_brands":"isomiso2avc1mp41","encoder":"Lavf58.29.100"}}},"slug":"drawing_basics/01_Sight_Sized.mp4","still":"/media/video_stills/drawing_basics/01_Sight_Sized.jpg","thumbs":{"128":{"size":128,"url":"/media/thumbs/128/drawing_basics/01_Sight_Sized.jpg"},"400":{"size":400,"url":"/media/thumbs/400/drawing_basics/01_Sight_Sized.jpg"},"800":{"size":800,"url":"/media/thumbs/800/drawing_basics/01_Sight_Sized.jpg"}},"description":{"id":10,"torrent_url":"/torrents/drawing_basics_01_sight_sized.torrent","title":"Drawing Basics #1 -- Sight Sized","short_description":"In this video I show you the basics of sight sized drawing and the basic terminology for the rest of the course.","tags":"#art #drawing","published_on":"2020","covers":{"small":"/media/video_stills/thumbs/128/drawing_basics/01_sight_sized.jpg","medium":"/media/video_stills/thumbs/400/drawing_basics/01_sight_sized.jpg","large":"/media/video_stills/thumbs/1024/drawing_basics/01_sight_sized.jpg"},"quality":"2160p","url":"/media/videos/drawing_basics/01_sight_sized.mp4"}}

+ 1
- 1
static/feed.atom View File

@@ -2,7 +2,7 @@
<feed xmlns="http://www.w3.org/2005/Atom">
<id>https://learnjsthehardway.com/</id>
<title>Learn JavaScript the Hard Way</title>
<updated>2020-04-20T19:35:45.030Z</updated>
<updated>2020-04-20T20:00:53.366Z</updated>
<generator>LJSTHW Custom Generator</generator>
<author>
<name>Zed A. Shaw</name>

+ 1
- 1
static/feed.rss View File

@@ -4,7 +4,7 @@
<title>Learn JavaScript the Hard Way</title>
<link>https://learnjsthehardway.com/</link>
<description>The blog for the Learn JavaScript the Hard Way course.</description>
<lastBuildDate>Mon, 20 Apr 2020 19:35:45 GMT</lastBuildDate>
<lastBuildDate>Mon, 20 Apr 2020 20:00:53 GMT</lastBuildDate>
<docs>https://validator.w3.org/feed/docs/rss2.html</docs>
<generator>LJSTHW Custom Generator</generator>
<language>en</language>

Loading…
Cancel
Save