<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"><channel><title>Vinayak Mehta</title><link>https://vinayak.io/</link><description></description><lastBuildDate>Sun, 19 Jan 2025 15:00:00 +0530</lastBuildDate><item><title>How to build a notebook-based data platform</title><link>https://vinayak.io/2025/01/19/notebookops/</link><description>&lt;p&gt;This post is based on my &lt;a href="https://www.youtube.com/watch?v=yfXfr_tcZ2g"&gt;JupyterCon 2020 talk&lt;/a&gt;. I decided to write it 5 years later, because I think that notebook-based data platforms are relevant, now more than ever as AI helps us do more things, to enable &lt;em&gt;citizen data science&lt;/em&gt; and seamless collaboration in large orgs. It's a …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Sun, 19 Jan 2025 15:00:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2025-01-19:/2025/01/19/notebookops/</guid><category>blog</category><category>jupyter</category><category>airflow</category><category>notebook</category></item><item><title>Cerfs-volants dans le ciel de Delhi</title><link>https://vinayak.io/2025/01/12/cerfs-volants/</link><description>&lt;p&gt;J'ai besoin de présenter un exposé sur un sujet peu connu de mon pays dans mon cours de français cette semaine. J'ai choisi comme sujet : le vol des cerfs-volants dans le ciel pour célébrer la fête de l'indépendance à Delhi, d'où je viens. J'ai essayé de faire des recherches mais …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Sun, 12 Jan 2025 15:00:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2025-01-12:/2025/01/12/cerfs-volants/</guid><category>blog</category><category>français</category></item><item><title>IPychat — An AI extension for IPython to make it work like Cursor</title><link>https://vinayak.io/2025/01/02/ipychat/</link><description>&lt;div style="text-align: center;"&gt;
    &lt;figure&gt;
        &lt;img style="width: 768px;" src="/files/meta-images/ipychat.png"&gt;
    &lt;/figure&gt;
&lt;/div&gt;

&lt;p&gt;Recently, I've been exploring geospatial data about Paris. Although I've seen others work with this type of data and know basic terms like shapefiles and polygons, this is my first time working with it myself. I've been looking up terms and going through docs to learn how various geospatial data …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Thu, 02 Jan 2025 00:00:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2025-01-02:/2025/01/02/ipychat/</guid><category>blog</category><category>python</category><category>llm</category></item><item><title>Running goals on my TRMNL</title><link>https://vinayak.io/2024/12/15/trmnl-running/</link><description>&lt;p&gt;Last month, I saw &lt;a href="https://x.com/0xferruccio"&gt;Ferruccio&lt;/a&gt; with a &lt;a href="https://usetrmnl.com/"&gt;TRMNL&lt;/a&gt; and it picqued my interest because I'd been thinking about putting some things that I always wanted top of mind right in front of me. For example, my running goals that I track using the Strava widget on my phone.&lt;/p&gt;
&lt;div style="display: flex; justify-content: center; align-items: center; width: 100%;"&gt;
    &lt;figure&gt;
        &lt;img style="width: 192px;" src="/files/strava-goals.jpg"&gt;
    &lt;/figure&gt;
&lt;/div&gt;

&lt;p&gt;After some …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Sun, 15 Dec 2024 00:00:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2024-12-15:/2024/12/15/trmnl-running/</guid><category>blog</category><category>trmnl</category><category>running</category></item><item><title>Houseplant: Database Migrations for ClickHouse</title><link>https://vinayak.io/2024/12/03/houseplant-database-migrations-for-clickhouse/</link><description>&lt;div style="text-align: center;"&gt;
    &lt;figure&gt;
        &lt;img style="width: 768px;" src="/files/meta-images/houseplant.png"&gt;
    &lt;/figure&gt;
&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;Originally published on the &lt;a href="https://www.june.so/blog/houseplant-database-migrations-for-clickhouse"&gt;June blog&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;At June, we use ClickHouse as our analytics database to process billions of user events and generate real-time insights for our customers. While ClickHouse is incredibly powerful for analytical workloads, managing database schema changes has been a pain in our dev workflow.&lt;/p&gt;
&lt;p&gt;Unlike traditional …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Tue, 03 Dec 2024 00:00:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2024-12-03:/2024/12/03/houseplant-database-migrations-for-clickhouse/</guid><category>blog</category><category>clickhouse</category></item><item><title>First sea swim</title><link>https://vinayak.io/2022/07/31/first-sea-swim/</link><description>&lt;div style="text-align: center;"&gt;
    &lt;figure&gt;
        &lt;img style="width: 768px;" src="/files/meta-images/second-sea-swim.jpg"&gt;
        &lt;figcaption&gt;Cap d'Antibes&lt;/figcaption&gt;
    &lt;/figure&gt;
&lt;/div&gt;

