Browse Source

update 2.4.3 👉🏼 3.0.0 and React 17.0.2 👉🏼 18.2.0

windhamdavid 6 months ago
parent
commit
4341c62bbd
68 changed files with 885 additions and 2914 deletions
  1. 8 8
      docs/computers/woozie.md
  2. 2 1004
      docs/db/MongoDB.md
  3. 2 2
      docs/db/PostgreSQL.md
  4. 1 1
      docs/editors/textmate.md
  5. 5 4
      docs/host/WordPress.md
  6. 9 11
      docs/lang/GraphQL.md
  7. 4 4
      docs/lang/Python.md
  8. 0 1
      docs/lang/Ruby.md
  9. 54 53
      docs/lang/Rust.md
  10. 17 17
      docs/saas/openai.md
  11. 7 7
      docs/saas/supabase.md
  12. 1 175
      docs/server/kubernetes.md
  13. 10 10
      docs/server/letsencrypt.md
  14. 5 922
      docs/server/mail.md
  15. 4 1
      docs/server/monit.md
  16. 2 2
      docs/server/nginx.md
  17. 8 7
      docs/shell/bash.md
  18. 36 19
      docs/shell/unix.md
  19. 3 1
      docs/shell/vi.md
  20. 1 1
      docs/waf/nextjs.md
  21. 1 1
      lists/grocery.md
  22. 1 1
      lists/lists.md
  23. 1 1
      lists/now/now.md
  24. 5 5
      lists/todo.md
  25. 4 4
      lists/tweets.md
  26. 2 2
      lists/tweets_follow.md
  27. 1 1
      notes/art/education.md
  28. 8 8
      notes/art/studio.md
  29. 11 11
      notes/dogs/dogs.md
  30. 5 4
      notes/dogs/iris.md
  31. 1 1
      notes/garden/mushroom.md
  32. 34 34
      notes/house/build.md
  33. 4 4
      notes/house/house.md
  34. 34 39
      notes/index.md
  35. 1 1
      notes/tennis.md
  36. 1 1
      notes/travel.md
  37. 32 32
      notes/work/projects/ai.md
  38. 3 3
      notes/work/projects/game.md
  39. 12 12
      notes/work/projects/ham.md
  40. 1 1
      notes/work/projects/zw.md
  41. 1 1
      notes/work/work.md
  42. 337 328
      package-lock.json
  43. 10 9
      package.json
  44. 2 2
      posts/2023-03-16-posts.md
  45. 8 8
      posts/2023-03-20-posts.md
  46. 7 7
      posts/2023-03-29-posts.md
  47. 3 3
      posts/2023-04-16-posts.md
  48. 2 2
      posts/2023-05-04-posts.md
  49. 4 4
      posts/2023-05-08-posts.md
  50. 4 4
      posts/2023-05-28-posts.md
  51. 7 7
      posts/2023-06-02-posts.md
  52. 3 3
      posts/2023-06-10-posts.md
  53. 5 5
      posts/2023-06-16-posts.md
  54. 10 10
      posts/2023-06-22-posts.md
  55. 7 7
      posts/2023-07-12-posts.md
  56. 5 5
      posts/2023-07-13-posts.md
  57. 9 9
      posts/2023-08-12-posts.md
  58. 14 14
      posts/2023-08-18-posts.md
  59. 9 9
      posts/2023-08-27-posts.md
  60. 8 8
      posts/2023-08-30-posts.md
  61. 3 3
      posts/2023-09-12-posts.md
  62. 8 8
      posts/2023-10-12-posts.md
  63. 6 6
      posts/2023-10-14-posts.md
  64. 13 13
      posts/2023-10-30-posts.md
  65. 5 5
      posts/2023-11-05-posts.md
  66. 4 4
      posts/2023-11-07-posts.md
  67. 9 9
      posts/2023-11-08-posts.md
  68. 41 5
      src/pages/help.md

+ 8 - 8
docs/computers/woozie.md

@@ -28,7 +28,7 @@ sudo crontab -e
 - ~~custom apache/nginx error pages~~
 - ~~code.daw~~
   - ~~email settings for code.daw~~
-  - ~~gogs submodules issue - <https://github.com/gogs/gogs/issues/6436>~~
+  - ~~gogs submodules issue - https://github.com/gogs/gogs/issues/6436~~
     - ~~patch has landed in 0.13.0+dev, and will be back-ported to 0.12.11 (no ETA).~~
 - ~~daw.com/wik/mail/reader/bookmarks~~
   - migrating to php v7.4.33 need to test with 8.1
@@ -42,8 +42,8 @@ sudo crontab -e
 - ~~add nginx to monit~~
 - Monit actions redirect to root /url
 - ~~longview MariaDB conf~~
