<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>parquet on S Anand</title>
    <link>https://www.s-anand.net/blog/tag/parquet/</link>
    <description>Recent content in parquet on S Anand</description>
    <generator>Hugo -- 0.164.0</generator>
    <language>en-us</language>
    <lastBuildDate>Sun, 31 May 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://www.s-anand.net/blog/tag/parquet/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Things I Learned - 31 May 2026</title>
      <link>https://www.s-anand.net/blog/things-i-learned-31-may-2026/</link>
      <pubDate>Sun, 31 May 2026 00:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/things-i-learned-31-may-2026/</guid>
      <description>&lt;p&gt;This week, I learned:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.d-id.com/&#34;&gt;D-ID&lt;/a&gt; is an avatar generator platform like &lt;a href=&#34;https://heygen.com/&#34;&gt;HeyGen&lt;/a&gt;. &lt;a href=&#34;https://creatify.ai/&#34;&gt;Creatify&lt;/a&gt; and &lt;a href=&#34;https://www.synthesia.io/&#34;&gt;Synthesia&lt;/a&gt; are a couple of others I heard of. This space seems to be growing.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/sigstore/cosign&#34;&gt;cosign&lt;/a&gt; is a CLI that lets you sign and verify any piece of text with a Google, GitHub or Microsoft account. &lt;code&gt;cosign sign-blob FILE --bundle sign.json&lt;/code&gt; opens a login window and creates a &lt;code&gt;sign.json&lt;/code&gt; signature. Anyone who has &lt;code&gt;FILE&lt;/code&gt; and &lt;code&gt;sign.json&lt;/code&gt; and the email ID can verify via a Google account with &lt;code&gt;cosign verify-blob FILE --bundle sign.json --certificate-identity $EMAIL --certificate-oidc-issuer https://accounts.google.com&lt;/code&gt;. &lt;!-- https://chatgpt.com/c/6a197375-fd5c-83ec-9f21-43b084a3830a --&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://arxiv2md.org/&#34;&gt;arxiv2md.org&lt;/a&gt; converts arXiv papers to Markdown. &lt;a href=&#34;https://github.com/timf34/arxiv2md&#34;&gt;Source&lt;/a&gt;. &lt;a href=&#34;https://markxiv.org/&#34;&gt;markxiv.org&lt;/a&gt; claims the same - by just changing the URL - but it ended up reporting an error when I tried this link: &lt;a href=&#34;https://markxiv.org/abs/2604.08649&#34;&gt;https://markxiv.org/abs/2604.08649&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;From Akhilesh Tilotia: So we have someone in our team with initials AS. She made a document which was named vAS. Then I made edits and named it vAT. These docs were in a CoWork folder. I asked Claude to clean up my doc. It created another version for me to review. In its wisdom, it named the file vAU 🙂&lt;/li&gt;
