10 July 2026

Short tutorial on SIR (Special Intensive Revision) form filling

The Special Intensive Revision is conducted to verify and revise electoral rolls to ensure that the data is accurate. It was conducted in 2002 in Karnataka, and voters of 2026 are expected to find their 2002 data or their relative's 2002 data and mention it in the 2026 form. I decided to create a short tutorial. This is primarily to resolve confusion of how to fill the form.

Disclaimer: I'm not an expert on this topic. I'm not writing this in any official capacity. Make sure you verify the information provided here and consult your BLO (Booth Level Officer) or ERO (Electoral Registration Officer) for accurate and updated info. 

The short version

1. Find your existing voter details: Search for your voter id number on the electoralsearch.eci.gov.in website or from the voter helpline app, and your detailed voter information page will show you who your BLO and ERO is. Or you can call the helpline to find out. Save their phone numbers and also note down your "Part serial number" and "Part number".

2. Get your form from BLO: Tell your BLO your Part number to confirm if it is the correct BLO. Ask your BLO when and where you can get your enumeration form. When you meet your BLO, mention your Part serial number and take both copies of your enumeration form from your BLO. Also ask the BLO for a blue/purple sticker which you need to stick on/near your house door. Sign on the BLO's register to confirm you got your form (you can collect your family member's forms on their behalf).

3. Find the 2002 data: Use the ECINET app or the voters.eci.gov.in website to search for your 2002 SIR data and your relative's 2002 SIR data. It's easier to search via the website on a laptop/desktop computer than on a phone. Select the state, district and assembly constituency you are most likely to find your data (you can ask an AI which district and assembly constituency your address might have been under in 2002). Type your name or your relative's name in "Elector full name in last SIR in 2002" and try variations of the name and surname. Type the captcha and search. If any list of names is shown, notice that at the top of the table there's a search bar and a translate button you can use. Once you find the relevant data, take a screenshot of it and copy the exact text of the Elector full name, Relative full name, Relative type, District, State, AC Name (AC is Assembly Constituency), AC Number, Part No. (Polling station No.), Part Sr No. It is important that you copy all this data exactly as it is given in the 2002 data even if there are spelling mistakes. Do not make changes to it.

4. Fill the forms: In the enumeration form, fill the "Details of the Elector in the Electoral Roll of the last SIR" section only if you found your data in the 2002 SIR data. You are supposed to enter the data exactly as it was in the 2002 data. The section for "Details of the relative whose name is given in the previous column in the last SIR" is to enter the data of your blood-relative (father, mother, grandfather, grandmother regardless of where they registered for the 2002 SIR in India), and even in this section you should enter the data exactly as it is in the 2002 list. Then fill the compulsory section where you type your date of birth, mobile number, parent's name, etc. Fill both forms. Then if you want to update your photo, stick a passport size photo in one form and sign it.

5. Submit forms: Show both forms to the BLO. Take a photo of both forms for your reference. Submit one form to the BLO. Make sure you get the BLO's signature as an acknowledgement on the second form. You can keep the second form with you as proof of what you submitted.

More details

The English version of the form is provided here.

Top column

Option to update your photo
Here even if your name and address is printed wrong, you cannot immediately correct it. I remember reading somewhere that the BLO can correct it for you. The other option might be to submit the SIR form and later submit form 8 for corrections. You should ask your BLO for how to proceed. For now you can at least update your photo by pasting a new passport size photo in the "Paste Current Photo" column (I remember reading somewhere that the background of the photo should be white).

Your 2002 data section 

