<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><generator uri="https://jekyllrb.com/" version="4.3.3">Jekyll</generator><link href="https://theprojectsguy.github.io/feed.xml" rel="self" type="application/atom+xml"/><link href="https://theprojectsguy.github.io/" rel="alternate" type="text/html" hreflang="en"/><updated>2024-08-30T14:21:44+00:00</updated><id>https://theprojectsguy.github.io/feed.xml</id><title type="html">blank</title><subtitle>My personal webpage based on the [al-folio](https://github.com/alshedivat/al-folio) theme. </subtitle><entry><title type="html">Creating a Python Project with Docs</title><link href="https://theprojectsguy.github.io/blog/2022/projrepo/" rel="alternate" type="text/html" title="Creating a Python Project with Docs"/><published>2022-12-17T14:30:00+00:00</published><updated>2022-12-17T14:30:00+00:00</updated><id>https://theprojectsguy.github.io/blog/2022/projrepo</id><content type="html" xml:base="https://theprojectsguy.github.io/blog/2022/projrepo/"><![CDATA[<p>This is a template I use to create projects and docs. This page is to give a special emphasis on docs. I’ll be creating a project named <code class="language-plaintext highlighter-rouge">FeatMF</code>.</p> <h2 id="table-of-contents">Table of contents</h2> <ul> <li><a href="#table-of-contents">Table of contents</a></li> <li><a href="#pre-requisites">Pre-requisites</a></li> <li><a href="#steps">Steps</a> <ul> <li><a href="#step-1-setup-the-empty-repository-locally">Step 1: Setup the empty repository locally</a></li> <li><a href="#step-2-upload-the-repository-to-github">Step 2: Upload the repository to GitHub</a></li> <li><a href="#step-3-setup-python-poetry">Step 3: Setup Python Poetry</a></li> <li><a href="#step-4-create-documentation">Step 4: Create Documentation</a> <ul> <li><a href="#create-local-docs">Create Local Docs</a></li> <li><a href="#choose-a-theme">Choose a Theme</a></li> <li><a href="#deploy">Deploy</a></li> <li><a href="#recommendations">Recommendations</a></li> </ul> </li> </ul> </li> <li><a href="#references">References</a></li> </ul> <h2 id="pre-requisites">Pre-requisites</h2> <p>You must have the following</p> <ul> <li>A <a href="https://github.com/">github</a> account. I prefer to have SSH keys and <code class="language-plaintext highlighter-rouge">gh</code> <a href="https://cli.github.com/">CLI</a> setup.</li> <li>A <a href="https://readthedocs.org/">readthedocs</a> account with GitHub (or other platforms) connected.</li> <li>For environment management, you have <a href="https://github.com/pyenv/pyenv">pyenv</a> and <a href="https://python-poetry.org/">Python poetry</a> installed.</li> <li>Knowledge of git, bash, python environments, documentation. Some reference is included below.</li> </ul> <h2 id="steps">Steps</h2> <p>Do the following</p> <h3 id="step-1-setup-the-empty-repository-locally">Step 1: Setup the empty repository locally</h3> <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">mkdir </span>FeatMF <span class="o">&amp;&amp;</span> <span class="nb">cd</span> <span class="nv">$_</span>
git init <span class="nt">-b</span> main
<span class="nb">touch </span>README.rst
</code></pre></div></div> <p>Add other things like IDE files, <code class="language-plaintext highlighter-rouge">.gitignore</code> files, etc. We’ll choose the <a href="https://choosealicense.com/licenses/lgpl-3.0/">GNU LGPL v3</a> license.</p> <p>Add the first commit</p> <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>git add <span class="nt">--all</span>
git commit <span class="nt">-m</span> <span class="s2">"First commit"</span>
</code></pre></div></div> <h3 id="step-2-upload-the-repository-to-github">Step 2: Upload the repository to GitHub</h3> <ul> <li>On GitHub (or any git hosting platform), create repository with no README or LICENSE (everything will be uploaded from local).</li> <li> <p>Add remote</p> <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  git remote add origin https://github.com/TheProjectsGuy/FeatMF.git
</code></pre></div> </div> </li> <li> <p>Push the changes to GitHub</p> <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  git push origin <span class="nt">-u</span> main
</code></pre></div> </div> </li> </ul> <h3 id="step-3-setup-python-poetry">Step 3: Setup Python Poetry</h3> <ol> <li> <p>Setup Python poetry for this project (using Python from <code class="language-plaintext highlighter-rouge">pyenv</code>)</p> <ul> <li> <p>Initialize it (an interactive menu setup follows)</p> <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  poetry init
</code></pre></div> </div> <p>I choose python <code class="language-plaintext highlighter-rouge">3.8</code> for this project (supported by multiple libraries), but my OS has python <code class="language-plaintext highlighter-rouge">3.10.6</code>. I do not prefer using the system interpreter (unless it’s absolutely necessary)</p> </li> <li> <p>We’ll create a <code class="language-plaintext highlighter-rouge">pyenv</code> for python <code class="language-plaintext highlighter-rouge">3.8</code> and make the local folder use that python all the time.</p> <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  <span class="c"># Depending on what you have in `~/.zshrc`</span>
  pyenv-init <span class="o">||</span> <span class="nb">eval</span> <span class="s2">"</span><span class="si">$(</span>pyenv init -<span class="si">)</span><span class="s2">"</span>
  <span class="c"># Install Python 3.8</span>
  pyenv <span class="nb">install </span>3.8
  pyenv <span class="nb">local </span>3.8
  python <span class="nt">--version</span>    <span class="c"># Should be 3.8.*</span>
</code></pre></div> </div> <p>I like to use my system python by default, so I have a <code class="language-plaintext highlighter-rouge">pyenv-init</code> function in my <code class="language-plaintext highlighter-rouge">~/.zshrc</code> to initialize <code class="language-plaintext highlighter-rouge">pyenv</code> (same init command).</p> </li> <li> <p>Make sure poetry uses this Python</p> <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  poetry <span class="nb">env </span>use python
  <span class="c"># Test that this worked</span>
  poetry shell
