16 | {% include skip-links.html %}
17 | {% include navigation.html %}
18 |
{{ page.title }}
19 |
20 |
21 |
22 | {{ content }}
23 |
24 |
25 |
26 | {% include footer.html %}
27 | {% include scripts.html %}
28 |
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/_learn/01-sphinx-python-rtd.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Set Up Sphinx with Python"
3 | layout: learn
4 | image:
5 | thumbnail: /images/learn/python-logo400x200.png
6 | caption: "Python and Sphinx"
7 | ---
8 |
9 | Sphinx works with either major versions of Python active today, Python 2 and Python 3. Python 3 is the current and recommended version, and Python 2 is an unsupported Python version. Sphinx is a documentation tool that creates HTML, CSS, and JavaScript files from [ReStructured](https://docutils.sourceforge.net/rst.html) text files.
10 |
11 | In case you need both versions, refer to the [Downloads on the Python site](https://www.python.org/downloads/).
12 |
13 | ## Prerequisites
14 |
15 | * MacOS or a Linux-based environment in which to install Python.
16 | * Homebrew installed on MacOS. Get installation instructions from https://brew.sh/.
17 |
18 | ## Installing Python 3.x
19 |
20 | You want the latest version of Python 3 available.
21 |
22 | 1. Open a terminal and use `brew` to install the latest Python 3.x (currently 3.7).
23 |
24 | ```
25 | brew install python
26 | ```
27 |
28 | ### Verifying the Python installation
29 |
30 | 1. Open a terminal.
31 | 1. Verify that Python 3 is correctly installed.
32 |
33 | ```
34 | python -V
35 | ```
36 | Expected output for February 2020:
37 | ```
38 | Python 3.7.6
39 | ```
40 |
41 | ## Set Up Virtual Environment
42 |
43 | Let's ensure that you know how to create Python Virtual Environments for each version of Python. These [Python Virtual Environments](https://docs.python.org/3/tutorial/venv.html) provide a method of creating isolated "environments" where you can work with specific versions of Python along with independent sets of libraries and dependencies.
44 |
45 | Most people use Virtual Environments because it's a recommended practice when working in Python to ensure a known starting point or state.
46 |
47 | **Python 3**
48 |
49 | 1. First create a Python 3 virtual environment using the `venv` module included with Python 3.
50 |
51 | ```
52 | python -m venv py3-sphinx
53 | ```
54 |
55 | 1. Now "activate" the environment. Look for the name of the virtual environment enclosed in parenthesis after activation.
56 |
57 | ```
58 | source py3-sphinx/bin/activate
59 | ```
60 |
61 | ```
62 | # Expected Output
63 | (py3-sphinx) $
64 | ```
65 |
66 | 1. Now verify that `python` is now linked to Python 3.
67 |
68 | ```
69 | (py3-sphinx) $ python -V
70 | ```
71 |
72 | ```
73 | (py3-sphinx) $ Python 3.7.6
74 | ```
75 |
76 | ## Install Sphinx in the Virtual Environment
77 |
78 | 1. With the virtual environment activated, install Sphinx.
79 |
80 | ```
81 | (py3-sphinx) $ pip install sphinx
82 | ```
83 |
84 | 1. To verify that Sphinx is installed, run the `sphinx-build` command with the `--help` parameter.
85 |
86 | ```
87 | (py3-sphinx) $ sphinx-build --help
88 | ```
89 |
90 | ## Create a Basic Sphinx Project
91 |
92 | You can also get familiar with [ReStructured text](https://docutils.sourceforge.net/docs/user/rst/quickstart.html), a plain text markup syntax system that you use to write content in Sphinx documentation. Sphinx can also accept [Markdown](https://commonmark.org/help/) files.
93 |
94 | 1. Create a new directory for your project:
95 | ```
96 | (py3-sphinx) $ mkdir do-docs-as-code
97 | ```
98 | 1. With the virtual environment still activated, run `sphinx-quickstart`, which creates a starting project for a Sphinx documentation project.
99 | ```
100 | $ sphinx-quickstart
101 | ```
102 | 1. Answer all the questions from the prompts.
103 | You can choose enter to pick all the defaults and get a working project in the current directory (`.`).
104 | >Some notes for the context of this tutorial:
105 | * If you create a working directory in your home directory, such as `~/src/`, then you can use a `git clone` command in the `src` directory every time. For this tutorial, you can create a directory for your project, such as `~/src/project-name-here`. This directory becomes your root path.
106 | * You can either use a directory named `_build` within the root path, or have separate `source` and `build` directories, which is the default. To see an example directory structure with a `source` directory, refer to this [justwriteclick/rockthedocs-demo](https://github.com/justwriteclick/rockthedocs-demo) repo on GitHub.
107 | * When answering the questions, note that you can choose "githubpages set to yes" to create a `.nojekyll` file to publish the document on GitHub pages. In our case, though, our example builds to Read the Docs, so you can use the defaults throughout.
108 |
109 | 1. Once you have the basics answered, the script creates the necessary files and you can edit those to your liking.
110 | 1. Create a couple of `.rst` files and add skeleton information for starters.
111 | ```
112 | $ touch source/prerequisites.rst
113 | $ touch source/about.rst
114 | ```
115 | 1. Edit those new `.rst` files in your favorite text editor.
116 | 1. Now, you can build the docs to see the changes locally. Run this command in the directory with the `conf.py` file:
117 | ```
118 | $ make html
119 | ```
120 | 1. In your browser, open the `build/html/index.html` file to take a look at your Sphinx site locally. You can also look at `build/html/prerequisites.html` and `build/html/about.html` though they won't be linked to the main page until you add them as a link or in a table of contents entry.
121 | 1. Edit the `source/index.rst` file to include links to the additional pages.
122 | Here is an example:
123 | ```
124 | .. toctree::
125 | :maxdepth: 2
126 | :caption: Contents:
127 |
128 | about.rst
129 | prerequisites.rst
130 | ```
131 | 1. Build again to see these changes locally:
132 | ```
133 | $ make html
134 | ```
135 | 1. In your browser, refresh the `build/html/index.html` page to see the new Contents with two entries linked.
136 | 
137 | 1. Make sure you commit your changes to the Git repository by following the steps in [Working with content in GitHub repositories](https://docslikecode.com/learn/04-add-content-workflow/).
138 |
139 | ## What's next
140 |
141 | * [Working with content in GitHub repositories](https://docslikecode.com/learn/04-add-content-workflow/)
142 | * [Continuous Deployment (CD) for Documentation Sites](https://www.docslikecode.com/learn/05-cd-for-docs/)
143 | * [Set Up Automated Tests for Docs](https://www.docslikecode.com/learn/06-test-docs-as-code/)
144 |
145 | ## Evaluating options
146 |
147 | * [Evaluating Static Site Generator themes](https://www.docslikecode.com/learn/07-evaluating-ssg-themes/)
148 | * [Evaluating table layouts and formatting](https://www.docslikecode.com/learn/08-evaluating-table-layouts/)
149 | * [Evaluating Static Site Generator search options](https://www.docslikecode.com/learn/09-ssg-search-implementations/)
150 |
151 | ## Additional references
152 |
153 | * [Sphinx Python Documentation Generator](https://www.sphinx-doc.org/en/stable/)
154 | * [ReStructured text documentation](https://docutils.sourceforge.net/rst.html)
155 |
--------------------------------------------------------------------------------
/_learn/04-add-content-workflow.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Working with content in GitHub repositories"
3 | layout: learn
4 | image:
5 | path: /images/learn/octocat.png
6 | thumbnail: /images/learn/octocat-github-logo400x200.png
7 | caption: "Logo from [GitHub](https://github.com)"
8 | ---
9 |
10 | This section goes through the workflow for adding content, editing pages, and generally working on a docs site in a GitHub repo.
11 |
12 | ## Prerequisites
13 |
14 | * A GitHub, GitLab, or other Git online account.
15 | * A Git repository already created online in one of those services (GitHub, GitLab, or other) and already cloned locally.
16 |
17 | These steps are shown from within a directory that contains the Git repository files.
18 |
19 | ## Add content to the site
20 |
21 | Once you have created files required by your static site generator, you can start writing. Begin with the index, or home page.
22 |
23 | For Sphinx, you can write in either Restructured Text (`.rst`) or Markdown (`.md`). For Jekyll and Hugo, you write your source files in Markdown.
24 |
25 | Introduce your documentation and what you intend for the reader to find on the docs site. Explain some background, and feel free to add more pages with the `.rst` or `.md` file extension.
26 |
27 | You can organize your source documentation files in folders, and those folder names become part of the URL for the documentation page.
28 |
29 | A simple starter set of files could look like this for Sphinx:
30 | ```
31 | source/index.rst
32 | source/prerequisites.rst
33 | source/how-to-create-a-project.rst
34 | source/reference-list.rst
35 | ```
36 |
37 | Or this for Jekyll:
38 | ```
39 | index.html
40 | _pages/prerequisites.md
41 | _pages/how-to-create-a-project.md
42 | _pages/reference-list.md
43 | ```
44 | Or this for Hugo:
45 | ```
46 | content/_index.md
47 | content/prerequisites.md
48 | content/how-to-create-a-project.md
49 | content/reference-list.md
50 | ```
51 |
52 | Once you have your starter files, you want to create a new branch and add them to another commit.
53 | ```
54 | $ git checkout -b new-branch
55 | Switched to a new branch 'new-branch'
56 | $ git add .
57 | $ git commit -a -m "Adds initial set of doc files"
58 | [new-branch b5ce0d9] Adds initial set of doc files
59 | 3 files changed, 3 insertions(+)
60 | create mode 100644 how-to-create-a-project.rst
61 | create mode 100644 prerequisites.rst
62 | create mode 100644 reference-list.rst
63 | $ git push origin new-branch
64 | Counting objects: 5, done.
65 | Delta compression using up to 8 threads.
66 | Compressing objects: 100% (2/2), done.
67 | Writing objects: 100% (5/5), 573 bytes | 573.00 KiB/s, done.
68 | Total 5 (delta 0), reused 0 (delta 0)
69 | To github.com:annegentle/do-docs-as-code.git
70 | * [new branch] new-branch -> new-branch
71 | ```
72 |
73 | ## Creating a pull request for the new branch
74 |
75 | 1. Next, go to the GitHub URL for the new repo, `do-docs-as-code`. For example, with a username, `annegentle`, the URL would be https://github.com/annegentle/do-docs-as-code. You should see a new yellow notifier on the **Code** tab:
76 | `Your recently pushed branches: new-branch (5 minutes ago)`
77 | 1. Click the **Compare & pull request** button.
78 | 1. On the Open a Pull Request window, observe that your commit message becomes filled in the web form, comparing your `new-branch` to the base `master` branch.
79 | 1. Click **Create pull request**.
80 | 1. Once GitHub checks for merge compatibility, you should see a green button and click it, **Merge pull request**.
81 | 1. Click **Confirm merge** to merge your new-branch into the master branch on GitHub.
82 | 1. Notice that your local copy of the master branch does not yet contain these changes. In your Terminal window, run these commands to update your master branch locally.
83 |
84 | ```
85 | $ git checkout master
86 | $ git remote update
87 | $ git pull origin master
88 | ```
89 | Now, your local environment is all ready for new changes.
90 | 1. Repeat these steps each time you want to make a new branch, make a commit, make a PR, merge it, and then get your local all set up to begin again!
91 |
92 | ## Editing the site with a branch and pull request workflow
93 |
94 | When you're the only person working in a repo, you can use a simple workflow, where you simply create a branch for whatever amount of work you want to do, and then merge that branch to the master branch when you want to publish. If you're on a small team, each team member can do the same, keeping the workflow simple, where the `master` branch is the one that is published each time. Here's a walkthrough for a branch and pull workflow.
95 |
96 | 1. Every time you work in a folder that's a GitHub repo, run a `git status` command to figure out if you have any changes on the branch you're working within.
97 | ```
98 | $ git status
99 | ```
100 | 1. Once you know what changes you have on a local branch, decide whether to keep working in that branch, or start over with the current `master` branch. To start again with a new copy of master from the remote, run these commands to update your master branch locally.
101 | ```
102 | $ git checkout master
103 | $ git remote update
104 | $ git pull origin master
105 | ```
106 | 1. Next, create a new branch to make new changes in:
107 | ```
108 | $ git checkout -b new-branch
109 | ```
110 | 1. Make your edits in the files, and add new files if needed.
111 | 1. Double-check that the changes are what you expect, by building locally.
112 |
113 | These are the basic build commands on the three SSGs:
114 | **Sphinx**:
115 | ```
116 | $ make html
117 | ```
118 | Open `build/html/index.html` in your browser.
119 |
120 | **Jekyll**:
121 | ```
122 | $ bundle exec jekyll serve
123 | ```
124 | Open http://127.0.0.1:4000 in your browser.
125 | **Hugo**:
126 | ```
127 | $ hugo server
128 | ```
129 | Open http://127.0.0.1:1313 in your browser.
130 |
131 | Repeat the editing and building steps to your satisfaction.
132 |
133 | 1. Once you have the changes you need, commit to the branch:
134 | ```
135 | $ git commit -a -m "These are my changes, such as edits"
136 | ```
137 | 1. Now, push your changes to the remote so that you can create a pull request.
138 | ```
139 | $ git push origin new-branch
140 | ```
141 | 1. Open the GitHub.com repository URL to open the Pull Request, comparing `new-branch` to `master`.
142 | 1. On the Pull Request in GitHub, make sure that your continuous integration tests pass.
143 | 1. Once you are satisfied with all the changes, merge the changes to the `master` branch by clicking the Merge button on GitHub.
144 | 1. Now, look for the continuous deployment site online on readthedocs.org, GitHub Pages, or Netlify.
145 | 1. Don't forget to reset your local branch to the `master` branch that is now available in the newly-merged master on GitHub! This is the same as in step 2 above, but uses semi-colons so you can run the commands all in one line.
146 | ```
147 | $ git checkout master; git remote update; git pull origin master
148 | ```
149 |
150 | ## What's next
151 |
152 | * [Continuous Deployment (CD) for Documentation Sites](https://www.docslikecode.com/learn/05-cd-for-docs/)
153 | * [Set Up Automated Tests for Docs](https://www.docslikecode.com/learn/06-test-docs-as-code/)
154 |
155 | ## Evaluating options
156 |
157 | * [Evaluating Static Site Generator themes](https://www.docslikecode.com/learn/07-evaluating-ssg-themes/)
158 | * [Evaluating table layouts and formatting](https://www.docslikecode.com/learn/08-evaluating-table-layouts/)
159 | * [Evaluating Static Site Generator search options](https://www.docslikecode.com/learn/09-ssg-search-implementations/)
160 |
161 | ## Additional references
162 |
163 | * [Comparing Git Workflows](https://www.atlassian.com/git/tutorials/comparing-workflows)
164 | * [Git Branching - Branching Workflows](https://git-scm.com/book/en/v2/Git-Branching-Branching-Workflows)
165 |
--------------------------------------------------------------------------------
/_learn/06-test-docs-as-code.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Set Up Automated Tests for Docs"
3 | layout: learn
4 | image:
5 | path: /images/learn/travis-ci-logo400x200.png
6 | thumbnail: /images/learn/travis-ci-logo400x200.png
7 | caption: "Logo from [Travis CI](https://travis-ci.org)"
8 | ---
9 |
10 | You have choices for continuous integration systems that can run documentation tests. For this exercise, let's make a set of minimal tests: build the docs, and check the links and image references.
11 |
12 | Bonus tasks for advanced users, think about how you could run a doc linter such as `write-good`, using the basics outlined here.
13 |
14 | ## Link tests
15 |
16 | For all the continuous integration tools, you can create scripts that you store in the repo itself and tell the CI tool to run the script on each pull request as a trigger to run the script. Having CI tests in place means that you or other contributing writers can get information on tests results from each pull request to find out if it passes tests.
17 |
18 | For Sphinx, you can run a `sphinx-build` command with parameters that only checks links, both external and internal. You and your contributors can then run this script locally prior to submitting a pull request. Here is an example script, where $BUILD_DIR and $DIRECTORY are the build location and source location:
19 |
20 | ```
21 | !/usr/bin/env bash
22 | # halt script on error
23 | set -e
24 | # Build locally, and then check links
25 | sphinx-build -E -W -b linkcheck source build
26 | ```
27 |
28 | For Jekyll, the `html-proofer` gem lets you build and then test links on the built site, both external and internal. You can write a small script to build the site and then check it and then run that script with your CI tool. Jekyll builds the output to a `_site` directory by default. Here's an example script:
29 |
30 | ```
31 | #!/usr/bin/env bash
32 | # halt script on error
33 | set -e
34 | # clean by deleting any existing output
35 | rm -rf _site
36 | # Build locally, then check links in built output
37 | bundle exec jekyll build
38 | # The url-ignore is optional depending on the links you have in the site
39 | bundle exec htmlproofer ./_site --url-ignore "#"
40 | ```
41 |
42 | For Hugo, you can use this `htmltest` tool, built for Go, at https://github.com/wjdp/htmltest. For local use, install it and run it locally.
43 |
44 | For continuous integration use, you can install it in the CI system and then configure with a YAML file. Hugo automatically puts the built files into a directory named `public` or `static`. See [Using with Hugo](https://github.com/wjdp/htmltest/wiki/Using-With-Hugo).
45 |
46 | You can store an `.htmltest.yml` file in the root of the project to configure `htmltest` for the location of the built files, `public`. That file contains a line like this example:
47 |
48 | ```
49 | DirectoryPath: public
50 | ```
51 |
52 | ## Test with Travis CI
53 |
54 | First you must set up a Travis CI account at https://travis-ci.org by connecting to your GitHub account.
55 |
56 | Open source and public repositories are free to use with Travis CI. Read more about plans and pricing at https://travis-ci.com/plans if you need to build docs in private repos.
57 |
58 | Next, configure your docs repository to use Travis to run your test scripts, such as the link checker.
59 |
60 | ### Enable Travis builds for your GitHub repository
61 |
62 | 1. Log in to https://travis-ci.com and go to your profile.
63 | 1. Look for the repository in the list that you want to enable doc builds.
64 | 1. Toggle the switch for that repository.
65 | 1. Next, make sure you have scripts available to run as tests for each pull request.
66 |
67 | ### Create automation scripts in your repository
68 |
69 | For Sphinx, let's set up a script that only checks links, both external and internal.
70 |
71 | 1. In your file editor, create a `linkcheck.sh` file in a `scripts` directory.
72 | 1. Edit the file so that it contains the following bash commands to make the script:
73 | ```
74 | !/usr/bin/env bash
75 | # halt script on error
76 | set -e
77 | # Build locally, deleting any existing doctrees, and then check links
78 | sphinx-build -E -W -b linkcheck source build
79 | ```
80 | 1. Save the `linkcheck.sh` file in a `scripts` directory.
81 |
82 | ### Configure the Travis build with a .travis.yml file
83 |
84 | At the most basic level, Travis CI builds run two steps on its infrastructure, install and build. The `install` step in the `.travis.yml` config file makes sure the environment is set up with any dependencies needed for the build to run. The `script` step does the work of building.
85 |
86 | For your Sphinx link checker, create and edit a `.travis.yml` file that contains the environment setup and the script you want run:
87 |
88 | ```
89 | language: python
90 | python:
91 | - '3.5'
92 | - '3.4'
93 | - '2.7'
94 | script: ./scripts/linkcheck.sh
95 | ```
96 |
97 | For Jekyll, follow the steps in this Jekyll documentation page, [Travis Ci](https://jekyllrb.com/docs/continuous-integration/travis-ci/).
98 |
99 | To see a working example of Jekyll with TravisCI, look at the [versions-jekyll](https://github.com/justwriteclick/versions-jekyll/) repository. Here's the `.travis.yml` file:
100 | ```
101 | language: ruby
102 | rvm:
103 | - 2.2.5
104 |
105 | script: ./script/build-travis.sh
106 |
107 | env:
108 | global:
109 | - NOKOGIRI_USE_SYSTEM_LIBRARIES=true # speeds up installation of html-proofer
110 |
111 | sudo: false # routes build to container-based infrastructure for a faster build
112 | ```
113 |
114 | The `/script/build-travis.sh` file contains these lines. Notice that the script passes in the `_config.yml` file.
115 | ```
116 | #!/usr/bin/env bash
117 | set -e # halt script on error
118 |
119 | bundle exec jekyll build --config _config.yml
120 | ```
121 |
122 | If you wanted to check links instead, you could make a link checking script like so:
123 | ```
124 | #!/usr/bin/env bash
125 | set -e # halt script on error
126 |
127 | bundle exec jekyll build
128 | bundle exec htmlproofer ./_site
129 | ```
130 |
131 | Look for more inspiration beyond link checking in the additional resources section. Enjoy higher-quality doc builds with some quality tests up front!
132 |
133 | ## What's next
134 |
135 | * [Working with content in GitHub repositories](https://docslikecode.com/learn/04-add-content-workflow/)
136 | * [Continuous Deployment (CD) for Documentation Sites](https://www.docslikecode.com/learn/05-cd-for-docs/)
137 |
138 | ## Evaluating options
139 |
140 | * [Evaluating Static Site Generator themes](https://www.docslikecode.com/learn/07-evaluating-ssg-themes/)
141 | * [Evaluating table layouts and formatting](https://www.docslikecode.com/learn/08-evaluating-table-layouts/)
142 | * [Evaluating Static Site Generator search options](https://www.docslikecode.com/learn/09-ssg-search-implementations/)
143 |
144 | ## Additional references
145 |
146 | * [Test the Docs](https://testthedocs.org/)
147 | * Pantheon docs examples
148 | * [Merge conflict test](https://github.com/pantheon-systems/documentation/blob/master/scripts/merge_conflicts.sh)
149 | * [How we spotted--and fixed--11 errors in our docs with our new markdown proofer](https://circleci.com/blog/markdown-proofer/)
150 |
--------------------------------------------------------------------------------
/_learn/07-evaluating-ssg-themes.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Evaluating Static Site Generator themes"
3 | layout: learn
4 | image:
5 | path: /images/learn/ssg-themes.png
6 | thumbnail: /images/learn/ssg-themes400x225.png
7 | ---
8 |
9 | Themes for static site generators often provide advanced user experience features such as navigation, search, and responsive designs for mobile consumption. You also analyze the theme to make decisions on the authoring side, such as a table format for large data tables.
10 |
11 | When researching and selecting a theme, analyze the possibilities for printed outputs, such as PDF or EPUB. Perhaps you need version control for both the output and the source files. The size of your site may mean you need to consider the performance gains you can make with the build. Themes are one part of this analysis.
12 |
13 | Here's a short list of questions you may want to ask about the theme you use for a static site generator.
14 |
15 | ## Admonitions or notes
16 | Are there designs for output of levels of admonition, such as warning, information, and note?
17 |
18 | Advanced admonitions can enable substituting custom text instead of "Note" or "Warning," or custom icons. You can also configure the admonitions in some themes to expand or contract in-page. For example, look at the variations for Markdown source with the [Mkdocs Material theme when using the admonition extension](https://squidfunk.github.io/mkdocs-material/reference/admonitions/). Or, when using [RST with the Read the Docs theme, you have lots of directives](https://sphinx-rtd-theme.readthedocs.io/en/latest/demo/demo.html#admonitions) to choose from, including Attention, Hint, Important, Note, Tip, Error, or Danger, or write your own. You should also test if code blocks work within an admonition if that is important in your documentation.
19 |
20 | 
21 |
22 | ## Code syntax and highlighting
23 | For code examples, can you set the exact highlight you want to use, such as JavaScript or Python? Does the code snippet have a copy icon for copying only the code and not copying a prompt? What about the behavior of the scroll bar for long lines of code examples? Are there line numbers available? Can you highlight or emphasize certain lines to convey meaning? How about captions on the code block, similar to captions on figures?
24 |
25 | ## Comments or forums integration
26 | Which comment engines are supported? Do they work with the comment systems other organizations use in your company or group?
27 |
28 | ## Customization
29 | How straightforward is it to add your logo or a header that's common to multiple websites? Can you learn how to maintain the theme's customizations yourself or will you need to rely on a web developer for maintenance and any enhancements such as adding a version drop-down list? For example, the Jekyll theme "Minimal Mistakes" is "skinnable," meaning you can [configure various color variations](https://mmistakes.github.io/minimal-mistakes/docs/configuration/) for that theme.
30 |
31 | ## Images
32 | Are images automatically resized when looking at them on a mobile browser or resized browser window? Are alt tags and captions considered in the design?
33 |
34 | ## Localization and translation support
35 | When translations are available, are they simple to get to? Does the theme itself have the ability to be localized, such as for the search form or navigation elements, can the labels used in the theme be localized?
36 |
37 | ## Navigation and configuration possibilities
38 | Does the theme have a sidebar, breadcrumbs, and an in-page table of contents available? Can you turn on or off each based on the page layout or whether the person is using a mobile browser or tablet?
39 |
40 | Do you want to have Previous and Next buttons on each page, so that someone can go through a series of pages in order?
41 |
42 | ## Responsive and mobile design
43 | Does the theme use thoughtful navigation and search when on a small screen?
44 |
45 | Can your readers get to the Contents fairly easily and expand and contract, even when on a mobile phone or tablet? Check how the search experience works when using a smaller screen. Most of the built-into-the-browser developer tool kits, such as the Chrome Developer Tool, let you preview the site experience on a simulated smaller screen.
46 |
47 | 
48 |
49 | ## Search
50 | Is the search form in a prominent location and if needed, can you customize the theme to place the search form somewhere else on the page? Does the search work on mobile devices with readable results? Can the result list also be styled? Can you add weighting to certain search results so that those appear at the top of the results list?
51 |
52 | ## Social media support
53 | If you want Twitter cards for your documentation pages, are they available through the theme? Which social media sites can you link to from each page?
54 |
55 | ## Tables
56 | Do tables work on different browsers? If PDF or epub is another output option, do the tables still work on particular page sizes or do you need to adjust how tables are made in the source file itself for good results in the output?
57 |
58 | ## Theme updates
59 | How easy is it to upgrade the theme files? Can you make regular updates through a version-control system and know exactly which theme you have in use?
60 |
61 | ## Versions
62 | Many themes do not have a version picker by default. You might want a drop-down list or navigation that could include the version. The Sphinx Read the Docs theme does have one and it works great. For Jekyll, look at the [versions-jekyll repository](https://github.com/justwriteclick/versions-jekyll) to see a couple of implementation ideas.
63 |
64 | ## Evaluating other options
65 |
66 | * [Evaluating table layouts and formatting](https://www.docslikecode.com/learn/08-evaluating-table-layouts/)
67 | * [Evaluating Static Site Generator search options](https://www.docslikecode.com/learn/09-ssg-search-implementations/)
68 |
--------------------------------------------------------------------------------
/_learn/08-evaluating-table-layouts.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Evaluating table layouts and formatting"
3 | layout: learn
4 | image:
5 | path: /images/learn/table-layout.png
6 | thumbnail: /images/learn/table-layout400x225.png
7 | ---
8 |
9 | Table layout can be an annoying and difficult aspect of using simple markdown as documentation source. That said, when using Markdown or RST tables you can compare changes to simple tables more easily during reviews.
10 |
11 | One of the most helpful tools when creating tables for Markdown or RST is the Tables Generator at https://www.tablesgenerator.com/markdown_tables. You can draw tables or paste table data and then render the ASCII-based output for pasting into your document source file.
12 |
13 | For example, here is an empty five-column table in Markdown, ready for you to insert cell data and spaces.
14 |
15 | ```
16 | | | | | | |
17 | |:-|:-|:-|:-|:-|
18 | | | | | | |
19 | | | | | | |
20 | | | | | | |
21 | ```
22 |
23 | When using Markdown for tables, you do not have access to block-level formatting. If you need a second paragraph, you can use ` ` inside of a Markdown table. For more complex tables, many people use HTML inside of Markdown files.
24 |
25 | For RST, there are several options for table markup that is super simple while still allowing for nice table output.
26 |
27 | Simple tables can be made with dashes and plus signs and pipe symbols. Use spaces to indicate the size of cells. However these can be difficult to hand-type and maintain with changes over time. So, look for other table syntax ideas to make it easier to maintain the tables.
28 |
29 | The [RST documentation](https://thomas-cokelaer.info/tutorials/sphinx/rest_syntax.html#tables) has several table syntax examples. Over time I have found that the most useful way to maintain table data in columns and rows is the `csv-table` directive. Indicate header rows and labels in the cells, along with the widths of each column. Then enter the data in a CSV-like stye. Here's an example:
30 |
31 | ```
32 | .. csv-table:: a title
33 | :header: "name", "firstname", "age"
34 | :widths: 20, 20, 10
35 |
36 | "Smith", "John", 40
37 | "Smith", "John, Junior", 20
38 | ```
39 |
40 | If you also output PDF using LaTeX with Sphinx, be aware that there's a column specification for tabular data. Then you can use centimeters for width like so:
41 |
42 | ```
43 | .. tabularcolumns:: |l|c|p{5cm}|
44 | +--------------+---+-----------+
45 | | simple text | 2 | 3 |
46 | +--------------+---+-----------+
47 | ```
48 |
49 | Your editor may also have helpful tools for managing tables, such as the [Markdown Table Editor in Atom](https://atom.io/packages/markdown-table-editor), which can resize all rows and columns while you type. Plus, it enables keybindings that you can use to navigate between cells and rows.
50 |
51 | ## Evaluating other options
52 |
53 | * [Evaluating Static Site Generator themes](https://www.docslikecode.com/learn/07-evaluating-ssg-themes/)
54 | * [Evaluating Static Site Generator search options](https://www.docslikecode.com/learn/09-ssg-search-implementations/)
55 |
--------------------------------------------------------------------------------
/_learn/09-ssg-search-implementations.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Evaluating Static Site Generator search options"
3 | layout: learn
4 | image:
5 | path: /images/learn/ssg-search-options.png
6 | thumbnail: /images/learn/ssg-search-options400x225.png
7 | ---
8 |
9 | Most static site generators provide a browser-side search capability, where the list of indexed keywords for search are built at the same time as the output. Learn more about considerations for each SSG in the following sections.
10 |
11 | ### Jekyll implementation for search within the site
12 |
13 | For Jekyll and the [Minimal Mistakes theme](https://mmistakes.github.io/minimal-mistakes/), the theme author has implemented Lunr.js as a browser-side search tool. The search works fast, and when a user types in a search term, it pre-fills with suggestions in the search form. The JSON file used for the search terms should be generated each time the site is re-built.
14 |
15 | ### Sphinx search implementation
16 |
17 | For Sphinx, the default search engine creates a `searchindex.js` file that depends on cached doctree files being built each time the site is built. The build implementation goes through each document and pulls out words for search. Then, the theme uses a web form that calls the `searchindex.js` file when a user fills out the form. Currently the system does not have a way to substitute another browser-side search implementation, but the developers are considering it in a future Sphinx release based on [discussion in this GitHub Issue](https://github.com/sphinx-doc/sphinx/issues/3812).
18 |
19 | ### Hugo search options
20 |
21 | For Hugo, the search engine included with the "Learn" theme can be configured for Lunr.js. To configure the theme to use the `lunr.js` [JavaScript search engine](https://lunrjs.com/), add these lines to the `config.toml` file and rebuild.
22 | ```
23 | [outputs]
24 | home = [ "HTML", "RSS", "JSON"]
25 | ```
26 |
27 | You can also configure Algolia, a software-as-a-service (SaaS) search solution, in Hugo, according to this [blog post](https://forestry.io/blog/search-with-algolia-in-hugo/).
28 |
29 | ## Evaluating other options
30 |
31 | * [Evaluating Static Site Generator themes](https://www.docslikecode.com/learn/07-evaluating-ssg-themes/)
32 | * [Evaluating table layouts and formatting](https://www.docslikecode.com/learn/08-evaluating-table-layouts/)
33 |
--------------------------------------------------------------------------------
/_learn/10-templating.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Templating and data-based layouts"
3 | layout: learn
4 | image:
5 | path: /images/learn/web-templates.png
6 | thumbnail: /images/learn/web-templates400×225.png
7 | ---
8 |
9 | Templates can have a couple of different definitions for content, depending on the size. You can make a template for an entire document or for a page. When talking about repositories you can also have a template for a repository.
10 |
11 | Template engines within static site generators enable you to use variables or metadata values from other files in the source files that create HTML. Maybe you want to keep the product version value in a metadata file. Or you want to access the domain name the site is built upon, reliably and repeatedly. Template engines integrated with the underlying programming language give access to loops, variables, or functions so that you can enhance your website output.
12 |
13 | * Jekyll uses the [Liquid templating engine](https://shopify.github.io/liquid/), originally built by Shopify, written in Ruby. The template language is also called Liquid.
14 | * Hugo has a packaged templating engine similar to Liquid, but Go-based. Read more in [Introduction to Hugo Templating](https://gohugo.io/templates/introduction/).
15 | * Sphinx uses Python for any extensibility you need. I find it helpful to browse through the [Read the Docs Theme](https://github.com/rtfd/sphinx_rtd_theme) to find examples of templating.
16 |
17 | ## Version values as a use case for templates
18 |
19 | For web templates, the data can be substituted at the smallest level possible, the word or character level. A templating engine uses certain characters to indicate that you want to start substituting in other information from a data source. For example, a double curly bracket can show the start of the template insertion point.
20 |
21 | When using a templating language like Liquid in Jekyll, you can access the version value from a data file or from a database. Read more in the Liquid documentation about [Iteration](https://shopify.github.io/liquid/tags/iteration/).
22 |
23 | The Read the Docs theme for Sphinx uses Python variables to indicate the version, using values from the `conf.py` file for the project and a definition list rather than an unordered list.
24 |
25 | A practical example for storing a value for version would be in the `_config.yml` file in a Jekyll project. In this case, you want to output the older versions of the docs site to different base URLs, and there was a product name change from one version to the next.
26 |
27 | Take this `_config.yml` file, which is for the current version, where the product is named "Oppogrid" and you want to have /latest/ in the URL:
28 |
29 | ```
30 | baseurl : /versions-jekyll/latest
31 | productname : Oppogrid
32 | ```
33 |
34 | The numbered version is 4.2, so this `_config.4.2.yml` file outputs to a /4.2/ URL but this release is the one with the new product name.
35 |
36 | ```
37 | baseurl : /versions-jekyll/4.2
38 | productname : Oppogrid
39 | ```
40 |
41 | In this release, `_config.4.1.yml`, the product was named "Opposcale" and all the product name mentions can correctly subsititue in the right value for that release point.
42 |
43 | ```
44 | baseurl : /versions-jekyll/4.1
45 | productname : Opposcale
46 | ```
47 |
48 | Any place that your source files contain these template indicators, you can rely on substitution to fill in the values.
49 |
50 | Example snippet from a Markdown file with substitutions:
51 |
52 | See the [ {{ site.productname }} User Guide]({{ site.baseurl }}user-guide) for more information.
53 |
54 | With the first `_config.yml` file, the output would be:
55 | "See the [Oppogrid User Guide](https://annegentle.io) for more information." and the internal cross link would go to the correct version for that site.
56 |
57 | ## Additional resources
58 |
59 | [Learning Liquid](https://www.shopify.com/partners/blog/topics/learning-liquid)
60 |
61 | [Sphinx Readthedocs theme documentation](https://sphinx-rtd-theme.readthedocs.io/)
--------------------------------------------------------------------------------
/_learn/11-print-pdf-epub-output.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Evaluating print, PDF, or epub output"
3 | layout: learn
4 | image:
5 | path: /images/learn/print-pdf-epub.png
6 | thumbnail: /images/learn/print-pdf-epub400x225.png
7 | ---
8 |
9 | How difficult or straightforward is it to create a print or PDF format? You may want to investigate and test solutions beyond this article, as requirements and print tolerances can vary widely.
10 |
11 | ### Jekyll options
12 |
13 | In the Jekyll Documentation Theme site, Tom Johnson suggests buying a license for Prince XML ($500) in order to create print-ready PDF files with the [Jekyll Documentation Theme](https://idratherbewriting.com/documentation-theme-jekyll/). The PDF layout and styles are set using CSS. Considering that the only gem solution, [jekyll-pdf](https://github.com/abeMedia/jekyll-pdf), makes PDF files of single pages rather than a collection, the third-party solution is probably the way to go. You could look into the [Open-Publisher](https://github.com/chrisanthropic/Open-Publisher) project, which is using Jekyll to create outputs that can be used as Pandoc inputs. [Pandoc](https://pandoc.org/) is a super handy conversion tool that can convert many formats to other formats, and has templating capabilities that can help.
14 |
15 | ### Sphinx options
16 |
17 | When you use Read the Docs builds for deployment, you automatically get versioned documentation based on releases, as well as PDF output for the entire site. The PDF formatting is based on [LaTex](https://www.latex-project.org/), an open source typesetting system. It has page numbering, linking, and footnotes.
18 |
19 | You also notice you get an Epub output when you use [Read the Docs](https://readthedocs.org/). Sphinx does have advantages over other static site generators for book-like output options since the Read the Docs theme is so thorough.
20 |
21 | ### Hugo options
22 |
23 | Hugo supports many [custom output formats through templates](https://gohugo.io/templates/output-formats/), but as of right now no one has written a series of templates for PDF, based on the discussions in various Issues, such as [#1360 Generate concatenated document for Kindle/PDF generation](https://github.com/gohugoio/hugo/issues/1360) and [#3530 Add alternative rendering format for LaTeX](https://github.com/gohugoio/hugo/issues/3530). You could also use Prince XML as a solution here, similar to Jekyll.
24 |
25 | ## Other options?
26 |
27 | For the _Docs Like Code_ book, I have written an article about how I created print-ready PDF and Amazon-supported ebook files such as the MOBI format. Read more in [Practical Advice On Publishing A Technical Book using GitHub and GitBook](https://www.docslikecode.com/articles/practical-advice/). GitBook has since changed their overall pricing and support plan, but is certainly worth investigating.
28 |
--------------------------------------------------------------------------------
/_learn/12-ssg-performance.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Static Site Generator performance considerations"
3 | layout: learn
4 | image:
5 | path: /images/learn/ssg-performance.png
6 | thumbnail: /images/learn/ssg-performance-400x225.png
7 | ---
8 |
9 | When you start building large documentation sites, or gluing together multiple documentation sets, you might look for performance gains in the build time. Having smaller doc sites helps with this, so that you can build with your static site generator systems in parallel, but also look for incremental builds or ways to measure build times to look for areas where the build is slowed down and then find a root cause for the slower performance.
10 |
11 | ### Sphinx build performance options
12 |
13 | Sphinx has a couple of possibilities for decreasing build times and increasing efficiency of builds.
14 |
15 | Sphinx is configured by default to rebuild only new and changed files, rather than building the entire site over again. Use the `-a` flag on the `sphinx-build` command to always write all output files. This setting may help you measure benchmark values for build times.
16 |
17 | Trying to keep your number of individual RST files to build to hundreds rather than thousands will naturally make the builds take less time. If you do need thousands of documents, then also be careful with the number of `toctree` directives in use as that overhead can slow down builds.
18 |
19 | One option for large doc sets is to let Sphinx use multiple processes, adjusting on its own with the `sphinx-build -j auto` setting, available since the 1.7 release. The `auto` value causes Sphinx to use the number of CPUs for the number of parallel builds.
20 |
21 | ### Jekyll build time improvements
22 |
23 | Jekyll can build only changed files with the incremental build feature, but it is considered experimental in the Jekyll 3.0 release. Use the `-I` or `--incremental` flag on your `jekyll build` or `jekyll serve` commands any time you want to re-build only posts and pages with changes.
24 |
25 | ```
26 | $ jekyll build --incremental
27 | ```
28 |
29 | For sites with about a hundred pages, there's less need for performance helpers, but when the site grows to 1,000 pages or more, you should consider only building changed files with the `--incremental` flag.
30 |
31 | ### Hugo build performance metrics
32 |
33 | For Hugo, often the build is so fast you don't have to worry about building incremental changes. That said, Hugo does provide ways to benchmark the site build and to look for metrics for the templates themselves, because it is possible to slow down the build with inefficient template executions. When you run a `hugo` command, you can also use these flags to learn more about build performance:
34 | * `--stepAnalysis` - Display memory and timing of different steps of the program.
35 | * `--templateMetrics` - Display metrics about template executions.
36 | * `--templateMetricsHints` - Calculate some improvement hints when combined with --templateMetrics.
37 |
38 | There's also the benchmark command, documented on the [gohugo.io site](https://gohugo.io/commands/hugo_benchmark/). The command builds the site multiple times with various flags set, and analyzes the running process to provide a benchmark for comparison either over time or with various flags set, such as including expired content.
39 |
--------------------------------------------------------------------------------
/_posts/articles/2016-09-17-github-for-docs.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: The Vocabulary of GitHub for Documentation
4 | excerpt: "What would happen if we treated docs like code?"
5 | last_modified_at: Sat Sep 17 07:11:52 CDT 2016
6 | categories: articles
7 | tags: GitHub, git, definitions, repository, branch, fork, pull request]
8 | image:
9 | path: /images/guarded-lightbulb-rob-sinclair.jpg
10 | caption: "[Flickr rob-sinclair](https://flic.kr/p/8J2gDY)"
11 | comments: false
12 | share: true
13 | ---
14 |
15 | What if you could use GitHub, static site generators, and Continuous Integration and Deployment (CI/CD) for our documentation? I imagine you can track your backlog and get some metrics on the quality with their nice contributor graphs. I bet you could measure "docs drift" to figure out just how behind the docs have gotten. Hey, let's also get access to the developer playground and fun equipment! Let's play on the slides and swings while we make cool and beautiful documentation, side-by-side as collaborators.
16 |
17 | I hope you're wondering, "What would happen if we treated docs like code?"
18 |
19 | Believe me, your fellow software builders are wondering, experimenting, or already starting down this road. I've seen this vision come to life and want to share my experiences so more people can learn these techniques.
20 |
21 | 
22 | {: .pull-right}
23 |
24 | I’ve found that the principles inherent to the social web for coding work extremely well for documentation. The social web leads to social coding, leads to social documentation.
25 |
26 | # What is GitHub?
27 |
28 | 
29 | {: .pull-left}
30 |
31 | Like many tools, git and GitHub were created by fire — through a pressing need for performant and efficient source control management for the Linux kernel. Read the history in the excellent [Pro Git Book](https://git-scm.com/book/en/v2/Getting-Started-A-Short-History-of-Git).
32 |
33 | GitHub is the web interface for `git` the command-line tool, that works well on Linux, Mac, or Windows. To work with others on a project (code or docs), you merge files. This model is the opposite of using a “lock and checkout” model, where no one else can work on the piece at the same time as you. With GitHub, you can work separately and bring it all together later. Git has a non-linear branching model that can take some learning to get used to. That said, I've found git and GitHub for docs quite practical and even inspirational.
34 |
35 | You can keep docs in a source code repository then the developers will review all your changes before merging them in. Unlike traditional source code management, branches are not full copies of the entire code base so they are “cheap” and “fast.” The more Agile techniques are applied to documentation, the
36 | more treating docs like code make sense.
37 |
38 | # GitHub definitions and parallels for information
39 |
40 | I hope I'm talking to people who care a lot about words. Let's start with some vocabulary and definitions to build upon.
41 |
42 | * Branch: Indicator of divergence from the base without changing the main line (or "trunk" if you like to visualize organic tree structures to remember this term).
43 | * Commit: Point-in-time snapshot of the repository with changes.
44 | * Fork (noun): A copy of the repository that is entirely yours in your namespace. In GitHub-land, forking does not have a negative connotation that it can in other contexts (such as taking an open-source project in a new direction in a huff to get different contributors). Rather, it is a way to contribute openly and publicly with your account attributed.
45 | * Fork (verb): Making a copy of the repository.
46 | * Issue: Defects, tasks, or feature requests.
47 | * Organization: Collection of group-owned repositories.
48 | * Pull Request: Comparison of edits to see if the team wants to accept changes.
49 | * Push: Move changes branch-to-branch. When you type `man git` at a Terminal prompt to read the [manual page for Git](https://www.kernel.org/pub/software/scm/git/docs/git.html), you see "Update remote refs along with associated objects," but that's more technical than we need here.
50 | * Repository: Collection of stored code or documentation that is written and built like code.
51 | * Review: Do a line-by-line comparison of a change, much like an editor would for documentation, and comment on improvements or changes.
52 |
53 | These definitions can give you decision points to make about information architecture, so think about which deliverables you'll make, who should review and collaborate on those deliverables, and how you can automate publishing with the chunks of a repository or an organization as overarching collections.
54 |
55 | Take a look at [this article's source on GitHub](https://raw.githubusercontent.com/justwriteclick/docslikecode/master/_posts/articles/2016-09-17-github-for-docs.md) to get a sense of the "source" for a document. We'll look at the source aspects in a future article. To stay in touch, subscribe to get relevant emails in your inbox.
56 |
--------------------------------------------------------------------------------
/_posts/articles/2016-09-18-github-collaborators.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Collaborating on GitHub for Documentation
4 | excerpt: "When you work with others, your deliverables win."
5 | last_modified_at: Sat Sep 17 07:11:52 CDT 2016
6 | categories: articles
7 | tags: [collaboration, developers, GitHub, git, writers]
8 | image:
9 | path: /images/stockholmlibrary-marcus_hansson.jpg
10 | caption: "[Flickr marcus_hansson](https://flic.kr/p/8Lrfg)"
11 | comments: false
12 | share: true
13 | ---
14 |
15 | Let's admit it. Writing in isolation sucks. No one to bounce ideas off of, to tell you when you're flat-out wrong or a terrible typist. Happens in organizations all the time: assignments thrown over a wall, deliverables that are project-centric instead of user-centric. The hardest can be when development set deadlines, not docs or quality assurance, so those deliverables are always squeezed for time in the end. Less context, less empathy, less collaboration. What to do?
16 |
17 | All these downfalls can be avoided when you collaborate where your readers and makers live—on GitHub. I say, go beyond content curation and curate the audience itself! Write with and for the audience. Have a developer write for her fellow developers. Make sure users have a way to share tips through the documentation.
18 |
19 | As Andy Oram said so well in "Educating computer users: the need for community/author collaboration," "...the *value* in educational content lies in *context* (what immediate problem the reader is trying to solve) and *timeliness* (what’s true today will be outdated tomorrow)."
20 |
21 | Value, context, and timeliness, all these features are available when you use GitHub to co-author your documentation.
22 |
23 | # Motivations
24 |
25 | When you write with people beyond your immediate team, ensure that those contributors are valued and rewarded! Keep in mind these motivations people have for making information better:
26 |
27 | * Feel a sense of belonging.
28 | * Meet a desire to pay it forward (reciprocity).
29 | * Produce effective, time-saving, user support.
30 | * Build a reputation, recruiting.
31 |
32 | Harnessing these needs being met is not about gaining free labor. Contributors should be highly, highly valued, and rewarded. It's about creating opportunities to shine, and curating jobs. Because contributor graphs are available on GitHub, and because the contribution data can be mined to see that reputation being built one pull request at a time, GitHub gives rewards in a new way.
33 |
34 | If you think this all sounds nice but impractical, I encourage you to sign up for the newsletter to learn how to practice these techniques like you would a musical instrument. You need hands-on experience and time to play to get better and better.
35 |
--------------------------------------------------------------------------------
/_posts/articles/2016-09-23-doc-issues-tracking.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Quality Tracking with GitHub for Docs
4 | excerpt: "What do you do when people say, 'The Docs Suck.'?"
5 | last_modified_at: Fri Sep 23 21:03:14 CDT 2016
6 | categories: articles
7 | tags: [developers, GitHub, git, improvement, quality, testing, writers]
8 | image:
9 | path: /images/stacked-logs-mtischendorf.jpg
10 | caption: "[Flickr mtischendorf](https://flic.kr/p/aAb4s8)"
11 | comments: false
12 | share: true
13 | ---
14 |
15 | A definitive aspect of a docs-like-code philosophy is attention to quality and accuracy. You want the docs to get better and better. You want to know if the docs are out of date compared to tightly-coupled code. You want people to report issues when they see something that needs fixing. The vision is that more readers mean more testers, and those readers and testers should report problems right there on the page.
16 |
17 | ## What do you do when people say, "The Docs Suck."?
18 |
19 | It's a pretty simple request:
20 |
21 | 1. Tell me which page.
22 | 1. Tell me your expectations for that page.
23 | 1. Tell me how to fix it.
24 |
25 | You can then pre-fill with additional information to help you or other collaborators fix the bug, such as the source file and when it was merged into the repository.
26 |
27 | All these concerns can be addressed with a great [Issues template](https://github.blog/2016-02-17-issue-and-pull-request-templates/). To make an Issue template for a GitHub docs repository, save a file named ISSUE_TEMPLATE in the root directory that contains the information you need in Markdown format. Add headings, links, @-mentions, and task lists to your Issue template.
28 |
29 | In OpenStack, we use [JavaScript](https://github.com/openstack/openstackdocstheme/blob/master/openstackdocstheme/theme/openstackdocs/static/js/docs.js#L119) to pre-fill the bug form with the page title, URL, a link to the source file itself, and any tags to add to the logged doc bug. I'm sure you could adopt something similar in your static site generator as well.
30 |
31 | Users click here: 
32 |
33 | Next, users go through a bug reporting workflow with a pre-filled template:
34 | 
35 |
36 | To take it a step further, you can also add a link to edit the source doc file in GitHub's web editor workflow to have the person fix the bug themselves.
37 |
38 | ## From no reviews to many
39 |
40 | In traditional enterprise doc systems, writers can go weeks without getting reviews or input. Even when asking and nagging multiple times, sometimes the documentation systems are so separate from code systems that technical reviews are through email. GASP. Put those days behind you and go where the technically knowledgeable people are.
41 |
42 | Working with the same collaboration tools as technical people gives better reviews. We can merge as many as 50 patches per day, though, in reality, it's about a dozen a day. We are running up to four automated doc tests per patch and requiring two humans to check the patch and click to publish. Each reviewer who can publish must adhere to our review rules, and people follow the rules well.
43 |
--------------------------------------------------------------------------------
/_posts/articles/2016-09-24-what-docs-like-code-looks-like.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Building Docs Like Code
4 | excerpt: "Let's look at a live example."
5 | last_modified_at: Sun Sep 25 15:35:08 CDT 2016
6 | categories: articles
7 | tags: [developers, GitHub, git, improvement, quality, testing, writers]
8 | image:
9 | path: /images/threeblackdots-playground.jpg
10 | caption: "[Flickr threeblackdots](https://flic.kr/p/8tQAGQ)"
11 | youtube: YUbl_ucNPuA
12 | comments: false
13 | share: true
14 | ---
15 |
16 | Let's take a look at what docs as code looks like in practice.
17 |
18 | The basic steps on a Mac are:
19 |
20 | 1. Make sure you have all the pre-requisites set up for Ruby, Jekyll, and Bundler. [Set up GitHub Pages locally](https://help.github.com/articles/setting-up-your-github-pages-site-locally-with-jekyll/) as instructed in the excellent GitHub documentation.
21 | 1. Clone a repository that contains a Jekyll theme that you like. We're using the [so-simple theme](https://mmistakes.github.io/so-simple-theme/) here.
22 | 1. Switch to the cloned git directory.
23 | 1. Run `bundle install` to install the required gems.
24 | 1. Run `bundle exec jekyll serve` to serve the content from a local web server.
25 | 1. Copy and paste the `http://127.0.0.1:4000/` URL into your web browser.
26 |
27 | This video shows you how to clone a GitHub repo with an existing Jekyll theme and build it locally.
28 |
29 | ### How it's made
30 |
31 |
32 |
--------------------------------------------------------------------------------
/_posts/articles/2016-11-26-remodel-your-docs.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Remodeling documentation
4 | excerpt: "Make sure you have a punch list of doc bugs to get higher quality results."
5 | last_modified_at: Sat May 13 18:34:40 CDT 2017
6 | categories: articles
7 | tags: [issues, bugs, technical debt, GitHub, git, backlog]
8 | image:
9 | path: /images/mtischendorf-logpile.jpg
10 | caption: "[Flickr mtischendorf](https://flic.kr/p/aAb4s8)"
11 | comments: false
12 | share: true
13 | ---
14 |
15 | A few years ago we went house-hunting in Austin, Texas. One house was so popular during the first showing, that there were six back-to-back appointments. We waited in the driveway while another couple toured it. Once they left, we could quickly go through it while another prospective buyer waited on the front walkway.
16 |
17 | This house was awful. Every single surface was ugly, outdated, and circa 1973. There was a giant hole in the dirt by the front porch, likely dug by an animal. But you know what? I loved it. I wanted to bring it back to a vibrant family home, taking it back from the rogue porch-dwelling raccoons. (Or was it dirt-digging armadillos? We may never know.)
18 |
19 | 
20 |
21 | Let’s look at your code base and your doc base as a great house with a good layout and foundational “bones.” You still need that “punch list” to hand to your contractor. When you move towards more docs like code techniques, make sure you treat your doc base like a code base, and track defects. Get that “punch list” done.
22 |
23 | With a code base, you know how much remodeling you need to do. The same thinking can work well for documentation. How dated have your docs become? How accurate are the docs compared to the rest of the code base? How can you make the site livable and vibrant again?
24 |
25 | Let’s give your readers the chance to do those quality checks for you as easily as possible: by reporting the bug on the page where they found it.
26 |
27 | This technique works well when:
28 |
29 | * You have more readers than contributors. (I generally hope this always happens.)
30 | * Your readers are super busy. Still, they do want to make the docs better and help others.
31 | * You want to know how far your docs have “drifted” from the truth.
32 | * You want your docs to be more trustworthy by chipping away at a bug backlog.
33 | * You have a private GitHub repo for documentation, but you want to enable public bug reports with tracking back to your docs repo.
34 |
35 | Your quick win is to look at your current docs site, on any given page. Is there a way to report a bug publicly, to add to the “punch list?”
36 |
37 | 1. A bare minimum starter level would be an email address link from every page.
38 | 1. Level up by adding a link to your GitHub source repo Issues page so readers can report bugs.
39 | 1. Better yet, write a quick bit of code to embed on every output doc page so that the issue is pre-filled with relevant information.
40 |
41 | Here are some resources to get your first punch in that punch list:
42 |
43 | * Using Python Sphinx? The OpenStack docs theme has some Javascript you could re-use to pre-populate an Issue template so the reporter sends the page URL, the source URL, the git SHA of the commit for that version of the page, and the release version value. See this [docs.js snippet](https://github.com/openstack/openstackdocstheme/blob/master/openstackdocstheme/theme/openstackdocs/static/js/docs.js#L119).
44 | * Using a private repo for docs, but want to track bugs publicly? Use [Issues-only Access Permissions](https://help.github.com/articles/issues-only-access-permissions/).
45 | * Want to add a bit of code to pre-create Issues to use as comments on every page? Free yourself from Disqus comments. Try this [set of tips and sample code in a blog post](https://zpbappi.com/jekyll-with-tags-archive-and-comments-in-github-pages/).
46 |
--------------------------------------------------------------------------------
/_posts/articles/2016-12-29-coming-soon-writing-docs-like-code.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Coming Soon - Write Docs Like Code Ebook
4 | excerpt: "What do you want to know about these techniques?"
5 | last_modified_at: Thu Dec 29 20:07:26 CST 2016
6 | categories: articles
7 | tags: [ebook, epub, gitbook, book, GitHub, docs, repos]
8 | image:
9 | path: /images/seabamirum-common-redpoll.jpg
10 | caption: "[Flickr seabamirum](https://flic.kr/p/dFow3k)"
11 | comments: true
12 | share: true
13 | ---
14 |
15 | I've been working hard on a new book with two collaborators, Diane Skwish and Kelly Holcomb, titled "Docs Like Code." We're editing and organizing like mad now, working hard to get all our experiences and best practices written down for the world to see. So I ask you, what do you want to know about writing docs like code?
16 |
17 | Here are some of the topics:
18 |
19 | * Why use GitHub for docs?
20 | * Information architecture
21 | * Workflows
22 | * Author and build content
23 | * Quality assurance
24 | * Review
25 | * Automate builds
26 | * Lessons learned
27 | * Tutorials: Get started with docs like code
28 | * What about wikis?
29 |
30 | When you treat docs as code, what are your biggest barriers? Your looming concerns? Let me know so we can address these. Sign up below to learn more together.
31 |
--------------------------------------------------------------------------------
/_posts/articles/2017-03-18-pantheon-case-study.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Case Study - Pantheon, Rachel Whitton
4 | excerpt: "In this use case, the Technical Content Editor at Pantheon, Rachel Whitton, describes their use of GitHub for documentation on a platform for WordPress and Drupal."
5 | last_modified_at: Sat Mar 18 09:50:27 CDT 2017
6 | categories: articles
7 | author: rachel_whitton
8 | tags: [case study, use case, GitHub, docs, repos, web, content, workflows]
9 | image:
10 | path: /images/stevensnodgrass-bolt.jpg
11 | caption: "[Flickr stevensnodgrass](https://flic.kr/p/8jKjE2)"
12 | comments: true
13 | share: true
14 | ---
15 |
16 | Pantheon is a website management platform for Drupal and WordPress. In this use case, their Technical Content Editor Rachel Whitton describes the use of GitHub for documentation as well as their workflow.
17 |
18 | #### What site or sites do you create from GitHub source?
19 |
20 | [pantheon.io/docs](https://pantheon.io/docs)
21 |
22 | #### What are the repositories that build the deliverables?
23 | [github.com/pantheon-systems/documentation](https://github.com/pantheon-systems/documentation)
24 |
25 | #### Can you give an idea of the size, such as how many pages (source and output)? If they're private, that's fine too, talk about what led to that decision.
26 | Source files: 588 These are all publicly-editable source files.
27 | Output files: 602
28 |
29 | #### When did your migration to GitHub occur?
30 | We began the process in November of 2014 by creating a private repository for the content migration and initial development of a new static site (built with [Sculpin](https://sculpin.io)). The site went live in January 2015 and the repository went from private to public in April 2015.
31 |
32 | #### What factors led your team to choose GitHub for docs?
33 |
34 | We chose to host our documentation repository on GitHub to align ourselves with tools and workflows adopted by other teams across our organization for better collaboration. Our secondary goal was to tap into the collective intellect of our developer community by allowing public contributions. Over time, we began documenting upcoming features in the open prior to their full release which resulted in new levels of participation in the project on GitHub (feedback on product functionality and design, bug reports, etc).
35 |
36 | #### What type of audience are you writing for? Do your readers write with you? If so, how?
37 |
38 | Pantheon’s audience for documentation consists primarily of developers and technical advocates for digital agencies. Public contributions are most often initiated from a call to action on the site. Visitors start by clicking the Contribute button, then either edit the current page, report an issue, or suggest new content. Depending on the selection, a new tab for GitHub will open to either edit the page or open an issue using a pre-filled template. [We encourage all contributors to create a profile](https://github.com/pantheon-systems/documentation/blob/master/CONTRIBUTING.md#contributors) and attribute their work alongside any pull requests.
39 |
40 | #### How active is your review queue? How often do you publish?
41 |
42 | The documentation project receives an average of almost 40 commits per week. The site is continuously delivered upon each commit to the default branch.
43 |
44 | #### Do you merge or rebase? Have you kept the same workflow always? How long has the workflow been in place?
45 |
46 | It depends. Generally, our workflow is to merge into the default branch once updates have been peer-reviewed on a “feature” branch. We use rebase as needed or as an alternative to merging when including work in progress from one feature branch on another during their simultaneous development to ensure changes are aligned and accounted for. Our workflow is constantly evolving to better serve the project.
47 |
48 | #### What's your biggest win from using GitHub for docs? Tell a story.
49 |
50 | We try our best to prevent gaps in documentation, but one area that’s really challenging for us is covering external integrations. I didn’t know it at the time, but making the move to GitHub set us up to receive high-value contributions from other organizations. Chris Tietzel, CEO and Founder of Lockr, submitted an article (https://pantheon.io/docs/guides/lockr/) to the docs via GitHub after receiving support requests from users for help installing and integrating Lockr on Pantheon-hosted websites.
51 |
52 | #### What would you warn others about when thinking about GitHub for docs?
53 |
54 | Think about the contributor and moderator experiences - don’t be afraid to adjust workflows as your project matures. Be aware that moderators won’t have write access to forks unless granted by the maintainer of the fork - this means you’ll need to have a plan for copy edits on Pull Requests from a fork that are initiated from non-org members. We handle these by using GitHub’s suggested workflow for merging locally on the command line: check out a new branch, pull commits from the fork, make copy edits, stage and commit, switch to the default branch, then merge and push to GitHub. The Pull Request will update to reflect its merged status within the default branch.
55 |
56 | #### Would you suggest migrating content or only building new?
57 |
58 | It depends. We migrated a lot of content because it didn’t make sense to start over. I’d say migrate what you can but don’t be afraid to start fresh depending on the needs and goals of your project. If you do migrate, automate the process as much as possible. Your sanity will thank you.
59 |
60 | #### Do you have automation? If so, what type of tooling, and where is the automation in the workflow?
61 |
62 | Pantheon uses CircleCI for continuous integration which builds all commits pushed to GitHub and then tests and deploys changes to either a staging environment or to production. Deployments to production occur via `rsync` after tests have run successfully. If any test fails (broken link, performance regression, etc.) The build will fail on CircleCI and the deployment to production is skipped until a passing build occurs. Branches other than our default branch get deployed to isolated cloud development environments for staging with unique and publicly accessible URLs. Deployments to staging environments happen before the test suite is run to help debug issues and/or failures. Once builds have been deployed to a staging environment, a comment is created on the commit in GitHub with a link to the changes for quick and easy peer review. Once a feature branch has been merged into the default, the associated staging environment is automatically deleted along with the branch. The automation procedures are scripted in Bash and configured in the `circle.yml` file within the project’s root directory. The staging environments are created using Pantheon’s command-line tool, [Terminus](https://pantheon.io/docs/terminus/), and our [Multidev](https://pantheon.io/features/multidev-cloud-environments) feature.
63 |
64 | As of March 2017, this workflow was not available to forks for security reasons. As of May 2019, [CircleCI’s documentation](https://circleci.com/docs/2.0/gh-bb-integration/) indicates there's a setting for PRs created from forked repos.
65 |
66 | #### Are there any questions you wish you had asked before using GitHub for docs?
67 |
68 | How do the needs of open source software projects differ from those of a documentation project? Where does GitHub fail to fulfill the needs of documentation projects and how can those gaps be filled?
69 |
--------------------------------------------------------------------------------
/_posts/articles/2017-04-04-balsamiq-case-study-part-1.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Multiple product versions - Balsamiq, Leon Barnard
4 | excerpt: "Learn useful techniques for static sites such as Hugo on GitHub from Leon Barnard, Designer and Writer at Balsamiq. He describes documenting multiple versions of a product with a Go-coded solution."
5 | last_modified_at: Sat May 13 18:37:07 CDT 2017
6 | categories: articles
7 | author: leon_barnard
8 | tags: [case study, balsamiq, static sites, use case, wireframes, GitHub, docs, repos, hugo, tools, gif, animated gifs]
9 | image:
10 | path: /images/therefore-wireframe.jpg
11 | caption: "[Flickr therefore](https://flic.kr/p/7ewunt)"
12 | comments: true
13 | share: true
14 | ---
15 |
16 | # Use Case Part I: Balsamiq
17 |
18 | Leon Barnard, Designer and Writer (and Developer-in-training) at [Balsamiq](https://balsamiq.com/), describes how the second version of the Balsamiq Docs static site went beyond purely functional to do things the team didn't think Markdown and static sites could do.
19 |
20 | In this three-part series, Leon describes some great solutions to problems that many technical sites have faced.
21 |
22 | The three parts cover documenting multiple product versions, [adding play and pause to animated GIFs](https://docslikecode.com/articles/balsamiq-case-study-part-2/), and providing flexibility and expansion options in lists of linked pages.
23 |
24 | ## Background
25 |
26 | A year and a half ago [we ditched our flaky content management system](https://blog.balsamiq.com/new-documentation-site/) and converted our documentation site over to a "docs like code" system using [Hugo](https://gohugo.io/), [Gulp](https://gulpjs.com/), and [GitHub](https://github.com/), with content written in Markdown. It was a long process and we were happy just to see it up and running.
27 |
28 | After the dust settled, we started imagining what we wanted for the next version, and realized that the system we had built had limitations that we would have to overcome. This is a story of three challenges and how we solved them.
29 |
30 | ***Note:*** *The code in this article is specific to [Hugo](https://gohugo.io/), the static site generator we use, but should be adaptable to other static site generators.*
31 |
32 | ## Challenge #1: Documenting multiple product versions
33 |
34 | Our product, [Balsamiq Mockups](https://balsamiq.com/), comes in multiple "flavors," as we often call them. There are two versions of the core product (the wireframe editor) that are sold as: a stand-alone desktop version, a hosted web version ("myBalsamiq"), and plugins for Google Drive and Atlassian Confluence and JIRA.
35 |
36 | 
37 |
38 | That's seven different products that we sell, catered to different types of users. This is great for our customers, but a challenge for our docs.
39 |
40 | The majority of our documentation is on how to use one of the two core wireframe editors. Very little has to do with platform-specific features. So, seven products that we sell, but only two main sets of documentation.
41 |
42 | For historical reasons, most of the common documentation is in the Desktop version docs. If you used our product on a different platform, you had to know to go to the Desktop docs.
43 |
44 | This is what the content folder in our GitHub repo looked like, which meant that a lot of customers had this experience:
45 |
46 | 
47 |
48 | For the next update to our docs, we decided that we needed to finally address this issue. We wanted a complete set of docs for each product version and platform.
49 |
50 | 
51 |
52 | But, of course, we didn't want to maintain seven copies of each article. We wanted to be able to write the docs once and have them show up across multiple versions.
53 |
54 | A simple solution, I suppose, would have been to switch from Markdown to a file format that supports including content from one file in another (like [reStructuredText](https://docutils.sourceforge.net/rst.html) or [AsciiDoc](https://asciidoc.org/)). **But, I'm stubborn** (and Hugo doesn't support them well). I like how simple Markdown is and I wanted to see if we could achieve what we wanted without abandoning it.
55 |
56 | I enlisted the help of our resident [Go](https://golang.org/) expert, [Luis](https://balsamiq.com/company/#luis), and he wrote some code to do just what we wanted. This code inside one of the Hugo templates allowed us to put help files in two hidden folders (called "\_v2" and "\_v3") that would get injected into files across multiple documentation folders each time the site was generated. The result was that users could now find the information where they expected to find it.
57 |
58 | 
59 |
60 | Instead of changing file formats, we leveraged the flexibility of Hugo to use the metadata (front matter) from the Markdown file as a trigger to tell Hugo to insert content from one file to another.
61 |
62 | The code looks like this:
63 |
64 | {% raw %}
65 | ```go
66 | {{ if .Params.include }}
67 | {{ $include := .Params.include }}
68 | {{ if eq .Params.editorversion 3 }}
69 | {{ range where .Site.Pages "Params.menu" "menub3editor" }}
70 | {{ $file := .File.BaseFileName }}
71 | {{ if eq $file $include }}
72 | {{ .Content }}
73 | {{ end }}
74 | {{ end }}
75 | {{ else if eq .Params.editorversion 2 }}
76 | {{ range where .Site.Pages "Params.menu" "menub2editor" }}
77 | {{ $file := .File.BaseFileName }}
78 | {{ if eq $file $include }}
79 | {{ .Content }}
80 | {{ end }}
81 | {{ end }}
82 | {{ else }}
83 | {{ end }}
84 | {{ else }}
85 | {{ .Content }}
86 | {{ end }}
87 | ```
88 | {% endraw %}
89 |
90 | Hugo looks for two pieces of front matter. The first is the presence of a parameter called `include`. If that exists, it looks to see which version of the editor to use. Then it copies the content from *the file with the same name* from the core documentation folder ("\_v2" or "\_v3") specified in the editor version parameter.
91 |
92 | 
93 |
94 | If the `include` parameter isn't present, Hugo just uses the Markdown content in the file without copying content from elsewhere. This allows us to mix and match docs that are unique to one product with docs that share functionality with multiple products.
95 |
96 | It took some effort to get it set up, but now we don't even think about it. It's really easy for the content writers, and we'll be able to extend it when we add yet more versions in the future (we already are, in fact).
97 |
--------------------------------------------------------------------------------
/_posts/articles/2017-04-09-balsamiq-case-study-part-2.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Animated GIFs Pause and Play - Balsamiq, Leon Barnard
4 | excerpt: "Learn how to play and pause animated GIFs on static sites such as Hugo on GitHub from Leon Barnard, Designer and Writer at Balsamiq."
5 | last_modified_at: Sat May 13 18:37:48 CDT 2017
6 | categories: articles
7 | author: leon_barnard
8 | tags: [case study, balsamiq, static sites, use case, wireframes, GitHub, docs, repos, hugo, tools, gif, animated gifs]
9 | image:
10 | path: /images/rogerjones-wireframe.jpg
11 | caption: "[Flickr rogerjones](https://flic.kr/p/i4ZAW)"
12 | comments: true
13 | share: true
14 | ---
15 |
16 | # Use Case Part II: Balsamiq
17 |
18 | After learning about [documenting multiple product versions with a static site generator](https://docslikecode.com/articles/balsamiq-case-study-part-1/), this week we hear how Leon Barnard, Writer, Designer, and aspiring Developer at Balsamiq, figured out how to use animated GIF files in user assistance while also not annoying people with an endless looping animation. Not annoying and also not streaming video? Plus the cleanest Markdown source files you could create? Do tell.
19 |
20 | ## Background
21 |
22 | [Balsamiq set up a new documentation site](https://blog.balsamiq.com/new-documentation-site/) about a year and a half ago. We converted our old, flaky documentation system over to a "docs like code" system using [Hugo](https://gohugo.io/), [Gulp](https://gulpjs.com/), and [GitHub](https://github.com/), with content written in Markdown. The conversion took a while, so in the end we were pleased simply to get working.
23 |
24 | Once it was part of our daily workflow, and we could begin to look to the future, we started envisioning the next version. In doing so, we recognized the limitations and looked for solutions that kept writers writing and readers reading. This series tells the tale of three of these problem areas and how we solved the challenges.
25 |
26 | ## Challenge #2: Adding play/pause to animated GIFs
27 |
28 | In a very different challenge from [our first one](https://docslikecode.com/articles/balsamiq-case-study-part-1/), we noticed that our support team was getting great feedback when they would send animated GIFs to customers to explain solutions to problems they were having. The classic case of "show, don't tell." We realized that adding them to our documentation could be helpful too, and we added a few of them in the first version of our docs.
29 |
30 | But it can be distracting to read an article when there's an endlessly-looping animation in your line of sight. But if you only play it once, readers could miss it.
31 |
32 | I came across several sites that gave users an option to play the animated GIF when they clicked on it and I thought that would be great for our docs.
33 |
34 | I found a great jquery plugin that I wanted to use called [**gifplayer**](https://rubentd.com/gifplayer/).
35 |
36 | [](https://rubentd.com/gifplayer/).
37 |
38 | There was just one problem. Markdown. Again.
39 |
40 | Triggering the gifplayer code is as easy as adding a CSS class to an image. Like this:
41 |
42 | ```html
43 |
44 | ```
45 |
46 | But native Markdown doesn't support adding CSS. Of course, Markdown *does* support inline HTML, and we *could* have just written HTML whenever we wanted to add an animated GIF. But, again, **I'm stubborn**. I like my Markdown to be clean. I didn't want to go down a slippery slope of adding special cases for departing from pure Markdown.
47 |
48 | Now, there are two parameters that you give an image in Markdown: the file name, which I needed to tell it where the file is, and alt text, which we often leave blank (I know... accessibility). So I decided to customize the jquery function that initialized gifplayer. Instead of looking for images with a CSS class called 'gif', it would look for images with alt text set to 'gif'.
49 |
50 | Like this:
51 |
52 | ```javascript
53 |
58 | ```
59 |
60 | So, now, if we write:
61 |
62 | ```markdown
63 | 
64 | ```
65 | it triggers the `gifplayer` script!
66 |
67 | 
68 |
69 | Sorry, we didn't implement the pause/play capability on this site, so that banana is gonna keep on dancing.
70 |
--------------------------------------------------------------------------------
/_posts/articles/2017-08-19-when-to-wiki.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: What about wikis? Content management and change management
4 | excerpt: "Anne Gentle, the original wiki aficionado from the mid-2000s, discusses their relevance today."
5 | last_modified_at: Sat Aug 19 20:07:50 CDT 2017
6 | categories: articles
7 | author: anne_gentle
8 | tags: [documentation, docs, wiki, open source]
9 | image:
10 | path: /images/spacewalk-nasa2explore.jpg
11 | caption: "[NASA Johnson](https://flic.kr/p/iKTgKf)"
12 | comments: true
13 | share: true
14 | ---
15 |
16 | While I was writing _Docs Like Code_, I went back and forth in my mind, arguing with myself on whether the timing was quite right. I didn't know for certain if we had reached a tipping point as an industry, or if I was simply seeing a trend relevant only to the open-source, developer-centric world I was embedded in.
17 |
18 | And then, I heard from Gene in an email.
19 |
20 | > "Whenever I start considering retirement, again, I read one of your articles
21 | > and get inspired to keep going. Thank you for your interesting ideas and
22 | > willingness to share them."
23 |
24 | And he kept me going and asked more questions as I went, and I felt energized once again to answer his question about wikis and writing closer to the code.
25 |
26 | Gene goes on to share his background, which resonates with both software developers and technical writers who were once some other profession.
27 |
28 | > "The Docs Like Code theme resonates with me as a former software developer
29 | > and having always been embedded with developers as a tech writer. I think
30 | > it's easier for a developer-writer to buy into the concept than the
31 | > traditional tech writer can because the tools and methodology are already
32 | > familiar. Myself, I mostly converted because the critical mass behind
33 | > Markdown became too great to continue battling against it. My ideas of a
34 | > better way gave way to being open to using GitHub and
35 | > Markdown/reStructuredText, and looking for opportunities to make that
36 | > workflow better."
37 |
38 | Gene positively nails the place many of us find ourselves today. Converted or converting, migrating from one familiar toolset to another, a less familiar one, and taking the best from one workflow to another workflow to streamline the tasks at hand.
39 |
40 | We are living through change management in our content management.
41 |
42 | He goes on to ask, with double-spaces after periods, which I find endearing,
43 |
44 | > "I still have companies asking about using a wiki for documentation when
45 | > considering jettisoning their legacy documentation tools, which aren't
46 | > working. I'm able to dissuade them by saying the proliferation of content
47 | > soon becomes unmanageable, and they accept that because they assume I know
48 | > what I'm talking about and they don't when it comes to documentation. Many
49 | > of the arguments for using a wiki are the same you give in the Docs Like Code
50 | > articles; primarily, collaboration and ease of use."
51 |
52 | > "What are your thoughts on the differences between using a wiki and using
53 | > Git/Markdown, that I might be able to give them more substantive arguments?"
54 |
55 | This is a good question. I love the phrasing of this question because it does not pre-suppose a value judgment on either method.
56 |
57 | If I were in his shoes, I'd be curious and ask questions about the reasons for jettisoning -- is it because of licensing, authoring, or deliverables they can get from legacy? Or maybe there is a combination of reasons I can't come up with? That's interesting, and of course, informs your requirements list and considerations.
58 |
59 | ## Consider the workflow - sit in another environment
60 |
61 | For me, when moving towards a docs-as-code workflow, my eyes were opened when a developer told me he'd never want to leave his Terminal window to write docs. Think about the context switch from coding to opening a wiki page. Many developers do not see a need to open a browser window simply to log in and edit a page that they have to take time to find in the first place. You can avoid that context switching by placing the docs right in the code or in the same repository as the code. This context switch was a powerful push for me, even when pushing away from my familiar XML territory.
62 |
63 | ## Authentication and privacy needs
64 |
65 | Sometimes wikis are seen as internal-only documentation sites, which is a good use case because the wiki can be accessed only behind a firewall, for example. GitHub Pages from Github.com are publicly available when published, even when publishing from a private repository. (Updated July 2022: refer to [Changing the visibility of your GitHub Pages site](https://docs.github.com/en/enterprise-cloud@latest/pages/getting-started-with-github-pages/changing-the-visibility-of-your-github-pages-site) for information about managing access control for your project site by publishing the site publicly or privately on Enterprise Cloud GitHub.)
66 |
67 | You can implement an authentication workflow on a site uploaded to GitHub Pages, but you then need to have the web development resources to maintain the login requirement. You could use GitHub Enterprise Pages with GitHub Enterprise requiring a VPN connection to view pages. Security and openness decisions may preclude one solution or another.
68 |
69 | ## Who's reading? Who's writing?
70 |
71 | Does the wiki give you statistics you can use to figure out who knows more about a certain topic? GitHub can enable you to see which contributors are working on a particular part of the software project which can help with documentation needs. Wikis can do this too, a reader was quick to point out, but my sense is that those wikis are truly CMSes and not "quick editors."
72 |
73 | ## Automation, the game-changer for docs-as-code workflows
74 |
75 | Automated builds for review purposes are a huge gain with GitHub for documentation. While wikis have a simple save button per page, for some there is way to write scripts to automate translations or glossary re-use. Now, the more advanced and integrated wikis are certainly moving in this direction, and may sway you away from your static site generator towards a content management wiki. Wikis can be very box-like and rigid, while treating docs like code lets you automate more tasks than simply "render and publish HTML." These statements are not meant to provide final judgement on either platform.
76 |
77 | ## Information architecture, can you get what you want and release?
78 |
79 | Wikis are quite page-oriented, and in order to do releases, you might need to publish a page twice, using namespaces for example, if information affects two releases. With GitHub, you can backport a change from one release to another using branches and a similar pull request and review workflow.
80 |
81 | ## Reviews
82 |
83 | Wikis often have add-ons for review workflows, but when the heart of a wiki is quick editing, people will not easily switch to a review workflow within a wiki while in GitHub it's expected to let others review your changes before merging, or publishing in the case of a document.
84 |
85 | Sprawl can be a problem with both solutions, but the organized nature of code near documentation seems to keep the two in lock-step when the docs and code share systems such as version control and review workflows.
86 |
87 | ## Design and experiences
88 |
89 | When publishing an entire site using static sites, you get more flexibility in choosing web designs and navigation than many heavily-opinionated wiki frameworks. That said, if your web development resources know a particular wiki framework really well, they may create a nicer end-user experience in a wiki than in a highly-flexible web framework like Sphinx or Jekyll.
90 |
91 | Wikis may have a reputation built up over time with a lack of discipline in editing a page instead of starting a new page, and in gaining trusted information that can be found easily.
92 |
93 | ## Bringing it home
94 |
95 | Even as I wrote back to Gene to answer his questions, and even as I incorporated the answers into the _Docs Like Code_ book, I continue to be challenged with my answers and to reconsider some of them. Tools come and go, and our ability as professional writers remains and shines: provide the best critical analysis of the content management tools, and then write and manage the heck out of the content and the talent that creates and maintains it.
96 |
--------------------------------------------------------------------------------
/_posts/articles/2017-09-19-cisco-devnet-pubhub.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: DevOps-friendly Docs Publishing for APIs
4 | excerpt: "From Mandy Whaley's presentation at All Day DevOps 2017."
5 | last_modified_at: Tue Sep 29 13:36:15 CDT 2017
6 | categories: articles
7 | author: anne_gentle
8 | tags: [documentation, docs, api, rest api, standards, openapi, raml, swagger, stripe]
9 | image:
10 | path: /images/david-huang-366041.jpg
11 | caption: "[Photo by David Huang on Unsplash](https://unsplash.com/collections/964729/milky-way-galaxy?photo=R3E2kEIC-G4)"
12 | comments: true
13 | share: true
14 | ---
15 |
16 | Here at Cisco, we have a developer program called DevNet that focuses on making Cisco APIs easier to use as well as work with developers and Cisco partners in many technology areas including IoT, Collaboration, and Software Defined Networking. The Cisco DevNet team loves working with developers, network administrators, and collaborators of all kinds. Mandy Whaley is the Director of Developer Experience for DevNet. I wanted to share details about Cisco's docs-like-code solution, PubHub, to publish both internally and externally here at Cisco. So, I used her presentation and dug into the technology as well. Here's the story of how PubHub was developed for publishing content for DevNet.
17 |
18 | > APIs need great docs. Many organizations end up with a jungle of wiki pages,
19 | > Swagger docs and API consoles, and maybe just a few secret documents trapped
20 | > in chat room somewhere... Keeping docs updated and in sync with code can be a > challenge.
21 | >
22 | > We’ve been working on a project at Cisco DevNet to help solve this problem
23 | > for engineering teams across Cisco.
24 | >
25 | > The goal is to create a forward looking developer and API doc publishing
26 | > pipeline that:
27 | >
28 | > 1. Has a developer friendly editing flow.
29 | >
30 | > 2. Accepts many API spec formats (Swagger/OpenAPI, RAML, etc).
31 | >
32 | > 3. Supports long form documentation in markdown.
33 | >
34 | > 4. Is CI/CD pipeline friendly so that code and docs stay in sync.
35 | >
36 | > 5. Flexible enough to be used by a wide scope of teams and technologies.
37 | >
38 |
39 | What did the DevNet team come up with? Let's take a look.
40 |
41 | ## What site or sites do you create from a set of Git-based repositories?
42 |
43 | The site is [developer.cisco.com](https://developer.cisco.com), and content comes from multiple repository sources, with multiple source types including markdown, RAML, and OpenAPI built with YAML or JSON.
44 |
45 | There's also [learninglabs.cisco.com](https://learninglabs.cisco.com), which is also built from repositories containing markdown for content, and JSON files for navigation elements.
46 |
47 | Plus, if a team wants to host content on their own site, the PubHub system provides links to content stored in S3 or any object storage system that can be embedded on a site. The technology that enables consistent display, styling, and seamless interaction across multiple sites and repos for all these rendered HTML snippets is a JavaScript SDK, the PubHub front-end SDK.
48 |
49 | ## What are the repositories that build the deliverables?
50 |
51 | The repositories for [developer.cisco.com](https://developer.cisco.com) content are all private and hosted on an internal Enterprise GitHub installation, moved over from an internal GitLab installation originally. There are over 450 content repos stored privately and internally, meaning that you must work at Cisco and be invited to collaborate on a particular repo.
52 |
53 | Some repositories are public, such as those for the [Learning Labs](https://learninglabs.cisco.com), so they can be browsed publically and patched by anyone on GitHub. There are nearly 200 repos for the DevNet organization itself, but those are not necessarily building learning labs, and the Learning Labs system can accept repos from any organization. There are over 300 Learning Labs available today including 25 written in Japanese.
54 |
55 | ## What factors led your team to choose a development approach for docs? Why and when was it chosen?
56 |
57 | Around 2014, some members of the DevNet team, including Mandy Whaley and API evangelist Ashley Roach, saw a need to work across all of Cisco on API and developer needs. Mandy outlines the needs the development approach met quite well in her All Day DevOps talk: developer workflows for writing and editing, friendly to continuous integration and continuous deployment systems, and flexible enough to spread across all of Cisco as a centralized supporting system for API documentation.
58 |
59 | ## What type of audience are you writing for?
60 |
61 | These sites are for all of Cisco's products, which vary from IoT (Internet of Things) to collaboration such as WebEx video conference, sophisticated phone systems with Voice Over IP (VOIP), Spark for enterprise chat, to cloud services such as Meraki, and of course our business base, networking products. The audience includes network administrators and developers who automate or manage network configuration and setup. For example, you may have seen Meraki in the small business and organizations you frequent, such as coffee shops or schools, managing the wifi for both customers and staff needs. The audience and their use cases vary and our APIs cover many use cases.
62 |
63 | ## How active is your review queue?
64 |
65 | Because the system is meant for individual teams to review their own content, the centralized team does not have to review each content change. That said, the DevNet team has tech writers help with content updates, and provides a service for on-boarding new teams who want to use PubHub.
66 |
67 | ## Do you have automation? If so, what type or tooling, and where is the automation in the workflow?
68 |
69 | Yes, absolutely as that's one of the drivers for the system, is to enable automation and integration into existing CI/CD workflows to keep in sync with code changes. The PubHub system uses Apache Kafka to manage notifications on updates for each repo and then publish them as static files. The automation for publishing is triggered when the team makes a "release" of the repository, indicating that the content is ready for public consumption.
70 |
--------------------------------------------------------------------------------
/_posts/articles/2018-01-06-video-presentations-docs-like-code.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Video Presentations about Docs Like Code
4 | excerpt: "In the last three years of Write the Docs conferences, you can learn from others experiences using docs like code techniques."
5 | last_modified_at: Sat Jan 6 10:29:44 CST 2018
6 | categories: articles
7 | author: anne_gentle
8 | tags: [writethedocs, video, conferences, GitHub, git, collaboration, transformation]
9 | image:
10 | path: /images/wtd-eur-2017.jpg
11 | caption: "[Flickr writethedocs](https://flic.kr/p/LqxXHE)"
12 | comments: false
13 | share: true
14 | youtubeIdJodie: Mzu-c-FoOdw
15 | youtubeIdPanel: Y2TGwUPb8R4
16 | youtubeIdMargJen: JvRd7MmAxPw
17 | youtubeIdRachel: dHdBsNxtKeI
18 | youtubeIdRiona: EnB8GtPuauw
19 | ---
20 |
21 | In the new year I want to keep learning more about docs like code, and I know that I've learned a lot from the Write the Docs community and presentations.
22 |
23 | Top of mind for me right now is that the 2018 conference in Portland Oregon is in May, 6-8 to be exact, and the [call for proposals closes next Wednesday](https://www.writethedocs.org/conf/portland/2018/cfp/), January 10, 2018. You can register and buy your ticket - or tickets for your whole team - [online now](https://www.writethedocs.org/conf/portland/2018/).
24 |
25 | Even when I don't make it to the conference in person, the video recordings are super helpful to learn from others. Here's a collection of the relevant talks over the years:
26 |
27 | ### 2017 US conference
28 |
29 | [Jodie Putrino](https://www.youtube.com/watch?v=Mzu-c-FoOdw) presented “Treating documentation like code: a practical account” to share her experiences at F5 Networks.
30 | {% include youtube.html id=page.youtubeIdJodie %}
31 |
32 | ### 2016 US conference
33 |
34 | [A panel](https://www.youtube.com/watch?v=Y2TGwUPb8R4) of folks from Rackspace, Microsoft, Balsamiq, and Twitter talked about how they are adopting these practices.
35 | {% include youtube.html id=page.youtubeIdPanel %}
36 |
37 | ### 2016 EU conference
38 |
39 | [Margaret Eker and Jennifer Roundeau](https://www.youtube.com/watch?v=JvRd7MmAxPw) talked about the "Missing Manual" for docs like code.
40 | {% include youtube.html id=page.youtubeIdMargJen %}
41 | [Rachel Whitten](https://www.youtube.com/watch?v=dHdBsNxtKeI) talked about docs-as-code in practice.
42 | {% include youtube.html id=page.youtubeIdRachel %}
43 |
44 | ### 2015 US conference
45 |
46 | [Riona MacNamara](https://www.youtube.com/watch?v=EnB8GtPuauw) spoke about how adopting docs like code has completely transformed how Google does documentation.
47 | {% include youtube.html id=page.youtubeIdRiona %}
48 |
49 | All this to say, the docs-like-code concepts are widely practiced in our industry, and each conference provides more inspiring examples. Perhaps you can watch these presentations and be inspired to integrate code and doc techniques.
50 |
--------------------------------------------------------------------------------
/_posts/articles/2018-04-16-practical-advice.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: "Practical Advice On Publishing A Technical Book using GitHub and GitBook"
4 | excerpt: What does it take to publish a technical book using GitHub? Let's dig into tools, processes, revenue, and costs.
5 | last_modified_at: Fri Apr 20 21:01:44 CDT 2018
6 | categories: articles
7 | author: anne_gentle
8 | tags: [book, publishing, GitHub, git, gitbook, lulu, self-publishing, collaboration, design, layout]
9 | image:
10 | path: /images/designbyandren-lightbulb.jpg
11 | caption: "[Flickr designbyandren](https://flic.kr/p/cMiQAJ)"
12 | comments: false
13 | share: true
14 | ---
15 |
16 | What does it take to put together a web site, a book, an ebook, all for sale online? Let's look at costs for tools and services that make it happen.
17 |
18 | Let’s look at what you need for a book idea. You need an audience, an editor, a way to reach that audience, and a “pitch” for the book idea itself. You may chose self-publishing over pitching the book idea to a technical book publisher.
19 |
20 | In my recent experience with *Docs Like Code*, the process led me to choosing to produce the site, epub, and printed book all using tools I had prior experiences with. Let's take a look.
21 |
22 | ## Reaching out to current contacts
23 |
24 | First, I reached out to Andy Oram, a senior editor at O'Reilly who knows me from a couple of open source projects, asking if he thought O'Reilly would want a book proposal. He said he'd be happy to read what I had, but didn't see the initial concept fitting into their current catalog. Really great of him to offer to help out, and I simply thanked him and kept going with my idea.
25 |
26 | In parallel, I reached out to the publisher for my first book, *Conversation and Community*. His name is Richard Hamilton and he runs [XML Press](https://xmlpress.com). When he looked at his schedule,
27 | he couldn't read through at the draft copy for about 3 months. Well, I thought that the timing was essential, and I didn't want to wait that long, knowing both the market and my own availability.
28 |
29 | ## Finding like-minded collaborators
30 |
31 | I also reached out to Diane Fleming, now Skwish, who had been teaching writers how to use Git and GitHub for docs over the same time as I had been. Over lunch, we realized we both wanted this book to be available for the next time we teach developers and writers how to write and review docs on GitHub. Diane is a talented writer and also a super editor. The best writers re-write a lot, and I knew Diane would provide an eagle eye for both technical accuracy as well as great writing.
32 |
33 | Then, I realized I have a great friend in Kelly Holcomb, who edited my first book and I could talk her into editing this one, wahoo! Kelly also had experience in using GitHub for editing, so her contributions were super important for the final copy.
34 |
35 | One area I did skip on for this book was a professional-level index, which Kelly was able to do for a great job on for *Conversation and Community*. I haven’t missed the index yet, and for a smaller book it seems like an index could look like padding.
36 |
37 | ## Design materials and promotional work
38 |
39 | I also was able to do all the design imagery myself, including the book cover. This part was thanks to [Canva](https://www.canva.com/) and some nice templates that service has online. I used the free trial for Canva to make the book cover and stickers and t-shirt design. (Updated to add: the t-shirt store cost $300/year which was not profitable so I stopped offering t-shirts in 2019.)
40 |
41 | That said, I was not willing to take on the layout work myself. So, when [Gitbook](https://www.gitbook.com/) did not output a PDF that I considered "print-ready", I went to [Upwork](https://www.upwork.com). I wanted more fine-tuned layout and design for the print copy, including proper page breaks and nice tables. So I hired a designer with access to Indesign who could take the epub and turn it into a print book.
42 |
43 | ## Pull it together!
44 |
45 | And so, with all those bits of input from others, it created a quest to be a product manager for my own information product! I went that route, and for me, [Lulu](https://www.lulu.com/) was a tool I was already familiar with because we had done publishing with it for OpenStack.
46 |
47 | There are other publishing options - IngramSpark, Amazon, LeanPub, and I’m sure others. I did sign up and get approved for an account with IngramSpark, which is the print-on-demand service that XML Press uses.
48 |
49 | To me, after reading the [origin story for Lulu](https://www.lulu.com/about/our-story), I feel that Lulu is a bit more "open source" based than say, Amazon. I don't know much about LeanPub. Since I was using Markdown on a private GitHub repo anyway, it doesn't seem to offer more than Lulu for the marketplace reach. I'm not trying to make money at it; only trying to increase reach.
50 |
51 | Finding a freelance editor would be a huge leg up on the writing process itself, especially if you also need a bit of developmental editing for the book idea.
52 |
53 | For the print layout, I had a great experience with UpWork and was also able to hire the same person to work on the second edition. I learned from using a freelance site that I can find and manage freelancers for projects that I want to get done but don’t want to carve out time or buy tools for myself to finish them.
54 |
55 | ## List of tools and services
56 |
57 | | Tools | Site |
58 | |-----------|------------------------------------------------------------------|
59 | | Calibre | [https://www.calibre-ebook.com/](https://www.calibre-ebook.com/) |
60 | | Canva | [https://www.canva.com/](https://www.canva.com/) |
61 | | GitBook | [https://www.gitbook.com/](https://www.gitbook.com/) |
62 | | GitHub | [https://www.github.com/](https://www.github.com/) |
63 | | Lulu | [https://www.lulu.com/](https://www.lulu.com/) |
64 | | Mailchimp | [https://www.mailchimp.com/](https://www.mailchimp.com/) |
65 | | Printful | [https://www.printful.com/](https://www.printful.com/) |
66 | | Shopify | [https://www.shopify.com/](https://www.shopify.com/) |
67 | | Upwork | [https://www.upwork.com/](https://www.upwork.com/) |
68 |
69 | ## Ongoing and startup costs
70 |
71 | Here’s a high-level overview of the startup costs for creating a book like *Docs Like Code*.
72 | I calculated the starting costs for six or five months, when I needed a monthly subscription for a service.
73 |
74 | | Service | Costs |
75 | |----------------------------|---------------------|
76 | | Domain name registration | $20/year |
77 | | GitHub for Private repo | $42 ($7/month x 6) |
78 | | GitBooks for Private repo | $35 ($7/month x 5) |
79 | | GitHub Pages for website | $0 |
80 | | Canva for Work (cover art) | $0 trial |
81 | | Lulu (printed copies) | $82 for 15 printed |
82 | | Editing/Writing | $250 celebration |
83 | | Design for PDF layout | $250 |
84 | | MailChimp (ongoing) | $42 ($7/month x 6) |
85 | | Twitter ads | $25 for ads |
86 | | Stickers | $82 for 200 |
87 | | **Total startup costs** | **$828** |
88 |
89 | Based on Lulu reporting, I see the book brought in about $2500 in 12 months of the first and second edition being available. So while the startup costs are not nothing, I did see a profit from the effort. Really, though, the effort is paid off in helping others see the benefits I've observed and in sharing and learning. Let me know what you think about this method, the tools, and of course, the resulting book, *Docs Like Code*.
90 |
--------------------------------------------------------------------------------
/_posts/articles/2018-11-15-moving-agile-open-source-docs.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: "Redis - Moving to Agile, Open Source Docs"
4 | excerpt: Why Redis is joining the revolution of open source docs.
5 | last_modified_at: Thu Nov 15 22:01:44 CDT 2018
6 | categories: articles
7 | author: ben_mansheim
8 | tags:
9 | image:
10 | path: /images/redislabs/writer_in_the_middle.jpg
11 | caption: "[Courtesy Redis Blog](https://redis.com/blog/moving-agile-open-source-docs/)"
12 | comments: false
13 | share: true
14 | ---
15 | "Open source” carries a lot of meaning in the world of technology these days. Twenty years after the term was coined, open source projects harness the power of voluntary contributors to produce and support software that is quickly growing in its impact on every industry, in every location.
16 |
17 | At its core, open source merely means that a product ships with the code that was written to produce it. The ability to access this source code creates the potential for modification and repackaging that is governed by a variety of open source licenses. It also can allow people to contribute modifications back into the core project, so that everyone benefits from those modifications.
18 |
19 | As a software company built on the principles of providing superior service while also promoting the common good, we at [Redis](https://www.redis.com) decided to bring this open source agility to a less known, but highly impactful, area -- Product Documentation.
20 |
21 | We feel that joining open source with documentation is a great combination to provide our community with:
22 |
23 | * Information that is always current
24 | * A platform for collaborative contributions from others
25 | * Highly accurate details from a dedicated community
26 |
27 | To find out how you can contribute, check out our [contribution guide](https://docs.redis.com/latest/contribution-guide/).
28 |
29 | So why did we decide to take the open source route for documentation? To understand, let’s look at the evolution of technical documentation over the last few years.
30 |
31 | ## The Last Revolution - Closing the delivery gap
32 |
33 | It used to be that documentation was a stumbling block in software development deadlines because all supported explanations surrounding the use of the software had to be delivered at the same time as the software itself. Worse, it started off as printed material (think user guides!) that were not only slow to create but even harder to update.
34 |
35 | Fortunately, as technology progressed, we were able to update user documentation in digital formats, saving on the “heavy” costs of printing and shipping. Writers could provide corrections, rewrites and updates to customers just as easily as engineers could provide patches to software.
36 |
37 | This revolution closed the delivery gap to enable companies to improve documentation during the lifetime of the product. However, there were still significant bottlenecks preventing customers from getting the best information possible.
38 |
39 | ## Another Pain Point - I am a bottleneck
40 |
41 | So, what traditionally stood in the way of getting the most accurate product information out there? The WRITER!
42 |
43 | The technical writer is the sole content contributor who stands between technical experts and customers to provide technical information that customers can use reliably and efficiently. Granted, a product without technical writers may be difficult to use, but the time and effort that it takes for a writer to understand the information well enough to write is another bottleneck.
44 |
45 | Since technical writers are frequently the only ones with access to the source files for published documentation, any correction, rewrite or update contribution has to be entered and produced into its final format by them.
46 |
47 | ## The Next Revolution - Open source docs
48 |
49 | Open source gives everyone some level of access to the source files of the product. In the case of Redis docs, that means putting the source files of our documentation in a publicly accessible repository. Anyone can view those source files and edit a copy of the files to suggest contributions, changing the writer from the content owner to the content editor and curator. You can even get there straight from the “Edit on GitHub” link on each page in our docs.
50 |
51 | This simple change in methodology opens ownership of the documentation’s accuracy to the technical experts within Redis, as well as our customers and partners who are experiencing the product’s behavior every single day. Add that to the immediate delivery of approved contributions at [docs.redis.com](https://docs.redis.com), and we have dramatically improved our ability to provide up-to-the-moment and accurate documentation for our customers.
52 |
53 | ## We’re Not Stopping Now
54 |
55 | Of course, this is only the beginning of the improvements we are bringing to our product documentation, but we feel that this move will be the basis for a lot of good stuff to come.
56 |
57 | So if you want to be a part of helping everyone get the most out of the fastest database in the world, don’t hesitate -- Contribute!
58 |
--------------------------------------------------------------------------------
/_posts/articles/2019-04-20-github-pages-python-sphinx.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Yes You Can Use GitHub Pages with Python Sphinx
4 | excerpt: "Learn some pro tips to build Python Sphinx developer docs to both GitHub Pages and your local system."
5 | last_modified_at: Sat Apr 20 09:43:00 CDT 2019
6 | categories: articles
7 | tags: [github, git, python, sphinx, documentation, developer, docs]
8 | image:
9 | path: /images/keyboard-mleung311.jpg
10 | caption: "[Flickr mleung311](https://flic.kr/p/fqJJbW)"
11 | comments: false
12 | share: true
13 | ---
14 |
15 | If you prefer to write in ReStructured Text instead of Markdown for your technical documentation, you're in good company. There are quite a few benefits to using Sphinx, Python, RST, and Sphinx extensions because these tools are custom-built with developer documentation in mind.
16 |
17 | Another great offering is GitHub Pages, with automatic publishing when a known branch, such as the `master` or `gh-pages` branch is updated.
18 |
19 | So, how about the best of both? Let's dive into the key configurations that enable you to publish Python Sphinx pages to GitHub Pages.
20 |
21 | ## Naming the GitHub repository can affect the resulting URL
22 |
23 | If you want a URL like `.github.io` or `.github.io`, name the repo `.github.io` or `.github.io`. Then, by default, GitHub Pages publishes to the URL matching the repo name.
24 |
25 | ## Enable GitHub Pages for the GitHub repository
26 |
27 | > Note: You must have admin privileges on the repository to see the **Settings** tab.
28 |
29 | 1. Go to the repository on the GitHub website and make sure you are logged in.
30 | 1. Add a `/docs` directory to the `master` branch. Otherwise you do not get the **master branch /docs folder** for the Source option in the drop-down list.
31 | 1. Click the **Settings** tab. You first go to the Options section.
32 | 1. Scroll down to the **GitHub Pages** section and choose the drop-down list under Source.
33 | > Note: Your choices will differ based on whether you're in a User repo or an Org repo. [Read all about the differences in the GitHub docs](https://help.github.com/en/articles/user-organization-and-project-pages).
34 |
35 | 1. To keep source and output HTML separate, choose **master branch /docs folder** for Source.
36 |
37 | Next, you set up the `.nojekyll` file to indicate you aren't using Jekyll as your static site generator in this repository.
38 |
39 | ## Add a .nojekyll file in the /docs directory
40 |
41 | When GitHub sees a `.nojekyll` file, it serves the root `index.html` file. Read more in the [original blog post about this feature](https://github.blog/2009-12-29-bypassing-jekyll-on-github-pages/).
42 |
43 | > Note: I'd recommend using the `/docs` directory on the `master` branch, so that you are sure to keep source and output HTML separate. You could also use a `_build` directory in the root of your repo as the served HTML.
44 |
45 | 1. Create a new branch locally, named `docs-config` in this example, based on `master`:
46 | ```
47 | $ git checkout -b docs-config
48 | ```
49 | 1. Create an empty dot file, named `.nojekyll` within the `/docs` folder of your repo. A dot file has a period prefix and may not be visible in all text editors or your Finder windows, so be aware and don't panic if you can't "see" it later.
50 | 1. Use the add command to make sure Git starts tracking the file:
51 | ```
52 | $ git add docs/.nojekyll
53 | ```
54 | 1. Commit the change with the `-a` option to add new files to the commit, and the `-m` option for a message:
55 | ```
56 | $ git commit -a -m "Adds a .nojekyll file for docs builds"
57 | ```
58 | 1. Push the change to the remote, in this case named "origin", so you can compare the change to `master`.
59 | ```
60 | $ git push origin docs-config
61 | ```
62 | 1. On the GitHub website, go to your repository and create a Pull Request.
63 | 1. Merge the Pull Request to add the `.nojekyll` file to the `master` branch.
64 |
65 | ## Create a "docsource" or "docsrc" folder for the source files
66 |
67 | Now, in the root of your repository, you can create a source folder for your doc builds:
68 |
69 | - If you're working with code and docs in the same repo, you can name the folder `docsource` or `docsrc`.
70 | - If your repo is for only documentation, you can name the folder `source`.
71 |
72 | Next, make sure that your `conf.py` file has been set up with these source and destination directories. The Sphinx documentation has a good [Configuration section](https://www.sphinx-doc.org/en/master/usage/configuration.html).
73 |
74 | ## Make sure you can still build Sphinx locally for reviews
75 |
76 | Here's another pro tip I found while browsing [Issues in the Sphinx repository itself](https://github.com/sphinx-doc/sphinx/issues/3382#issuecomment-470772316). Since you want to keep the source and output separate, but still be able to both publish on GitHub Pages and preview builds locally, you can add an option to your `Makefile` to do both.
77 |
78 | ```
79 | github:
80 | @make html
81 | @cp -a _build/html/. ../docs
82 | ```
83 |
84 | Now you can run `make github` from the doc source directory to generate a local preview and move the docs where GitHub wants to serve them from.
85 |
86 | > Note: Realize that there's a `conf.py` setting for both where the `make` command is run and where files are built to. Read up in the [Configuration section](https://www.sphinx-doc.org/en/master/usage/configuration.html) of the Sphinx docs for all the details.
87 |
88 | ## Pull it all together
89 |
90 | I've been working on a talk titled, "Make an Instant Web Site with Webhooks" for DevNet Create. In it, I show how to publish and host on GitHub Pages, which is built to use Jekyll by default, using Python Sphinx instead. I've got a GitHub repository set up at [annegentle/create-demo](https://github.com/annegentle/create-demo) as a demonstration. I'll post the slides when it's done. In the meantime, we'd love to see you next week! Visit the [DevNet Create site](https://developer.cisco.com/devnetcreate/2019) for more information.
91 |
--------------------------------------------------------------------------------
/_posts/articles/2021-01-09-survey-results-docs-like-code.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: Survey results for learning and teaching docs-like-code techniques
4 | excerpt: "Review the results of a mid-2020 survey about learning and teaching team mates and yourself how to work with docs like code, Git, and GitHub for technical documentation."
5 | last_modified_at: Sat Jan 9 13:39:05 CST 2021
6 | categories: articles
7 | author: anne_gentle
8 | tags: [github, git, learning, teaching, documentation, developer, docs-like-code, onboarding]
9 | image:
10 | path: /images/othree-github-stickers.jpg
11 | caption: "[Flickr othree](https://flic.kr/p/bGFTuT)"
12 | comments: false
13 | share: true
14 | ---
15 |
16 | I asked three questions in a survey emailed to my mailing list and got more than 30 responses. Thanks to everyone who took the time to share their stories and respond. Here are the three questions:
17 |
18 | * Question 1: When you talk to your leaders about docs-as-code, can they describe the benefits as well as the difficulties?
19 |
20 | * Question 2: How do you onboard people who are new to your docs tools and processes?
21 |
22 | * Question 3: What tips or discussions (from any source) was most helpful to you when learning docs-as-code techniques?
23 |
24 | Docs-as-code processes are still new in the field and it seems many of the responses are split, with no overwhelming patterns in any single area. Let's look into the data and charts for the first two questions.
25 |
26 | ## Question 1: When you talk to your leaders about docs-as-code, can they describe the benefits as well as the difficulties?
27 |
28 | 
29 |
30 | **Legend**
31 |
32 | **26.8**% Yes, my leader started our processes and makes it possible for us to use our current tools and processes.
33 |
34 | **19.5**% Yes, my leader can provide their leadership complete justification for our choices.
35 |
36 | **19.5**% No, I work in an environment where my tool selection does not need justification from a management chain.
37 |
38 | **19.5**% No, my leadership chain doesn't really know what I do or why I use certain tools.
39 |
40 | **14.6**% It depends on which leader I'm talking to.
41 |
42 | In a way, nearly all the responses could be viewed as "leadership either supports the selection does not get in the way of tool selection." For about two-thirds of the responses, either leadership can justify, started the processes, or isn't a deciding factor.
43 |
44 | Looking at the number of lone writer responses in the next question, this indicator makes sense as five of thirty-five respondents noted that they were the only writer in the organization, which would make up 14% of all responses. Let's take a look.
45 |
46 | ## Question 2: How do you onboard people who are new to your docs tools and processes?
47 |
48 | 
49 |
50 | **Legend**
51 |
52 | **14.6**% Internal write-up only
53 |
54 | **20.2**% Meeting only
55 |
56 | **1.1**% Pre-built environment only
57 |
58 | **5.6**% Lone writer
59 |
60 | **23.6**% Internal write up and meeting
61 |
62 | **34.8**% Internal write-up, meeting, and pre-built environment
63 |
64 | My favorite answer to this question was one I hadn't considered, where the person is a lone writer, but works with the devs to get the docs working in the source code repo. It's along the lines of "It's complicated."
65 |
66 | > "Nothing, I'm the only person working on docs. The developers required documentation to work with our first attempt because we tried to use tool stacks that crossed different departments between authoring and publishing. Extensive process documentation was required in order for devs to figure out how the docs were to fit together despite the fact that we used markdown and the docs were in the source code repo. We switched tracks when the pain of the "throw it over the wall approach got too big. At which point we started a whole new docs site on a JAM stack platform. But still... Baby-steps."
67 |
68 | ## Question 3: What tips or discussions (from any source) was most helpful to you when learning docs-as-code techniques?
69 |
70 | For question three, I wanted to share any nuggets found in the answers here on the Docs Like Code site, since the goal for this site is to learn these techniques together and share our stories. Here are some highlights.
71 |
72 | > "Write the Docs community. Hustling the hard streets of Google search results. Your book!"
73 |
74 | > "Trail and Error - lots of searching. Reliance on internal Dev Ops"
75 |
76 | > "Familiarity with Git was key - I had already used Git on a smaller scale for personal projects and that helped me become comfortable when I had to collaborate with other writers/devs. And even then I still had to constantly refer to Git-related resources online to make sure I wasn't messing anything up."
77 |
78 | > "Your Docs as Code book was helpful, for certain. Recently, Frank Miller and Rik Page had two broad discussions about using GIT in lieu of a cCMS (see Git Happens [part 1](https://vimeo.com/431452486) and [part 2](https://vimeo.com/449217243)). The main fear I have is different technical aptitudes and willingness to learn of the writers with whom I work. Some will adapt to GIT easily, while others will struggle mightily."
79 |
80 | > "It's still writing. If you don't have documentation as business goal with the processes to produce it - e.g. customer expectation to receive docs with a new release so docs as part of Definition of Done - then docs in code won't help.
81 | Also, engineers won't write unless they're told to. You need a push down from leadership. Don't try to grassroots it."
82 |
83 | > "show people that the browser<>Git edit flow is ok, but IDE<>Git<>Browser is far better... show people how much support a good IDE plugin can give (asciidoctor plugin for IntelliJ has so many great features)"
84 |
85 | > "We use GitHub already so the argument to switch was easy. When I told the dev teams they didn’t need to use different tools, they were sold. I did, however, make a big mistake early on in the transition. I failed to point out that any non-code related docs (team/training content) should be separate from the code-related docs (readme.md) because not everyone had GitHub work accounts. As a result, non-dev employees couldn’t access anything. That’s not a result of the technique but bad planning on my part. Other than that, it’s been a lean and efficient methodology for how we document our dev projects."
86 |
87 | > "Putting the documentation in source code where the developers can get to it. Attempting to docs-as-code with 2 stacks requiring a conversion from markdown to HTML fragments ingested by a little known CMS (MODX) as the published content was a poorly thought out approach. I tried to warn the guys about this - especially since we didn't have a way to duplicate the nested CMS structure required on the publishing end... But we lived with it for a year before it became painfully obvious that another solution was required."
88 |
89 |
90 | > "I studied your shared extent extensively when I was starting out. Other courses include Peter Gruenbaum's set on Udemy, Tom Johnson's blog, and chats in the Write the Docs Slack channel."
91 |
92 | > "Sarah Parson’s Write the Docs presentation on static site generators and Tom Johnson’s explanation of his Documentation Jekyll theme."
93 |
94 | This is not a section simply to point to the [Docs Like Code book](https://docslikecode.com/book/) as a resource, rather, it's to show that having additional resources including people you can ask questions is super valuable when learning how to treat docs like code. I'm grateful to the Write the Docs community and people who are also writing their experiences here and on other sites so we can all learn together. Thanks to everyone who shared their experiences and hard-earned wisdom!
95 |
--------------------------------------------------------------------------------
/_posts/articles/2023-10-01-protecting-codeowners-file.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: "Protecting a Branch so Only the Docs Team Merges and Publishes"
4 | excerpt: When you want to allow the docs team members to maintain docs within a code repo, while giving the docs team autonomy over their own reviews and merges, you can use a protected branch and a CODEOWNERS file.
5 | last_modified_at: Sun Oct 1 11:05:31 CDT 2023
6 | categories: articles
7 | author: annegentle
8 | tags: [cicd, reviews, docs, settings, GitHub]
9 | image:
10 | path: images/guarded-lightbulb-rob-sinclair.jpg
11 | caption: "[Lightbulb in a protective cage, Attribution: Rob Sinclair.)"
12 | comments: false
13 | share: true
14 | ---
15 |
16 | # Designate a review team for a directory or collection of files
17 |
18 | With GitHub, you have the capability to designate a review team. This setup works well for a scenario where a `docs` directory should be completely controlled by the documentation team. With a [CODEOWNERS](https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners) file configuration, the documentation team does not need to ask for other reviewers for small changes like a typo or grammar fix. When a team member's account name or team name is in the `CODEOWNERS` file, you can protect the branch or folder from merges from any account not found in the file.
19 |
20 | A `CODEOWNERS` file can be stored in a directory, or in the `.github` folder, where many configuration files are stored by default. You can protect a branch or multiple branches based on a naming pattern match using [protected branches](https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches).
21 |
22 | A straightforward example involves protecting the `docs` folder in the `main` branch, where the `main` branch is the branch used to publish the documentation. In this example, the org name is `justwriteclick` and the username is `annegentle`. You would name the file `CODEOWNERS` and store it in a `docs` directory.
23 |
24 | Example `CODEOWNERS` file:
25 | ```
26 | @justwriteclick/annegentle
27 | ```
28 |
29 | You can also use an email address instead of an account name. See an example with lots of use cases in the GitHub documentation [Example of a CODEOWNER file](https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners#example-of-a-codeowners-file).
30 |
31 | Then, make sure that the branch is protected using the repository's **Setting** > **Branches** > **Branch protection rules** > **Add protection rule** button. Enter `main` for the **Branch name pattern** and then select **Require a pull request before merging**. The settings expand so you can also choose **Require review from Code Owners**. Once you have the settings, click the **Create** button at the bottom of the page. More details are in the [GitHub Docs](https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches).
32 |
33 |
34 |
35 | To see an example of this setup, look at the Microsoft 365 community documentation repository at [https://github.com/MicrosoftDocs/microsoft-365-community/](https://github.com/MicrosoftDocs/microsoft-365-community/). The `CODEOWNERS` file contains a team name, `@microsoftdocs/officedocs-admin`, and those team members can review and merge the list of documents in the `CODEOWNERS` file. The documents contain configuration information as well as the `CODEOWNERS` file itself.
36 |
37 | Example `CODEOWNERS` file from MicrosoftDocs:
38 | ```
39 | docfx.json @microsoftdocs/officedocs-admin
40 | .openpublishing.build.ps1 @microsoftdocs/officedocs-admin
41 | .openpublishing.publish.config.json @microsoftdocs/officedocs-admin
42 | CODEOWNERS @microsoftdocs/officedocs-admin
43 | .acrolinx-config.edn @microsoftdocs/officedocs-admin
44 | ```
45 |
46 | Think about ways you can protect your branches with a known group of reviewers. This workflow builds trust and safety while also ensuring you can move fast when needed in a larger team and repository setting.
47 |
--------------------------------------------------------------------------------
/about/index.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: post
3 | title: About Docs Like Code
4 | excerpt: "Brought to you by the author of the Just Write Click blog, Anne Gentle."
5 | last_modified_at: Wed Nov 23 19:25:15 CST 2016
6 | image:
7 | path: /images/robot-in-grass.jpg
8 | caption: "[Flickr, hddod By NC ND 2.0](https://www.flickr.com/photos/hddod/7229001564/)"
9 | ---
10 |
11 | Looking for a way to invigorate your documentation team and grow that team to include developers, designers, and writers of all backgrounds? Plus, how about inviting some robots into the mix for good measure? Let's treat docs like code.
12 |
13 | ## Treating docs like code is:
14 |
15 | * Collaborating with contributors efficiently by keeping docs close to code or in the same system as code, with a source file concept and an output for deliverables.
16 | * Building documentation as repeatably and consistently as possible across multiple platforms. While typically done with open source tools, the main driver is not open source but open, repeatable, consistent collaboration.
17 | * Applying software development tools and techniques to documentation about software, application programming interfaces (APIs), or other technical topics.
18 | * Learning enough about web development to be dangerous and create beautiful, modern docs.
19 | * Valuing technical accuracy and consistency.
20 | * Trusting team members to value documentation, respect end-users needs, and advocate for the best deliverables for consumers of the documentation.
21 | * Automating and integrating documentation builds so you and your teams can focus on content.
22 |
23 | ## Choose your docs-as-code adventure
24 |
25 | In a choose your own adventure series, you first pick the look for the site, then discover the developer language that pairs with the static site generator and then the CICD integration follows. We walk through setting up the development environment, and then show how to automate using docs CICD pipelines including Read the Docs, GitHub Pages, and Netlify.
26 |
27 | You may also test the docs by with Continuous Integration (CI) systems like TravisCI or CircleCI. If you need to work within existing CI systems, choose a tool that other teams use within your organization, and your choice of output is not limited by the CI system. In other words, the test frameworks in TravisCI or CircleCI do not dictate your deployment system.
28 |
29 | In the [Learn section of the site](https://docslikecode.com/learn/), there are three example documentation sites you can write and build using an SSG with CICD.
30 |
31 | Choose your adventure and start one of these sites - and learn how to do docs as code along the journey.
32 |
33 | ## Ready to learn more?
34 |
--------------------------------------------------------------------------------
/articles/index.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: categories
3 | title: Articles
4 | excerpt: "Read articles to learn more about the docs like code vision and how to try it for yourself."
5 | search: false
6 | entries_layout: grid
7 | ---
8 |
--------------------------------------------------------------------------------
/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/favicon.ico
--------------------------------------------------------------------------------
/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/favicon.png
--------------------------------------------------------------------------------
/feed.xml:
--------------------------------------------------------------------------------
1 | ---
2 | sitemap: false
3 | ---
4 |
5 |
6 |
7 | {{ site.title | strip_html }}
8 | Jekyll
9 |
10 |
11 | {{ site.time | date_to_xmlschema }}
12 | {{ site.url }}/
13 |
14 | {{ site.owner.name }}
15 | {{ site.url }}/
16 | {% if site.owner.email %}{{ site.owner.email }}{% endif %}
17 |
18 | {% for post in site.posts limit:20 %}
19 | {% if post.author %}
20 | {% assign author = site.data.authors[post.author] %}
21 | {% else %}
22 | {% assign author = site.owner %}
23 | {% endif %}
24 |
25 |
26 |
27 | {{ site.url }}{{ post.id }}
28 | {% if post.modified %}{{ post.modified | to_xmlschema }}T00:00:00-00:00
29 | {{ post.date | date_to_xmlschema }}
30 | {% else %}{{ post.date | date_to_xmlschema }}
31 | {{ post.date | date_to_xmlschema }}{% endif %}
32 |
33 | {{ author.name }}
34 | {{ site.url }}
35 | {% if author.email %}{{ author.email }}{% endif %}
36 |
37 |
38 | {{ post.content | xml_escape }}
39 | {% include feed-footer.html %}
40 |
41 |
42 | {% endfor %}
43 |
44 |
--------------------------------------------------------------------------------
/images/3953273590_704e3899d5_m.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/3953273590_704e3899d5_m.jpg
--------------------------------------------------------------------------------
/images/DapperDox_API_reference.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/DapperDox_API_reference.png
--------------------------------------------------------------------------------
/images/adam_locke.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/adam_locke.jpg
--------------------------------------------------------------------------------
/images/alittlecreation-paintchips.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/alittlecreation-paintchips.jpg
--------------------------------------------------------------------------------
/images/anne_gentle.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/anne_gentle.jpg
--------------------------------------------------------------------------------
/images/api-documentation.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/api-documentation.png
--------------------------------------------------------------------------------
/images/backstage.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/backstage.jpg
--------------------------------------------------------------------------------
/images/balsamiq/desktop-toc-getting-started.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/balsamiq/desktop-toc-getting-started.png
--------------------------------------------------------------------------------
/images/balsamiq/desktop-toc-old.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/balsamiq/desktop-toc-old.png
--------------------------------------------------------------------------------
/images/balsamiq/desktop-toc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/balsamiq/desktop-toc.png
--------------------------------------------------------------------------------
/images/balsamiq/dropbox-help-toc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/balsamiq/dropbox-help-toc.png
--------------------------------------------------------------------------------
/images/balsamiq/dropbox-help.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/balsamiq/dropbox-help.png
--------------------------------------------------------------------------------
/images/balsamiq/select-product.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/balsamiq/select-product.png
--------------------------------------------------------------------------------
/images/balsamiq/structure2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/balsamiq/structure2.png
--------------------------------------------------------------------------------
/images/balsamiq/structure3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/balsamiq/structure3.png
--------------------------------------------------------------------------------
/images/balsamiq/structure5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/balsamiq/structure5.png
--------------------------------------------------------------------------------
/images/balsamiq/structure6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/balsamiq/structure6.png
--------------------------------------------------------------------------------
/images/ben-mansheim.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/ben-mansheim.jpg
--------------------------------------------------------------------------------
/images/bio-photo-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/bio-photo-2.jpg
--------------------------------------------------------------------------------
/images/bio-photo-alt.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/bio-photo-alt.jpg
--------------------------------------------------------------------------------
/images/bio-photo.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/bio-photo.jpg
--------------------------------------------------------------------------------
/images/branch-protection-rule.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/branch-protection-rule.png
--------------------------------------------------------------------------------
/images/cloudify/docs-as-code-blog-banner.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/cloudify/docs-as-code-blog-banner.png
--------------------------------------------------------------------------------
/images/cloudify/hugo-docdock.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/cloudify/hugo-docdock.png
--------------------------------------------------------------------------------
/images/cloudify/new-cloudify-docs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/cloudify/new-cloudify-docs.png
--------------------------------------------------------------------------------
/images/cloudify/old-cloudify-docs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/cloudify/old-cloudify-docs.png
--------------------------------------------------------------------------------
/images/crocieristi-pirate-ship.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/crocieristi-pirate-ship.jpg
--------------------------------------------------------------------------------
/images/david-huang-366041.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/david-huang-366041.jpg
--------------------------------------------------------------------------------
/images/democratize-your-content.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/democratize-your-content.png
--------------------------------------------------------------------------------
/images/designbyandren-lightbulb.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/designbyandren-lightbulb.jpg
--------------------------------------------------------------------------------
/images/docs-like-code-book.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/docs-like-code-book.jpg
--------------------------------------------------------------------------------
/images/docs-like-code-womens-cut-tshirt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/docs-like-code-womens-cut-tshirt.png
--------------------------------------------------------------------------------
/images/documentarians-wtd-prague2016.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/documentarians-wtd-prague2016.jpg
--------------------------------------------------------------------------------
/images/ehktang-yellow-reflection.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/ehktang-yellow-reflection.jpg
--------------------------------------------------------------------------------
/images/gary-niemen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/gary-niemen.png
--------------------------------------------------------------------------------
/images/git-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/git-logo.png
--------------------------------------------------------------------------------
/images/github-clone.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/github-clone.png
--------------------------------------------------------------------------------
/images/github-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/github-logo.png
--------------------------------------------------------------------------------
/images/gitlab-clone.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/gitlab-clone.png
--------------------------------------------------------------------------------
/images/guarded-lightbulb-rob-sinclair.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/guarded-lightbulb-rob-sinclair.jpg
--------------------------------------------------------------------------------
/images/jennifer_rondeau.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/jennifer_rondeau.png
--------------------------------------------------------------------------------
/images/keyboard-mleung311.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/keyboard-mleung311.jpg
--------------------------------------------------------------------------------
/images/laurencehorten-traintracks.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/laurencehorten-traintracks.jpg
--------------------------------------------------------------------------------
/images/learn/Go-Logo_Black.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/learn/Go-Logo_Black.png
--------------------------------------------------------------------------------
/images/learn/cogfog-pebbles-400x267.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/learn/cogfog-pebbles-400x267.jpeg
--------------------------------------------------------------------------------
/images/learn/cogfog-pebbles.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/learn/cogfog-pebbles.jpg
--------------------------------------------------------------------------------
/images/learn/github-logo400x200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/learn/github-logo400x200.png
--------------------------------------------------------------------------------
/images/learn/go-logo400x200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/learn/go-logo400x200.png
--------------------------------------------------------------------------------
/images/learn/hugo-docs-page-400x335.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/learn/hugo-docs-page-400x335.png
--------------------------------------------------------------------------------
/images/learn/hugo-docs-page.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/learn/hugo-docs-page.png
--------------------------------------------------------------------------------
/images/learn/jekyll-docs-page-400x335.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/learn/jekyll-docs-page-400x335.png
--------------------------------------------------------------------------------
/images/learn/jekyll-docs-page.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/learn/jekyll-docs-page.png
--------------------------------------------------------------------------------
/images/learn/mikecogh-trains-400x300.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/learn/mikecogh-trains-400x300.jpeg
--------------------------------------------------------------------------------
/images/learn/mikecogh-trains.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/learn/mikecogh-trains.jpg
--------------------------------------------------------------------------------
/images/learn/msanseve-flowers-400x273.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/learn/msanseve-flowers-400x273.jpeg
--------------------------------------------------------------------------------
/images/learn/msanseve-flowers.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/learn/msanseve-flowers.jpg
--------------------------------------------------------------------------------
/images/learn/netlify-logo400x200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/learn/netlify-logo400x200.png
--------------------------------------------------------------------------------
/images/learn/octocat-400x333.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/learn/octocat-400x333.png
--------------------------------------------------------------------------------
/images/learn/octocat-github-logo400x200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/learn/octocat-github-logo400x200.png
--------------------------------------------------------------------------------
/images/learn/octocat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/learn/octocat.png
--------------------------------------------------------------------------------
/images/learn/print-pdf-epub.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/learn/print-pdf-epub.png
--------------------------------------------------------------------------------
/images/learn/print-pdf-epub400x225.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/learn/print-pdf-epub400x225.png
--------------------------------------------------------------------------------
/images/learn/python-logo-master-v3-TM-flattened.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/learn/python-logo-master-v3-TM-flattened.png
--------------------------------------------------------------------------------
/images/learn/python-logo400x200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/learn/python-logo400x200.png
--------------------------------------------------------------------------------
/images/learn/rtd-admonitions.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/learn/rtd-admonitions.png
--------------------------------------------------------------------------------
/images/learn/rtd-mobile-nav.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/learn/rtd-mobile-nav.png
--------------------------------------------------------------------------------
/images/learn/ruby-logo400x200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/learn/ruby-logo400x200.png
--------------------------------------------------------------------------------
/images/learn/ruby.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/learn/ruby.png
--------------------------------------------------------------------------------
/images/learn/sphinx-docs-page-400x335.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/learn/sphinx-docs-page-400x335.png
--------------------------------------------------------------------------------
/images/learn/sphinx-docs-page.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/learn/sphinx-docs-page.png
--------------------------------------------------------------------------------
/images/learn/ssg-performance-400x225.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/learn/ssg-performance-400x225.png
--------------------------------------------------------------------------------
/images/learn/ssg-performance.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/learn/ssg-performance.png
--------------------------------------------------------------------------------
/images/learn/ssg-search-options.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/learn/ssg-search-options.png
--------------------------------------------------------------------------------
/images/learn/ssg-search-options400x225.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/learn/ssg-search-options400x225.png
--------------------------------------------------------------------------------
/images/learn/ssg-themes.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/learn/ssg-themes.png
--------------------------------------------------------------------------------
/images/learn/ssg-themes400x225.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/learn/ssg-themes400x225.png
--------------------------------------------------------------------------------
/images/learn/table-layout.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/learn/table-layout.png
--------------------------------------------------------------------------------
/images/learn/table-layout400x225.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/learn/table-layout400x225.png
--------------------------------------------------------------------------------
/images/learn/travis-ci-logo400x200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/learn/travis-ci-logo400x200.png
--------------------------------------------------------------------------------
/images/learn/web-templates.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/learn/web-templates.png
--------------------------------------------------------------------------------
/images/learn/web-templates400×225.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/learn/web-templates400×225.png
--------------------------------------------------------------------------------
/images/learn/whitespace.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/learn/whitespace.png
--------------------------------------------------------------------------------
/images/leon.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/leon.jpg
--------------------------------------------------------------------------------
/images/margaret-eker.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/margaret-eker.jpg
--------------------------------------------------------------------------------
/images/mtischendorf-logpile.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/mtischendorf-logpile.jpg
--------------------------------------------------------------------------------
/images/othree-github-stickers.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/othree-github-stickers.jpg
--------------------------------------------------------------------------------
/images/padraig_o_brien.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/padraig_o_brien.jpg
--------------------------------------------------------------------------------
/images/platformos/platformos_part1/cardsorting.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/platformos/platformos_part1/cardsorting.png
--------------------------------------------------------------------------------
/images/platformos/platformos_part1/cardsorting2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/platformos/platformos_part1/cardsorting2.png
--------------------------------------------------------------------------------
/images/platformos/platformos_part1/content_inventory.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/platformos/platformos_part1/content_inventory.png
--------------------------------------------------------------------------------
/images/platformos/platformos_part1/design_thinking.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/platformos/platformos_part1/design_thinking.png
--------------------------------------------------------------------------------
/images/platformos/platformos_part1/part1_cover.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/platformos/platformos_part1/part1_cover.jpg
--------------------------------------------------------------------------------
/images/platformos/platformos_part1/protopersonas.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/platformos/platformos_part1/protopersonas.jpg
--------------------------------------------------------------------------------
/images/platformos/platformos_part1/sitemap.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/platformos/platformos_part1/sitemap.png
--------------------------------------------------------------------------------
/images/platformos/platformos_part1/sitemap_userjourneys.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/platformos/platformos_part1/sitemap_userjourneys.png
--------------------------------------------------------------------------------
/images/platformos/platformos_part1/userjourneys1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/platformos/platformos_part1/userjourneys1.png
--------------------------------------------------------------------------------
/images/platformos/platformos_part2/editorial_workflow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/platformos/platformos_part2/editorial_workflow.png
--------------------------------------------------------------------------------
/images/platformos/platformos_part2/feedback_block.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/platformos/platformos_part2/feedback_block.png
--------------------------------------------------------------------------------
/images/platformos/platformos_part2/part2_cover.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/platformos/platformos_part2/part2_cover.jpg
--------------------------------------------------------------------------------
/images/platformos/platformos_part2/wireframe_tutorial.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/platformos/platformos_part2/wireframe_tutorial.png
--------------------------------------------------------------------------------
/images/platformos/platformos_part3/contributors.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/platformos/platformos_part3/contributors.png
--------------------------------------------------------------------------------
/images/platformos/platformos_part3/part3_cover.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/platformos/platformos_part3/part3_cover.jpg
--------------------------------------------------------------------------------
/images/platformos/platformos_part3/slack.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/platformos/platformos_part3/slack.png
--------------------------------------------------------------------------------
/images/platformos/platformos_part3/status_report.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/platformos/platformos_part3/status_report.png
--------------------------------------------------------------------------------
/images/platformos/platformos_part3/town_hall.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/platformos/platformos_part3/town_hall.jpg
--------------------------------------------------------------------------------
/images/platformos/platformos_part4/deep_links.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/platformos/platformos_part4/deep_links.png
--------------------------------------------------------------------------------
/images/platformos/platformos_part4/deployment_process.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/platformos/platformos_part4/deployment_process.png
--------------------------------------------------------------------------------
/images/platformos/platformos_part4/feedback_block.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/platformos/platformos_part4/feedback_block.png
--------------------------------------------------------------------------------
/images/platformos/platformos_part4/page_speed_desktop.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/platformos/platformos_part4/page_speed_desktop.jpg
--------------------------------------------------------------------------------
/images/platformos/platformos_part4/page_speed_mobile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/platformos/platformos_part4/page_speed_mobile.png
--------------------------------------------------------------------------------
/images/platformos/platformos_part4/part4_cover.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/platformos/platformos_part4/part4_cover.jpg
--------------------------------------------------------------------------------
/images/platformos/platformos_part4/toc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/platformos/platformos_part4/toc.png
--------------------------------------------------------------------------------
/images/pre-filled-bug-template.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/pre-filled-bug-template.png
--------------------------------------------------------------------------------
/images/pronovix/aglio_example.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/pronovix/aglio_example.png
--------------------------------------------------------------------------------
/images/pronovix/dapperdox_overview.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/pronovix/dapperdox_overview.png
--------------------------------------------------------------------------------
/images/pronovix/raml2html_demo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/pronovix/raml2html_demo.png
--------------------------------------------------------------------------------
/images/pronovix/raml_console_demo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/pronovix/raml_console_demo.png
--------------------------------------------------------------------------------
/images/pronovix/redoc-demo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/pronovix/redoc-demo.png
--------------------------------------------------------------------------------
/images/pronovix/snowboard_example.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/pronovix/snowboard_example.png
--------------------------------------------------------------------------------
/images/pronovix/swagger_ui_example.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/pronovix/swagger_ui_example.png
--------------------------------------------------------------------------------
/images/quickstart/add-file-create-new-file.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/quickstart/add-file-create-new-file.png
--------------------------------------------------------------------------------
/images/quickstart/commit-new-file.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/quickstart/commit-new-file.png
--------------------------------------------------------------------------------
/images/quickstart/edit-new-file.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/quickstart/edit-new-file.png
--------------------------------------------------------------------------------
/images/quickstart/github-pages-settings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/quickstart/github-pages-settings.png
--------------------------------------------------------------------------------
/images/redislabs/writer_in_the_middle.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/redislabs/writer_in_the_middle.jpg
--------------------------------------------------------------------------------
/images/report-a-bug.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/report-a-bug.png
--------------------------------------------------------------------------------
/images/robot-in-grass.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/robot-in-grass.jpg
--------------------------------------------------------------------------------
/images/rogerjones-wireframe.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/rogerjones-wireframe.jpg
--------------------------------------------------------------------------------
/images/seabamirum-common-redpoll.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/seabamirum-common-redpoll.jpg
--------------------------------------------------------------------------------
/images/simple-search-screenshot.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/simple-search-screenshot.jpg
--------------------------------------------------------------------------------
/images/site-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/site-logo.png
--------------------------------------------------------------------------------
/images/site-logo.psd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/site-logo.psd
--------------------------------------------------------------------------------
/images/spacewalk-nasa2explore.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/spacewalk-nasa2explore.jpg
--------------------------------------------------------------------------------
/images/spotify/adoption1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/spotify/adoption1.png
--------------------------------------------------------------------------------
/images/spotify/adoption2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/spotify/adoption2.png
--------------------------------------------------------------------------------
/images/spotify/feedback.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/spotify/feedback.png
--------------------------------------------------------------------------------
/images/spotify/managepage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/spotify/managepage.png
--------------------------------------------------------------------------------
/images/spotify/soundboard-han.ailes.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/spotify/soundboard-han.ailes.jpg
--------------------------------------------------------------------------------
/images/spotify/techdocs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/spotify/techdocs.png
--------------------------------------------------------------------------------
/images/stacked-logs-mtischendorf.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/stacked-logs-mtischendorf.jpg
--------------------------------------------------------------------------------
/images/stevensnodgrass-bolt.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/stevensnodgrass-bolt.jpg
--------------------------------------------------------------------------------
/images/stockholmlibrary-marcus_hansson.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/stockholmlibrary-marcus_hansson.jpg
--------------------------------------------------------------------------------
/images/survey-charts/how-onboard-docs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/survey-charts/how-onboard-docs.png
--------------------------------------------------------------------------------
/images/survey-charts/leadership-docs-tools.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/survey-charts/leadership-docs-tools.png
--------------------------------------------------------------------------------
/images/sysdig/adopting-doc-as-code-01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/sysdig/adopting-doc-as-code-01.png
--------------------------------------------------------------------------------
/images/sysdig/radhika-sysdig.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/sysdig/radhika-sysdig.jpg
--------------------------------------------------------------------------------
/images/sysdig/radhika-sysdig.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/sysdig/radhika-sysdig.png
--------------------------------------------------------------------------------
/images/sysdig/sysdig-banner.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/sysdig/sysdig-banner.png
--------------------------------------------------------------------------------
/images/sysdig/sysdig-process.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/sysdig/sysdig-process.png
--------------------------------------------------------------------------------
/images/techdocs/01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/techdocs/01.png
--------------------------------------------------------------------------------
/images/techdocs/02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/techdocs/02.png
--------------------------------------------------------------------------------
/images/techdocs/03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/techdocs/03.png
--------------------------------------------------------------------------------
/images/techdocs/04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/techdocs/04.png
--------------------------------------------------------------------------------
/images/techdocs/05.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/techdocs/05.png
--------------------------------------------------------------------------------
/images/techdocs/06.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/techdocs/06.png
--------------------------------------------------------------------------------
/images/techdocs/07.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/techdocs/07.png
--------------------------------------------------------------------------------
/images/techdocs/08.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/techdocs/08.png
--------------------------------------------------------------------------------
/images/techdocs/09.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/techdocs/09.png
--------------------------------------------------------------------------------
/images/techdocs/10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/techdocs/10.png
--------------------------------------------------------------------------------
/images/techdocs/11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/techdocs/11.png
--------------------------------------------------------------------------------
/images/techdocs/12.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/techdocs/12.png
--------------------------------------------------------------------------------
/images/techdocs/13.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/techdocs/13.png
--------------------------------------------------------------------------------
/images/techdocs/14.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/techdocs/14.png
--------------------------------------------------------------------------------
/images/techdocs/15.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/techdocs/15.png
--------------------------------------------------------------------------------
/images/techdocs/16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/techdocs/16.png
--------------------------------------------------------------------------------
/images/techdocs/backstage-techdocs-architecture.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/techdocs/backstage-techdocs-architecture.png
--------------------------------------------------------------------------------
/images/techdocs/create-app.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/techdocs/create-app.png
--------------------------------------------------------------------------------
/images/therefore-wireframe.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/therefore-wireframe.jpg
--------------------------------------------------------------------------------
/images/threeblackdots-playground.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/threeblackdots-playground.jpg
--------------------------------------------------------------------------------
/images/tom-johnson.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/tom-johnson.jpg
--------------------------------------------------------------------------------
/images/treat-docs-like-code.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/treat-docs-like-code.png
--------------------------------------------------------------------------------
/images/trikersticks-raccoon.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/trikersticks-raccoon.jpg
--------------------------------------------------------------------------------
/images/twitter-card-summary-large-image.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/twitter-card-summary-large-image.jpg
--------------------------------------------------------------------------------
/images/wtd-eur-2017.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/justwriteclick/docslikecode/d9430e326fa595cd175c576e5f379f5b2bb37460/images/wtd-eur-2017.jpg
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 | ---
2 | layout: home
3 | title: "Quick Start with Docs as Code"
4 | excerpt: "Use Git and GitHub, static site generators, and CICD systems to write and automate documentation builds so you can focus on writing and organizing excellent content."
5 | search: false
6 | show_excerpts: true
7 | entries_layout: grid
8 | ---
9 |
10 |
In your browser, create a repository with the same name as your GitHub username, followed by "github.io".
19 | For example, my repository name is "annegentle.github.io".
20 |
On the repository's main page, on the Code tab, click Add file > Create new file.
21 |
22 |
23 |
In the Name your file... field, enter "index.md" and under Edit new file, add a line or two of text that you want to publish as your new web landing page.
24 |
25 |
Add a message if you like, and click Commit new file.
26 |
27 |
Wait just a few seconds, then go to your new page, https://username.github.io. For an example, go to annegentle.github.io.
28 |
If you don't see a page, check the settings for GitHub Pages by going to the Settings tab for the repository, and then click Pages in the left-hand side. The Settings should look similar to these:
29 |
That exercise gives you a taste of using GitHub as a content management system and publishing to a single web page automatically by pushing to a branch. Learn more by exploring the rest of this site.
Learning GitHub or any system backed by `git` takes some time and practice. Try some lessons with multiple static site generators and deployment systems as well as how to test docs as code.
We've transformed the way teams work together on docs, and we want to talk about the best practices for writing docs using development tools and techniques. Now in its second edition.
53 |
54 |
55 |
56 |
Read the articles
57 |
Read more articles on this site about
58 | using GitHub for documentation. Let's find out the best practices and create a balance point between artisanal craft and automation efficiency.
59 |
60 |
61 |
--------------------------------------------------------------------------------
/learn/index.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: collection
3 | permalink: /learn/
4 | collection: learn
5 | entries_layout: grid
6 | last_modified_at: Tue Jun 7 21:15:31 CDT 2022
7 | ---
8 |
9 | Sphinx, Jekyll, and Hugo, all are static site generators that teams use for web sites and documentation sites. Let's go through setting up a static site generator and a common CICD system with it.
10 |
11 | If you've got access to a docs repository already, but don't know what to do next, start with [GitHub for documentation sites](https://docslikecode.com/learn/00-github-for-docs-files/).
12 |
--------------------------------------------------------------------------------
/netlify.toml:
--------------------------------------------------------------------------------
1 | [build]
2 |
3 | publish = "_site/"
4 |
5 | [context.production]
6 | publish = "_site/"
7 | command = "jekyll build"
8 | environment = { JEKYLL_ENV = "production" }
9 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name":"jekyll-theme-so-simple",
3 | "description":"A simple Jekyll theme for words and pictures.",
4 | "version":"3.2.0",
5 | "author":"Michael Rose",
6 | "homepage":"http://mmistakes.github.io/so-simple-theme/",
7 | "repository":{
8 | "type":"git",
9 | "url":"git://github.com/mmistakes/so-simple-theme.git"
10 | },
11 | "bugs":{
12 | "url":"https://github.com/mmistakes/so-simple-theme/issues"
13 | },
14 | "keywords":[
15 | "jekyll",
16 | "theme",
17 | "minimal",
18 | "responsive"
19 | ],
20 | "license":"MIT",
21 | "engines":{
22 | "node":">= 0.10.0"
23 | },
24 | "devDependencies":{
25 | "npm-run-all":"^4.1.5",
26 | "onchange":"^6.0.0",
27 | "uglify-js":"^3.4.9"
28 | },
29 | "browserslist":[
30 | "last 2 versions",
31 | "> 5%",
32 | "IE 9"
33 | ],
34 | "scripts":{
35 | "uglify":"uglifyjs assets/js/plugins/lity.js assets/js/plugins/jquery.smooth-scroll.js assets/js/plugins/table-of-contents.js assets/js/main.js -c -m -o assets/js/main.min.js",
36 | "add-banner":"node banner.js",
37 | "watch:js":"onchange \"assets/js/**/*.js\" -e \"assets/js/main.min.js\" -- npm run build:js",
38 | "build:js":"npm run uglify && npm run add-banner"
39 | },
40 | "dependencies":{
41 |
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/script/cibuild:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | set -e # halt script on error
3 |
4 | bundle exec jekyll build
5 | bundle exec htmlproofer ./_site
6 |
--------------------------------------------------------------------------------
/script/linkcheck:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | # halt script on error
3 | set -e
4 | # clean
5 | rm -rf _site
6 | # Build locally, then check links in built output
7 | # Builds only /latest, not older versions
8 | bundle exec jekyll build -d _site
9 | bundle exec htmlproofer ./_site --url-ignore "#"
10 |
--------------------------------------------------------------------------------
/search/index.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: search
3 | title: "Search"
4 | image:
5 | path: /images/so-simple-sample-image-7.jpg
6 | search: false
7 | sitemap: false
8 | ---
9 |
10 |
--------------------------------------------------------------------------------
/tags/index.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: tags
3 | title: Tag Index
4 | excerpt: "An archive of posts sorted by tag."
5 | search_omit: false
6 | ---
7 |
--------------------------------------------------------------------------------