&lt;p&gt;In May 2022, I swam in the sea for the first time in my life. Before that, I'd only swam in pools (&lt;a href="https://vinayak.io/2018/10/31/last-year-tonight-nh7-weekender-meghalaya/"&gt;except for that one time&lt;/a&gt; in a &lt;a href="https://rorytravelsanywhere.com/meghalaya-cherapunjee-article/"&gt;piscine naturelle&lt;/a&gt; in Nongriat), so this experience was both exhilarating and scary at the same time.&lt;/p&gt;
&lt;p&gt;Exhilarating because I …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Sun, 31 Jul 2022 00:00:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2022-07-31:/2022/07/31/first-sea-swim/</guid><category>blog</category><category>experience</category></item><item><title>Releasing Camelot v0.10.0</title><link>https://vinayak.io/2021/07/12/releasing-camelot-v0-10-0/</link><description>&lt;p&gt;I'm happy to announce that &lt;a href="https://pypi.org/project/camelot-py/0.10.1/"&gt;Camelot v0.10.0&lt;/a&gt; is out!&lt;/p&gt;
&lt;h2&gt;tl;dr&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;You can now choose between two &lt;a href="https://camelot-py.readthedocs.io/en/master/user/advanced.html#use-alternate-image-conversion-backends"&gt;image conversion backends&lt;/a&gt;, or supply your own.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pip install camelot-py[base]&lt;/code&gt; instead of &lt;code&gt;pip install camelot-py[cv]&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Background&lt;/h2&gt;
&lt;p&gt;Camelot uses &lt;code&gt;ghostscript&lt;/code&gt; to convert a PDF page into a PNG so that …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Mon, 12 Jul 2021 05:00:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2021-07-12:/2021/07/12/releasing-camelot-v0-10-0/</guid><category>blog</category><category>python</category><category>camelot</category></item><item><title>How to create a desktop entry for an AppImage</title><link>https://vinayak.io/2021/02/09/how-to-create-a-desktop-entry-for-an-appimage/</link><description>&lt;p&gt;I've been using &lt;a href="https://fraidyc.at"&gt;Fraidycat&lt;/a&gt; as an RSS reader for some time. The project puts out an &lt;code&gt;AppImage&lt;/code&gt; as a &lt;a href="https://github.com/kickscondor/fraidycat/releases/tag/v1.1.7"&gt;release asset&lt;/a&gt;, which is a neat way for distributing software on Linux because it does not need root privileges to install things in system directories.&lt;/p&gt;
&lt;p&gt;After making a &lt;code&gt;Software.AppImage&lt;/code&gt; file …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Tue, 09 Feb 2021 05:00:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2021-02-09:/2021/02/09/how-to-create-a-desktop-entry-for-an-appimage/</guid><category>blog</category><category>linux</category><category>ubuntu</category></item><item><title>Day 60 — NEVER GRADUATE!</title><link>https://vinayak.io/2020/11/02/day-60-never-graduate/</link><description>&lt;p&gt;Friday was the last day of my batch :(&lt;/p&gt;
&lt;p&gt;I've been writing these posts a day or two after the actual day, but this one is slightly late because my laptop charger gave up on me while I was hanging out with Edith and Adam after the Halloween party on Friday …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Mon, 02 Nov 2020 23:59:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-11-02:/2020/11/02/day-60-never-graduate/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 59 — The littlest Jupyter console in Rust!</title><link>https://vinayak.io/2020/11/01/day-59-the-littlest-jupyter-console-in-rust/</link><description>&lt;p&gt;Today I continued working on translating &lt;a href="https://vinayak.io/2020/10/28/day-57-cutypr-an-even-littler-jupyter-console/"&gt;cutypr&lt;/a&gt; to Rust.&lt;/p&gt;
&lt;p&gt;I was able to serialize and sign messages, and send them to the kernel, but the kernel kept saying that the message has an invalid signature :( I found it difficult to debug and check if the (message signature) bytes sent from …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Sun, 01 Nov 2020 23:55:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-11-01:/2020/11/01/day-59-the-littlest-jupyter-console-in-rust/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 58 — I miss the Python standard library</title><link>https://vinayak.io/2020/11/01/day-58-i-miss-the-python-standard-library/</link><description>&lt;p&gt;Today I worked on translating &lt;a href="https://vinayak.io/2020/10/28/day-57-cutypr-an-even-littler-jupyter-console/"&gt;cutypr&lt;/a&gt; to Rust.&lt;/p&gt;
&lt;p&gt;I found that I could use &lt;a href="https://pyo3.rs"&gt;pyo3&lt;/a&gt; to start the IPython kernel from Rust! So I wrote a &lt;code&gt;start_kernel()&lt;/code&gt; Python function to start the IPython kernel, returned some useful information (the key required to sign messages + &lt;a href="https://vinayak.io/2020/10/27/day-56-the-littlest-jupyter-console/"&gt;ports for all kernel channels&lt;/a&gt;) from …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Sun, 01 Nov 2020 23:51:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-11-01:/2020/11/01/day-58-i-miss-the-python-standard-library/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 57 — cutypr: an even littler Jupyter console</title><link>https://vinayak.io/2020/10/28/day-57-cutypr-an-even-littler-jupyter-console/</link><description>&lt;p&gt;Today I read the first chapter of the &lt;a href="https://zguide.zeromq.org/"&gt;zeromq guide&lt;/a&gt; and looked at the client-server and pub-sub examples! I love this paragraph from the preface (sounds so similar to Derek Sivers's &lt;a href="https://sive.rs/cdbe"&gt;CD Baby email&lt;/a&gt;!):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We took a normal TCP socket, injected it with a mix of radioactive isotopes stolen from …&lt;/p&gt;&lt;/blockquote&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Wed, 28 Oct 2020 23:59:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-10-28:/2020/10/28/day-57-cutypr-an-even-littler-jupyter-console/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 56 — The littlest Jupyter console</title><link>https://vinayak.io/2020/10/27/day-56-the-littlest-jupyter-console/</link><description>&lt;p&gt;This week I'm planning to build a terminal frontend for Jupyter (in Rust!) so today I started looking into how Jupyter works!&lt;/p&gt;
&lt;p&gt;I found &lt;a href="https://jupyter-client.readthedocs.io/en/stable/messaging.html"&gt;this doc&lt;/a&gt; which shows how messaging works in Jupyter. When we start a &lt;a href="https://github.com/jupyter/jupyter_console/"&gt;&lt;code&gt;jupyter_console&lt;/code&gt;&lt;/a&gt; (like IPython), it starts a Python kernel in the "backend".&lt;/p&gt;
&lt;p&gt;The kernel …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Tue, 27 Oct 2020 23:59:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-10-27:/2020/10/27/day-56-the-littlest-jupyter-console/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 55 — Moar Rust reading!</title><link>https://vinayak.io/2020/10/26/day-55-moar-rust-reading/</link><description>&lt;p&gt;Today I read up on &lt;a href="https://doc.rust-lang.org/book/ch05-00-structs.html"&gt;structs&lt;/a&gt;, &lt;a href="https://doc.rust-lang.org/book/ch06-00-enums.html"&gt;enums, and pattern matching&lt;/a&gt; in the Rust book. I also did some &lt;code&gt;rustlings&lt;/code&gt;, and read a lot of Rust blog posts to figure out what I should work on in my last week at RC! I want to build a small project to get …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Mon, 26 Oct 2020 23:55:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-10-26:/2020/10/26/day-55-moar-rust-reading/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 54 — Rust ownership and Python garbage collection</title><link>https://vinayak.io/2020/10/25/day-54-rust-ownership-and-python-garbage-collection/</link><description>&lt;p&gt;Today I read the &lt;a href="https://doc.rust-lang.org/book/ch04-00-understanding-ownership.html"&gt;chapter on ownership&lt;/a&gt; in the Rust book. In this post, I'll try to summarize what I learned for future me!&lt;/p&gt;
&lt;h2&gt;Ownership in Rust&lt;/h2&gt;
&lt;p&gt;Ownership is Rust's central feature and the chapter explains how it allows Rust to make memory safety guarantees without needing a garbage collector …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Sun, 25 Oct 2020 23:55:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-10-25:/2020/10/25/day-54-rust-ownership-and-python-garbage-collection/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 53 — A tool to list PE file dependencies</title><link>https://vinayak.io/2020/10/23/day-53-a-tool-to-list-pe-file-dependencies/</link><description>&lt;p&gt;Today I read up on some &lt;code&gt;numpy&lt;/code&gt; docs to try and find how they bundle the OpenBLAS DLL with the &lt;code&gt;numpy&lt;/code&gt; wheel. I've updated the &lt;a href="https://vinayak.io/2020/10/21/day-51-bundling-dlls-with-windows-wheels-the-package-data-way/"&gt;day 51 post&lt;/a&gt; with the things that I found.&lt;/p&gt;
&lt;p&gt;I also packaged the &lt;a href="https://github.com/vinayak-mehta/pdftopng/blob/6e4a9d589228f66dfbb6f0197740b0b7c1bef9b3/scripts/wheel_repair.py#L28"&gt;&lt;code&gt;find_dll_dependencies&lt;/code&gt;&lt;/a&gt; function from &lt;code&gt;wheel_repair.py&lt;/code&gt; into a convenient &lt;a href="https://github.com/vinayak-mehta/pedep"&gt;CLI tool&lt;/a&gt; which can …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Fri, 23 Oct 2020 23:55:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-10-23:/2020/10/23/day-53-a-tool-to-list-pe-file-dependencies/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 52 — Bundling DLLs with Windows wheels (the DLL mangling way)</title><link>https://vinayak.io/2020/10/22/day-52-bundling-dlls-with-windows-wheels-the-dll-mangling-way/</link><description>&lt;p&gt;Yesterday, after reading about the &lt;a href="https://docs.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-search-order"&gt;DLL Search Order on Windows&lt;/a&gt; and &lt;a href="https://en.wikipedia.org/wiki/DLL_Hell"&gt;DLL Hell&lt;/a&gt;, I got concerned about shipping DLLs as &lt;code&gt;package_data&lt;/code&gt;, because they might clash with other DLLs with same names that are shipped by other Windows wheels.&lt;/p&gt;
&lt;p&gt;This is the gist of the whole issue: &lt;em&gt;If a DLL with …&lt;/em&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Thu, 22 Oct 2020 18:00:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-10-22:/2020/10/22/day-52-bundling-dlls-with-windows-wheels-the-dll-mangling-way/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 51 — Bundling DLLs with Windows wheels (the package_data way)</title><link>https://vinayak.io/2020/10/21/day-51-bundling-dlls-with-windows-wheels-the-package-data-way/</link><description>&lt;p&gt;Last week, I was able to &lt;a href="https://vinayak.io/2020/10/14/day-45b-how-to-almost-build-a-c-extension-wheel-on-windows-with-external-dependencies/"&gt;build pdftopng on Windows&lt;/a&gt;, but the extension worked only when all the DLLs it depended on were kept in the same directory as the PYD (&lt;a href="https://docs.python.org/3/faq/windows.html#is-a-pyd-file-the-same-as-a-dll"&gt;which is basically a DLL&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;At the end of that post, I had some questions around bundling DLLs with …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Wed, 21 Oct 2020 23:55:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-10-21:/2020/10/21/day-51-bundling-dlls-with-windows-wheels-the-package-data-way/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 50 — `pdftopng` works!</title><link>https://vinayak.io/2020/10/20/day-50-pdftopng-works/</link><description>&lt;p&gt;Today I created a test PR to &lt;a href="https://github.com/camelot-dev/camelot/pull/198"&gt;replace &lt;code&gt;ghostscript&lt;/code&gt; with &lt;code&gt;pdftopng&lt;/code&gt;&lt;/a&gt;, and &lt;a href="https://travis-ci.org/github/camelot-dev/camelot/jobs/736324927"&gt;most tests passed&lt;/a&gt;! The ones that failed have coordinates hardcoded in them. I'll just need to add a small tolerance in that float comparison and everything should be good to go! Not quite, I need to build Windows …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Tue, 20 Oct 2020 23:51:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-10-20:/2020/10/20/day-50-pdftopng-works/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 49 — JupyterCon!</title><link>https://vinayak.io/2020/10/17/day-49-jupytercon/</link><description>&lt;p&gt;For the past 4 days, I've been spending some time at JupyterCon! It's been great listening to talks and looking at all the things people are building with Jupyter! All of the chat has been happening on the JupyterCon &lt;a href="https://mattermost.org/"&gt;Mattermost&lt;/a&gt; instance. Thank you to the organizers for all their work …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Sat, 17 Oct 2020 23:59:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-10-17:/2020/10/17/day-49-jupytercon/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 48 — Curlyboi walks into the Cheese Shop</title><link>https://vinayak.io/2020/10/17/day-48-curlyboi-walks-into-the-cheese-shop/</link><description>&lt;p&gt;I made Linux and MacOS wheels for &lt;code&gt;curlyboi&lt;/code&gt; and uploaded them to PyPI! You can now install curlyboi using:&lt;/p&gt;
&lt;pre&gt;&lt;code class="plaintext"&gt;
  $ pip install curlyboi

&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Since I used &lt;code&gt;pybind11&lt;/code&gt; (which works with C++ code) to wrap &lt;code&gt;curlyboi&lt;/code&gt;, I had to rename all the &lt;code&gt;.c&lt;/code&gt; files to &lt;code&gt;.cpp&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;I ran into an error when …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Sat, 17 Oct 2020 23:55:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-10-17:/2020/10/17/day-48-curlyboi-walks-into-the-cheese-shop/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 47 — What? Snek is evolving! Congratulations! Your snek evolved into Curlyboi!</title><link>https://vinayak.io/2020/10/17/day-47-what-snek-is-evolving-congratulations-your-snek-evolved-into-curlyboi/</link><description>&lt;p&gt;Recently I found this &lt;a href="https://github.com/jvns/snake"&gt;snake game&lt;/a&gt; by Julia Evans and thought that it might be fun to go through it to learn more about large-ish C projects and &lt;code&gt;ncurses&lt;/code&gt;! I also paired with Edith (who is writing her own text editor from scratch!) to walk through the code and understand …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Sat, 17 Oct 2020 23:51:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-10-17:/2020/10/17/day-47-what-snek-is-evolving-congratulations-your-snek-evolved-into-curlyboi/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 46 — Oh no! A bug :(</title><link>https://vinayak.io/2020/10/15/day-46-oh-no-a-bug/</link><description>&lt;p&gt;Today I read through some open issues on &lt;code&gt;camelot&lt;/code&gt;, and &lt;a href="https://github.com/camelot-dev/camelot/issues/193"&gt;found a bug&lt;/a&gt; for when you install it from &lt;code&gt;conda-forge&lt;/code&gt;. I'd assumed that installing &lt;code&gt;ghostscript&lt;/code&gt; from &lt;code&gt;conda-forge&lt;/code&gt; installs all of its dependencies. It does, but looks like all the those depedencies are statically linked into one &lt;code&gt;gs&lt;/code&gt; executable.&lt;/p&gt;
&lt;p&gt;This would've …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Thu, 15 Oct 2020 23:59:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-10-15:/2020/10/15/day-46-oh-no-a-bug/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 45b — How to (almost) build a C extension wheel on Windows (with external dependencies)</title><link>https://vinayak.io/2020/10/14/day-45b-how-to-almost-build-a-c-extension-wheel-on-windows-with-external-dependencies/</link><description>&lt;p&gt;I looked into how to build C extension wheels on Windows over the weekend. Since there isn't a &lt;a href="https://github.com/fastai/fastmac/"&gt;fastmac&lt;/a&gt; equivalent to get a Windows machine for debugging, I booted up Windows on my laptop after a really long time! I need to find a &lt;code&gt;fastwin&lt;/code&gt; or &lt;code&gt;winfast&lt;/code&gt;!&lt;/p&gt;
&lt;h2&gt;Installation&lt;/h2&gt;
&lt;h3&gt;Visual Studio …&lt;/h3&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Wed, 14 Oct 2020 20:30:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-10-14:/2020/10/14/day-45b-how-to-almost-build-a-c-extension-wheel-on-windows-with-external-dependencies/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 45 — I have Linux and macOS wheels!</title><link>https://vinayak.io/2020/10/13/day-45-i-have-linux-and-macos-wheels/</link><description>&lt;p&gt;Today I continued my quest of packaging my &lt;a href="https://github.com/vinayak-mehta/poppler-utils"&gt;Python C extension&lt;/a&gt; for multiple OSes. Yesterday while doing a packaging "test run" with the &lt;code&gt;curses&lt;/code&gt; "hello world" program, I found that &lt;code&gt;curses&lt;/code&gt; is not supported on Windows (it should work with WSL, but not with the "default" Windows terminal I guess …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Tue, 13 Oct 2020 23:55:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-10-13:/2020/10/13/day-45-i-have-linux-and-macos-wheels/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 44 — Packaging Driven Development</title><link>https://vinayak.io/2020/10/12/day-44-packaging-driven-development/</link><description>&lt;p&gt;Today I started looking into building cross-platform wheels for &lt;a href="https://vinayak.io/2020/10/07/day-42-an-answer-ultimate-question-how-to-convert-a-pdf-to-a-png-in-python/"&gt;my Python C extension&lt;/a&gt;. I've never built binary extension wheels so I decided to start simple by building wheels for &lt;a href="https://github.com/vinayak-mehta/onix"&gt;this snake game&lt;/a&gt; I want to write in C. Right now it's just a "hello world" &lt;code&gt;ncurses&lt;/code&gt; program.&lt;/p&gt;
&lt;p&gt;I started looking …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Mon, 12 Oct 2020 23:55:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-10-12:/2020/10/12/day-44-packaging-driven-development/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 43 — Mysterious PEPs and where to find them</title><link>https://vinayak.io/2020/10/07/day-43-mysterious-peps-and-where-to-find-them/</link><description>&lt;p&gt;I've been reading (and forgetting about) a lot of PEPs lately. When you read a PEP, it mentions how "this" thing was defined in "this" PEP, and how "that" thing was defined in "this other" PEP. So I thought that it would be cool to look at all the PEPs …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Wed, 07 Oct 2020 23:59:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-10-07:/2020/10/07/day-43-mysterious-peps-and-where-to-find-them/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 42 — I have an answer to the ultimate question of how to convert a PDF to a PNG in Python!</title><link>https://vinayak.io/2020/10/07/day-42-an-answer-ultimate-question-how-to-convert-a-pdf-to-a-png-in-python/</link><description>&lt;p&gt;Yesterday I paired with Ilia to walk through the &lt;a href="https://github.com/freedesktop/poppler/blob/master/utils/pdftoppm.cc"&gt;&lt;code&gt;pdftoppm&lt;/code&gt; code&lt;/a&gt;, and we identified some code that wasn't required to wrap &lt;code&gt;pdftoppm&lt;/code&gt;. I also wrapped a "hello world" &lt;code&gt;ncurses&lt;/code&gt; &lt;em&gt;game&lt;/em&gt; with &lt;code&gt;pybind11&lt;/code&gt;!&lt;/p&gt;
&lt;p&gt;Today I started looking into &lt;code&gt;pdftoppm&lt;/code&gt; again and commented some code (like command-line argument parsing and JPEG support …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Wed, 07 Oct 2020 23:55:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-10-07:/2020/10/07/day-42-an-answer-ultimate-question-how-to-convert-a-pdf-to-a-png-in-python/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 41 — Exploring pybind11 with a snek</title><link>https://vinayak.io/2020/10/06/day-41-exploring-pybind11-with-a-snek/</link><description>&lt;p&gt;Today I paired with Ilia to walk through the &lt;a href="https://github.com/freedesktop/poppler/"&gt;&lt;code&gt;poppler&lt;/code&gt;&lt;/a&gt; codebase. This was of great help as I don't have a lot of experience navigating through large C/C++ codebases. I got to learn about how &lt;code&gt;cmake&lt;/code&gt; and C++ preprocessor directives work!&lt;/p&gt;
&lt;p&gt;We also walked through the &lt;code&gt;pdftoppm&lt;/code&gt; code to …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Tue, 06 Oct 2020 23:55:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-10-06:/2020/10/06/day-41-exploring-pybind11-with-a-snek/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 40 — Playing with poppler utils</title><link>https://vinayak.io/2020/10/05/day-40-playing-with-poppler-utils/</link><description>&lt;p&gt;Today I replaced some &lt;code&gt;ghostscript&lt;/code&gt; code in &lt;code&gt;camelot&lt;/code&gt; with a &lt;code&gt;pdftoppm&lt;/code&gt; subprocess call just to see if the tests pass. They did! I think &lt;code&gt;poppler&lt;/code&gt; could be the &lt;code&gt;ghostscript&lt;/code&gt; alternative that I'm looking for!&lt;/p&gt;
&lt;pre&gt;&lt;code class="plaintext"&gt;
  pdftoppm -r 300 -png -singlefile foo.pdf foo

&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;That got me all excited to look into …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Mon, 05 Oct 2020 23:55:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-10-05:/2020/10/05/day-40-playing-with-poppler-utils/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 39 — manylinux is awesome!</title><link>https://vinayak.io/2020/10/05/day-39-manylinux-is-awesome/</link><description>&lt;p&gt;Today I watched these &lt;a href="https://www.youtube.com/watch?v=02aAZ8u3wEQ"&gt;awesome&lt;/a&gt; &lt;a href="https://www.youtube.com/watch?v=-j4lolWgD6Q"&gt;talks&lt;/a&gt; on wheel building by Elana Hashman and Paul Kehrer. I also read PEPs &lt;a href="https://www.python.org/dev/peps/pep-0513/"&gt;513&lt;/a&gt;, &lt;a href="https://www.python.org/dev/peps/pep-0517/"&gt;571&lt;/a&gt;, &lt;a href="https://www.python.org/dev/peps/pep-0599/"&gt;599&lt;/a&gt;, and &lt;a href="https://www.python.org/dev/peps/pep-0600/"&gt;600&lt;/a&gt; where I learned about &lt;code&gt;manylinux&lt;/code&gt;, and how it solved a problem I used to face a lot! It's the problem of installing Python packages that contain …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Mon, 05 Oct 2020 22:00:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-10-05:/2020/10/05/day-39-manylinux-is-awesome/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 38 — What's inside a Python wheel?</title><link>https://vinayak.io/2020/10/04/day-38-whats-inside-a-python-wheel/</link><description>&lt;p&gt;Today I read &lt;a href="https://www.python.org/dev/peps/pep-0427/"&gt;PEP 427&lt;/a&gt; (and other PEPs mentioned in there) to learn more about Python wheel format! There are two types of distribution formats in Python - a source distribution, and a built distribution. The wheel format belongs to the second category in which things are already &lt;em&gt;built&lt;/em&gt;, ready to …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Sun, 04 Oct 2020 23:55:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-10-04:/2020/10/04/day-38-whats-inside-a-python-wheel/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 37 — A rustup doc for Python!</title><link>https://vinayak.io/2020/10/01/day-37-a-rustup-doc-for-python/</link><description>&lt;p&gt;When I was &lt;a href="https://vinayak.io/2020/08/26/day-13-hello-rust/"&gt;trying to learn Rust&lt;/a&gt; (I need to get back :( ) some weeks ago, I really liked how I was able to install every tool I needed to write Rust with just one &lt;code&gt;curl&lt;/code&gt; command! I also loved the &lt;code&gt;rustup doc&lt;/code&gt; command which opened the docs for my installed …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Thu, 01 Oct 2020 23:59:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-10-01:/2020/10/01/day-37-a-rustup-doc-for-python/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 36 — Moar Python C extension talks!</title><link>https://vinayak.io/2020/10/01/day-36-moar-python-c-extension-talks/</link><description>&lt;p&gt;Today I spent most of my time watching some talks on writing Python C extensions. Every talk mentioned that the main reasons for writing an extension are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Interfacing with C/C++ (I'm in this camp!)&lt;/li&gt;
&lt;li&gt;Improving performance of Python code by rewriting it in C/C++&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I need to try …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Thu, 01 Oct 2020 23:55:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-10-01:/2020/10/01/day-36-moar-python-c-extension-talks/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 35 — What's inside an ELF executable? (symver edition)</title><link>https://vinayak.io/2020/09/29/day-35-whats-inside-an-elf-executable-symver-edition/</link><description>&lt;p&gt;I saw "ELF" being mentioned a lot while &lt;a href="https://vinayak.io/2020/09/28/day-34-linkers-go-brrrrr/"&gt;reading about linkers yesterday&lt;/a&gt; so I thought about looking into it. Turns out it's a file format for executables. Just hearing the word "executable" used to give me the chills because I couldn't look at what's inside one. (One time I ran …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Tue, 29 Sep 2020 23:55:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-09-29:/2020/09/29/day-35-whats-inside-an-elf-executable-symver-edition/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 34 — Linkers go brrrrr</title><link>https://vinayak.io/2020/09/28/day-34-linkers-go-brrrrr/</link><description>&lt;p&gt;Continuing from the &lt;a href="https://vinayak.io/2020/09/23/day-32-a-python-c-extension-module/"&gt;day before yesterday&lt;/a&gt;, I started looking into linkers and loaders. Till now, I haven't had experience writing multiple C files that work together. And up until &lt;a href="https://vinayak.io/2020/09/24/day-33-there-are-so-many-ld-variables/"&gt;yesterday&lt;/a&gt;, my only other experience with &lt;code&gt;.so&lt;/code&gt; files has been knowing that if I put opencv's &lt;code&gt;.so&lt;/code&gt; file in my Python …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Mon, 28 Sep 2020 22:00:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-09-28:/2020/09/28/day-34-linkers-go-brrrrr/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 33 — There are so many LD variables!</title><link>https://vinayak.io/2020/09/24/day-33-there-are-so-many-ld-variables/</link><description>&lt;p&gt;&lt;a href="https://vinayak.io/2020/09/22/day-31-spying-on-ghostscript/"&gt;Using &lt;code&gt;strace&lt;/code&gt; to spy on &lt;code&gt;ghostscript&lt;/code&gt;'s system calls&lt;/a&gt; made me wonder if there's a way to print the names of all function calls (along with their file paths) that a compiled executable makes after you invoke it on the command-line. This would be awesome to navigate large C codebases …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Thu, 24 Sep 2020 23:55:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-09-24:/2020/09/24/day-33-there-are-so-many-ld-variables/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 32 — A Python C extension module!</title><link>https://vinayak.io/2020/09/23/day-32-a-python-c-extension-module/</link><description>&lt;p&gt;Today I did some Yak shaving and made &lt;a href="https://github.com/vinayak-mehta/opep"&gt;&lt;code&gt;opep&lt;/code&gt;&lt;/a&gt; because opening/reading each PEP in its own browser tab (with all the extra information on the webpage) was getting tiring both for me and the browser.&lt;/p&gt;
&lt;p&gt;I'd used the &lt;code&gt;man&lt;/code&gt; command a lot yesterday to read some manual entries, so …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Wed, 23 Sep 2020 23:55:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-09-23:/2020/09/23/day-32-a-python-c-extension-module/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 31 — Spying on ghostscript</title><link>https://vinayak.io/2020/09/22/day-31-spying-on-ghostscript/</link><description>&lt;p&gt;I recently (at the start of my batch) found out about &lt;code&gt;strace&lt;/code&gt; from &lt;a href="https://jvns.ca/blog/2015/04/14/strace-zine/"&gt;this zine&lt;/a&gt; by Julia Evans! Today I used it to look at things &lt;code&gt;ghostscript&lt;/code&gt; does under the hood (system calls!) to do a PDF to PNG conversion. I also read through the manual page for &lt;code&gt;strace&lt;/code&gt; which …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Tue, 22 Sep 2020 23:55:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-09-22:/2020/09/22/day-31-spying-on-ghostscript/</guid><category>blog</category><category>recurse-center</category><category>strace</category></item><item><title>Day 30 — Upgraded to Ubuntu 20.04</title><link>https://vinayak.io/2020/09/20/day-30-upgraded-to-ubuntu-20-04/</link><description>&lt;p&gt;Today I spent a lot of time upgrading my Ubuntu from &lt;code&gt;18.04&lt;/code&gt; to &lt;code&gt;20.04&lt;/code&gt;, just to get a new version of &lt;code&gt;gnome-shell&lt;/code&gt; which was needed by this cool &lt;a href="https://material-shell.com/"&gt;window manager&lt;/a&gt; I wanted to try out. The whole process reminded me of 2014 when I was literally trying out …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Sun, 20 Sep 2020 23:59:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-09-20:/2020/09/20/day-30-upgraded-to-ubuntu-20-04/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 29 — EasyOCR dabblements</title><link>https://vinayak.io/2020/09/20/day-29-easyocr-dabblements/</link><description>&lt;p&gt;Today I paired with Andrew to try out &lt;a href="https://github.com/JaidedAI/EasyOCR"&gt;EasyOCR&lt;/a&gt; since we thought that it could be useful in both &lt;a href="https://github.com/chronicle-app/chronicle-etl"&gt;&lt;code&gt;chronicle&lt;/code&gt;&lt;/a&gt; (to extract text out of camera images) and &lt;code&gt;camelot&lt;/code&gt; (to extract text out of image-based PDFs). Andrew suggested that we could use images from &lt;a href="https://duetocovid19.com/"&gt;duetocovid19.com&lt;/a&gt;, another cool project that …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Sun, 20 Sep 2020 23:55:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-09-20:/2020/09/20/day-29-easyocr-dabblements/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 28 — A divide-and-conquer strategy for recording videos</title><link>https://vinayak.io/2020/09/16/day-28-a-divide-and-conquer-strategy-for-recording-videos/</link><description>&lt;p&gt;This is not something new, almost every video in the world is recorded this way! At first, I fought against this strategy by doing just one take, thinking that it would save time. I couldn't be more wrong!&lt;/p&gt;
&lt;p&gt;Disclaimer: I'm a new speaker, and I'm not very good at speaking …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Wed, 16 Sep 2020 23:59:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-09-16:/2020/09/16/day-28-a-divide-and-conquer-strategy-for-recording-videos/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 27 — Finished my talk!</title><link>https://vinayak.io/2020/09/16/day-27-finished-my-talk/</link><description>&lt;p&gt;Today (plus yesterday, and the whole weekend!) I focused all my energy on writing (and &lt;em&gt;trying to record&lt;/em&gt;) my talk for JupyterCon.&lt;/p&gt;
&lt;p&gt;Now I just need to record it.&lt;/p&gt;&lt;script src="//platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Wed, 16 Sep 2020 23:55:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-09-16:/2020/09/16/day-27-finished-my-talk/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 26 — How are six weeks over already?!</title><link>https://vinayak.io/2020/09/15/day-26-how-are-six-weeks-over-already/</link><description>&lt;p&gt;Oh no, I'm almost at the midpoint of the batch! Half of my batch is almost over :( I wish I could be in batch forever, and work on learning and building new things every day!&lt;/p&gt;
&lt;p&gt;I took some time to reflect on the past 5 weeks. These are the goals …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Tue, 15 Sep 2020 21:00:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-09-15:/2020/09/15/day-26-how-are-six-weeks-over-already/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 25 — A thing I didn't know about Unix</title><link>https://vinayak.io/2020/09/13/day-25-a-thing-i-didnt-know-about-unix/</link><description>&lt;p&gt;Welcome to my blog. ICYMI, I'm using it to post about how I spend each day at RC, so that I can look back upon the things I learned, and the interactions I had, things that can otherwise be so ephemeral!&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href="https://vinayak.io/2020/09/09/day-23-why-is-it-called-a-out/"&gt;This post&lt;/a&gt; got some replies on Zulip, which means …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Sun, 13 Sep 2020 23:59:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-09-13:/2020/09/13/day-25-a-thing-i-didnt-know-about-unix/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 24 — JupyterHub and Airflow on microk8s</title><link>https://vinayak.io/2020/09/10/day-24-jupyterhub-airflow-microk8s/</link><description>&lt;p&gt;&lt;a href="https://vinayak.io/2020/09/02/day-18-mini-kubey-kube-where-are-you/"&gt;Some days ago&lt;/a&gt; I set up &lt;code&gt;minikube&lt;/code&gt; to put together a small demo (or at least some screenshots) for a talk. After a &lt;code&gt;minikube start&lt;/code&gt;, it has been taking a long time to come up for me (maybe because of my smol laptop), and it also throws some errors before …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Thu, 10 Sep 2020 23:59:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-09-10:/2020/09/10/day-24-jupyterhub-airflow-microk8s/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 23 — Why is it called a.out?</title><link>https://vinayak.io/2020/09/09/day-23-why-is-it-called-a-out/</link><description>&lt;h2&gt;tl;dr&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;a.out&lt;/code&gt; is short for "assembler output", the filename of the output of Ken Thompson's &lt;a href="https://en.wikipedia.org/wiki/PDP-7"&gt;PDP-7&lt;/a&gt; assembler. It remains the default output filename for executables created by compilers like &lt;code&gt;gcc&lt;/code&gt;, even though the created files actually are not in the original &lt;code&gt;a.out&lt;/code&gt; format! [&lt;a href="https://en.wikipedia.org/wiki/A.out"&gt;source&lt;/a&gt;]&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Today I paired …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Wed, 09 Sep 2020 23:59:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-09-09:/2020/09/09/day-23-why-is-it-called-a-out/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 22 — WASM + Python = ❤️</title><link>https://vinayak.io/2020/09/08/day-22-wasm-python/</link><description>&lt;p&gt;Today I attended the "Intro to WebAssembly" session by Ezzeri. He talked about some useful &lt;a href="https://payments.posthaven.com/rc-w5d2-relentlessly-resourceful"&gt;performance benchmarks&lt;/a&gt; that he's been working on.&lt;/p&gt;
&lt;p&gt;I went on to play with &lt;a href="https://github.com/wasmerio/wasmer-python"&gt;wasmer-python&lt;/a&gt; which is a WebAssembly runtime for Python! It lets you execute &lt;code&gt;WASM&lt;/code&gt; binaries with an API similar to how you'd &lt;a href="https://vinayak.io/2020/09/06/day-20-make-js-run-faster-with-this-simple-trick/"&gt;execute …&lt;/a&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Tue, 08 Sep 2020 23:59:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-09-08:/2020/09/08/day-22-wasm-python/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 21 — Timezones are weird</title><link>https://vinayak.io/2020/09/07/day-21-timezones-are-weird/</link><description>&lt;p&gt;For the past month, I've been working in &lt;a href="https://en.wikipedia.org/wiki/Eastern_Time_Zone"&gt;Eastern Time&lt;/a&gt;, while being physically located in &lt;a href="https://en.wikipedia.org/wiki/Indian_Standard_Time"&gt;Indian Standard Time&lt;/a&gt;. Which means I wake up around 12-2pm IST and go to sleep around 5-6am IST. Timezones are weird.&lt;/p&gt;
&lt;p&gt;Over the weekend I attended &lt;a href="https://2020.pycon.org.au/"&gt;PyConline AU&lt;/a&gt; in &lt;a href="https://en.wikipedia.org/wiki/Time_in_Australia"&gt;Australian Central Standard Time&lt;/a&gt; (&lt;a href="https://github.com/glasnt/curlyboi"&gt;Curlyboi&lt;/a&gt; Standard …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Mon, 07 Sep 2020 23:59:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-09-07:/2020/09/07/day-21-timezones-are-weird/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 20 — Make Javascript run faster with this simple trick!</title><link>https://vinayak.io/2020/09/06/day-20-make-js-run-faster-with-this-simple-trick/</link><description>&lt;p&gt;Today I paired with Ezzeri to look at some of his &lt;a href="https://exercism.io/tracks/rust"&gt;Exercism&lt;/a&gt; Rust track solutions. The discussion moved to &lt;code&gt;WebAssembly&lt;/code&gt; and we went through some &lt;a href="https://github.com/savarin/minimal"&gt;minimal examples&lt;/a&gt; he has been working on. He's also written a nice &lt;a href="https://payments.posthaven.com/rc-w4d4-the-only-intro-youll-need"&gt;blog post&lt;/a&gt; which has some beginner level &lt;code&gt;WebAssembly&lt;/code&gt; resources.&lt;/p&gt;
&lt;p&gt;The whole exercise filled …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Sun, 06 Sep 2020 23:59:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-09-06:/2020/09/06/day-20-make-js-run-faster-with-this-simple-trick/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 19 — I madeth a Sphinx extension</title><link>https://vinayak.io/2020/09/03/day-19-i-madeth-a-sphinx-extension/</link><description>&lt;p&gt;Today I thought that adding a &lt;a href="https://present.readthedocs.io/en/latest/gallery/"&gt;gallery&lt;/a&gt; to display what everyone is building with &lt;code&gt;present&lt;/code&gt; would be great! I guess this was a distraction from the talk research I previously mentioned (which I need to finish ASAP!) :(&lt;/p&gt;
&lt;p&gt;But I learned how to write a simple Sphinx extension, which is cool …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Thu, 03 Sep 2020 23:59:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-09-03:/2020/09/03/day-19-i-madeth-a-sphinx-extension/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 18 — Mini kubey kube, where are you?</title><link>https://vinayak.io/2020/09/02/day-18-mini-kubey-kube-where-are-you/</link><description>&lt;p&gt;I decided to set up &lt;code&gt;minikube&lt;/code&gt; to create a small demo for a talk that I have to submit this weekend. Right now I'm going through the Phase 4 that Hynek Schlawack talks about in his article &lt;a href="https://hynek.me/articles/speaking/"&gt;on conference speaking&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I SWEAR TO GOD I’M NEVER SUBMITTING A TALK …&lt;/p&gt;&lt;/blockquote&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Wed, 02 Sep 2020 23:59:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-09-02:/2020/09/02/day-18-mini-kubey-kube-where-are-you/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 17 — Pair programming is fun!</title><link>https://vinayak.io/2020/09/01/day-17-pair-programming-is-fun/</link><description>&lt;p&gt;Today I paired with Taro to walk us through the &lt;code&gt;present&lt;/code&gt; codebase. It was a nice learning experience to talk about (and explain) how everything is structured because I don't get to do that while working alone. I need to pair program more!&lt;/p&gt;
&lt;p&gt;After the walkthrough, we came up with …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Tue, 01 Sep 2020 23:59:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-09-01:/2020/09/01/day-17-pair-programming-is-fun/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 16 — What's inside a Jupyter notebook?</title><link>https://vinayak.io/2020/08/31/day-16-whats-inside-a-jupyter-notebook/</link><description>&lt;p&gt;Today I was reading up on some Jupyter things, and wondered how images, widgets, and maps are stored within a notebook. I love the &lt;a href="https://en.wikipedia.org/wiki/Literate_programming"&gt;literate programming&lt;/a&gt; model where your docs, code and outputs; everything is viewable with just one file!&lt;/p&gt;
&lt;p&gt;A Jupyter notebook is basically a Python dictionary. It has …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Mon, 31 Aug 2020 23:59:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-08-31:/2020/08/31/day-16-whats-inside-a-jupyter-notebook/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 15 — Let's play some codio</title><link>https://vinayak.io/2020/08/28/day-15-lets-play-some-codio/</link><description>&lt;p&gt;I'd been procrastinating on the &lt;a href="https://github.com/vinayak-mehta/present/pull/20"&gt;codio pull request&lt;/a&gt; after recording my PyConline AU talk on that branch earlier this week. I finally pushed some fixes and merged it today! This is the current version:&lt;/p&gt;
&lt;p align="center"&gt;
  &lt;img style="width: 100%; height: auto;" src="/files/codio-new.gif" /&gt;
&lt;/p&gt;

&lt;p&gt;You can make a codio by writing some &lt;a href="https://en.wikipedia.org/wiki/YAML"&gt;yaml&lt;/a&gt; (shown below), and use it inside your …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Fri, 28 Aug 2020 23:59:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-08-28:/2020/08/28/day-15-lets-play-some-codio/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 14 — I rewrote itslit in Rust!</title><link>https://vinayak.io/2020/08/27/day-14-i-rewrote-itslit-in-rust/</link><description>&lt;p&gt;Today I read through ownership, references and borrowing in Rust. I can't write about what I learned in this short post as I spent all my time playing skribbl at game night (it was really fun and I would totally do it again!). I also did a lot of &lt;a href="https://github.com/rust-lang/rustlings"&gt;rustlings …&lt;/a&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Thu, 27 Aug 2020 23:59:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-08-27:/2020/08/27/day-14-i-rewrote-itslit-in-rust/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 13 — Hello, Rust!</title><link>https://vinayak.io/2020/08/26/day-13-hello-rust/</link><description>&lt;p&gt;Today I started reading &lt;a href="https://doc.rust-lang.org/book/"&gt;The Rust Programming Language book&lt;/a&gt;. The first step was to set up Rust. In one &lt;code&gt;curl&lt;/code&gt; command, it installed &lt;em&gt;everything&lt;/em&gt; (a compiler, a package manager, a code formatter, and more) I would need to write Rust code! This was an awesome experience, and diametrically opposite to …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Wed, 26 Aug 2020 23:59:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-08-26:/2020/08/26/day-13-hello-rust/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 12 — Bugs bugs bugs</title><link>https://vinayak.io/2020/08/25/day-12-bugs-bugs-bugs/</link><description>&lt;p&gt;Today I had two nice coffee chats and tidied up my learning outline. I will dive deep into Rust and Python packaging in the next few weeks.&lt;/p&gt;
&lt;p&gt;I also added a comment on this &lt;a href="https://github.com/peterbrittain/asciimatics/issues/263#issuecomment-679987347"&gt;asciimatics issue&lt;/a&gt; to possibly contribute &lt;em&gt;codio&lt;/em&gt; as a "typewriter effect"! It would be awesome to see …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Tue, 25 Aug 2020 23:59:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-08-25:/2020/08/25/day-12-bugs-bugs-bugs/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 11 — reveal-notes + tmux + keylogger = present-notes</title><link>https://vinayak.io/2020/08/24/day-11-reveal-keylogger-tmux-present-notes/</link><description>&lt;p&gt;Today I spent most of my time recording the talk video for &lt;a href="https://2020.pycon.org.au/program/ufbpbv/"&gt;PyConline AU&lt;/a&gt;. I wanted to use &lt;a href="https://github.com/vinayak-mehta/present"&gt;present&lt;/a&gt; and since it &lt;a href="https://github.com/vinayak-mehta/present/issues/5"&gt;doesn't have a speaker notes view&lt;/a&gt; right now, I managed to hack together a way to make the &lt;code&gt;reveal.js&lt;/code&gt; speaker notes work with &lt;code&gt;present&lt;/code&gt;. It worked out …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Mon, 24 Aug 2020 23:59:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-08-24:/2020/08/24/day-11-reveal-keylogger-tmux-present-notes/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 10 — present can now play code!</title><link>https://vinayak.io/2020/08/21/day-10-present-can-now-play-code/</link><description>&lt;p&gt;Today I worked on the "pre-recorded playable code block" idea from yesterday. During a talk, it's hard for me to remember and type commands on the terminal while also explaining what I'm doing. So I usually record a gif earlier and play that instead. And since gifs don't render nicely …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Fri, 21 Aug 2020 23:59:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-08-21:/2020/08/21/day-10-present-can-now-play-code/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 9 — Slow day</title><link>https://vinayak.io/2020/08/20/day-9-slow-day/</link><description>&lt;p&gt;Today I couldn't get a lot done, just ended up fixing some bugs on &lt;a href="https://github.com/vinayak-mehta/present"&gt;present&lt;/a&gt;. I had some enhancement ideas though.&lt;/p&gt;
&lt;p&gt;What if you can run the Python interpreter inside your slide's code block? Or even a shell prompt? What about a &lt;a href="https://rise.readthedocs.io/en/stable/"&gt;RICE&lt;/a&gt;-like view where you can execute a …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Thu, 20 Aug 2020 23:59:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-08-20:/2020/08/20/day-9-slow-day/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 8 — I made a terminal-based presentation tool!</title><link>https://vinayak.io/2020/08/19/day-8-i-made-a-terminal-based-presentation-tool/</link><description>&lt;p&gt;For the last two days, I've been working on &lt;a href="https://github.com/vinayak-mehta/present"&gt;present&lt;/a&gt;.&lt;/p&gt;
&lt;p align="center"&gt;
  &lt;img style="width: 100%; height: auto;" src="https://raw.githubusercontent.com/vinayak-mehta/present/master/docs/_static/demo.gif" /&gt;
&lt;/p&gt;

&lt;p&gt;I've been wanting to build something like this ever since I watched the &lt;a href="https://www.youtube.com/watch?v=rrMnmLyYjU8"&gt;North Bay Python 2017 keynote&lt;/a&gt; by Brandon Rhodes. The markdown slide format is similar to &lt;code&gt;reveal.js&lt;/code&gt; because I want &lt;code&gt;present&lt;/code&gt; to work with my existing slides …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Wed, 19 Aug 2020 23:59:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-08-19:/2020/08/19/day-8-i-made-a-terminal-based-presentation-tool/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 7 — Python dataclasses are awesome!</title><link>https://vinayak.io/2020/08/18/day-7-python-dataclasses-are-awesome/</link><description>&lt;p&gt;Today I tried &lt;a href="https://docs.python.org/3/library/dataclasses.html"&gt;dataclasses&lt;/a&gt; for a project (first time!). And I'm sold because I don't have to define an &lt;code&gt;__init__&lt;/code&gt; function anymore, and they automatically generate a repr too. Also, type annotations!&lt;/p&gt;
&lt;pre&gt;&lt;code class="python"&gt;
  &gt;&gt;&gt; from dataclasses import dataclass
  &gt;&gt;&gt;
  &gt;&gt;&gt; &lt;a href="https://twitter.com/dataclass"&gt;@dataclass&lt;/a&gt;
      class Point:
          x: int = 0
          y: int = 0
          z: int = 0
  &gt;&gt;&gt;
  &gt;&gt;&gt; p = Point …&lt;/code&gt;&lt;/pre&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Tue, 18 Aug 2020 23:59:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-08-18:/2020/08/18/day-7-python-dataclasses-are-awesome/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 6 — Some PEP talk, or: What is a pyproject.toml?</title><link>https://vinayak.io/2020/08/17/day-6-some-pep-talk/</link><description>&lt;p&gt;Today I talked about PEPs &lt;a href="https://www.python.org/dev/peps/pep-0518/"&gt;518&lt;/a&gt; and &lt;a href="https://www.python.org/dev/peps/pep-0517/"&gt;517&lt;/a&gt; at &lt;em&gt;RFCs We ❤️&lt;/em&gt;. I learned a lot from Brett Cannon's &lt;a href="https://snarky.ca/clarifying-pep-518/"&gt;blog&lt;/a&gt; &lt;a href="https://snarky.ca/what-the-heck-is-pyproject-toml/"&gt;posts&lt;/a&gt; on the topic, and from reading the PEPs themselves. This post is a &lt;em&gt;simpler&lt;/em&gt; version of everything.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;First, let's briefly look at the history of Python packaging based on the …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Mon, 17 Aug 2020 23:59:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-08-17:/2020/08/17/day-6-some-pep-talk/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 5 — HowToVer?!</title><link>https://vinayak.io/2020/08/15/day-5-howtover/</link><description>&lt;p&gt;After reading &lt;a href="https://en.wikipedia.org/wiki/Software_versioning"&gt;software versioning&lt;/a&gt; posts by &lt;a href="https://snarky.ca/why-i-dont-like-semver/"&gt;Brett Cannon&lt;/a&gt;, &lt;a href="https://caremad.io/posts/2016/02/versioning-software/"&gt;Donald Stufft&lt;/a&gt;, and &lt;a href="https://www.bernat.tech/version-numbers/"&gt;Bernát Gábor&lt;/a&gt;; I thought that I should try to summarize what I learned (for future me!).&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Why do we need software versioning? We need it to snapshot each point in the software evolution process, and to follow a convention …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Sat, 15 Aug 2020 23:59:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-08-15:/2020/08/15/day-5-howtover/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 4 — Hyrum's Law</title><link>https://vinayak.io/2020/08/13/day-4-hyrums-law/</link><description>&lt;p&gt;Today I worked on some open issues and pull requests for &lt;a href="https://github.com/camelot-dev/camelot"&gt;camelot&lt;/a&gt; and &lt;a href="https://github.com/camelot-dev/excalibur"&gt;excalibur&lt;/a&gt;. Last month, &lt;code&gt;pdfminer.six&lt;/code&gt; (one of &lt;code&gt;camelot&lt;/code&gt;'s dependencies) &lt;a href="https://github.com/pdfminer/pdfminer.six/blob/develop/CHANGELOG.md#changed"&gt;broke backwards compatibility&lt;/a&gt; by &lt;a href="https://github.com/pdfminer/pdfminer.six/pull/453/files#diff-7b8996b6e630ef8e86e17a8d0df3c78c"&gt;renaming the PDFTextExtractionNotAllowed exception&lt;/a&gt;. &lt;code&gt;camelot&lt;/code&gt; raises it while getting the page layout &lt;a href="https://github.com/camelot-dev/camelot/blob/fbe576ffcb83e3dce1c9ca23ff5b01e837b1b4be/camelot/utils.py#L779"&gt;if the page is not extractable&lt;/a&gt;. I'd added it back in …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Thu, 13 Aug 2020 23:59:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-08-13:/2020/08/13/day-4-hyrums-law/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 3 — Made some feta, and itslit!</title><link>https://vinayak.io/2020/08/12/day-3-made-some-feta-and-itslit/</link><description>&lt;p&gt;Today I used a countdown timer to timebox my coding sessions which really helped with focus. I did this during Hack and Tell where everybody says what they're going to work on, &lt;em&gt;hack&lt;/em&gt; on that for 2 hours, and finally &lt;em&gt;tell&lt;/em&gt; what they worked on at the end of the …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Wed, 12 Aug 2020 23:59:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-08-12:/2020/08/12/day-3-made-some-feta-and-itslit/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 2 — Some bash and then the memex</title><link>https://vinayak.io/2020/08/11/day-2-some-bash-and-then-the-memex/</link><description>&lt;p&gt;For the past one month, I've been trying to adjust to &lt;a href="https://en.wikipedia.org/wiki/Eastern_Time_Zone"&gt;Eastern Time&lt;/a&gt; based on the assumption that I might miss out on RC activities if I'm not up at the same time as everyone else. As a result, I've been sleeping at 6am &lt;a href="https://en.wikipedia.org/wiki/Indian_Standard_Time"&gt;Indian Standard Time&lt;/a&gt;. After spending two …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Tue, 11 Aug 2020 23:59:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-08-11:/2020/08/11/day-2-some-bash-and-then-the-memex/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 1 — Virtual RC!</title><link>https://vinayak.io/2020/08/10/day-1-virtual-rc/</link><description>&lt;p&gt;Today was my first day at RC! I've been hanging out on Zulip since last week though, mostly participating in the &lt;code&gt;#games&lt;/code&gt; stream where we're doing a &lt;a href="/files/30-day-video-game-music-challenge.png"&gt;30-day video game music challenge&lt;/a&gt;. I feel great nostalgia every day when I post a track from a video game I used to …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Mon, 10 Aug 2020 23:59:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-08-10:/2020/08/10/day-1-virtual-rc/</guid><category>blog</category><category>recurse-center</category></item><item><title>Day 0 — What I want to do at Recurse Center</title><link>https://vinayak.io/2020/08/09/day-0-what-i-want-to-do-at-recurse-center/</link><description>&lt;p&gt;I've been accepted to the Fall 1 batch at the &lt;a href="https://www.recurse.com/"&gt;Recurse Center&lt;/a&gt; (yay!), which starts tomorrow. RC is an educational retreat for programmers, based in New York City. It is heavily influenced by &lt;a href="https://en.wikipedia.org/wiki/Unschooling"&gt;unschooling&lt;/a&gt;, which means that it is self-directed and everyone is free to explore and learn what they're …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Sun, 09 Aug 2020 23:59:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-08-09:/2020/08/09/day-0-what-i-want-to-do-at-recurse-center/</guid><category>blog</category><category>recurse-center</category></item><item><title>The Hitchhiker's Guide to CLIs in Python</title><link>https://vinayak.io/2020/05/04/the-hitchhikers-guide-to-clis-in-python/</link><description>&lt;p&gt;This article is based on my &lt;a href="https://www.youtube.com/watch?v=Hn-syMunNy8"&gt;PyCon 2020 talk&lt;/a&gt; of the same title.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href="http://cristal.inria.fr/~weis/info/commandline.html"&gt;In the beginning, was the command line&lt;/a&gt;. Well, not quite the command line we know today.&lt;/p&gt;
&lt;p&gt;We had typewriters. We were communicating using Morse code. One fine day, someone had an idea to connect a typewriter to …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Mon, 04 May 2020 08:00:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-05-04:/2020/05/04/the-hitchhikers-guide-to-clis-in-python/</guid><category>blog</category><category>cli</category><category>python</category></item><item><title>The Hitchhiker's Guide to CLIs in Python — Part 4: User Experience</title><link>https://vinayak.io/2020/05/04/the-hitchhikers-guide-to-clis-in-python-part-4-user-experience/</link><description>&lt;p&gt;Now that we know how to write CLIs in Python, let's talk about the CLI user experience. As mentioned earlier, we're operating in a constrained design space. In contrast to &lt;a href="https://en.wikipedia.org/wiki/Graphical_user_interface"&gt;GUIs&lt;/a&gt;, which offer a lot of visual cues and guidance to the user.&lt;/p&gt;
&lt;p&gt;There are some principles that can help …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Mon, 04 May 2020 07:45:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-05-04:/2020/05/04/the-hitchhikers-guide-to-clis-in-python-part-4-user-experience/</guid><category>blog</category></item><item><title>The Hitchhiker's Guide to CLIs in Python — Part 3: Writing and packaging a CLI using Click</title><link>https://vinayak.io/2020/05/04/the-hitchhikers-guide-to-clis-in-python-part-3-writing-and-packaging-a-cli-using-click/</link><description>&lt;p&gt;Let's look at some common CLI use cases and how we can use &lt;code&gt;click&lt;/code&gt; to implement them.&lt;/p&gt;
&lt;p align="center"&gt;
  &lt;img style="width: 50%; height: auto;" src="https://vinayak.io/files/smol.png" /&gt;
&lt;/p&gt;

&lt;p&gt;This time we'll use an example CLI called &lt;code&gt;smol-git&lt;/code&gt;.&lt;/p&gt;
&lt;pre&gt;&lt;code class="plaintext"&gt;
  $ smol-git --help
  Usage: smol-git [OPTIONS] COMMAND [ARGS]...

    smol-git - the stupid content tracker

  Options:
    --version  Show the version and exit.
    --help     Show this message and …&lt;/code&gt;&lt;/pre&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Mon, 04 May 2020 07:30:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-05-04:/2020/05/04/the-hitchhikers-guide-to-clis-in-python-part-3-writing-and-packaging-a-cli-using-click/</guid><category>blog</category></item><item><title>The Hitchhiker's Guide to CLIs in Python — Part 2: Python packages for writing CLIs</title><link>https://vinayak.io/2020/05/04/the-hitchhikers-guide-to-clis-in-python-part-2-python-packages-for-writing-clis/</link><description>&lt;p&gt;Let's see how we can write a command-line interface using Python. There are several options to do this, in the standard library and on PyPI.&lt;/p&gt;
&lt;p align="center"&gt;
  &lt;img style="width: 50%; height: auto;" src="https://vinayak.io/files/smol.png" /&gt;
&lt;/p&gt;

&lt;p&gt;We'll use an example CLI called &lt;code&gt;smol-pip&lt;/code&gt;, and see how we can implement it using these different options.&lt;/p&gt;
&lt;pre&gt;&lt;code class="plaintext"&gt;
  $ smol-pip install --upgrade package_name

&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;code&gt;smol-pip&lt;/code&gt; has one …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Mon, 04 May 2020 07:15:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-05-04:/2020/05/04/the-hitchhikers-guide-to-clis-in-python-part-2-python-packages-for-writing-clis/</guid><category>blog</category></item><item><title>The Hitchhiker's Guide to CLIs in Python — Part 1: Anatomy of a Terminal and CLI</title><link>https://vinayak.io/2020/05/04/the-hitchhikers-guide-to-clis-in-python-part-1-anatomy-of-a-terminal-and-cli/</link><description>&lt;p&gt;&lt;strong&gt;tty&lt;/strong&gt; (short for &lt;strong&gt;t&lt;/strong&gt;ele&lt;strong&gt;ty&lt;/strong&gt;pe) is a Unix command that prints the name of the terminal connected to standard input. It is also the prefix in names for virtual terminals on Unix-based operating systems.&lt;/p&gt;
&lt;p&gt;The fundamental type of application that runs on a terminal is the &lt;strong&gt;shell&lt;/strong&gt;. The …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Mon, 04 May 2020 07:00:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2020-05-04:/2020/05/04/the-hitchhikers-guide-to-clis-in-python-part-1-anatomy-of-a-terminal-and-cli/</guid><category>blog</category></item><item><title>How To Fall In Love With Running</title><link>https://vinayak.io/2019/01/15/how-to-fall-in-love-with-running/</link><description>&lt;p&gt;I &lt;a href="/files/strava_screenshot.png"&gt;ran 1094 km&lt;/a&gt; in 2018. For the first time in my life, I've run almost &lt;em&gt;every week&lt;/em&gt; for an entire year. I'll run my first &lt;a href="https://en.wikipedia.org/wiki/Mumbai_Marathon"&gt;marathon&lt;/a&gt; this weekend!&lt;/p&gt;
&lt;p&gt;Running is the easiest thing you can do for your fitness. It needs no equipment, just a pair of shoes (or …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Tue, 15 Jan 2019 20:00:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2019-01-15:/2019/01/15/how-to-fall-in-love-with-running/</guid><category>blog</category><category>running</category></item><item><title>An Open-Source Tool to Extract Tables from PDFs into CSVs</title><link>https://vinayak.io/2018/11/26/open-source-tool-extract-tables-pdfs-excels/</link><description>&lt;blockquote&gt;
&lt;p&gt;I have also published this post on &lt;a href="https://hackernoon.com/an-open-source-science-tool-to-extract-tables-from-pdfs-into-excels-3ed3cc7f22e1"&gt;Hacker Noon&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;Borrowing the first three paragraphs from my &lt;a href="https://vinayak.io/2018/10/03/camelot-python-library-extract-tables-pdf/"&gt;previous blog post&lt;/a&gt; since they perfectly explain why extracting tables from PDFs is hard.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The PDF (&lt;a href="https://en.wikipedia.org/wiki/PDF"&gt;Portable Document Format&lt;/a&gt;) was born out of &lt;a href="http://www.planetpdf.com/planetpdf/pdfs/warnock_camelot.pdf"&gt;The Camelot Project&lt;/a&gt; to create “a universal way to communicate documents …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Mon, 26 Nov 2018 06:00:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2018-11-26:/2018/11/26/open-source-tool-extract-tables-pdfs-excels/</guid><category>blog</category><category>open-source</category><category>open-science</category><category>excalibur</category><category>pdf</category><category>table</category></item><item><title>Last Year Tonight at NH7 Weekender Meghalaya 2017</title><link>https://vinayak.io/2018/10/31/last-year-tonight-nh7-weekender-meghalaya/</link><description>&lt;p&gt;Last year tonight, I was in Meghalaya for NH7 Weekender with my friends (also co-workers at the time), Deepu and Rishabh (aka Jain). We'd been aching to visit Meghalaya after watching Ethereal's "Meghalaya Alive!" video. And after hearing about Weekender happening there (with Steve Vai headlining it) there was no …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Wed, 31 Oct 2018 20:00:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2018-10-31:/2018/10/31/last-year-tonight-nh7-weekender-meghalaya/</guid><category>blog</category><category>weekender</category><category>meghalaya</category></item><item><title>Announcing Excalibur, a Web Interface to Extract Tabular Data from PDFs</title><link>https://vinayak.io/2018/10/21/excalibur-web-interface-extract-tables-pdf/</link><description>&lt;p&gt;Last week, Camelot trended at #1 on &lt;a href="http://vinayak.io/files/hn-trending-camelot.png"&gt;Hacker News&lt;/a&gt;, &lt;a href="https://twitter.com/Social_Cops/status/1050972732396134401"&gt;Github&lt;/a&gt; and #5 on &lt;a href="https://www.producthunt.com/posts/camelot-2"&gt;Product Hunt&lt;/a&gt;. Thank you for the love! There's still a lot to do to make it more awesome. You can follow the roadmap on its &lt;a href="https://github.com/camelot-dev/camelot/wiki/Roadmap"&gt;Github wiki&lt;/a&gt;. You can also check out my &lt;a href="http://vinayak.io/2018/10/03/camelot-python-library-extract-tables-pdf/"&gt;previous blog post on …&lt;/a&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Sun, 21 Oct 2018 03:30:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2018-10-21:/2018/10/21/excalibur-web-interface-extract-tables-pdf/</guid><category>blog</category><category>excalibur</category><category>pdf</category><category>table</category></item><item><title>Announcing Camelot, a Python Library to Extract Tabular Data from PDFs</title><link>https://vinayak.io/2018/10/03/camelot-python-library-extract-tables-pdf/</link><description>&lt;blockquote&gt;
&lt;p&gt;I originally wrote this post for the &lt;a href="https://blog.socialcops.com/technology/engineering/camelot-python-library-pdf-data/"&gt;SocialCops engineering blog&lt;/a&gt;, and then published it on &lt;a href="https://hackernoon.com/announcing-camelot-a-python-library-to-extract-tabular-data-from-pdfs-605f8e63c2d5"&gt;Hacker Noon&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;The PDF (&lt;a href="https://en.wikipedia.org/wiki/PDF"&gt;Portable Document Format&lt;/a&gt;) was born out of &lt;a href="http://www.planetpdf.com/planetpdf/pdfs/warnock_camelot.pdf"&gt;The Camelot Project&lt;/a&gt; to create “a universal way to communicate documents across a wide variety of machine configurations, operating systems and communication networks”. Basically …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Wed, 03 Oct 2018 03:30:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2018-10-03:/2018/10/03/camelot-python-library-extract-tables-pdf/</guid><category>blog</category><category>camelot</category><category>pdf</category><category>table</category></item><item><title>Airflow, Meta Data Engineering, and a Data Platform for the World’s Largest Democracy</title><link>https://vinayak.io/2018/08/25/airflow-meta-data-engineering-disha/</link><description>&lt;blockquote&gt;
&lt;p&gt;I originally wrote this post for the &lt;a href="https://blog.socialcops.com/technology/engineering/airflow-meta-data-engineering-disha/"&gt;SocialCops engineering blog&lt;/a&gt;, and then published it on &lt;a href="https://hackernoon.com/airflow-meta-data-engineering-and-a-data-platform-for-the-worlds-largest-democracy-3b49a3efd5e8"&gt;Hacker Noon&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;In our &lt;a href="https://blog.socialcops.com/technology/data-science/apache-airflow-disease-outbreaks-india/"&gt;last post on Apache Airflow&lt;/a&gt;, we mentioned how it has taken the data engineering ecosystem by storm. We also talked about how we’ve been using it to move data across …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Sat, 25 Aug 2018 00:00:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2018-08-25:/2018/08/25/airflow-meta-data-engineering-disha/</guid><category>blog</category><category>apache</category><category>airflow</category></item><item><title>How to Create a Workflow in Apache Airflow to Track Disease Outbreaks in India</title><link>https://vinayak.io/2018/06/18/apache-airflow-disease-outbreaks-india/</link><description>&lt;blockquote&gt;
&lt;p&gt;I originally wrote this post for the &lt;a href="https://blog.socialcops.com/technology/data-science/apache-airflow-disease-outbreaks-india/"&gt;SocialCops engineering blog&lt;/a&gt;, and then published it on &lt;a href="https://hackernoon.com/how-to-create-a-workflow-in-apache-airflow-to-track-disease-outbreaks-in-india-fd145575efa4"&gt;Hacker Noon&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;What is the first thing that comes to your mind upon hearing the word ‘Airflow’? Data engineering, right? For good reason, I suppose. You are likely to find Airflow mentioned in every other …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Mon, 18 Jun 2018 00:00:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2018-06-18:/2018/06/18/apache-airflow-disease-outbreaks-india/</guid><category>blog</category><category>apache</category><category>airflow</category></item><item><title>Starry Night at Inchhapuri</title><link>https://vinayak.io/2015/09/16/starry-night-at-inchhapuri/</link><description>&lt;p&gt;I'm a Star Trek fan. Space has always fascinated me. So when I saw a friend reading &lt;a href="http://www.amazon.in/An-Astronauts-Guide-Life-Earth/dp/1447257103"&gt;this&lt;/a&gt;, I just had to ask him to lend it to me. Nice book BTW.&lt;/p&gt;
&lt;p&gt;And after watching &lt;strong&gt;Cosmos: A Spacetime Odyssey&lt;/strong&gt;, I've been looking for ways to dive into astronomy. I started …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Wed, 16 Sep 2015 00:00:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2015-09-16:/2015/09/16/starry-night-at-inchhapuri/</guid><category>blog</category><category>astronomy</category></item><item><title>Summarize it!</title><link>https://vinayak.io/2015/06/26/summarize-it/</link><description>&lt;p&gt;End-term exams got over on 9th. I've been looking for an internship ever since (if you're reading this and looking for a machine learning intern, please contact me). Also, I've been going to hackathons! Went to AngelHack Delhi this weekend. I had formed the team a week back. Yask: my …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Fri, 26 Jun 2015 00:00:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2015-06-26:/2015/06/26/summarize-it/</guid><category>blog</category><category>ml</category><category>nlp</category></item><item><title>21 revolutions around a G-type main-sequence star</title><link>https://vinayak.io/2015/03/31/21-revolutions-around-a-g-type-main-sequence-star/</link><description>&lt;p&gt;You would've guessed from the title. It's my birthday. I've completed 21 revolutions around a yellow dwarf on this &lt;em&gt;bounded&lt;/em&gt; spaceship we call Earth. I wanted to talk about something deep in this post, another time maybe. Let's listen to Coldplay instead. :)&lt;/p&gt;
&lt;!-- http://embedresponsively.com --&gt;
&lt;style&gt;.embed-container { position: relative; padding-bottom: 56.25%; margin-bottom: 1rem …&lt;/style&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Tue, 31 Mar 2015 00:00:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2015-03-31:/2015/03/31/21-revolutions-around-a-g-type-main-sequence-star/</guid><category>blog</category><category>birthday</category></item><item><title>Some handy git commands</title><link>https://vinayak.io/2015/03/29/some-handy-git-commands/</link><description>&lt;p&gt;Man, I haven't blogged in a long time! I don't have any particular excuse for that :| So I'm gonna try and write a random post in order to start again, and try to blog frequently.&lt;/p&gt;
&lt;p&gt;These are some &lt;a href="http://en.wikipedia.org/wiki/Git_%28software%29"&gt;git&lt;/a&gt; commands I found useful in the past two months of contributing …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Sun, 29 Mar 2015 20:30:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2015-03-29:/2015/03/29/some-handy-git-commands/</guid><category>blog</category><category>git</category></item><item><title>BVCOE Programming Club</title><link>https://vinayak.io/2014/08/31/bvcoe-programming-club/</link><description>&lt;p&gt;I think BVCOE really needs a programming club where people can get to
know about upcoming programming contests and participate in discussions.&lt;/p&gt;
&lt;/p&gt;
&lt;p&gt;So, I made it &lt;a href="https://www.facebook.com/groups/896021843758974/"&gt;here&lt;/a&gt;
on Facebook. I think the group should have people just from BVCOE and
yeah, no spamming allowed.&lt;/p&gt;
&lt;/p&gt;&lt;script src="//platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Sun, 31 Aug 2014 14:30:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2014-08-31:/2014/08/31/bvcoe-programming-club/</guid><category>blog</category><category>college</category><category>programming</category><category>club</category></item><item><title>End Terms over!</title><link>https://vinayak.io/2014/06/12/end-terms-over/</link><description>&lt;p&gt;Ah! This post is due for a long time now. So my end term exams just
ended yesterday, whereas my friends at other colleges got rid of them by
the end of April. Y U DO THIS, GUGSEEPOO?&lt;/p&gt;
&lt;/p&gt;
&lt;p&gt;But no respite for me, as my college has this compulsory summer …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Thu, 12 Jun 2014 22:30:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2014-06-12:/2014/06/12/end-terms-over/</guid><category>blog</category><category>summer</category></item><item><title>Vi IMproved</title><link>https://vinayak.io/2014/03/06/vi-improved/</link><description>&lt;p&gt;Vim is a text editor written by &lt;a href="http://en.wikipedia.org/wiki/Bram_Moolenaar"&gt;Bram
Moolenaar&lt;/a&gt; and first
released publicly in 1991. Based on &lt;code&gt;vi&lt;/code&gt; editor common to Unix-like
systems, it is designed for use both from a CLI and as a standalone
application in a GUI. However, I prefer the command line interface. It
is my …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Thu, 06 Mar 2014 20:30:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2014-03-06:/2014/03/06/vi-improved/</guid><category>blog</category><category>vim</category><category>text</category><category>editor</category></item><item><title>Now Running Arch Linux</title><link>https://vinayak.io/2014/02/28/now-running-arch-linux/</link><description>&lt;p&gt;After using Ubuntu for a year, I decided to install Arch Linux on my
laptop. This &lt;a href="http://jailuthra.in/2013/03/arch-linux.html"&gt;post&lt;/a&gt; by &lt;a href="http://jailuthra.in"&gt;Jai
Luthra&lt;/a&gt; got me all excited about Arch. It took me a
whole weekend to do it and I've been using it for a month now. I
initially thought of using awesome-wm …&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Fri, 28 Feb 2014 16:30:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2014-02-28:/2014/02/28/now-running-arch-linux/</guid><category>blog</category><category>arch</category><category>linux</category><category>kde</category></item><item><title>First!</title><link>https://vinayak.io/2014/02/12/first/</link><description>&lt;p&gt;The customary first post. I will write frequently from now on, I guess.
Move along.&lt;/p&gt;&lt;script src="//platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Vinayak Mehta</dc:creator><pubDate>Wed, 12 Feb 2014 02:40:00 +0530</pubDate><guid isPermaLink="false">tag:vinayak.io,2014-02-12:/2014/02/12/first/</guid><category>blog</category><category>first</category><category>hello</category><category>world</category></item></channel></rss>