</code></pre></div> </div> </li> </ul> </li> <li> <p>Install core libraries through poetry</p> <p>In <code class="language-plaintext highlighter-rouge">pyproject.toml</code> file, add the dependencies. For now, we’ll just install the latest versions of <code class="language-plaintext highlighter-rouge">numpy</code>, <code class="language-plaintext highlighter-rouge">scipy</code>, <code class="language-plaintext highlighter-rouge">matplotlib</code>, <code class="language-plaintext highlighter-rouge">opencv-contrib-python</code>, and PyTorch (version 1.13).</p> <div class="language-toml highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="py">python</span> <span class="p">=</span> <span class="s">"^3.8.0"</span>
 <span class="py">numpy</span> <span class="p">=</span> <span class="s">"*"</span>
 <span class="py">scipy</span> <span class="p">=</span> <span class="s">"*"</span>
 <span class="py">matplotlib</span> <span class="p">=</span> <span class="s">"*"</span>
 <span class="py">opencv-contrib-python</span> <span class="p">=</span> <span class="s">"*"</span>
 <span class="py">torch</span> <span class="p">=</span> <span class="s">"^1.13"</span>
 <span class="py">torchvision</span> <span class="p">=</span> <span class="s">"*"</span>
 <span class="py">torchaudio</span> <span class="p">=</span> <span class="s">"*"</span>
</code></pre></div> </div> <p>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</p> <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code> poetry <span class="nb">install
 </span>poetry update
</code></pre></div> </div> </li> <li> <p>Show the installed packages as a tree</p> <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code> poetry show <span class="nt">--tree</span>
</code></pre></div> </div> </li> </ol> <h3 id="step-4-create-documentation">Step 4: Create Documentation</h3> <h4 id="create-local-docs">Create Local Docs</h4> <ol> <li> <p>Create entry in the <code class="language-plaintext highlighter-rouge">pyproject.toml</code> file</p> <div class="language-toml highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="nn">[tool.poetry.group.docs]</span>
 <span class="py">optional</span> <span class="p">=</span> <span class="kc">true</span>

 <span class="nn">[tool.poetry.group.docs.dependencies]</span>
 <span class="py">sphinx</span> <span class="p">=</span> <span class="py">"&gt;</span><span class="p">=</span> <span class="mf">5.2</span><span class="s">"</span><span class="err">
</span></code></pre></div> </div> <p>And install everything</p> <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code> poetry <span class="nb">install</span> <span class="nt">--with</span> docs
</code></pre></div> </div> </li> <li> <p>Create folder with basic quickstart</p> <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="nb">cd </span>FeatMF
 poetry shell
 sphinx-quickstart docs
</code></pre></div> </div> <p>Put the <code class="language-plaintext highlighter-rouge">docs/build</code> folder in <code class="language-plaintext highlighter-rouge">.gitignore</code></p> </li> <li> <p>Build the docs</p> <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code> sphinx-build <span class="nt">-b</span> html docs/source/ docs/build/html
</code></pre></div> </div> <p>See the preview in <code class="language-plaintext highlighter-rouge">./docs/build/html/index.html</code> file</p> </li> </ol> <h4 id="choose-a-theme">Choose a Theme</h4> <ol> <li> <p>Install the theme. We’ll use the <a href="https://sphinx-themes.org/sample-sites/sphinx-rtd-theme/">rtc-theme</a></p> <p>In <code class="language-plaintext highlighter-rouge">pyproject.toml</code> add the theme (under the <code class="language-plaintext highlighter-rouge">docs</code> group dependencies)</p> <div class="language-toml highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="py">sphinx-rtd-theme</span> <span class="p">=</span> <span class="py">"&gt;</span><span class="p">=</span> <span class="mf">1.0</span><span class="s">"</span><span class="err">
</span></code></pre></div> </div> <p>Update poetry</p> <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code> poetry <span class="nb">install</span> <span class="nt">--with</span> docs
 poetry update
</code></pre></div> </div> </li> <li> <p>Use that theme</p> <p>In <code class="language-plaintext highlighter-rouge">./docs/source/conf.py</code>, add/change the following</p> <div class="language-py highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">html_theme</span> <span class="o">=</span> <span class="sh">'</span><span class="s">sphinx_rtd_theme</span><span class="sh">'</span>
</code></pre></div> </div> <p>Rebuild the site</p> <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code> sphinx-build <span class="nt">-b</span> html docs/source/ docs/build/html
</code></pre></div> </div> </li> </ol> <h4 id="deploy">Deploy</h4> <p>Deploy on <a href="https://readthedocs.org/">readthedocs.org</a></p> <ol> <li>Push all the latest changes to remote (GitHub)</li> <li>Import project and reach the <a href="https://readthedocs.org/dashboard/">dashboard</a>.</li> <li>Choose the repository in the list.</li> </ol> <h4 id="recommendations">Recommendations</h4> <ul> <li> <p>For (offline) reference, you can optionally save the entire theme (source)</p> <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  <span class="nb">cd</span> /scratch
  wget <span class="nt">--recursive</span> <span class="nt">--no-parent</span> https://sphinx-themes.org/sample-sites/sphinx-rtd-theme/
