Mostly work related stuff which I would've entered into my "Log book". Instead of hosting it on an intranet site, outsourcing the hosting to blogger!
Wednesday, December 24, 2025
test a Mac app to see if it has everything it needs packaged
Sunday, December 21, 2025
adding a 'slow-send' functionality for Google Apps mailing list
- time-based trigger, programmatically created and removed
- sends emails to each recipient individually, ramping up from sending
24 emails per day (once an hour)
to 96 (once every 15 minutes)
to 144 (once every 10 minutes)
to 288 emails per day (once every 5 minutes). This could be increased further, too. - uses GmailApp instead of MailApp, so we can have features like name (of sender), alias, reply-to, etc.
Wednesday, December 17, 2025
using py-ffmpeg-warp on Mac
ntfs write on MacOS
Monday, December 15, 2025
sheepit renderfarm statistics for the M4 Mac Mini
| OS | macm1 |
|---|---|
| CPU | Apple M4 x 10 |
| RAM allowed | 11.0 GB |
| RAM available | 16.8 GB |
| Max render time per frame | |
| Power CPU | 208 % |
| Scheduler | default |
Saturday, December 13, 2025
force quit on Mac
Friday, December 12, 2025
running OpenSpace on Apple Silicon and modern Intel Macs
brew install mesa
But the same crash is observed. Claude says,
Sunday, November 30, 2025
tuning lossless ffmpeg command-line with Claude
The ffmpeg command
ffmpeg -y -r 30 -i in_%05d.jpg -i ../NormPeak-6dBENG.wav -c:v hevc_nvenc -preset lossless -global_quality 18 -pix_fmt nv12 -c:a aac -b:a 192k ~/Downloads/4kframes.mp4
gives the following warnings -
[aist#1:0/pcm_s16le @ 0x59f7e96fbfc0] Guessed Channel Layout: stereo
....
[in#0/image2 @ 0x59f7e96f4e40] Thread message queue blocking; consider raising the thread_queue_size option (current value: 8)
[swscaler @ 0x59f7e97ae500] deprecated pixel format used, make sure you did set range correctly
Last message repeated 3 times
[hevc_nvenc @ 0x59f7e9701880] The selected preset is deprecated. Use p1 to p7 + -tune or fast/medium/slow.
[hevc_nvenc @ 0x59f7e9701880] Using global_quality with nvenc is deprecated. Use qp instead.
Claude's suggestion to fix -
ffmpeg -y -r 30 -i in_%05d.jpg -thread_queue_size 512 -i ../NormPeak-6dBENG.wav -c:v hevc_nvenc -preset p7 -tune lossless -cq 0 -pix_fmt yuv420p -c:a aac -b:a 192k ~/Downloads/4kframes.mp4
Friday, November 28, 2025
MIDI-mapper for OpenSpace (or any javascript API)
Thursday, November 27, 2025
Bosch Wiper blades for Hyundai Santro
PB helped me out with the following info:
List shows 20" on Driver side and 16" on Passenger side
Bosch Clear Advantage — a flat-blade / beam-style wiper. Designed to give uniform pressure across the windshield, better contact, smoother wiping, and more streak-free clearing (especially good in heavy rain or at high speeds).
Bosch ECO (conventional / bracket-frame wiper) — a more traditional wiper with a metal (or mixed) frame + rubber blade. Usually more budget-friendly and covers basic everyday wiping needs.
Bosch Clear Advantage 16"
Friday, November 21, 2025
hardware accelerated video encoding on Intel Iris graphics has issues with jpg frames input - resolved
From ChatGPT,
ffmpeg -i filename_%05d.jpg -c:v hevc_qsv -preset veryslow -global_quality 0 output_lossless_qsv.mkv
- -i must come before input options end.
- All encoder options (-c:v, -preset, -global_quality) must be placed after the input and before the output filename.
With audio, we would need something like
ffmpeg -r 30 -i KG-LS_%05d.jpg -i audio.wav \
-c:v hevc_qsv -preset veryslow -global_quality 0 \
-c:a aac -b:a 192k \
-shortest \
output_with_audio.mkv
# or on Windows,
ffmpeg -r 30 -i KG-LS_%05d.jpg -i audio.wav ^
-c:v hevc_qsv -preset veryslow -global_quality 0 ^
-c:a aac -b:a 192k ^
-shortest ^
output_with_audio.mkv
....
....
Sunday, November 09, 2025
Send user digests - Moodle task fails - sends hundreds of emails to Admin
# Individual discussion subscriptions might still exist
DELETE FROM prefix_forum_digests;
DELETE FROM prefix_forum_discussion_subs;UPDATE prefix_user SET maildigest = 0 WHERE emailstop = 1;# Users might be getting auto-subscribed when they post
UPDATE prefix_forum SET trackingtype = 0;TRUNCATE prefix_forum_track_prefs;Tuesday, November 04, 2025
run 'Issue Certificates' task more often
Set to run every hour at the 30th minute (8:30, 9:30 etc) on one instance and at the 45th minute (8:45, 9:45, etc) on the other instance, in Site Administration > Server > Tasks > Scheduled tasks > \mod_customcert\task\issue_certificates_task
Wednesday, October 29, 2025
installing python modules on Linux and Windows
Sunday, October 19, 2025
handwriting recognition - ChatGPT is still the best
Saturday, October 18, 2025
claude is good at coding
Friday, October 03, 2025
hidden restrictions in Airtel's "unlimited 5G" plans
According to this youtube video, there are some terms and conditions which are shown only in the Airtel app, by which
- If Airtel thinks it is being used for commercial purposes, they can restrict the "unlimited 5G"
- If the data transferred exceeds 300 GB in a month, they can consider it "commercial"
- Tethered use of 5G data - using a mobile hotspot - is not included in the "unlimited 5G"
https://androidsrc.net/android-samsung-phone-symbols/
Sunday, September 28, 2025
Youtube 360 VR videos with a poor internet connection
internet problems with our old wifi router
Tuesday, September 23, 2025
Google Apps Script - get the email of signed in user
Monday, September 22, 2025
warping with ffmpeg - and some filter_complex examples
ffmpeg -i input.mp4 -i map_x_directp2.pgm -i map_y_directp2.pgm -i weight_alpha_mask.png -filter_complex " [0:v]scale=3840:2160[scaled]; [scaled][1:v][2:v]remap[remapped]; [3:v]format=gray,scale=3840:2160,colorchannelmixer=rr=1:gg=1:bb=1[mask_rgb]; [remapped][mask_rgb]blend=all_mode=multiply[out] " -map "[out]" -map 0:a -c:v hevc_nvenc -preset p5 \
-cq 23 -rc vbr -maxrate 15M -bufsize 26M \ -c:a aac -b:a 128k output.mp4
-t for the duration should come just before the filter_complex -
Friday, September 19, 2025
screen capture or screen recording with Linux on NVidia cards
Thursday, September 18, 2025
dd command to create linux boot disk
via https://linuxvox.com/blog/create-usb-boot-linux-mint/
sudo dd if='/path/to/linuxmint-22-cinnamon-64bit.iso' of=/dev/sdd bs=4M status=progress
2810183680 bytes (2.8 GB, 2.6 GiB) copied, 140 s, 20.1 MB/s
So, on my machine, it took less than three minutes to create a 2.8 GB boot disk.
Wednesday, September 17, 2025
Fujitsu mini PC not booting
Edwiser Bridge Plugin for Moodle
Tuesday, September 16, 2025
the find command and mtime - finding disk space used by old files
Asked ChatGPT, "linux commandline to list total disk space used of all files created or modified inside a directory more than one year ago" and got the following -
You can do this with find + du or find + stat + awk.
Here’s a one-liner that lists the total disk space used by files in a directory older than one year:
find /path/to/dir -type f -mtime +365 -printf "%s\n" | \
awk '{sum+=$1} END {print sum/1024/1024 " MB"}'
Explanation:
-
find /path/to/dir→ search inside that directory. -
-type f→ only files. -
-mtime +365→ modified more than 365 days ago (roughly one year). -
-printf "%s\n"→ print file sizes in bytes. -
awk→ sums up sizes and prints total in MB (divide by1024/1024).
If you prefer human-readable output directly:
find /path/to/dir -type f -mtime +365 -print0 | du --files0-from=- -ch | tail -n1
This gives you a total in du’s human-readable format.
Asked ChatGPT, "tree view of files and directories larger than 1 GB from linux command line" and got the following -
You can combine find, du, and tree-style output to list only files/directories larger than 1 GB in a tree view. Here are a couple of approaches:
1. Using find with tree
find /path/to/search -type f -size +1G -print | tree --fromfile
-
find ... -size +1G→ finds files > 1 GB -
tree --fromfile→ prints a tree structure from the list
If you want directories too (based on contents size), use du instead (see below).
2. Using du for directories/files with sizes
du -h --threshold=1G --max-depth=3 /path/to/search | sort -h
-
--threshold=1G→ only show entries larger than 1 GB -
--max-depth=3→ how deep to go -
sort -h→ human-readable sort
This shows sizes and paths (not tree formatting, but size summary is clearer).
3. Pretty tree-like display with du
du -h --threshold=1G --max-depth=3 /path/to/search | sort -hr |
awk '{print $2}' | tree --fromfile
This gives you a tree structure of directories/files whose total size is ≥ 1 GB.
✅ If you want only the largest offenders (say top 20 big files/directories over 1 GB), you can do:
find /path/to/search -type f -size +1G -exec du -h {} + | sort -hr | head -20
For this, I had to sudo apt install tree
Sunday, September 14, 2025
started using github projects for task tracking
How to use github projects - a getting started video -
https://www.youtube.com/watch?v=oPQgFxHcjAw
Opened a private repo with issues, and with ChatGPT's help, linked it to a project. (Projects --> New Project in the github web UI for that repo). Automation to create a new issue worked after some tweaking - the github actions yml is copy-pasted below:
name: Instantiate Planetarium Show Task
on:
workflow_dispatch:
inputs:
show_title:
description: 'Title of the Planetarium Show'
required: true
deadline:
description: 'Deadline'
required: false
permissions:
issues: write
contents: read
jobs:
create_task_issue:
runs-on: ubuntu-latest
steps:
- name: Build issue content
run: |
echo "## Show Details" > issue.md
echo " " >> issue.md
echo "**Show Title:** " >> issue.md
echo "${{ github.event.inputs.show_title }}" >> issue.md
echo "" >> issue.md
echo "**Deadline:** " >> issue.md
echo "${{ github.event.inputs.deadline }}" >> issue.md
echo "" >> issue.md
echo "## Steps" >> issue.md
echo "" >> issue.md
echo "- [ ] Create script" >> issue.md
echo "- [ ] Create Hindi translation" >> issue.md
echo "- [ ] Create Telugu translation" >> issue.md
echo "- [ ] Review Hindi translation" >> issue.md
echo "- [ ] Review Telugu translation" >> issue.md
echo "- [ ] Record Hindi VO" >> issue.md
echo "- [ ] Record Telugu VO" >> issue.md
echo "- [ ] Edit Hindi VO" >> issue.md
echo "- [ ] Edit Telugu VO" >> issue.md
echo "- [ ] Warp ready for our theatre" >> issue.md
echo "- [ ] Eng-Hin-Tel audio" >> issue.md
echo "- [ ] Final audio mix" >> issue.md
echo "- [ ] Save backups" >> issue.md
echo "- [ ] Post on website" >> issue.md
echo "" >> issue.md
echo "---" >> issue.md
echo "" >> issue.md
echo "" >> issue.md
- name: Create issue from template
uses: peter-evans/create-issue-from-file@v4
with:
title: "[Show] ${{ github.event.inputs.show_title }}"
content-filepath: issue.md
token: ${{ secrets.GITHUB_TOKEN }}
labels: show,task
This script had to be re-written due to ChatGPT repeatedly using heredoc syntax which would clash with github's yml. I had to explicitly ask it to "Please use echo >> on each line, and no heredoc."
One more automation script to automatically move the items in the project from "TODO" to "In Progress" when any of the checkboxes above were clicked, failed. ChatGPT usually fails when the documentation is not complete and / or there are conflicting earlier documentation pages, as in this case. It would repeatedly suggest using
permissions: issues: write projects: write
when actually such a permission is no longer accepted by Github - it was part of "classic projects" - https://docs.github.com/en/enterprise-server@3.16/issues/planning-and-tracking-with-projects/creating-projects/migrating-from-projects-classic.
Apparently with projectsV2, the REST api does not work, only GraphQL API works. And it needs a classic personal access token to work. And the code generated by ChatGPT had errors which I could not get it to fix after multiple iterations over multiple days, so I just left updates to be done manually by clicking on the drop-down seen in the linked project for each issue. I could probably read the GraphQL API documentation and try again, but right now, not motivated to do so.
Tuesday, September 09, 2025
unable to use key-based auth
Monday, September 08, 2025
forcing 2FA for all cloudflare users
After a cloudflare advisory asking us to rotate credentials due to a "Compromise Impacting Cloudflare Salesforce Cases", I was asked to force 2FA for all cloudflare users.
https://developers.cloudflare.com/fundamentals/user-profiles/2fa/
The force-2FA option is available for super-admins in the cloudflare admin panel, at
Manage Account > Members > Members 2FA enforcement.
Saturday, September 06, 2025
getting referral ids for Moodle course enrolments
https://github.com/hn-88/moodle-plugin-local-referrals/tree/main/temporary%20python%20code
error_log('[local_referrals] function on_user_enrolled() ... ');
the referral id in $SESSION was being set to null when the user was logging in to our site.
https://github.com/hn-88/moodle-plugin-local-referrals/
https://github.com/hn-88/moodle-plugin-local-referrals/wiki
Friday, September 05, 2025
Microsoft Azure - no meaningful way to contact regarding technical issues for non-profits
Thursday, August 28, 2025
resizing an Azure VM
Wednesday, August 13, 2025
using ABeeZee TTF font on a Moodle instance
Wednesday, July 30, 2025
Virtualbox error - Cannot register - the hard disk already exists
Sunday, July 27, 2025
turn off gmail "smart" summaries
via https://www.digitalinformationworld.com/2025/05/gmail-is-reading-and-summarizing-your.html
On Android --> GMail app --> Hamburger menu --> Settings --> choose the account for which you want to disable --> Untick smart features checkbox
Monday, July 21, 2025
lots of github and Mac learnings
- XCode support for some C++ features is missing - C++ language support - and in some cases, AppleClang's interpretation is stricter than gnu c++ or MSVC. Also, some flags specific to MacOS would change from old versions to new versions of MacOS. And homebrew support for older Macs is spotty. So, supporting Macs is a challenge.
- Verifying and testing on github runners has some issues due to their headless nature.
- Uploading to draft releases works best if that draft release is pre-created - sometimes the tag creation takes a few seconds, leading to failure in uploading the artifact to the draft release. Or, can create a new tag, wait for a few seconds, and then upload the artifact to draft release using a personal access token - PAT.
- MacOS, especially after 15.2, does not make it easy to run unsigned apps. Some workarounds which exist now, like removing the quarantine flag from the internal binary, may not work in the future. It is possible that Debug builds may work and (unsigned) Release builds may not work as in the case of Android apk files - unless we add a codesign step after the build.
- Even with the bundling of dylibs using otool, the binary still seems to look for dylibs in /opt/homebrew etc. So, the bundling code suggested by ChatGPT still has flaws. Or maybe there are some dependency calls which are only at runtime and hence not detected by otool.






