Wednesday, September 16, 2026

updating to MacOS 27

The M4 Mac mini asked to download 13+ GB and update MacOS to version 27, Golden Gate - upgrading from MacOS Tahoe 26.6. Since the office fiber internet was down, I hesitated to start the process using Airtel 5G - but since 5G is supposed to be unlimited on my plan, went ahead.

It took nearly 90 minutes to complete the whole update, probably because while downloading, the 5G network was dropping down to 4G and getting throttled due to exhausting today's quota. On 5G, the download was happening at 30-45 Mbps. 

Interestingly, even after the "Downloading" phase completed and the "Preparing" phase started, there was still plenty of downloading activity as seen in Activity Monitor app. "Preparing" took half an hour. Then 8 minutes on the Apple logo screen while restarting. 

traceroutes just for general interest

I had asked an LLM about the network backhaul used by our ISPs like Airtel, BSNL etc, and was told that while there was no publicly available information about the actual specifications of their backhaul, a traceroute might give more information. Some traceroutes to google.com and nebula.tv from BSNLindicated that they terminated at their Points of Presence - POPs in Chennai - nebula.tv via Cloudflare. With Airtel, google.com seems to go to a Mumbai POP - bom.

traceroute to google.com (142.250.183.174), 64 hops max, 40 byte packets
 1  10.219.86.239 (10.219.86.239)  3.068 ms  3.368 ms  3.003 ms
 2  * * *
 3  192.168.116.2 (192.168.116.2)  64.774 ms  35.220 ms  29.967 ms
 4  * * *
 5  * * *
 6  125.21.99.61 (125.21.99.61)  36.796 ms
    dsl-ncr-dynamic-013.32.23.125.airtelbroadband.in (125.23.32.13)  28.051 ms  44.851 ms
 7  182.79.177.69 (182.79.177.69)  40.855 ms
    116.119.68.247 (116.119.68.247)  47.689 ms
    116.119.161.183 (116.119.161.183)  40.998 ms
 8  * 142.250.169.206 (142.250.169.206)  58.361 ms *
 9  142.250.230.197 (142.250.230.197)  158.451 ms *
    64.233.174.17 (64.233.174.17)  289.370 ms
10  142.251.55.67 (142.251.55.67)  38.116 ms
    142.251.55.230 (142.251.55.230)  233.997 ms
    142.251.55.42 (142.251.55.42)  37.590 ms
11  142.251.55.65 (142.251.55.65)  38.276 ms
    142.251.55.67 (142.251.55.67)  41.114 ms
    172.253.71.132 (172.253.71.132)  37.117 ms
12  bom07s32-in-f14.1e100.net (142.250.183.174)  58.148 ms  35.764 ms
    142.250.62.67 (142.250.62.67)  42.145 ms

Then, a couple of traceroutes to a US server, from BSNL fiber to home network done from a Windows machine

tracert ourdomain.org

Tracing route to ourdomain [redacted]
over a maximum of 30 hops:

  1     1 ms    <1 ms    <1 ms  192.168.1.1
  2     2 ms     4 ms     2 ms  117.192.80.1
  3     4 ms     3 ms     3 ms  10.219.29.194
  4     *        *        *     Request timed out.
  5     *        *        *     Request timed out.
  6    13 ms    13 ms    13 ms  10.200.120.225
  7     *        *        *     Request timed out.
  8    15 ms    14 ms    15 ms  115.110.161.189.static.vsnl.net.in [115.110.161.189]
  9    37 ms    50 ms    37 ms  172.25.199.34
 10    37 ms    36 ms    38 ms  172.28.124.134
 11    39 ms    36 ms    75 ms  172.25.138.206
 12     *        *        *     Request timed out.
 13     *        *        *     Request timed out.
 14     *        *        *     Request timed out.
 15     *      278 ms     *     if-bundle-12-2.qcore2.pvu-paris.as6453.net [80.231.245.13]
 16   272 ms   271 ms     *     ae0.cr2.dfw7.us.zip.zayo.com [64.125.20.63]
 17   272 ms   272 ms   293 ms  ae1.cr2.chd4.us.zip.zayo.com [64.125.25.76]
 18   257 ms     *      353 ms  ae9.cr1.phx4.us.zip.zayo.com [64.125.27.186]
 19     *        *        *     Request timed out.
 20   274 ms   272 ms   273 ms  64.125.199.194.IDIA-409280-003-ZYO.zip.zayo.com [64.125.199.194]
 21   241 ms   246 ms   241 ms  core1-edge2-lag1.phx1.codero.com [216.55.160.6]
 22   254 ms   251 ms   251 ms  216-55-160-81.dedicated.codero.net [216.55.160.81]