</code></pre></div> </div> </li> </ul> <h2 id="references">References</h2> <ul> <li><a href="https://choosealicense.com/">Choose a license</a></li> <li><a href="https://python-poetry.org/">Python poetry</a> <ul> <li><a href="https://python-poetry.org/docs/dependency-specification/">Dependency Specification</a></li> <li><a href="https://python-poetry.org/docs/managing-dependencies/#dependency-groups">Dependency Groups</a></li> </ul> </li> <li><a href="https://readthedocs.org/">Read the Docs</a> and <a href="https://www.sphinx-doc.org/en/master/index.html">Sphinx</a> documentation <ul> <li><a href="https://www.sphinx-doc.org/en/master/tutorial/getting-started.html">Sphinx getting started</a> tutorial</li> <li><a href="https://sphinx-themes.org/">Sphinx themes</a> <ul> <li><a href="https://sphinx-themes.org/sample-sites/sphinx-rtd-theme/">sphinx-rtd-theme</a>: Read The Docs theme</li> </ul> </li> </ul> </li> </ul>]]></content><author><name></name></author><category term="template"/><summary type="html"><![CDATA[Python project + ReadTheDocs + Python Poetry + PyEnv]]></summary></entry><entry><title type="html">Template: A Post with Diagrams</title><link href="https://theprojectsguy.github.io/blog/2021/diagrams/" rel="alternate" type="text/html" title="Template: A Post with Diagrams"/><published>2021-07-04T17:39:00+00:00</published><updated>2021-07-04T17:39:00+00:00</updated><id>https://theprojectsguy.github.io/blog/2021/diagrams</id><content type="html" xml:base="https://theprojectsguy.github.io/blog/2021/diagrams/"><![CDATA[<p>This theme supports generating various diagrams from a text description using <a href="https://github.com/zhustec/jekyll-diagrams" target="\_blank">jekyll-diagrams</a> plugin. Below, we generate a few examples of such diagrams using languages such as <a href="https://mermaid-js.github.io/mermaid/" target="\_blank">mermaid</a>, <a href="https://plantuml.com/" target="\_blank">plantuml</a>, <a href="https://vega.github.io/vega-lite/" target="\_blank">vega-lite</a>, etc.</p> <p><strong>Note:</strong> 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 <a href="https://github.com/zhustec/jekyll-diagrams" target="\_blank">jekyll-diagrams</a> README.</p> <h2 id="mermaid">Mermaid</h2> <p>Install mermaid using <code class="language-plaintext highlighter-rouge">node.js</code> package manager <code class="language-plaintext highlighter-rouge">npm</code> by running the following command:</p> <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>npm <span class="nb">install</span> <span class="nt">-g</span> mermaid.cli
</code></pre></div></div> <p>The diagram below was generated by the following code:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>{% mermaid %}
sequenceDiagram
    participant John
    participant Alice
    Alice-&gt;&gt;John: Hello John, how are you?
    John--&gt;&gt;Alice: Great!
{% endmermaid %}
</code></pre></div></div> <div class="jekyll-diagrams diagrams mermaid"> <svg id="mermaid-1725027710283" width="100%" xmlns="http://www.w3.org/2000/svg" height="100%" style="max-width:450px;" viewBox="-50 -10 450 231"><style>#mermaid-1725027710283 .label{font-family:trebuchet ms,verdana,arial;color:#333}#mermaid-1725027710283 .node circle,#mermaid-1725027710283 .node ellipse,#mermaid-1725027710283 .node polygon,#mermaid-1725027710283 .node rect{fill:#ececff;stroke:#9370db;stroke-width:1px}#mermaid-1725027710283 .node.clickable{cursor:pointer}#mermaid-1725027710283 .arrowheadPath{fill:#333}#mermaid-1725027710283 .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-1725027710283 .edgeLabel{background-color:#e8e8e8}#mermaid-1725027710283 .cluster rect{fill:#ffffde!important;stroke:#aa3!important;stroke-width:1px!important}#mermaid-1725027710283 .cluster text{fill:#333}#mermaid-1725027710283 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:trebuchet ms,verdana,arial;font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-1725027710283 .actor{stroke:#ccf;fill:#ececff}#mermaid-1725027710283 text.actor{fill:#000;stroke:none}#mermaid-1725027710283 .actor-line{stroke:grey}#mermaid-1725027710283 .messageLine0{marker-end:"url(#arrowhead)"}#mermaid-1725027710283 .messageLine0,#mermaid-1725027710283 .messageLine1{stroke-width:1.5;stroke-dasharray:"2 2";stroke:#333}#mermaid-1725027710283 #arrowhead{fill:#333}#mermaid-1725027710283 #crosshead path{fill:#333!important;stroke:#333!important}#mermaid-1725027710283 .messageText{fill:#333;stroke:none}#mermaid-1725027710283 .labelBox{stroke:#ccf;fill:#ececff}#mermaid-1725027710283 .labelText,#mermaid-1725027710283 .loopText{fill:#000;stroke:none}#mermaid-1725027710283 .loopLine{stroke-width:2;stroke-dasharray:"2 2";marker-end:"url(#arrowhead)";stroke:#ccf}#mermaid-1725027710283 .note{stroke:#aa3;fill:#fff5ad}#mermaid-1725027710283 .noteText{fill:#000;stroke:none;font-family:trebuchet ms,verdana,arial;font-size:14px}#mermaid-1725027710283 .section{stroke:none;opacity:.2}#mermaid-1725027710283 .section0{fill:rgba(102,102,255,.49)}#mermaid-1725027710283 .section2{fill:#fff400}#mermaid-1725027710283 .section1,#mermaid-1725027710283 .section3{fill:#fff;opacity:.2}#mermaid-1725027710283 .sectionTitle0,#mermaid-1725027710283 .sectionTitle1,#mermaid-1725027710283 .sectionTitle2,#mermaid-1725027710283 .sectionTitle3{fill:#333}#mermaid-1725027710283 .sectionTitle{text-anchor:start;font-size:11px;text-height:14px}#mermaid-1725027710283 .grid .tick{stroke:#d3d3d3;opacity:.3;shape-rendering:crispEdges}#mermaid-1725027710283 .grid path{stroke-width:0}#mermaid-1725027710283 .today{fill:none;stroke:red;stroke-width:2px}#mermaid-1725027710283 .task{stroke-width:2}#mermaid-1725027710283 .taskText{text-anchor:middle;font-size:11px}#mermaid-1725027710283 .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px}#mermaid-1725027710283 .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-1725027710283 .taskText0,#mermaid-1725027710283 .taskText1,#mermaid-1725027710283 .taskText2,#mermaid-1725027710283 .taskText3{fill:#fff}#mermaid-1725027710283 .task0,#mermaid-1725027710283 .task1,#mermaid-1725027710283 .task2,#mermaid-1725027710283 .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-1725027710283 .taskTextOutside0,#mermaid-1725027710283 .taskTextOutside1,#mermaid-1725027710283 .taskTextOutside2,#mermaid-1725027710283 .taskTextOutside3{fill:#000}#mermaid-1725027710283 .active0,#mermaid-1725027710283 .active1,#mermaid-1725027710283 .active2,#mermaid-1725027710283 .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-1725027710283 .activeText0,#mermaid-1725027710283 .activeText1,#mermaid-1725027710283 .activeText2,#mermaid-1725027710283 .activeText3{fill:#000!important}#mermaid-1725027710283 .done0,#mermaid-1725027710283 .done1,#mermaid-1725027710283 .done2,#mermaid-1725027710283 .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-1725027710283 .doneText0,#mermaid-1725027710283 .doneText1,#mermaid-1725027710283 .doneText2,#mermaid-1725027710283 .doneText3{fill:#000!important}#mermaid-1725027710283 .crit0,#mermaid-1725027710283 .crit1,#mermaid-1725027710283 .crit2,#mermaid-1725027710283 .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-1725027710283 .activeCrit0,#mermaid-1725027710283 .activeCrit1,#mermaid-1725027710283 .activeCrit2,#mermaid-1725027710283 .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-1725027710283 .doneCrit0,#mermaid-1725027710283 .doneCrit1,#mermaid-1725027710283 .doneCrit2,#mermaid-1725027710283 .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-1725027710283 .activeCritText0,#mermaid-1725027710283 .activeCritText1,#mermaid-1725027710283 .activeCritText2,#mermaid-1725027710283 .activeCritText3,#mermaid-1725027710283 .doneCritText0,#mermaid-1725027710283 .doneCritText1,#mermaid-1725027710283 .doneCritText2,#mermaid-1725027710283 .doneCritText3{fill:#000!important}#mermaid-1725027710283 .titleText{text-anchor:middle;font-size:18px;fill:#000}
#mermaid-1725027710283 g.classGroup text{fill:#9370db;stroke:none;font-family:trebuchet ms,verdana,arial;font-size:10px}#mermaid-1725027710283 g.classGroup rect{fill:#ececff;stroke:#9370db}#mermaid-1725027710283 g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-1725027710283 .classLabel .box{stroke:none;stroke-width:0;fill:#ececff;opacity:.5}#mermaid-1725027710283 .classLabel .label{fill:#9370db;font-size:10px}#mermaid-1725027710283 .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-1725027710283 #compositionEnd,#mermaid-1725027710283 #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-1725027710283 #aggregationEnd,#mermaid-1725027710283 #aggregationStart{fill:#ececff;stroke:#9370db;stroke-width:1}#mermaid-1725027710283 #dependencyEnd,#mermaid-1725027710283 #dependencyStart,#mermaid-1725027710283 #extensionEnd,#mermaid-1725027710283 #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-1725027710283 .branch-label,#mermaid-1725027710283 .commit-id,#mermaid-1725027710283 .commit-msg{fill:#d3d3d3;color:#d3d3d3}</style><style>#mermaid-1725027710283{color:#000;font:normal normal 400 normal 16px / normal "Times New Roman"}</style><g></g><g><line id="actor0" x1="75" y1="5" x2="75" y2="220" class="actor-line" stroke-width="0.5px" stroke="#999"></line><rect x="0" y="0" fill="#eaeaea" stroke="#666" width="150" height="65" rx="3" ry="3" class="actor"></rect><text x="75" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor" style="text-anchor: middle;"><tspan x="75" dy="0">John</tspan></text></g><g><line id="actor1" x1="275" y1="5" x2="275" y2="220" class="actor-line" stroke-width="0.5px" stroke="#999"></line><rect x="200" y="0" fill="#eaeaea" stroke="#666" width="150" height="65" rx="3" ry="3" class="actor"></rect><text x="275" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor" style="text-anchor: middle;"><tspan x="275" dy="0">Alice</tspan></text></g><defs><marker id="arrowhead" refX="5" refY="2" markerWidth="6" markerHeight="4" orient="auto"><path d="M 0,0 V 4 L6,2 Z"></path></marker></defs><defs><marker id="crosshead" markerWidth="15" markerHeight="8" orient="auto" refX="16" refY="4"><path fill="black" stroke="#000000" stroke-width="1px" d="M 9,2 V 6 L16,4 Z" style="stroke-dasharray: 0, 0;"></path><path fill="none" stroke="#000000" stroke-width="1px" d="M 0,1 L 6,7 M 6,1 L 0,7" style="stroke-dasharray: 0, 0;"></path></marker></defs><g><text x="175" y="93" class="messageText" style="text-anchor: middle;">Hello John, how are you?</text><line x1="275" y1="100" x2="75" y2="100" class="messageLine0" stroke-width="2" stroke="black" marker-end="url(#arrowhead)" style="fill: none;"></line></g><g><text x="175" y="128" class="messageText" style="text-anchor: middle;">Great!</text><line x1="75" y1="135" x2="275" y2="135" class="messageLine1" stroke-width="2" stroke="black" marker-end="url(#arrowhead)" style="stroke-dasharray: 3, 3; fill: none;"></line></g><g><rect x="0" y="155" fill="#eaeaea" stroke="#666" width="150" height="65" rx="3" ry="3" class="actor"></rect><text x="75" y="187.5" dominant-baseline="central" alignment-baseline="central" class="actor" style="text-anchor: middle;"><tspan x="75" dy="0">John</tspan></text></g><g><rect x="200" y="155" fill="#eaeaea" stroke="#666" width="150" height="65" rx="3" ry="3" class="actor"></rect><text x="275" y="187.5" dominant-baseline="central" alignment-baseline="central" class="actor" style="text-anchor: middle;"><tspan x="275" dy="0">Alice</tspan></text></g></svg> </div>]]></content><author><name></name></author><category term="sample-posts"/><category term="blog-template"/><summary type="html"><![CDATA[an example of a blog post with diagrams]]></summary></entry><entry><title type="html">Template: A Post with Redirect</title><link href="https://theprojectsguy.github.io/blog/2021/redirect/" rel="alternate" type="text/html" title="Template: A Post with Redirect"/><published>2021-07-04T17:39:00+00:00</published><updated>2021-07-04T17:39:00+00:00</updated><id>https://theprojectsguy.github.io/blog/2021/redirect</id><content type="html" xml:base="https://theprojectsguy.github.io/blog/2021/redirect/"><![CDATA[]]></content><author><name></name></author><category term="sample-posts"/><category term="blog-template"/><summary type="html"><![CDATA[you can also redirect to assets like pdf]]></summary></entry><entry><title type="html">Template: A Distill-style Blog Post</title><link href="https://theprojectsguy.github.io/blog/2021/distill/" rel="alternate" type="text/html" title="Template: A Distill-style Blog Post"/><published>2021-05-22T00:00:00+00:00</published><updated>2021-05-22T00:00:00+00:00</updated><id>https://theprojectsguy.github.io/blog/2021/distill</id><content type="html" xml:base="https://theprojectsguy.github.io/blog/2021/distill/"><![CDATA[<h2 id="equations">Equations</h2> <p>This theme supports rendering beautiful math in inline and display modes using <a href="https://www.mathjax.org/">MathJax 3</a> engine. You just need to surround your math expression with <code class="language-plaintext highlighter-rouge">$$</code>, like <code class="language-plaintext highlighter-rouge">$$ E = mc^2 $$</code>. If you leave it inside a paragraph, it will produce an inline expression, just like \(E = mc^2\).</p> <p>To use display mode, again surround your expression with <code class="language-plaintext highlighter-rouge">$$</code> and place it as a separate paragraph. Here is an example:</p> \[\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)\] <p>Note that MathJax 3 is <a href="https://docs.mathjax.org/en/latest/upgrading/whats-new-3.0.html">a major re-write of MathJax</a> that brought a significant improvement to the loading and rendering speed, which is now <a href="http://www.intmath.com/cg5/katex-mathjax-comparison.php">on par with KaTeX</a>.</p> <hr/> <h2 id="citations">Citations</h2> <p>Citations are then used in the article body with the <code class="language-plaintext highlighter-rouge">&lt;d-cite&gt;</code> tag. The key attribute is a reference to the id provided in the bibliography. The key attribute can take multiple ids, separated by commas.</p> <p>The citation is presented inline like this: <d-cite key="gregor2015draw"></d-cite> (a number that displays more information on hover). If you have an appendix, a bibliography is automatically created and populated in it.</p> <p>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.</p> <hr/> <h2 id="footnotes">Footnotes</h2> <p>Just wrap the text you would like to show up in a footnote in a <code class="language-plaintext highlighter-rouge">&lt;d-footnote&gt;</code> tag. The number of the footnote will be automatically generated.<d-footnote>This will become a hoverable footnote.</d-footnote></p> <hr/> <h2 id="code-blocks">Code Blocks</h2> <p>Syntax highlighting is provided within <code class="language-plaintext highlighter-rouge">&lt;d-code&gt;</code> tags. An example of inline code snippets: <code class="language-plaintext highlighter-rouge">&lt;d-code language="html"&gt;let x = 10;&lt;/d-code&gt;</code>. For larger blocks of code, add a <code class="language-plaintext highlighter-rouge">block</code> attribute:</p> <d-code block="" language="javascript"> var x = 25; function(x) { return x * x; } </d-code> <p><strong>Note:</strong> <code class="language-plaintext highlighter-rouge">&lt;d-code&gt;</code> blocks do not look good in the dark mode. You can always use the default code-highlight using the <code class="language-plaintext highlighter-rouge">highlight</code> liquid tag:</p> <figure class="highlight"><pre><code class="language-javascript" data-lang="javascript"><span class="kd">var</span> <span class="nx">x</span> <span class="o">=</span> <span class="mi">25</span><span class="p">;</span>
<span class="kd">function</span><span class="p">(</span><span class="nx">x</span><span class="p">)</span> <span class="p">{</span>
  <span class="k">return</span> <span class="nx">x</span> <span class="o">*</span> <span class="nx">x</span><span class="p">;</span>
<span class="p">}</span></code></pre></figure> <hr/> <h2 id="layouts">Layouts</h2> <p>The main text column is referred to as the body. It is the assumed layout of any direct descendants of the <code class="language-plaintext highlighter-rouge">d-article</code> element.</p> <div class="fake-img l-body"> <p>.l-body</p> </div> <p>For images you want to display a little larger, try <code class="language-plaintext highlighter-rouge">.l-page</code>:</p> <div class="fake-img l-page"> <p>.l-page</p> </div> <p>All of these have an outset variant if you want to poke out from the body text a little bit. For instance:</p> <div class="fake-img l-body-outset"> <p>.l-body-outset</p> </div> <div class="fake-img l-page-outset"> <p>.l-page-outset</p> </div> <p>Occasionally you’ll want to use the full browser width. For this, use <code class="language-plaintext highlighter-rouge">.l-screen</code>. You can also inset the element a little from the edge of the browser by using the inset variant.</p> <div class="fake-img l-screen"> <p>.l-screen</p> </div> <div class="fake-img l-screen-inset"> <p>.l-screen-inset</p> </div> <p>The final layout is for marginalia, asides, and footnotes. It does not interrupt the normal flow of <code class="language-plaintext highlighter-rouge">.l-body</code> sized text except on mobile screen sizes.</p> <div class="fake-img l-gutter"> <p>.l-gutter</p> </div> <hr/> <h2 id="other-typography">Other Typography?</h2> <p>Emphasis, aka italics, with <em>asterisks</em> (<code class="language-plaintext highlighter-rouge">*asterisks*</code>) or <em>underscores</em> (<code class="language-plaintext highlighter-rouge">_underscores_</code>).</p> <p>Strong emphasis, aka bold, with <strong>asterisks</strong> or <strong>underscores</strong>.</p> <p>Combined emphasis with <strong>asterisks and <em>underscores</em></strong>.</p> <p>Strikethrough uses two tildes. <del>Scratch this.</del></p> <ol> <li>First ordered list item</li> <li>Another item ⋅⋅* Unordered sub-list.</li> <li>Actual numbers don’t matter, just that it’s a number ⋅⋅1. Ordered sub-list</li> <li>And another item.</li> </ol> <p>⋅⋅⋅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).</p> <p>⋅⋅⋅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.)</p> <ul> <li>Unordered list can use asterisks</li> <li>Or minuses</li> <li>Or pluses</li> </ul> <p><a href="https://www.google.com">I’m an inline-style link</a></p> <p><a href="https://www.google.com" title="Google's Homepage">I’m an inline-style link with title</a></p> <p><a href="https://www.mozilla.org">I’m a reference-style link</a></p> <p><a href="../blob/master/LICENSE">I’m a relative reference to a repository file</a></p> <p><a href="http://slashdot.org">You can use numbers for reference-style link definitions</a></p> <p>Or leave it empty and use the <a href="http://www.reddit.com">link text itself</a>.</p> <p>URLs and URLs in angle brackets will automatically get turned into links. http://www.example.com or <a href="http://www.example.com">http://www.example.com</a> and sometimes example.com (but not on Github, for example).</p> <p>Some text to show that the reference links can follow later.</p> <p>Here’s our logo (hover to see the title text):</p> <p>Inline-style: <img src="https://github.com/adam-p/markdown-here/raw/master/src/common/images/icon48.png" alt="alt text" title="Logo Title Text 1"/></p> <p>Reference-style: <img src="https://github.com/adam-p/markdown-here/raw/master/src/common/images/icon48.png" alt="alt text" title="Logo Title Text 2"/></p> <p>Inline <code class="language-plaintext highlighter-rouge">code</code> has <code class="language-plaintext highlighter-rouge">back-ticks around</code> it.</p> <div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">var</span> <span class="nx">s</span> <span class="o">=</span> <span class="dl">"</span><span class="s2">JavaScript syntax highlighting</span><span class="dl">"</span><span class="p">;</span>
<span class="nf">alert</span><span class="p">(</span><span class="nx">s</span><span class="p">);</span>
</code></pre></div></div> <div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">s</span> <span class="o">=</span> <span class="sh">"</span><span class="s">Python syntax highlighting</span><span class="sh">"</span>
<span class="k">print</span> <span class="n">s</span>
</code></pre></div></div> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>No language indicated, so no syntax highlighting. 
But let's throw in a &lt;b&gt;tag&lt;/b&gt;.
</code></pre></div></div> <p>Colons can be used to align columns.</p> <table> <thead> <tr> <th>Tables</th> <th style="text-align: center">Are</th> <th style="text-align: right">Cool</th> </tr> </thead> <tbody> <tr> <td>col 3 is</td> <td style="text-align: center">right-aligned</td> <td style="text-align: right">$1600</td> </tr> <tr> <td>col 2 is</td> <td style="text-align: center">centered</td> <td style="text-align: right">$12</td> </tr> <tr> <td>zebra stripes</td> <td style="text-align: center">are neat</td> <td style="text-align: right">$1</td> </tr> </tbody> </table> <p>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.</p> <table> <thead> <tr> <th>Markdown</th> <th>Less</th> <th>Pretty</th> </tr> </thead> <tbody> <tr> <td><em>Still</em></td> <td><code class="language-plaintext highlighter-rouge">renders</code></td> <td><strong>nicely</strong></td> </tr> <tr> <td>1</td> <td>2</td> <td>3</td> </tr> </tbody> </table> <blockquote> <p>Blockquotes are very handy in email to emulate reply text. This line is part of the same quote.</p> </blockquote> <p>Quote break.</p> <blockquote> <p>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 <em>put</em> <strong>Markdown</strong> into a blockquote.</p> </blockquote> <p>Here’s a line for us to start with.</p> <p>This line is separated from the one above by two newlines, so it will be a <em>separate paragraph</em>.</p> <p>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 <em>same paragraph</em>.</p>]]></content><author><name>Albert Einstein</name></author><category term="sample-posts"/><category term="external-services"/><category term="blog-template"/><summary type="html"><![CDATA[An example of a distill-style blog post and main elements]]></summary></entry><entry><title type="html">Template: A Post with Github Metadata</title><link href="https://theprojectsguy.github.io/blog/2020/github-metadata/" rel="alternate" type="text/html" title="Template: A Post with Github Metadata"/><published>2020-09-28T21:01:00+00:00</published><updated>2020-09-28T21:01:00+00:00</updated><id>https://theprojectsguy.github.io/blog/2020/github-metadata</id><content type="html" xml:base="https://theprojectsguy.github.io/blog/2020/github-metadata/"><![CDATA[<p>A sample blog page that demonstrates the accessing of github meta data.</p> <h2 id="what-does-github-metadata-do">What does Github-MetaData do?</h2> <ul> <li>Propagates the site.github namespace with repository metadata</li> <li>Setting site variables : <ul> <li>site.title</li> <li>site.description</li> <li>site.url</li> <li>site.baseurl</li> </ul> </li> <li>Accessing the metadata - duh.</li> <li>Generating edittable links.</li> </ul> <h2 id="additional-reading">Additional Reading</h2> <ul> <li>If you’re recieving incorrect/missing data, you may need to perform a Github API<a href="https://github.com/jekyll/github-metadata/blob/master/docs/authentication.md"> authentication</a>.</li> <li>Go through this <a href="https://jekyll.github.io/github-metadata/">README</a> for more details on the topic.</li> <li><a href="https://github.com/jekyll/github-metadata/blob/master/docs/site.github.md">This page</a> highlights all the feilds you can access with github-metadata. <br/></li> </ul> <h2 id="example-metadata">Example MetaData</h2> <ul> <li>Host Name :</li> <li>URL :</li> <li>BaseURL :</li> <li>Archived :</li> <li>Contributors :</li> </ul>]]></content><author><name></name></author><category term="sample-posts"/><category term="external-services"/><summary type="html"><![CDATA[a quick run down on accessing github metadata.]]></summary></entry><entry><title type="html">Template: A Post with Twitter</title><link href="https://theprojectsguy.github.io/blog/2020/twitter/" rel="alternate" type="text/html" title="Template: A Post with Twitter"/><published>2020-09-28T15:12:00+00:00</published><updated>2020-09-28T15:12:00+00:00</updated><id>https://theprojectsguy.github.io/blog/2020/twitter</id><content type="html" xml:base="https://theprojectsguy.github.io/blog/2020/twitter/"><![CDATA[<p>A sample blog page that demonstrates the inclusion of Tweets/Timelines/etc.</p> <h1 id="tweet">Tweet</h1> <p>An example of displaying a tweet:</p> <div class="jekyll-twitter-plugin"><blockquote class="twitter-tweet"><p lang="sv" dir="ltr">jekyll-twitter-plugin (1.0.0): A Liquid tag plugin for Jekyll that renders Tweets from Twitter API <a href="http://t.co/m4EIQPM9h4">http://t.co/m4EIQPM9h4</a></p>&mdash; RubyGems (@rubygems) <a href="https://twitter.com/rubygems/status/518821243320287232?ref_src=twsrc%5Etfw">October 5, 2014</a></blockquote> <script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> </div> <h1 id="timeline">Timeline</h1> <p>An example of pulling from a timeline:</p> <div class="jekyll-twitter-plugin"><a class="twitter-timeline" data-width="500" data-tweet-limit="3" href="https://twitter.com/jekyllrb?ref_src=twsrc%5Etfw">Tweets by jekyllrb</a> <script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> </div> <h1 id="additional-details">Additional Details</h1> <p>For more details on using the plugin visit: <a href="https://github.com/rob-murray/jekyll-twitter-plugin">jekyll-twitter-plugin</a></p>]]></content><author><name></name></author><category term="sample-posts"/><category term="external-services"/><category term="formatting"/><category term="blog-template"/><summary type="html"><![CDATA[an example of a blog post with twitter]]></summary></entry><entry><title type="html">Template: A Post with Comments</title><link href="https://theprojectsguy.github.io/blog/2015/comments/" rel="alternate" type="text/html" title="Template: A Post with Comments"/><published>2015-10-20T15:59:00+00:00</published><updated>2015-10-20T15:59:00+00:00</updated><id>https://theprojectsguy.github.io/blog/2015/comments</id><content type="html" xml:base="https://theprojectsguy.github.io/blog/2015/comments/"><![CDATA[<p>This post shows how to add DISQUS comments.</p>]]></content><author><name></name></author><category term="sample-posts"/><category term="external-services"/><category term="blog-template"/><summary type="html"><![CDATA[an example of a blog post with comments]]></summary></entry><entry><title type="html">Template: A Post with Math</title><link href="https://theprojectsguy.github.io/blog/2015/math/" rel="alternate" type="text/html" title="Template: A Post with Math"/><published>2015-10-20T15:12:00+00:00</published><updated>2015-10-20T15:12:00+00:00</updated><id>https://theprojectsguy.github.io/blog/2015/math</id><content type="html" xml:base="https://theprojectsguy.github.io/blog/2015/math/"><![CDATA[<p>This theme supports rendering beautiful math in inline and display modes using <a href="https://www.mathjax.org/">MathJax 3</a> engine. You just need to surround your math expression with <code class="language-plaintext highlighter-rouge">$$</code>, like <code class="language-plaintext highlighter-rouge">$$ E = mc^2 $$</code>. If you leave it inside a paragraph, it will produce an inline expression, just like \(E = mc^2\).</p> <p>To use display mode, again surround your expression with <code class="language-plaintext highlighter-rouge">$$</code> and place it as a separate paragraph. Here is an example:</p> \[\sum_{k=1}^\infty |\langle x, e_k \rangle|^2 \leq \|x\|^2\] <p>You can also use <code class="language-plaintext highlighter-rouge">\begin{equation}...\end{equation}</code> instead of <code class="language-plaintext highlighter-rouge">$$</code> for display mode math. MathJax will automatically number equations:</p> <p>\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}</p> <p>and by adding <code class="language-plaintext highlighter-rouge">\label{...}</code> inside the equation environment, we can now refer to the equation using <code class="language-plaintext highlighter-rouge">\eqref</code>.</p> <p>Note that MathJax 3 is <a href="https://docs.mathjax.org/en/latest/upgrading/whats-new-3.0.html">a major re-write of MathJax</a> that brought a significant improvement to the loading and rendering speed, which is now <a href="http://www.intmath.com/cg5/katex-mathjax-comparison.php">on par with KaTeX</a>.</p>]]></content><author><name></name></author><category term="sample-posts"/><category term="formatting"/><category term="math"/><category term="blog-template"/><summary type="html"><![CDATA[an example of a blog post with some math]]></summary></entry><entry><title type="html">Template: A Post with Code</title><link href="https://theprojectsguy.github.io/blog/2015/code/" rel="alternate" type="text/html" title="Template: A Post with Code"/><published>2015-07-15T15:09:00+00:00</published><updated>2015-07-15T15:09:00+00:00</updated><id>https://theprojectsguy.github.io/blog/2015/code</id><content type="html" xml:base="https://theprojectsguy.github.io/blog/2015/code/"><![CDATA[<p>This theme implements a built-in Jekyll feature, the use of Rouge, for syntax highlighting. It supports more than 100 languages. This example is in C++. All you have to do is wrap your code in a liquid tag:</p> <p>{% highlight c++ linenos %} <br/> code code code <br/> {% endhighlight %}</p> <p>The keyword <code class="language-plaintext highlighter-rouge">linenos</code> triggers display of line numbers. Produces something like this:</p> <figure class="highlight"><pre><code class="language-c--" data-lang="c++"><table class="rouge-table"><tbody><tr><td class="gutter gl"><pre class="lineno">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
</pre></td><td class="code"><pre><span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span> <span class="k">const</span> <span class="o">*</span><span class="n">argv</span><span class="p">[])</span>
<span class="p">{</span>
    <span class="n">string</span> <span class="n">myString</span><span class="p">;</span>

    <span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="s">"input a string: "</span><span class="p">;</span>
    <span class="n">getline</span><span class="p">(</span><span class="n">cin</span><span class="p">,</span> <span class="n">myString</span><span class="p">);</span>
    <span class="kt">int</span> <span class="n">length</span> <span class="o">=</span> <span class="n">myString</span><span class="p">.</span><span class="n">length</span><span class="p">();</span>

    <span class="kt">char</span> <span class="n">charArray</span> <span class="o">=</span> <span class="k">new</span> <span class="kt">char</span> <span class="o">*</span> <span class="p">[</span><span class="n">length</span><span class="p">];</span>

    <span class="n">charArray</span> <span class="o">=</span> <span class="n">myString</span><span class="p">;</span>
    <span class="k">for</span><span class="p">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="n">length</span><span class="p">;</span> <span class="o">++</span><span class="n">i</span><span class="p">){</span>
        <span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">charArray</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">&lt;&lt;</span> <span class="s">" "</span><span class="p">;</span>
    <span class="p">}</span>

    <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