Write your 2002 SIR details only if you could find it
If you could find your data in the 2002 SIR list and if you are alive, only then you should enter this data. Otherwise do not guess or assume any info and write it. It could very likely be a punishable offence. It does not matter which part of India you were in for the 2002 SIR. If you can find that data, you can enter it in this section. This is called "Self mapping", where you are mapping your old data to your new data. 

  • Elector Name: Your name exactly as it is written in the 2002 list. Even if there is a spelling mistake do not make any corrections to the spelling. No need to write the correct spelling in brackets either because this data is only for connecting to old data. Name corrections are to be done via form 8 later.
  • EPIC No.: If the EPIC number is available in your 2002 data, write it exactly as it is in the 2002 data. I have seen cases where the EPIC number is mentioned wrong, so in such cases I think it might be better to avoid writing it since it is optional. Ask your BLO for clarifications.
  • Relative's name: If you had mentioned your relative's name in 2002, enter it exactly as it is in the 2002 list even if the spelling or initials are wrong.
  • Relationship: Even if the relationship is written as "Other" in the 2002 list, write it exactly as it is.
  • District: The name of the district mentioned in the 2002 list. 
  • State: The name of the state mentioned in the 2002 list.
  • AC name: The Assembly Constituency name as mentioned in the 2002 list. You'll have to sometimes provide an AI like Gemini or ChatGPT a list of the Districts and the AC's of each district (as mentioned in the 2002 search tool) and ask it which district your current location might have been part of in 2002, because sometimes AC's or districts are split into new AC's or districts. For example, Uttarahalli (Famous for being the largest constituency in India prior to 2008), later split into 8 separate segments like Padmanabhanagar, RR Nagar, and Bangalore South.
  • AC number: Each assembly constituency has a number mentioned near its name. Write that number as it was in 2002.
  • Part No: Enter your part number as shown in your 2002 data. It's unfortunately shown as "Polling station No." in the search tool. "Part" refers to a specific geographic area or neighborhood within an Assembly Constituency that is mapped directly to a single polling station. It's different from a polling booth which is simply a building where people go to vote, but in this case it'd be the polling station number. 
  • Part Serial No.: This is your personal serial number (voter number) inside that specific Part's voter list. For example, if you are the 45th person listed in your neighborhood's roll, your Part Serial No. is 45.

Your relative's 2002 data section

Write your relative's 2002 details only if you could find it

This section is called "Progeny mapping", to link you to your blood relatives. If you could find your relative's data in the 2002 list (no matter where in India they were) and if you are alive, fill up this section. Else, leave it blank. Do not try to guess or assume any data. Your relative cannot be your in-laws. It has to be either your grandparent (maternal or paternal) or parent (there are websites like this, this and this which say uncle/aunt or sibling could be mentioned, but I don't know how far this is feasible because the software has options only for parents and grandparents). For adopted children, I think they need to enter their adoptive parent's details, but I'm not sure, so please ask your BLO.

  • Name: The name of your relative exactly as given in the 2002 list. Do not add "Late" or "Deceased" or "Expired" in brackets if they died.
  • EPIC No: If mentioned in the 2002 list, and if wrongly mentioned, then perhaps skip it (ask your BLO for confirmation)
  • Relative's name: The relative's name which your relative mentioned in the 2002 list. Do not add "Late" or "Deceased" or "Expired" in brackets if they died.
  • Relationship: This is not about your relationship to that relative. It's the "Relative type" as mentioned in the 2002 list. If they've written "other" instead of "Father" etc., you are supposed to write "other". It has to match the 2002 data exactly.
  • District, State, AC Name, AC Number, Part No., Sr.No: As written in the 2002 list, and as I explained in the section above. 

Your correct data section 

This section is necessary to fill with accurate data
 

This is simple enough to fill in. Mention your correct date of birth, correct Aadhaar number (optional), correct mobile number, name of the father, mother, spouse and the EPIC id's (as mentioned in their voter id because this enumeration stage is to map data correctly to family members). If it is a pre-printed form of a person who already died, I don't think you need to fill the form. There's a separate form for that. Speak to the BLO or an SIR helpline about what needs to be done, and especially ask about what if the parent's or spouse name spellings are wrong in their voter id.

When filling parent's names into this section, if they have already passed away I think their names can be prefixed with "Late" or mention "(expired)" after their name. Ask your BLO for clarifications. As for spouse, if you are a widow or widower, I think you are supposed to omit the spouse name. Again, ask the BLO to be sure.

Resources

Questions people usually have

What are the consequences of missing SIR? 

I think your name may not be included in the updated electoral rolls. I think you would need to go to the voter services portal and submit form 6 so that you are re-included into the electoral roll. I'm not sure of this. You need to consult your BLO or ERO.

What if you could not find your 2002 data or entered it wrong?

