This is the post primum. The setup is meant to be as simple as possible:
- Write markdown
- Run Hugo
- Deploy to Vercel
Why a blog
You can just do things.
Also I’ve been procrastinating starting one for a while and thought my GSoC selection would be as good of an excuse as any to finally begin. I’ll be posting more about my project here and on the devlogs as the coding period starts today.
Expect semi-regular devlogs for the smaller things, and long term ones whenever I feel like it. Subjects may range from whatever new technology I’m learning, the state of AI or security, and musings on interesting media I may watch or read.
The stack
Hugo generates the site from markdown files. The theme was inspired partially by my main website (lverma.com)
Deployed to Vercel on every push.
The workflow (in case I forget):
# new post
hugo new blog/my-post.md
# preview
hugo server -D
# deploy (automatic on git push)
git add content/blog/my-post.md
git commit -m "post: my post title"
git push
Math works
Inline: $E = mc^2$, or the Euler identity $e^{i\pi} + 1 = 0$.
Display:
$$ \int_{-\infty}^{\infty} e^{-x^2} dx = \sqrt{\pi} $$
The Fourier transform (fuck you ECE 2123):
$$ \hat{f}(\xi) = \int_{-\infty}^{\infty} f(x) e^{-2\pi i x \xi} dx $$
Syntax highlighting
fn sieve(limit: usize) -> Vec<usize> {
let mut is_prime = vec![true; limit + 1];
is_prime[0] = false;
if limit > 0 { is_prime[1] = false; }
let mut i = 2;
while i * i <= limit {
if is_prime[i] {
let mut j = i * i;
while j <= limit {
is_prime[j] = false;
j += i;
}
}
i += 1;
}
is_prime.iter().enumerate()
.filter(|(_, &p)| p)
.map(|(i, _)| i)
.collect()
}
def fib(n: int) -> int:
a, b = 0, 1
for _ in range(n):
a, b = b, a + b
return a
Images work

That’s it for now. See you soon!