FeatMF. You must have the following
gh CLI setup.Do the following
mkdir FeatMF && cd $_
git init -b main
touch README.rst
Add other things like IDE files, .gitignore files, etc. We’ll choose the GNU LGPL v3 license.
Add the first commit
git add --all
git commit -m "First commit"
Add remote
git remote add origin https://github.com/TheProjectsGuy/FeatMF.git
Push the changes to GitHub
git push origin -u main
Setup Python poetry for this project (using Python from pyenv)
Initialize it (an interactive menu setup follows)
poetry init
I choose python 3.8 for this project (supported by multiple libraries), but my OS has python 3.10.6. I do not prefer using the system interpreter (unless it’s absolutely necessary)
We’ll create a pyenv for python 3.8 and make the local folder use that python all the time.
# Depending on what you have in `~/.zshrc`
pyenv-init || eval "$(pyenv init -)"
# Install Python 3.8
pyenv install 3.8
pyenv local 3.8
python --version # Should be 3.8.*
I like to use my system python by default, so I have a pyenv-init function in my ~/.zshrc to initialize pyenv (same init command).
Make sure poetry uses this Python
poetry env use python
# Test that this worked
poetry shell
Install core libraries through poetry
In pyproject.toml file, add the dependencies. For now, we’ll just install the latest versions of numpy, scipy, matplotlib, opencv-contrib-python, and PyTorch (version 1.13).
python = "^3.8.0"
numpy = "*"
scipy = "*"
matplotlib = "*"
opencv-contrib-python = "*"
torch = "^1.13"
torchvision = "*"
torchaudio = "*"
Such wildcard entries are better left to the development builds. Make them concrete before releasing this to public. Run the poetry commands to install everything
poetry install
poetry update
Show the installed packages as a tree
poetry show --tree
Create entry in the pyproject.toml file
[tool.poetry.group.docs]
optional = true
[tool.poetry.group.docs.dependencies]
sphinx = ">= 5.2"
And install everything
poetry install --with docs
Create folder with basic quickstart
cd FeatMF
poetry shell
sphinx-quickstart docs
Put the docs/build folder in .gitignore
Build the docs
sphinx-build -b html docs/source/ docs/build/html
See the preview in ./docs/build/html/index.html file
Install the theme. We’ll use the rtc-theme
In pyproject.toml add the theme (under the docs group dependencies)
sphinx-rtd-theme = ">= 1.0"
Update poetry
poetry install --with docs
poetry update
Use that theme
In ./docs/source/conf.py, add/change the following
html_theme = 'sphinx_rtd_theme'
Rebuild the site
sphinx-build -b html docs/source/ docs/build/html
Deploy on readthedocs.org
For (offline) reference, you can optionally save the entire theme (source)
cd /scratch
wget --recursive --no-parent https://sphinx-themes.org/sample-sites/sphinx-rtd-theme/
Note: different diagram-generation packages require external dependencies to be installed on your machine. Also, be mindful of that because of diagram generation the fist time you build your Jekyll website after adding new diagrams will be SLOW. For any other details, please refer to jekyll-diagrams README.
Install mermaid using node.js package manager npm by running the following command:
npm install -g mermaid.cli
The diagram below was generated by the following code:
{% mermaid %}
sequenceDiagram
participant John
participant Alice
Alice->>John: Hello John, how are you?
John-->>Alice: Great!
{% endmermaid %}
This theme supports rendering beautiful math in inline and display modes using MathJax 3 engine. You just need to surround your math expression with $$, like $$ E = mc^2 $$. If you leave it inside a paragraph, it will produce an inline expression, just like \(E = mc^2\).
To use display mode, again surround your expression with $$ and place it as a separate paragraph. Here is an example:
Note that MathJax 3 is a major re-write of MathJax that brought a significant improvement to the loading and rendering speed, which is now on par with KaTeX.
Citations are then used in the article body with the <d-cite> tag. The key attribute is a reference to the id provided in the bibliography. The key attribute can take multiple ids, separated by commas.
The citation is presented inline like this:
Distill chose a numerical inline citation style to improve readability of citation dense articles and because many of the benefits of longer citations are obviated by displaying more information on hover. However, we consider it good style to mention author last names if you discuss something at length and it fits into the flow well — the authors are human and it’s nice for them to have the community associate them with their work.
Just wrap the text you would like to show up in a footnote in a <d-footnote> tag. The number of the footnote will be automatically generated.
Syntax highlighting is provided within <d-code> tags. An example of inline code snippets: <d-code language="html">let x = 10;</d-code>. For larger blocks of code, add a block attribute:
Note: <d-code> blocks do not look good in the dark mode. You can always use the default code-highlight using the highlight liquid tag:
var x = 25;
function(x) {
return x * x;
}The main text column is referred to as the body. It is the assumed layout of any direct descendants of the d-article element.
.l-body
For images you want to display a little larger, try .l-page:
.l-page
All of these have an outset variant if you want to poke out from the body text a little bit. For instance:
.l-body-outset
.l-page-outset
Occasionally you’ll want to use the full browser width. For this, use .l-screen. You can also inset the element a little from the edge of the browser by using the inset variant.
.l-screen
.l-screen-inset
The final layout is for marginalia, asides, and footnotes. It does not interrupt the normal flow of .l-body sized text except on mobile screen sizes.
.l-gutter
Emphasis, aka italics, with asterisks (*asterisks*) or underscores (_underscores_).
Strong emphasis, aka bold, with asterisks or underscores.
Combined emphasis with asterisks and underscores.
Strikethrough uses two tildes. Scratch this.
⋅⋅⋅You can have properly indented paragraphs within list items. Notice the blank line above, and the leading spaces (at least one, but we’ll use three here to also align the raw Markdown).
⋅⋅⋅To have a line break without a paragraph, you will need to use two trailing spaces.⋅⋅ ⋅⋅⋅Note that this line is separate, but within the same paragraph.⋅⋅ ⋅⋅⋅(This is contrary to the typical GFM line break behaviour, where trailing spaces are not required.)
I’m an inline-style link with title
I’m a relative reference to a repository file
You can use numbers for reference-style link definitions
Or leave it empty and use the link text itself.
URLs and URLs in angle brackets will automatically get turned into links. http://www.example.com or http://www.example.com and sometimes example.com (but not on Github, for example).
Some text to show that the reference links can follow later.
Here’s our logo (hover to see the title text):
Inline-style: ![]()
Reference-style: ![]()
Inline code has back-ticks around it.
var s = "JavaScript syntax highlighting";
alert(s);
s = "Python syntax highlighting"
print s
No language indicated, so no syntax highlighting.
But let's throw in a <b>tag</b>.
Colons can be used to align columns.
| Tables | Are | Cool |
|---|---|---|
| col 3 is | right-aligned | $1600 |
| col 2 is | centered | $12 |
| zebra stripes | are neat | $1 |
There must be at least 3 dashes separating each header cell. The outer pipes (|) are optional, and you don’t need to make the raw Markdown line up prettily. You can also use inline Markdown.
| Markdown | Less | Pretty |
|---|---|---|
| Still | renders | nicely |
| 1 | 2 | 3 |
Blockquotes are very handy in email to emulate reply text. This line is part of the same quote.
Quote break.
This is a very long line that will still be quoted properly when it wraps. Oh boy let’s keep writing to make sure this is long enough to actually wrap for everyone. Oh, you can put Markdown into a blockquote.
Here’s a line for us to start with.
This line is separated from the one above by two newlines, so it will be a separate paragraph.
This line is also a separate paragraph, but… This line is only separated by a single newline, so it’s a separate line in the same paragraph.
]]>An example of displaying a tweet:
jekyll-twitter-plugin (1.0.0): A Liquid tag plugin for Jekyll that renders Tweets from Twitter API http://t.co/m4EIQPM9h4
— RubyGems (@rubygems) October 5, 2014
An example of pulling from a timeline:
For more details on using the plugin visit: jekyll-twitter-plugin
]]>$$, like $$ E = mc^2 $$. If you leave it inside a paragraph, it will produce an inline expression, just like \(E = mc^2\). To use display mode, again surround your expression with $$ and place it as a separate paragraph. Here is an example:
You can also use \begin{equation}...\end{equation} instead of $$ for display mode math. MathJax will automatically number equations:
\begin{equation} \label{eq:cauchy-schwarz} \left( \sum_{k=1}^n a_k b_k \right)^2 \leq \left( \sum_{k=1}^n a_k^2 \right) \left( \sum_{k=1}^n b_k^2 \right) \end{equation}
and by adding \label{...} inside the equation environment, we can now refer to the equation using \eqref.
Note that MathJax 3 is a major re-write of MathJax that brought a significant improvement to the loading and rendering speed, which is now on par with KaTeX.
]]>{% highlight c++ linenos %}
code code code
{% endhighlight %}
The keyword linenos triggers display of line numbers. Produces something like this:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int main(int argc, char const *argv[])
{
string myString;
cout << "input a string: ";
getline(cin, myString);
int length = myString.length();
char charArray = new char * [length];
charArray = myString;
for(int i = 0; i < length; ++i){
cout << charArray[i] << " ";
}
return 0;
}
Images can be made zoomable. Simply add data-zoomable to <img> tags that you want to make zoomable.
The rest of the images in this post are all zoomable, arranged into different mini-galleries.