As per this post you might be marked "unmapped" and be considered a new voter. From August 5th 2026 onward (in Karnataka) the ERO may issue a notice for you to submit documents to establish your eligibility to vote. The list of documents is given in the back side of the form. It is important to not guess any of the 2002 data and instead, write the 2002 data only if you could find it. 

Fill form 8 to make corrections to pre-printed name before submitting the enumeration form?

Probably not. The form 8 submission and SIR submission follow different workflows, and it's probably only after the draft electoral rolls are published that the officers might take a look at the form 8 submissions. There's a guide for how to fill form 8. When I asked my BLO if she could approve a correction via form 8, she said she didn't receive instructions to process form 8, so it seems like it won't be done during the enumeration form filling phase.

Corrections to the form in whitener or strike out?

First, compulsorily fill the form in pencil. Only after you are 100% sure of the information and ready to submit, you can write with pen. After writing with pen if there are still corrections, my BLO said that whitener needs to be used and after it dries the person can write on top of it, but this article says there's no clarity on whitener use but you can strike out what was written and write the correct info next to it and sign perhaps at the side of the form, to indicate that you did the strike out.

Why is the SIR being done?

This post says it's a comprehensive update of the electoral roll which is different from the SSR (Special Summary Revision) which updates fewer details. The SSR helps remove duplicate entries too (people registered in multiple places). It helps the electoral roll remain accurate.

What if the BLO does not visit the house?

You don't have to wait. You can fill the form online (the BLO may still conduct a physical verification if required) or visit the BLO or ERO or local election office or call the election helpline for help. 

What if there are mistakes in the current voter id or the pre-printed part of the enumeration form?

After the draft electoral roll is published, fill form 8 to make corrections. 

How to prove that the relative in the 2002 electoral roll is a relative?

Normally if the data is found in the 2002 list that itself would be sufficient to link you to the relative. If the BLO/ERO is not convinced they'll ask for documents during the verification phase. You don't have to submit any supporting documents while submitting the enumeration form.

What if it's difficult to find a relative's details due to estrangement, death or other family issues?

You can search the 2002 list or explain the situation to the BLO/ERO and they should help you find the relevant data. 

What if a person has moved to a different address?

SIR helps in verifying address changes too, so submitting form 6 or form 8 as appropriate would help fix the issue. You could ask your BLO/ERO.

What if a person's name is missing in the electoral record now?

Contact the BLO/ERO. They can help trace the historical record. 

Some people are writing "Late" or "Expired" in brackets near the name of their father/mother. Is it ok?

For the non-2002 section it's ok.

If any part of the form is not to be filled, should it be left blank or should a horizontal line be drawn there or should the person write "Not applicable"?

Nothing wrong with leaving it blank, but an AI told me there's nothing wrong with drawing the horizontal line, but it's better not to write "Not applicable". 

If self or relative's details like name or age or relationship of the 2002 details are wrong in the 2002 data?

Multiple sources say there might be an opportunity in the corrections phase to correct the data after submitting proof, but I'm not sure. 

Will the BLO require signing a register on submitting the paper form?

My BLO made me sign a register when accepting the form and when returning the form too. Although as long as you have the BLO's signature on your second form, I think that should be sufficient proof of submission. 

What if self or relative's EPIC number is not available in the 2002 data or is listed wrong? 

It's optional to write it.

In the portion where we write our father and mother's name, is it ok to write the name in English and then write the name in brackets in the regional language?

I've been told by an SIR helpline that it's ok. But don't do the same thing for the 2002 data. 

Who can help if I have questions?

There are various SIR helpline numbers and email id's online. You can also meet your BLO and ask (at least in my place they gather at the BBMP office in the evening).

What if I lost my paper form?

Not sure what the process is, but you could approach your BLO or ERO to print it again. The other option is to submit it online. I wrote to the election commissioner to request making pre-printed PDF forms available online so that we could take a printout ourselves, but got no reply.

What precautions can I take?

Fill the form using pencil first, confirm all the details and then write in pen.

My form is in Kannada. Can I fill the form in English?

Yes 

What if a person had a different spouse in 2002 and what about children born to different spouses in 2002 and 2026?

For 2002 the details of the 2002 time need to be retained. For the child, whatever is mentioned in the child's document as the parent's name is to be mentioned. Again, please ask your BLO to confirm.