(and the next hop was our server in Phoenix.)

So apparently BSNL routed this request via Tata Communications (vsnl), via Paris interconnect to Zayo, and there to Phoenix. Of course, routes would vary from time to time, too.

Trying from a Mac via Airtel 5G network,

traceroute ourdomain.org
traceroute to ourdomain.org (redacted), 64 hops max, 40 byte packets
 1  10.219.86.239 (10.219.86.239)  3.615 ms  2.808 ms  2.575 ms
 2  * * *
 3  192.168.116.2 (192.168.116.2)  28.903 ms  32.648 ms  70.657 ms
 4  * 192.168.116.49 (192.168.116.49)  42.654 ms  33.930 ms
 5  * * *
 6  dsl-ncr-dynamic-013.32.23.125.airtelbroadband.in (125.23.32.13)  49.859 ms
    125.21.99.61 (125.21.99.61)  60.570 ms
    dsl-ncr-dynamic-013.32.23.125.airtelbroadband.in (125.23.32.13)  27.138 ms
 7  116.119.167.20 (116.119.167.20)  249.939 ms
    116.119.167.119 (116.119.167.119)  339.057 ms
    116.119.167.20 (116.119.167.20)  251.139 ms
 8  * * *
 9  be3271.ccr41.lax01.atlas.cogentco.com (154.54.42.101)  348.294 ms  258.764 ms  332.531 ms
10  be2932.ccr32.phx01.atlas.cogentco.com (154.54.45.161)  284.207 ms
    be2931.ccr31.phx01.atlas.cogentco.com (154.54.44.85)  256.272 ms  418.788 ms
11  be3452.rcr21.phx02.atlas.cogentco.com (66.28.4.242)  308.459 ms
    be3451.rcr21.phx02.atlas.cogentco.com (66.28.4.26)  432.845 ms  248.367 ms
12  38.122.88.107 (38.122.88.107)  253.042 ms  252.078 ms  246.671 ms
13  core1-edge1-lag1.phx1.codero.com (216.55.160.4)  273.957 ms  253.373 ms  259.721 ms
14  59-160-55-216.dedicated.codero.net (216.55.160.59)  303.754 ms  307.035 ms
    216-55-160-71.dedicated.codero.net (216.55.160.71)  259.048 ms
15  ourdomain.org (redacted)  444.128 ms  405.611 ms  409.528 ms

In this case, the route seemed to be within Airtel (Bharti Telecom) till the 8th hop, and then directly LA and then Phoenix.

 

Tuesday, September 15, 2026

unable to update plugins after a Moodle update

After upgrading our 4 Moodle instances to the latest minor version, 

Site Administration > Plugins > Plugins overview > Check for available updates button returns "Unable to fetch available updates data - unexpected HTTP response code."

Probably the cause is Moodle's Cloudflare ray rejecting the request from our server with a 403 (I verified that it was sending a 403 with curl) as mentioned in this thread, https://moodle.org/mod/forum/discuss.php?d=429373

So I'll try again later.

Monday, September 14, 2026

exporting all LLM conversations to a private repo

Started work on exporting all conversations from Gemini (via aistudio.google.com), Claude, ChatGPT and Github Copilot to a private repo. 

Claude was the simplest - clicking on my initials (bottom left) → Settings → Privacy → Export data
Got an email with a download link (valid ~24 hours) containing a ZIP of your full conversation history as JSON files within a minute. The download link actually downloaded a json file, which had links to the actual conversations and metadata zip file downloads. Then, parsed the conversations using https://github.com/tyashin/Claude-export-data-parser and a full indexed repo of markdown files was ready for me to sync to my private repo.

