Wednesday, December 10, 2025

where to change the CEF helper executable's name on MacOS - two LLM answers

Two answers from ChatGPT (or is it Copilot?) and Gemini respectively.

Yes — on macOS the CEF helper does not need to be named “AppName Helper.app”.
You can rename it, but the name must be configured in the app bundle structure, the build system, and each helper’s Info.plist.
It is not set in cefhost.cpp.

Below is the definitive breakdown.


✅ Where the helper name comes from (macOS)

CEF on macOS requires three helper bundles:

MyApp.app
 └─ Contents
     └─ Frameworks
         ├─ MyApp Helper.app
         ├─ MyApp Helper (GPU).app
         └─ MyApp Helper (Renderer).app

The names of these helper apps must match the names embedded in Info.plist entries, including:

  • CFBundleName

  • CFBundleExecutable

  • CFBundleIdentifier

  • LSEnvironment (for specifying the subprocess type)


⚙️ Where to change the name

### 1. Xcode / CMake / GN build target name

If you use CMake (CEF standard):

set_target_properties(my_custom_helper PROPERTIES
    OUTPUT_NAME "MyCustom Helper"
)

This determines:

MyCustom Helper.app

2. Helper’s Info.plist

You must update the plist inside each helper bundle:

<key>CFBundleName</key>
<string>MyCustom Helper</string>

<key>CFBundleExecutable</key>
<string>MyCustom Helper</string>

<key>CFBundleIdentifier</key>
<string>com.mycompany.myapp.helper</string>

Each helper type also requires:

<key>LSEnvironment</key>
<dict>
    <key>CEF_PROCESS_TYPE</key>
    <string>renderer</string>
</dict>

(“renderer”, “gpu”, or “zygote” depending on helper.)


3. Main app’s Info.plist linking to helpers

The main app references the helpers in:

  • CEFSubprocessPath

  • or the ChromeHelper mechanism depending on version

A typical example:

<key>CEFSubprocessPath</key>
<string>Contents/Frameworks/MyCustom Helper.app/Contents/MacOS/MyCustom Helper</string>

🚫 NOT set in cefhost.cpp

cefhost.cpp (and other platform code in CEF) does not control helper names.
CEF simply launches whatever bundle/executable path you specify.


✔️ Summary

SettingWhere changed
Helper app nameBuild system (Xcode/CMake/GN)
Executable nameInfo.plist (CFBundleExecutable)
Bundle nameInfo.plist (CFBundleName)
Bundle identifierInfo.plist (CFBundleIdentifier)
CEF subprocess pathMain app’s Info.plist or CEF API call

If you want, I can also provide:

  • A ready-to-use CMake configuration for custom helper names

  • A complete set of 3 macOS helper Info.plists

  • A template for an entire renamed CEF macOS bundle layout


Gemini says,

Yes, you can rename the CEF helper application to something other than AppName Helper.app. This is common for branding or obscuring the use of CEF.

To do this, you must coordinate changes in two places: the filesystem (the actual app bundle) and the source code (CefSettings).

Step 1: Rename the Helper Bundle (File System)

You need to change the name of the helper application bundle itself and its internal executable.

  1. Rename the Bundle: Change YourApp Helper.app to CustomName.app inside your main application's Contents/Frameworks/ directory.

  2. Rename the Executable: Inside CustomName.app/Contents/MacOS/, rename the executable binary from YourApp Helper to CustomName.

  3. Update Info.plist: Open CustomName.app/Contents/Info.plist and update these keys to match your new name:

    • CFBundleName: CustomName

    • CFBundleExecutable: CustomName

    • CFBundleIdentifier: (Optional but recommended) com.yourcompany.CustomName

Step 2: Configure CEF (Source Code)

You must explicitly tell CEF where to find this newly renamed sub-process, or it will continue looking for the default AppName Helper name.

You do this by setting the browser_subprocess_path in the CefSettings structure. This should be done in your application's initialization code (likely where you call CefInitialize). If you are using a file named cefhost.cpp, that is likely where this code resides.

