This is a sample post showing everything the blog supports. Delete it once you publish your own. To start a new post, run ./new-post.sh "My Title" tag1 tag2.

Math (LaTeX)

Inline math like $\nabla \cdot \mathbf{B} = 0$ works, and so do display blocks:

\[\hat{x}_{k} = \hat{x}_{k}^{-} + K_k \left( z_k - H \hat{x}_{k}^{-} \right)\]

That’s the Kalman filter measurement update — handy for sensor fusion.

Images

An image with a caption. Use width to constrain it.
An image with a caption. Use width to constrain it.

Video

Embed YouTube, Vimeo, or a hosted .mp4:

Drop in any YouTube ID.

GIFs

Use a .gif, or — lighter and smoother — a silent looping .mp4:

{% include gif.html src="/images/demo.gif" caption="A looping demo." %}
{% include gif.html mp4="/images/demo.mp4" caption="Same, but as mp4." %}

Code

def fuse(imu, lidar):
    return kalman_update(imu, lidar)

Everything above is plain Markdown plus the figure / video / gif includes.

Jupyter notebooks

Drop a .ipynb anywhere under assets/notebooks/ and embed it inline:

{% jupyter_notebook "/assets/notebooks/demo.ipynb" %}

Renders at build time — markdown cells, syntax-highlighted code, stdout, errors, plots (PNG/SVG), HTML (dataframes), and LaTeX. Live example:

Notebook embed demo

This .ipynb is rendered statically at Jekyll build time. Markdown, code, stdout, errors, plots, and DataFrames all work.

In [1]:
msg = 'Hello from a notebook cell.'
print(msg)
Hello from a notebook cell.
In [2]:
def answer():
    return 6 * 7

answer()
Out[2]:
42

Math also renders (MathJax already loaded):

\[J(\theta) = \tfrac{1}{2} \sum_i (h_\theta(x_i) - y_i)^2\]
In [3]:
1 / 0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero