Making much progress.

This commit is contained in:
Elf M. Sternberg 2022-04-29 11:03:21 -07:00
parent e8041c74df
commit 47f16f0e30
9 changed files with 292 additions and 1 deletions

View File

@ -25,33 +25,50 @@ Zola itself. Eventually, though, I'm going to add whatever scraps I have lying
around for some, perhaps most, of the following topics, since I've worked in all
of them:
- .NET compilation chain
- Aloq
- Apache Configuration
- Assembly
- Audio & Music production
- Bash
- Bash Customization
- C
- C++
- CMake
- Clojure
- Cobol
- Django
- ESlint
- Emacs
- F#
- Git & Pre-Commit
- Go
- Graphic design
- HAML
- HTML & CSS
- Handbrake Cookbook
- Haskell
- ID3V2
- Imagemagick
- Javascript
- Kanren
- Kubernetes
- Linux Administration
- Linux Software Development
- Lisp
- Lit-HTML
- Machine learning
- Makefiles
- Markdown
- Mate / Gnome customization
- Nginx Configuration
- Org-mode
- Org mode
- PHP
- PNM Suite
- Perl
- Podman
- Prettier
- Prolog
- Python
- Rails
- React
@ -61,8 +78,10 @@ of them:
- SQL
- Sass
- Scheme
- Snobol
- Typescript
- Vite
- Wasm
- Web Components
- X86 Assembly
- XCB / X11 Systems Programming

7
TODO.org Normal file
View File

@ -0,0 +1,7 @@
* Organization
** TODO Figure out weight/taxonomy scheme for home page.
** TODO Implement multiple cards
** TODO Sidebar - what navigation should be in sidebar?
** TODO Menu - Megamenu on other pages, but always link back to home
*** Check out Asana's nifty morph in their mobile transition; looks like pure CSS

View File

@ -0,0 +1,90 @@
+++
title = "Git Notes"
description = "Basic documentation of Git"
date = 2022-04-27T18:00:00+00:00
updated = 2022-04-27T18:00:00+00:00
template = "docs/section.html"
sort_by = "weight"
weight = 6
draft = false
[taxonomies]
documentation=["Reference"]
categories=["Git", "Version Control", "VCS"]
+++
[Git](https://git-scm.com/) is the most widely used version control system (or
source configuration management) tool. Pretty much everything I do uses Git.
This is where I keep my notes on how to do things.
## Starting a project
Git is project and folder-centered, and to start using git go to the root folder
of a project you want to place under source control and initialize it:
```shell
$ mkdir a-new-project
$ git init
```
This creates a new folder, `.git`, where Git will store your commit history and
some configuration details.
## Putting files into git
To put files under source control, you must add them. To update the entire
folder, switch to the root of the project and add _all_ of it:
```shell
$ git add .
$ git commit
```
An editor will pop-up, asking you what this commit is about. It's generally
polite, especially if you're working in a team, to explain your commit in some
detail-- and to generally keep the commit small, in order to ensure that you
don't have to explain too much!
If your commit message could be a single line, you can add it directly from the
command line:
```shell
$ git add .
$ git commit -m "Updated the widget to widgetize."
```
... and you can even combine both commands, but be careful: this command will
not add any files that are new. It will only commit existing files that have
been modified, and will delete any files that you have deleted, from the
repository. (Deleted files still exist in the history and can always be
recovered.)
```shell
$ git commit -am "Updated the widget to widgetize."
```
## Git Configuration
You can have a global Git configuration file, `$HOME/\.gitconfig`, in which you
keep your personal information and command aliases, which is one of three ways
you can add your own commands to Git.
```shell
[user]
name = Elf M. Sternberg
email = someguy@example.com
[alias]
unstage = reset -q HEAD --
nevermind = !git reset --hard HEAD && git clean -d -f
wip = for-each-ref --sort='authordate:iso8601' --format='%(color:green)%(authordate:relative)%09%(color:white)%(refname:short)' refs/heads
stem = "!f() { git checkout -b $1 master; }; f"
start = !git init && git commit --allow-empty -m \"Initial commit\"
```
I'll explain each of these eventually, but for now, just know that if you want
your commits to be attributed to the right person, you must have the `[user]`
block, and

View File