30 June 2026

OCR program to transliterate PDF pages from regional languages to English

With the Special Intensive Revision of voter lists being done in Karnataka, and the 2002 voter lists being primarily in Kannada, I needed a way to transliterate the PDF files to English. 


So I vibecoded this Python application which can be used either from the GUI or via the commandline. Since some pages may be scanned, and hence the text may not be digitized, or even if it is digitized it may not be in a format that can easily be converted to the desired Unicode format, I decided to process the PDF using Optical Character Recognition (OCR).

The program writes the recognized regional language words into a text file and writes the transliterated text in brackets right next to it.

This is a very basic version of the program. There is much more that can be done to improve it. I considered many other libraries, but there seemed to be too much of a download requirement to use many of them. These are the approximate size requirements info an AI gathered:

  • PyMuPDF (PDF parsing): ~40 MB to 90 MB
  • PaddleOCR (OCR): ~800 MB – 1.2 GB
  • Tesseract (OCR): ~5 MB (+ ~15 MB per language pack)
  • PP-Structure / LayoutParser (page layout detection): ~150 MB to 500 MB
  • fastText (language detection): ~1 MB (or ~120 MB for full fastText model)
  • indic-transliteration / Aksharamukha (transliteration): ~5 MB – 15 MB
  • IndicTrans2 (translation): ~2 GB (Distilled) to ~12 GB (Full 1B)
  • PyMuPDF or ReportLab (PDF creation): ~3 MB | Lightweight 

So for this project I've used PyMuPDF, Tesseract, Pillow, OpenCV, Numpy and Indic-transliteration. If the need arises, I'll add more functionality, but you are welcome to submit PR's too.

20 May 2026

Contaminants in our food

Chemical contaminants in our food have been a major concern in recent times, and there are a massive number of educated and uneducated people who are blissfully ignorant of it and aren't able to correlate their various pains, rashes, urination issues, inflammation, pimples, fungal infections, kidney pain, intestinal pain, burning sensation, chills, dental issues, ADHD, lethargy, brain fog, cancer, Parkinsons, and various other issues, to the food contaminants. Even when these cause various health issues, many doctors aren't suggesting anything about switching to safer foods. Moreover, the high costs of organic foods are prohibitive enough that even people severely affected are not buying safer foods. I found it even more appalling that not all organic food is actually organic. Whenever I tell people why I cannot eat certain foods at their homes or functions, it became hard to just say "allergy", because it isn't just an allergy, and there is much that they need to understand about how it affects me and others. So I decided to list out various contaminants and how they affect health.

https://nav9.github.io/contaminants/

 

Health effects of various contaminants

Disclaimer: I told an AI to search through research papers and list the contaminants, so there may or may not be errors. 
  • Organophosphates and organochlorines could disrupt the function of the thymus, potentially leading to autoimmune disruption. It could also disrupt the autonomic nervous system which controls heart rate and rhythm, potentially leading to arrhythmias and sudden death. Also linked to hearing loss, the development of atherosclerosis and increased risk of non-fatal myocardial infarction (heart attack). They alter lipid metabolism and increase fibrinogen, which makes blood thicker and more likely to form a 100% blockage (clot) on top of an existing plaque.
  • Aflatoxins being linked to immune suppression and liver cancer. Can weaken vein and artery walls, causing internal hemorrhages and heart failure.
  • Dioxins causing skin lesions, patchy darkening of the skin, reproductive issues, interference with hormones and damage to the immune system.
  • Aminoglycosides which can cause hearing loss, gaze instability (oscillopsia) and balance impairments.
  • Tetracyclines which can cause skin photosensitivity, fatty liver, tinnitus, abdominal pain, breathing issues, and cause drug-induced lupus
  • Heavy metal poisoning: 
    • Mercury causing central nervous system (CNS) injury, renal dysfunction, gastro intestinal ulceration, promotes thrombosis (clot formation) and inactivates protective enzymes that usually keep arteries healthy.  Foods rich in selenium and zinc (found in organic seeds and nuts) act as natural antagonists to heavy metals like mercury and lead, helping the body slowly process these toxins. Foods high in iron (red meat, beans, iron fortified cereals can compete with lead for absorbtion, calcium can block lead from entering cells, vitamin B1 can accelerate lead removal, vitamin C can help remove free radicals created by lead)
    • Lead (sometimes present in rice) causing CNS injury, lung dysfunction, anemia, liver damage, cardiovascular dysfunction (can impair nitric oxide production, which is essential for blood vessel relaxation). Contaminants like lead and cadmium make plaques "unstable" or "vulnerable." This means a smaller blockage can suddenly "burst" and form a blood clot that completes the 90-100% obstruction, leading to a sudden heart attack in someone who appeared healthy.
    • Chromium causing kidney dysfunction, gastro intestinal (GI) disorders, skin diseases, increasing incidence of various cancers. 
    • Cadmium (found in industrial fertilizers) poisoning causing degenerative bone disease, kidney dysfunction, liver damage, accumulates in arterial walls, promoting atherosclerosis and increasing the risk of heart failure, GI disorders, lung injuries, impacting metabolism of zinc and copper, causing cancer. 
    • Arsenic causing cardiovascular dysfunction (associated with carotid artery thickening in children and peripheral vascular disease), skin and hair changes, CNS injury, GI discomfort and liver damage. There are some precautions to be aware of when considering chelation