&lt;li&gt;Maybe what a forward-deployed engineer does is enginer AI-native workflows. (This sounded profound when I wrote it down. Not sure if it&amp;rsquo;ll sound as profound tomorrow.) The idea is that the FDE will say, screw existing processes; let me fire up my AI agent and get stuff done; THEN we&amp;rsquo;ll figure out what works, how to optimize it, etc.&lt;/li&gt;
&lt;li&gt;The &lt;a href=&#34;https://arxiv.org/abs/2604.08649&#34;&gt;PRAGMA: Revolut Foundation Model&lt;/a&gt; has some good tokenization ideas for tabular data. Create your own token space with &lt;code&gt;key–value–time&lt;/code&gt; tokenization - to retain field information. Bucketize numbers by percentile, preserving magnitude/ordering that subword tokenization destroys. Encode time both as log-seconds &lt;em&gt;and&lt;/em&gt; as cyclical calendar features.&lt;/li&gt;
&lt;li&gt;Codex uses the &lt;kbd&gt;Alt + Up Arrow&lt;/kbd&gt; key to edit queued commands, but on the VS Code terminal, this key binding is not sent to the terminal. Enable the &lt;code&gt;terminal.integrated.sendKeybindingsToShell&lt;/code&gt; setting to send it to the terminal, hence Codex.&lt;/li&gt;
&lt;li&gt;Based on this &lt;a href=&#34;https://chatgpt.com/share/6a16dfd6-bd70-83ec-807a-646366ba9a99&#34;&gt;catalog&lt;/a&gt; on &amp;ldquo;universal foods&amp;rdquo;, here&amp;rsquo;s what I 🟢 like, am 🟡 neutral, 🔴 dislike, 🟣 must try, and will ⚫ skip. &lt;!-- https://chatgpt.com/c/6a165e95-5100-83ec-8b90-c41fd2876fdf --&gt;
&lt;ul&gt;
&lt;li&gt;Universal favorites: 🟢 pizza, 🟢 fried potatoes/chicken, 🟡 dumplings, 🟢 ice cream.&lt;/li&gt;
&lt;li&gt;Universal comfort foods: 🟢 khichdi, 🟡 congee, 🟡 dal-rice, 🟡 risotto, 🟡 ramen, 🟢 pho, ⚫ chicken noodle soup, 🔴 rice porridge, 🟡 mac-and-cheese, 🔴 mashed potato, 🟣 polenta, 🟢 oatmeal, 🟣 Japanese curry rice.&lt;/li&gt;
&lt;li&gt;Acquired tastes that convert most: 🟡 coffee, 🟢 tea, 🟡 dark chocolate, 🟢 mild fermented dairy, 🟢 pickles, 🟢 olives, 🟣 kimchi, 🟣 miso, 🟢 mild chili dishes.&lt;/li&gt;
&lt;li&gt;Acquired tastes that have cult devotion: 🟣 durian, 🟣 natto, 🟣 stinky tofu, ⚫ fermented fish, ⚫ hákarl, 🟢 very funky blue cheese, ⚫ offal.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://oceanofpdf.com/&#34;&gt;OceanoPDF&lt;/a&gt; seems like a good place to download ePubs of books.&lt;/li&gt;
&lt;li&gt;The entire Wikipedia is available as a &lt;a href=&#34;https://huggingface.co/datasets/wikimedia/structured-wikipedia&#34;&gt;Parquet file&lt;/a&gt;. You can query it like &lt;code&gt;duckdb -c &amp;quot;FROM &#39;hf://datasets/wikimedia/structured-wikipedia/enwiki/data/*.parquet&#39; LIMIT 5&amp;quot;&lt;/code&gt;. The English version has 35 GB, 7.6 million articles, and you&amp;rsquo;re better off downloading it rather than running analyses remotely.&lt;/li&gt;
&lt;li&gt;When you receive a Calendly link of the form &lt;code&gt;https://cal.com/USER/EVENT&lt;/code&gt; you can fetch the available slots via &lt;code&gt;curl -H &#39;cal-api-version: 2024-09-04&#39; &#39;https://api.cal.com/v2/slots?eventTypeSlug=EVENT&amp;amp;username=USER&amp;amp;start=2026-05-25&amp;amp;end=2026-06-01&amp;amp;timeZone=Asia/Singapore&amp;amp;format=range&#39;&lt;/code&gt;. Useful to automate good meeting-slot selection. &lt;!-- https://chatgpt.com/c/6a126d5e-b9c8-83ec-a88b-f230d04434e9 --&gt;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Reference saved memories&amp;rdquo; in ChatGPT is different from &amp;ldquo;Reference chat history&amp;rdquo; as per &lt;a href=&#34;https://help.openai.com/en/articles/8590148-memory-faq&#34;&gt;OpenAI&lt;/a&gt;. In &lt;a href=&#34;https://help.openai.com/en/articles/12584461-developer-mode-and-mcp-apps-in-chatgpt&#34;&gt;Developer Mode&lt;/a&gt;, memory is turned off, but not chat history. I confirmed that I can access past conversations in Developer Mode. It might be a privacy concern for others, but for me, this is singularly useful, because I can use ChatGPT with &lt;a href=&#34;https://www.s-anand.net/blog/how-i-use-local-mcp/&#34;&gt;Local MCP&lt;/a&gt; effectively getting a non-metered AI coding agent. &lt;!-- https://chatgpt.com/c/6a12c899-ac5c-83ec-a4fa-6e0717f810b3 --&gt;&lt;/li&gt;
&lt;li&gt;Seems GPT-5.2 reaches expert level in peer review: 45 scientists took 469 hours evaluating human &amp;amp; AI reviews on 82 papers. &amp;ldquo;Surprisingly, current AI reviewers are competitive even with the top-rated reviewers in Nature’s official peer review&amp;hellip;&amp;rdquo; though not without weaknesses, so use AI + humans. &lt;a href=&#34;https://arxiv.org/abs/2605.20668&#34;&gt;On the limits and opportunities of AI reviewers: Reviewing the reviews of Nature-family papers with 45 expert scientists&lt;/a&gt; via &lt;a href=&#34;https://bsky.app/profile/emollick.bsky.social/post/3mmf2ano3ik27&#34;&gt;Ethan Mollick&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    <item>
      <title>The Jamnagar Chokepoint - Data Story</title>
      <link>https://www.s-anand.net/blog/the-jamnagar-chokepoint-data-story/</link>
      <pubDate>Thu, 01 Jan 2026 03:14:11 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/the-jamnagar-chokepoint-data-story/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://sanand0.github.io/datastories/exim/&#34;&gt;&lt;img alt=&#34;The Jamnagar Chokepoint&#34; loading=&#34;lazy&#34; src=&#34;https://sanand0.github.io/datastories/exim/screenshot.webp&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/Vonter/&#34;&gt;Vivek&lt;/a&gt; published an &lt;a href=&#34;https://github.com/Vonter/india-export-import&#34;&gt;Indian commodity export/import dataset&lt;/a&gt; on 31 Dec 2025.&lt;/p&gt;