@ -0,0 +1,67 @@
+++
title = "Zola Cookbook"
description = "Snippets I've developed that I want to keep"
date = 2022-04-27T18:00:00+00:00
updated = 2022-04-27T18:00:00+00:00
template = "docs/section.html"
sort_by = "weight"
weight = 5
draft = false
[taxonomies]
documentation=["Reference"]
categories=["Web Development", "Static Site Generation", "Zola"]
+++
[Zola](../zola) is the static site generator I use for most of my websites that
don't require much dynamic functionality.
## Generating Nested Lists from Data
Example data:
```html
{
"definitions": [
{ "dt": "undefined", "dd": " the thing is undefined." },
{ "dt": "defined", "dd": " the thing is defined.", definitions: [
{ "dt": "truthy", "dd": "the defined thing is truthy" },
{ "dt": "falsy", "dd": "the defined thing is falsy" }
]}
]
}
```
Tera macro to render a nested list:
```
{% macro definition_body(source) %}
<dl>
{% for entry in source %}
<dt><kbd>{{ entry.dt | safe }}</kbd></dt>
<dd>
{{ entry.dd | safe }}
{% if entry.definitions %}
{{ self::definition_body(source=entry.definitions) }}
{% endif %}
</dd>
{% endfor %}
</dl>
{% endmacro %}
```
Zola shortcode to import the macro template into Markdown and start the render:
```
{%- import 'macros/definition_body.html' as renderer -%}
<div>
{% set content = load_data(path=source) %}
{{ renderer::definition_body(source=content.definitions) }}
</div>
```
Invocation in Markdown file, providing the data source:
```
{{ definition_list(source="@/docs/zola/definitions.json") }}
```

View File

@ -107,6 +107,8 @@ Conditional statements are managed with `if/is ... else ... endif`
The list of `is` tests that are shipped with Zola are:
{{ definition_list(source="@/docs/zola/predicates.yaml") }}
- `defined`: the given variable is defined.
- `undefined`: the given variable is undefined.
- `odd`: the given variable is an odd number.

View File

@ -0,0 +1,40 @@
{
"definitions": [
{ "dt": "defined", "dd": " the given variable is defined." },
{ "dt": "undefined", "dd": " the given variable is undefined." },
{ "dt": "odd", "dd": " the given variable is an odd number." },
{ "dt": "even", "dd": " the given variable is an even number." },
{ "dt": "string", "dd": " the given variable is a string." },
{ "dt": "number", "dd": " the given variable is a number." },
{ "dt": "divisibleby", "dd": " the given expression is divisible by the arg given." },
{
"dt": "iterable",
"dd": " Returns true if the given variable can be iterated over in Tera (i.e. is an array/tuple or an object)."
},
{
"dt": "object",
"dd": " Returns true if the given variable is an object (i.e. can be iterated over key, value)."
},
{
"dt": "starting_with(string)",
"dd": " Returns true if the given variable is a string and starts with the arg given."
},
{
"dt": "ending_with(string)",
"dd": " Returns true if the given variable is a string and ends with the arg given."
},
{
"dt": "containing(val)",
"dd": " Returns true if the given variable contains the arg given.",
"definitions": [
{ "dt": "strings", "dd": " is the arg a substring?" },
{ "dt": "arrays", "dd": " is the arg one of the members of the array?" },
{ "dt": "maps", "dd": " is the arg a key of the map?" }
]
},
{
"dt": "matching(regexp)",
"dd": " Returns true if the given variable is a string and matches the regex in the argument."
}
]
}

View File

@ -0,0 +1,52 @@
---
definitions:
-
dt: "defined"
dd: " the given variable is defined."
-
dt: "undefined"
dd: " the given variable is undefined."
-
dt: "odd"
dd: " the given variable is an odd number."
-
dt: "even"
dd: " the given variable is an even number."
-
dt: "string"
dd: " the given variable is a string."
-
dt: "number"
dd: " the given variable is a number."
-
dt: "divisibleby"
dd: " the given expression is divisible by the arg given."
-
dt: "iterable"
dd: " Returns true if the given variable can be iterated over in Tera (i.e. is an array/tuple or an object)."
-
dt: "object"
dd: " Returns true if the given variable is an object (i.e. can be iterated over key, value)."
-
dt: "starting_with(string)"
dd: " Returns true if the given variable is a string and starts with the arg given."
-
dt: "ending_with(string)"
dd: " Returns true if the given variable is a string and ends with the arg given."
-
dt: "containing(val)"
dd: " Returns true if the given variable contains the arg given."
definitions:
-
dt: "strings"
dd: " is the arg a substring?"
-
dt: "arrays"
dd: " is the arg one of the members of the array?"
-
dt: "maps"
dd: " is the arg a key of the map?"
-
dt: "matching(regexp)"
dd: " Returns true if the given variable is a string and matches the regex in the argument."

View File

@ -0,0 +1,9 @@
{% macro definition_body(source) %}
<dl>
{% for entry in source %}
<dt><kbd>{{ entry.dt | safe }}</kbd></dt>
<dd>{{ entry.dd | safe }}</dd>
{% if entry.definitions %}{{ self::definition_body(source=entry.definitions) }}{% endif %}
{% endfor %}
</dl>
{% endmacro %}

View File

@ -0,0 +1,5 @@
{%- import 'macros/definition_body.html' as renderer -%}
<div>
{% set content = load_data(path=source) %}
{{ renderer::definition_body(source=content.definitions) }}
</div>