Code Example:

C++
// In your main process initialization (e.g., cefhost.cpp or main_mac.mm)
CefSettings settings;

// ... other settings ...

// Get the main bundle path
CefString main_bundle_path = CefGetMainBundlePath();

// Construct the full path to your renamed helper
// Path: Contents/Frameworks/CustomName.app/Contents/MacOS/CustomName
std::string helper_path = main_bundle_path.ToString() + 
                          "/Contents/Frameworks/CustomName.app/Contents/MacOS/CustomName";

// Convert to CefString and assign to settings
CefString(&settings.browser_subprocess_path) = helper_path;

// Initialize CEF
CefInitialize(main_args, settings, app, sandbox_info);

Important Note for Modern macOS (Catalina+)

Since macOS 10.15 (Catalina), strictly secure applications are required to use multiple helper apps with specific entitlements (e.g., one for GPU, one for Rendering, one for Plugins).

If you are shipping a modern, notarized macOS app, you generally need 4 distinct helper bundles:

  1. CustomName.app

  2. CustomName (GPU).app

  3. CustomName (Renderer).app

  4. CustomName (Plugin).app

If you rename the main helper, you should ensure you rename/configure these variants as well if your build system generates them. However, setting browser_subprocess_path usually targets the "main" helper executable, which acts as the entry point for all sub-processes unless configured otherwise.

Summary Checklist

  • [ ] Rename YourApp Helper.app -> CustomName.app

  • [ ] Rename binary inside Contents/MacOS/

  • [ ] Update Info.plist (BundleName, Executable)

  • [ ] Set settings.browser_subprocess_path in your C/C++ code.

Change Application Display Name in Toolbar on macOS

This video demonstrates how to modify the Info.plist and CFBundleName for a macOS application, which is a necessary step when renaming your CEF helper app bundle.


Tuesday, December 09, 2025

Xcode update - "Xcode 1.5 not supported"