&lt;p&gt;Codex and Claude increased their rate limits for the holiday season, so I had:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/sanand0/datastories/blob/main/exim/codex-analysis.md&#34;&gt;Codex analyze the data&lt;/a&gt; (OpenAI models are a bit more rigorous) and create an &lt;a href=&#34;https://github.com/sanand0/datastories/blob/main/exim/ANALYSIS.md&#34;&gt;ANALYSIS.md&lt;/a&gt; file.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/sanand0/datastories/blob/main/exim/claude-story-verge.md&#34;&gt;Claude create a visual story&lt;/a&gt; based on the analysis. (Claude narrates and visualizes better).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href=&#34;https://sanand0.github.io/datastories/exim/&#34;&gt;Here is the data story&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/sanand0/datastories/blob/main/exim/prompts.md&#34;&gt;Here are the prompts&lt;/a&gt; used.&lt;/p&gt;
&lt;h3 id=&#34;analyze&#34;&gt;Analyze&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;I downloaded export-import.parquet from https://github.com/Vonter/india-export-import which has data sourced from the Indian [&lt;span class=&#34;nt&#34;&gt;Foreign Trade Data Dissemination Portal&lt;/span&gt;](&lt;span class=&#34;na&#34;&gt;https://ftddp.dgciskol.gov.in/dgcis/principalcommditysearch.html&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Each row in the dataset represents a trade entry for a single commodity, country, port, year, month, and type (import or export).
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`Commodity`&lt;/span&gt; string: Name of the commodity
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`Country`&lt;/span&gt; string: Name of the foreign country
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`Port`&lt;/span&gt; string: Name of the port in India
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`Year`&lt;/span&gt; int32: Year for the import/export activity
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`Month`&lt;/span&gt; int32: Month for the import/export activity
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`Type`&lt;/span&gt; category: Type of trade (Import or Export)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`Quantity`&lt;/span&gt; int64: Quantity of the commodity
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`Unit`&lt;/span&gt; string: Unit for the quantity
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`INR Value`&lt;/span&gt; int64: Value of the commodity in INR
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`USD Value`&lt;/span&gt; int64: Value of the commodity in USD
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Analyze data like an investigative journalist hunting for stories that make smart readers lean forward and say &amp;#34;wait, really?&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; Understand the Data: Identify dimensions &amp;amp; measures, types, granularity, ranges, completeness, distribution, trends. Map extractable features, derived metrics, and what sophisticated analyses might serve the story (statistical, geospatial, network, NLP, time series, cohort analysis, etc.).
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; Define What Matters: List audiences and their key questions. What problems matter? What&amp;#39;s actually actionable? What would contradict conventional wisdom or reveal hidden patterns?
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; Hunt for Signal: Analyze extreme/unexpected distributions, breaks in patterns, surprising correlations. Look for stories that either confirm something suspected but never proven, or overturn something everyone assumes is true. Connect dots that seem unrelated at first glance.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; Segment &amp;amp; Discover: Cluster/classify/segment to find unusual, extreme, high-variance groups. Where are the hidden populations? What patterns emerge when you slice the data differently?
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; Find Leverage Points: Hypothesize small changes yielding big effects. Look for underutilization, phase transitions, tipping points. What actions would move the needle?
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; Verify &amp;amp; Stress-Test:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; **Cross-check externally**: Find evidence from the outside world that supports, refines, or contradicts your findings
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; **Test robustness**: Alternative model specs, thresholds, sub-samples, placebo tests
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; **Check for errors/bias**: Examine provenance, definitions, methodology; control for confounders, base rates, uncertainty (The Data Detective lens)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; **Check for fallacies**: Correlation vs. causation, selection/survivorship Bias (what is missing?), incentives &amp;amp; Goodhart’s Law (is the metric gamed?), Simpson&amp;#39;s paradox (segmentation flips trend), Occam’s Razor (simpler is more likely), inversion (try to disprove) regression to mean (extreme values naturally revert), second-order effects (beyond immediate impact), ...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; **Consider limitations**: Data coverage, biases, ambiguities, and what cannot be concluded
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; Prioritize &amp;amp; Package: Select insights that are:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; **High-impact** (not incremental) - meaningful effect sizes vs. base rates
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; **Actionable** (not impractical) - specific, implementable
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; **Surprising** (not obvious) - challenges assumptions, reveals hidden patterns
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; **Defensible** (statistically sound) - robust under scrutiny
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Save your findings in ANALYSIS.md with supporting datasets and code.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;This will be taken up by another coding agent to create reports, data stories, visualizations, dashboards, presentations, articles, blog posts, etc.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Ensure that ANALYSIS.md is documented well enough so that all assets are clear, the approach, intent and implications are understandable.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;visualize&#34;&gt;Visualize&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;I downloaded export-import.parquet from https://github.com/Vonter/india-export-import which has data sourced from the Indian [&lt;span class=&#34;nt&#34;&gt;Foreign Trade Data Dissemination Portal&lt;/span&gt;](&lt;span class=&#34;na&#34;&gt;https://ftddp.dgciskol.gov.in/dgcis/principalcommditysearch.html&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Each row in the dataset represents a trade entry for a single commodity, country, port, year, month, and type (import or export).
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`Commodity`&lt;/span&gt; string: Name of the commodity
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`Country`&lt;/span&gt; string: Name of the foreign country
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`Port`&lt;/span&gt; string: Name of the port in India
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`Year`&lt;/span&gt; int32: Year for the import/export activity
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`Month`&lt;/span&gt; int32: Month for the import/export activity
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`Type`&lt;/span&gt; category: Type of trade (Import or Export)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`Quantity`&lt;/span&gt; int64: Quantity of the commodity
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`Unit`&lt;/span&gt; string: Unit for the quantity
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`INR Value`&lt;/span&gt; int64: Value of the commodity in INR
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`USD Value`&lt;/span&gt; int64: Value of the commodity in USD
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Then I had Codex analyze it. The analysis is in ANALYSIS.md.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Find the most intesting insights from ANALYSIS.md and create a data story with supporting visualizations.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Write as a &lt;span class=&#34;gs&#34;&gt;**Narrative-driven Data Story**&lt;/span&gt;. Write like Malcolm Gladwell. Think like a detective who must defend findings under scrutiny.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; **Compelling hook**: Start with a human angle, tension, or mystery that draws readers in
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; **Story arc**: Build the narrative through discovery, revealing insights progressively
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; **Integrated visualizations**: Beautiful, interactive charts/maps that are revelatory and advance the story (not decorative)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; **Concrete examples**: Make abstract patterns tangible through specific cases
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; **Evidence woven in**: Data points, statistics, and supporting details flow naturally within the prose
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; **&amp;#34;Wait, really?&amp;#34; moments**: Position surprising findings for maximum impact
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; **So what?**: Clear implications and actions embedded in the narrative
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; **Honest caveats**: Acknowledge limitations without undermining the story
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Visualize like The New York Times Interactives. Ensure that all visualizations interactive and provide revelatory insights as well as some kind of delightful experience.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Follow the typography, color &amp;amp; theme, backgrounds, interaction patterns, and animation principles of The Verge&amp;#39;s frontends.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Generate a single page index.html + script.js.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Things I Learned - 06 Jul 2025</title>
      <link>https://www.s-anand.net/blog/things-i-learned-06-jul-2025/</link>
      <pubDate>Sun, 06 Jul 2025 00:00:00 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/things-i-learned-06-jul-2025/</guid>
      <description>&lt;p&gt;This week, I learned:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;When adding a coding benchmark for LLMs, here&amp;rsquo;s a question I&amp;rsquo;d like to add. #benchmark