-  - ~~ticket submitted about <https://github.com/linode/longview/pull/49>~~
-- ~~upgrade openssl <https://nvd.nist.gov/vuln/detail/CVE-2023-0286>~~
+  - ~~ticket submitted about https://github.com/linode/longview/pull/49~~
+- ~~upgrade openssl https://nvd.nist.gov/vuln/detail/CVE-2023-0286~~
   - see [#Security ESM Pro](#security)
 - configure remote db connections for Redis/MariaDB
   - ~~allow ip / auth~~
@@ -68,9 +68,9 @@ scp -P (port) -C -i ~/.ssh/tempkey -p user@ip.ip.ip.ip:/home/user/file /home/use
 
 173.230.130.234  
 45.79.219.165  
-<http://173.230.130.234>  
-<http://45.79.219.165>  
-<https://dev.davidawindham.com>  
+http://173.230.130.234  
+http://45.79.219.165  
+https://dev.davidawindham.com  
 2600:3c02::f03c:93ff:fefc:319e  
 Ubuntu 22.04.1 LTS (GNU/Linux 5.15.0-58-generic x86_64)  
 AMD EPYC 7542 32-Core Processor  
@@ -274,7 +274,7 @@ sudo systemctl restart rsyslog
 
 ### ESM Pro
 
-<https://ubuntu.com/pro/tutorial>
+https://ubuntu.com/pro/tutorial
 
 ```bash
 user@woozie:~ » pro --version
@@ -566,7 +566,7 @@ sudo service monit status
 
 ### Blacklist
 
-see repo @ <https://code.davidawindham.com/david/custom.d>
+see repo @ https://code.davidawindham.com/david/custom.d
 
 ```bash
 # apache

+ 2 - 1004
docs/db/MongoDB.md

@@ -1,6 +1,7 @@
 
+**23/11/12** - Rarely using MongoDB in production so I'm removing the documentation here due to MDX errors in the markdown and some of it is outdated. I'll leave the notes just in case.
 
-**11/10/18** - Ran a > brew upgrade which caused mongodb issues, so I had to downgrade my localhost version in order to repair the databases to bring them up to version 4.0.2 see [https://docs.mongodb.com/manual/release-notes/4.0-upgrade-standalone/](https://docs.mongodb.com/manual/release-notes/4.0-upgrade-standalone/)
+**18/10/11** - Ran a > brew upgrade which caused mongodb issues, so I had to downgrade my localhost version in order to repair the databases to bring them up to version 4.0.2 see [https://docs.mongodb.com/manual/release-notes/4.0-upgrade-standalone/](https://docs.mongodb.com/manual/release-notes/4.0-upgrade-standalone/)
 
 
 
@@ -64,1006 +65,3 @@ brew install mongodb
 * [mongodb Atlas](https://cloud.mongodb.com)
 * [mLab](https://mlab.com/)
 * [on AWS](http://docs.aws.amazon.com/quickstart/latest/mongodb/welcome.html)
-
-
-##### My MongoDB
-
-```
-// shell
-$ mongo
-
-// Print a list of all databases on the server.
-> show dbs
-// create user
-> db.createUser({user:"username",pwd:"Password", roles:[{role:"userAdminAnyDatabase",db:"admin"}]})
-> use user
-
-$ mongo --port 27017 -u "user" -p "password" --authenticationDatabase "database"
-
-
-//Add SSL to mongodb
-$ sudo mkdir /etc/ssl/mongodb/
-$ cd /etc/ssl/mongodb/
-$ sudo openssl req -new -x509 -days 365 -out mongodb-server-cert.crt -keyout mongodb-server-cert.key
-
-	Enter PEM pass phrase:
-	Common Name (e.g. server FQDN or YOUR name) []: mongodb_server_private_ip
-
-$ sudo bash -c 'cat mongodb-server-cert.key mongodb-server-cert.crt > mongodb-server.pem'
-$ sudo openssl req -new -x509 -days 365 -out mongodb-client-cert.crt -keyout mongodb-client-cert.key
-$ sudo bash -c 'cat mongodb-client-cert.key mongodb-client-cert.crt > mongodb-client.pem'
-
-//connect to client with SSL
-$ mongo --ssl --sslCAFile /etc/ssl/mongodb/mongodb-server.pem \
---sslPEMKeyFile /etc/ssl/mongodb/mongodb-client.pem \
---sslPEMKeyPassword (PEM Passphrase) \
---host 127.0.0.1 --port 27017 \
---u "user" -p "passowrd" --authenticationDatabase "database"
-
-
-//mongdb.conf
-security:
-  authorization: enabled
-net:
-  port: 27017
-  bindIp: 127.0.0.1
-  // add access from cluster
-  bindIp: [IP of server]
-  // add SSL
-  ssl:
-       mode: requireSSL
-       PEMKeyFile: /etc/ssl/mongodb/mongodb-server.pem
-       CAFile: /etc/ssl/mongodb/mongodb-client.pem
-       PEMKeyPassword: mongodb_server_test_ssl
-
-storage:
-	dbPath: /var/lib/mongodb
-	journal:
-		enabled: true
-
-```
-
-
-
-===============================
-``mongo`` Shell Quick Reference
-===============================
-[Source](https://github.com/mongodb/docs/blob/master/source/reference/mongo-shell.txt)
-
-.. default-domain:: mongodb
-
-.. contents:: On this page
-   :local:
-   :backlinks: none
-   :depth: 1
-   :class: singlecol
-
-``mongo`` Shell Command History
--------------------------------
-
-You can retrieve previous commands issued in the :program:`mongo` shell
-with the up and down arrow keys. Command history is stored in
-``~/.dbshell`` file. See :ref:`.dbshell <mongo-dbshell-file>` for more
-information.
-
-Command Line Options
---------------------
-
-The :program:`mongo` shell can be started with numerous options. See
-:doc:`mongo shell </reference/program/mongo>` page for details on all
-available options.
-
-The following table displays some common options for :program:`mongo`:
-
-.. list-table::
-   :header-rows: 1
-   :widths: 30 70
-
-   * - Option
-     - Description
-
-   * - :option:`--help <mongo --help>`
-     - Show command line options
-
-   * - :option:`--nodb <mongo --nodb>`
-
-     - Start :program:`mongo` shell without connecting to a database.
-
-       To connect later, see :ref:`mongo-shell-new-connections`.
-
-   * - :option:`--shell <mongo --shell>`
-
-     - Used in conjunction with a JavaScript file (i.e.
-       :ref:`\<file.js\> <mongo-shell-file>`) to continue in the
-       :program:`mongo` shell after running the JavaScript file.
-
-       See :ref:`JavaScript file <mongo-shell-javascript-file>` for an
-       example.
-
-.. _command-helpers:
-
-Command Helpers
----------------
-
-The :program:`mongo` shell provides various help. The following table
-displays some common help methods and commands:
-
-.. list-table::
-   :header-rows: 1
-   :widths: 30 70
-
-   * - Help Methods and Commands
-     - Description
-
-   * - ``help``
-
-     - Show help.
-
-   * - :method:`db.help()`
-
-     - Show help for database methods.
-
-   * - :method:`db.\<collection\>.help() <db.collection.help>`
-
-     - Show help on collection methods. The ``<collection>`` can be the
-       name of an existing collection or a non-existing collection.
-
-   * - ``show dbs``
-
-     - Print a list of all databases on the server.
-
-   * - ``use <db>``
-
-     - Switch current database to ``<db>``. The :program:`mongo` shell
-       variable ``db`` is set to the current database.
-
-   * - ``show collections``
-
-     - Print a list of all collections for current database
-
-   * - ``show users``
-
-     - Print a list of users for current database.
-
-   * - ``show roles``
-
-     - Print a list of all roles, both user-defined and built-in, for
-       the current database.
-
-   * - ``show profile``
-
-     - Print the five most recent operations that took 1 millisecond or
-       more. See documentation on the :doc:`database profiler
-       </tutorial/manage-the-database-profiler>` for more information.
-
-   * - ``show databases``
-
-     - Print a list of all available databases.
-
-   * - ``load()``
-
-     - Execute a JavaScript file. See
-       :doc:`/tutorial/write-scripts-for-the-mongo-shell`
-       for more information.
-
-Basic Shell JavaScript Operations
-----------------------------------
-
-The :program:`mongo` shell provides a
-:doc:`JavaScript API </reference/method>` for database operations.
-
-In the :program:`mongo` shell, ``db`` is the variable that references
-the current database. The variable is automatically set to the default
-database ``test`` or is set when you use the ``use <db>`` to switch
-current database.
-
-The following table displays some common JavaScript operations:
-
-.. list-table::
-   :header-rows: 1
-   :widths: 40 60
-
-   * - JavaScript Database Operations
-     - Description
-
-   * - :method:`db.auth()`
-
-     - If running in secure mode, authenticate the user.
-
-   * - ``coll = db.<collection>``
-
-     - Set a specific collection in the current database to a variable
-       ``coll``, as in the following example:
-
-       .. code-block:: javascript
-
-          coll = db.myCollection;
-
-       You can perform operations on the ``myCollection`` using the
-       variable, as in the following example:
-
-       .. code-block:: javascript
-
-          coll.find();
-
-   * - :method:`db.collection.find()`
-
-     - Find all documents in the collection and returns a cursor.
-
-       See the :method:`db.collection.find()` and
-       :doc:`/tutorial/query-documents` for more information and
-       examples.
-
-       See :doc:`/tutorial/iterate-a-cursor` for information on
-       cursor handling in the :program:`mongo` shell.
-
-   * - :method:`db.collection.insertOne()`
-
-     - Insert a new document into the collection.
-
-   * - :method:`db.collection.insertMany()`
-
-     - Insert multiple new documents into the collection.
-
-   * - :method:`db.collection.updateOne()`
-
-     - Update a single existing document in the collection.
-
-   * - :method:`db.collection.updateMany()`
-
-     - Update multiple existing documents in the collection.
-
-   * - :method:`db.collection.save()`
-
-     - Insert either a new document or update an existing document in
-       the collection.
-
-   * - :method:`db.collection.deleteOne()`
-
-     - Delete a single document from the collection.
-
-   * - :method:`db.collection.deleteMany()`
-
-     - Delete documents from the collection.
-
-   * - :method:`db.collection.drop()`
-
-     - Drops or removes completely the collection.
-
-   * - :method:`db.collection.createIndex()`
-
-     - Create a new index on the collection if the index does not
-       exist; otherwise, the operation has no effect.
-
-   * - :method:`db.getSiblingDB()`
-
-     - Return a reference to another database using this same
-       connection without explicitly switching the current database.
-       This allows for cross database queries.
-
-For more information on performing operations in the shell, see:
-
-- :doc:`/crud`
-
-- :ref:`js-administrative-methods`
-
-Keyboard Shortcuts
-------------------
-
-The :program:`mongo` shell provides most keyboard shortcuts similar to
-those found in the ``bash`` shell or in Emacs. For some functions
-:program:`mongo` provides multiple key bindings, to accommodate
-several familiar paradigms.
-
-The following table enumerates the keystrokes supported by the
-:program:`mongo` shell:
-
-.. list-table::
-   :header-rows: 1
-
-   * - **Keystroke**
-     - **Function**
-   * - Up-arrow
-     - previous-history
-   * - Down-arrow
-     - next-history
-   * - Home
-     - beginning-of-line
-   * - End
-     - end-of-line
-   * - Tab
-     - autocomplete
-   * - Left-arrow
-     - backward-character
-   * - Right-arrow
-     - forward-character
-   * - Ctrl-left-arrow
-     - backward-word
-   * - Ctrl-right-arrow
-     - forward-word
-   * - Meta-left-arrow
-     - backward-word
-   * - Meta-right-arrow
-     - forward-word
-   * - Ctrl-A
-     - beginning-of-line
-   * - Ctrl-B
-     - backward-char
-   * - Ctrl-C
-     - exit-shell
-   * - Ctrl-D
-     - delete-char (or exit shell)
-   * - Ctrl-E
-     - end-of-line
-   * - Ctrl-F
-     - forward-char
-   * - Ctrl-G
-     - abort
-   * - Ctrl-J
-     - accept-line
-   * - Ctrl-K
-     - kill-line
-   * - Ctrl-L
-     - clear-screen
-   * - Ctrl-M
-     - accept-line
-   * - Ctrl-N
-     - next-history
-   * - Ctrl-P
-     - previous-history
-   * - Ctrl-R
-     - reverse-search-history
-   * - Ctrl-S
-     - forward-search-history
-   * - Ctrl-T
-     - transpose-chars
-   * - Ctrl-U
-     - unix-line-discard
-   * - Ctrl-W
-     - unix-word-rubout
-   * - Ctrl-Y
-     - yank
-   * - Ctrl-Z
-     - Suspend (job control works in linux)
-   * - Ctrl-H (i.e. Backspace)
-     - backward-delete-char
-   * - Ctrl-I (i.e. Tab)
-     - complete
-   * - Meta-B
-     - backward-word
-   * - Meta-C
-     - capitalize-word
-   * - Meta-D
-     - kill-word
-   * - Meta-F
-     - forward-word
-   * - Meta-L
-     - downcase-word
-   * - Meta-U
-     - upcase-word
-   * - Meta-Y
-     - yank-pop
-   * - Meta-[Backspace]
-     - backward-kill-word
-   * - Meta-<
-     - beginning-of-history
-   * - Meta->
-     - end-of-history
-
-
-
-Queries
--------
-
-In the :program:`mongo` shell, perform read operations using the
-:method:`~db.collection.find()` and :method:`~db.collection.findOne()`
-methods.
-
-The :method:`~db.collection.find()` method returns a cursor object
-which the :program:`mongo` shell iterates to print documents on
-screen. By default, :program:`mongo` prints the first 20. The
-:program:`mongo` shell will prompt the user to "``Type it``" to continue
-iterating the next 20 results.
-
-The following table provides some common read operations in the
-:program:`mongo` shell:
-
-.. list-table::
-   :header-rows: 1
-
-   * - Read Operations
-
-     - Description
-
-   * - :method:`db.collection.find(\<query\>) <db.collection.find()>`
-
-     - Find the documents matching the ``<query>`` criteria in the
-       collection. If the ``<query>`` criteria is not specified or is
-       empty (i.e ``{}`` ), the read operation selects all documents in
-       the collection.
-
-       The following example selects the documents in the ``users``
-       collection with the ``name`` field equal to ``"Joe"``:
-
-       .. code-block:: javascript
-
-          coll = db.users;
-          coll.find( { name: "Joe" } );
-
-       For more information on specifying the ``<query>`` criteria, see
-       :ref:`read-operations-query-argument`.
-
-   * - :method:`db.collection.find(\<query\>, \<projection\>)
-       <db.collection.find()>`
-
-     - Find documents matching the ``<query>`` criteria and return just
-       specific fields in the ``<projection>``.
-
-       The following example selects all documents from the collection
-       but returns only the ``name`` field and the ``_id`` field. The
-       ``_id`` is always returned unless explicitly specified to not
-       return.
-
-       .. code-block:: javascript
-
-          coll = db.users;
-          coll.find( { }, { name: true } );
-
-       For more information on specifying the ``<projection>``, see
-       :ref:`read-operations-projection`.
-
-   * - :method:`db.collection.find().sort(\<sort order\>) <cursor.sort()>`
-
-     - Return results in the specified ``<sort order>``.
-
-       The following example selects all documents from the collection
-       and returns the results sorted by the ``name`` field in
-       ascending order (``1``).  Use ``-1`` for descending order:
-
-       .. code-block:: javascript
-
-          coll = db.users;
-          coll.find().sort( { name: 1 } );
-
-   * - :method:`db.collection.find(\<query\>).sort(\<sort order\>)
-       <cursor.sort()>`
-
-     - Return the documents matching the ``<query>`` criteria in the
-       specified ``<sort order>``.
-
-   * - :method:`db.collection.find( ... ).limit( \<n\> ) <cursor.limit()>`
-
-     - Limit result to ``<n>`` rows. Highly recommended if you need only
-       a certain number of rows for best performance.
-
-   * - :method:`db.collection.find( ... ).skip( \<n\> )
-       <cursor.skip()>`
-
-     - Skip ``<n>`` results.
-
-   * - :method:`db.collection.count()`
-
-     - Returns total number of documents in the collection.
-
-   * - :method:`db.collection.find(\<query\>).count() <cursor.count()>`
-
-     - Returns the total number of documents that match the query.
-
-       The :method:`~cursor.count()` ignores :method:`~cursor.limit()` and :method:`~cursor.skip()`. For
-       example, if 100 records match but the limit is 10,
-       :method:`~cursor.count()` will return 100. This will be
-       faster than iterating yourself, but still take time.
-
-   * - :method:`db.collection.findOne(\<query\>) <db.collection.findOne()>`
-
-     - Find and return a single document. Returns null if not found.
-
-       The following example selects a single document in the ``users``
-       collection with the ``name`` field matches to ``"Joe"``:
-
-       .. code-block:: javascript
-
-          coll = db.users;
-          coll.findOne( { name: "Joe" } );
-
-       Internally, the :method:`~db.collection.findOne()`
-       method is the :method:`~db.collection.find()` method
-       with a :method:`limit(1) <cursor.limit()>`.
-
-See :doc:`/tutorial/query-documents` documentation for more information and
-examples. See :doc:`/reference/operator/query` to specify other query
-operators.
-
-Error Checking Methods
-----------------------
-
-.. versionchanged:: 2.6
-
-The :program:`mongo` shell write methods now integrates the
-:doc:`/reference/write-concern` directly into the method execution rather
-than with a separate :method:`db.getLastError()` method. As such, the
-write methods now return a :method:`WriteResult()` object that
-contains the results of the operation, including any write errors and
-write concern errors.
-
-Previous versions used :method:`db.getLastError()` and
-:method:`db.getLastErrorObj()` methods to return error information.
-
-.. _mongo-dba-helpers:
-.. _mongo-shell-admin-helpers:
-
-Administrative Command Helpers
-------------------------------
-
-The following table lists some common methods to support database
-administration:
-
-.. list-table::
-   :header-rows: 1
-
-   * - **JavaScript Database Administration Methods**
-     - **Description**
-
-   * - :method:`db.cloneDatabase(\<host\>) <db.cloneDatabase()>`
-
-     - Clone the current database from the ``<host>`` specified. The
-       ``<host>`` database instance must be in noauth mode.
-
-   * - :method:`db.copyDatabase(\<from\>, \<to\>, \<host\>) <db.copyDatabase()>`
-
-     - Copy the ``<from>`` database from the ``<host>`` to the ``<to>``
-       database on the current server.
-
-       The ``<host>`` database instance must be in ``noauth`` mode.
-
-   * - :method:`db.fromColl.renameCollection(\<toColl\>)
-       <db.collection.renameCollection()>`
-
-     - Rename collection from ``fromColl`` to ``<toColl>``.
-
-   * - :method:`db.repairDatabase()`
-
-     - Repair and compact the current database. This operation can be
-       very slow on large databases.
-
-   * - :method:`db.getCollectionNames()`
-
-     - Get the list of all collections in the current database.
-
-   * - :method:`db.dropDatabase()`
-
-     - Drops the current database.
-
-See also :ref:`administrative database methods
-<js-administrative-methods>` for a full list of methods.
-
-Opening Additional Connections
-------------------------------
-
-You can create new connections within the :program:`mongo` shell.
-
-The following table displays the methods to create the connections:
-
-.. list-table::
-   :header-rows: 1
-
-   * - JavaScript Connection Create Methods
-
-     - Description
-
-```
-
-          db = connect("<host><:port>/<dbname>")
-```
-
-     - Open a new database connection.
-
-   * - .. code-block:: javascript
-
-          conn = new Mongo()
-          db = conn.getDB("dbname")
-
-     - Open a connection to a new server using ``new Mongo()``.
-
-       Use ``getDB()`` method of the connection to select a database.
-
-See also :ref:`mongo-shell-new-connections` for more information on the
-opening new connections from the :program:`mongo` shell.
-
-Miscellaneous
--------------
-
-The following table displays some miscellaneous methods:
-
-.. list-table::
-   :header-rows: 1
-
-   * - **Method**
-     - **Description**
-'''
-   * - ``Object.bsonsize(<document>)``
-     - Prints the :term:`BSON` size of a <document> in bytes
-'''
-See the `MongoDB JavaScript API Documentation
-<http://api.mongodb.org/js/index.html>`_ for a full list of JavaScript
-methods .
-
-Additional Resources
---------------------
-
-Consider the following reference material that addresses the
-:program:`mongo` shell and its interface:
-
-- :program:`mongo`
-- :ref:`js-administrative-methods`
-- :ref:`database-commands`
-- :ref:`aggregation-reference`
-- :gettingstarted:`Getting Started Guide </shell>`
-
-Additionally, the MongoDB source code repository includes a `jstests
-directory <https://github.com/mongodb/mongo/tree/master/jstests/>`_
-which contains numerous :program:`mongo` shell scripts.
-
-------
-
-## Install MongoDB on Ubuntu 16.04
-[Source](https://github.com/linode/docs/blob/master/docs/databases/mongodb/install-mongodb-on-ubuntu-16-04.md)
-
-
-### Add the MongoDB Repository
-
-The `mongodb-server` package from the Ubuntu repository includes version 2.6. However, this version reached end of life in October 2016, so it should not be used in production environments. The most current version available is 3.2 and, as of this writing, the default Ubuntu repositories do not contain an updated package.
-
-Because the Ubuntu repositories don't contain a current version, we'll need to use the MongoDB repository.
-
-1.  Import the MongoDB public GPG key for package signing:
-
-        sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927
-
-2.  Add the MongoDB repository to your `sources.list.d` directory:
-
-        echo "deb http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list
-
-3.  Update your repositories. This allows `apt` to read from the newly added MongoDB repo:
-
-        sudo apt-get update
-
-### Install MongoDB
-
-Now that the MongoDB repository has been added, we're ready to install the latest stable version of MongoDB:
-
-    sudo apt-get install mongodb-org
-
-This command installs `mongodb-org`, a meta-package that includes the following:
-
--   `mongodb-org-server` - The standard MongoDB daemon, and relevant init scripts and configurations
--   `mongodb-org-mongos` - The MongoDB Shard daemon
--   `mongodb-org-shell` - The MongoDB shell, used to interact with MongoDB via the command line
--   `mongodb-org-tools` - Contains a few basic tools to restore, import, and export data, as well as a variety of other functions.
-
-These packages provide a good base that will serve most use cases, and we recommend installing them all. However, if you want a more minimal installation, you can selectively install packages from the above list rather than using the `mongodb-org` metapackage.
-
-For more information on the installation process and options, refer to the [official MongoDB installation tutorial](https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/).
-
-### Configure MongoDB
-
-The configuration file for MongoDB is located at `/etc/mongod.conf`, and is written in YAML format. Most of the settings are well commented within the file. We've outlined the default options below:
-
-- `dbPath` indicates where the database files will be stored (`/var/lib/mongodb` by default)
-- `systemLog` specifies the various logging options, explained below:
-    - `destination` tells MongoDB whether to store the log output as a file or syslog
-    - `logAppend` specifies whether to append new entries to the end of an existing log when the daemon restarts (as opposed to creating a backup and starting a new log upon restarting)
-    - `path` tells the daemon where to send its logging information (`/var/log/mongodb/mongod.log` by default)
-- `net` specifies the various network options, explained below:
-    - `port` is the port on which the MongoDB daemon will run
-    - `bindIP` specifies the IP addresses MongoDB to which binds, so it can listen for connections from other applications
-
-These are only a few basic configuration options that are set by default.
-
-We **strongly** recommend uncommenting the `security` section and adding the following:
-
-{: .file-excerpt}
-/etc/mongod.conf
-:   ~~~ conf
-    security:
-      authorization: enabled
-    ~~~
-
-The `authorization` option enables [role-based access control](https://docs.mongodb.com/manual/core/authorization/) for your databases. If no value is specified, any user will have the ability to modify any database. We'll explain how to create database users and set their permissions later in this guide.
-
-For more information on how to customize these and other values in your configuration file, refer to the [official MongoDB configuration tutorial](https://docs.mongodb.com/manual/reference/configuration-options/).
-
-After making changes to the MongoDB configuration file, restart the service as shown in the following section.
-
-## Start and Stop MongoDB
-
-To start, restart, or stop the MongoDB service, issue the appropriate command from the following:
-
-    sudo systemctl start mongod
-    sudo systemctl restart mongod
-    sudo systemctl stop mongod
-
-You can also enable MongoDB to start on boot:
-
-    sudo systemctl enable mongod
-
-## Create Database Users
-
-If you enabled role-based access control in the [Configure MongoDB](#configure-mongodb) section, create a user administrator with credentials for use on the database:
-
-1.  Open the `mongo` shell:
-
-        mongo
-
-2.  By default, MongoDB connects to a database called `test`. Before adding any users, create a database to store user data for authentication:
-
-        use admin
-
-3.  Use the following command to create an administrative user with the ability to create other users on any database. For better security, change the values `mongo-admin` and `password`:
-
-        db.createUser({user: "mongo-admin", pwd: "password", roles:[{role: "userAdminAnyDatabase", db: "admin"}]})
-
-    Keep these credentials in a safe place for future reference. The output will display all the information written to the database except the password:
-
-        Successfully added user: {
-            "user" : "mongo-admin",
-            "roles" : [
-                    {
-                        "role" : "userAdminAnyDatabase",
-                        "db" : "admin"
-                    }
-            ]
-        }
-
-4.  Exit the mongo shell:
-
-        quit()
-
-5.  Test your connection to MongoDB with the credentials created in Step 3, using the `admin` database for authentication:
-
-        mongo -u mongo-admin -p --authenticationDatabase admin
-
-    The `-u`, `-p`, and `--authenticationDatabase` options in the above command are required in order to authenticate connections to the shell. Without authentication, the MongoDB shell can be accessed but will not allow connections to databases.
-
-    The `mongo-admin` user created in Step 3 is purely administrative based on the roles specified. It is defined as an administrator of user for all databases, but does not have any database permissions itself. You may use it to create additional users and define their roles. If you are using multiple applications with MongoDB, set up different users with custom permissions for their corresponding databases.
-
-6.  As the `mongo-admin` user, create a new database to store regular user data for authentication. The following example calls this database `user-data`:
-
-        use user-data
-
-7.  Permissions for different databases are handled in separate `roles` objects. This example creates the user, `example-user`, with read-only permissions for the `user-data` database and has read and write permissions for the `exampleDB` database that we'll create in the [Manage Data and Collections](#manage-data-and-collections) section below.
-
-    Create a new, non-administrative user to enter test data. Change both `example-user` and `password` to something relevant and secure:
-
-        db.createUser({user: "example-user", pwd: "password", roles:[{role: "read", db: "user-data"}, {role:"readWrite", db: "exampleDB"}]})
-
-    To create additional users, repeat Steps 6 and 7 as the administrative user, creating new usernames, passwords and roles by substituing the appropriate values.
-
-8.  Exit the mongo shell:
-
-        quit()
-
-For more information on access control and user management, as well as other tips on securing your databases, refer to the [MongoDB Security Documentation](https://docs.mongodb.org/v3.2/security).
-
-## Manage Data and Collections
-
-Much of MongoDB's popularity comes from its ease of integration. Interactions with databases are done via JavaScript methods, but [drivers for other languages](http://docs.mongodb.org/ecosystem/drivers/) are available. This section will demonstrate a few basic features, but we encourage you to do further research based on your specific use case.
-
-1.  Open the MongoDB shell using the `example-user` we created above:
-
-        mongo -u example-user -p --authenticationDatabase user-data
-
-2.  Create a new database. This example calls it `exampleDB`:
-
-        use exampleDB
-
-    Make sure that this database name corresponds with the one for which the user has read and write permissions (we added these permissions in Step 7 of the previous section).
-
-    To show the name of the current working database, run the `db` command.
-
-3.  Create a new *collection* called `exampleCollection`:
-
-        db.createCollection("exampleCollection", {capped: false})
-
-    If you're not familiar with MongoDB terminology, you can think of a collection as analogous to a table in a relational database management system. For more information on creating new collections, see the MongoDB documentation on the [db.createCollection() method](https://docs.mongodb.com/v3.2/reference/method/db.createCollection/).
-
-    {: .note}
-    > Collection names should not include certain punctuation such as hyphens. However, exceptions may not be raised until you attempt to use or modify the collection. For more information, refer to MongoDB's [naming restrictions](https://docs.mongodb.com/manual/reference/limits/#naming-restrictions).
-
-4.  Create sample data for entry into the test database. MongoDB accepts input as *documents* in the form of JSON objects such as those below. The `a` and `b` variables are used to simplify entry; objects can be inserted directly via functions as well.
-
-        var a = { name : "John Doe",  attributes: { age : 30, address : "123 Main St", phone : 8675309 }}
-        var b = { name : "Jane Doe",  attributes: { age : 29, address : "321 Main Rd", favorites : { food : "Spaghetti", animal : "Dog" } }}
-
-    Note that documents inserted into a collection need not have the same schema, which is one of many benefits of using a NoSQL database.
-
-5.  Insert the data into `exampleCollection`, using the `insert` method:
-
-        db.exampleCollection.insert(a)
-        db.exampleCollection.insert(b)
-
-    The output for each of these operations will show the number of objects successfully written to the current working database:
-
-        WriteResult({ "nInserted" : 1 })
-
-6.  Confirm that the `exampleCollection` collection was properly created:
-
-        show collections
-
-    The output will list all collections containing data within the current working database:
-
-        exampleCollection
-
-7.  View unfiltered data in the `exampleCollection` collection using the `find` method. This returns up to the first 20 documents in a collection, if a query is not passed:
-
-        db.exampleCollection.find()
-
-    The output will resemble the following:
-
-        { "_id" : ObjectId("571a3e7507d0fcd78baef08f"), "name" : "John Doe" }
-        { "_id" : ObjectId("571a3e8707d0fcd78baef090"), "age" : 30 }
-
-    You may notice the objects we entered are preceded by `_id` keys and `ObjectId` values. These are unique indexes generated by MongoDB when an `_id` value is not explicitly defined. `ObjectId` values can be used as primary keys when entering queries, although for ease of use, you may wish to create your own index as you would with any other database system.
-
-    The `find` method can also be used to search for a specific document or field by entering a search term parameter (in the form of an object) rather than leaving it empty. For example:
-
-        db.exampleCollection.find({"name" : "John Doe"})
-
-    Running the command above returns a list of documents containing the `{"name" : "John Doe"}` object.
-
-## Additional MongoDB Functionality
-
-As noted above, MongoDB has an available collection of language-specific drivers that can be used to interact with your databases from within non-JavaScript applications. One advantage these drivers provide is the ability to allow applications written in different languages to use the same database without the strict need for an object data mapper (ODM). If you do want to use an object data mapper, however, many well-supported ODMs are available.
-
-The `mongodb-org-tools` package we installed also includes several other tools such as `mongodump` and `mongorestore` for creating and restoring backups and snapshots, as well as `mongoimport` and `mongoexport` for importing and exporting content from extended JSON, or supported CSV or TSV files.
-
-To view the available options or how to use a particular method, append `.help()` to the end of your commands. For example, to see a list of options for the `find` method in Step 6 of [Manage Data and Collections](#manage-data-and-collections):
-
-    db.exampleCollection.find().help()
-
-
-
-
-# How to Install MongoDB on Ubuntu 16.04
-[Source](https://www.digitalocean.com/community/tutorials/how-to-install-mongodb-on-ubuntu-16-04)
-
-### Introduction
-
-MongoDB is a free and open-source NoSQL document database used commonly in modern web applications. This tutorial will help you set up MongoDB on your server for a production application environment.
-
-As of publication time, the official Ubuntu 16.04 MongoDB packages have not yet been updated to use the new `systemd` init system [which is enabled by default on Ubuntu 16.04][1]. Running MongoDB using those packages on a clean Ubuntu 16.04 server involves following an additional step to configure MongoDB as a `systemd` service that will automatically start on boot.  
-
-## Prerequisites
-
-To follow this tutorial, you will need:
-
-## Step 1 — Adding the MongoDB Repository
-
-MongoDB is already included in Ubuntu package repositories, but the official MongoDB repository provides most up-to-date version and is the recommended way of installing the software. In this step, we will add this official repository to our server.
-
-Ubuntu ensures the authenticity of software packages by verifying that they are signed with GPG keys, so we first have to import they key for the official MongoDB repository.
-
-        * sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927
-
-
-After successfully importing the key, you will see:
-
-Output
-
-
-    gpg: Total number processed: 1
-    gpg:               imported: 1  (RSA: 1)
-
-
-Next, we have to add the MongoDB repository details so `apt` will know where to download the packages from.
-
-Issue the following command to create a list file for MongoDB.
-
-        * echo "deb http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list
-
-
-After adding the repository details, we need to update the packages list.
-
-## Step 2 — Installing and Verifying MongoDB
-
-Now we can install the MongoDB package itself.
-
-        * sudo apt-get install -y mongodb-org
-
-
-This command will install several packages containing latest stable version of MongoDB along with helpful management tools for the MongoDB server.
-
-In order to properly launch MongoDB as a service on Ubuntu 16.04, we additionally need to create a unit file describing the service. A _unit file_ tells `systemd` how to manage a resource. The most common unit type is a _service_, which determines how to start or stop the service, when should it be automatically started at boot, and whether it is dependent on other software to run.
-
-We'll create a unit file to manage the MongoDB service. Create a configuration file named `mongodb.service` in the `/etc/systemd/system` directory using `nano` or your favorite text editor.
-
-        * sudo nano /etc/systemd/system/mongodb.service
-
-
-Paste in the following contents, then save and close the file.
-
-/etc/systemd/system/mongodb.service
-
-
-    [Unit]
-    Description=High-performance, schema-free document-oriented database
-    After=network.target
-
-    [Service]
-    User=mongodb
-    ExecStart=/usr/bin/mongod --quiet --config /etc/mongod.conf
-
-    [Install]
-    WantedBy=multi-user.target
-
-
-This file has a simple structure:
-
-* The **Unit** section contains the overview (e.g. a human-readable description for MongoDB service) as well as dependencies that must be satisfied before the service is started. In our case, MongoDB depends on networking already being available, hence `network.target` here.
-* The **Service** section how the service should be started. The `User` directive specifies that the server will be run under the `mongodb` user, and the `ExecStart` directive defines the startup command for MongoDB server.
-* The last section, **Install**, tells `systemd` when the service should be automatically started. The `multi-user.target` is a standard system startup sequence, which means the server will be automatically started during boot.
-
-Next, start the newly created service with `systemctl`.
-
-        * sudo systemctl start mongodb
-
-
-While there is no output to this command, you can also use `systemctl` to check that the service has started properly.
-
-        * sudo systemctl status mongodb
-
-
-Output
-
-
-    ● mongodb.service - High-performance, schema-free document-oriented database
-       Loaded: loaded (/etc/systemd/system/mongodb.service; enabled; vendor preset: enabled)
-       Active: active (running) since Mon 2016-04-25 14:57:20 EDT; 1min 30s ago
-     Main PID: 4093 (mongod)
-        Tasks: 16 (limit: 512)
-       Memory: 47.1M
-          CPU: 1.224s
-       CGroup: /system.slice/mongodb.service
-               └─4093 /usr/bin/mongod --quiet --config /etc/mongod.conf
-
-
-The last step is to enable automatically starting MongoDB when the system starts.
-
-        * sudo systemctl enable mongodb
-
-
-The MongoDB server now configured and running, and you can manage the MongoDB service using the `systemctl` command (e.g. `sudo systemctl mongodb stop`, `sudo systemctl mongodb start`).
-
-## Step 3 — Adjusting the Firewall (Optional)
-
-Assuming you have followed the [initial server setup tutorial][2] instructions to enable the firewall on your server, MongoDB server will be inaccessible from the internet.
-
-If you intend to use the MongoDB server only locally with applications running on the same server, it is a recommended and secure setting. However, if you would like to be able to connect to your MongoDB server from the internet, we have to allow the incoming connections in `ufw`.
-
-To allow access to MongoDB on its default port `27017` from everywhere, you could use `sudo ufw allow 27017`. However, enabling internet access to MongoDB server on a default installation gives unrestricted access to the whole database server.
-
-in most cases, MongoDB should be accessed only from certain trusted locations, such as another server hosting an application. To accomplish this task, you can allow access on MongoDB's default port while specifying the IP address of another server that will be explicitly allowed to connect.
-
-        * sudo ufw allow from your_other_server_ip/32 to any port 27017
-
-
-You can verify the change in firewall settings with `ufw`.
-
-You should see traffic to `27017` port allowed in the output.If you have decided to allow only a certain IP address to connect to MongoDB server, the IP address of the allowed location will be listed instead of _Anywhere_ in the output.
-
-Output
-
-
-    Status: active
-
-    To                         Action      From
-    --                         ------      ----
-    27017                      ALLOW       Anywhere
-    OpenSSH                    ALLOW       Anywhere
-    27017 (v6)                 ALLOW       Anywhere (v6)
-    OpenSSH (v6)               ALLOW       Anywhere (v6)
-
-
-
-
-[Source](https://docs.mongodb.com/v3.2/tutorial/install-mongodb-on-ubuntu/ "Permalink to Install MongoDB Community Edition on Ubuntu — MongoDB Manual 3.2")

+ 2 - 2
docs/db/PostgreSQL.md

@@ -15,7 +15,7 @@ Install PostgreSQL from the Ubuntu package repository:
 
 By default, PostgreSQL will create a Linux user named `postgres` to access the database software.
 
-{: .caution}
+:::warning
 >
 >The `postgres` user should not be used for for other purposes (e.g. connecting to other networks). Doing so presents a serious risk to the security of your databases.
 
@@ -110,7 +110,7 @@ Commands in this section should be run as the `postgres` Linux user unless other
 
 1.  Edit the `/etc/postgresql/9.5/main/pg_hba.conf` file, under the `# "local" is for Unix domain socket connections only` header:
 
-    {: .file-excerpt }
+
     /etc/postgresql/9.5/main/pg_hba.conf
     :   ~~~
         # "local" is for Unix domain socket connections only

+ 1 - 1
docs/editors/textmate.md

@@ -79,7 +79,7 @@ move to the end of all lines (⌘→):
 |   |                                                                                          |  
 |   | Ruby on Rails                                                                            |  
 |   | ⌃H Ruby and Ruby on Rails Docs                                                           |  
-|   | %{ Toggle Block Style (do..end / {})                                                     |  
+|   | % Toggle Block Style (do..end / {})                                                     |  
 |   | ⌘⇧H Create Partial from Selection                                                        |  
 |   | ⌃⇧M Quick Migration                                                                      |  
 |   | ⌃L Hash Arrow                                                                            |  

+ 5 - 4
docs/host/WordPress.md

@@ -1,17 +1,17 @@
 # WordPress
 
 ## About 
-I've used WordPress for hundreds of projects and I think I owe a certain debt of gratitude. I started learning WordPress in the early days of the project. I keep a WordPress powered testing site up @ <https://wp.davidwindham.com> which contains my notes and code for WordPress projects.
+I've used WordPress for hundreds of projects and I think I owe a certain debt of gratitude. I started learning WordPress in the early days of the project. I keep a WordPress powered testing site up @ https://wp.davidwindham.com which contains my notes and code for WordPress projects.
 
 ## Log 
 
-- 23/07/17 - fix Yoast errors from missing database table 'inclusive_language_score' -  <https://wordpress.org/support/topic/inclusive-language-option/>
+- 23/07/17 - fix Yoast errors from missing database table 'inclusive_language_score' -  https://wordpress.org/support/topic/inclusive-language-option/
 - 23/06/20 - migrate a couple sites previously using a theme with a custom editor and a lot of custom short codes to the block editor.
 
 ## Builds
 
-- <https://wp.davidwindham.com>
-- <https://code.davidawindham.com/david/wp>
+- https://wp.davidwindham.com
+- https://code.davidawindham.com/david/wp
 - [https://github.com/windhamdavid/wp](https://github.com/windhamdavid/wp)
 - [https://github.com/windhamdavid/wordpress-develop](https://github.com/windhamdavid/wordpress-develop)
 
@@ -94,6 +94,7 @@ function disable_emojis() {
 add_action( 'init', 'disable_emojis' );
 
 ```
+
 ##### add open graph meta to head:
 ```php
 <?php

+ 9 - 11
docs/lang/GraphQL.md

@@ -7,7 +7,7 @@
 
 
 ## Queries
-{: .-three-column}
+
 
 ### Basic query
 
@@ -20,7 +20,7 @@
 ```js
 { status: 'available' }
 ```
-{: .-setup}
+
 
 ### Nesting
 
@@ -35,7 +35,7 @@
     { name: "Luke Skywalker",
       height: 1.74 } }
 ```
-{: .-setup}
+
 
 ### Lists
 
@@ -51,7 +51,7 @@
       { name: "Han Solo" },
       { name: "R2D2" } ] }
 ```
-{: .-setup}
+
 
 GraphQL queries look the same for both single items or lists of items.
 
@@ -70,7 +70,7 @@ GraphQL queries look the same for both single items or lists of items.
     { id: "1000",
     { name: "Luke Skywalker" } }
 ```
-{: .-setup}
+
 
 ### Aliases
 
@@ -89,7 +89,7 @@ GraphQL queries look the same for both single items or lists of items.
     han:
     { name: "Han Solo" } }
 ```
-{: .-setup}
+
 
 ### Operation names and variables
 
@@ -168,7 +168,6 @@ fetch('http://myapi/graphql', {
 
 Schema
 ------
-{: .-three-column}
 
 ### Basic schemas
 
@@ -246,7 +245,7 @@ type Root {
   direction: DIRECTION!
 }
 ```
-{: data-line="1,2,3,4"}
+
 
 ### Unions
 
@@ -260,13 +259,12 @@ type Query {
   search(q: String) [Result]
 }
 ```
-{: data-line="4"}
 
 References
 ----------
 
-- <http://graphql.org/learn/queries/>
-- <http://graphql.org/learn/serving-over-http/>
+- http://graphql.org/learn/queries/
+- http://graphql.org/learn/serving-over-http/
 
 # Essential quotes
 * "GraphQL is about asking for specific fields on objects"

+ 4 - 4
docs/lang/Python.md

@@ -6,7 +6,7 @@
 
 ## PyEnv
 
-<https://github.com/pyenv/pyenv>  
+https://github.com/pyenv/pyenv
 
 ```bash
 export PYENV_ROOT="$HOME/.pyenv"
@@ -24,7 +24,7 @@ Python 3.10.10
 
 ## PIP
 
-<https://pypi.org/project/pip/>  
+https://pypi.org/project/pip/
 
 ```bash
 david@ovid🏛 :~/sites/gpt(main○) » python3 --version                                          127 ↵
@@ -57,8 +57,8 @@ Successfully installed pip-23.1.2
 ```
 
 ## Poetry
-<https://pypi.org/project/poetry/>
-<https://github.com/python-poetry>
+https://pypi.org/project/poetry/
+https://github.com/python-poetry
 
 ```bash
 david@ovid🏛 :~/sites/gpt(main○) » pip3 install poetry                                        127 ↵

+ 0 - 1
docs/lang/Ruby.md

@@ -246,7 +246,6 @@ Diff between blocs and lambdas:
 - Division (/)
 - Exponentiation (\*\*)
 - Modulo (%)
-- The concatenation operator (<<)
 - you can do 1 += 1 –– which gives you 2 but 1++ and 1-- does not exist in ruby
 - `"A " << "B"` => `"A B"` but `"A " + "B"` would work as well but `"A " + 4 + " B"` not. So rather use string interpolation (`#{4}`)
 - `"A #{4} B"` => `"A 4 B"`

+ 54 - 53
docs/lang/Rust.md

@@ -68,7 +68,7 @@
 ## File Structure
 
 Cargo.toml cheatsheet
-
+```
     // Generic Cargo.toml
 
     // library
@@ -89,6 +89,7 @@ Cargo.toml cheatsheet
     [dependencies.dep_name]
     version = "..."
     features = ["..."]  // features are conditional compilation flags
+```
 
 ## Strings
 
@@ -114,12 +115,12 @@ Cargo.toml cheatsheet
 ## Return Handling
 
 ### Result: Ok vs Error
-
+```
     pub enum Result<T,E> {
     	Ok(T),
     	Err(E),
     }
-
+```
 ### ? Shorthand
 
 *? applies to a `Result` value, and if it was an `Ok`, it **unwraps** and gives the inner value (Directly uses the into() method), or it returns the Err type from the current* function.*
@@ -129,7 +130,7 @@ Cargo.toml cheatsheet
     Ok(serde_json::from_str(&std::fs::read_to_string(fname)?)?)
 
 ### Use custom errors for new structs
-
+```
 *To handle proper error handling*
 
     use serde_derive::*;
@@ -157,7 +158,7 @@ Cargo.toml cheatsheet
     	Some(T),
     	None,
     }
-
+```
 ### Result  Option
 
     // Result into Option
@@ -195,7 +196,7 @@ Important iterating traits:
 - `a_vec.into_iter()`: turns a vector into an iterator
 
 ## Generics & Traits
-
+```
 *Generic Type, Functions & Trait imps*
 
     // TRAITS
@@ -221,7 +222,7 @@ Important iterating traits:
     // FUNCTIONS
     // It makes the type available for the function
     fn print_c<I:TraitA>(foo:I) {
-
+```
 ## Lifetimes
 
 *Think of lifetimes as a constraint, bounding output to the same lifetime as its input(s)*
@@ -256,7 +257,7 @@ Important iterating traits:
 - `FnOnce`: consumes variables it captures. Moves vars into the closure when its defined. FnOnce can only be called once on the same variables
 - `FnMut`: can change env bc it mutably borrows values. *recommended for working with Vecs*
 - `Fn`: borrow values from env immutably
-
+```
     // FnOnce:
     pub fn fooF(&mut self, f: F)
     	where F: FnOnce(&mut String), {...}
@@ -268,9 +269,9 @@ Important iterating traits:
     // Boxed closure type, usually used in threads,
     // allowing different fn to be sent to the same channel
     Box<Fn(&mut String) + TraitB >
-
+```
 ## References
-
+```
     &i32        // a reference
     &'a i32     // a reference with an explicit lifetime
     &'a mut i32 // a mutable reference with an explicit lifetime
@@ -279,7 +280,7 @@ Important iterating traits:
     Rc<T>       // is for multiple ownership.
     Arc<T>      // is for multiple ownership, but threadsafe.
     Cell<T>     // is for “interior mutability” for Copy types; that is, when you need to mutate something behind a &T.
-
+```
 ### Reference count
 
 *Single thread use only: doesn't impl sync and send*
@@ -301,7 +302,7 @@ Important iterating traits:
 ## Threads
 
 - Main fn can terminate before new threads finish!
-
+```
     use std::thread::*;
     use std::time::Duration;
 
@@ -318,11 +319,11 @@ Important iterating traits:
     let mut children = Vec::new();
     let child = thread::spawn(...);
     for child in children { child.join().expect("thread panic");
-
+```
 - When you need to move **primitive** variables to be accessible inside threads, thanks to `Copy`:
-
+```
     spawn( move || { println!("{}", n); });
-
+```
 ### Arc, Mutex
 
 If `Copy` is not implemented for the var (e.g. moving a String btw threads), use:
@@ -330,7 +331,7 @@ If `Copy` is not implemented for the var (e.g. moving a String btw threads), use
 - `arc`: atomic reference count.
 - `mutex`: a guard on mutation, allows mutation when ppl have a `lock` on it
 - `lock()`: acquires the mutex's lock, ensuring its only held by 1 obj, returns Result.
-
+```
     use std::sync::{Arc, Mutex};
     fn foo () {
     	let m = Arc::new(Mutex::new(String::from("xyz")));
@@ -344,9 +345,9 @@ If `Copy` is not implemented for the var (e.g. moving a String btw threads), use
     	// use m in original thread
     	let s = m.lock().unwrap();
     }
-
+```
 When to use Mutex in Arc?
-
+```
     // In a multithread game engine, you might want to make an Arc<Player>.
     // The Mutexes protect the inner fields that are able to change (items).
     // while still allowing multiple threads to access id concurrently!
@@ -355,14 +356,14 @@ When to use Mutex in Arc?
         id: String,
         items: Mutex<Items>,
     }
-
+```
 ### Channels
 
 - A function returning: `Sender<T>` and `Receiver<T>` endpoints, where T is type of msg to be transferred, allowing async communications between threads
 - `mpsc`: means Multi Producer Single Consumer. We can clone sender, but not receiver.
 - Drop(channel senders) will close the channel automatically
 - **Fns have to be Boxed** before sending across channel
-
+```
     //Good pattern
     std::sync::mpsc::channel;
 
@@ -391,9 +392,9 @@ When to use Mutex in Arc?
 
     	done_r.recv().ok();
     }
-
+```
 ### ThreadPools
-
+```
     pub struct ThreadPool {
         ch_s: Option<mpsc::Sender<Box<Fn() + Send>>>,
         n: u32,
@@ -452,11 +453,11 @@ When to use Mutex in Arc?
     	}
     	tp.wait();
     }
-
+```
 ## Patterns
 
 ### Builder
-
+```
     pub enum Property {
         Simple(&'static str, String), // e.g. x=5, y = 11
         Style(&'static str, String),  // like css styles, e.g. border: ...
@@ -501,9 +502,9 @@ When to use Mutex in Arc?
 
     // So we can simply do:
     let a = SvgTag::new("svg").w("60px").h("80px");
-
+```
 ### Defaults
-
+```
     struct Foo {...}
 
     impl Default for Foo {
@@ -513,11 +514,11 @@ When to use Mutex in Arc?
     }
     ...
     let f = Foo { ..Default:default()}
-
+```
 ### Wrappers Traits
 
 If I want to compose structs that contain certain (different?) traits. Create a wrapper struct. *This is usually done with iterators etc.*
-
+```
     pub struct TraitWrap<A:TraitA, B:TraitB> {
         a: A,
         b: B,
@@ -526,7 +527,7 @@ If I want to compose structs that contain certain (different?) traits. Create a
     impl <A: TraitA, B:TraitB> TraitA for TraitWrap<A,B> {
     		fn ...
     }
-
+```
 ## Macros
 
 ### Common Metavariables
@@ -549,7 +550,7 @@ If I want to compose structs that contain certain (different?) traits. Create a
 ### Declarative Macros
 
 Macros that work like match statements on your code snippets. It matches on illegal code, to replace them with legal Rust code.
-
+```
     // This macro should be made avail whenever the crate
     // where the macro is defined, is brought into scope
     #[macro_export]
@@ -578,12 +579,12 @@ Macros that work like match statements on your code snippets. It matches on ille
             }
         };
     }
-
+```
 
 ### Macro refactoring
 
 Calling a macro within a macro is a good way to refactor the macro code
-
+```
     // SvgTag::new("svg").child(SvgTag::new("rect").x(7).y(7).w(9).h(9));
     // svg! { svg => {rect x=7, y=7, w=9, h=9} };
 
@@ -603,11 +604,11 @@ Calling a macro within a macro is a good way to refactor the macro code
             SvgTag::new(stringify!($s))
                 $(.$p($v))*
         };
-
+```
 ### Procedural Macros
 
 Functions that operate on input code, outputs new code
-
+```
     # This package does procedural macros
     # and can't be used for anything other than proc macros
     # this runs before other packages at compile time
@@ -620,11 +621,11 @@ Functions that operate on input code, outputs new code
     #[some_attribute]
     pub fn some_name(input: TokenStream) -> TokenStream {
     }
-
+```
 ### Derive Macros
 
 **Good convention**: for structs, to create setter helper fn, e.g. `set_field1` `set_field2` .
-
+```
     // using it
     #[derive(MyMacro)]
 
@@ -668,7 +669,7 @@ Functions that operate on input code, outputs new code
 
        res.parse().unwrap()
     }
-
+```
 - `cargo expand`: expands macro code to be more readable. Install through `cargo install cargo-expand`
 
 ## Futures
@@ -689,7 +690,7 @@ Think of futures are cheap threads, when you don't have as many threads. How it
 - Async / Await (unstable) is here already (Jan 2020)
 
 ### Simple Future
-
+```
     pub struct SimpleFuture {
         n: i32, // or whatever other return type upon completion
     }
@@ -709,7 +710,7 @@ Think of futures are cheap threads, when you don't have as many threads. How it
     // to run the future, use an executor, e.g.:
     use futures::executer::block_on(); //block thread til future is complete
     block_on(SimpleFuture{n:10});
-
+```
 ### Future Combinators
 
 Combinators are cheap bc only calling it takes up work, creating combinators are "lazy" operations. Combinators only wrap future in another one, and doesn't do anything until you call it.
@@ -734,7 +735,7 @@ Important trait `FutureExt`:
 Async block resolves into an enum. The enum implements Future, and tracks the state of its own variables.
 
 `Await` must always be inside Async block to create a new state on the async enum. It adds state to the resulting future. (it doesn't actually await at the time we write it)
-
+```
     // Don't have to create Future obj manually
     // Create a async function instead that auto handles futures
 
@@ -749,7 +750,7 @@ Async block resolves into an enum. The enum implements Future, and tracks the st
     	let r = ch_r.await.unwrap();
     	...
     });
-
+```
 ### Stream
 
 A Stream (Reader) is a stream of results, like an `Iterator`, with a delay between each value.
@@ -757,7 +758,7 @@ A Stream (Reader) is a stream of results, like an `Iterator`, with a delay betwe
 Streams look like Futures, but returns a Poll `Option<...>` rather than a enum of Ready(Result). Streams impl the Stream trait.
 
 `Ready(Some(thing))`: means that stream has more to ask for
-
+```
     pub struct ReadStream { reader: A, buf:[u8;100], }
     impl<A:AsyncRead + Unpin> Stream for ReadStream<A> {
     	type Item = String;
@@ -773,7 +774,7 @@ Streams look like Futures, but returns a Poll `Option<...>` rather than a enum o
           }		
     	}
     }
-
+```
 ## Databases
 
 Crate: Diesel
@@ -796,7 +797,7 @@ Downloading Diesel: `cargo install diesel_cli --no-default-features --features p
     pub mod schema; // how it works https://diesel.rs/
 
 8. `cargo expand` shows us all the functions that are created by diesel macros.
-
+```
     //Creating a DB connection in lib.rs based on .env setup
     pub fn create_connection() -> Result<PgConnection, failure::Error> {
         dotenv::dotenv().ok();
@@ -848,13 +849,13 @@ Downloading Diesel: `cargo install diesel_cli --no-default-features --features p
                  .filter(table1::id.eq(id))
     						 .select((...)) // select
                  .load::<NewStruct/>(&conn)?;
-
+```
 ## Web Servers
 
 **Crate**: Rocket - framework for web services to build websites
 
 `rocket::ignite().launch()`:: creates rocket builder, then starts rocket server
-
+```
     #![feature(proc_macro_hygiene, decl_macro)]
     #[macro_use]
     extern crate rocket;
@@ -887,9 +888,9 @@ Downloading Diesel: `cargo install diesel_cli --no-default-features --features p
         rocket::ignite()      //creates rocket builder
                 .mount("/", routes![root, static_file])    // mounts route & fn
                 .launch();    // starts rocket server, returns error on every case
-
+```
 Custom errors & types in Response
-
+```
     use failure_derive::Fail;
     // allows custom errors to be returned //response is the actual response being returned
     // getting response happens after we return it, friendly to be converted to futures.
@@ -922,14 +923,14 @@ Custom errors & types in Response
             Ok(res)
         }
     }
-
+```
 Configure Rocket.toml
 
     [global.databases]
     doodlebase = {url = "postgres://acct:pw@localhost/dbname"}
 
 ### Sessions
-
+```
     //in session.rs
     pub struct Session(Arc<Mutex<HashMap<u64,User>>>);
 
@@ -960,11 +961,11 @@ Configure Rocket.toml
     let login = cookies.get("login").ok_or(DoodleWebErr::NoCookie)?.value();
     let user = st.get(login.parse().map_err(|_| "DoodleWebErr::NoCookie")?)
                .ok_or(DoodleWebErr::NoSession)?;
-
+```
 ### Static templates
 
 *With Maud: compile time templates*
-
+```
     // pages that return Result<impl Responder>
     Ok(
     	html! {     // a maud macro
@@ -973,7 +974,7 @@ Configure Rocket.toml
     		body { ... }
     	}
     )
-
+```
 ## CLI
 
 **Crate**: clap

+ 17 - 17
docs/saas/openai.md

@@ -4,39 +4,39 @@ After my [most recent experiments](https://davidawindham.com/artificial-intellig
 
 ### Docs
 
-OpenAI Docs - <https://platform.openai.com/docs>  
-OpenAI API Reference - <https://platform.openai.com/docs/api-reference>  
-Plugins - <https://platform.openai.com/docs/plugins>  
+OpenAI Docs - https://platform.openai.com/docs
+OpenAI API Reference - https://platform.openai.com/docs/api-reference 
+Plugins - https://platform.openai.com/docs/plugins 
 
 ### Videos
 
-- Build Your Own Auto-GPT Apps with LangChain - <https://www.youtube.com/watch?v=NYSWn1ipbgg> / <https://github.com/daveebbelaar/langchain-experiments>
-- Building a ChatGPT Plugin for Lex Fridman Podcasts - <https://www.youtube.com/watch?v=bAQ6VRewf0w>
-- The LangChain Cookbook - Beginner Guide To 7 Essential Concepts - <https://www.youtube.com/watch?v=2xxziIWmaSA&t=1s>
+- Build Your Own Auto-GPT Apps with LangChain - https://www.youtube.com/watch?v=NYSWn1ipbgg / https://github.com/daveebbelaar/langchain-experiments
+- Building a ChatGPT Plugin for Lex Fridman Podcasts - https://www.youtube.com/watch?v=bAQ6VRewf0w
+- The LangChain Cookbook - Beginner Guide To 7 Essential Concepts - https://www.youtube.com/watch?v=2xxziIWmaSA&t=1s
 
 
 ### Reference Projects
 
-GPT4 LangChain PDF - <https://github.com/mayooear/gpt4-pdf-chatbot-langchain>  
-LLM trained on 500,000 group chat messages - <https://www.izzy.co/blogs/robo-boys.html> fork 👉🏼 <https://github.com/windhamdavid/gpt4-jenks>
+GPT4 LangChain PDF - https://github.com/mayooear/gpt4-pdf-chatbot-langchain  
+LLM trained on 500,000 group chat messages - https://www.izzy.co/blogs/robo-boys.html fork 👉🏼 https://github.com/windhamdavid/gpt4-jenks
 
-Obsidian Vault-Chat - <https://github.com/exoascension/vault-chat>  
+Obsidian Vault-Chat - https://github.com/exoascension/vault-chat 
 
 ### Reference Lists
 
-<https://github.com/humanloop/awesome-chatgpt>  
+https://github.com/humanloop/awesome-chatgpt  
 
 
 
 ### Learning Courses
 
-ChatGPT Prompt Engineering for Developers - <https://learn.deeplearning.ai/chatgpt-prompt-eng/>
+ChatGPT Prompt Engineering for Developers - https://learn.deeplearning.ai/chatgpt-prompt-eng/
 
-LangChain Tutorials - <https://github.com/gkamradt/langchain-tutorials>
+LangChain Tutorials - https://github.com/gkamradt/langchain-tutorials
 
 ### GPT Retrieval Plugin 
 
-ChatGPT Retrieval Plugin - <https://github.com/windhamdavid/chatgpt-retrieval-plugin>  
+ChatGPT Retrieval Plugin - https://github.com/windhamdavid/chatgpt-retrieval-plugin  
 
 
 ```bash
@@ -149,8 +149,8 @@ Installing the current project: chatgpt-retrieval-plugin (0.1.0)
 
 ### Repos
 
-Llama Index - <https://gpt-index.readthedocs.io/en/latest/>  
-Llama Index - <https://github.com/jerryjliu/llama_index>
+Llama Index - https://gpt-index.readthedocs.io/en/latest/
+Llama Index - https://github.com/jerryjliu/llama_index
 
-LangChain - <https://python.langchain.com/en/latest/index.html>  
-LangChain repo -<https://github.com/hwchase17/langchain>
+LangChain - https://python.langchain.com/en/latest/index.html
+LangChain repo - https://github.com/hwchase17/langchain

+ 7 - 7
docs/saas/supabase.md

@@ -10,19 +10,19 @@ I started with an [AI project](/ai) to import all of the markdown files from thi
 
 ## Dashboard 
 
-- <https://supabase.com/dashboard/>
+- https://supabase.com/dashboard/
 
 ## Docs
 
-- Docs <https://supabase.com/docs>
-- Guides <https://supabase.com/docs/guides>
- - Adding Generative Q&A - <https://supabase.com/docs/guides/ai/examples/headless-vector-search>
-- AI & Vectors <https://supabase.com/vector>
+- Docs https://supabase.com/docs
+- Guides https://supabase.com/docs/guides
+ - Adding Generative Q&A - https://supabase.com/docs/guides/ai/examples/headless-vector-search
+- AI & Vectors https://supabase.com/vector
 
 ## Repos
 
-- Main <https://github.com/supabase/supabase>
-- Realtime - <https://github.com/supabase/realtime>
+- Main https://github.com/supabase/supabase
+- Realtime - https://github.com/supabase/realtime
 
 ## Notes
 

+ 1 - 175
docs/server/kubernetes.md

@@ -8,183 +8,9 @@
 ### notes ###
 ```
 ----
-sheet source - [https://github.com/dennyzhang/cheatsheet-kubernetes-A4](https://github.com/dennyzhang/cheatsheet-kubernetes-A4)
+cheat sheet source - [https://github.com/dennyzhang/cheatsheet-kubernetes-A4](https://github.com/dennyzhang/cheatsheet-kubernetes-A4)
 ## Common Commands
 
-| Name                                                                              | Command                                                                                                                                                                                                                                         |
-| --------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| Run curl test temporarily                                                         | `kubectl run --rm mytest --image=yauritux/busybox-curl -it`                                                                                                                                                                                     |
-| Run wget test temporarily                                                         | `kubectl run --rm mytest --image=busybox -it`                                                                                                                                                                                                   |
-| Run nginx deployment with 2 replicas                                              | `kubectl run my-nginx --image=nginx --replicas=2 --port=80`                                                                                                                                                                                     |
-| Run nginx pod and expose it                                                       | `kubectl run my-nginx --restart=Never --image=nginx --port=80 --expose`                                                                                                                                                                         |
-| Run nginx deployment and expose it                                                | `kubectl run my-nginx --image=nginx --port=80 --expose`                                                                                                                                                                                         |
-| Set namespace preference                                                          | `kubectl config set-context <context_name> --namespace=<ns_name>`                                                                                                                                                                               |
-| List pods with nodes info                                                         | `kubectl get pod -o wide`                                                                                                                                                                                                                       |
-| List everything                                                                   | `kubectl get all --all-namespaces`                                                                                                                                                                                                              |
-| Get all services                                                                  | `kubectl get service --all-namespaces`                                                                                                                                                                                                          |
-| Get all deployments                                                               | `kubectl get deployments --all-namespaces`                                                                                                                                                                                                      |
-| Show nodes with labels                                                            | `kubectl get nodes --show-labels`                                                                                                                                                                                                               |
-| Get resources with json output                                                    | `kubectl get pods --all-namespaces -o json`                                                                                                                                                                                                     |
-| Validate yaml file with dry run                                                   | `kubectl create --dry-run --validate -f pod-dummy.yaml`                                                                                                                                                                                         |
-| Start a temporary pod for testing                                                 | `kubectl run --rm -i -t --image=alpine test-$RANDOM -- sh`                                                                                                                                                                                      |
-| kubectl run shell command                                                         | `kubectl exec -it mytest -- ls -l /etc/hosts`                                                                                                                                                                                                   |
-| Get system conf via configmap                                                     | `kubectl -n kube-system get cm kubeadm-config -o yaml`                                                                                                                                                                                          |
-| Get deployment yaml                                                               | `kubectl -n denny-websites get deployment mysql -o yaml`                                                                                                                                                                                        |
-| Explain resource                                                                  | `kubectl explain pods`, `kubectl explain svc`                                                                                                                                                                                                   |
-| Watch pods                                                                        | `kubectl get pods  -n wordpress --watch`                                                                                                                                                                                                        |
-| Query healthcheck endpoint                                                        | `curl -L http://127.0.0.1:10250/healthz`                                                                                                                                                                                                        |
-| Open a bash terminal in a pod                                                     | `kubectl exec -it storage sh`                                                                                                                                                                                                                   |
-| Check pod environment variables                                                   | `kubectl exec redis-master-ft9ex env`                                                                                                                                                                                                           |
-| Enable kubectl shell autocompletion                                               | `echo "source <(kubectl completion bash)" >>~/.bashrc`, and reload                                                                                                                                                                              |
-| Use minikube dockerd in your laptop                                               | `eval $(minikube docker-env)`, No need to push docker hub any more                                                                                                                                                                              |
-| Kubectl apply a folder of yaml files                                              | `kubectl apply -R -f .`                                                                                                                                                                                                                         |
-| Get services sorted by name                                                       | kubectl get services –sort-by=.metadata.name                                                                                                                                                                                                    |
-| Get pods sorted by restart count                                                  | kubectl get pods –sort-by='.status.containerStatuses\[0\].restartCount'                                                                                                                                                                         |
-| List pods and images                                                              | kubectl get pods -o='custom-columns=PODS:.metadata.name,Images:.spec.containers\[\*\].image'                                                                                                                                                    |
-| List all container images                                                         | [list-all-images.sh](https://github.com/dennyzhang/cheatsheet-kubernetes-A4/blob/master/list-all-images.sh#L14-L17)                                                                                                                             |
-| kubeconfig skip tls verification                                                  | [skip-tls-verify.md](https://github.com/dennyzhang/cheatsheet-kubernetes-A4/blob/master/skip-tls-verify.md)                                                                                                                                     |
-| [Ubuntu install kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) | `"deb https://apt.kubernetes.io/ kubernetes-xenial main"`                                                                                                                                                                                       |
-| Reference                                                                         | [GitHub: kubernetes releases](https://github.com/kubernetes/kubernetes/tags)                                                                                                                                                                    |
-| Reference                                                                         | [minikube cheatsheet](https://cheatsheet.dennyzhang.com/cheatsheet-minikube-A4), [docker cheatsheet](https://cheatsheet.dennyzhang.com/cheatsheet-docker-A4), [OpenShift CheatSheet](https://cheatsheet.dennyzhang.com/cheatsheet-openshift-A4) |
-
-## Check Performance
-
-| Name                                         | Command                                              |
-| -------------------------------------------- | ---------------------------------------------------- |
-| Get node resource usage                      | `kubectl top node`                                   |
-| Get pod resource usage                       | `kubectl top pod`                                    |
-| Get resource usage for a given pod           | `kubectl top <podname> --containers`                 |
-| List resource utilization for all containers | `kubectl top pod --all-namespaces --containers=true` |
-
-## Resources Deletion
-
-| Name                                    | Command                                                  |
-| --------------------------------------- | -------------------------------------------------------- |
-| Delete pod                              | `kubectl delete pod/<pod-name> -n <my-namespace>`        |
-| Delete pod by force                     | `kubectl delete pod/<pod-name> --grace-period=0 --force` |
-| Delete pods by labels                   | `kubectl delete pod -l env=test`                         |
-| Delete deployments by labels            | `kubectl delete deployment -l app=wordpress`             |
-| Delete all resources filtered by labels | `kubectl delete pods,services -l name=myLabel`           |
-| Delete resources under a namespace      | `kubectl -n my-ns delete po,svc --all`                   |
-| Delete persist volumes by labels        | `kubectl delete pvc -l app=wordpress`                    |
-| Delete state fulset only (not pods)     | `kubectl delete sts/<stateful_set_name> --cascade=false` |
-
-
-
-## Log & Conf Files
-
-| Name                      | Comment                                                                   |
-| ------------------------- | ------------------------------------------------------------------------- |
-| Config folder             | `/etc/kubernetes/`                                                        |
-| Certificate files         | `/etc/kubernetes/pki/`                                                    |
-| Credentials to API server | `/etc/kubernetes/kubelet.conf`                                            |
-| Superuser credentials     | `/etc/kubernetes/admin.conf`                                              |
-| kubectl config file       | `~/.kube/config`                                                          |
-| Kubernets working dir     | `/var/lib/kubelet/`                                                       |
-| Docker working dir        | `/var/lib/docker/`, `/var/log/containers/`                                |
-| Etcd working dir          | `/var/lib/etcd/`                                                          |
-| Network cni               | `/etc/cni/net.d/`                                                         |
-| Log files                 | `/var/log/pods/`                                                          |
-| log in worker node        | `/var/log/kubelet.log`, `/var/log/kube-proxy.log`                         |
-| log in master node        | `kube-apiserver.log`, `kube-scheduler.log`, `kube-controller-manager.log` |
-| Env                       | `/etc/systemd/system/kubelet.service.d/10-kubeadm.conf`                   |
-| Env                       | export KUBECONFIG=/etc/kubernetes/admin.conf                              |
-
-## Pod
-
-| Name                                                                             | Command                                                                                        |
-| -------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
-| List all pods                                                                    | `kubectl get pods`                                                                             |
-| List pods for all namespace                                                      | `kubectl get pods -all-namespaces`                                                             |
-| List all critical pods                                                           | `kubectl get -n kube-system pods -a`                                                           |
-| List pods with more info                                                         | `kubectl get pod -o wide`, `kubectl get pod/<pod-name> -o yaml`                                |
-| Get pod info                                                                     | `kubectl describe pod/srv-mysql-server`                                                        |
-| List all pods with labels                                                        | `kubectl get pods --show-labels`                                                               |
-| [List all unhealthy pods](https://github.com/kubernetes/kubernetes/issues/49387) | kubectl get pods –field-selector=status.phase\!=Running –all-namespaces                        |
-| List running pods                                                                | kubectl get pods –field-selector=status.phase=Running                                          |
-| kubectl run command                                                              | kubectl exec -it -n "$ns" "$podname" – sh -c "echo $msg \>\>/dev/err.log"                      |
-| Watch pods                                                                       | `kubectl get pods  -n wordpress --watch`                                                       |
-| Get pod by selector                                                              | kubectl get pods –selector="app=syslog" -o jsonpath='{.items\[\*\].metadata.name}'             |
-| List pods and images                                                             | kubectl get pods -o='custom-columns=PODS:.metadata.name,Images:.spec.containers\[\*\].image'   |
-| List pods and containers                                                         | \-o='custom-columns=PODS:.metadata.name,CONTAINERS:.spec.containers\[\*\].name'                |
-| Reference                                                                        | [Link: kubernetes yaml templates](https://cheatsheet.dennyzhang.com/kubernetes-yaml-templates) |
-
-## Label & Annontation
-
-| Name                             | Command                                                           |
-| -------------------------------- | ----------------------------------------------------------------- |
-| Filter pods by label             | `kubectl get pods -l owner=denny`                                 |
-| Manually add label to a pod      | `kubectl label pods dummy-input owner=denny`                      |
-| Remove label                     | `kubectl label pods dummy-input owner-`                           |
-| Manually add annonation to a pod | `kubectl annotate pods dummy-input my-url=https://dennyzhang.com` |
-
-## Deployment & Scale
-
-| Name                         | Command                                                                                                                                                                                                                                            |
-| ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| Scale out                    | `kubectl scale --replicas=3 deployment/nginx-app`                                                                                                                                                                                                  |
-| online rolling upgrade       | `kubectl rollout app-v1 app-v2 --image=img:v2`                                                                                                                                                                                                     |
-| Roll backup                  | `kubectl rollout app-v1 app-v2 --rollback`                                                                                                                                                                                                         |
-| List rollout                 | `kubectl get rs`                                                                                                                                                                                                                                   |
-| Check update status          | `kubectl rollout status deployment/nginx-app`                                                                                                                                                                                                      |
-| Check update history         | `kubectl rollout history deployment/nginx-app`                                                                                                                                                                                                     |
-| Pause/Resume                 | `kubectl rollout pause deployment/nginx-deployment`, `resume`                                                                                                                                                                                      |
-| Rollback to previous version | `kubectl rollout undo deployment/nginx-deployment`                                                                                                                                                                                                 |
-| Reference                    | [Link: kubernetes yaml templates](https://cheatsheet.dennyzhang.com/kubernetes-yaml-templates), [Link: Pausing and Resuming a Deployment](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#pausing-and-resuming-a-deployment) |
-
-
-
-## Quota & Limits & Resource
-
-| Name                          | Command                                                                                        |
-| ----------------------------- | ---------------------------------------------------------------------------------------------- |
-| List Resource Quota           | `kubectl get resourcequota`                                                                    |
-| List Limit Range              | `kubectl get limitrange`                                                                       |
-| Customize resource definition | `kubectl set resources deployment nginx -c=nginx --limits=cpu=200m`                            |
-| Customize resource definition | `kubectl set resources deployment nginx -c=nginx --limits=memory=512Mi`                        |
-| Reference                     | [Link: kubernetes yaml templates](https://cheatsheet.dennyzhang.com/kubernetes-yaml-templates) |
-
-## Service
-
-| Name                            | Command                                                                                        |
-| ------------------------------- | ---------------------------------------------------------------------------------------------- |
-| List all services               | `kubectl get services`                                                                         |
-| List service endpoints          | `kubectl get endpoints`                                                                        |
-| Get service detail              | `kubectl get service nginx-service -o yaml`                                                    |
-| Expose deployment as lb service | `kubectl expose deployment/my-app --type=LoadBalancer --name=my-service`                       |
-| Expose service as lb service    | `kubectl expose service/wordpress-1-svc --type=LoadBalancer --name=ns1`                        |
-| Reference                       | [Link: kubernetes yaml templates](https://cheatsheet.dennyzhang.com/kubernetes-yaml-templates) |
-
-## Secrets
-
-| Name                             | Command                                                                                                                                                                    |
-| -------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| List secrets                     | `kubectl get secrets --all-namespaces`                                                                                                                                     |
-| Generate secret                  | `echo -n 'mypasswd'`, then redirect to `base64 --decode`                                                                                                                   |
-| Get secret                       | `kubectl get secret denny-cluster-kubeconfig`                                                                                                                              |
-| Get a specific field of a secret | kubectl get secret denny-cluster-kubeconfig -o jsonpath="{.data.value}"                                                                                                    |
-| Create secret from cfg file      | kubectl create secret generic db-user-pass –from-file=./username.txt                                                                                                       |
-| Reference                        | [Link: kubernetes yaml templates](https://cheatsheet.dennyzhang.com/kubernetes-yaml-templates), [Link: Secrets](https://kubernetes.io/docs/concepts/configuration/secret/) |
-
-## StatefulSet
-
-| Name                               | Command                                                                                        |
-| ---------------------------------- | ---------------------------------------------------------------------------------------------- |
-| List statefulset                   | `kubectl get sts`                                                                              |
-| Delete statefulset only (not pods) | `kubectl delete sts/<stateful_set_name> --cascade=false`                                       |
-| Scale statefulset                  | `kubectl scale sts/<stateful_set_name> --replicas=5`                                           |
-| Reference                          | [Link: kubernetes yaml templates](https://cheatsheet.dennyzhang.com/kubernetes-yaml-templates) |
-
-## Volumes & Volume Claims
-
-| Name                      | Command                                                                                        |
-| ------------------------- | ---------------------------------------------------------------------------------------------- |
-| List storage class        | `kubectl get storageclass`                                                                     |
-| Check the mounted volumes | `kubectl exec storage ls /data`                                                                |
-| Check persist volume      | `kubectl describe pv/pv0001`                                                                   |
-| Copy local file to pod    | `kubectl cp /tmp/my <some-namespace>/<some-pod>:/tmp/server`                                   |
-| Copy pod file to local    | `kubectl cp <some-namespace>/<some-pod>:/tmp/server /tmp/my`                                   |
-| Reference                 | [Link: kubernetes yaml templates](https://cheatsheet.dennyzhang.com/kubernetes-yaml-templates) |
 
 ## Events & Metrics
 

+ 10 - 10
docs/server/letsencrypt.md

@@ -162,11 +162,11 @@ Inside the server block, add this location block:
 
 Add to SSL server block
 
-
+```
             location ~ /.well-known {
                     allow all;
             }
-
+```
 
 You will also want look up what your document root is set to by searching for the `root` directive, as the path is required to use the Webroot plugin. If you're using the default configuration file, the root will be `/var/www/html`.
 
@@ -341,7 +341,7 @@ Inside, your server block probably begins like this:
 
 /etc/nginx/sites-available/default
 
-
+```
     server {
         listen 80 default_server;
         listen [::]:80 default_server;
@@ -352,7 +352,7 @@ Inside, your server block probably begins like this:
         # listen [::]:443 ssl default_server;
 
         . . .
-
+```
 
 We will be modifying this configuration so that unencrypted HTTP requests are automatically redirected to encrypted HTTPS. This offers the best security for our sites. If you want to allow both HTTP and HTTPS traffic, use the alternative configuration that follows.
 
@@ -360,7 +360,7 @@ We will be splitting the configuration into two separate blocks. After the two f
 
 /etc/nginx/sites-available/default
 
-
+```
     server {
         listen 80 default_server;
         listen [::]:80 default_server;
@@ -374,7 +374,7 @@ We will be splitting the configuration into two separate blocks. After the two f
         # listen [::]:443 ssl default_server;
 
         . . .
-
+```
 
 Next, we need to start a new server block directly below to contain the remaining configuration. We can uncomment the two `listen` directives that use port 443. We can add `http2` to these lines in order to enable HTTP/2 within this block. Afterwards, we just need to include the two snippet files we set up:
 
@@ -382,7 +382,7 @@ Next, we need to start a new server block directly below to contain the remainin
 
 /etc/nginx/sites-available/default
 
-
+```
     server {
         listen 80 default_server;
         listen [::]:80 default_server;
@@ -400,7 +400,7 @@ Next, we need to start a new server block directly below to contain the remainin
         include snippets/ssl-params.conf;
 
         . . .
-
+```
 
 Save and close the file when you are finished.
 
@@ -410,7 +410,7 @@ If you want or need to allow both encrypted and unencrypted content, you will ha
 
 /etc/nginx/sites-available/default
 
-
+```
     server {
         listen 80 default_server;
         listen [::]:80 default_server;
@@ -422,7 +422,7 @@ If you want or need to allow both encrypted and unencrypted content, you will ha
         include snippets/ssl-params.conf;
 
         . . .
-
+```
 
 Save and close the file when you are finished.
 

+ 5 - 922
docs/server/mail.md

@@ -1,928 +1,11 @@
+:::note
 
+**23/11/12** - no longer host mail on one of my servers, so I don't need this reference.
 
-[Source](https://www.linode.com/docs/email/postfix/email-with-postfix-dovecot-and-mysql "Permalink to Email with Postfix, Dovecot, and MySQL")
+:::
 
-### Email with Postfix, Dovecot, and MySQL
-
-
-For a different Linux distribution or different mail server, review our [email tutorials][2].
-
-### Before You Begin
-
-Ensure that the iptables firewall is not blocking any of the standard mail ports (`25`, `465`, `587`, `110`, `995`, `143`, and `993`). If using a different form of firewall, confirm that it is not blocking any of the needed ports either.
-
-### Configure DNS
-
-When ready to update the DNS and to start sending mail to the server, edit the domain's MX record so that it points to the Linode's domain or IP address, similar to the example below:
-
-    example.com         MX      10      example.com
-    example.com         MX      10      12.34.56.78
-    mail.example.com    MX      10      12.34.56.78
-
-Ensure that the MX record is changed for all domains and subdomains that might receive email. If setting up a brand new domain, these steps can be performed prior to configuring the mail server. When using Linode's DNS Manager, create an MX record that points to the desired domain or subdomain, and then create an A record for that domain or subdomain, which points to the correct IP address.
-
-### Installing an SSL Certificate
-
-Dovecot offers a default self-signed certificate for free. This certificate encrypts the mail connections similar to a purchased certificate. However, the email users receive warnings about the certificate when they attempt to set up their email accounts. Optionally, you can purchase and configure a commercial SSL certificate to avoid the warnings. For information about SSL certificates, see Linode's SSL Certificate guides.
-
-{: .note}
->
-> As of version 2.2.13-7, Dovecot no longer provides a default SSL certificate. This affects Debian 8 users, and means that if you wish to use SSL encryption (recommended), you must generate your own self-signed certificate or use a trusted certificate from a Certificate Authority.
->
-> Many email service providers such as Gmail will only accept commercial SSL certificates for secure IMAP/POP3 connections. To communicate with these providers, follow our guide for obtaining a commercial SSL certificate for Debian and Ubuntu or CentOS and Fedora.
-
-## Installing Packages
-
-The next steps are to install the required packages on the Linode.
-
-1.  Log in as the root user via SSH. Replace `example` with your domain name or IP address:
-
-        ssh root@example
-
-2.  Install the required packages:
-
-        apt-get install postfix postfix-mysql dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd dovecot-mysql mysql-server
-
-    Follow the prompt to type in a secure MySQL password and to select the type of mail server you wish to configure. Select **Internet Site**. The *System Mail Name* should be the FQDN.
-
-
-## MySQL
-
-1.  Create a new database:
-
-        mysqladmin -p create mailserver
-
-2.  Enter the MySQL root password.
-
-3.  Log in to MySQL:
-
-        mysql -p mailserver
-
-4.  Create the MySQL user and grant the new user permissions over the database. Replace `mailuserpass` with a secure password:
-
-        GRANT SELECT ON mailserver.* TO 'mailuser'@'127.0.0.1' IDENTIFIED BY 'mailuserpass';
-
-5.  Flush the MySQL privileges to apply the change:
-
-        FLUSH PRIVILEGES;
-
-6.  Create a table for the domains that will receive mail on the Linode:
-
-        CREATE TABLE `virtual_domains` (
-          `id` int(11) NOT NULL auto_increment,
-          `name` varchar(50) NOT NULL,
-          PRIMARY KEY (`id`)
-        ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
-7.  Create a table for all of the email addresses and passwords:
-
-        CREATE TABLE `virtual_users` (
-          `id` int(11) NOT NULL auto_increment,
-          `domain_id` int(11) NOT NULL,
-          `password` varchar(106) NOT NULL,
-          `email` varchar(100) NOT NULL,
-          PRIMARY KEY (`id`),
-          UNIQUE KEY `email` (`email`),
-          FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
-        ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
-8.  Create a table for the email aliases:
-
-        CREATE TABLE `virtual_aliases` (
-          `id` int(11) NOT NULL auto_increment,
-          `domain_id` int(11) NOT NULL,
-          `source` varchar(100) NOT NULL,
-          `destination` varchar(100) NOT NULL,
-          PRIMARY KEY (`id`),
-          FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
-        ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
-### Adding Data
-
-Now that the database and tables have been created, add some data to MySQL.
-
-1.  Add the domains to the `virtual_domains` table. Replace the values for `example.com` and `hostname` with your own settings.
-
-        INSERT INTO `mailserver`.`virtual_domains`
-          (`id` ,`name`)
-        VALUES
-          ('1', 'example.com'),
-          ('2', 'hostname.example.com'),
-          ('3', 'hostname'),
-          ('4', 'localhost.example.com');
-
-    {: .note }
-    >
-    > Note which `id` goes with which domain, the `id` is necessary for the next two steps.
-
-2.  Add email addresses to the `virtual_users` table. Replace the email address values with the addresses that you wish to configure on the mailserver. Replace the `password` values with strong passwords.
-
-        INSERT INTO `mailserver`.`virtual_users`
-          (`id`, `domain_id`, `password` , `email`)
-        VALUES
-          ('1', '1', ENCRYPT('password', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'email1@example.com'),
-          ('2', '1', ENCRYPT('password', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'email2@example.com');
-
-3.  To set up an email alias, add it to the `virtual_aliases` table.
-
-        INSERT INTO `mailserver`.`virtual_aliases`
-          (`id`, `domain_id`, `source`, `destination`)
-        VALUES
-          ('1', '1', 'alias@example.com', 'email1@example.com');
-
-That's it! Now you're ready to verify that the data was successfully added to MySQL.
-
-### Testing
-
-Since all of the information has been entered into MySQL, check that the data is there.
-
-1.  Check the contents of the `virtual_domains` table:
-
-        SELECT * FROM mailserver.virtual_domains;
-
-2.  Verify that you see the following output:
-
-        +----+-----------------------+
-        | id | name                  |
-        +----+-----------------------+
-        |  1 | example.com           |
-        |  2 | hostname.example.com  |
-        |  3 | hostname              |
-        |  4 | localhost.example.com |
-        +----+-----------------------+
-        4 rows in set (0.00 sec)
-
-3.  Check the `virtual_users` table:
-
-        SELECT * FROM mailserver.virtual_users;
-
-4.  Verify the following output, the hashed passwords are longer than they appear below:
-
-        +----+-----------+-------------------------------------+--------------------+
-        | id | domain_id | password                            | email              |
-        +----+-----------+-------------------------------------+--------------------+
-        |  1 |         1 | $6$574ef443973a5529c20616ab7c6828f7 | email1@example.com |
-        |  2 |         1 | $6$030fa94bcfc6554023a9aad90a8c9ca1 | email2@example.com |
-        +----+-----------+-------------------------------------+--------------------+
-        2 rows in set (0.01 sec)
-
-5.  Check the `virtual_aliases` table:
-
-        SELECT * FROM mailserver.virtual_aliases;
-
-6.  Verify the following output:
-
-        +----+-----------+-------------------+--------------------+
-        | id | domain_id | source            | destination        |
-        +----+-----------+-------------------+--------------------+
-        |  1 |         1 | alias@example.com | email1@example.com |
-        +----+-----------+-------------------+--------------------+
-        1 row in set (0.00 sec)
-
-7.  If everything outputs correctly, you're done with MySQL! Exit MySQL:
-
-        exit
-
-## Postfix
-
-Next, set up Postfix so the server can accept incoming messages for the domains.
-
-1.  Before making any changes, make a copy of the default Postfix configuration file in case you need to revert to the default configuration:
-
-        cp /etc/postfix/main.cf /etc/postfix/main.cf.orig
-
-2.  Edit the `/etc/postfix/main.cf` file to match the following. Ensure that occurrences of `example.com` are replaced with the domain name. Also, replace `hostname` with the system's hostname on line 44.
-
-    {:.file }
-    /etc/postfix/main.cf
-
-        # See /usr/share/postfix/main.cf.dist for a commented, more complete version
-
-        # Debian specific:  Specifying a file name will cause the first
-        # line of that file to be used as the name.  The Debian default
-        # is /etc/mailname.
-        #myorigin = /etc/mailname
-
-        smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
-        biff = no
-
-        # appending .domain is the MUA's job.
-        append_dot_mydomain = no
-
-        # Uncomment the next line to generate "delayed mail" warnings
-        #delay_warning_time = 4h
-
-        readme_directory = no
-
-        # TLS parameters
-        #smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
-        #smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
-        #smtpd_use_tls=yes
-        #smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
-        #smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
-
-        smtpd_tls_cert_file=/etc/dovecot/dovecot.pem
-        smtpd_tls_key_file=/etc/dovecot/private/dovecot.pem
-        smtpd_use_tls=yes
-        smtpd_tls_auth_only = yes
-
-        #Enabling SMTP for authenticated users, and handing off authentication to Dovecot
-        smtpd_sasl_type = dovecot
-        smtpd_sasl_path = private/auth
-        smtpd_sasl_auth_enable = yes
-
-        smtpd_recipient_restrictions =
-                permit_sasl_authenticated,
-                permit_mynetworks,
-                reject_unauth_destination
-
-        # See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
-        # information on enabling SSL in the smtp client.
-
-        myhostname = hostname.example.com
-        alias_maps = hash:/etc/aliases
-        alias_database = hash:/etc/aliases
-        myorigin = /etc/mailname
-        #mydestination = example.com, hostname.example.com, localhost.example.com, localhost
-        mydestination = localhost
-        relayhost =
-        mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
-        mailbox_size_limit = 0
-        recipient_delimiter = +
-        inet_interfaces = all
-
-        #Handing off local delivery to Dovecot's LMTP, and telling it where to store mail
-        virtual_transport = lmtp:unix:private/dovecot-lmtp
-
-        #Virtual domains, users, and aliases
-        virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
-        virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
-        virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf,
-                mysql:/etc/postfix/mysql-virtual-email2email.cf
-
-
-3.  Create the file for virtual domains. Ensure that you change the password for the `mailuser` account. If you used a different user, database name, or table name, change those settings as well.
-
-    {: .file }
-    /etc/postfix/mysql-virtual-mailbox-domains.cf
-
-        user = mailuser
-        password = mailuserpass
-        hosts = 127.0.0.1
-        dbname = mailserver
-        query = SELECT 1 FROM virtual_domains WHERE name='%s'
-
-
-4.  Create the `/etc/postfix/mysql-virtual-mailbox-maps.cf` file, and enter the following values. Make sure you use the `mailuser`'s password and make any other changes as needed.
-
-    {: .file }
-    /etc/postfix/mysql-virtual-mailbox-maps.cf
-
-        user = mailuser
-        password = mailuserpass
-        hosts = 127.0.0.1
-        dbname = mailserver
-        query = SELECT 1 FROM virtual_users WHERE email='%s'
-
-
-5.  Create the `/etc/postfix/mysql-virtual-alias-maps.cf` file and enter the following values. Again, make sure you use the mailuser's password, and make any other changes as necessary.
-
-    {: .file }
-    /etc/postfix/mysql-virtual-alias-maps.cf
-
-        user = mailuser
-        password = mailuserpass
-        hosts = 127.0.0.1
-        dbname = mailserver
-        query = SELECT destination FROM virtual_aliases WHERE source='%s'
-
-
-6.  Create the `/etc/postfix/mysql-virtual-email2email.cf` file and enter the following values. Again, make sure you use the mailuser's password, and make any other changes as necessary.
-
-    {: .file }
-    /etc/postfix/mysql-virtual-email2email.cf
-
-        user = mailuser
-        password = mailuserpass
-        hosts = 127.0.0.1
-        dbname = mailserver
-        query = SELECT email FROM virtual_users WHERE email='%s'
-
-
-7.  Save the changes you've made to the `/etc/postfix/mysql-virtual-email2email.cf` file, and restart Postfix:
-
-        sudo service postfix restart
-
-8.  Enter the following command to ensure that Postfix can find the first domain. Be sure to replace `example.com` with the first virtual domain. The command should return `1` if it is successful.
-
-        postmap -q example.com mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
-
-9.  Test Postfix to verify that it can find the first email address in the MySQL table. Enter the following command, replacing `email1@example.com` with the first email address in the MySQL table. You should again receive `1` as the output:
-
-        postmap -q email1@example.com mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
-
-10. Test Postfix to verify that it can find the aliases by entering the following command. Be sure to replace `alias@example.com` with the actual alias you entered:
-
-        postmap -q alias@example.com mysql:/etc/postfix/mysql-virtual-alias-maps.cf
-
-    This should return the email address to which the alias forwards, which is `email1@example.com` in this example.
-
-11. Make a copy of the `/etc/postfix/master.cf` file:
-
-        cp /etc/postfix/master.cf /etc/postfix/master.cf.orig
-
-12. Open the configuration file for editing and uncomment the two lines starting with `submission` and `smtps` and the block of lines starting with `-o` after each. The first section of the `/etc/postfix/master.cf` file should resemble the following:
-
-    {: .file-excerpt }
-	  /etc/postfix/master.cf
-
-  	    #
-  	    # Postfix master process configuration file.  For details on the format
-  	    # of the file, see the master(5) manual page (command: "man 5 master").
-  	    #
-  	    # Do not forget to execute "postfix reload" after editing this file.
-  	    #
-  	    # ==========================================================================
-  	    # service type  private unpriv  chroot  wakeup  maxproc command + args
-  	    #               (yes)   (yes)   (yes)   (never) (100)
-  	    # ==========================================================================
-  	    smtp      inet  n       -       -       -       -       smtpd
-  	    #smtp      inet  n       -       -       -       1       postscreen
-  	    #smtpd     pass  -       -       -       -       -       smtpd
-  	    #dnsblog   unix  -       -       -       -       0       dnsblog
-  	    #tlsproxy  unix  -       -       -       -       0       tlsproxy
-  	    submission inet n       -       -       -       -       smtpd
-  	      -o syslog_name=postfix/submission
-  	      -o smtpd_tls_security_level=encrypt
-  	      -o smtpd_sasl_auth_enable=yes
-  	      -o smtpd_client_restrictions=permit_sasl_authenticated,reject
-  	      -o milter_macro_daemon_name=ORIGINATING
-  	    smtps     inet  n       -       -       -       -       smtpd
-  	      -o syslog_name=postfix/smtps
-  	      -o smtpd_tls_wrappermode=yes
-  	      -o smtpd_sasl_auth_enable=yes
-  	      -o smtpd_client_restrictions=permit_sasl_authenticated,reject
-  	      -o milter_macro_daemon_name=ORIGINATING
-
-
-13. Change the permissions on the `/etc/postfix` directory to restrict permissions to allow only its owner and the corresponding group:
-
-        chmod -R o-rwx /etc/postfix
-
-14. Restart Postfix:
-
-        service postfix restart
-
-Congratulations! You have successfully configured Postfix.
-
-## Dovecot
-
-Dovecot allows users to log in and check their email using POP3 and IMAP. In this section, configure Dovecot to force users to use SSL when they connect so that their passwords are never sent to the server in plain text.
-
-1.  Copy all of the configuration files so that you can easily revert back to them if needed:
-
-        cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.orig
-        cp /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.orig
-        cp /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.orig
-        cp /etc/dovecot/dovecot-sql.conf.ext /etc/dovecot/dovecot-sql.conf.ext.orig
-        cp /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10-master.conf.orig
-        cp /etc/dovecot/conf.d/10-ssl.conf /etc/dovecot/conf.d/10-ssl.conf.orig
-
-2.  Open the main configuration file and edit the contents to match the following. Specifically, add the line beginning with `protocols` under the section beginning with "Enable installed protocols."
-
-    {:.file }
-    /etc/dovecot/dovecot.conf
-
-        ## Dovecot configuration file
-
-        # If you're in a hurry, see http://wiki2.dovecot.org/QuickConfiguration
-
-        # "doveconf -n" command gives a clean output of the changed settings. Use it
-        # instead of copy&pasting files when posting to the Dovecot mailing list.
-
-        # '#' character and everything after it is treated as comments. Extra spaces
-        # and tabs are ignored. If you want to use either of these explicitly, put the
-        # value inside quotes, eg.: key = "# char and trailing whitespace  "
-
-        # Default values are shown for each setting, it's not required to uncomment
-        # those. These are exceptions to this though: No sections (e.g. namespace {})
-        # or plugin settings are added by default, they're listed only as examples.
-        # Paths are also just examples with the real defaults being based on configure
-        # options. The paths listed here are for configure --prefix=/usr
-        # --sysconfdir=/etc --localstatedir=/var
-
-        # Enable installed protocols
-        !include_try /usr/share/dovecot/protocols.d/*.protocol
-        protocols = imap pop3 lmtp
-
-        # A comma separated list of IPs or hosts where to listen in for connections.
-        # "*" listens in all IPv4 interfaces, "::" listens in all IPv6 interfaces.
-        # If you want to specify non-default ports or anything more complex,
-        # edit conf.d/master.conf.
-        #listen = *, ::
-
-        # Base directory where to store runtime data.
-        #base_dir = /var/run/dovecot/
-
-        # Name of this instance. Used to prefix all Dovecot processes in ps output.
-        #instance_name = dovecot
-
-        # Greeting message for clients.
-        #login_greeting = Dovecot ready.
-
-        # Space separated list of trusted network ranges. Connections from these
-        # IPs are allowed to override their IP addresses and ports (for logging and
-        # for authentication checks). disable_plaintext_auth is also ignored for
-        # these networks. Typically you'd specify the IMAP proxy servers here.
-        #login_trusted_networks =
-
-        # Sepace separated list of login access check sockets (e.g. tcpwrap)
-        #login_access_sockets =
-
-        # Show more verbose process titles (in ps). Currently shows user name and
-        # IP address. Useful for seeing who are actually using the IMAP processes
-        # (eg. shared mailboxes or if same uid is used for multiple accounts).
-        #verbose_proctitle = no
-
-        # Should all processes be killed when Dovecot master process shuts down.
-        # Setting this to "no" means that Dovecot can be upgraded without
-        # forcing existing client connections to close (although that could also be
-        # a problem if the upgrade is e.g. because of a security fix).
-        #shutdown_clients = yes
-
-        # If non-zero, run mail commands via this many connections to doveadm server,
-        # instead of running them directly in the same process.
-        #doveadm_worker_count = 0
-        # UNIX socket or host:port used for connecting to doveadm server
-        #doveadm_socket_path = doveadm-server
-
-        # Space separated list of environment variables that are preserved on Dovecot
-        # startup and passed down to all of its child processes. You can also give
-        # key=value pairs to always set specific settings.
-        #import_environment = TZ
-
-        ##
-        ## Dictionary server settings
-        ##
-
-        # Dictionary can be used to store key=value lists. This is used by several
-        # plugins. The dictionary can be accessed either directly or though a
-        # dictionary server. The following dict block maps dictionary names to URIs
-        # when the server is used. These can then be referenced using URIs in format
-        # "proxy::<name>".
-
-        dict {
-          #quota = mysql:/etc/dovecot/dovecot-dict-sql.conf.ext
-          #expire = sqlite:/etc/dovecot/dovecot-dict-sql.conf.ext
-        }
-
-        # Most of the actual configuration gets included below. The filenames are
-        # first sorted by their ASCII value and parsed in that order. The 00-prefixes
-        # in filenames are intended to make it easier to understand the ordering.
-        !include conf.d/*.conf
-
-        # A config file can also tried to be included without giving an error if
-        # it's not found:
-        !include_try local.conf
-
-
-3.  Save the changes to the `/etc/dovecot/dovecot.conf` file.
-
-4.  Open the `/etc/dovecot/conf.d/10-mail.conf` file. This file controls how Dovecot interacts with the server's file system to store and retrieve messages.
-
-    {:.note}
-    >
-    > Click to see the final, complete version of `10-mail.conf` example file. This is a long file, so you may need to use your text editor's search feature to find the values you need to edit.
-
-    Modify the following variables within the configuration file:
+[Permalink to Email with Postfix, Dovecot, and MySQL](https://www.linode.com/docs/email/postfix/email-with-postfix-dovecot-and-mysql "Permalink to Email with Postfix, Dovecot, and MySQL")
 
-    {: .file-excerpt }
-    /etc/dovecot/conf.d/10-mail.conf
-
-        mail_location = maildir:/var/mail/vhosts/%d/%n
-        ...
-        mail_privileged_group = mail
-
-
-    Save your changes and exit.
-
-5.  Enter the following command to verify the permissions for `/var/mail`:
-
-        ls -ld /var/mail
-
-6.  Verify that the permissions for `/var/mail` are as follows. The date and time will likely be different in your output:
-
-        drwxrwsr-x 2 root mail 4096 Mar  6 15:08 /var/mail
-
-    If your permissions do not match the above, go back and ensure you've completed the above steps correctly.
-
-7.  Create the `/var/mail/vhosts/` directory and a subdirectory for your domain, replacing `example.com`:
-
-        mkdir -p /var/mail/vhosts/example.com
-
-    This directory will serve as storage for mail sent to your domain.
-
-8.  Create the `vmail` user with a user and group id of 5000 by entering the following commands, one by one. This user will be in charge of reading mail from the server.
-
-        groupadd -g 5000 vmail
-        useradd -g vmail -u 5000 vmail -d /var/mail
-
-9.  Change the owner of the `/var/mail/` folder and its contents to belong to `vmail`:
-
-        chown -R vmail:vmail /var/mail
-
-10. Open the user authentication file, located in `/etc/dovecot/conf.d/10-auth.conf` and disable plain-text authentication by uncommenting this line:
-
-
-    /etc/dovecot/conf.d/10-auth.conf
-
-    disable_plaintext_auth = yes
-
-
-  Set the `auth_mechanisms` by modifying the following line:
-
-	/etc/dovecot/conf.d/10-auth.conf
-
-	   auth_mechanisms = plain login
-
-
-  Comment out the system user login line:
-
-    {: .file-excerpt }
-	/etc/dovecot/conf.d/10-auth.conf
-	: ~~~
-	  #!include auth-system.conf.ext
-	  ~~~
-
-  Enable MySQL authentication by uncommenting the `auth-sql.conf.ext` line:
-
-
-	/etc/dovecot/conf.d/10-auth.conf
-	  #!include auth-system.conf.ext
-	  !include auth-sql.conf.ext
-	  #!include auth-ldap.conf.ext
-	  #!include auth-passwdfile.conf.ext
-	  #!include auth-checkpassword.conf.ext
-	  #!include auth-vpopmail.conf.ext
-	  #!include auth-static.conf.ext
-
-
-
-
-  Save the changes to the `/etc/dovecot/conf.d/10-auth.conf` file.
-
-11. Edit the `/etc/dovecot/conf.d/auth-sql.conf.ext` file with the authentication information. Ensure your file contains the following lines and that they are uncommented:
-
-    {: .file-excerpt }
-	  /etc/dovecot/conf.d/auth-sql.conf.ext
-
-	    passdb {
-	      driver = sql
-	      args = /etc/dovecot/dovecot-sql.conf.ext
-	    }
-	    userdb {
-	      driver = static
-	      args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n
-	   }
-
-
-  Save the changes to the `/etc/dovecot/conf.d/auth-sql.conf.ext` file.
-
-12. Update the `/etc/dovecot/dovecot-sql.conf.ext` file with our custom MySQL connection information.
-
-    Uncomment and set the `driver` line as shown below:
-
-    {: .file-excerpt }
-    /etc/dovecot/dovecot-sql.conf.ext
-
-	      driver = mysql
-
-
-    Uncomment the `connect` line and set the MySQL connection information. Use the `mailuser`'s password and any other custom settings:
-
-    {: .file-excerpt }
-	  /etc/dovecot/dovecot-sql.conf.ext
-
-	      connect = host=127.0.0.1 dbname=mailserver user=mailuser password=mailuserpass
-
-
-    Uncomment the `default_pass_scheme` line and set it to `SHA512-CRYPT`:
-
-    {: .file-excerpt }
-	  /etc/dovecot/dovecot-sql.conf.ext
-
-	    default_pass_scheme = SHA512-CRYPT
-
-
-    Uncomment the `password_query` line and set it to the following:
-
-    {: .file-excerpt }
-	  /etc/dovecot/dovecot-sql.conf.ext
-
-	    password_query = SELECT email as user, password FROM virtual_users WHERE email='%u';
-
-
-	{:.note}
-    >
-    > This password query lets you use an email address listed in the `virtual_users` table as the username credential for an email account. If you want to be able to use the alias as the username instead (listed in the `virtual_aliases` table), first add every primary email address to the `virtual_aliases` table (directing to themselves) and then use the following line in `/etc/dovecot/dovecot-sql.conf.ext` instead:
-    >
-    >     password_query = SELECT email as user, password FROM virtual_users WHERE email=(SELECT destination FROM virtual_aliases WHERE source = '%u');
-
-
-  Save the changes to the `/etc/dovecot/dovecot-sql.conf.ext` file.
-
-13. Change the owner and group of the `/etc/dovecot/` directory to `vmail` and `dovecot`:
-
-        chown -R vmail:dovecot /etc/dovecot
-
-14. Change the permissions on the `/etc/dovecot/` directory:
-
-        chmod -R o-rwx /etc/dovecot
-
-15. Open the sockets configuration file, located at `/etc/dovecot/conf.d/10-master.conf`
-
-    {:.note}
-    >
-    > Click this link to see the final version of . There are many nested blocks of code in this file, so please pay close attention to the brackets. It's probably better if you edit line by line, rather than copying large chunks of code. If there's a syntax error, Dovecot will crash silently, but you can check `/var/log/upstart/dovecot.log` to help you find the error.
-
-16. Disable unencrypted IMAP and POP3 by setting the protocols' ports to 0, as shown below. Ensure that the entries for port and ssl below the IMAPS and pop3s entries are uncommented:
-
-    {: .file-excerpt }
-	  /etc/dovecot/conf.d/10-master.conf
-
-      service imap-login {
-        inet_listener imap {
-          port = 0
-        }
-      inet_listener imaps {
-        port = 993
-        ssl = yes
-        }
-	  	...
-		  service pop3-login {
-	  	  inet_listener pop3 {
-		      port = 0
-  		  }
-        inet_listener pop3s {
-          port = 995
-          ssl = yes
-        }
-		  ...
-		  }
-
-
-
-  Leave the secure versions unedited, specifically the `imaps` and `pop3s`, so that their ports still work. The default settings for `imaps` and `pop3s` are fine. Optionally, leave the `port` lines commented out, as the default ports are the standard 993 and 995.
-
-  Find the `service lmtp` section and use the configuration shown below:
-
-    {: .file-excerpt }
-	  /etc/dovecot/conf.d/10-master.conf
-
-      service lmtp {
-          unix_listener /var/spool/postfix/private/dovecot-lmtp {
-            mode = 0600
-            user = postfix
-            group = postfix
-          }
-		    # Create inet listener only if you can't use the above UNIX socket
-		    #inet_listener lmtp {
-		      # Avoid making LMTP visible for the entire internet
-		      #address =
-		      #port =
-		    #}
-		  }
-
-
-  Locate the `service auth` section and configure it as shown below:
-
-    {: .file-excerpt }
-	  /etc/dovecot/conf.d/10-master.conf
-	  : ~~~
-	    service auth {
-	      # auth_socket_path points to this userdb socket by default. It's typically
-	      # used by dovecot-lda, doveadm, possibly imap process, etc. Its default
-	      # permissions make it readable only by root, but you may need to relax these
-	      # permissions. Users that have access to this socket are able to get a list
-	      # of all usernames and get results of everyone's userdb lookups.
-	      unix_listener /var/spool/postfix/private/auth {
-	        mode = 0666
-	        user = postfix
-	        group = postfix
-	      }
-
-	      unix_listener auth-userdb {
-	        mode = 0600
-	        user = vmail
-	        #group =
-	      }
-
-	      # Postfix smtp-auth
-	      #unix_listener /var/spool/postfix/private/auth {
-	      #  mode = 0666
-	      #}
-
-	      # Auth process is run as this user.
-	      user = dovecot
-	    }
-
-
-  In the `service auth-worker` section, uncomment the `user` line and set it to `vmail` as shown below:
-
-    {: .file-excerpt }
-	  /etc/dovecot/conf.d/10-master.conf
-	  :   ~~~
-	      service auth-worker {
-	        # Auth worker process is run as root by default, so that it can access
-	        # /etc/shadow. If this isn't necessary, the user should be changed to
-	        # $default_internal_user.
-	        user = vmail
-	      }
-	      ~~~
-
-    Save the changes to the `/etc/dovecot/conf.d/10-master.conf` file.
-
-17. Verify that the default Dovecot SSL certificate and key exist:
-
-        ls /etc/dovecot/dovecot.pem
-        ls /etc/dovecot/private/dovecot.pem
-
-    {:.note}
-    >
-    > As noted above, these files are not provided in Dovecot 2.2.13-7 and above, and will not be present on Debian 8 and other newer systems, as well as some older ones.
-    >
-    > If using a different SSL certificate, upload the certificate to the server and make a note of its location and the key's location.
-
-18. Open `/etc/dovecot/conf.d/10-ssl.conf`.
-
-
-
-19. Verify that the `ssl_cert` setting has the correct path to the certificate, and that the `ssl_key` setting has the correct path to the key. The default setting displayed uses Dovecot's built-in certificate, so you can leave this as-is if using the Dovecot certificate. Update the paths accordingly if you are using a different certificate and key.
-
-    {: .file-excerpt }
-	  /etc/dovecot/conf.d/10-ssl.conf
-
-  	    ssl_cert = </etc/dovecot/dovecot.pem
-  	    ssl_key = </etc/dovecot/private/dovecot.pem
-
-
-    Force the clients to use SSL encryption by uncommenting the `ssl` line and setting it to `required`:
-
-    {: .file-excerpt }
-    /etc/dovecot/conf.d/10-ssl.conf
-
-        ssl = required
-
-
-    Save the changes to the `/etc/dovecot/conf.d/10-ssl.conf` file.
-
-20. Finally, restart Dovecot:
-
-        service dovecot restart
-
-
-## Test Email
-
-1.  Set up a test account in an email client to ensure that everything is working. Many clients detect server settings automatically. However, manual configuration requires the following parameters:
-
-    -   the full email address, including the `@example.com` part, is the username.
-    -   the password should be the one you added to the MySQL table for this email address.
-    -   The incoming and outgoing server names must be a domain that resolves to the Linode.
-    -   Both the incoming and outgoing servers require authentication and SSL encryption.
-    -   You should use Port 993 for secure IMAP, Port 995 for secure POP3, and Port 587 with SSL for SMTP.
-
-2.  Try sending an email to this account from an outside email account and then reply to it. Check the mail log file in */var/log/mail.log* for the following output (the first block is for an incoming message, and the second block for an outgoing message):
-
-    {: .file-excerpt }
-	  /var/log/mail.log
-
-	    Mar 22 18:18:15 host postfix/smtpd[22574]: connect from mail1.linode.com[96.126.108.55]
-	    Mar 22 18:18:15 host postfix/smtpd[22574]: 2BD192839B: client=mail1.linode.com[96.126.108.55]
-	    Mar 22 18:18:15 host postfix/cleanup[22583]: 2BD192839B: message-id=<D4887A5E-DEAC-45CE-BDDF-3C89DEA84236@example.com>
-	    Mar 22 18:18:15 host postfix/qmgr[15878]: 2BD192839B: from=<support@linode.com>, size=1156, nrcpt=1 (queue active)
-	    Mar 22 18:18:15 host postfix/smtpd[22574]: disconnect from mail1.linode.com[96.126.108.55]
-	    Mar 22 18:18:15 host dovecot: lmtp(22587): Connect from local
-	    Mar 22 18:18:15 host dovecot: lmtp(22587, email1@example.com): 5GjrDafYTFE7WAAABf1gKA: msgid=<D4887A5E-DEAC-45CE-BDDF-3C89DEA84236@linode.com>: saved mail to INBOX
-	    Mar 22 18:18:15 host dovecot: lmtp(22587): Disconnect from local: Client quit (in reset)
-	    Mar 22 18:18:15 host postfix/lmtp[22586]: 2BD192839B: to=<email1@example.com>, relay=host.example.com[private/dovecot-lmtp], delay=0.09, delays=0.03/0.02/0.03/0.01, dsn=2.0.0, status=sent (250 2.0.0 <email1@example.com> 5GjrDafYTFE7WAAABf1gKA Saved)
-	    Mar 22 18:18:15 host postfix/qmgr[15878]: 2BD192839B: removed
-
-
-    {: .file-excerpt }
-	  /var/log/mail.log
-
-	    Mar 22 18:20:29 host postfix/smtpd[22590]: connect from 173-161-199-49-Philadelphia.hfc.comcastbusiness.net[173.161.199.49]
-	    Mar 22 18:20:29 host dovecot: auth-worker: mysql(127.0.0.1): Connected to database mailserver
-	    Mar 22 18:20:29 host postfix/smtpd[22590]: AA10A2839B: client=173-161-199-49-Philadelphia.hfc.comcastbusiness.net[173.161.199.49], sasl_method=PLAIN, sasl_username=email1@example.com
-	    Mar 22 18:20:29 host postfix/cleanup[22599]: AA10A2839B: message-id=<FB6213FA-6F13-49A8-A5DD-F324A4FCF9E9@example.com>
-	    Mar 22 18:20:29 host postfix/qmgr[15878]: AA10A2839B: from=<email1@example.com>, size=920, nrcpt=1 (queue active)
-	    Mar 22 18:20:29 host postfix/smtp[22601]: AA10A2839B: to=<support@linode.com>, relay=mail1.linode.com[96.126.108.55]:25, delay=0.14, delays=0.08/0.01/0.05/0.01, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as C4232266C9)
-	    Mar 22 18:20:29 host postfix/qmgr[15878]: AA10A2839B: removed
-
-
-You now have a functioning mail server that can securely send and receive email. If things are not working smoothly, try consulting the Troubleshooting Problems with Postfix, Dovecot, and MySQL guide. At this point, consider adding spam and virus filtering and a webmail client. If DNS records have not been created for the mail server yet, do so now. Once the DNS records have propagated, email will be delivered via the new mail server.
-
-{: .note }
->If errors are encountered in the /var/log/syslog stating "Invalid settings: postmaster_address setting not given", you may need to append the following line to the /etc/dovecot/dovecot.conf file, replacing domain with the domain name.
->
->     postmaster_address=postmaster at DOMAIN
-
-## Adding New Domains, Email Addresses, and Aliases
-
-Although the mail server is up and running, eventually you'll probably need to add new domains, email addresses, and aliases for the users. To do this, simply add a new line to the appropriate MySQL table. These instructions are for command-line MySQL, but you can also use [phpMyAdmin](http://www.phpmyadmin.net/) to add new entries to the tables.
-
-### Domains
-
-1.  To add a new domain, open a terminal window and log in to the Linode via SSH.
-
-2.  Log in to the MySQL server with an appropriately privileged user. For this example, use the `root` user:
-
-        mysql -u root -p mailserver
-
-3.  Enter the root MySQL password when prompted.
-4.  Always view the contents of the table before adding new entries. Enter the following command to view the current contents of any table, replacing `virtual_domains` with the table:
-
-        SELECT * FROM mailserver.virtual_domains;
-
-5.  The output should resemble the following:
-
-        +----+-----------------------+
-        | id | name                  |
-        +----+-----------------------+
-        |  1 | example.com           |
-        |  2 | hostname.example.com  |
-        |  3 | hostname              |
-        |  4 | localhost.example.com |
-        +----+-----------------------+
-
-6.  To add another domain, enter the following command, replacing `newdomain.com` with the domain name:
-
-        INSERT INTO `mailserver`.`virtual_domains`
-          (`name`)
-        VALUES
-          ('newdomain.com');
-
-7.  Verify that the new domain has been added. The output should display the new domain name.
-
-        SELECT * FROM mailserver.virtual_domains;
-
-8.  Exit MySQL:
-
-        quit
-
-You have successfully added the new domain to the Postfix and Dovecot setup.
-
-### Email Addresses
-
-1.  To add a new email address, enter the following command in MySQL, replacing `newpassword` with the user's password, and `email3@newdomain.com` with the user's email address:
-
-        INSERT INTO `mailserver`.`virtual_users`
-          (`domain_id`, `password` , `email`)
-        VALUES
-          ('5', ENCRYPT('newpassword', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))) , 'email3@newdomain.com');
-
-    {: .note }
-    >
-    > Be sure to use the correct number for the `domain_id`. In this case, we are using `5`, because we want to make an email address for `newdomain.com`, and `newdomain.com` has an `id` of `5` in the `virtual_domains` table.
-
-2.  Verify that the new email address has been added.  The new email address should be displayed in the output.
-
-        SELECT * FROM mailserver.virtual_users;
-
-3.  Exit MySQL:
-
-        quit
-
-You have successfully added the new email address to the Postfix and Dovecot setup.
-
-### Aliases
-
-1.  To add a new alias, enter the following command in MySQL, replacing `alias@newdomain.com` with the address from which you want to forward email, and `myemail@gmail.com` with the address that you want to forward the mail to. The `alias@newdomain.com` needs to be an email address that already exists on the server.
-
-        INSERT INTO `mailserver`.`virtual_aliases`
-          (`domain_id`, `source`, `destination`)
-        VALUES
-          ('5', 'alias@newdomain.com', 'myemail@gmail.com');
-
-    {: .note }
-    >
-    > Ensure that the correct number is entered for the `domain_id` value. Use the `id` of the domain for this email address. For an explanation of `id` us, see the email users section above.
-
-    You can also add a "catch-all" alias which will forward all emails sent to a domain which do not have matching aliases or users by specifying `@newdomain.com` as the source of the alias.
-
-        INSERT INTO `mailserver`.`virtual_aliases`
-          (`domain_id`, `source`, `destination`)
-        VALUES
-          ('5', '@newdomain.com', 'myemail@gmail.com');
-
-2.  Verify that the new alias has been added. The new alias will be displayed in the output.
-
-        SELECT * FROM mailserver.virtual_aliases;
-
-3.  Exit MySQL:
-
-        quit
+### Email with Postfix, Dovecot, and MySQL
 
-You have now successfully added the new alias to the Postfix and Dovecot setup.
 
-This guide is published under a [CC BY-ND 4.0][21] license.

+ 4 - 1
docs/server/monit.md

@@ -111,10 +111,13 @@ You can optionally restrict web interface access to just your IP address.
     set httpd port 2812
         allow 10.0.0.1 (your ip address)
 
-{: .note}
+:::note
+
 >
 >If you choose to implement the web interface, be sure the port Monit uses (default 2812) is exposed to the devices on which you'll be viewing it. You may need to configure your firewall package or iptables if you have a default deny policy. See Securing Your Server - Configuring a Firewall.
 
+:::
+
 ##Configure Monit's Checking Actions
 
 ###System Values

+ 2 - 2
docs/server/nginx.md

@@ -306,8 +306,8 @@ http
 
 ---
 
-<https://github.com/VirtuBox/advanced-nginx-cheatsheet>  
-<https://github.com/VirtuBox/ubuntu-nginx-web-server>
+https://github.com/VirtuBox/advanced-nginx-cheatsheet
+https://github.com/VirtuBox/ubuntu-nginx-web-server
 
 
 **Table of content**

+ 8 - 7
docs/shell/bash.md

@@ -154,6 +154,7 @@ wget file              -downloads file
 
 ### VARIABLES
 ---
+```
 varname=value                -defines a variable  
 varname=value command        -defines a variable to be in the environment of a particular subprocess  
 echo $varname                -checks a variable's value  
@@ -203,7 +204,7 @@ ${#varname}                  -returns the length of the value of the variable as
 !(patternlist)               -matches anything except one of the given patterns  
   
 $(UNIX command)              -command substitution: runs the command and returns standard output  
-
+```
 
 
 ### FUNCTIONS
@@ -211,11 +212,11 @@ $(UNIX command)              -command substitution: runs the command and returns
 -The function refers to passed arguments by position (as if they were positional parameters), that is, $1, $2, and so forth.  
 -$@ is equal to "$1" "$2"... "$N", where N is the number of positional parameters. $-holds the number of positional parameters.  
   
-  
+```
 function functname() {  
   shell commands  
 }  
-  
+```  
 unset -f functname  -deletes a function definition  
 declare -f          -displays all defined functions in your login session  
 
@@ -265,7 +266,7 @@ file1 -ot file2           -file1 is older than file2
 -ge                       -greater than or equal  
 -gt                       -greater than  
 -ne                       -not equal  
-  
+ ``` 
 if condition  
 then  
   statements  
@@ -309,7 +310,7 @@ done
 until condition; do  
   statements  
 done  
-
+```
 
 ### COMMAND-LINE PROCESSING CYCLE
 ---
@@ -411,7 +412,7 @@ cd $websites
 
 ### DEBUGGING SHELL PROGRAMS
 ---
-
+```
 
 bash -n scriptname  -don't run commands; check for syntax errors only  
 set -o noexec       -alternative (set option in script)  
@@ -442,7 +443,7 @@ trap - DEBUG  -turn off the DEBUG trap
 function returntrap {  
   echo "A return occurred"  
 }  
-  
+```
 trap returntrap RETURN  -is executed each time a shell function or a script executed with the . or source commands finishes executing  
   
 

+ 36 - 19
docs/shell/unix.md

@@ -94,17 +94,17 @@ Find all files ending in .rb or .js, then search those files for 'matchNameHere'
 Find all files ending in .rb, then print a list of filenames (no paths). **Note that the '\;' is mandatory, it tells find where to stop the command execution**
 
 ### sed
-
+```
     ls *.rb | awk '{print("mv "$1" "$1)}' | sed 's/\.rb/_service\.rb/2' | /bin/sh
-
+```
 Batch rename all files matching a pattern, insert the `_service` before the file suffix
-
+```
     find /some/path -name "*rb" -o -name "*yml" | xargs grep -sl "some_phrase" | xargs sed -i -e 's/some_phrase/replacement_phrase'
-
+```
 Find all files ending in *rb or *yml, then grep those files for *some_phrase*, then replace those instances using sed
-
+```
     cat /some/file.txt | awk '{print "mkdir /path/to/"$0""}' | /bin/sh
-
+```
 Read input from file, pipe to awk to generate a system command, then execute it.
 
 ##### display file with line numbers  
@@ -156,24 +156,31 @@ Read input from file, pipe to awk to generate a system command, then execute it.
     tar jxf filename.tar.bz2
 
 ##### add user
+```
     sudo adduser <username>
-
+```
 ##### add group
+```
     sudo groupadd <groupname>
-
+```
 ##### add existing user to group
+```
     sudo usermod -a -G <groupname> <username>
-
+```
 ##### add a user to multiple groups
+```
     sudo usermod -a -G <groupname1>,<groupname2>,<groupname3> <username>
-
+```
 ##### view user's group assignemnts
+```
     id <username>
     groups <username>
-
+```
 ##### make a directory accessible for a group
 ##### change group of all files/directories recursively
+```
     sudo chgrp -R <groupname> directory
+```
 ##### add write permissions to group
     sudo chmod -R g+w directory
 ##### set "GID", so that all new files and directories created under directory are owned by the group
@@ -188,46 +195,56 @@ Read input from file, pipe to awk to generate a system command, then execute it.
     sudo /etc/init.d/hostname restart
 
 ##### search a device for bad blocks
+```
     sudo badblocks -v <device_name>
     sudo badblocks -v /dev/md2
-
+```
 ##### renice (reset priority of processgroup): niceness: 0 (normal) - 19 (low)
+```
     sudo renice -n <niceness> -g <pid>
-
+```
 ##### count and filter csv files
 ##### remove header (first line), the separator in csv file is ","; count the rows where the value in the second column is above a threshold value (4.5)
+```
     tail -n +2 file.csv | awk -F "," '$2 >= <my threshold value>' | wc -l
-
+```
 ##### pg_dump ssh tunnel
     ssh -o "Compression=no" mydbserver "pg_dump -Fc -Z9 -U postgres mydb" > mydb.dump
 
 ##### generate random password
 ##### of course there are tons of ways to do this
 ##### you can replace 32 with the desired password length
+```
     < /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-32};echo;
-
+```
 ##### force the user to change their password upon next login
+```
     sudo chage -d 0 <username>
-
+```
 ##### server shutdown
     sudo shutdown -h now
     sudo poweroff
 
 ##### encrypt/decrypt file with openssl
+```
     openssl aes-256-cbc -salt -in <file> -out <encrypted_file> -k <passphrase>
     openssl aes-256-cbc -d -in <encrypted_file> -out <file> -k <passphrase>
-
+```
 ##### generate your dhparam.pem file
     openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
 
 ##### search for pattern in codebase
+```
     grep -inIEr --color=ALWAYS "<pattern_to_search>" .
-
+```
 ##### copy directory tree recursively without overwrite
+```
     rsync -a -v --ignore-existing <src_dir> <dst_dir>
-
+```
 ##### find processes with most memory usage
     ps -e -orss,%mem,cputime,%cpu,pid,args | sort -b -k1,1n | pr -TW$COLUMNS
 
 ##### find processes with maximum file descriptors
+```
     lsof -Fpcn | nawk '/^p/ { pid=substr($0,2) } /^c/ { cmd=substr($0,2) } /^n/ { fd[cmd"["pid"]"]++ } END  { for (cc in fd) printf("%-30s %i\n",cc,fd[cc]) } ' | sort -n -k 2 | tail -30
+```

+ 3 - 1
docs/shell/vi.md

@@ -191,6 +191,8 @@ gT or :tabprev or :tabp # move to the previous tab
 ```
 
 #### NERDTree
+
+```
     o.......Open files, directories and bookmarks....................|NERDTree-o|
     go......Open selected file, but leave cursor in the NERDTree.....|NERDTree-go|
     t.......Open selected node/bookmark in a new tab.................|NERDTree-t|
@@ -234,7 +236,7 @@ gT or :tabprev or :tabp # move to the previous tab
     q.......Close the NERDTree window................................|NERDTree-q|
     A.......Zoom (maximize/minimize) the NERDTree window.............|NERDTree-A|
     ?.......Toggle the display of the quick help.....................|NERDTree-?|
-	 
+``` 
 	 
 	 
 ### vimdiff cheet sheet

+ 1 - 1
docs/waf/nextjs.md

@@ -1,6 +1,6 @@
 # Next.js
 
-<https://nextjs.org/docs>
+https://nextjs.org/docs
 
 ## About
 

+ 1 - 1
lists/grocery.md

@@ -4,7 +4,7 @@
 
 ### Notes
 
-I wrote an essay about grocery lists @ <https://davidawindham.com/grocery-shopping/>.
+I wrote an essay about grocery lists @ https://davidawindham.com/grocery-shopping/.
 
 
 ## Produce

+ 1 - 1
lists/lists.md

@@ -18,7 +18,7 @@
 
 ###  *The Hundred Best Lists of All Time* - The New Yorker
 
-December 26, 2012 - <https://www.newyorker.com/humor/daily-shouts/the-hundred-best-lists-of-all-time>
+December 26, 2012 - https://www.newyorker.com/humor/daily-shouts/the-hundred-best-lists-of-all-time
 
 ( *my picks and edits with 'fixed' links )
 

+ 1 - 1
lists/now/now.md

@@ -1,6 +1,6 @@
 # Now
 
-Adding this list as a way to pull info for my main now page @ <https://davidawindham.com/now>
+Adding this list as a way to pull info for my main now page @ https://davidawindham.com/now
 
 - [elsewhere](elsewhere)
 - [Learning](learning)

+ 5 - 5
lists/todo.md

@@ -1,6 +1,6 @@
 # ToDo
 
-**23.05.31** - I added this page as a copy of my the Reminders I use across all of my devices. I detailed this workflow in <https://davidawindham.com/slow-thinking/>. The easiest way to export the reminders to Markdown is to print to PDF and then migrate, so the first todo item should be to find a better way to sync them here.
+**23.05.31** - I added this page as a copy of my the Reminders I use across all of my devices. I detailed this workflow in https://davidawindham.com/slow-thinking/. The easiest way to export the reminders to Markdown is to print to PDF and then migrate, so the first todo item should be to find a better way to sync them here.
 
 ---
 
@@ -70,12 +70,12 @@
 - Learn
   - Akamai EdgeCompute & EdgeWorkers
   - Akamai Terraform / Docker
-  - Turbo build system - <https://turbo.build>
-  - Deno / Lume / SaaSkit - <https://deno.land>
+  - Turbo build system - https://turbo.build
+  - Deno / Lume / SaaSkit - https://deno.land
   - Rust WASM
     - TypeScript > JavaScript
-    - SWC ( Speedy Web Compiler ) - <https://swc.rs>
-    - <https://doc.rust-lang.org/stable/book/>
+    - SWC ( Speedy Web Compiler ) - https://swc.rs
+    - https://doc.rust-lang.org/stable/book/
   - Svelte - sqlite tennis scorer
 - Edward Lee Elmore Wikipedia page
 - [Tennis](/notes/tennis)

+ 4 - 4
lists/tweets.md

@@ -677,9 +677,9 @@ According to my archive, over 15 years I had:
 |"RT @mathias: How to deobfuscate malicious JavaScript code, like the stuff that’s used in exploit kits: http://t.co/9kNzTtKu"|2012-01-06|
 |@thomasfuchs which one? there are five distinctly different carolina bbq sauces ~ http://t.co/nwfmUvGi|2012-01-11|
 |@thomasfuchs come on down! try the mustard and brown sugar next go round.|2012-01-11|
-|@riddle @mathias  ⓐⓢⓚ @ⓤⓝⓘⓒⓞⓓⓔ { @unicode }|2012-01-11|
+|@riddle @mathias  ⓐⓢⓚ @ⓤⓝⓘⓒⓞⓓⓔ @unicode |2012-01-11|
 |Carrot Juice... i drink tons lots of it. It is good. bugs knows the deal.|2012-01-11|
-|although is does cause carotenoderma { orange skin } ~ http://t.co/uWidlXKg|2012-01-11|
+|although is does cause carotenoderma - orange skin ~ http://t.co/uWidlXKg|2012-01-11|
 |"RT @adactio: Y'know, I'm pretty happy with how this 2010 @AnEventApart talk turned out: http://t.co/MNzoMFEc That was fun."|2012-01-13|
 |RT @adactio: Writing about media queries and multiple-column text. http://t.co/D9hViHtQ|2012-01-13|
 |"RT @indexzero: Hate to be a dick here, but if you want to use Wikipedia today just disable #javascript :: http://t.co/qjIGBubr"|2012-01-18|
@@ -717,7 +717,7 @@ According to my archive, over 15 years I had:
 |"@krwindham Тройка, семерка, туз"|2012-04-18|
 |"@krwindham i'd say perhaps over the summer, but you know better. however, I would like to see this film - https://t.co/XtQpQq6d"|2012-04-18|
 |@krwindham read it. like. In order to win you must be prepared to lose something. And leave one or two cards showing. http://t.co/9Xcpf07k|2012-04-18|
-|@krwindham ur welcome brocefus. I know some things... albeit different types of things { winking queen ) }|2012-04-18|
+|@krwindham ur welcome brocefus. I know some things... albeit different types of things - winking queen ) |2012-04-18|
 |@krwindham Pattern-recognition and The Game of Go: A Programmer's Perspective - http://t.co/6fl7m8Ud|2012-04-19|
 |"RT @jwomack: Disney's Life On Mars, 1957: http://t.co/qfu2FcBs"|2012-04-19|
 |"RT @evgenymorozov: $4829-per-hour supercomputer built on Amazon cloud to fuel cancer research http://t.co/naTNDWrl"|2012-04-19|
@@ -727,7 +727,7 @@ According to my archive, over 15 years I had:
 |"@krwindham "I also don't trust Caribou anymore. They're out there, on the tundra, waiting... Something's going down." ~ Joss Whedon"|2012-04-30|
 |just activated 2-step on the google accounts|2012-04-30|
 |Espresso machine- http://t.co/sRLDVvnM|2012-04-30|
-|I like John Cleese  { On Creativity } - https://t.co/CeHgnSUb|2012-04-30|
+|I like John Cleese On Creativity - https://t.co/CeHgnSUb|2012-04-30|
 |"RT @odezenne: _Quelle belle journée que l'Election pour partager ce ""|2012-05-07|
 |On mêle des 1000 et des 100, on pose des mines,... http: ..."|2012-05-07|
 |RT @evgenymorozov: The next wave of digital products won't just be about archiving the web, they'll be about destroying the archive  htt ...|2012-05-08|

+ 2 - 2
lists/tweets_follow.md

@@ -609,7 +609,7 @@ hide_table_of_contents: true
 |@taylorotwell|Taylor Otwell 🪐|Founded and creating Laravel for the happiness of all sentient beings especially developers. Space pilgrim. 💍 @abigailotwell.|
 |@tdominey|Todd Dominey||
 |@technoweenie|🎧🖥🌭|offline mutation // breathe / drink water / eat comics / learn to swim|
-|@tellyworth|“parody” Alex ''!--‹›=&{()}|Alex “parody” Shiels. Developer and code archeologist at Automattic Inc. Photography at https://t.co/A5BzcQ9HIb and https://t.co/z4qKm2lHHE. I block fuckwits.|
+|@tellyworth|“parody” Alex ''!--‹›=&()|Alex “parody” Shiels. Developer and code archeologist at Automattic Inc. Photography at https://t.co/A5BzcQ9HIb and https://t.co/z4qKm2lHHE. I block fuckwits.|
 |@tenderlove|Aaron Patterson|Job: @ShopifyOpinions: MinePGP: 4CE9 1B75 A798 28E8 6B1A  A8BB 9531 70BC B4FF AFC6Switch: SW-6099-0664-6989Partner: @ebiltwin and cats.he/him|
 |@thadallender|Thad Allender|Whoa internets!|
 |@thagler|Tobby Hagler|I have nothing clever to add here.|
@@ -1299,7 +1299,7 @@ hide_table_of_contents: true
 |@taylorotwell|Taylor Otwell 🪐|Founded and creating Laravel for the happiness of all sentient beings especially developers. Space pilgrim. 💍 @abigailotwell.|
 |@tdominey|Todd Dominey||
 |@technoweenie|🎧🖥🌭|offline mutation // breathe / drink water / eat comics / learn to swim|
-|@tellyworth|“parody” Alex ''!--‹›=&{()}|Alex “parody” Shiels. Developer and code archeologist at Automattic Inc. Photography at https://t.co/A5BzcQ9HIb and https://t.co/z4qKm2lHHE. I block fuckwits.|
+|@tellyworth|“parody” Alex ''!--‹›=&()|Alex “parody” Shiels. Developer and code archeologist at Automattic Inc. Photography at https://t.co/A5BzcQ9HIb and https://t.co/z4qKm2lHHE. I block fuckwits.|
 |@tenderlove|Aaron Patterson|Job: @ShopifyOpinions: MinePGP: 4CE9 1B75 A798 28E8 6B1A  A8BB 9531 70BC B4FF AFC6Switch: SW-6099-0664-6989Partner: @ebiltwin and cats.he/him|
 |@thadallender|Thad Allender|Whoa internets!|
 |@thagler|Tobby Hagler|I have nothing clever to add here.|

+ 1 - 1
notes/art/education.md

@@ -7,6 +7,6 @@ Just making the 2017 South Carolina College- and Career-Ready Standards for Visu
 ---
 
 1. [https://ed.sc.gov/instruction/standards-learning/visual-and-performing-arts/standards/visual-arts-design-and-media-arts-standards/](https://ed.sc.gov/instruction/standards-learning/visual-and-performing-arts/standards/visual-arts-design-and-media-arts-standards/)
-2. <https://ed.sc.gov/instruction/standards-learning/visual-and-performing-arts/standards/>
+2. https://ed.sc.gov/instruction/standards-learning/visual-and-performing-arts/standards/
 
 

+ 8 - 8
notes/art/studio.md

@@ -14,7 +14,7 @@ I'm gonna combine the now mostly neglected easel into my desk. What I'm not goin
 
 ![](https://davidawindham.com/wp-content/themes/daw/img/studio.jpg)
 
-And while I'm at it, I'd like to upgrade the old mac mini (<https://davidawindham.com/mac-mini/>), add a keyboard, and integrate the audio and video into my existing system. The 96" space will allow for two people to work side by side. I'm also planning on having a lift on the I'm estimating the cost to be under a grand sans mac studio. I'll continue using it as my daily desk for my developer day gig, but I'd also like to venture into some more creative endeavors such as painting, prints, photography, video, and audio. I'm really hoping it'll put my eyes on the canvas as much as the monitors and it'll be much easier to let Iris in and out.
+And while I'm at it, I'd like to upgrade the old mac mini (https://davidawindham.com/mac-mini/), add a keyboard, and integrate the audio and video into my existing system. The 96" space will allow for two people to work side by side. I'm also planning on having a lift on the I'm estimating the cost to be under a grand sans mac studio. I'll continue using it as my daily desk for my developer day gig, but I'd also like to venture into some more creative endeavors such as painting, prints, photography, video, and audio. I'm really hoping it'll put my eyes on the canvas as much as the monitors and it'll be much easier to let Iris in and out.
 
 <video src="https://davidawindham.com/media/office.mp4" width="100%" controls="controls">
 </video>
@@ -50,10 +50,10 @@ Notes:
 
 Ref:
 
-- Tom Kidd Studio setup - <https://www.behance.net/gallery/43250141/Studio-Setup>
-- This Old House installing cabinets - <https://www.youtube.com/watch?v=5xN9kPD7ddU>
-- MinWax Dark Walnut Stain - <https://www.minwax.com/en/wood-stain-color-guide/browse-color-stains/brown/dark-walnut-2716-semi-transparent>
-- Home Deport - Hampton Bay cabinet - <https://www.homedepot.com/p/Hampton-Bay-Hampton-36-in-W-x-24-in-D-x-34-5-in-H-Assembled-Base-Kitchen-Cabinet-in-Natural-Hickory-with-Drawer-Glides-KB36-NHK/202518650>
-- Merl's countertops - <https://www.merlsinc.com>
-- AP Restoration Woodwork - <https://ap-restoration.com>
-- Kitchen Rehab - <https://kitchenrehab.co> - review w/keyboard drawer- <https://www.google.com/maps/contrib/103662183858242984916/place/ChIJA9iEn48F-IgRO-AGSX88VO8/@34.1371788,-82.1125008,17z/data=!4m6!1m5!8m4!1e1!2s103662183858242984916!3m1!1e1?hl=en&entry=ttu>
+- Tom Kidd Studio setup - https://www.behance.net/gallery/43250141/Studio-Setup
+- This Old House installing cabinets - https://www.youtube.com/watch?v=5xN9kPD7ddU
+- MinWax Dark Walnut Stain - https://www.minwax.com/en/wood-stain-color-guide/browse-color-stains/brown/dark-walnut-2716-semi-transparent
+- Home Deport - Hampton Bay cabinet - https://www.homedepot.com/p/Hampton-Bay-Hampton-36-in-W-x-24-in-D-x-34-5-in-H-Assembled-Base-Kitchen-Cabinet-in-Natural-Hickory-with-Drawer-Glides-KB36-NHK/202518650
+- Merl's countertops - https://www.merlsinc.com
+- AP Restoration Woodwork - https://ap-restoration.com
+- Kitchen Rehab - https://kitchenrehab.co - review w/keyboard drawer- https://www.google.com/maps/contrib/103662183858242984916/place/ChIJA9iEn48F-IgRO-AGSX88VO8/@34.1371788,-82.1125008,17z/data=!4m6!1m5!8m4!1e1!2s103662183858242984916!3m1!1e1?hl=en&entry=ttu

+ 11 - 11
notes/dogs/dogs.md

@@ -11,7 +11,7 @@ description: Just needed a place to put some notes on dogs since we're adopting
 
 ## About
 
-**23.01.09** - Just needed a place to put some notes on dogs since we're adopting a new puppy this spring and I'd like to learn as much as I can about training and care. Since the better half works in special education, we're going to get the dog certified as a service animal so that we may take her to schools to work with kids. wrote a post about her @ <https://davidawindham.com/iris/>
+**23.01.09** - Just needed a place to put some notes on dogs since we're adopting a new puppy this spring and I'd like to learn as much as I can about training and care. Since the better half works in special education, we're going to get the dog certified as a service animal so that we may take her to schools to work with kids. wrote a post about her @ https://davidawindham.com/iris/
 
 **23.06.20** - I moved the Iris specific info over to [another page](dogs/iris.md) so that I can just use this one for more general information about dogs. 
 
@@ -46,7 +46,7 @@ Other regional breeders:
 - 6-18 Months - Adolescence
 - 7-9 Months - Chewing
 - < 1 year - Research suggest that their bones are not fully developed and should engage in lower impact exercise. 
-- < 1 year - Research suggests that neutering before 1 year affects the rates of joint disease and cancer - "The removal of hormone-producing organs during the first year of a dog’s life leaves the animal vulnerable to the delayed closure of long-bone growth plates." - <https://www.ucdavis.edu/news/golden-retriever-study-suggests-neutering-affects-dog-health>
+- < 1 year - Research suggests that neutering before 1 year affects the rates of joint disease and cancer - "The removal of hormone-producing organs during the first year of a dog’s life leaves the animal vulnerable to the delayed closure of long-bone growth plates." - https://www.ucdavis.edu/news/golden-retriever-study-suggests-neutering-affects-dog-health
 
 ### Avoid
  
@@ -90,12 +90,12 @@ Other regional breeders:
 
 ### Video Testimony
 
-- Portland High School - <https://www.youtube.com/watch?v=oX2fAgN1iJE>
-- Artie - Narona County School District - <https://www.youtube.com/watch?v=EGO5DIB4t8E>
-- Wyoming Department of Education - <https://www.youtube.com/watch?v=ZPHr2v8ycsw>
-- PBS News Hour - <https://www.youtube.com/watch?v=393Pr1bGFUA>
-- Bryant Public Schools-  <https://www.youtube.com/watch?v=bq-p84ltR7g>
-- Educating Greater Manchester - <https://www.youtube.com/watch?v=hNfP85NLMDQ>
+- Portland High School - https://www.youtube.com/watch?v=oX2fAgN1iJE
+- Artie - Narona County School District - https://www.youtube.com/watch?v=EGO5DIB4t8E
+- Wyoming Department of Education - https://www.youtube.com/watch?v=ZPHr2v8ycsw
+- PBS News Hour - https://www.youtube.com/watch?v=393Pr1bGFUA
+- Bryant Public Schools-  https://www.youtube.com/watch?v=bq-p84ltR7g
+- Educating Greater Manchester - https://www.youtube.com/watch?v=hNfP85NLMDQ
 
 
 ### Organizations
@@ -155,9 +155,9 @@ Dr. John Pilley - https://en.wikipedia.org/wiki/John_W._Pilley
  - BBC Earth - Dog Understands 1022 Words! - https://www.youtube.com/watch?v=Ip_uVTWfXyI
 
 
-Keen Dog Training Rock Hill SC - <https://www.keendogtraining.com/> 
-Keen Dog Training puppy training series - <https://www.youtube.com/watch?v=aj3kVFx_AMQ&list=PLIGhKrIr7WkNI2ki0316Rqss5tZVnFHiu>
-Keen Dog - What to focus on Month 2 - <https://www.youtube.com/watch?v=9__L9N1V2jE&list=PLIGhKrIr7WkNI2ki0316Rqss5tZVnFHiu>  
+Keen Dog Training Rock Hill SC - https://www.keendogtraining.com/
+Keen Dog Training puppy training series - https://www.youtube.com/watch?v=aj3kVFx_AMQ&list=PLIGhKrIr7WkNI2ki0316Rqss5tZVnFHiu
+Keen Dog - What to focus on Month 2 - https://www.youtube.com/watch?v=9__L9N1V2jE&list=PLIGhKrIr7WkNI2ki0316Rqss5tZVnFHiu
 
 #### Words / Signs
 

+ 5 - 4
notes/dogs/iris.md

@@ -1,6 +1,6 @@
 # Iris
 
-#### Post: <https://davidawindham.com/iris>
+#### Post: https://davidawindham.com/iris
 
 ## Log
 
@@ -14,12 +14,13 @@
 - 23.06.09 - 12 Weeks  
   - Cautious but confident. Understands "No, Yes, Sit, Come, Here and her name". Decent recall off leash. Eats everything. Gets testy in the afternoons and wants to chew and nip. 
   - will have last round of vaccines next week.
-  - added updated 12 week photos @ <https://davidawindham.com/iris/>
+  - added updated 12 week photos @ https://davidawindham.com/iris/
 
 ## About
 
-[![zoey+adger](/img/zoey+adger.jpg)](/img/zoey+adger.jpg)  
-<- Zoey & Adger ->
+[![zoey+adger](/img/zoey+adger.jpg)](/img/zoey+adger.jpg)
+
+* 👈🏼 Zoey & Adger 👉🏼 *
 
 **Mom - Zoey**  
 Moore Retrievers / Carolynn Moore  

+ 1 - 1
notes/garden/mushroom.md

@@ -32,4 +32,4 @@ These are the possible poisonous mushrooms that might be found in South Carolina
 
 ## Cultivating Truffles 
 
-- Carolina Truffieres - <https://www.carolinatruffieres.com/our-seedlings/>
+- Carolina Truffieres - https://www.carolinatruffieres.com/our-seedlings/

+ 34 - 34
notes/house/build.md

@@ -1,6 +1,6 @@
 # Build
 
-We'd like to build one more house that's single story, accessible, affordable, easy-to-maintain, and energy-efficient. The original post on this idea with some notes is available @ <https://davidawindham.com/architecture/>
+We'd like to build one more house that's single story, accessible, affordable, easy-to-maintain, and energy-efficient. The original post on this idea with some notes is available @ https://davidawindham.com/architecture/
 
 ![house-build](/img/house-build.jpg)
 
@@ -48,9 +48,9 @@ We'd like to build one more house that's single story, accessible, affordable, e
 July 2023 median sales price is **$406,700** which is a 57% increase from the Jan 2020 price of $266,300. **$348,126** Zillow avg home value Sept 2023. Zillow avg for zip 28756 is **$346,379**.
 
 - ( 2022 ) 2,100 square foot spec home costs a national average of **$332,397** 
-  - <https://todayshomeowner.com/home-finances/guides/cost-of-building-a-home-by-state/>
+  - https://todayshomeowner.com/home-finances/guides/cost-of-building-a-home-by-state/
 - The average price per acre of single-family, residential land in 2019 was $152,000
-  - <https://www.sciencedirect.com/science/article/pii/S0304393220301379#ec-research-data>
+  - https://www.sciencedirect.com/science/article/pii/S0304393220301379#ec-research-data
 
 | Exterior | -- | Interior | -- |
 |--|--|--|--|
@@ -104,9 +104,9 @@ Weather, Groceries, Healthcare, Taxes, Accessibility, Social, and Demographics a
 #### Red Fox / Blue Bird Lots
 
 29 Red Fox Cir, Tryon, NC 28782 - 
-<https://www.zillow.com/homedetails/29-Red-Fox-Cir-Tryon-NC-28782/2095630237_zpid/>
+https://www.zillow.com/homedetails/29-Red-Fox-Cir-Tryon-NC-28782/2095630237_zpid/
 
-<https://www.zillow.com/homedetails/0-Red-Fox-Cir-Tryon-NC-28782/2115025849_zpid/>
+https://www.zillow.com/homedetails/0-Red-Fox-Cir-Tryon-NC-28782/2115025849_zpid/
 
 Red Fox Future, LLC v. Holbrooks - https://www.nccourts.gov/assets/documents/opinions/2014_NCBC_8.pdf?VersionId=IekuqeAIVscxaVO1pjkYpKW9HaCFpxAC
 
@@ -117,7 +117,7 @@ https://scholar.google.com/scholar_case?case=4634888997300533561
 
 #### Lake Adger Lots
 
-<https://en.wikipedia.org/wiki/Lake_Adger>
+https://en.wikipedia.org/wiki/Lake_Adger
 
 - The neighborhood called North Highland Farms in original plats.  
 - The public boat landing that is leased from Lake Adger Homeowners Association by the North Carolina Wildlife Resources Commission for public boating and fishing
@@ -126,21 +126,21 @@ https://scholar.google.com/scholar_case?case=4634888997300533561
   - [ongoing dredging](https://dredgewire.com/lake-adger-marina-to-be-dredged-soon/) 
 - [Reclassification of Green River Segment Report](https://files.nc.gov/ncdeq/Environmental%20Management%20Commission/EMC%20Meetings/2014/July2014/Attachments/Attachment_A_toAG14-23_ROPforGreenRiverPropReclass.pdf)
 - [Water analysis](https://cms4files1.revize.com/polk/Lake%20Adger%20Utility%20Appraisal-2016-Revised.pdf)
-- POA origin - Phillip R. Feagan <http://feaganlawfirm.com/>
+- POA origin - Phillip R. Feagan http://feaganlawfirm.com/
 
-Twin Maple Way 2.16ac $90k - <https://www.zillow.com/homedetails/0-Twin-Maple-Way-5-Mill-Spring-NC-28756/2060531025_zpid/>
+Twin Maple Way 2.16ac $90k - https://www.zillow.com/homedetails/0-Twin-Maple-Way-5-Mill-Spring-NC-28756/2060531025_zpid/
 
-Lots 50 & 50a Mountain Pkwy, Mill Spring, NC 28756 3.12ac $110k- <https://www.zillow.com/homedetails/Lots-50-50a-Mountain-Pkwy-Mill-Spring-NC-28756/2055931051_zpid/>
+Lots 50 & 50a Mountain Pkwy, Mill Spring, NC 28756 3.12ac $110k- https://www.zillow.com/homedetails/Lots-50-50a-Mountain-Pkwy-Mill-Spring-NC-28756/2055931051_zpid/
 
-Highland View 4.52ac $90k - <https://www.zillow.com/homedetails/0-Highland-View-Ln-18-Mill-Spring-NC-28756/2071477199_zpid/<> - [521 Highland View Ln, Mill Spring, NC 28756](https://www.google.com/maps/place/521+Highland+View+Ln,+Mill+Spring,+NC+28756)
+Highland View 4.52ac $90k - https://www.zillow.com/homedetails/0-Highland-View-Ln-18-Mill-Spring-NC-28756/2071477199_zpid/ - [521 Highland View Ln, Mill Spring, NC 28756](https://www.google.com/maps/place/521+Highland+View+Ln,+Mill+Spring,+NC+28756)
 
 
 
 #### Location References
 
-Saluda Grade tracks being converted ( from Landrum to Saluda ) - <https://www.postandcourier.com/spartanburg/news/norfolk-southern-to-sell-saluda-grade-tracks-for-sc-to-nc-rail-trail/article_be5e93c4-c36e-11ed-922c-4b4227cd2da6.html>
+Saluda Grade tracks being converted ( from Landrum to Saluda ) - https://www.postandcourier.com/spartanburg/news/norfolk-southern-to-sell-saluda-grade-tracks-for-sc-to-nc-rail-trail/article_be5e93c4-c36e-11ed-922c-4b4227cd2da6.html
 
-Ecusta Trail - Hendersonville to Brevard - <https://www.ecustatrail.org>
+Ecusta Trail - Hendersonville to Brevard - https://www.ecustatrail.org
 
 ---
 
@@ -155,17 +155,17 @@ Ecusta Trail - Hendersonville to Brevard - <https://www.ecustatrail.org>
 
 ### Architecture
 
-Architecture - <https://davidawindham.com/architecture/> 
+Architecture - https://davidawindham.com/architecture/
 
 - Cold Frame Steel
 
 #### Architects
 
-- Altura - Asheville NC - <https://alturaarchitects.com/work/>
-- RuegerRiley - <https://www.ruegerriley.com>
-- John Walters - <https://jwaltersarch.com>
-- Heather Schlender - <https://storyofyourhome.com/about.html>
-- Renderings - Dave Philip Walen - Tryon NC - <https://davephilipwalen.com>
+- Altura - Asheville NC - https://alturaarchitects.com/work/
+- RuegerRiley - https://www.ruegerriley.com
+- John Walters - https://jwaltersarch.com
+- Heather Schlender - https://storyofyourhome.com/about.html
+- Renderings - Dave Philip Walen - Tryon NC - https://davephilipwalen.com
 
 #### Engineers
 
@@ -175,13 +175,13 @@ Architecture - <https://davidawindham.com/architecture/>
 
 ### Contractors
 
-- 👉🏼 Greg Junge Construction - <https://www.junge.construction>
-- 👉🏼 David Washburn - Washburn Builders - <https://www.washburnbuildersnc.com>
-- 👉🏼 Wally Hughes Construction - <http://hugheswnc.com>
-- Green River Builders - <https://www.greenriverbuilders.net>
-- Red Tree Builders - <https://www.redtreebuilders.com>
-- Todd Usher - Addison Homes - <https://www.addison-homes.com/our-team>
-- John Judd - Judd Builders - <https://www.juddbuilders.net/>
+- 👉🏼 Greg Junge Construction - https://www.junge.construction
+- 👉🏼 David Washburn - Washburn Builders - https://www.washburnbuildersnc.com
+- 👉🏼 Wally Hughes Construction - http://hugheswnc.com
+- Green River Builders - https://www.greenriverbuilders.net
+- Red Tree Builders - https://www.redtreebuilders.com
+- Todd Usher - Addison Homes - https://www.addison-homes.com/our-team
+- John Judd - Judd Builders - https://www.juddbuilders.net/
 
 #### Concrete
 
@@ -189,7 +189,7 @@ Architecture - <https://davidawindham.com/architecture/>
 
 #### Framing ( Metal )
 
-- E.S. Walker Construction & Walker Building Systems - Forest City, NC - <https://eswalkerconstruction.com>
+- E.S. Walker Construction & Walker Building Systems - Forest City, NC - https://eswalkerconstruction.com
 
 
 
@@ -205,7 +205,7 @@ Architecture - <https://davidawindham.com/architecture/>
 
 ##### Doors / Windows
 
-Marvin ( <https://marvin.com> ) uses butted joing instead of mitered
+Marvin ( https://marvin.com ) uses butted joing instead of mitered
 - North Windows (4) Marvin Double Hung G2
 - North Door (1 - double ) 96" x 96"
 - South Entrance Doors - (3)  Mavin 3 Pane Sliding w/Screen ( 107” x 96” )
@@ -222,19 +222,19 @@ Marvin ( <https://marvin.com> ) uses butted joing instead of mitered
 
 ### Metal Framing
 
-- Star Building Systems - <https://www.starbuildings.com>
-- McElroy Metal - Columbia, SC <https://www.mcelroymetal.com>
+- Star Building Systems - https://www.starbuildings.com
+- McElroy Metal - Columbia, SC https://www.mcelroymetal.com
 - Vulcan Steel - Georgia
 
 ### Orgs
 
-- Structural Insulated Panel Association - <https://www.sips.org>
-- Steel Framing Industry Association - <https://www.steelframing.org>
+- Structural Insulated Panel Association - https://www.sips.org
+- Steel Framing Industry Association - https://www.steelframing.org
 
 ---
 
 ### Inspiration
 
- - Booken House at Sandhill - <https://www.youtube.com/watch?v=co2HYBaB_7A>
- - 5894 Highwood Rd, Castro Valley, CA 94552 <https://www.zillow.com/homedetails/5894-Highwood-Rd-Castro-Valley-CA-94552/24914789_zpid/?>
- - Good Haus - Atmosphere Design Build - <https://www.atmospheredesignbuild.com/good-haus> / <https://www.rockwool.com/north-america/advice-and-inspiration/case-studies/2018-fine-homebuilding-california-house/>
+ - Booken House at Sandhill - https://www.youtube.com/watch?v=co2HYBaB_7A
+ - 5894 Highwood Rd, Castro Valley, CA 94552 https://www.zillow.com/homedetails/5894-Highwood-Rd-Castro-Valley-CA-94552/24914789_zpid/
+ - Good Haus - Atmosphere Design Build - https://www.atmospheredesignbuild.com/good-haus / https://www.rockwool.com/north-america/advice-and-inspiration/case-studies/2018-fine-homebuilding-california-house/

+ 4 - 4
notes/house/house.md

@@ -10,7 +10,7 @@ I'm going to use this as place to make notes about our house, property, and futu
 
 **Farm** - 82 Yarborough Road, Trenton SC
 
-**Wilton** - 104 Wilton Street, Greenwood SC - <https://davidawindham.com/wha/wilton/>
+**Wilton** - 104 Wilton Street, Greenwood SC - https://davidawindham.com/wha/wilton/
 
 ---
 
@@ -21,8 +21,8 @@ I'm going to use this as place to make notes about our house, property, and futu
 ![glenridge](/img/glenridge.jpg)
 
 102 Glenridge Circle, Greenwood SC  
-Photos -  <https://davidawindham.com/wha/glenridge/>  
-POA - Gatewood Club - <https://gatewoodclub.com> ( 👈🏼 I built this too )
+Photos -  https://davidawindham.com/wha/glenridge/
+POA - Gatewood Club - https://gatewoodclub.com ( 👈🏼 I built this too )
 
 ### Projects
 
@@ -121,4 +121,4 @@ POA - Gatewood Club - <https://gatewoodclub.com> ( 👈🏼 I built this too )
 
 ## Future
 
-We'd like to build one more house that's single story, accessible, affordable, easy-to-maintain, and energy-efficient. Large lot, views, quiet, near quality grocery/healthcare/rec.  I've moved all of the docs on this over to [notes/house/build](/notes/house/build) and I've got my original notes on the build and architecture @ <https://davidawindham.com/architecture/>
+We'd like to build one more house that's single story, accessible, affordable, easy-to-maintain, and energy-efficient. Large lot, views, quiet, near quality grocery/healthcare/rec.  I've moved all of the docs on this over to [notes/house/build](/notes/house/build) and I've got my original notes on the build and architecture @ https://davidawindham.com/architecture/

+ 34 - 39
notes/index.md

@@ -52,42 +52,37 @@ I generally use four lists of reminders to keep up with everything. Groceries, S
 - 23/05/10 - [travel dates](/notes/travel)
 
 ## References
-
-<https://en.wikipedia.org/wiki/Ontology_(information_science)>  
-<https://en.wikipedia.org/wiki/Information_architecture>  
-<https://en.wikipedia.org/wiki/Knowledge_engineering>  
-<https://en.wikipedia.org/wiki/Knowledge_management>  
-<https://en.wikipedia.org/wiki/Knowledge_retrieval>  
-<https://en.wikipedia.org/wiki/Information_retrieval>  
-  
-<https://en.wikipedia.org/wiki/Idea_networking>  
-<https://en.wikipedia.org/wiki/Metacognition>  
-<https://en.wikipedia.org/wiki/Semantic_network>  
-<https://en.wikipedia.org/wiki/Knowledge_representation_and_reasoning>  
-<https://en.wikipedia.org/wiki/Mind_map>  
-<https://en.wikipedia.org/wiki/Hierarchy>  
-<https://en.wikipedia.org/wiki/Concept_map>  
-<https://en.wikipedia.org/wiki/Group_concept_mapping>  
-<https://en.wikipedia.org/wiki/Modeling_language>  
-  
-<https://en.wikipedia.org/wiki/Hypertext>  
-<https://en.wikipedia.org/wiki/HTML>  
-<https://en.wikipedia.org/wiki/Hyperlink>  
-<https://en.wikipedia.org/wiki/Metadata>  
-<https://en.wikipedia.org/wiki/Semantic_Web>  
-<https://en.wikipedia.org/wiki/Web_Ontology_Language>  
-<https://en.wikipedia.org/wiki/Resource_Description_Framework>  
-<https://en.wikipedia.org/wiki/RDF_Schema>  
-<https://en.wikipedia.org/wiki/Simple_Knowledge_Organization_System>  
-<https://en.wikipedia.org/wiki/Semantically-Interlinked_Online_Communities>  
-<https://en.wikipedia.org/wiki/JSON-LD>  
-  
-<https://en.wikipedia.org/wiki/Personal_knowledge_management>  
-<https://en.wikipedia.org/wiki/Personal_wiki>  
-<https://en.wikipedia.org/wiki/Personal_information_manager>  
-<https://en.wikipedia.org/wiki/Personal_knowledge_base>  
-<https://en.wikipedia.org/wiki/Personal_digital_assistant>  
-<https://en.wikipedia.org/wiki/Google_Knowledge_Graph>  
-<https://en.wikipedia.org/wiki/Graph_drawing>  
-  
-<https://markmap.js.org/do>>  
+https://en.wikipedia.org/wiki/Ontology_(information_science)>  
+https://en.wikipedia.org/wiki/Information_architecture  
+https://en.wikipedia.org/wiki/Knowledge_engineering  
+https://en.wikipedia.org/wiki/Knowledge_management  
+https://en.wikipedia.org/wiki/Knowledge_retrieval  
+https://en.wikipedia.org/wiki/Information_retrieval  
+https://en.wikipedia.org/wiki/Idea_networking  
+https://en.wikipedia.org/wiki/Metacognition  
+https://en.wikipedia.org/wiki/Semantic_network  
+https://en.wikipedia.org/wiki/Knowledge_representation_and_reasoning  
+https://en.wikipedia.org/wiki/Mind_map  
+https://en.wikipedia.org/wiki/Hierarchy  
+https://en.wikipedia.org/wiki/Concept_map  
+https://en.wikipedia.org/wiki/Group_concept_mapping  
+https://en.wikipedia.org/wiki/Modeling_language  
+https://en.wikipedia.org/wiki/Hypertext  
+https://en.wikipedia.org/wiki/HTML  
+https://en.wikipedia.org/wiki/Hyperlink  
+https://en.wikipedia.org/wiki/Metadata  
+https://en.wikipedia.org/wiki/Semantic_Web  
+https://en.wikipedia.org/wiki/Web_Ontology_Language  
+https://en.wikipedia.org/wiki/Resource_Description_Framework  
+https://en.wikipedia.org/wiki/RDF_Schema  
+https://en.wikipedia.org/wiki/Simple_Knowledge_Organization_System  
+https://en.wikipedia.org/wiki/Semantically-Interlinked_Online_Communities  
+https://en.wikipedia.org/wiki/JSON-LD  
+https://en.wikipedia.org/wiki/Personal_knowledge_management  
+https://en.wikipedia.org/wiki/Personal_wiki  
+https://en.wikipedia.org/wiki/Personal_information_manager  
+https://en.wikipedia.org/wiki/Personal_knowledge_base  
+https://en.wikipedia.org/wiki/Personal_digital_assistant  
+https://en.wikipedia.org/wiki/Google_Knowledge_Graph  
+https://en.wikipedia.org/wiki/Graph_drawing  
+https://markmap.js.org/ 

+ 1 - 1
notes/tennis.md

@@ -15,7 +15,7 @@ NFHS - Cardiac, Abuse, Concussion, Covid
 
 ## Tools 
 
-- UNC Climate Health Vulnerabilities Wet Bulb Tool - <https://convergence.unc.edu/tools/wbgt/>
+- UNC Climate Health Vulnerabilities Wet Bulb Tool - https://convergence.unc.edu/tools/wbgt/
 
 ## Rules 
 

+ 1 - 1
notes/travel.md

@@ -5,4 +5,4 @@ We like to travel on occasion. I'm not quite as adventurous as I once was, but I
 
 ## References
 
-1. _Faux Travel_ - <https://davidawindham.com/faux-travel/>
+1. _Faux Travel_ - https://davidawindham.com/faux-travel/

+ 32 - 32
notes/work/projects/ai.md

@@ -29,8 +29,8 @@ I've recently started learning how to create embeddings using vector databases w
 
 - OpenAi [/docs/saas/openai](/docs/saas/openai)
 - SupaBase [/docs/saas/supabase](/docs/saas/supabase)
-- <https://supabase.com/docs/guides/api>
-- <https://gpt-index.readthedocs.io/en/latest/>
+- https://supabase.com/docs/guides/api
+- https://gpt-index.readthedocs.io/en/latest/
 
 ## Stack
 
@@ -60,48 +60,48 @@ I've recently started learning how to create embeddings using vector databases w
 
 ## Repos 
 
-- PGVector <https://github.com/pgvector/pgvector>
-- SupaBase <https://github.com/supabase/supabase>
-- Docusaurus Integration <https://github.com/facebook/docusaurus/discussions/8835>
-- MarkPrompt <https://github.com/windhamdavid/markprompt>
-- <https://github.com/windhamdavid/dw-markprompt>
-- Mendable <https://supabase.com/customers/mendableai>
-- Llama Index <https://github.com/jerryjliu/llama_index>
-- Llama Hub <https://github.com/emptycrown/llama-hub>
-- Llama Index WordPress <https://github.com/emptycrown/llama-hub/tree/main/loader_hub/wordpress>
-- Llama Index Git Repo <https://llamahub.ai/l/github_repo>
-- Llama Index GPT Retrieval Plugin - <https://llamahub.ai/l/chatgpt_plugin>
+- PGVector https://github.com/pgvector/pgvector
+- SupaBase https://github.com/supabase/supabase
+- Docusaurus Integration https://github.com/facebook/docusaurus/discussions/8835
+- MarkPrompt https://github.com/windhamdavid/markprompt
+- https://github.com/windhamdavid/dw-markprompt
+- Mendable https://supabase.com/customers/mendableai
+- Llama Index https://github.com/jerryjliu/llama_index
+- Llama Hub https://github.com/emptycrown/llama-hub
+- Llama Index WordPress https://github.com/emptycrown/llama-hub/tree/main/loader_hub/wordpress
+- Llama Index Git Repo https://llamahub.ai/l/github_repo
+- Llama Index GPT Retrieval Plugin - https://llamahub.ai/l/chatgpt_plugin
 
 
 ## Resources
 
-- ChatGPT for Supabase Docs - <https://supabase.com/blog/chatgpt-supabase-docs>
-- How I Built Supabase’s OpenAI Doc Search - <https://www.youtube.com/watch?v=Yhtjd7yGGGA>
-- Self-Host Supabase Edge Functions - <https://supabase.com/blog/supabase-beta-update-april-2023>
-- Storing OpenAI embeddings in Postgres with pgvector - <https://supabase.com/blog/openai-embeddings-postgres-vector>
-- Mendable switches from Pinecone to Supabase for vector embeddings - <https://supabase.com/customers/mendableai>
-- Supabase Clippy: ChatGPT for Supabase Docs - <https://supabase.com/blog/chatgpt-supabase-docs>
-- Supabase Vector Columns - <https://supabase.com/docs/guides/ai/vector-columns>
-- $0 Embeddings (OpenAI vs. free & open source) - <https://www.youtube.com/watch?v=QdDoFfkVkcw>
-- Thor Schaeff - Supabase bot Next.js, Langchain - <https://www.youtube.com/watch?v=Tt45NrVIBn8>
-- Haystack 2023 - Roie Schwaber-Cohen: Better Semantic Search with Hybrid (Sparse-Dense) Search - <https://www.youtube.com/watch?v=1a8bdIjjO1A>
-- Roie Schwaber-Cohen - _Vector Embeddings for Developers_ - <https://www.pinecone.io/learn/vector-embeddings-for-developers/>
-- Simon Willison - Vector Embeddings - <https://simonwillison.net/tags/embeddings/>
-- Roie Schwaber-Cohen Github - Ai bot - <https://github.com/rschwabco/ai-chat-bot-vercel>
+- ChatGPT for Supabase Docs - https://supabase.com/blog/chatgpt-supabase-docs
+- How I Built Supabase’s OpenAI Doc Search - https://www.youtube.com/watch?v=Yhtjd7yGGGA
+- Self-Host Supabase Edge Functions - https://supabase.com/blog/supabase-beta-update-april-2023
+- Storing OpenAI embeddings in Postgres with pgvector - https://supabase.com/blog/openai-embeddings-postgres-vector
+- Mendable switches from Pinecone to Supabase for vector embeddings - https://supabase.com/customers/mendableai
+- Supabase Clippy: ChatGPT for Supabase Docs - https://supabase.com/blog/chatgpt-supabase-docs
+- Supabase Vector Columns - https://supabase.com/docs/guides/ai/vector-columns
+- $0 Embeddings (OpenAI vs. free & open source) - https://www.youtube.com/watch?v=QdDoFfkVkcw
+- Thor Schaeff - Supabase bot Next.js, Langchain - https://www.youtube.com/watch?v=Tt45NrVIBn8
+- Haystack 2023 - Roie Schwaber-Cohen: Better Semantic Search with Hybrid (Sparse-Dense) Search - https://www.youtube.com/watch?v=1a8bdIjjO1A
+- Roie Schwaber-Cohen - _Vector Embeddings for Developers_ - https://www.pinecone.io/learn/vector-embeddings-for-developers/
+- Simon Willison - Vector Embeddings - https://simonwillison.net/tags/embeddings/
+- Roie Schwaber-Cohen Github - Ai bot - https://github.com/rschwabco/ai-chat-bot-vercel
 
 
 
 ## Commercial
 
-- Mendable - <https://www.mendable.ai>
-- MarkPrompt - <https://markprompt.com>
+- Mendable - https://www.mendable.ai
+- MarkPrompt - https://markprompt.com
 
 ---
 ## References
 
-1. _Slow Thinking_ - <https://davidawindham.com/slow-thinking/>
-2. _A Second Brain_ - <https://davidawindham.com/a-second-brain/>
-3. _Artificial Intelligence_ - <https://davidawindham.com/artificial-intelligence/>
-4. _Artificial Intelligence (Part 2)_ - <https://davidawindham.com/artificial-intelligence-2/>
+1. _Slow Thinking_ - https://davidawindham.com/slow-thinking/
+2. _A Second Brain_ - https://davidawindham.com/a-second-brain/
+3. _Artificial Intelligence_ - https://davidawindham.com/artificial-intelligence/
+4. _Artificial Intelligence (Part 2)_ - https://davidawindham.com/artificial-intelligence-2/
 5. TIL SasS OpenAI - [/docs/saas/OpenAI](/docs/saas/OpenAI)
 6. MarkPrompt - [https://markprompt.com/docs#react](https://markprompt.com/docs#react)

+ 3 - 3
notes/work/projects/game.md

@@ -8,6 +8,6 @@ I want to combine an element of Choose Your Own Adventure that uses Wikipedia as
 
 ---
 
-1. Games Magazine - <https://en.wikipedia.org/wiki/Games_World_of_Puzzles>
-2. Wikiracing - <https://en.wikipedia.org/wiki/Wikiracing>
-2. Choose Your Own Adventure - <https://en.wikipedia.org/wiki/Choose_Your_Own_Adventure>
+1. Games Magazine - https://en.wikipedia.org/wiki/Games_World_of_Puzzles
+2. Wikiracing - https://en.wikipedia.org/wiki/Wikiracing
+2. Choose Your Own Adventure - https://en.wikipedia.org/wiki/Choose_Your_Own_Adventure

+ 12 - 12
notes/work/projects/ham.md

@@ -1,10 +1,10 @@
 # The Ham
 
-<https://the-ham.org>
+https://the-ham.org
 
 ## About
 
-This project started as a conversation between a couple friends about an old meetup group we called "The No Bullshit Club". Unsure of specifics at this point. I need to make some notes here on broadcasting equipment and workflow.  I'd also like to consolidate my old <http://radio.davidawindham.com> project into it while I'm moving it from [Woozer](/docs/computers/woozer) to [Woozie](/docs/computers/woozie)
+This project started as a conversation between a couple friends about an old meetup group we called "The No Bullshit Club". Unsure of specifics at this point. I need to make some notes here on broadcasting equipment and workflow.  I'd also like to consolidate my old http://radio.davidawindham.com project into it while I'm moving it from [Woozer](/docs/computers/woozer) to [Woozie](/docs/computers/woozie)
 
 I added a multi-track setup a new microphone this week that'll allow me to record each channel separately and then polish them down in Audition. I also figured out how to use a new VOIP application ( Murmur/Mumble ) so that I don't have to pipe your audio in via a phone call or other application. This will give me very high quality audio from your microphones with low latency. It'll also give spacial audio to each micrphone so that one is on the left, the right and center. I'll need to show you how to install and connect to my VOIP server. It'll also free up my line to call other guests. I'd like to test this out with y'all live sometime in the next week so y'all are pumped about it before LEAF.
 
@@ -26,13 +26,13 @@ Only other thing is to publish a domain and a show name. No bullshit can be a se
 
 ### References
 
-- <https://www.linode.com/docs/guides/set-up-a-streaming-rtmp-server/>
-- <https://www.digitalocean.com/community/tutorials/how-to-set-up-a-video-streaming-server-using-nginx-rtmp-on-ubuntu-20-04>
-- <https://www.digitalocean.com/community/tutorials/how-to-configure-nginx-as-a-web-server-and-reverse-proxy-for-apache-on-one-ubuntu-18-04-server>
-- <https://tariosultan.com/blog/how-to-make-circle-webcam-in-obs>
-- <https://github.com/videojs/video.js>
-- <https://github.com/videojs/http-streaming>
-- <https://github.com/silvermine/videojs-airplay>
-- <https://developer.apple.com/streaming/>
-- <https://www.npmjs.com/package/m3u8-parser>
-- <https://serverfault.com/questions/1019317/receiving-rtmps-stream-on-nginx-rtmp>
+- https://www.linode.com/docs/guides/set-up-a-streaming-rtmp-server/
+- https://www.digitalocean.com/community/tutorials/how-to-set-up-a-video-streaming-server-using-nginx-rtmp-on-ubuntu-20-04
+- https://www.digitalocean.com/community/tutorials/how-to-configure-nginx-as-a-web-server-and-reverse-proxy-for-apache-on-one-ubuntu-18-04-server
+- https://tariosultan.com/blog/how-to-make-circle-webcam-in-obs
+- https://github.com/videojs/video.js
+- https://github.com/videojs/http-streaming
+- https://github.com/silvermine/videojs-airplay
+- https://developer.apple.com/streaming/
+- https://www.npmjs.com/package/m3u8-parser
+- https://serverfault.com/questions/1019317/receiving-rtmps-stream-on-nginx-rtmp

+ 1 - 1
notes/work/projects/zw.md

@@ -1,6 +1,6 @@
 # ZW 
 
-<https://davidawindham.com/zw/>
+https://davidawindham.com/zw/
 
 
 

+ 1 - 1
notes/work/work.md

@@ -17,7 +17,7 @@
 
 ## About
 
-I've learned to try and love my work. I've also learned the irregardless of my abilities that it still mostly revolves around relationships. I'd like to say that the majority of my work is fun, but I need to support myself and that's not necessarily always the case. I use my this domain <https://davidwindham.com> for my current work which I've duplicated the content below.  
+I've learned to try and love my work. I've also learned the irregardless of my abilities that it still mostly revolves around relationships. I'd like to say that the majority of my work is fun, but I need to support myself and that's not necessarily always the case. I use my this domain https://davidwindham.com for my current work which I've duplicated the content below.  
 
 I'm lucky to have fallen into a career I enjoy. I seriously doubt that even in my older age that I'll give up on it entirely to retire to [painting watercolors](/notes/art) and [gardening](/notes/garden). The computer monitors have taken a bit of a toll on my eyes, so I try to avoid the screens when I'm not working. 
 

File diff suppressed because it is too large
+ 337 - 328
package-lock.json


+ 10 - 9
package.json

@@ -14,18 +14,19 @@
     "write-heading-ids": "docusaurus write-heading-ids"
   },
   "dependencies": {
-    "@docusaurus/core": "^2.4.3",
-    "@docusaurus/plugin-content-blog": "^2.4.3",
-    "@docusaurus/preset-classic": "^2.4.3",
-    "@docusaurus/theme-mermaid": "^2.4.3",
-    "@mdx-js/react": "^1.6.22",
-    "clsx": "^1.1.1",
-    "docusaurus-lunr-search": "^3.0.0",
+    "@docusaurus/core": "^3.0.0",
+    "@docusaurus/plugin-content-blog": "^3.0.0",
+    "@docusaurus/preset-classic": "^3.0.0",
+    "@docusaurus/theme-mermaid": "^3.0.0",
+    "@mdx-js/react": "^3.0.0",
+    "@mdx-js/mdx": "^3.0.0",
+    "clsx": "^2.0.0",
+    "docusaurus-lunr-search": "^3.3.0",
     "docusaurus-plugin-matomo": "^0.0.6",
     "markprompt": "^0.1.7",
     "plugin-image-zoom": "github:flexanalytics/plugin-image-zoom",
-    "react": "^17.0.2",
-    "react-dom": "^17.0.2",
+    "react": "^18.2.0",
+    "react-dom": "^18.2.0",
     "react-player": "^2.13.0"
   },
   "browserslist": {

+ 2 - 2
posts/2023-03-16-posts.md

@@ -21,6 +21,6 @@ Dennis Ritchie was the computer scientist who created the C programming language
 
 ---
 1. How did Dennis Ritchie Produce his PhD Thesis? A Typographical Mystery - https://www.cs.princeton.edu/~bwk/dmr/doceng22.pdf
-2. Bill Ritchie - <https://www.thinkfun.com/about-us/meet-the-team/>  
-3. Dennis Ritchie - <https://en.wikipedia.org/wiki/Dennis_Ritchie>
+2. Bill Ritchie - https://www.thinkfun.com/about-us/meet-the-team/
+3. Dennis Ritchie - https://en.wikipedia.org/wiki/Dennis_Ritchie
 

+ 8 - 8
posts/2023-03-20-posts.md

@@ -20,11 +20,11 @@ The term October surprise<sub>2</sub> was coined by William Casey, Reagan's camp
 
 
 ---
-1. *A Four-Decade Secret: One Man’s Story of Sabotaging Carter’s Re-election* -<https://www.nytimes.com/2023/03/18/us/politics/jimmy-carter-october-surprise-iran-hostages.html>
-& _Expert analyzes new account of GOP deal that used Iran hostage crisis for gain_ - PBS News - <https://www.pbs.org/newshour/show/expert-analyzes-new-account-of-gop-deal-that-used-iran-hostage-crisis-for-gain>
-2. October surprise - <https://en.wikipedia.org/wiki/October_surprise>
-3. Ben Barnes - <https://en.wikipedia.org/wiki/Ben_Barnes_(Texas_politician)>
-4. John Connally - <https://en.wikipedia.org/wiki/John_Connally>  
-5. William Casey - <https://en.wikipedia.org/wiki/William_J._Casey>
-6. Iran hostage crisis - <https://en.wikipedia.org/wiki/Iran_hostage_crisis>
-7. Iran-Contra affair - <https://en.wikipedia.org/wiki/Iran–Contra_affair>
+1. *A Four-Decade Secret: One Man’s Story of Sabotaging Carter’s Re-election* - https://www.nytimes.com/2023/03/18/us/politics/jimmy-carter-october-surprise-iran-hostages.html
+& _Expert analyzes new account of GOP deal that used Iran hostage crisis for gain_ - PBS News - https://www.pbs.org/newshour/show/expert-analyzes-new-account-of-gop-deal-that-used-iran-hostage-crisis-for-gain
+2. October surprise - https://en.wikipedia.org/wiki/October_surprise
+3. Ben Barnes - https://en.wikipedia.org/wiki/Ben_Barnes_(Texas_politician)
+4. John Connally - https://en.wikipedia.org/wiki/John_Connally
+5. William Casey - https://en.wikipedia.org/wiki/William_J._Casey
+6. Iran hostage crisis - https://en.wikipedia.org/wiki/Iran_hostage_crisis
+7. Iran-Contra affair - https://en.wikipedia.org/wiki/Iran–Contra_affair

+ 7 - 7
posts/2023-03-29-posts.md

@@ -20,13 +20,13 @@ I used Github CoPilot<sub>2</sub> for a quite a while until I stopped using it o
 
 We're in for some long term changes with how this technology is going to change a lot of things.  I've used the term '[Second Brain](https://davidawindham.com/a-second-brain/)'<sub>4</sub> to describe these TIL documents because it's really just another tool. The difference is that this tool is going to be much more easily used and customizable to a bunch of different applications. For instance: Your car already has machine readable codes that can diagnose and troubleshoot issues. The problem is that most people don't have the tool to plug into the car and even then don't have the reference for those codes. Semantic language search is going to help all of those other people who metaphorically don't have the code reader or a diagnostic reference. Medicine, education, law... etc. It's going to have an impact and I'm all in on it.
 
-For now, I'm going to just test out using it against my own essays, notes, and documentation. Once I have my head properly wrapped around the possible hiccups, I'll start building it into documentation for other businesses and projects when useful. I originally wrote an essay on Artificial Intelligence<sub>5</sub> and I'm adding a more detailed essay @ <https://davidawindham.com/artificial-intelligence-2/> <sub>6</sub>
+For now, I'm going to just test out using it against my own essays, notes, and documentation. Once I have my head properly wrapped around the possible hiccups, I'll start building it into documentation for other businesses and projects when useful. I originally wrote an essay on Artificial Intelligence<sub>5</sub> and I'm adding a more detailed essay @ https://davidawindham.com/artificial-intelligence-2/ <sub>6</sub>
 
 ---
 
-1. OpenAI - <https://openai.com>
-2. Github CoPilot - <https://github.com/features/copilot/>
-3. Khan Academy Khanmigo - <https://www.khanacademy.org/khan-labs>
-4. Second Brain - <https://davidawindham.com/a-second-brain/>
-5. Artificial Intelligence - <https://davidawindham.com/artificial-intelligence/>
-6. AI ( Part 2 ) - <https://davidawindham.com/artificial-intelligence-2/>
+1. OpenAI - https://openai.com
+2. Github CoPilot - https://github.com/features/copilot/
+3. Khan Academy Khanmigo - https://www.khanacademy.org/khan-labs
+4. Second Brain - https://davidawindham.com/a-second-brain/
+5. Artificial Intelligence - https://davidawindham.com/artificial-intelligence/
+6. AI ( Part 2 ) - https://davidawindham.com/artificial-intelligence-2/

+ 3 - 3
posts/2023-04-16-posts.md

@@ -26,9 +26,9 @@ Perhaps I'll have a go at it someday. I think it could be fun and rewarding. It'
 
 ---
 
-1. South Carolina College- and Career-Ready Standards for Visual and Performing Arts Proficiency  - <https://ed.sc.gov/instruction/standards-learning/visual-and-performing-arts/standards/>
+1. South Carolina College- and Career-Ready Standards for Visual and Performing Arts Proficiency  - https://ed.sc.gov/instruction/standards-learning/visual-and-performing-arts/standards/
 2. Visual Arts - [/notes/art/education/visual](/notes/art/visual)
 3. Design - [/notes/art/education/design](/notes/art/design)
 4. Media Arts - [/notes/art/education/media](/notes/art/media)
-5. SC Alternative Certification - <https://ed.sc.gov/educators/alternative-certification/>
-6. SC Educator Portal - <https://teach.sceducator.ed.sc.gov>
+5. SC Alternative Certification - https://ed.sc.gov/educators/alternative-certification/
+6. SC Educator Portal - https://teach.sceducator.ed.sc.gov

+ 2 - 2
posts/2023-05-04-posts.md

@@ -34,5 +34,5 @@ Although I can see some really practical applications, I think my first custom p
 
 1. Docs / SAAS / OpenAI  - [/docs/saas/openai](/docs/saas/openai)
 2. TedBot - [https://jenks.davidawindham.com](https://jenks.davidawindham.com)
-3. ChatGPT Prompt Engineering for Developers - <https://learn.deeplearning.ai/chatgpt-prompt-eng/>
-4. A Second Brain - <https://davidawindham.com/a-second-brain/>
+3. ChatGPT Prompt Engineering for Developers - https://learn.deeplearning.ai/chatgpt-prompt-eng/
+4. A Second Brain - https://davidawindham.com/a-second-brain/

+ 4 - 4
posts/2023-05-08-posts.md

@@ -28,7 +28,7 @@ The full letter is worth a read<sub>4</sub>. I'm a big fan of his writing and br
 
 ---
 
-1. Coronation of Charles III and Camilla  - <https://en.wikipedia.org/wiki/Coronation_of_Charles_III_and_Camilla>
-2. Nick Cave - <https://en.wikipedia.org/wiki/Nick_Cave>
-3. Anne, Princess Royal - <https://en.wikipedia.org/wiki/Anne,_Princess_Royal>
-4. Nick Cave - _Why the fuck are you going to the King’s coronation?_ - <https://www.theredhandfiles.com/why-are-you-going-to-kings-coronation/>
+1. Coronation of Charles III and Camilla  - https://en.wikipedia.org/wiki/Coronation_of_Charles_III_and_Camilla
+2. Nick Cave - https://en.wikipedia.org/wiki/Nick_Cave
+3. Anne, Princess Royal - https://en.wikipedia.org/wiki/Anne,_Princess_Royal
+4. Nick Cave - _Why the fuck are you going to the King’s coronation?_ - https://www.theredhandfiles.com/why-are-you-going-to-kings-coronation/

+ 4 - 4
posts/2023-05-28-posts.md

@@ -22,8 +22,8 @@ It seems like a good two car combo and I like the colors. They project a bit of
 
 ---
 
-1. Volkswagen ID. Buzz - <https://en.wikipedia.org/wiki/Volkswagen_ID._Buzz>
-2. Mini - <https://en.wikipedia.org/wiki/Mini>
-3. David Windham - _Automobiles_ - <https://davidawindham.com/automobiles/>
-3. David Windham - _It's Electric_ - <https://davidawindham.com/its-electric/>
+1. Volkswagen ID. Buzz - https://en.wikipedia.org/wiki/Volkswagen_ID._Buzz
+2. Mini - https://en.wikipedia.org/wiki/Mini
+3. David Windham - _Automobiles_ - https://davidawindham.com/automobiles/
+3. David Windham - _It's Electric_ - https://davidawindham.com/its-electric/
 

+ 7 - 7
posts/2023-06-02-posts.md

@@ -29,10 +29,10 @@ And regarding our digital vs. Analog discussion... this interview says he's reco
 ---
 
 1. Dave Cobb  - [https://en.wikipedia.org/wiki/Dave_Cobb](https://en.wikipedia.org/wiki/Dave_Cobb)
-2. Dave Cobb: Nashville's Super Producer | _Broken Record_ (Hosted by Rick Rubin) - <https://www.youtube.com/watch?v=FF0sunue28c>
-3. Mary Elizabeth Cobb Obit - <https://www.carteroglethorpe.com/obituary/mary-cobb>
-4. Rev. Mary Lucille Floyd Obit - <https://www.legacy.com/funeral-homes/obituaries/name/rev-mary-lucille-floyd-obituary?pid=176751352&v=batesville&view=guestbook>
-5. _White Mansions_ - <https://en.wikipedia.org/wiki/White_Mansions>
-6. Bubba Sparxx - <https://en.wikipedia.org/wiki/Bubba_Sparxxx>
-7. _Sound on Sound_ Dave Cobb - <https://www.soundonsound.com/people/dave-cobb>
-8. 2510 Ridgewood Dr, Nashville, TN 37215 - Zillow - <https://www.zillow.com/homedetails/2510-Ridgewood-Dr-Nashville-TN-37215/41173684_zpid/?mmlb=g,53>
+2. Dave Cobb: Nashville's Super Producer | _Broken Record_ (Hosted by Rick Rubin) - https://www.youtube.com/watch?v=FF0sunue28c
+3. Mary Elizabeth Cobb Obit - https://www.carteroglethorpe.com/obituary/mary-cobb
+4. Rev. Mary Lucille Floyd Obit - https://www.legacy.com/funeral-homes/obituaries/name/rev-mary-lucille-floyd-obituary?pid=176751352&v=batesville&view=guestbook
+5. _White Mansions_ - https://en.wikipedia.org/wiki/White_Mansions
+6. Bubba Sparxx - https://en.wikipedia.org/wiki/Bubba_Sparxxx
+7. _Sound on Sound_ Dave Cobb - https://www.soundonsound.com/people/dave-cobb
+8. 2510 Ridgewood Dr, Nashville, TN 37215 - Zillow - https://www.zillow.com/homedetails/2510-Ridgewood-Dr-Nashville-TN-37215/41173684_zpid/?mmlb=g,53

+ 3 - 3
posts/2023-06-10-posts.md

@@ -31,10 +31,10 @@ Adobe used to try to map HDR color into Rec. 709 color space. but now they've ad
 
 ---
 
-1. _Iris_ - David A. Windham - <https://davidawindham.com/iris/>
+1. _Iris_ - David A. Windham - https://davidawindham.com/iris/
 2. Video of Iris in the pond - [https://photo.davidwindham.com/#167344](https://photo.davidwindham.com/#16734437965516/16864345910449)
-3. Premier Pro v22 - Understanding Color Spaces & HRD - <https://www.youtube.com/watch?v=odwptnEhxJs>
-4. Understanding Color and HDR in Premiere - Update Jan 2023 - <https://www.youtube.com/watch?v=H-JFl4aRpao>
+3. Premier Pro v22 - Understanding Color Spaces & HRD - https://www.youtube.com/watch?v=odwptnEhxJs
+4. Understanding Color and HDR in Premiere - Update Jan 2023 - https://www.youtube.com/watch?v=H-JFl4aRpao
 
 
 

+ 5 - 5
posts/2023-06-16-posts.md

@@ -25,11 +25,11 @@ This knocked an item off of my [todo list](/lists/todo)<sub>7</sub> and I was gl
 
 ---
 
-1. _Oak Factsheet_ - Clemson Cooperative Extension - - <https://hgic.clemson.edu/factsheet/oak/>
-2. USDA Field Guide to Native Oak Species - <https://www.fs.usda.gov/foresthealth/technology/pdfs/fieldguide.pdf>
-3. Angel Oak - <https://en.wikipedia.org/wiki/Angel_Oak>
-4. Quercus alba - <https://en.wikipedia.org/wiki/Quercus_alba>
-5. Quercus falcata - <https://en.wikipedia.org/wiki/Quercus_falcata>
+1. _Oak Factsheet_ - Clemson Cooperative Extension - - https://hgic.clemson.edu/factsheet/oak/
+2. USDA Field Guide to Native Oak Species - https://www.fs.usda.gov/foresthealth/technology/pdfs/fieldguide.pdf
+3. Angel Oak - https://en.wikipedia.org/wiki/Angel_Oak
+4. Quercus alba - https://en.wikipedia.org/wiki/Quercus_alba
+5. Quercus falcata - https://en.wikipedia.org/wiki/Quercus_falcata
 6. _Garden_ - TIL/Notes - [notes/garden](notes/garden)
 7. _Todo_ - TIL - David A. Windham - [/lists/todo](/lists/todo)
 8. Timberline Tree Service - [facebook.com/people/Timberline-Tree-Service-LLC/](https://www.facebook.com/people/Timberline-Tree-Service-LLC/100062993750660/)

+ 10 - 10
posts/2023-06-22-posts.md

@@ -27,13 +27,13 @@ Workflow improvements, in theory, can be quite different than in practice. Right
 
 ---
 
-1. Figma Dev Mode - <https://www.figma.com/dev-mode/>
-2. Adobes $20 billion deal to acquire Figma - <https://www.reuters.com/markets/deals/adobes-deal-acquire-figma-under-threat-eu-regulators-ft-2023-06-20/>
-3. Adobe Creative Suite - <https://en.wikipedia.org/wiki/Adobe_Creative_Suite>
-4. Macromedia - <https://en.wikipedia.org/wiki/Macromedia>
-5. _WebAssembly cut Figma’s load time by 3x_ - <https://www.figma.com/blog/webassembly-cut-figmas-load-time-by-3x/>
-6. Electron ( software framework ) - <https://en.wikipedia.org/wiki/Electron_(software_framework)>
-7. Figma for VS Code - <https://marketplace.visualstudio.com/items?itemName=figma.figma-vscode-extension>
-8. html.to.design - <https://www.figma.com/community/plugin/1159123024924461424/html.to.design>
-9. Anima for Figma - <https://www.animaapp.com/figma>
-10. GitHub for DevMode - <https://www.figma.com/community/plugin/1220512233196109878/GitHub>
+1. Figma Dev Mode - https://www.figma.com/dev-mode/
+2. Adobes $20 billion deal to acquire Figma - https://www.reuters.com/markets/deals/adobes-deal-acquire-figma-under-threat-eu-regulators-ft-2023-06-20/
+3. Adobe Creative Suite - https://en.wikipedia.org/wiki/Adobe_Creative_Suite
+4. Macromedia - https://en.wikipedia.org/wiki/Macromedia
+5. _WebAssembly cut Figma’s load time by 3x_ - https://www.figma.com/blog/webassembly-cut-figmas-load-time-by-3x/
+6. Electron ( software framework ) - https://en.wikipedia.org/wiki/Electron_(software_framework)
+7. Figma for VS Code - https://marketplace.visualstudio.com/items?itemName=figma.figma-vscode-extension
+8. html.to.design - https://www.figma.com/community/plugin/1159123024924461424/html.to.design
+9. Anima for Figma - https://www.animaapp.com/figma
+10. GitHub for DevMode - https://www.figma.com/community/plugin/1220512233196109878/GitHub

+ 7 - 7
posts/2023-07-12-posts.md

@@ -36,11 +36,11 @@ The etymology of the word is dark. It comes from the island of Sardinia where th
 
 ---
 
-1. Sardonicism - <https://en.wikipedia.org/wiki/Sardonicism>
-2. Travis Tritt - _It's a Great Day to Be Alive_ - <https://www.youtube.com/watch?v=lODUP2orePk>
-3. Suck ( verb ) - <https://en.wiktionary.org/wiki/suck>
-4. Oenanthe ( plant ) - <https://en.wikipedia.org/wiki/Oenanthe_(plant)#Sardonic_grin>
-5. Risus sardonicus - <https://en.wikipedia.org/wiki/Risus_sardonicus>
+1. Sardonicism - https://en.wikipedia.org/wiki/Sardonicism
+2. Travis Tritt - _It's a Great Day to Be Alive_ - https://www.youtube.com/watch?v=lODUP2orePk
+3. Suck ( verb ) - https://en.wiktionary.org/wiki/suck
+4. Oenanthe ( plant ) - https://en.wikipedia.org/wiki/Oenanthe_(plant)#Sardonic_grin
+5. Risus sardonicus - https://en.wikipedia.org/wiki/Risus_sardonicus
 6. _Theory and History of Folklore_ - Vladimir Propp - https://monoskop.org/images/f/f0/Propp_Vladimir_Theory_and_History_of_Folklore.pdf
-7. List of Last Words - <https://en.wikipedia.org/wiki/List_of_last_words>
-8. _Picasso's Last Words_ - Wings - <https://www.youtube.com/watch?v=9NobdV5Kxw8>
+7. List of Last Words - https://en.wikipedia.org/wiki/List_of_last_words
+8. _Picasso's Last Words_ - Wings - https://www.youtube.com/watch?v=9NobdV5Kxw8

+ 5 - 5
posts/2023-07-13-posts.md

@@ -39,10 +39,10 @@ We've decided to avoid using any cheats this go around so finishing _Tears of th
 
 ---
 
-1. The Paris Review - Fireworks: On Kenneth Anger and _The Legend of Zelda_ - <https://www.theparisreview.org/blog/2023/07/07/fireworks-on-kenneth-anger-and-the-legend-of-zelda/>
-2. _The Legend of Zelda_ - <https://en.wikipedia.org/wiki/The_Legend_of_Zelda>
-3. Shigeru Miyamoto - <https://en.wikipedia.org/wiki/Shigeru_Miyamoto>
-4. Kanazawa College of Art - <https://en.wikipedia.org/wiki/Kanazawa_College_of_Art>
-5. _Tears of the Kingdom_ - <https://en.wikipedia.org/wiki/The_Legend_of_Zelda:_Tears_of_the_Kingdom>
+1. The Paris Review - Fireworks: On Kenneth Anger and _The Legend of Zelda_ - https://www.theparisreview.org/blog/2023/07/07/fireworks-on-kenneth-anger-and-the-legend-of-zelda/
+2. _The Legend of Zelda_ - https://en.wikipedia.org/wiki/The_Legend_of_Zelda
+3. Shigeru Miyamoto - https://en.wikipedia.org/wiki/Shigeru_Miyamoto
+4. Kanazawa College of Art - https://en.wikipedia.org/wiki/Kanazawa_College_of_Art
+5. _Tears of the Kingdom_ - https://en.wikipedia.org/wiki/The_Legend_of_Zelda:_Tears_of_the_Kingdom
 
 (a.) image: screenshot from _The Legend of Zelda: Links's Awakening_ from when we were playing it several years back.

+ 9 - 9
posts/2023-08-12-posts.md

@@ -33,12 +33,12 @@ I'm just glad that it's still evolving and to be contributing financially to the
 
 ---
 
-1. WordPress 6.3 Release page - <https://wordpress.org/download/releases/6-3/>
-2. WordPress 6.3 Release video - <https://www.youtube.com/watch?v=6JhJcOLySLY>
-3. Rich Tabor - _What's new in WordPress 6.3: The Future of WordPress is Finally Here_ - <https://www.youtube.com/watch?v=2cYlRiZYcro> 
-4. David A. Windham - _Late Adopter_ - <https://davidawindham.com/late-adopter/>
-5. _windhamdavid on WordPress_ - <https://windham.wordpress.com>
-6. _David on WordPress_ - <https://wp.davidwindham.com>
-7. Code | David Windham - WP - <https://code.davidawindham.com/david/wp>
-8. David A. Windham - _WordPress 2.5_ - <https://davidawindham.com/wp-25/>
-9. David A. Windham - _WordPress 5.0_ - <https://davidawindham.com/wordpress-5/>
+1. WordPress 6.3 Release page - https://wordpress.org/download/releases/6-3/
+2. WordPress 6.3 Release video - https://www.youtube.com/watch?v=6JhJcOLySLY
+3. Rich Tabor - _What's new in WordPress 6.3: The Future of WordPress is Finally Here_ - https://www.youtube.com/watch?v=2cYlRiZYcro
+4. David A. Windham - _Late Adopter_ - https://davidawindham.com/late-adopter/
+5. _windhamdavid on WordPress_ - https://windham.wordpress.com
+6. _David on WordPress_ - https://wp.davidwindham.com
+7. Code | David Windham - WP - https://code.davidawindham.com/david/wp
+8. David A. Windham - _WordPress 2.5_ - https://davidawindham.com/wp-25/
+9. David A. Windham - _WordPress 5.0_ - https://davidawindham.com/wordpress-5/

+ 14 - 14
posts/2023-08-18-posts.md

@@ -50,17 +50,17 @@ Personally, I think your values only affect your taste in comedy if you can't la
 
 ---
 
-1. George Carlin - _What Am I Doing in New Jersey?_ ( 1988 ) - <https://www.youtube.com/watch?v=ni9vJPY-1AQ>
-2. Scandals of the Ronald Reagan administration - <https://en.wikipedia.org/wiki/Scandals_of_the_Ronald_Reagan_administration>
-3. Keating Five - <https://en.wikipedia.org/wiki/Keating_Five>
-4. October Surprise - <https://davidawindham.com/til/posts/october-surprise>
-5. _Class Clown_ - George Carlin ( 1972 ) - <https://en.wikipedia.org/wiki/Class_Clown>
-6. _I Have a Pony_ - Steven Wright ( 1985 ) - <https://en.wikipedia.org/wiki/I_Have_a_Pony>
-7. _Make America Great Again_ - David A. Windham - <https://davidawindham.com/make-america-great-again/>
-8. Jon Stewart Interviews George Carlin ( 1997 )- <https://www.youtube.com/watch?v=nCGGWeD_EJk>
-9. _I Kinda Like It When a Lotta People Die_ ( 2001 ) - <https://en.wikipedia.org/wiki/I_Kinda_Like_It_When_a_Lotta_People_Die>
-10. Inside the Night President Obama Took On Donald Trump - <https://www.pbs.org/wgbh/frontline/article/watch-inside-the-night-president-obama-took-on-donald-trump/>
-11. Comedy - <https://en.wikipedia.org/wiki/Comedy>
-12. _Psychology, political idealogy and humor appreciation: Why is satire so liberal?_ - <https://psycnet.apa.org/record/2017-51853-001>
-13. George Carlin on Larry King ( 1990 ) - <https://www.youtube.com/watch?v=F8yV8xUorQ8>
-14. George Carlin on Charlie Rose ( 1996 ) - <https://www.youtube.com/watch?v=eVZMifGcW64>
+1. George Carlin - _What Am I Doing in New Jersey?_ ( 1988 ) - https://www.youtube.com/watch?v=ni9vJPY-1AQ
+2. Scandals of the Ronald Reagan administration - https://en.wikipedia.org/wiki/Scandals_of_the_Ronald_Reagan_administration
+3. Keating Five - https://en.wikipedia.org/wiki/Keating_Five
+4. October Surprise - https://davidawindham.com/til/posts/october-surprise
+5. _Class Clown_ - George Carlin ( 1972 ) - https://en.wikipedia.org/wiki/Class_Clown
+6. _I Have a Pony_ - Steven Wright ( 1985 ) - https://en.wikipedia.org/wiki/I_Have_a_Pony
+7. _Make America Great Again_ - David A. Windham - https://davidawindham.com/make-america-great-again/
+8. Jon Stewart Interviews George Carlin ( 1997 )- https://www.youtube.com/watch?v=nCGGWeD_EJk
+9. _I Kinda Like It When a Lotta People Die_ ( 2001 ) - https://en.wikipedia.org/wiki/I_Kinda_Like_It_When_a_Lotta_People_Die
+10. Inside the Night President Obama Took On Donald Trump - https://www.pbs.org/wgbh/frontline/article/watch-inside-the-night-president-obama-took-on-donald-trump/
+11. Comedy - https://en.wikipedia.org/wiki/Comedy
+12. _Psychology, political idealogy and humor appreciation: Why is satire so liberal?_ - https://psycnet.apa.org/record/2017-51853-001
+13. George Carlin on Larry King ( 1990 ) - https://www.youtube.com/watch?v=F8yV8xUorQ8
+14. George Carlin on Charlie Rose ( 1996 ) - https://www.youtube.com/watch?v=eVZMifGcW64

+ 9 - 9
posts/2023-08-27-posts.md

@@ -44,12 +44,12 @@ It's unfortunate that in the end, Lee's legacy has mostly been described as scan
 
 ---
 
-1. Samuel Jones Lee - <https://en.wikipedia.org/wiki/Samuel_Jones_Lee> | Vandervelde, Isabel. _Biography of Samuel Jones Lee_. Aiken, S.C.: Art Studio Press, 1997 | <https://www.scencyclopedia.org/sce/entries/lee-samuel-j/> - Oldfield, John. “The African American Bar in South Carolina, 1877–1915.” In At Freedom’s Door: African American Founding Fathers and Lawyers in Reconstruction South Carolina, edited by James Lowell Underwood and W. Lewis Burke, Jr. Columbia: University of South Carolina Press, 2000.
-2. SC House Gallery Portraits - _Samuel Jones Lee_ - <https://www.scstatehouse.gov/studentpage/Explore/portraits/house/SamuelLee.shtml>
-3. Samuel McGowan - <https://en.wikipedia.org/wiki/Samuel_McGowan_(general)>
-4. Disputed government of South Carolina of 1876–77 - <https://en.wikipedia.org/wiki/Disputed_government_of_South_Carolina_of_1876–77>
-5. 1876 United States presidential election - <https://en.wikipedia.org/wiki/1876_United_States_presidential_election>
-6. South Carolina civil disturbances of 1875 - <https://en.wikipedia.org/wiki/South_Carolina_civil_disturbances_of_1876>
-7. Hamburg massacre, South Carolina - <https://en.wikipedia.org/wiki/Hamburg_massacre>
-8. Compromise of 1877 - <https://en.wikipedia.org/wiki/Compromise_of_1877>
-9. _Puck_ - <https://en.wikipedia.org/wiki/Puck_(magazine)>
+1. Samuel Jones Lee - https://en.wikipedia.org/wiki/Samuel_Jones_Lee | Vandervelde, Isabel. _Biography of Samuel Jones Lee_. Aiken, S.C.: Art Studio Press, 1997 | https://www.scencyclopedia.org/sce/entries/lee-samuel-j/ - Oldfield, John. “The African American Bar in South Carolina, 1877–1915.” In At Freedom’s Door: African American Founding Fathers and Lawyers in Reconstruction South Carolina, edited by James Lowell Underwood and W. Lewis Burke, Jr. Columbia: University of South Carolina Press, 2000.
+2. SC House Gallery Portraits - _Samuel Jones Lee_ - https://www.scstatehouse.gov/studentpage/Explore/portraits/house/SamuelLee.shtml
+3. Samuel McGowan - https://en.wikipedia.org/wiki/Samuel_McGowan_(general)
+4. Disputed government of South Carolina of 1876–77 - https://en.wikipedia.org/wiki/Disputed_government_of_South_Carolina_of_1876–77
+5. 1876 United States presidential election - https://en.wikipedia.org/wiki/1876_United_States_presidential_election
+6. South Carolina civil disturbances of 1875 - https://en.wikipedia.org/wiki/South_Carolina_civil_disturbances_of_1876
+7. Hamburg massacre, South Carolina - https://en.wikipedia.org/wiki/Hamburg_massacre
+8. Compromise of 1877 - https://en.wikipedia.org/wiki/Compromise_of_1877
+9. _Puck_ - https://en.wikipedia.org/wiki/Puck_(magazine)

+ 8 - 8
posts/2023-08-30-posts.md

@@ -34,13 +34,13 @@ The most **enlightening** thing I came across that really helped put my own expe
 
 ---
 
-1. Newspapers.com - <https://www.newspapers.com>
-2. Wikipedia:Newspapers.com - <https://en.wikipedia.org/wiki/Wikipedia:Newspapers.com>
-4. Samuel David Minnick - <https://davidawindham.com/samuel-david-minnick/> 
-5. Microform ( Microfilm ) - <https://en.wikipedia.org/wiki/Microform>
-5. Google Books History - <https://books.google.com/googlebooks/about/history.html>
-6. Quote Investigator - _News Is What Somebody Does Not Want You To Print. All the Rest Is Advertising_ - <https://quoteinvestigator.com/2013/01/20/news-suppress/>
-7. David A. Windham - Ancestors - <https://davidawindham.com/ancestors/>
-8. _L.R. Windham, Ex-Solon, Darlington_ - The State - 1954/10/24 - <https://www.newspapers.com/article/127952000/>
+1. Newspapers.com - https://www.newspapers.com
+2. Wikipedia:Newspapers.com - https://en.wikipedia.org/wiki/Wikipedia:Newspapers.com
+4. Samuel David Minnick - https://davidawindham.com/samuel-david-minnick/
+5. Microform ( Microfilm ) - https://en.wikipedia.org/wiki/Microform
+5. Google Books History - https://books.google.com/googlebooks/about/history.html
+6. Quote Investigator - _News Is What Somebody Does Not Want You To Print. All the Rest Is Advertising_ - https://quoteinvestigator.com/2013/01/20/news-suppress/
+7. David A. Windham - Ancestors - https://davidawindham.com/ancestors/
+8. _L.R. Windham, Ex-Solon, Darlington_ - The State - 1954/10/24 - https://www.newspapers.com/article/127952000/
 9. _Leo Windham Drops out of Senate Race_ - The State - 1980/04/04
 10. _The Lindsay rule applied_ - The State - 1991/07/21

+ 3 - 3
posts/2023-09-12-posts.md

@@ -35,7 +35,7 @@ I've been doing it long enough now to see the long term outcomes of some of thos
 
 ---
 
-1. Stack Exchange _Performance_ - <https://stackexchange.com/performance>
-2. _Death By A Thousand Microservices_ - <https://renegadeotter.com/2023/09/10/death-by-a-thousand-microservices.html>
-3. KISS principle - <https://en.wikipedia.org/wiki/KISS_principle>
+1. Stack Exchange _Performance_ - https://stackexchange.com/performance
+2. _Death By A Thousand Microservices_ - https://renegadeotter.com/2023/09/10/death-by-a-thousand-microservices.html
+3. KISS principle - https://en.wikipedia.org/wiki/KISS_principle
 

+ 8 - 8
posts/2023-10-12-posts.md

@@ -45,11 +45,11 @@ The fifth edition opens with a _Tribute to Evi_ <sub>8</sub>.
 
 ---
 
-1. Evi Nemeth - <https://en.wikipedia.org/wiki/Evi_Nemeth>
-2. Layer 8 - <https://en.wikipedia.org/wiki/Layer_8>
-3. Pee Dee - <https://en.wikipedia.org/wiki/Pee_Dee>
-4. Thomas Lynch Jr. - <https://en.wikipedia.org/wiki/Thomas_Lynch_Jr.>
-5. People Who Disappeared at Sea - <https://en.wikipedia.org/wiki/List_of_people_who_disappeared_mysteriously_at_sea>
-6. Lisa Haney ( illustrator ) - _Unix & Linux System Administration Handbook (4th Edition)_ - <https://www.behance.net/gallery/1389839/Book-UNIX-and-Linux-System-Administration-Handbook>
-7. _Unix & Linux System Administration Handbook (5th Edition)_ - <https://www.admin.com>
-8. _Unix & Linux System Administration Handbook (5th Edition)_ - Tribute to Evi - <https://www.admin.com/samples/EviTribute.pdf>
+1. Evi Nemeth - https://en.wikipedia.org/wiki/Evi_Nemeth
+2. Layer 8 - https://en.wikipedia.org/wiki/Layer_8
+3. Pee Dee - https://en.wikipedia.org/wiki/Pee_Dee
+4. Thomas Lynch Jr. - https://en.wikipedia.org/wiki/Thomas_Lynch_Jr.
+5. People Who Disappeared at Sea - https://en.wikipedia.org/wiki/List_of_people_who_disappeared_mysteriously_at_sea
+6. Lisa Haney ( illustrator ) - _Unix & Linux System Administration Handbook (4th Edition)_ - https://www.behance.net/gallery/1389839/Book-UNIX-and-Linux-System-Administration-Handbook
+7. _Unix & Linux System Administration Handbook (5th Edition)_ - https://www.admin.com
+8. _Unix & Linux System Administration Handbook (5th Edition)_ - Tribute to Evi - https://www.admin.com/samples/EviTribute.pdf

+ 6 - 6
posts/2023-10-14-posts.md

@@ -34,9 +34,9 @@ I'm sure it'll improve and it's nice to see it available to use as fill from wit
 
 ---
 
-1. Adobe Firefly - <https://en.wikipedia.org/wiki/Adobe_Firefly>
-2. Adobe MAX - <https://en.wikipedia.org/wiki/Adobe_MAX>
-3. DALL-E - <https://en.wikipedia.org/wiki/DALL-E>
-4. Github CoPilot - <https://en.wikipedia.org/wiki/GitHub_Copilot>
-5. Micheal Halbert - <https://inkart.com>
-6. _Artificial Intelligence_ - <https://davidawindham.com/artificial-intelligence>
+1. Adobe Firefly - https://en.wikipedia.org/wiki/Adobe_Firefly
+2. Adobe MAX - https://en.wikipedia.org/wiki/Adobe_MAX
+3. DALL-E - https://en.wikipedia.org/wiki/DALL-E
+4. Github CoPilot - https://en.wikipedia.org/wiki/GitHub_Copilot
+5. Micheal Halbert - https://inkart.com
+6. _Artificial Intelligence_ - https://davidawindham.com/artificial-intelligence

+ 13 - 13
posts/2023-10-30-posts.md

@@ -33,16 +33,16 @@ Although the dualism of opposing forces is in most religions and philosophies, I
 
 ---
 
-1. _Mean Green Mother from Outer Space_ - <https://en.wikipedia.org/wiki/Mean_Green_Mother_from_Outer_Space>
-2. _Little Shop of Horrors_ - <https://en.wikipedia.org/wiki/Little_Shop_of_Horrors_(1986_film)>
-3. Levi Stubbs - <https://en.wikipedia.org/wiki/Levi_Stubbs>
-4. _Little Shop of Horrors_ - <https://en.wikipedia.org/wiki/The_Little_Shop_of_Horrors>
-5. _The Psychology Behind Why We Love (or Hate) Horror_ - Harvard Business Review - <https://hbr.org/2021/10/the-psychology-behind-why-we-love-or-hate-horror>
-6. _The Expression of the Emotions in Man and Animals_ - Charles Darwin - <https://en.wikipedia.org/wiki/The_Expression_of_the_Emotions_in_Man_and_Animals>
-7. _Children of the Corn_ - <https://en.wikipedia.org/wiki/Children_of_the_Corn>
-8. John of Patmos - <https://en.wikipedia.org/wiki/John_of_Patmos>
-9. Horror Film - <https://en.wikipedia.org/wiki/Horror_film>
-10. Satanic panic - <https://en.wikipedia.org/wiki/Satanic_panic>
-11. ( 2021 ) It's Time to Revisit the Satanic Panic. _The New York Times_- <https://www.nytimes.com/2021/03/31/us/satanic-panic.html>
-12. Nondualism - <https://en.wikipedia.org/wiki/Nondualism>
-11. _Beetlejuice_ - <https://en.wikipedia.org/wiki/Beetlejuice>
+1. _Mean Green Mother from Outer Space_ - https://en.wikipedia.org/wiki/Mean_Green_Mother_from_Outer_Space
+2. _Little Shop of Horrors_ - https://en.wikipedia.org/wiki/Little_Shop_of_Horrors_(1986_film)
+3. Levi Stubbs - https://en.wikipedia.org/wiki/Levi_Stubbs
+4. _Little Shop of Horrors_ - https://en.wikipedia.org/wiki/The_Little_Shop_of_Horrors
+5. _The Psychology Behind Why We Love (or Hate) Horror_ - Harvard Business Review - https://hbr.org/2021/10/the-psychology-behind-why-we-love-or-hate-horror
+6. _The Expression of the Emotions in Man and Animals_ - Charles Darwin - https://en.wikipedia.org/wiki/The_Expression_of_the_Emotions_in_Man_and_Animals
+7. _Children of the Corn_ - https://en.wikipedia.org/wiki/Children_of_the_Corn
+8. John of Patmos - https://en.wikipedia.org/wiki/John_of_Patmos
+9. Horror Film - https://en.wikipedia.org/wiki/Horror_film
+10. Satanic panic - https://en.wikipedia.org/wiki/Satanic_panic
+11. ( 2021 ) It's Time to Revisit the Satanic Panic. _The New York Times_- https://www.nytimes.com/2021/03/31/us/satanic-panic.html
+12. Nondualism - https://en.wikipedia.org/wiki/Nondualism
+11. _Beetlejuice_ - https://en.wikipedia.org/wiki/Beetlejuice

+ 5 - 5
posts/2023-11-05-posts.md

@@ -24,9 +24,9 @@ I'm not sure who's house that is, but it certainly looks like his. Alongside of
 
 ---
 
-1. Cat Power - <https://en.wikipedia.org/wiki/Cat_Power>
-2. _Moon Pix_ - Cat Power <https://en.wikipedia.org/wiki/Moon_Pix>
-3. _Cat Power Sings Dylan_ - <https://www.catpowermusic.com>
-4. William Eggleston - <https://en.wikipedia.org/wiki/William_Eggleston>
-5. George Nichopoulos - <https://en.wikipedia.org/wiki/George_C._Nichopoulos>
+1. Cat Power - https://en.wikipedia.org/wiki/Cat_Power
+2. _Moon Pix_ - Cat Power https://en.wikipedia.org/wiki/Moon_Pix
+3. _Cat Power Sings Dylan_ - https://www.catpowermusic.com
+4. William Eggleston - https://en.wikipedia.org/wiki/William_Eggleston
+5. George Nichopoulos - https://en.wikipedia.org/wiki/George_C._Nichopoulos
 

+ 4 - 4
posts/2023-11-07-posts.md

@@ -26,7 +26,7 @@ I ran into this tidbit while researching various artist studios. I suppose since
 
 ---
 
-1. Françoise Gilot - <https://en.wikipedia.org/wiki/Françoise_Gilot>
-2. _Françoise Gilot, Artist in the Shadow of Picasso, Is Dead at 101_ - <https://www.nytimes.com/2023/06/06/arts/francoise-gilot-dead.html>
-3. _Françoise Gilot, 97, Does Not Regret Her Pablo Picasso Memoir_ - <https://www.nytimes.com/2019/06/11/t-magazine/francoise-gilot-picasso.html>
-4. David A. Windham - TIL - Notes/Art/Studio - <https://davidawindham.com/til/notes/art/studio>
+1. Françoise Gilot - https://en.wikipedia.org/wiki/Françoise_Gilot
+2. _Françoise Gilot, Artist in the Shadow of Picasso, Is Dead at 101_ - https://www.nytimes.com/2023/06/06/arts/francoise-gilot-dead.html
+3. _Françoise Gilot, 97, Does Not Regret Her Pablo Picasso Memoir_ - https://www.nytimes.com/2019/06/11/t-magazine/francoise-gilot-picasso.html
+4. David A. Windham - TIL - Notes/Art/Studio - https://davidawindham.com/til/notes/art/studio

+ 9 - 9
posts/2023-11-08-posts.md

@@ -20,7 +20,7 @@ It was almost exclusively used as a reference for the dead up until Richard Nixo
 
 The reason I thought about it this morning because of news of the results from yesterday's elections. Nixon won the 72 election and his approval ratings shot through the roof especially in the south, which vindicated the theory even thought the polling on Vietnam said otherwise. 
 
-*CBS(>1971)/Gallup(<1985) Polling on Vietnam*<sub>4</sub>
+*Gallup(👈🏼1971)/CBS(1985👉🏼) Polling on Vietnam*<sub>4</sub>
 
 |  %  | 2018 | 2000 | 1995 | 1992 | 1985 | 1971 | 1970 | 1968 | 1967 | 1965 |
 |-----|------|------|------|------|------|------|------|------|------|------|
@@ -36,11 +36,11 @@ History has now taught us otherwise and it's been shown that time tends to dull
 
 ---
 
-1. Silent majority - <https://en.wikipedia.org/wiki/Silent_majority>
-2. The Etymology Nerd - Adam Aleksic - _Silence of the Dead_ - <https://www.etymologynerd.com/blog/silence-of-the-dead>
-3. _The Silent Majority_ - U.S. Information Agency report 1969 - <https://www.c-span.org/video/?465359-1/the-silent-majority>
-4. CBS News Poll: U.S. involvement in Vietnam - <https://www.cbsnews.com/news/cbs-news-poll-u-s-involvement-in-vietnam/>
-5. Spiral of silence - <https://en.wikipedia.org/wiki/Spiral_of_silence>
-6. _The American Public's Attitudes about Richard Nixon Post-Watergate_ - <https://ropercenter.cornell.edu/blog/american-publics-attitudes-about-richard-nixon-post-watergate>
-7. _Illiberalism_ - <https://davidawindham.com/illiberalism/>
-8. _Dirty Algorithm_ - <https://davidawindham.com/dirty-algorithm/>
+1. Silent majority - https://en.wikipedia.org/wiki/Silent_majority
+2. The Etymology Nerd - Adam Aleksic - _Silence of the Dead_ - https://www.etymologynerd.com/blog/silence-of-the-dead
+3. _The Silent Majority_ - U.S. Information Agency report 1969 - https://www.c-span.org/video/?465359-1/the-silent-majority
+4. CBS News Poll: U.S. involvement in Vietnam - https://www.cbsnews.com/news/cbs-news-poll-u-s-involvement-in-vietnam/
+5. Spiral of silence - https://en.wikipedia.org/wiki/Spiral_of_silence
+6. _The American Public's Attitudes about Richard Nixon Post-Watergate_ - https://ropercenter.cornell.edu/blog/american-publics-attitudes-about-richard-nixon-post-watergate
+7. _Illiberalism_ - https://davidawindham.com/illiberalism/
+8. _Dirty Algorithm_ - https://davidawindham.com/dirty-algorithm/

+ 41 - 5
src/pages/help.md

@@ -44,6 +44,45 @@ npm run build
 npm run serve
 ```
 
+**23/11/12** - Docusaurus updated 2.4.3 👉🏼 3.0.0 and React 17.0.2 👉🏼 18.2.0
+
+:::danger
+
+This introduced a bunch of breaking errors in the markdown formatting via the MDX formatting that are documented at [https://docusaurus.io/blog/preparing-your-site-for-docusaurus-v3](https://docusaurus.io/blog/preparing-your-site-for-docusaurus-v3). Went in and cleaned up the markdown formatting - mostly the tags on links and code highlighting formatting.
+
+:::
+
+```bash
+david@ovid🏛 :~/sites/daw_til(main○) » npm outdated 
+Package                          Current  Wanted  Latest  Location                                      Depended by
+@docusaurus/core                   2.4.3   3.0.0   3.0.0  node_modules/@docusaurus/core                 daw_til
+@docusaurus/plugin-content-blog    2.4.3   3.0.0   3.0.0  node_modules/@docusaurus/plugin-content-blog  daw_til
+@docusaurus/preset-classic         2.4.3   3.0.0   3.0.0  node_modules/@docusaurus/preset-classic       daw_til
+@docusaurus/theme-mermaid          2.4.3   3.0.0   3.0.0  node_modules/@docusaurus/theme-mermaid        daw_til
+@mdx-js/react                     1.6.22  1.6.22   3.0.0  node_modules/@mdx-js/react                    daw_til
+clsx                               1.2.1   1.2.1   2.0.0  node_modules/clsx                             daw_til
+docusaurus-lunr-search             3.0.0   3.3.0   3.3.0  node_modules/docusaurus-lunr-search           daw_til
+react                             17.0.2  17.0.2  18.2.0  node_modules/react                            daw_til
+react-dom                         17.0.2  17.0.2  18.2.0  node_modules/react-dom                        daw_til
+
+david@ovid🏛 :~/sites/daw_til(main⚡) » npm list     
+daw-til-2@0.0.1 /Users/david/Sites/daw_til
+├── @docusaurus/core@3.0.0
+├── @docusaurus/plugin-content-blog@3.0.0
+├── @docusaurus/preset-classic@3.0.0
+├── @docusaurus/theme-mermaid@3.0.0
+├── @mdx-js/mdx@3.0.0
+├── @mdx-js/react@3.0.0
+├── clsx@2.0.0
+├── docusaurus-lunr-search@3.3.0
+├── docusaurus-plugin-matomo@0.0.6
+├── markprompt@0.1.7
+├── plugin-image-zoom@1.1.0 (git+ssh://git@github.com/flexanalytics/plugin-image-zoom.git#8e1b866c79ed6d42cefc4c52f851f1dfd1d0c7de)
+├── react-dom@18.2.0
+├── react-player@2.13.0
+└── react@18.2.0
+```
+
 **23/09/23** - docusaurus updated -  2.4.1 👉🏼 2.4.3 -> left react at 17 for now, but updated the react player to 2.13. 
 
 ```bash
@@ -308,8 +347,8 @@ docsify serve
   "license": "UNLICENSED",
   "homepage": "https://davidawindham.com"
 }
-
 ```
+
 ```sh
 david@macs:~/sites/til(master⚡) » npm outdated                                                          130 ↵
 Package                      Current         Wanted         Latest  Location
@@ -321,10 +360,7 @@ gitbook-plugin-github-embed    1.1.2          1.3.1          1.3.1  windhamdavid
 
 
 ---
-### Math KaTeX
-$$
-I = \int_0^{2\pi} \sin(x)\,dx
-$$
+
 
 ### Admonitions
 

Some files were not shown because too many files changed in this diff