Copy-pasting an answer from one of the LLMs (I don't remember which one, maybe duck.ai)

The CMake error "Xcode 1.5 not supported" when building on macOS 15.5 indicates a version mismatch between your CMake installation and your Xcode installation.
Understanding the Issue:
  • Xcode 1.5 is a very old version of Apple's integrated development environment. It predates many modern macOS features and compiler toolchains.
  • macOS 15.5 is a relatively recent operating system. This means it likely requires a much newer version of Xcode and its associated command-line tools to function correctly.
  • CMake needs to be able to find and interact with a compatible Xcode installation: to generate build files and compile your project. If CMake detects an unsupported or outdated Xcode version, it will throw this error.
Resolving the Error:
  • Update Xcode:
    The most likely solution is to update your Xcode installation to a version compatible with macOS 15.5.
    • Open the Mac App Store and search for "Xcode."
    • Download and install the latest available version.
    • After installation, open Xcode to complete any initial setup and agree to the license agreements.
  • Install Xcode Command Line Tools:
    Even if you update Xcode, you might also need to explicitly install or update the Xcode Command Line Tools, as these contain the compilers and other utilities that CMake relies on.
    • Open Terminal and run the following command:
Code
        xcode-select --install
  • Follow the on-screen prompts to complete the installation.
  • Update CMake: While less likely to be the primary cause, ensuring you have a recent version of CMake is good practice.
    • If you installed CMake via Homebrew:
Code
        brew update        brew upgrade cmake
  • If you installed CMake manually, download the latest version from the official CMake website and follow the installation instructions.
  • Verify Xcode Selection: Ensure that your system is pointing to the correct Xcode installation.
    • In Terminal, run:
Code
        xcode-select -p
  • This should output the path to your current Xcode installation (e.g., /Applications/Xcode.app/Contents/Developer). If it's incorrect or points to an older version, you can set it using:
Code
        sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
(Adjust the path if your Xcode is installed elsewhere).
After performing these steps, try running CMake again to generate your build files. The error should be resolved.

Wednesday, December 03, 2025

steps to creating an iOS app via wpmobile.app

wpmobile.app creates an app from a wordpress site, and one of our institutions wanted support with uploading such an app to Google Play Store and Apple App Store.

For Apple App Store, the first step would be to enrol into Apple Developer Program

... looks like enrolling into the Apple Developer program is a long-drawn-out process. Currently it says, "You will be sent an email soon." (2 working days). 

How long does it take for Apple to process your Apple Developer Program enrollment? : r/iOSProgramming

didn't get it within 2 working days, I contacted support and asked them to expedite, then it came through.

From https://wpmobile.app/en/help/

needed account / pw of wpmobile dashboard 

then to create app specific password for the apple account which has the Apple developer account

https://support.apple.com/en-us/102654

Where to find my Team Name and Team ID

Log in to your account at https://developer.apple.com/account/
Go to Subscription details
The Team ID is the team identifier
The Team Name is displayed at the top right of the page (your first and last name if it’s an Individual account).



Next, the 2FA will come on the iOS device (iPad in my case) when trying to log in to the apple account via the wpmobile.app dashboard. After a few minutes, the dashboard shows App generated with success.... The build will be pushed to your Apple account in few minutes. Download the certificate file for notification and upload it on the WPMobile plugin > Notifications > Settings > iOS. (on the wordpress site).

It seems XCode (the platform used to compile Mac and iOS apps) will push the build to our App Store Connect account. ... the app is seen there....  need to go through the process of editing the description etc and related online paperwork, and then send for review. appstoreconnect.apple.com/apps

In order to install the app before reaching the app store, we need to invite that particular user using testflight - and we need to invite using the Apple id which is associated with that particular iOS device. 

Edit - In our case, the app review said that since this app was supposed to be used by the members of a particular organization, they would not approve public distribution. So, applied for unlisted distribution (where searching the app store will not find it, but we can link to the app from our website). And that was approved.

Initially submitted Dec 5
Rejected Dec 6
Applied for unlisted on Dec 8
Approved for unlisted distribution Dec 11
Again sent for review with this approval Dec 11
(respond to App Review directly in the App Review section in App Store Connect)
Review passed Dec 12
(available for distribution at apps.apple.com)



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)

With the help of Claude.ai, I've put up a MIDI-mapper for OpenSpace at OpenSpace MIDI mapping.

The readme.txt lists the prompts used, and usage. Copy-pasting from my post on OpenSpace Slack: With this, we can control OpenSpace using any MIDI control surface or MIDI instrument. Interesting effects like speeding up time for one (MIDI) violin string, slowing down for another string, etc can be thought of.

I've used our KORG nanokontrol - earlier version of this product - to do the development and testing.

By adding suitable functions, this could be extended to call any javascript API using a MIDI controller or MIDI instrument.

Thursday, November 27, 2025

Bosch Wiper blades for Hyundai Santro

 PB helped me out with the following info:

Attached is the wiper blades size for Santro
List shows 20" on Driver side and 16" on Passenger side




TYPES OF BOSCH WIPERS
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.

AMAZON LINKS
Bosch Clear Advantage 16"
I have been using Bosch ECO, and it works well. 
Will try Clear Advantage next time.

And, found that there were video guides on how to fit the blades, in the amazon listings. Also available on youtube, at Bosch ECO and Clear Advantage.

On my (new) Santro, the 20" blade seems a bit short. Perhaps I'll try the 21-inch blade next time.

Saturday, November 22, 2025

ffmpeg framerate change without reencoding - failed attempts

Apparently, to change the framerate without re-encoding, 

ffmpeg -i input_video.mp4 -c copy -bsf:v h264_metadata=tick_rate=50:fixed_frame_rate_flag=1 output_video.mp4


ffmpeg -i input_video.mp4 -r 24 -c copy output_video.mp4

But this didn't seem to work with avidemux, so re-encoding with avidemux. 

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

For 4K (4096x4096) files, this was running at around 8 fps on my i5 laptop, as against 2 fps for non-accelerated libx264. The mistake I made earlier was to put the preset before the -c:v.
  • -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.