OpenAI says it will take a few days for them to prepare and send me the export - had to do the export from the Android app, the web version just went into a loop with Confirm export > ask for one-time password sent to email > Confirm export > ask for one-time password sent to email ... The export initiated from the Android app successfully sent an email to me with "ChatGPT - Your data export has started" and the next day, I got an email with "ChatGPT - Your data export is ready" and a download link. The data export included json files as well as a large chat.html file. Unfortunately, the chat.html had only the text of the  conversations, but no date info. So, following the path of creating a json parser for this data too, as mentioned below.

AIStudio did not seem to have any export ability, even with google takeout (please see the next paragraph). Third-party tools can scrape and export as json, what worked for me was saveai.net AI Chat Exporter. Now I've to parse the json and create an index like Claude-export-data-parser does for Claude. 

Correction to the above paragraph - AIStudio seemed to be storing all conversations in Google Drive, and downloading the directory "Google AI Studio" as a zip file seemed to get us all the conversations.

Made this public repo - https://github.com/hn-88/ai-json-parsers - with the json-to-markdown conversion python scripts generated by Gemini and Claude, which would parse the json files exported by each service and create an indexed set of markdown files. When I host this on github, (in a private repo, since some info does not need to be public) I can search for phrases in all the conversations as well as have a detailed reference of all the LLM replies (some of which are wrong, some of which are useful.)

Sunday, September 13, 2026

resizing Azure VM - moved to D2asv5

There was a request to bump up the capacity of a Moodle instance for an in-person workshop on 12th and 13th. 

Used Chrome on Android to log in to the Azure portal, shut down the instance and size it higher (D2asv4 8 GB to D4asv5 16 GB).

When down-sizing it back, found that D2asv5 (<$41 per month) was cheaper than the original D2asv4 (<$46 per month). So, used D2asv5 8 GB instead.

Saturday, September 12, 2026

app for automating sending of SMS / WhatsApp messages

This is what it does:
1. take the phone number from the clipboard
2. check if that number has an associated whatsapp account
3. If whatsapp account exists, create a preformatted whatsapp message to that whatsapp account - i.e. opens Whatsapp with the draft message, which the user can then send
4. creates an SMS draft too, in the default SMS app, which we can send if required.

Created with Claude in just one prompt - what I wanted initially, and the sequence of prompts, is at
and the one issue with the generated code and fix are at

Friday, September 11, 2026

repeated Cloudflare "human check"

One of our content admins wrote,

For the past week (or so), each time we go to our website, and even click on a sub-page, etc, Cloudflare makes us check that we are human (not a bot). See screenshot attached. 
Do you experience this as well, or is it just me?

It is a bit annoying to do it for EVERY page. Is there a way to do it randomly, or at least once (so it knows this IP address is fine), etc.?

Another admin mentioned that 

I remember (another) website team making some changes to the Cloudflare settings following the phishing attacks and bot injection issues we faced on the (other) website. I believe the human verification check you are seeing could be related to those security measures.  

And I added,

I think one way to avoid getting the bot-check "every time" would be to keep a tab open with a page from our domain - then the session would remain open for around 10 minutes, and any other page in our domain you open within those 10 minutes will not ask you for a bot-check. If you are doing some content editing work which takes more than 10 minutes, if you navigate to another page in the open tab within 10 minutes or refresh that page within 10 minutes, you can avoid the bot-checks.


logo update for sign-in with Google screen

One of our CMS admins mentioned that the 'Sign in with Google' screen still displays the old logo, and that it needed to be replace with the new logo of the organization.

The process according to Claude was,

  1. Go to Google Cloud Console → select your project.

  2. Navigate to APIs & Services → OAuth consent screen (in newer UI it may be under APIs & Services → Branding).

  3. Under the App information section, you'll see an App logo field — upload your logo there (square image, recommended 120x120px, max 1MB, JPG/PNG/BMP).

  4. Save changes. 
I had to find the account under which the project had been created from our old emails - there is no way to easily find the email id under which the project was created from the project id which is present in the php code. But Claude says that the Super Admin for Google Workspace can give themselves the permissions in order to get this info, but I did not try it. Private URL for my reference, https://claude.ai/chat/5e521ed1-ec1a-4301-8c89-f7a21939b6e1

Wednesday, September 09, 2026

Claude's review of swayam plus integration local plugin for Moodle

Created a wiki page at https://github.com/hn-88/swayamplus-sso-api-integration/wiki
and populated it with Claude's comments during its review of code for this plugin which had been generated by Gemini in a single prompt.