</pre></td></tr></tbody></table></code></pre></figure>]]></content><author><name></name></author><category term="sample-posts"/><category term="formatting"/><category term="code"/><category term="blog-template"/><summary type="html"><![CDATA[an example of a blog post with some code]]></summary></entry><entry><title type="html">Template: a post with images</title><link href="https://theprojectsguy.github.io/blog/2015/images/" rel="alternate" type="text/html" title="Template: a post with images"/><published>2015-05-15T21:01:00+00:00</published><updated>2015-05-15T21:01:00+00:00</updated><id>https://theprojectsguy.github.io/blog/2015/images</id><content type="html" xml:base="https://theprojectsguy.github.io/blog/2015/images/"><![CDATA[<p>This is an example post with image galleries.</p> <div class="row mt-3"> <div class="col-sm mt-3 mt-md-0"> <figure> <picture> <source class="responsive-img-srcset" media="(max-width: 480px)" srcset="/assets/img/9-480.webp"/> <source class="responsive-img-srcset" media="(max-width: 800px)" srcset="/assets/img/9-800.webp"/> <source class="responsive-img-srcset" media="(max-width: 1400px)" srcset="/assets/img/9-1400.webp"/> <img src="/assets/img/9.jpg" class="img-fluid rounded z-depth-1" width="auto" height="auto" onerror="this.onerror=null; $('.responsive-img-srcset').remove();"/> </picture> </figure> </div> <div class="col-sm mt-3 mt-md-0"> <figure> <picture> <source class="responsive-img-srcset" media="(max-width: 480px)" srcset="/assets/img/7-480.webp"/> <source class="responsive-img-srcset" media="(max-width: 800px)" srcset="/assets/img/7-800.webp"/> <source class="responsive-img-srcset" media="(max-width: 1400px)" srcset="/assets/img/7-1400.webp"/> <img src="/assets/img/7.jpg" class="img-fluid rounded z-depth-1" width="auto" height="auto" onerror="this.onerror=null; $('.responsive-img-srcset').remove();"/> </picture> </figure> </div> </div> <div class="caption"> A simple, elegant caption looks good between image rows, after each row, or doesn't have to be there at all. </div> <p>Images can be made zoomable. Simply add <code class="language-plaintext highlighter-rouge">data-zoomable</code> to <code class="language-plaintext highlighter-rouge">&lt;img&gt;</code> tags that you want to make zoomable.</p> <div class="row mt-3"> <div class="col-sm mt-3 mt-md-0"> <figure> <picture> <source class="responsive-img-srcset" media="(max-width: 480px)" srcset="/assets/img/8-480.webp"/> <source class="responsive-img-srcset" media="(max-width: 800px)" srcset="/assets/img/8-800.webp"/> <source class="responsive-img-srcset" media="(max-width: 1400px)" srcset="/assets/img/8-1400.webp"/> <img src="/assets/img/8.jpg" class="img-fluid rounded z-depth-1" width="auto" height="auto" data-zoomable="" onerror="this.onerror=null; $('.responsive-img-srcset').remove();"/> </picture> </figure> </div> <div class="col-sm mt-3 mt-md-0"> <figure> <picture> <source class="responsive-img-srcset" media="(max-width: 480px)" srcset="/assets/img/10-480.webp"/> <source class="responsive-img-srcset" media="(max-width: 800px)" srcset="/assets/img/10-800.webp"/> <source class="responsive-img-srcset" media="(max-width: 1400px)" srcset="/assets/img/10-1400.webp"/> <img src="/assets/img/10.jpg" class="img-fluid rounded z-depth-1" width="auto" height="auto" data-zoomable="" onerror="this.onerror=null; $('.responsive-img-srcset').remove();"/> </picture> </figure> </div> </div> <p>The rest of the images in this post are all zoomable, arranged into different mini-galleries.</p> <div class="row mt-3"> <div class="col-sm mt-3 mt-md-0"> <figure> <picture> <source class="responsive-img-srcset" media="(max-width: 480px)" srcset="/assets/img/11-480.webp"/> <source class="responsive-img-srcset" media="(max-width: 800px)" srcset="/assets/img/11-800.webp"/> <source class="responsive-img-srcset" media="(max-width: 1400px)" srcset="/assets/img/11-1400.webp"/> <img src="/assets/img/11.jpg" class="img-fluid rounded z-depth-1" width="auto" height="auto" data-zoomable="" onerror="this.onerror=null; $('.responsive-img-srcset').remove();"/> </picture> </figure> </div> <div class="col-sm mt-3 mt-md-0"> <figure> <picture> <source class="responsive-img-srcset" media="(max-width: 480px)" srcset="/assets/img/12-480.webp"/> <source class="responsive-img-srcset" media="(max-width: 800px)" srcset="/assets/img/12-800.webp"/> <source class="responsive-img-srcset" media="(max-width: 1400px)" srcset="/assets/img/12-1400.webp"/> <img src="/assets/img/12.jpg" class="img-fluid rounded z-depth-1" width="auto" height="auto" data-zoomable="" onerror="this.onerror=null; $('.responsive-img-srcset').remove();"/> </picture> </figure> </div> <div class="col-sm mt-3 mt-md-0"> <figure> <picture> <source class="responsive-img-srcset" media="(max-width: 480px)" srcset="/assets/img/7-480.webp"/> <source class="responsive-img-srcset" media="(max-width: 800px)" srcset="/assets/img/7-800.webp"/> <source class="responsive-img-srcset" media="(max-width: 1400px)" srcset="/assets/img/7-1400.webp"/> <img src="/assets/img/7.jpg" class="img-fluid rounded z-depth-1" width="auto" height="auto" data-zoomable="" onerror="this.onerror=null; $('.responsive-img-srcset').remove();"/> </picture> </figure> </div> </div>]]></content><author><name></name></author><category term="sample-posts"/><category term="formatting"/><category term="images"/><category term="blog-template"/><summary type="html"><![CDATA[this is what included images could look like]]></summary></entry></feed>