Guides: 

  • There's a lot more mentioned in Thankamma Jacob's book: Poisons in our food (which is oddly the exact same title I wanted to write an article with). 
  • More information on tips and tests here.
  • A guide from the Voluntary Health Association of India too. 
  • A guide to plan out nutrition, budgeting and mentions contaminants too. 

How much do our farmers and fishermen know about all this, and how much do they care about safe food. Even if they do care, how many of these chemicals are finding their way into fields via various environmental effects and even via companies run by educated people? A survey by the government found that even some organic veggies had heavy metal contamination at some places. The bodies of various people are struggling, supposedly from the autoimmune effects and various other effects of chemicals, and doctors aren't doing much to help identify these issues and come up with solutions.

  • There are other chemicals causing bone loss and pyrethroid poisoning which can cause itching, burning, muscle twitching
  • Chlorpyriphos, dimethoate, phosalone, mancozeb and captan causing malignant brain tumors (glioblastoma multiforme, medulloblastomas, astrocytomas, anaplastic oligodendrogliomas, ependymomas, choroid plexus papillomas, etc.).
  • Organophosphates like chlorpyrifos, malathion, acephate, dimethoate, edifenphos, carbendazim and mancozeb potentially being ototoxic (causing hearing loss). Some of these may have been used in sugarcane cultivation.
  • Methyl bromide and perhaps even phosphine being used to fumigate stored grains to kill insects, possibly causing unstable gait, vertigo, polyneuropathy, optic neuropathy, depletion of glutathione (antioxidant which protects cells from damage caused by reactive oxygen species) in several tissues, such as the liver, kidneys, lungs, and brain. 
  • Argemone oil contamination in mustard oil resulting in edema and tenderness of the abdomen, fluid retention (edema) in the upper and lower limbs (dropsy).
  • Microplastics (polyacrylamide, polyacetylene, ethylene vinyl alcohol (EVOH), polyvinyl chloride (PVC) and polyamide (nylon)) in shellfish and other fishes. Toxins leaching from microplastics can percolate into the GI tract and be transported to the edible tissue. Consumption of such seafood could lead to alteration in chromosomes, which can lead to infertility, obesity and cancer. Nanoplastics could cause cardiopulmonary issues, alterations of endogenous metabolites, genotoxicity, inflammatory responses, oxidative stress, effects on nutrient absorption and gut microflora.
  • Trans Fats: Often found in adulterated or low-quality frying oils, trans fats are the most direct cause of arterial "clogging" by simultaneously raising bad cholesterol and lowering good cholesterol.
  • Bisphenol A (BPA): Leached from the linings of metal food cans, BPA is associated with angina (chest pain from blockages) and accelerated atherosclerosis.  
  • Nitrofurans, chloramphenicol, and other antibiotics in aquaculture, heavy metal and insecticide contamination in fish farms. Mercury, zinc, lead, copper, cadmium in large open water fishes. Dried fish from fishing villages showed an accumulation order of Zinc > Lead > Copper > Chromium > Cadmium.
  • Formalin (high risk of stomach, lung, and nasopharyngeal cancers) or sodium benzoate (can cause allergies, oxidative stress in cells, damage the immune system, and increase DNA damage in human cells, interfere with protein digestion in the human gut, hyperactivity, anxiety, and potentially decreased memory) used to extend the shelf life of fish, ammonia added to ice to slow down the melting process (can cause gastric irritation and damage to intestinal tissues).
  • Alum (fitkari) possibly deceptively being used to make herbs look fresher. It's also used in gardening. It could potentially cause kidney and GI damage
  • Soapstone/talc used for polishing dal may contain forms of asbestos (carcinogen) and soapstone can also impair the functioning of the GI system.  
  • Mixed Exposure: Research indicates that "mixtures" of various pesticides (sometimes called a "pesticide cocktail") can have a linear, positive association with a 10-year risk of atherosclerotic cardiovascular disease. 
  • Bacterial Endotoxins (LPS): These can contaminate meat and dairy, triggering systemic inflammation that depresses heart function and increases the risk of heart failure. 
  • Aflatoxins: These can weaken vein and artery walls, causing internal hemorrhages and heart failure. Case studies include a 15-year-old boy whose sudden death was linked to aflatoxin-induced heart failure.
  • Citreoviridin: Found in mouldy rice, it has been historically linked to "cardiac beriberi," causing sudden cardiac arrest.
  • T-2 Toxin: This mold toxin can cause hypertension and damage heart tissue directly through oxidative stress.  
  • Acrolein: Formed during high-heat frying of oils or found as a pollutant in crops near heavy traffic, it is a potent irritant to the endothelium and can trigger myocardial infarction.
  • Acrylamide: Produced in starchy foods (like potato chips or bread) during high-temperature cooking, it is associated with platelet activation and increased cardiovascular risk. It is also a cancer risk.
  • Artificial Sweeteners: Recent studies have linked high intake of erythritol, aspartame, and sucralose to an increased risk of stroke and heart attack by enhancing platelet responsiveness and clot formation.  
  • Metanil Yellow: This food colourant (sometimes used to give jaggery its yellow color) can inhibit gastrointestinal transit, is known to have carcinogenic and mutagenic properties and affecting the Purkinje cells which impairs how the brain perceives sound
  • Sodium benzoate: Used as a preservative in acidic foods and soft drinks, can  trigger acute urticaria and angioneurotic edema. 
  • Tartrazine and Carmine: Used as artificial food colouring can trigger deep tissue swelling, rashes, and even full anaphylaxis.
  • Penicillin residues in milk or meat, can act as haptens which bind to carrier proteins in the body to form a complete antigen, causing chronic or acute IgE-mediated angioedema in highly sensitive individuals.
  • Healthy food is not meant only for the rich. It's a basic necessity of life.   

    I create a little visual graph for my reference. There are many more adulterants and contaminants and various ways of figuring out if they are present. Hopefully devices like Macof would make it easier to detect contaminants. I've been noting down various safe sources of foods, which aren't good and which of them are affordable and trustworthy. Am still struggling to find reliable meat and dairy though. If you have helpful knowledge to share, please do comment.

    08 April 2026

    How to set Google search as the default in Chromium

     

    Somebody either had something against Google or the Chromium team could have benefited from some training on UI/UX, because it left people frustrated at not being able to add Google as the default search engine on Chromium. This is all you need to do:

    Under Search engine > Site Search, you'll find an Add button. Click it and add Google by adding the following in the fields:

    • Name: Google
    • Shortcut: @google
    • URL: https://www.google.com/search?q=%s 

    Then it appears in the Site Search section. Click the overflow menu (the three dots in a vertical line) and click "Make default". 

    That's it. From now on Google will be the default search engine. Try not to just leave it at this. Try convincing the programmers to make the interface simpler. I might have posted a request on some forum long back, but they didn't bother fixing it.

    04 March 2026

    Tool for easily creating an AppImage on Linux for a Flutter app

    When I created my Simple Notes Android app, I not only created APK files for it, I also built it to run on Linux. So it ended up having an executable file which would not run unless there were some extra supporting folders. This was messy, and I wanted a single file. I found that creating an AppImage was a good way to do this. There are a bunch of developer tools for the purpose. I chose the appimage tool to convert app directories to appImages.

    Downloaded the appimagetool-x86_64.AppImage file from here

    Made it executable: 

    chmod +x appimagetool-x86_64.AppImage 

    You can see available options via:

    ./appimagetool-x86_64.AppImage --help 

    Get your application files into a folder. In my case I had to create a `simple_notes` folder and pasted the `simple_notes` linux executable and the `lib` and `data` folders there. I also copied a `note.png` application icon for my Simple Notes application to have a unique icon. In the `simple_notes` folder I also had to create a `SimpleNotes.desktop` file containing:

    [Desktop Entry]
    Type=Application
    Name=Simple Notes 3
    Exec=simple_notes
    Icon=note
    Categories=Utility;

    But it showed errors like .

    So I simply asked Grok to create a Python program which can automatically create the AppImage for me. It worked flawlessly. The code is here.


    I know the GUI does not look too good and has a few flaws like not displaying the flutter executable when browsing for it (thus requiring manually typing the name), but it was not something that I wanted to spend more time on for now. My SimpleNotes AppImage was built and it works on typing ./SimpleNotes.AppImage

    I wonder why the AppImage team did not create this kind of a simple way of building an AppImage. 

    04 February 2026

    Common Flutter commands that can be run from the commandline

    Creating a Flutter project via Android Studio is so cumbersome. The various views of project files that make it difficult to find files, the various buttons and dropdown options that need to be found and clicked for every simple little thing. So I decided to stop using Android Studio and switched to VS Code and the commandline when I realized that even the emulator could be run from the commandline. I'm creating this blog post as a quick reference for myself.

    To disable reporting of telemetry:

    • flutter config --no-analytics; flutter --disable-analytics

    To run various checks on Flutter:

    • flutter doctor
    • flutter doctor -v 
    • flutter doctor --android-licenses 

    Create a new app:

    • flutter create my_new_app_name

    Run a Flutter app to try it out as a Linux application:

    This command enables Linux as a target platform for building Flutter applications.

    • flutter config --enable-linux-desktop  
    • flutter run
    • flutter run --debug 

    This command builds a release version in Linux:

    • flutter build linux --release     

    Clean the build:

    • flutter clean

    Add dependencies to pubspec.yaml:

    • flutter pub add <package_name> 

    Add development dependencies: 

    • flutter pub add <package_name> --dev

    Download all the dependencies specified in pubspec.yaml:

    • flutter pub get

    Build an APK for Android with multiple APK's for different platforms bundled into one APK:

    This command ends up creating a much bigger APK than necessary.

    • flutter build apk

    Build separate APK files for each platform:

    • flutter build apk --split-per-abi --release

    View what emulated devices are available:

    • flutter emulators

    Start an emulated device:

    Search for the names with underscores. Those are the ones you can use to run a specific emulator. For example, a name like Large_Desktop_API_33 or Medium_Tablet_Edited_API_34 or Pixel_3a_API_34 

    • flutter emulators --launch <emulated device name>

    View what emulated devices are running now:

    Search for emulated device id's which look like emulator-5554 as an example. Those are the device id's which you can use to install an APK or shutdown the emulator etc.

    • flutter devices
    • adb devices 

    View which architecture the emulated device has:

    • adb devices -l 

    Install the APK into a device and run:

    This is for installing and running the APK which has multiple APK's bundled into it. This command will uninstall any older APK that was present in the device and 

    • flutter install -d <emulated device id> --release

    This is for installing and running the APK's which were created using the `split-per-abi` command:

    • adb install path/to/file/<filename>.apk
    • adb -s <emulated device id> install path/to/file/<filename>.apk

    Shutdown an emulated device:

    • adb -s <emulated device id> emu kill

     

     

    02 January 2026

    Using ROCm on an AMD APU/GPU in Linux Mint 21 (Ubuntu 22)

    ROCm was originally meant to be the acronym for Radeon Open Compute platform. It's a software stack for GPU programming. Sometimes, GPU's are available along with the CPU on the same chip, and are called APU's (Accelerated Processing Unit). Sadly, AMD does not seem to be providing support for lower end GPU's and APU's now. So one is stuck with the older versions.

    Installation 

    The older versions are available here. Download the appropriate deb file and run:

    sudo dpkg -i amdgpu-install_5.4.50403-1_all.deb

    sudo amdgpu-install --list-usecase
    sudo amdgpu-install --usecase=hiplibsdk,rocm,dkms,graphics
    sudo reboot
    rocm-smi
    sudo rocminfo

    You have to run this after installing:
    sudo usermod -a -G video <username>
    sudo usermod -a -G render <username>

    You can use radeontop to view the GPU utilization. 
    sudo apt-get install -y radeontop
    radeontop -c 

    Check the RoCm version with:
    apt show rocm-libs -a 

    The Maintainers are: ROCm Libs Support <rocm-libs.support@amd.com>.

    Only after installing ROCm should PyTorch be installed.

    pip install torch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 --index-url https://download.pytorch.org/whl/rocm5.4.2 

    Test it

    It's named CUDA here, but is basically checking if the program is able to detect the APU/GPU via ROCm.

    import torch.cuda
    print(f'CUDA available? : {torch.cuda.is_available()}')

    If successful, the output should look like this: 

    CUDA available? : True
     

    Also try this program:

    import torch, grp, pwd, os, subprocess
    devices = []
    try:
        print("\n\nChecking ROCM support...")
        result = subprocess.run(['rocminfo'], stdout=subprocess.PIPE)
        cmd_str = result.stdout.decode('utf-8')
        cmd_split = cmd_str.split('Agent ')
        for part in cmd_split:
            item_single = part[0:1]
            item_double = part[0:2]
            if item_single.isnumeric() or item_double.isnumeric():
                new_split = cmd_str.split('Agent '+item_double)
                device = new_split[1].split('Marketing Name:')[0].replace('  Name:                    ', '').replace('\n','').replace('                  ','').split('Uuid:')[0].split('*******')[1]
                devices.append(device)
        if len(devices) > 0:
            print('GOOD: ROCM devices found: ', len(devices))
        else:
            print('BAD: No ROCM devices found.')

        print("Checking PyTorch...")
        x = torch.rand(5, 3)
        has_torch = False
        len_x = len(x)
        if len_x == 5:
            has_torch = True
            for i in x:
                if len(i) == 3:
                    has_torch = True
                else:
                    has_torch = False
        if has_torch:
            print('GOOD: PyTorch is working fine.')
        else:
            print('BAD: PyTorch is NOT working.')


        print("Checking user groups...")
        user = os.getlogin()
        groups = [g.gr_name for g in grp.getgrall() if user in g.gr_mem]
        gid = pwd.getpwnam(user).pw_gid
        groups.append(grp.getgrgid(gid).gr_name)
        if 'render' in groups and 'video' in groups:
            print('GOOD: The user', user, 'is in RENDER and VIDEO groups.')
        else:
            print('BAD: The user', user, 'is NOT in RENDER and VIDEO groups. This is necessary in order to PyTorch use HIP resources')

        if torch.cuda.is_available():
            print("GOOD: PyTorch ROCM support found.")
            t = torch.tensor([5, 5, 5], dtype=torch.int64, device='cuda')
            print('Testing PyTorch ROCM support...')
            if str(t) == "tensor([5, 5, 5], device='cuda:0')":
                print('Everything fine! You can run PyTorch code inside of: ')
                for device in devices:
                    print('---> ', device)
        else:
            print("BAD: PyTorch ROCM support NOT found.")
    except:
        print('Cannot find rocminfo command information. Unable to determine if AMDGPU drivers with ROCM support were installed.')

    The output should look like this:

    Checking ROCM support...
    GOOD: ROCM devices found:  2
    Checking PyTorch...
    GOOD: PyTorch is working fine.
    Checking user groups...
    GOOD: The user nav is in RENDER and VIDEO groups.
    GOOD: PyTorch ROCM support found.
    Testing PyTorch ROCM support...
    Everything fine! You can run PyTorch code inside of: 
    --->  AMD Ryzen 5 5600G with Radeon Graphics  
    --->  gfx90c  

    That's it. All the best with your GPU programming. Also take a look at the Mojo language for GPU programming.