If you place -preset before -i filename_%05d.jpg, FFmpeg thinks it’s a decoder option, causing the error:

Codec AVOption preset ... is not a decoding option.

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


Edit - this produces a low-bitrate video with colour issues on VLC (and perhaps on other players. The python front-end presets, like the command below, might be useful - 
FFmpeg command to copy-paste:
ffmpeg -y -i in_%05d.jpg -i map_x_directp2.pgm -i map_y_directp2.pgm -i weight_alpha_mask.png -filter_complex '[0:v][1:v][2:v]remap[remapped];[3:v]format=gray,scale=4096:4096,colorchannelmixer=rr=1:gg=1:bb=1[mask_rgb];[remapped][mask_rgb]blend=all_mode=multiply[blended];[blended]scale=3840:2160,setsar=1,setdar=16/9,format=yuv420p[out]' -map '[out]' -map '0:a?' -c:v hevc_qsv -preset fast -crf 23 -pix_fmt yuv420p -c:a aac -b:a 128k D:/out-W4K.mp4

So, without warping, that would be - 
ffmpeg -y -i in_%05d.jpg -i audio.wav -c:v hevc_qsv -preset veryslow -crf 1 -pix_fmt yuv420p -c:a aac -b:a 128k out.mp4

But unfortunately, even the warping command produces a low bitrate video with colour issues. Green tinted instead of purple tinted for the earlier videos. Even changing the codec to libx265 did not help. So, some incompatibility in the input frames is suspected. Maybe I'll just use avidemux instead instead of trying to troubleshoot.

From ffmpeg -h
Getting help:
    -h      -- print basic options
    -h long -- print more options
    -h full -- print all options (including all format and codec specific options, very long)
    -h type=name -- print all options for the named decoder/encoder/demuxer/muxer/filter/bsf/protocol

ffmpeg -h encoder=hevc_qsv
....
  -preset            <int>        E..V....... (from 1 to 7) (default medium)
     veryfast        7            E..V.......
     faster          6            E..V.......
     fast            5            E..V.......
     medium          4            E..V.......
     slow            3            E..V.......
     slower          2            E..V.......
     veryslow        1            E..V.......

....
  -profile           <int>        E..V....... (from 0 to INT_MAX) (default unknown)
     unknown         0            E..V.......
     main            1            E..V.......
     main10          2            E..V.......
     mainsp          3            E..V.......
     rext            4            E..V.......
     scc             9            E..V.......


    
Claude.ai pointed out that the colour tint issues are probably due to wrong pixel format, and the low bitrate is probably because "QSV's CRF implementation is unreliable". So, suggestion is to use nv12 pixel format and global_quality instead of CRF, where quality of 15-20 is near lossless. Or force a high bitrate if that doesn't work - -b:v 20M -maxrate 25M

ffmpeg -y -r 30 -i in_%05d.jpg -i audio.wav -c:v hevc_qsv -preset veryslow -global_quality 18 -pix_fmt nv12 -c:a aac -b:a 128k out.mp4

And that solved the problem.

No colour tint, hevc_qsv encoder resulted in a 25 Mbps video, libx265 encoder with the same preset and quality settings but without the -pix_fmt nv12 resulted in a 7 Mbps video, both of good quality.

Brevo transactional emails and DNS setup.

After email discussions spanning a few days, I set up google workspace accounts and added a couple of subdomains to google workspace - Brevo's setup includes CNAMEs for DMARC and DKIM records in the format subdomain1.ourdomain.org is a cname for b2.vsubdomain1-ourdomain-org.dkim.brevo.com and so on. 

So, set up email1@subdomain1.ourdomain.org as an alias for email1@ourdomain.org and so on, pointing the MX records to google workspace, so that bounce messages would be able to go somewhere. The reason I'm just not creating email ids like email1@subdomain1.ourdomain.org without aliases is because Brevo uses DMARC (a method of email server authentication) which would cause emails sent from google's servers to be marked as spam if we set Brevo to send authenticated emails from those email ids.

There were lots of back-and-forth emails saying emails are not being delivered. Finally, the dev team set up the domain authentication once again (which they had not done for subdomain2.ourdomain.org), sent me the details of the cnames & txt records to be added, I added them, and then all was OK.  

Saturday, November 15, 2025

strategies for dealing with Google Workspace account filling up

Copy-pasting from an email:

Here are some ways to clear up space in <google workspace account>

You can go to drive.google.com/drive/quota. There, you see how much storage you use in Google Drive, Gmail, and Google Photos. It also lists the largest files in your google drive, which you can delete if not needed.

2. If GMail is the service which is using up most of the storage, then you can consider deleting files based on how large the attachments are, or based on how old the email is.

To find the emails with attachments greater than 10 MB, enter the following in the search box at the top of your GMail - 
has:attachment larger:10Mb
and hit Enter. 



Similarly for attachments greater than 5 MB etc. 

(You can also use the advanced search link on top of your GMail to achieve this.)
For finding emails older than a particular date, there is a drop-down, "Any time" just below the search email box. To find all emails earlier than 2015, say, you can first clear the "Search mail" box and then choose the "Any time" drop-down, and choose custom, like the screenshot below.




Using these search methods, you can try to delete unwanted emails, spam, internet forwards, outdated correspondence, and so on.

Once emails are deleted, you will then need to go to "Trash" and choose "Empty Trash Now" if you want the space savings to be applied ASAP. Even after this, Google might take some time before the % used decreases.

In case you are not able to free up space in this way, and need to back up old correspondence, here are some ways of doing that, by forwarding to another account, or by using a product called mailstore, etc, details in the link below - 

Sunday, November 09, 2025

Send user digests - Moodle task fails - sends hundreds of emails to Admin

On one of our Moodle instances, emails are supposed to go out through Google Workspace using Google SMTP servers. That being the case, we can't send an unlimited number of emails. So, email notifications had been globally - Site Administration > General > Messaging > Notification settings, which is located at server.url/admin/message.php

When there was a request to allow emails of a particular type to particular users, after enabling the email notification plugin at the above page, the next time a forum post was made, there was a cascade of Send user digests failed and Send user notifications failed messages.

For the immediate failure messages to stop, deleted all the adhoc tasks from mod_forum,

delete from prefix_task_adhoc  where prefix_task_adhoc.component = 'mod_forum';

I had previously set emailstop=1 on the database users table, for all users except the handful which should receive emails. Possibly the reason for the failures was that forcesubscribe=1 was set for many forums for many / all users. 

So, now I set it to zero (email disabled) for all forums on this instance, with

update prefix_forum set prefix_forum.forcesubscribe = 0;

and also updated the defaults,
Site administration > plugins > plugins overview > (chose mod_forum) > settings >

site.url/admin/settings.php?section=modsettingforum

and set subscription mode = subscription disabled for both defaults,
forum_announcementsubscription
and
forum_subscription 

Also, went to prefix_forum_subscriptions table and deleted all entries - which I suppose would be various users' subscriptions to various forums.

Hopefully this is sufficient to prevent the hundreds of failed send notification tasks. 

Update 13 Nov - Again received hundreds of task failed messages. Asked Claude.ai, and made the following changes as suggested, in addition to the above.

# 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

There was a request for setting up email notifications for one Moodle course, a particular user to be notified when any user completes that course. I had earlier set many tasks to run less often due to our server being overloaded. 'Issue Certificates' task was one of them, especially since it needed some optimizations as per this thread. Checking the logs, I could see that issue certificates was taking between 30 and 120 seconds - so, increased the scheduled task cron frequency from once a day to once an hour, for two of our Moodle instances. 

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

For trying out LLM-generated python scripts for "warping", (still works in progress)

On Windows, various python modules can be installed with 
pip install modulename
where we sometimes have to do an internet search to find the exact modulename. 


pip install pillow

On my Linux Mint machine, where I've installed python using the default deb package with apt, 

ModuleNotFoundError: No module named 'imageio'
and when trying to install with pip,

× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
    python3-xyz, where xyz is the package you are trying to
    install.

sudo apt install python3-imageio # this worked.

Tuesday, October 28, 2025

proctoring plugins for Moodle

Copy-pasting from an email exchange:

 ... would require us to conduct a proctored test. Moodle has several plug-ins. They are promoting 'Proctoring for Moodle'. I also find Quilgo to be good. Can we install these 2 plug-ins (and any other plug-in recommended by you) in (our dev server) for us to test them out?

Here is a list of proctoring plugins for Moodle, probably you would have seen this already. https://moodle.org/plugins/?q=proctor

'Proctoring for Moodle' is free software, but if you want to use the automated face-recognition, they ask us to contact them. "Moodle Proctoring plugin is a Quiz Access plugin designed to capture a user's picture via webcam to identify the individual attempting the Moodle quiz."

A demo is at https://www.youtube.com/watch?v=NcrE1OIj6_Q

In that video, it is mentioned that features like capturing student's screen for "suspicious behaviour" like copy-pasting into Google etc, requires Proctoring Pro.


But the "purchase" Proctoring Pro link seems to be broken. -

https://proctoring.elearning23.com/ 
https://elearning23.com/moodle-proctoring-pro-details/
https://elearning23.com/wp-content/uploads/2024/10/Proctoring-Pro-v2.0.0-User-Manual.pdf

(page not found etc)

"Quilgo® Proctoring for Moodle is a highly scalable plugin that allows you to include a camera, screen, track activity, and receive reports on test completion. Online assessments become easier and more reliable. Easy to use, no API customization or maintenance required." But the free plan is only for 20 tests, and the cheapest paid plan is $1200 for a year or $140 for a month.

https://quilgo.com/products/moodle 

A demo/tutorial is at https://www.youtube.com/watch?v=-pwwImIprSM

I have installed 'Proctoring for Moodle' and "Quilgo® Proctoring for Moodle" on (our dev server) now.

Saturday, October 25, 2025

can QUIC be added to our dot net app

There was a request from the developers asking if we can enable QUIC support to the back end of an app for which we had disabled QUIC at cloudflare to prevent issues.

My reply was,

QUIC on Apache web server (which we use as the reverse proxy for dotnet) is experimental. 

We would have to use the experimental module, or shift to another web server like nginx etc. 

Since migration to a different web server is not simple, and the QUIC module is experimental on Apache, I would recommend against enabling QUIC for now. 

Also, QUIC security headaches for admins - 

Sunday, October 19, 2025

handwriting recognition - ChatGPT is still the best

Uploading a page from my diary and checking how good the various LLMs are at handwriting recognition - ChatGPT is good for regular snaps.

ChatGPT -
JUN 7 FRI
 Social service instead of jogging as you're coming – making the Ashoka trees straight.
 Afternoon no class – we went to Mandir ~ 1:45, You came ~ 3:15. Vedaṁ, balloons, exerts, song – W/N pg writing & study this time Krishnamoorthy, IMI – problems in C...

Claude had done well at coding - better than ChatGPT and Gemini, but fared worse in handwriting recognition - Claude's version -
JUN 7 FRI
Bowl Service instead of dragging so forth coming - making the little trees sharply. Afternoon no class - we went to Nandu ~ 1:45, Su came ~ 3:15. Yadav, balloons, esotts, songs N/N pg writing & study his tone. Kishnamathy I/W - problems in C...

My corrected version - 
Social service instead of jogging as You're coming - making the Ashoka trees straight. Afternoon no class - we went to Mandir ~ 1:45 pm, You came ~ 3:15 pm. Vedam, balloons, escorts, song – WIN prg  during waiting at Mandir & study hours time. Krishnamoorthy, 1st MSc - problems in C...

Edit - 9 Nov - But when I edited together 5 pages to form a single long page, ChatGPT started hallucinating instead of transcribing!

Excerpt from ChatGPT's version of July 5-14 - 
JUL 5, FRI
 Toured Siddalingeshwar Plantation.
 Found good crop condition — 4½ acres of Amlan.
 Evening went to A.P.S. meeting at old students’ association.
 9:45 P.M. came home.
 Supper.

Actual corrected version,
"Pseudo heterodyning" - frustrating as could get only π phase change. Used signal analyzer to acquire data. S4 again seminars on 902...

Timetable again reverting to old schedule, 9 to 3, from Monday.




Saturday, October 18, 2025

claude is good at coding

Pleasantly surprised to find that Claude.ai, running the Sonnet 4.5 model, with just a free plan and a single prompt, created a usable UI for a timeline editor in html / javascript, when supplied with javascript helper functions copy-pasted along with the prompt - the initial commit is at




Edit - Subsequent commits were needed to make it actually functional, connect to OpenSpace, etc. using code copied from Jeff Nee,


The "finished product" is here,

Thursday, October 09, 2025

Tuesday, October 07, 2025

Moodle Course Completion

Extracts from an email thread, S asked the question and answered himself - 

...we have a custom report 'Course Completion Status' in one of our Moodle instances.

There is a field 'Course Completion - Completed' and this field should show 'Yes' when the course is completed and 'No' when the user is still doing the course. And then there is another field, 'Course Completion.Student Progress' and this field shows the percentage progress.

For (one particular) course many teachers have completed the course (the percentage is 100); certificates have been issued to them. However, the field 'Course completion - completed' is set to 'No' and not 'Yes'. What could be the problem? Even the system report 'Activity Completion' has all the activities ticked. 

Found out the issue - within the course, the course completion criteria weren't set up. To mark the course as completed, at least one criterion should be enabled. 

In the course page - More->Course Completion, enable one or more conditions. I have enabled 'Custom Certificate-Course Certificate'. And immediately, all the people who have received certificates have been marked as 'Completed'. 

Friday, October 03, 2025

Accelerated remap with OpenCL - did not work out

 Using the hardware accelerated remap_opencl filter instead of the remap filter (as used in python-ffmpeg-warp) along with hardware accelerated video encoding with nvenc may not be so straightforward - 

https://superuser.com/questions/1819926/how-to-use-ffmpeg-opencl-filters-that-are-accelerated-with-nvenc

Lots of errors even with Gemini's suggestions like

ffmpeg -init_hw_device opencl -c:v hevc -i 'short_w.mp4' -i map_x_directp2.exr -i map_y_directp2.exr \ -filter_complex \ "[0:v]format=p010le,hwupload[vupload]; \ [vupload][1:v][2:v]remap_opencl[vremap]; \ [vremap]hwdownload,format=yuv420p[vout]" \ -filter_hw_device opencl \ -map "[vout]" -map 0:a \ -c:v libx264 -crf 18 warped_opencl_output_final.mp4

Detailed stackoverflow post, 

"Please take into account any overheads that mechanisms introduced by filter chains such as hwupload and hwdownload may introduce into your pipeline, as uploading textures to and from system memory and the accelerator in question will affect performance, and so will format conversion operations (via the format filter) where needed/required."

"You will need to compile your own ffmpeg build using their extensions - see https://developer.nvidia.com/ffmpeg for instructions as the standard binary does not include these capabilities."

(So, did not go this route, and stuck to remap instead of remap_opencl.)

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

  1. If Airtel thinks it is being used for commercial purposes, they can restrict the "unlimited 5G"
  2. If the data transferred exceeds 300 GB in a month, they can consider it "commercial"
  3. Tethered use of 5G data - using a mobile hotspot - is not included in the "unlimited 5G"
And one of the comments in that video pointed out that the reason why at some times the 4G data cap gets used up even though 5G is displayed in the status area on the top right of Android phones, is because of Airtel's use of 4G infrastructure to deliver 5G - in which case, the 4G billing gets used. And apparently, the difference can be noticed on Samsung phones with the 5G logo which is displayed. 

It seems 5G with a white background = true 5G.




And 5G with white text = 4G masquerading as 5G.

And this seems to be confirmed by this page, 
https://androidsrc.net/android-samsung-phone-symbols/