&lt;blockquote&gt;
&lt;p&gt;How do I use Apache Arrow in the browser via cdn.jsdelivr.net to create a .parquet file and download it? Give me minimal working code I can paste in the browser console to test.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;LinkedIn has an undocumented link that shows schedules posts at &lt;a href=&#34;https://www.linkedin.com/share/management/&#34;&gt;https://www.linkedin.com/share/management/&lt;/a&gt; which redirects to &lt;a href=&#34;https://www.linkedin.com/feed/?shareActive=true&amp;amp;view=management&#34;&gt;https://www.linkedin.com/feed/?shareActive=true&amp;amp;view=management&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Here&amp;rsquo;s a JS snippet you can paste in the DevTools console of an npm package version page (&lt;a href=&#34;https://www.npmjs.com/package/d3?activeTab=versions&#34;&gt;example&lt;/a&gt;) to get a Markdown list showing the versions and dates
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;copy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;$$&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;table[aria-labelledby=&amp;#34;version-history&amp;#34;] tbody tr&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;map&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;tr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;tr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;querySelector&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;a&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;date&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;Date&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;tr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;querySelector&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;time&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;getAttribute&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;datetime&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;toLocaleDateString&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;en-GB&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;day&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;numeric&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;month&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;short&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;year&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;numeric&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`- [&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;textContent&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;trim&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;](https://npmjs.com&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;getAttribute&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;href&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;): &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;date&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;.`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;join&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;\n&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;DuckDB can read JSON APIs! &lt;a href=&#34;https://duckdb.org/2025/06/27/discovering-w-github&#34;&gt;Ref&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;⭐ When bringing in humans-in-the-loop, applications must make it easier to &lt;em&gt;review&lt;/em&gt; and to &lt;em&gt;edit&lt;/em&gt; the work.&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    <item>
      <title>Embeddings in DuckDB</title>
      <link>https://www.s-anand.net/blog/embeddings-in-duckdb/</link>
      <pubDate>Sun, 16 Jun 2024 13:06:44 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/embeddings-in-duckdb/</guid>
      <description>&lt;p&gt;This article on &lt;a href=&#34;https://blog.brunk.io/posts/similarity-search-with-duckdb/&#34;&gt;Using DuckDB for Embeddings and Vector Search&lt;/a&gt; by Sören Brunk shows a number of DuckDB features I wasn&amp;rsquo;t aware of.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;DuckDB can read directly from &lt;a href=&#34;https://huggingface.co/docs/hub/datasets-duckdb&#34;&gt;Huggingface datasets&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;DuckDB can read &lt;a href=&#34;https://duckdb.org/docs/data/parquet/overview#partial-reading&#34;&gt;just the parts of a .parquet file it needs&lt;/a&gt;, even &lt;a href=&#34;https://duckdb.org/2021/06/25/querying-parquet.html&#34;&gt;over HTTP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;DuckDB lets you &lt;a href=&#34;https://duckdb.org/docs/api/python/function&#34;&gt;write custom functions in Python&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;DuckDB now has a &lt;a href=&#34;https://duckdb.org/2024/05/03/vector-similarity-search-vss.html&#34;&gt;vector similarity search extension&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&amp;rsquo;ve recently become a DuckDB fan and continue to be impressed.&lt;/p&gt;
</description>
    </item>
  </channel>
</rss>
