{
    "ready": true,
    "site": {
        "id": 0,
        "domain": "susam.net",
        "display_name": "Susam Pal",
        "primary_country_code": "",
        "category_name": "Personal: Personal Sites & Homepages"
    },
    "metrics": {
        "global_rank": 8057,
        "country_rank": 4083,
        "category_rank": 68,
        "daily_pageviews_per_visitor": 3.73,
        "daily_time_on_site_seconds": 317,
        "bounce_rate": 34.22,
        "search_visits_percent": 37.88,
        "total_sites_linking_in": 5,
        "monthly_unique_visitors": 185,
        "recorded_at": "2026-04-17 11:31:12"
    },
    "audit": {
        "score": 79
    },
    "traffic_sources": {
        "direct_percent": 28.32,
        "search_percent": 33.96,
        "social_percent": 7.02,
        "referral_percent": 14.36,
        "email_percent": 7.02,
        "paid_percent": 9.32
    },
    "seo_profile": {
        "backlinks_total": 5,
        "referring_domains": 5,
        "dofollow_backlinks_percent": 80,
        "organic_keywords": 67,
        "indexed_pages": 56,
        "page_speed_score": 100,
        "mobile_friendliness_score": 76,
        "authority_score": 45,
        "spam_risk_score": 24
    },
    "crawl_report": {
        "robots_status": 200,
        "sitemap_status": 404,
        "sitemap_total_urls": 0,
        "crawl_blocked": false,
        "crawl_blocked_by": "",
        "crawl_blocked_reason": "",
        "notes": [
            "Meta description is missing.",
            "Sitemap could not be confirmed."
        ],
        "created_at": "2026-04-17 11:31:12"
    },
    "keywords": [
        {
            "keyword": "Susam Pal",
            "position": 20,
            "search_engine": "Estimated",
            "checked_at": "2026-04-17 16:47:03",
            "is_estimated": true
        },
        {
            "keyword": "Susam Pal personal: personal sites & homepages",
            "position": 22,
            "search_engine": "Estimated",
            "checked_at": "2026-04-17 16:47:03",
            "is_estimated": true
        },
        {
            "keyword": "Susam Pal reviews",
            "position": 24,
            "search_engine": "Estimated",
            "checked_at": "2026-04-17 16:47:03",
            "is_estimated": true
        },
        {
            "keyword": "susam",
            "position": 26,
            "search_engine": "Estimated",
            "checked_at": "2026-04-17 16:47:03",
            "is_estimated": true
        },
        {
            "keyword": "pal",
            "position": 28,
            "search_engine": "Estimated",
            "checked_at": "2026-04-17 16:47:03",
            "is_estimated": true
        }
    ],
    "rating": {
        "overall": 68,
        "label": "Healthy",
        "breakdown": [
            {
                "label": "Technical foundation",
                "score": 13,
                "max": 18
            },
            {
                "label": "Authority & trust",
                "score": 14,
                "max": 30
            },
            {
                "label": "Reach & market presence",
                "score": 3,
                "max": 18
            },
            {
                "label": "Search visibility",
                "score": 3,
                "max": 12
            },
            {
                "label": "Engagement & retention",
                "score": 9,
                "max": 10
            },
            {
                "label": "Channels & diversification",
                "score": 4,
                "max": 6
            },
            {
                "label": "Registry stability",
                "score": 3,
                "max": 6
            },
            {
                "label": "Quality system",
                "score": 72,
                "max": 100
            },
            {
                "label": "Reputation system",
                "score": 44,
                "max": 100
            },
            {
                "label": "Safety system",
                "score": 100,
                "max": 100
            },
            {
                "label": "Evidence confidence",
                "score": 100,
                "max": 100
            },
            {
                "label": "External intelligence",
                "score": 50,
                "max": 100
            }
        ],
        "authority_score": 47,
        "quality_score": 72,
        "reputation_score": 44,
        "safety_score": 100,
        "confidence_score": 100,
        "fraud_score": 0,
        "authority_signals": {
            "backlinks": 5,
            "referring_domains": 5,
            "organic_keywords": 67,
            "indexed_pages": 56,
            "monthly_visitors": 185,
            "global_rank": 8057,
            "engagement_score": 78,
            "crawl_quality_score": 92,
            "brand_completeness_score": 50,
            "link_diversity_score": 95,
            "technical_reliability_score": 82,
            "whois_score": 66,
            "whois_age_years": 4.5,
            "whois_stability_score": 100,
            "spam_penalty": 0
        },
        "whois_signals": {
            "age_years": 4.5,
            "days_to_expiry": 2003,
            "days_since_last_registry_update": 1561,
            "stability_score": 100,
            "registrar_changes": 0,
            "ownership_changes": 0,
            "nameserver_changes": 0,
            "status_changes": 0,
            "history_entries": 2,
            "privacy_protected": false,
            "dnssec_enabled": false,
            "has_registrant_country": false,
            "registrant_country": "",
            "nameserver_count": 5,
            "status_count": 1
        }
    },
    "authority_score": 47,
    "trust_score": 72,
    "domain_tags": {
        "primary_tag": "T",
        "primary_tag_score": 81,
        "primary_candidate": "T",
        "primary_candidate_score": 81,
        "tag_codes": "T,Uncertain",
        "tags": [
            {
                "code": "T",
                "label": "Trusted",
                "tone": "good",
                "description": "Strong trust, stability, and low-risk signals were detected.",
                "reason": "Low spam indicators plus strong trust, quality, registry, and stability signals were detected.",
                "message": "The site shows a reasonably trustworthy and stable profile.",
                "priority": 81,
                "score": 81,
                "match_percent": 81,
                "threshold_band": "strong"
            },
            {
                "code": "Uncertain",
                "label": "Uncertain",
                "tone": "unknown",
                "description": "External checks stayed inconclusive, so the model avoided a harder verdict.",
                "reason": "The evidence is mixed or only partially corroborated, so the system avoided a harder automated verdict.",
                "message": "The evidence is materially mixed or partially corroborated, so the model is avoiding a harder verdict.",
                "priority": 68,
                "score": 68,
                "match_percent": 68,
                "threshold_band": "strong"
            }
        ],
        "tag_breakdown": [
            {
                "code": "T",
                "label": "Trusted",
                "tone": "good",
                "description": "Strong trust, stability, and low-risk signals were detected.",
                "reason": "Low spam indicators plus strong trust, quality, registry, and stability signals were detected.",
                "message": "The site shows a reasonably trustworthy and stable profile.",
                "priority": 81,
                "score": 81,
                "match_percent": 81,
                "threshold_band": "strong"
            },
            {
                "code": "Uncertain",
                "label": "Uncertain",
                "tone": "unknown",
                "description": "External checks stayed inconclusive, so the model avoided a harder verdict.",
                "reason": "The evidence is mixed or only partially corroborated, so the system avoided a harder automated verdict.",
                "message": "The evidence is materially mixed or partially corroborated, so the model is avoiding a harder verdict.",
                "priority": 68,
                "score": 68,
                "match_percent": 68,
                "threshold_band": "strong"
            },
            {
                "code": "Infra",
                "label": "Risky infrastructure",
                "tone": "caution",
                "description": "The hosting / registrar / nameserver neighbourhood looks unusually risky.",
                "reason": "The infrastructure neighbourhood looks riskier than normal.",
                "message": "Infrastructure risk does not currently stand out.",
                "priority": 2,
                "score": 2,
                "match_percent": 2,
                "threshold_band": "none"
            },
            {
                "code": "C",
                "label": "Caution",
                "tone": "caution",
                "description": "Signals are mixed or weak, so this domain should be treated carefully.",
                "reason": "Review carefully: mixed trust signals.",
                "message": "The current crawl does not show a meaningful caution match.",
                "priority": 0,
                "score": 0,
                "match_percent": 0,
                "threshold_band": "none"
            },
            {
                "code": "Crypto",
                "label": "Crypto drainer risk",
                "tone": "toxic",
                "description": "Wallet-connect or seed-phrase theft patterns were detected.",
                "reason": "Wallet-connect or seed-phrase theft patterns were detected.",
                "message": "No meaningful crypto-drainer signals were detected.",
                "priority": 0,
                "score": 0,
                "match_percent": 0,
                "threshold_band": "none"
            }
        ],
        "nsfw_score": 0,
        "trust_score": 73,
        "manual": {
            "has_changes": false,
            "verified_status": "",
            "tag_codes": "",
            "rating_delta": 0,
            "authority_delta": 0,
            "trust_delta": 0,
            "note": "",
            "adjusted_by": 0,
            "adjusted_at": "",
            "lock_scores": false,
            "lock_flags": false
        },
        "summary": "Trusted (81% match) because low spam indicators plus strong trust, quality, registry, and stability signals were detected.",
        "external_intel": [],
        "external_decision": [],
        "signal_scores": [
            {
                "label": "Strongest tag heuristic",
                "value": "T · 81%",
                "tone": "good",
                "detail": "The highest raw tag match from the heuristic engine before visibility thresholds and manual overrides."
            },
            {
                "label": "Trust score",
                "value": "73/100",
                "tone": "caution",
                "detail": "Confidence derived from authority, crawl quality, stability, and risk signals."
            },
            {
                "label": "Authority score",
                "value": "47/100",
                "tone": "caution",
                "detail": "A higher authority score usually means broader reputation and backlink confidence."
            },
            {
                "label": "Spam risk",
                "value": "0/100",
                "tone": "good",
                "detail": "Lower is better. This blends spam indicators with false-positive protections for legitimate sites."
            },
            {
                "label": "Quality score",
                "value": "78/100",
                "tone": "good",
                "detail": "Based on crawl quality, content completeness, and technical evidence."
            },
            {
                "label": "Safety score",
                "value": "100/100",
                "tone": "good",
                "detail": "Higher is safer. Direct fraud signals can heavily cap this even when SEO signals look strong."
            },
            {
                "label": "Fraud score",
                "value": "0/100",
                "tone": "good",
                "detail": "Lower is better. This reflects phishing, drainer, fake-support, fake-shop, and malware signals."
            },
            {
                "label": "Infrastructure risk",
                "value": "2/100",
                "tone": "good",
                "detail": "Lower is better. This reflects the IP, registrar, and nameserver neighbourhood seen by the crawler."
            },
            {
                "label": "Evidence confidence",
                "value": "100/100",
                "tone": "good",
                "detail": "Higher means the crawler had enough pages and registry evidence to make a stronger call."
            },
            {
                "label": "External evidence",
                "value": "Low",
                "tone": "unknown",
                "detail": "Quality of the structured search and review evidence cluster."
            },
            {
                "label": "External decision",
                "value": "Inconclusive",
                "tone": "unknown",
                "detail": "How third-party evidence compares with the current candidate tag."
            },
            {
                "label": "NSFW score",
                "value": "0/100",
                "tone": "good",
                "detail": "Context-aware adult-content detection with medical / educational false-positive reduction."
            },
            {
                "label": "Registry stability",
                "value": "100/100",
                "tone": "good",
                "detail": "Based on age, expiry runway, and the amount of ownership / registrar churn."
            }
        ],
        "signal_sections": [
            {
                "title": "Registry & ownership",
                "items": [
                    {
                        "label": "Domain age",
                        "value": "4.5 years",
                        "tone": "good",
                        "detail": "Older domains generally carry more historical trust than very new ones."
                    },
                    {
                        "label": "Stability score",
                        "value": "100/100",
                        "tone": "good",
                        "detail": "Penalised by registrar, ownership, and nameserver churn."
                    },
                    {
                        "label": "Days to expiry",
                        "value": "2,003",
                        "tone": "good",
                        "detail": "Very short renewal windows can be a weak trust signal."
                    },
                    {
                        "label": "Registrar / ownership changes",
                        "value": "0 / 0",
                        "tone": "good",
                        "detail": "Frequent ownership churn can weaken trust."
                    },
                    {
                        "label": "Nameserver changes",
                        "value": "0",
                        "tone": "good",
                        "detail": "Repeated infrastructure changes can indicate instability."
                    },
                    {
                        "label": "DNSSEC / privacy",
                        "value": "DNSSEC off · privacy off",
                        "tone": "caution",
                        "detail": "DNSSEC strengthens DNS trust; privacy is neutral on its own."
                    }
                ]
            },
            {
                "title": "Reputation & search evidence",
                "items": [
                    {
                        "label": "Backlinks",
                        "value": "5",
                        "tone": "unknown",
                        "detail": "Broader backlink evidence usually improves confidence."
                    },
                    {
                        "label": "Referring domains",
                        "value": "5",
                        "tone": "caution",
                        "detail": "Unique linking domains are more useful than raw link volume."
                    },
                    {
                        "label": "Organic keywords",
                        "value": "67",
                        "tone": "caution",
                        "detail": "Search footprint helps distinguish real sites from thin shells."
                    },
                    {
                        "label": "Indexed pages",
                        "value": "56",
                        "tone": "caution",
                        "detail": "Larger index coverage usually means more evidence to classify from."
                    },
                    {
                        "label": "Brand strength",
                        "value": "50/100",
                        "tone": "good",
                        "detail": "Stronger brand signals reduce false positives for legitimate sites."
                    },
                    {
                        "label": "Risk label",
                        "value": "GOOD",
                        "tone": "unknown",
                        "detail": "This is the raw crawl / heuristic risk label feeding the tag model."
                    }
                ]
            },
            {
                "title": "Crawl, content & technicals",
                "items": [
                    {
                        "label": "HTTP status",
                        "value": "200",
                        "tone": "good",
                        "detail": "Healthy responses make classification more reliable."
                    },
                    {
                        "label": "HTTPS / speed",
                        "value": "HTTPS OK · 45 ms",
                        "tone": "good",
                        "detail": "Slow or broken technical signals weaken confidence."
                    },
                    {
                        "label": "Content words",
                        "value": "525",
                        "tone": "caution",
                        "detail": "Thin pages are harder to trust and easier to manipulate."
                    },
                    {
                        "label": "Schema / structure",
                        "value": "0 schema · no meta · H1",
                        "tone": "caution",
                        "detail": "Structured markup and basic on-page hygiene improve quality confidence."
                    },
                    {
                        "label": "Links on page",
                        "value": "78 internal · 2 external",
                        "tone": "good",
                        "detail": "Link patterns help detect thin directories and promo pages."
                    },
                    {
                        "label": "Page speed / mobile",
                        "value": "100/100 · 76/100",
                        "tone": "good",
                        "detail": "Better technical quality generally reduces low-effort site patterns."
                    },
                    {
                        "label": "Crawl access",
                        "value": "Open",
                        "tone": "good",
                        "detail": "The crawler reached the site without an anti-bot challenge."
                    }
                ]
            },
            {
                "title": "External evidence & explainability",
                "items": [
                    {
                        "label": "Decision state",
                        "value": "Inconclusive",
                        "tone": "unknown",
                        "detail": "Structured third-party evidence is still too thin, mixed, or unqualified to force a harder verdict."
                    },
                    {
                        "label": "Evidence quality",
                        "value": "Low",
                        "tone": "unknown",
                        "detail": "Blends source trust, domain matching, evidence diversity, and freshness."
                    },
                    {
                        "label": "Support vs contradiction",
                        "value": "0 / 0",
                        "tone": "unknown",
                        "detail": "Compares how much structured external evidence supports the candidate tag against evidence that contradicts it."
                    },
                    {
                        "label": "Qualified risk sources",
                        "value": "No",
                        "tone": "good",
                        "detail": "Risk tags only promote from external evidence when source diversity or source trust thresholds are met."
                    },
                    {
                        "label": "Uncertainty buffer",
                        "value": "Clear",
                        "tone": "good",
                        "detail": "Prevents thin or mixed external evidence from forcing a stronger tag than the evidence can justify."
                    }
                ]
            }
        ],
        "positives": [
            "Established domain age: 4.5 years.",
            "Low registrar / ownership churn with solid registry stability.",
            "Healthy crawl quality and on-page completeness."
        ],
        "risks": []
    },
    "traffic_confidence": 57,
    "whois": {
        "current": {
            "id": 16388,
            "domain": "susam.net",
            "source_type": "rdap",
            "rdap_url": "https://rdap.verisign.com/net/v1/domain/SUSAM.NET",
            "registrar_name": "NameCheap, Inc.",
            "registrar_handle": "1068",
            "registrant_name": "",
            "registrant_org": "",
            "registrant_country": "",
            "registrant_email": "",
            "abuse_email": "abuse@namecheap.com",
            "created_date": "2021-10-11 18:19:55",
            "updated_date": "2022-01-06 18:07:50",
            "expires_date": "2031-10-11 18:19:55",
            "nameservers_json": "[\"ns1.linode.com\",\"ns2.linode.com\",\"ns3.linode.com\",\"ns4.linode.com\",\"ns5.linode.com\"]",
            "status_json": "[\"client transfer prohibited\"]",
            "dnssec": "unsigned",
            "privacy_protected": 0,
            "content_hash": "ea3c81f8294220617410ad5039c5f354b4aeaecae37b0acf59d647d4c429e78a",
            "history_count": 2,
            "last_checked_at": "2026-04-17 11:31:01",
            "last_changed_at": "2026-04-17 11:31:01",
            "created_at": "2026-03-17 07:37:08",
            "updated_at": "2026-04-17 11:31:01"
        },
        "history": [
            {
                "id": 84628,
                "domain": "susam.net",
                "source_type": "rdap",
                "registrar_name": "NameCheap, Inc.",
                "registrar_handle": "1068",
                "registrant_name": "",
                "registrant_org": "",
                "registrant_country": "",
                "registrant_email": "",
                "abuse_email": "abuse@namecheap.com",
                "created_date": "2021-10-11 18:19:55",
                "updated_date": "2022-01-06 18:07:50",
                "expires_date": "2031-10-11 18:19:55",
                "nameservers_json": "[\"ns1.linode.com\",\"ns2.linode.com\",\"ns3.linode.com\",\"ns4.linode.com\",\"ns5.linode.com\"]",
                "status_json": "[\"client transfer prohibited\"]",
                "dnssec": "unsigned",
                "privacy_protected": 0,
                "content_hash": "ea3c81f8294220617410ad5039c5f354b4aeaecae37b0acf59d647d4c429e78a",
                "checked_at": "2026-04-17 11:31:01",
                "change_summary": "Periodic WHOIS snapshot refreshed with no major field changes.",
                "created_at": "2026-04-17 11:31:01"
            },
            {
                "id": 16701,
                "domain": "susam.net",
                "source_type": "rdap",
                "registrar_name": "NameCheap, Inc.",
                "registrar_handle": "1068",
                "registrant_name": "",
                "registrant_org": "",
                "registrant_country": "",
                "registrant_email": "",
                "abuse_email": "abuse@namecheap.com",
                "created_date": "2021-10-11 18:19:55",
                "updated_date": "2022-01-06 18:07:50",
                "expires_date": "2031-10-11 18:19:55",
                "nameservers_json": "[\"ns1.linode.com\",\"ns2.linode.com\",\"ns3.linode.com\",\"ns4.linode.com\",\"ns5.linode.com\"]",
                "status_json": "[\"client transfer prohibited\"]",
                "dnssec": "unsigned",
                "privacy_protected": 0,
                "content_hash": "ea3c81f8294220617410ad5039c5f354b4aeaecae37b0acf59d647d4c429e78a",
                "checked_at": "2026-03-17 07:37:08",
                "change_summary": "Initial WHOIS snapshot captured.",
                "created_at": "2026-03-17 07:37:08"
            }
        ],
        "signals": {
            "age_years": 4.5,
            "days_to_expiry": 2003,
            "days_since_last_registry_update": 1561,
            "stability_score": 100,
            "registrar_changes": 0,
            "ownership_changes": 0,
            "nameserver_changes": 0,
            "status_changes": 0,
            "history_entries": 2,
            "privacy_protected": false,
            "dnssec_enabled": false,
            "has_registrant_country": false,
            "registrant_country": "",
            "nameserver_count": 5,
            "status_count": 1
        }
    },
    "discovered_domain": {
        "id": 68537,
        "domain": "susam.net",
        "first_seen_at": "2026-03-15 18:56:59",
        "last_crawled_at": "2026-04-17 11:31:12",
        "last_title": "Susam Pal",
        "last_http_status": 200,
        "discovered_from_domain": "250kb.club",
        "depth": 0,
        "backlinks_count": 5,
        "rating_cache": 43,
        "spam_score": 24,
        "risk_label": "good",
        "category_name": "Personal: Personal Sites & Homepages",
        "primary_country_code": "",
        "internal_links_count": 78,
        "external_links_count": 2,
        "social_profiles_count": 1,
        "content_word_count": 525,
        "title_quality_score": 65,
        "has_meta_description": 0,
        "has_h1": 1,
        "language_code": "en",
        "response_time_ms": 45,
        "robots_status": 200,
        "sitemap_status": 404,
        "sitemap_total_urls": 0,
        "quality_score": 78,
        "site_name": "",
        "canonical_domain": "",
        "favicon_present": 1,
        "schema_org_count": 0,
        "noindex_detected": 0,
        "feed_links_count": 1,
        "https_working": 1,
        "estimated_authority_score": 36,
        "trust_score": 82,
        "nsfw_score": 0,
        "overall_rank_estimate": 2716911,
        "primary_tag": "T",
        "tag_codes": "T",
        "manual_verified_status": "",
        "manual_tag_codes": "",
        "manual_rating_delta": 0,
        "manual_authority_delta": 0,
        "manual_trust_delta": 0,
        "manual_note": null,
        "manual_adjusted_by": null,
        "manual_adjusted_at": null,
        "manual_lock_scores": 0,
        "manual_lock_flags": 0,
        "crawl_blocked": 0,
        "crawl_blocked_by": "",
        "crawl_blocked_reason": null,
        "safety_score": 100,
        "fraud_score": 0,
        "legitimacy_score": 51,
        "infrastructure_risk_score": 2,
        "score_confidence": 100,
        "tag_confidence": 72,
        "category_confidence": 99,
        "deep_crawl_pages": 50,
        "resolved_ip": "151.236.217.16",
        "category_candidates_json": "[{\"category\":\"Personal: Personal Sites & Homepages\",\"score\":94},{\"category\":\"Personal: Blogs & Journals\",\"score\":22},{\"category\":\"E-commerce\",\"score\":17},{\"category\":\"News & Media\",\"score\":17}]",
        "page_signals_json": "[{\"path\":\"/about\",\"status\":200,\"title\":\"About Me - Susam Pal\",\"word_count\":947,\"summary_text\":\"About Me - Susam Pal About Me - Susam Pal .katex {font-size: 1.1em } .katex a:link {text-decoration: none} .katex-display { overflow-x: auto; /* Allow horizontal scroll for wide equations. */ overflow-y: hidden; /* Hide vertical scroll due to horizontal scroll. */ padding-top: 0.5em; /* Prevent top clipping. */ padding-right: 0.5em; /* Prevent horizontal scroll on numbered equations. */ /* See also: */ } document.addEventListener('DOMContentLoaded', function () { renderMathInElement(document.body, { delimiters: [ {left: '\\\\\\\\(', right: '\\\\\\\\)', display: false}, {left: '\\\\\\\\[', right: '\\\\\\\\]', display: true}, {left: '\\\\\\\\begin{equation}', right: '\\\\\\\\end{equation}', display: true}, {left: '\\\\\\\\begin{align}', right: '\\\\\\\\end{align}', display: true}, {left: '\\\\\\\\begin{align*}', right: '\\\\\\\\end{align*}', display: true}, {left: '\\\\\\\\beg\",\"classification_terms\":[\"about\",\"about me\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":1,\"depth\":1},{\"path\":\"/twenty-five-years-of-computing.html\",\"status\":200,\"title\":\"Twenty Five Years of Computing - Susam Pal\",\"word_count\":3971,\"summary_text\":\"Twenty Five Years of Computing - Susam Pal Twenty Five Years of Computing - Susam Pal Twenty Five Years of Computing By Susam Pal on 06 Feb 2026 Last year, I completed 20 years in professional software development. I wanted to write a post to mark the occasion back then, but couldn't find the time. This post is my attempt to make up for that omission. In fact, I have been involved in software development for a little longer than 20 years. Although I had my first taste of computer programming as a child, it was only when I entered university about 25 years ago that I seriously got into software development. So I'll start my stories from there. These stories are less about software and more about people. Unlike many posts of this kind, this one offers no wisdom or lessons. It only offers a collection of stories. I hope you'll like at\",\"classification_terms\":[\"twenty-five-years-of-computing.html\",\"about\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/attention-media-vs-social-networks.html\",\"status\":200,\"title\":\"Attention Media ≠ Social Networks - Susam Pal\",\"word_count\":644,\"summary_text\":\"Attention Media ≠ Social Networks - Susam Pal Attention Media &#x2260; Social Networks - Susam Pal Attention Media &#x2260; Social Networks By Susam Pal on 20 Jan 2026 When web-based social networks started flourishing nearly two decades ago, they were genuinely social networks. You would sign up for a popular service, follow people you knew or liked and read updates from them. When you posted something, your followers would receive your updates as well. Notifications were genuine. The little icons in the top bar would light up because someone had sent you a direct message or engaged with something you had posted. There was also, at the beginning of this millennium, a general sense of hope and optimism around technology, computers and the Internet. Social networking platforms were one of the services that were part of what was called\",\"classification_terms\":[\"attention-media-vs-social-networks.html\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/nested-code-fences.html\",\"status\":200,\"title\":\"Nested Code Fences in Markdown - Susam Pal\",\"word_count\":1070,\"summary_text\":\"Nested Code Fences in Markdown - Susam Pal Nested Code Fences in Markdown - Susam Pal Nested Code Fences in Markdown By Susam Pal on 19 Jan 2026 Today, we will meet a spiky-haired nerd named Corey Dumm, who normally lives within Markdown code fences. We will get to know him a bit, smile with him when his fences hold and weep quietly when misfortune strikes. One of the caveats of the Markdown universe is the wide variety of Markdown implementations available. In these parallel universes, the rules of Markdown rendering differ subtly. In this post, we will focus only on the CommonMark specification. Since GitHub Flavoured Markdown (GFM) is a strict superset of CommonMark, whatever we discuss here applies equally well to both CommonMark and GFM. Contents Basic Code Fences Fancy Code Fences Basic Code Spans Fancy Code Spans Specificati\",\"classification_terms\":[\"nested-code-fences.html\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/inverse-laws-of-robotics.html\",\"status\":200,\"title\":\"Three Inverse Laws of AI and Robotics - Susam Pal\",\"word_count\":1306,\"summary_text\":\"Three Inverse Laws of AI and Robotics - Susam Pal Three Inverse Laws of AI and Robotics - Susam Pal Three Inverse Laws of AI and Robotics By Susam Pal on 12 Jan 2026 Introduction Since the launch of ChatGPT in November 2022, generative artificial intelligence (AI) chatbot services have become increasingly sophisticated and popular. These systems are now embedded in search engines, software development tools as well as office software. For many people, they have quickly become part of everyday computing. I personally find these services incredibly useful, particularly for exploring unfamiliar topics and as a general productivity aid. However, I also think that the way these services are advertised and consumed can pose a danger, especially if we get into the habit of trusting their output without further scrutiny. Contents Introduction Pit\",\"classification_terms\":[\"inverse-laws-of-robotics.html\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/writing-first-tooling-second.html\",\"status\":200,\"title\":\"Writing First, Tooling Second - Susam Pal\",\"word_count\":844,\"summary_text\":\"Writing First, Tooling Second - Susam Pal Writing First, Tooling Second - Susam Pal Writing First, Tooling Second By Susam Pal on 10 Jan 2026 I am a strong proponent of running independent personal websites on your own domains and publishing your writing there. Doing so keeps the web diverse and decentralised, rather than concentrating most writing and discussion inside a small number of large platforms. It gives authors long term control over their work without being subject to changing policies or incentives. I think that a web made up of many small, individually run websites is more resilient and also more interesting than one dominated by a handful of social media services. I often participate in discussions pertaining to authoring personal websites because this is an area I am passionate about. Any discussion about authoring\",\"classification_terms\":[\"writing-first-tooling-second.html\",\"about\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/a4-paper-stories.html\",\"status\":200,\"title\":\"A4 Paper Stories - Susam Pal\",\"word_count\":1782,\"summary_text\":\"A4 Paper Stories - Susam Pal A4 Paper Stories - Susam Pal .katex {font-size: 1.1em } .katex a:link {text-decoration: none} .katex-display { overflow-x: auto; /* Allow horizontal scroll for wide equations. */ overflow-y: hidden; /* Hide vertical scroll due to horizontal scroll. */ padding-top: 0.5em; /* Prevent top clipping. */ padding-right: 0.5em; /* Prevent horizontal scroll on numbered equations. */ /* See also: */ } document.addEventListener('DOMContentLoaded', function () { renderMathInElement(document.body, { delimiters: [ {left: '\\\\\\\\(', right: '\\\\\\\\)', display: false}, {left: '\\\\\\\\[', right: '\\\\\\\\]', display: true}, {left: '\\\\\\\\begin{equation}', right: '\\\\\\\\end{equation}', display: true}, {left: '\\\\\\\\begin{align}', right: '\\\\\\\\end{align}', display: true}, {left: '\\\\\\\\begin{align*}', right: '\\\\\\\\end{align*}', display: true}, {left\",\"classification_terms\":[\"a4-paper-stories.html\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/fed-24-years-of-posts-to-markov-model.html\",\"status\":200,\"title\":\"Fed 24 Years of My Blog Posts to a Markov Model - Susam Pal\",\"word_count\":2047,\"summary_text\":\"Fed 24 Years of My Blog Posts to a Markov Model - Susam Pal Fed 24 Years of My Blog Posts to a Markov Model - Susam Pal .katex {font-size: 1.1em } .katex a:link {text-decoration: none} .katex-display { overflow-x: auto; /* Allow horizontal scroll for wide equations. */ overflow-y: hidden; /* Hide vertical scroll due to horizontal scroll. */ padding-top: 0.5em; /* Prevent top clipping. */ padding-right: 0.5em; /* Prevent horizontal scroll on numbered equations. */ /* See also: */ } document.addEventListener('DOMContentLoaded', function () { renderMathInElement(document.body, { delimiters: [ {left: '\\\\\\\\(', right: '\\\\\\\\)', display: false}, {left: '\\\\\\\\[', right: '\\\\\\\\]', display: true}, {left: '\\\\\\\\begin{equation}', right: '\\\\\\\\end{equation}', display: true}, {left: '\\\\\\\\begin{align}', right: '\\\\\\\\end{align}', display: true}, {left: '\\\\\\\\begin{align*}', right: '\\\\\\\\end{\",\"classification_terms\":[\"fed-24-years-of-posts-to-markov-model.html\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/fizz-buzz-in-css.html\",\"status\":200,\"title\":\"Fizz Buzz in CSS - Susam Pal\",\"word_count\":511,\"summary_text\":\"Fizz Buzz in CSS - Susam Pal Fizz Buzz in CSS - Susam Pal Fizz Buzz in CSS By Susam Pal on 06 Dec 2025 How many CSS selectors and declarations do we need to produce the Fizz Buzz sequence? Of course we could do this with no CSS at all simply by placing the entire sequence as text in the HTML body. So to make the problem precise as well as to keep it interesting, we require that all text that appears in the Fizz Buzz sequence comes directly from the CSS. Placing any part of the output numbers or words outside the stylesheet is not allowed. JavaScript is not allowed either. With these constraints, I think we need at least four CSS selectors along with four declarations to solve this puzzle, as shown below: li { counter-increment: n } li:not(:nth-child(5n))::before { content: counter(n) } li:nth-child(3n)::before { conte\",\"classification_terms\":[\"fizz-buzz-in-css.html\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/emacs-info-expression.html\",\"status\":200,\"title\":\"Emacs Info Expressions - Susam Pal\",\"word_count\":418,\"summary_text\":\"Emacs Info Expressions - Susam Pal Emacs Info Expressions - Susam Pal Emacs Info Expressions By Susam Pal on 03 Dec 2025 On #emacs IRC or Matrix channels, we often share references to the built-in Emacs documentation as Elisp expressions that look like this: (info \\\"(emacs) Basic Undo\\\") Here is another example: (info \\\"(emacs) Word Search\\\") This is a common practice in the Emacs community even though all of the Emacs manual is available on the World Wide Web too. For example, the section referred to in the above expression eis available here: GNU Emacs Manual: Word Search. The reason for sharing Elisp expressions like this is likely partly tradition and partly convenience. Many Emacs users are logged into IRC networks via Emacs itself, so once the recipient sees an Elisp expression like the above one in their chat buffer, vis\",\"classification_terms\":[\"emacs-info-expression.html\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/fizz-buzz-with-cosines.html\",\"status\":200,\"title\":\"Fizz Buzz with Cosines - Susam Pal\",\"word_count\":3582,\"summary_text\":\"Fizz Buzz with Cosines - Susam Pal Fizz Buzz with Cosines - Susam Pal .katex {font-size: 1.1em } .katex a:link {text-decoration: none} .katex-display { overflow-x: auto; /* Allow horizontal scroll for wide equations. */ overflow-y: hidden; /* Hide vertical scroll due to horizontal scroll. */ padding-top: 0.5em; /* Prevent top clipping. */ padding-right: 0.5em; /* Prevent horizontal scroll on numbered equations. */ /* See also: */ } document.addEventListener('DOMContentLoaded', function () { renderMathInElement(document.body, { delimiters: [ {left: '\\\\\\\\(', right: '\\\\\\\\)', display: false}, {left: '\\\\\\\\[', right: '\\\\\\\\]', display: true}, {left: '\\\\\\\\begin{equation}', right: '\\\\\\\\end{equation}', display: true}, {left: '\\\\\\\\begin{align}', right: '\\\\\\\\end{align}', display: true}, {left: '\\\\\\\\begin{align*}', right: '\\\\\\\\end{align*}', display: true},\",\"classification_terms\":[\"fizz-buzz-with-cosines.html\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/reinstated-guestbook.html\",\"status\":200,\"title\":\"Reinstated My Guestbook After 20 Years - Susam Pal\",\"word_count\":567,\"summary_text\":\"Reinstated My Guestbook After 20 Years - Susam Pal Reinstated My Guestbook After 20 Years - Susam Pal Reinstated My Guestbook After 20 Years By Susam Pal on 03 Oct 2025 I have reinstated the guestbook on this website after 20 years! As I have written in the About page, this website began its life as an intranet portal in my university network back in 2001–2005. That portal first ran on Microsoft Personal Web Server (PWS) and later on Microsoft Internet Information Services (IIS), with the guestbook data stored in a Microsoft Access database. At the same time, I also maintained a small public website on the Internet, hosted on a subdomain provided by a free hosting service, where I published a subset of the articles from the intranet portal. Both the intranet portal and the public website had guestbooks. The guestbook on the public website\",\"classification_terms\":[\"reinstated-guestbook.html\",\"about\",\"store\",\"guestbook\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/my-lobsters-interview.html\",\"status\":200,\"title\":\"My Lobsters Interview - Susam Pal\",\"word_count\":7290,\"summary_text\":\"My Lobsters Interview - Susam Pal My Lobsters Interview - Susam Pal .katex {font-size: 1.1em } .katex a:link {text-decoration: none} .katex-display { overflow-x: auto; /* Allow horizontal scroll for wide equations. */ overflow-y: hidden; /* Hide vertical scroll due to horizontal scroll. */ padding-top: 0.5em; /* Prevent top clipping. */ padding-right: 0.5em; /* Prevent horizontal scroll on numbered equations. */ /* See also: */ } document.addEventListener('DOMContentLoaded', function () { renderMathInElement(document.body, { delimiters: [ {left: '\\\\\\\\(', right: '\\\\\\\\)', display: false}, {left: '\\\\\\\\[', right: '\\\\\\\\]', display: true}, {left: '\\\\\\\\begin{equation}', right: '\\\\\\\\end{equation}', display: true}, {left: '\\\\\\\\begin{align}', right: '\\\\\\\\end{align}', display: true}, {left: '\\\\\\\\begin{align*}', right: '\\\\\\\\end{align*}', display: true},\",\"classification_terms\":[\"my-lobsters-interview.html\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/mutually-attacking-knights.html\",\"status\":200,\"title\":\"Mutually Attacking Knights - Susam Pal\",\"word_count\":4437,\"summary_text\":\"Mutually Attacking Knights - Susam Pal Mutually Attacking Knights - Susam Pal .katex {font-size: 1.1em } .katex a:link {text-decoration: none} .katex-display { overflow-x: auto; /* Allow horizontal scroll for wide equations. */ overflow-y: hidden; /* Hide vertical scroll due to horizontal scroll. */ padding-top: 0.5em; /* Prevent top clipping. */ padding-right: 0.5em; /* Prevent horizontal scroll on numbered equations. */ /* See also: */ } document.addEventListener('DOMContentLoaded', function () { renderMathInElement(document.body, { delimiters: [ {left: '\\\\\\\\(', right: '\\\\\\\\)', display: false}, {left: '\\\\\\\\[', right: '\\\\\\\\]', display: true}, {left: '\\\\\\\\begin{equation}', right: '\\\\\\\\end{equation}', display: true}, {left: '\\\\\\\\begin{align}', right: '\\\\\\\\end{align}', display: true}, {left: '\\\\\\\\begin{align*}', right: '\\\\\\\\end{align*}', display: tr\",\"classification_terms\":[\"mutually-attacking-knights.html\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":4,\"depth\":1},{\"path\":\"/zigzag-number-spiral.html\",\"status\":200,\"title\":\"Zigzag Number Spiral - Susam Pal\",\"word_count\":3776,\"summary_text\":\"Zigzag Number Spiral - Susam Pal Zigzag Number Spiral - Susam Pal .katex {font-size: 1.1em } .katex a:link {text-decoration: none} .katex-display { overflow-x: auto; /* Allow horizontal scroll for wide equations. */ overflow-y: hidden; /* Hide vertical scroll due to horizontal scroll. */ padding-top: 0.5em; /* Prevent top clipping. */ padding-right: 0.5em; /* Prevent horizontal scroll on numbered equations. */ /* See also: */ } document.addEventListener('DOMContentLoaded', function () { renderMathInElement(document.body, { delimiters: [ {left: '\\\\\\\\(', right: '\\\\\\\\)', display: false}, {left: '\\\\\\\\[', right: '\\\\\\\\]', display: true}, {left: '\\\\\\\\begin{equation}', right: '\\\\\\\\end{equation}', display: true}, {left: '\\\\\\\\begin{align}', right: '\\\\\\\\end{align}', display: true}, {left: '\\\\\\\\begin{align*}', right: '\\\\\\\\end{align*}', display: true}, {\",\"classification_terms\":[\"zigzag-number-spiral.html\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/million-times-million.html\",\"status\":200,\"title\":\"Million Times Million - Susam Pal\",\"word_count\":1076,\"summary_text\":\"Million Times Million - Susam Pal Million Times Million - Susam Pal .katex {font-size: 1.1em } .katex a:link {text-decoration: none} .katex-display { overflow-x: auto; /* Allow horizontal scroll for wide equations. */ overflow-y: hidden; /* Hide vertical scroll due to horizontal scroll. */ padding-top: 0.5em; /* Prevent top clipping. */ padding-right: 0.5em; /* Prevent horizontal scroll on numbered equations. */ /* See also: */ } document.addEventListener('DOMContentLoaded', function () { renderMathInElement(document.body, { delimiters: [ {left: '\\\\\\\\(', right: '\\\\\\\\)', display: false}, {left: '\\\\\\\\[', right: '\\\\\\\\]', display: true}, {left: '\\\\\\\\begin{equation}', right: '\\\\\\\\end{equation}', display: true}, {left: '\\\\\\\\begin{align}', right: '\\\\\\\\end{align}', display: true}, {left: '\\\\\\\\begin{align*}', right: '\\\\\\\\end{align*}', display: true},\",\"classification_terms\":[\"million-times-million.html\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/product-of-additive-inverses.html\",\"status\":200,\"title\":\"Product of Additive Inverses - Susam Pal\",\"word_count\":2475,\"summary_text\":\"Product of Additive Inverses - Susam Pal Product of Additive Inverses - Susam Pal .katex {font-size: 1.1em } .katex a:link {text-decoration: none} .katex-display { overflow-x: auto; /* Allow horizontal scroll for wide equations. */ overflow-y: hidden; /* Hide vertical scroll due to horizontal scroll. */ padding-top: 0.5em; /* Prevent top clipping. */ padding-right: 0.5em; /* Prevent horizontal scroll on numbered equations. */ /* See also: */ } document.addEventListener('DOMContentLoaded', function () { renderMathInElement(document.body, { delimiters: [ {left: '\\\\\\\\(', right: '\\\\\\\\)', display: false}, {left: '\\\\\\\\[', right: '\\\\\\\\]', display: true}, {left: '\\\\\\\\begin{equation}', right: '\\\\\\\\end{equation}', display: true}, {left: '\\\\\\\\begin{align}', right: '\\\\\\\\end{align}', display: true}, {left: '\\\\\\\\begin{align*}', right: '\\\\\\\\end{align*}', display:\",\"classification_terms\":[\"product-of-additive-inverses.html\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/two-ideals-of-fields.html\",\"status\":200,\"title\":\"Two Ideals of Fields - Susam Pal\",\"word_count\":1603,\"summary_text\":\"Two Ideals of Fields - Susam Pal Two Ideals of Fields - Susam Pal .katex {font-size: 1.1em } .katex a:link {text-decoration: none} .katex-display { overflow-x: auto; /* Allow horizontal scroll for wide equations. */ overflow-y: hidden; /* Hide vertical scroll due to horizontal scroll. */ padding-top: 0.5em; /* Prevent top clipping. */ padding-right: 0.5em; /* Prevent horizontal scroll on numbered equations. */ /* See also: */ } document.addEventListener('DOMContentLoaded', function () { renderMathInElement(document.body, { delimiters: [ {left: '\\\\\\\\(', right: '\\\\\\\\)', display: false}, {left: '\\\\\\\\[', right: '\\\\\\\\]', display: true}, {left: '\\\\\\\\begin{equation}', right: '\\\\\\\\end{equation}', display: true}, {left: '\\\\\\\\begin{align}', right: '\\\\\\\\end{align}', display: true}, {left: '\\\\\\\\begin{align*}', right: '\\\\\\\\end{align*}', display: true}, {\",\"classification_terms\":[\"two-ideals-of-fields.html\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/from-finite-integral-domains-to-finite-fields.html\",\"status\":200,\"title\":\"From Finite Integral Domains to Finite Fields - Susam Pal\",\"word_count\":2077,\"summary_text\":\"From Finite Integral Domains to Finite Fields - Susam Pal From Finite Integral Domains to Finite Fields - Susam Pal .katex {font-size: 1.1em } .katex a:link {text-decoration: none} .katex-display { overflow-x: auto; /* Allow horizontal scroll for wide equations. */ overflow-y: hidden; /* Hide vertical scroll due to horizontal scroll. */ padding-top: 0.5em; /* Prevent top clipping. */ padding-right: 0.5em; /* Prevent horizontal scroll on numbered equations. */ /* See also: */ } document.addEventListener('DOMContentLoaded', function () { renderMathInElement(document.body, { delimiters: [ {left: '\\\\\\\\(', right: '\\\\\\\\)', display: false}, {left: '\\\\\\\\[', right: '\\\\\\\\]', display: true}, {left: '\\\\\\\\begin{equation}', right: '\\\\\\\\end{equation}', display: true}, {left: '\\\\\\\\begin{align}', right: '\\\\\\\\end{align}', display: true}, {left: '\\\\\\\\begin{align*}', right: '\\\\\\\\end{al\",\"classification_terms\":[\"from-finite-integral-domains-to-finite-fields.html\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/elliptical-python-programming.html\",\"status\":200,\"title\":\"Elliptical Python Programming - Susam Pal\",\"word_count\":594,\"summary_text\":\"Elliptical Python Programming - Susam Pal Elliptical Python Programming - Susam Pal Elliptical Python Programming By Susam Pal on 10 Apr 2025 One thing I love about Python is how it comes with its very own built-in zen. In moments of tribulations, when I am wrestling with crooked code and tangled thoughts, I often find solace in its timeless wisdom. Here's a glimpse of the clarity it provides: $ python3 -m this | grep e- There should be one-- and preferably only one --obvious way to do it. Indeed, there is one and only one obvious way to write the number 1 in Python, like so: &gt;&gt;&gt; --(...==...) 1 You may, quite naturally, place several ones adjacently to produce larger integers: &gt;&gt;&gt; --(...==...)--(...==...) 2 And so on ad infinitum or until your heap collapses like a poorly made souffl&eacute;. Now, the 'pre-decrem\",\"classification_terms\":[\"elliptical-python-programming.html\",\"about\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/more-contrast-please.html\",\"status\":200,\"title\":\"More Contrast, Please - Susam Pal\",\"word_count\":540,\"summary_text\":\"More Contrast, Please - Susam Pal More Contrast, Please - Susam Pal More Contrast, Please By Susam Pal on 07 Apr 2025 So you have decided to go with a dark theme for your website. Great choice! I love dark themes too! My journey with computers began with monochrome CRT monitors, where white text was displayed on dark background. I am still very fond of that colour scheme. Done well, dark themes can be elegant and easy on the eyes. But there is a common pitfall that I see all too often in modern web design: the overuse of low-contrast colour schemes. This is something worth keeping in mind while crafting a new theme. Take a look at this example where the text colour is #777 and the background is #222: The five boxing wizards jump quickly. I am hoping that most people would agree that the colour contrast above is too low. I\",\"classification_terms\":[\"more-contrast-please.html\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/hn-bell.html\",\"status\":200,\"title\":\"Hacker News Hug of Deaf - Susam Pal\",\"word_count\":696,\"summary_text\":\"Hacker News Hug of Deaf - Susam Pal Hacker News Hug of Deaf - Susam Pal Hacker News Hug of Deaf By Susam Pal on 05 Apr 2025 \\\"It's essentially the Hacker News Hug of Deaf.\\\" &ndash; @TonyTrapp About three years ago, I set up a tiny netcat loop on one of my Debian servers to accept arbitrary connections from the Hacker News (HN) community. The loop ran for 24 hours and did exactly three things whenever a client connected: Send a simple ok message to the client. Close the connection immediately. Make my terminal beep four times. That's it! It was a playful experiment in response to a thread about quirky, do-it-yourself alerting systems for friends and family. See this HN thread for the original discussion. Here is the exact command I ran on my server: while true; do (echo ok | nc -q 1 -vlp 8000 2&gt;&amp;1; echo; date -u) | tee\",\"classification_terms\":[\"hn-bell.html\",\"about\",\"news\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/mathbin-is-shutting-down.html\",\"status\":200,\"title\":\"MathB.in Is Shutting Down - Susam Pal\",\"word_count\":961,\"summary_text\":\"MathB.in Is Shutting Down - Susam Pal MathB.in Is Shutting Down - Susam Pal MathB.in Is Shutting Down By Susam Pal on 23 Feb 2025 Thirteen years ago, on a quiet Saturday night, I sat down and began developing MathB.in. After coding all through the night, as the sun rose on Sunday, 25 March 2012, the website was ready. I registered a new domain name and shared it with a few friends who loved mathematics. Back then, we spent hours discussing fascinating mathematics problems and this website became a simple way for us to share snippets with each other. Word spread quickly. My friends shared it with their friends, who passed it along to others. The community grew organically. Then, one day, I announced the project on the MathJax mailing list and its reach expanded even further. Within a year, this mathematics pastebin service had\",\"classification_terms\":[\"mathbin-is-shutting-down.html\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/assoc.html\",\"status\":200,\"title\":\"Associations\",\"word_count\":2611,\"summary_text\":\"Associations Associations body { background: #fff; color: #333; font-family: georgia,serif; font-size: large; line-height: 1.5; margin: 0 auto; max-width: 40em; padding: 0 1em; } code { color: #006; font-family: courier,monospace; } h1, h2, h3 { margin: 1.25em 0 0.25em 0; line-height: 1.2; } a:link { color: #00e; } a:visited { color: #518; } a:focus, a:hover { color: #03f; } a:active { color: #a00; } a:empty:before { content: \\\"#\\\"; } a:empty { visibility: hidden; padding-left: 0.25em; } :hover > a:empty { visibility: visible; } table.grid { border-collapse: collapse; min-width: 100%; } table.grid th, table.grid td { border-width: thin; border-style: solid; } table.grid th, table.grid td { padding: 0.3em 0.4em; border-color: #666; } td { text-align: center; } td.dark { background: #333; } figure { text-a\",\"classification_terms\":[\"assoc.html\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/eql.html\",\"status\":200,\"title\":\"Equal Length Words - Susam Pal\",\"word_count\":306,\"summary_text\":\"Equal Length Words - Susam Pal Equal Length Words - Susam Pal Equal Length Words By Susam Pal on 14 Oct 2024 | Updated on 30 Dec 2025 I have an unusual hobby. I collect related words of equal length. This page lists my collection of related words that are all the same length and connected to one another in some way. This particular fascination with related words of equal length originated as a result of computer programming. While developing software, I often need to name variables, functions and other elements in a way that reflect the concepts I am working with. Occasionally, I end up choosing names for related elements that are the same length, which becomes visually striking when these names align neatly in the text editor. Each group of words is presented in monospaced font so that the equal length of the words in\",\"classification_terms\":[\"eql.html\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/jenkins-quicksort.html\",\"status\":200,\"title\":\"Quicksort with Jenkins for Fun and No Profit - Susam Pal\",\"word_count\":1754,\"summary_text\":\"Quicksort with Jenkins for Fun and No Profit - Susam Pal Quicksort with Jenkins for Fun and No Profit - Susam Pal Quicksort with Jenkins for Fun and No Profit By Susam Pal on 25 Jan 2024 I first encountered Jenkins in 2007 while contributing to the Apache Nutch project. It was called Hudson back then. The nightly builds for the project ran on Hudson at that time. I remember sifting through my emails and reviewing build result notifications to keep an eye on the patches that got merged into the trunk everyday. Yes, patches and trunk! We were still using SVN back then. Hudson was renamed to Jenkins in 2011. Since version 2.0 (released on 20 Apr 2016), Jenkins supports pipeline scripts written in Groovy as a first-class entity. A pipeline script effectively defines the build job. It can define build properties, build stages, build steps, etc. It ca\",\"classification_terms\":[\"jenkins-quicksort.html\",\"support\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/sorting-in-emacs.html\",\"status\":200,\"title\":\"Sorting in Emacs - Susam Pal\",\"word_count\":2386,\"summary_text\":\"Sorting in Emacs - Susam Pal Sorting in Emacs - Susam Pal Sorting in Emacs By Susam Pal on 09 Aug 2023 In this article, we will perform a series of hands-on experiments that demonstrate the various Emacs commands that can be used to sort text in different ways. There is sufficient documentation available for these commands in the Emacs and Elisp manuals. In this article, however, we will take a look at some concrete examples to illustrate how they work. Sorting Lines Our first set of experiments demonstrates different ways to sort lines. Follow the steps below to perform these experiments. First create a buffer that has the following text: Carol 200 London LHR-&gt;SFO Dan 20 Tokyo HND-&gt;LHR Bob 100 London LCY-&gt;CDG Alice 10 Paris CDG-&gt;LHR Bob 30 Paris ORY-&gt;HND Let us pretend that each line is a record that r\",\"classification_terms\":[\"sorting-in-emacs.html\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/control-escape-meta-tricks.html\",\"status\":200,\"title\":\"Control, Escape and Meta Tricks - Susam Pal\",\"word_count\":1784,\"summary_text\":\"Control, Escape and Meta Tricks - Susam Pal Control, Escape and Meta Tricks - Susam Pal Control, Escape and Meta Tricks By Susam Pal on 16 Jun 2023 Terminal Tricks Open a Unix or Linux terminal emulator. If you have Terminal.app on macOS, ensure that the \\\"Use Option as Meta Key\\\" option is enabled in its \\\"Preferences\\\" section. Now type foo bar baz followed by meta+b (i.e. alt+b or option+b on modern keyboards). In a typical desktop environment with a typical and modern terminal emulator running a modern shell like Bash, Zsh, etc., the cursor should move backward by one word. Now type esc b. The cursor should move back again by one word. Finally type ctrl+[ b and the same thing should happen again. How are we able to perform the same operation in three different ways? Note that if the desktop environment or the terminal emulator or th\",\"classification_terms\":[\"control-escape-meta-tricks.html\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":11,\"depth\":1},{\"path\":\"/from-xon-xoff-to-forward-incremental-search.html\",\"status\":200,\"title\":\"From XON/XOFF to Forward Incremental Search - Susam Pal\",\"word_count\":1704,\"summary_text\":\"From XON/XOFF to Forward Incremental Search - Susam Pal From XON/XOFF to Forward Incremental Search - Susam Pal From XON/XOFF to Forward Incremental Search By Susam Pal on 13 Aug 2022 XON/XOFF In the olden days of computing, software flow control with control codes XON and XOFF was a necessary feature that dumb terminals needed to support. When a terminal received more data than it could display, there needed to be a way for the terminal to tell the remote host to pause sending more data. The control code 19 was chosen for this. The control code 17 was chosen to tell the remote host to resume transmission of data. The control code 19 is called Device Control 3 (DC3) in the ASCII chart. It is also known as \\\"transmit off\\\" (XOFF). The control code 17 is called Device Control 1 (DC1) as well as \\\"transmit on\\\" (XON). Now how does a user of the termin\",\"classification_terms\":[\"from-xon-xoff-to-forward-incremental-search.html\",\"support\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":12,\"depth\":1},{\"path\":\"/mathbin-turns-ten.html\",\"status\":200,\"title\":\"MathB.in Turns Ten - Susam Pal\",\"word_count\":1169,\"summary_text\":\"MathB.in Turns Ten - Susam Pal MathB.in Turns Ten - Susam Pal MathB.in Turns Ten By Susam Pal on 25 Mar 2022 On this day, ten years ago, MathB.in was released on the world wide web. MathB.in is a web-based mathematics pastebin service that is used for sharing snippets of mathematical text with others. The source code is available at github.com/susam/mathb. A Brief History of Mathematics Pastebins MathB.in is the oldest mathematics pastebin that is still alive and serving its community of users. It isn't the first mathematics pastebin though. It's the second. The first one was written by Mark A. Stratman and hosted at mathbin.net until 2020. It was very popular in the #math and #physics channels on IRC networks between 2006 and 2013. It did not have live preview but it used an actual LaTeX system in the backend for rende\",\"classification_terms\":[\"mathbin-turns-ten.html\",\"source code\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/import-readline.html\",\"status\":200,\"title\":\"Import Readline - Susam Pal\",\"word_count\":762,\"summary_text\":\"Import Readline - Susam Pal Import Readline - Susam Pal Import Readline By Susam Pal on 24 Feb 2022 Toy REPL Let us first write a tiny Python program to create a toy read-eval-print-loop (REPL) that does only one thing: add all integers entered as input into the REPL prompt. Here is the program: while True: try: line = input('&gt; ') print(sum([int(n) for n in line.split()])) except ValueError as e: print('error:', e) except (KeyboardInterrupt, EOFError): break Here is how it works: $ python3 repl.py &gt; 10 20 30 60 &gt; 40 50 60 150 &gt; If we now type &uarr; (the up arrow key) or ctrl+p to bring back the previous input, we see something like the following instead: &gt; ^[[A^[[A^P^P It shows the keys typed literally rather than bringing up previous input like most other interactive programs with a command-line inte\",\"classification_terms\":[\"import-readline.html\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":4,\"depth\":1},{\"path\":\"/shell-eval.html\",\"status\":200,\"title\":\"Shell Eval - Susam Pal\",\"word_count\":595,\"summary_text\":\"Shell Eval - Susam Pal Shell Eval - Susam Pal Shell Eval By Susam Pal on 06 Jan 2022 In this post, we will perform a few experiments to see the usefulness of the eval command for a particular scenario in a POSIX-compliant shell. At first, we prepare a test file that contains a space in its name and define a variable as follows: $ echo lorem ipsum &gt; \\\"foo bar\\\" $ cmd='cat \\\"foo bar\\\"' We will use this file and the variable in the experiments below. All output examples below are obtained using Dash 0.5.11 on a Debian GNU/Linux 11.2 (bullseye) system. Dash stands for Debian Almquist Shell which is a POSIX-compliant shell available in Debian. Any POSIX conforming shell should produce similar output. On Zsh, use the command emulate sh before running these examples to get similar output. Experiment 1 Now simply enter $\",\"classification_terms\":[\"shell-eval.html\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":1,\"depth\":1},{\"path\":\"/integrating-factor.html\",\"status\":200,\"title\":\"Integrating Factor - Susam Pal\",\"word_count\":1479,\"summary_text\":\"Integrating Factor - Susam Pal Integrating Factor - Susam Pal .katex {font-size: 1.1em } .katex a:link {text-decoration: none} .katex-display { overflow-x: auto; /* Allow horizontal scroll for wide equations. */ overflow-y: hidden; /* Hide vertical scroll due to horizontal scroll. */ padding-top: 0.5em; /* Prevent top clipping. */ padding-right: 0.5em; /* Prevent horizontal scroll on numbered equations. */ /* See also: */ } document.addEventListener('DOMContentLoaded', function () { renderMathInElement(document.body, { delimiters: [ {left: '\\\\\\\\(', right: '\\\\\\\\)', display: false}, {left: '\\\\\\\\[', right: '\\\\\\\\]', display: true}, {left: '\\\\\\\\begin{equation}', right: '\\\\\\\\end{equation}', display: true}, {left: '\\\\\\\\begin{align}', right: '\\\\\\\\end{align}', display: true}, {left: '\\\\\\\\begin{align*}', right: '\\\\\\\\end{align*}', display: true}, {le\",\"classification_terms\":[\"integrating-factor.html\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/gcd-grid.html\",\"status\":200,\"title\":\"GCD Grid - Susam Pal\",\"word_count\":1190,\"summary_text\":\"GCD Grid - Susam Pal GCD Grid - Susam Pal .katex {font-size: 1.1em } .katex a:link {text-decoration: none} .katex-display { overflow-x: auto; /* Allow horizontal scroll for wide equations. */ overflow-y: hidden; /* Hide vertical scroll due to horizontal scroll. */ padding-top: 0.5em; /* Prevent top clipping. */ padding-right: 0.5em; /* Prevent horizontal scroll on numbered equations. */ /* See also: */ } document.addEventListener('DOMContentLoaded', function () { renderMathInElement(document.body, { delimiters: [ {left: '\\\\\\\\(', right: '\\\\\\\\)', display: false}, {left: '\\\\\\\\[', right: '\\\\\\\\]', display: true}, {left: '\\\\\\\\begin{equation}', right: '\\\\\\\\end{equation}', display: true}, {left: '\\\\\\\\begin{align}', right: '\\\\\\\\end{align}', display: true}, {left: '\\\\\\\\begin{align*}', right: '\\\\\\\\end{align*}', display: true}, {left: '\\\\\\\\beg\",\"classification_terms\":[\"gcd-grid.html\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/good-quality-dosbox-video-capture.html\",\"status\":200,\"title\":\"Good Quality DOSBox Video Capture - Susam Pal\",\"word_count\":2940,\"summary_text\":\"Good Quality DOSBox Video Capture - Susam Pal Good Quality DOSBox Video Capture - Susam Pal Good Quality DOSBox Video Capture By Susam Pal on 01 Sep 2020 Vintage DOS Programs Once in a while, I fire up one of the vintage DOS games or language interpreters in DOSBox for nostalgia's sake. DOSBox is an emulator program that emulates IBM PC compatible computers running DOS. Trying my hands on these antiquated DOS programs now evokes old memories from my childhood days days when I first came across computers as part of our primary school curriculum. Computers were much simpler in those days. The ones in our school were IBM PC compatible computers with mostly monochrome displays. A couple of them had support for a very limited number of colours provided by CGA or EGA graphics cards. The ability to boot a computer using a 5&frac14;-inch flop\",\"classification_terms\":[\"good-quality-dosbox-video-capture.html\",\"support\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":1,\"depth\":1},{\"path\":\"/microcentury.html\",\"status\":200,\"title\":\"Microcentury - Susam Pal\",\"word_count\":898,\"summary_text\":\"Microcentury - Susam Pal Microcentury - Susam Pal Microcentury By Susam Pal on 17 Jul 2020 Optimal Lecture Time I recently found this interesting paragraph from an article titled Ten Lessons I Wish I Had Been Taught that is based on a talk presented by Gian-Carlo Rota in Apr 1996: Running overtime is the one unforgivable error a lecturer can make. After fifty minutes (one microcentury as von Neumann used to say) everybody's attention will turn elsewhere even if we are trying to prove the Riemann hypothesis. One minute overtime can destroy the best of lectures. That's fine advice. In fact, the whole article is full of good advice like this. Although it was written primarily for mathematicians, a lot of what is said in the article applies quite well to professionals in other fields too. The excerpt I have quoted abo\",\"classification_terms\":[\"microcentury.html\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":51,\"depth\":1},{\"path\":\"/global-palindrome-day.html\",\"status\":200,\"title\":\"Global Palindrome Day - Susam Pal\",\"word_count\":454,\"summary_text\":\"Global Palindrome Day - Susam Pal Global Palindrome Day - Susam Pal Global Palindrome Day By Susam Pal on 02 Feb 2020 Date Formats There are three popular date formats followed worldwide: big-endian, little-endian and middle-endian. Here is how today's date looks like in these formats if the year is written out in full: Endianness Format Date Big-endian YYYY-MM-DD 2020-02-02 Little-endian DD-MM-YYYY 02-02-2020 Middle-endian MM-DD-YYYY 02-02-2020 The ISO 8601 standard specifies the big-endian date format. The big-endian format is popular in Canada, China, Japan, Lithuania, etc. The little-endian format is used by the majority of the world including countries like Brazil, Egypt, Germany, India, Italy, United Kingdom, etc. The middle-endian date format is primarily used in the Philippines and the United States. The preferred\",\"classification_terms\":[\"global-palindrome-day.html\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":4,\"depth\":1},{\"path\":\"/lisp-in-vim.html\",\"status\":200,\"title\":\"Lisp in Vim - Susam Pal\",\"word_count\":9564,\"summary_text\":\"Lisp in Vim - Susam Pal Lisp in Vim - Susam Pal Lisp in Vim By Susam Pal on 07 Dec 2019 Introduction Fifteen years ago, writing Lisp code in Vim was an odd adventure. There were no good plugins for Vim that assisted in structured editing of Lisp s-expressions or allowed interactive programming by embedding a Lisp Read-Eval-Print-Loop (REPL) or a debugger within the editor. The situation has improved a lot since then. In the last ten years, we have seen active development of two Vim plugins named Slimv and Vlime. Slimv is over 10 years old now. Vlime is more recent and less than 3 years old right now. Both support interactive programming in Lisp. I am going to discuss and compare both Slimv and Vlime in this article. I will show how to get started with both plugins and introduce some of their basic features. I wil\",\"classification_terms\":[\"lisp-in-vim.html\",\"support\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/sinkholed.html\",\"status\":200,\"title\":\"Sinkholed - Susam Pal\",\"word_count\":1847,\"summary_text\":\"Sinkholed - Susam Pal Sinkholed - Susam Pal Sinkholed By Susam Pal on 03 Dec 2019 Introduction On 26 Nov 2019 at 14:55 UTC, I logged into my server that hosts my website to perform a simple maintenance activity. Merely three minutes later, at 14:58 UTC, the domain name susam.in used to host this website was transferred to another registrant without any authorisation by me or without any notification sent to me. Since the DNS results for this domain name was cached on my system, I was unaware of this issue at that time. It would take me three days to realise that I had lost control of the domain name I had been using for my website for the last 12 years. This blog post documents when this happened, how this happened and what it took to regain control of this domain name. Contents Introduction Domain Name Transfe\",\"classification_terms\":[\"sinkholed.html\",\"blog\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":3,\"depth\":1},{\"path\":\"/file-transfer-with-ssh-tee-and-base64.html\",\"status\":200,\"title\":\"File Transfer with SSH, Tee and Base64 - Susam Pal\",\"word_count\":593,\"summary_text\":\"File Transfer with SSH, Tee and Base64 - Susam Pal File Transfer with SSH, Tee and Base64 - Susam Pal File Transfer with SSH, Tee and Base64 By Susam Pal on 19 Nov 2019 Computer servers deployed in a secure environment may allow SSH sessions but forbid SCP, SFTP and execution of remote commands without a login shell. Such restricted access is typically enforced with SSH gateways and firewalls. An SSH gateway provides controlled access to the remote system. A firewall can ensure that only an SSH gateway can connect to the remote system. Thus, users can be forced to connect to the remote system only via the SSH gateway which can now control what is allowed and what isn't. Even if SCP, SFTP, port forwarding and remote command execution without a login shell are forbidden, as long as we get a login shell on our terminal and we can print data o\",\"classification_terms\":[\"file-transfer-with-ssh-tee-and-base64.html\",\"login\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/fd-100.html\",\"status\":200,\"title\":\"FD 100 - Susam Pal\",\"word_count\":990,\"summary_text\":\"FD 100 - Susam Pal FD 100 - Susam Pal .katex {font-size: 1.1em } .katex a:link {text-decoration: none} .katex-display { overflow-x: auto; /* Allow horizontal scroll for wide equations. */ overflow-y: hidden; /* Hide vertical scroll due to horizontal scroll. */ padding-top: 0.5em; /* Prevent top clipping. */ padding-right: 0.5em; /* Prevent horizontal scroll on numbered equations. */ /* See also: */ } document.addEventListener('DOMContentLoaded', function () { renderMathInElement(document.body, { delimiters: [ {left: '\\\\\\\\(', right: '\\\\\\\\)', display: false}, {left: '\\\\\\\\[', right: '\\\\\\\\]', display: true}, {left: '\\\\\\\\begin{equation}', right: '\\\\\\\\end{equation}', display: true}, {left: '\\\\\\\\begin{align}', right: '\\\\\\\\end{align}', display: true}, {left: '\\\\\\\\begin{align*}', right: '\\\\\\\\end{align*}', display: true}, {left: '\\\\\\\\begin\",\"classification_terms\":[\"fd-100.html\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/peculiar-self-references.html\",\"status\":200,\"title\":\"Peculiar Self-References - Susam Pal\",\"word_count\":683,\"summary_text\":\"Peculiar Self-References - Susam Pal Peculiar Self-References - Susam Pal Peculiar Self-References By Susam Pal on 21 Feb 2019 Peculiar Results Here is a tiny Python example that creates a self-referential list and demonstrates the self-reference: &gt;&gt;&gt; a = a[0] = [0] &gt;&gt;&gt; a [[...]] &gt;&gt;&gt; a[0] [[...]] &gt;&gt;&gt; a[0][0] [[...]] &gt;&gt;&gt; a is a[0] True The output shows that a[0] refers to a itself which makes it a self-referential list. Why does this simple code create a self-referential list? Should it not have failed with NameError because a is not yet defined while assigning the list [0] to a[0]? Here is another similar example that creates a self-referential list too: &gt;&gt;&gt; a = a[0] = [0, 0] &gt;&gt;&gt; a [[...], 0] Here is a similar example for dictionary: &gt;&gt;&gt; a = a[0] = {} &gt\",\"classification_terms\":[\"peculiar-self-references.html\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/from-vector-spaces-to-periodic-functions.html\",\"status\":200,\"title\":\"From Vector Spaces to Periodic Functions - Susam Pal\",\"word_count\":1172,\"summary_text\":\"From Vector Spaces to Periodic Functions - Susam Pal From Vector Spaces to Periodic Functions - Susam Pal .katex {font-size: 1.1em } .katex a:link {text-decoration: none} .katex-display { overflow-x: auto; /* Allow horizontal scroll for wide equations. */ overflow-y: hidden; /* Hide vertical scroll due to horizontal scroll. */ padding-top: 0.5em; /* Prevent top clipping. */ padding-right: 0.5em; /* Prevent horizontal scroll on numbered equations. */ /* See also: */ } document.addEventListener('DOMContentLoaded', function () { renderMathInElement(document.body, { delimiters: [ {left: '\\\\\\\\(', right: '\\\\\\\\)', display: false}, {left: '\\\\\\\\[', right: '\\\\\\\\]', display: true}, {left: '\\\\\\\\begin{equation}', right: '\\\\\\\\end{equation}', display: true}, {left: '\\\\\\\\begin{align}', right: '\\\\\\\\end{align}', display: true}, {left: '\\\\\\\\begin{align*}', right: '\\\\\\\\end{align*}\",\"classification_terms\":[\"from-vector-spaces-to-periodic-functions.html\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/zero-point-leet-seconds.html\",\"status\":200,\"title\":\"Zero Point Leet Seconds - Susam Pal\",\"word_count\":247,\"summary_text\":\"Zero Point Leet Seconds - Susam Pal Zero Point Leet Seconds - Susam Pal Zero Point Leet Seconds By Susam Pal on 18 Sep 2018 While calculating certain round-trip times, here is a number I came across that is surprisingly memorable: It takes light 0.1337 seconds to travel the length of the Earth's equator via vacuum or air. Let me repeat that. It takes light \\\"zero point leet\\\" seconds to travel once around the equator. We are going to ignore practical considerations regarding how light would actually follow a curved path around the Earth's equator via vacuum or air. This allows us to find the minimum time that any signal must take in order to complete a round trip around the Earth. Despite the lack of practicality, this is an interesting result because it provides us a theoretical limit for the shortest time interval between se\",\"classification_terms\":[\"zero-point-leet-seconds.html\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":1},{\"path\":\"/good-blessings.html\",\"status\":200,\"title\":\"Good Blessings - Susam Pal\",\"word_count\":816,\"summary_text\":\"Good Blessings - Susam Pal Good Blessings - Susam Pal Good Blessings By Susam Pal on 11 Dec 2016 Back in 2009, I had completed a year working for RSA Security. I was then looking for more intellectually stimulating work where I could work on projects involving mathematics and algorithms. While I had talked to senior leaders of the organisation about my aspirations, nothing concrete had materialised for several weeks. Then something interesting happened. One fine Monday morning, as I walked into the office and began to settle at my desk, the head of our research and development division came to my desk looking for me. He said, \\\"Burt is here. He wants to talk to you.\\\" There was no Burt in that office as far as I knew, so I became a little confused. I was led into a conference room where I could meet him. Mildly disori\",\"classification_terms\":[\"good-blessings.html\",\"about\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":0,\"depth\":1},{\"path\":\"/fixed-bits-of-version-4-uuid.html\",\"status\":200,\"title\":\"Fixed Bits of Version 4 UUID - Susam Pal\",\"word_count\":602,\"summary_text\":\"Fixed Bits of Version 4 UUID - Susam Pal Fixed Bits of Version 4 UUID - Susam Pal Fixed Bits of Version 4 UUID By Susam Pal on 10 Apr 2015 Universally Unique Identifiers or UUIDs are a popular way of creating identifiers that are unique for practical purposes. Quoting from RFC 4122 below: This specification defines a Uniform Resource Name namespace for UUIDs (Universally Unique IDentifier), also known as GUIDs (Globally Unique IDentifier). A UUID is 128 bits long and requires no central registration process. These 128-bit identifiers are typically represented as 32 hexadecimal digits, displayed in five groups separated by hyphens. There are various variants and versions of UUIDs which differ in how the identifiers are encoded in binary and how they are generated. In this post, we are going to focus only on variant 1 of version 4\",\"classification_terms\":[\"fixed-bits-of-version-4-uuid.html\"],\"external_refs\":[],\"password_input_count\":0,\"email_input_count\":0,\"tel_input_count\":0,\"otp_term_count\":0,\"login_form_count\":0,\"checkout_form_count\":0,\"wallet_prompt_count\":0,\"offdomain_form_actions\":0,\"suspicious_script_refs_count\":0,\"external_script_hosts\":[],\"executable_download_count\":0,\"archive_download_count\":0,\"apk_download_count\":0,\"phone_number_count\":2,\"depth\":1},{\"path\":\"/temperature-conversion.html\",\"status\":200,\"title\":\"Temperature Conversion - Susam Pal\",\"word_count\":1867,\"summary_text\":\"Temperature Conversion - Susam Pal Temperature Conversion - Susam Pal .katex {font-size: 1.1em } .katex a:link {text-decoration: none} .katex-display { overflow-x: auto; /* Allow horizontal scroll for wide equations. */ overflow-y: hidden; /* Hide vertical scroll due to horizontal scroll. */ padding-top: 0.5em; /* Prevent top clipping. */ padding-right: 0.5em; /* Prevent horizontal scroll on numbered equations. */ /* See also: */ } document.addEventListener('DOMContentLoaded', function () { renderMathInElement(document.body, { delimiters: [ {left: '\\\\\\\\(', right: '\\\\\\\\",
        "score_reasons_json": "[]",
        "route_domain": "susam.net",
        "display_domain": "susam.net"
    },
    "explainability": {
        "summary": "susam.net currently scores 68/100. The score is being shaped by a mixed signal profile rather than one dominant factor. Evidence confidence is strong enough for a relatively stable read. This is an estimated profile rather than a manually tracked one. Crawler access looks clean.",
        "badges": [
            {
                "label": "Profile",
                "value": "Estimated profile",
                "tone": "unknown",
                "detail": null
            },
            {
                "label": "Evidence confidence",
                "value": "High confidence",
                "tone": "good",
                "detail": "100/100"
            },
            {
                "label": "Traffic confidence",
                "value": "Moderate confidence",
                "tone": "caution",
                "detail": "57/100"
            },
            {
                "label": "Crawler access",
                "value": "Clean visibility",
                "tone": "good",
                "detail": null
            }
        ],
        "weighted_contributions": [
            {
                "label": "Quality system",
                "points": "+24.5",
                "tone": "good",
                "detail": "Technical quality, crawl depth, page structure, and implementation hygiene. Current subsystem score: 72/100."
            },
            {
                "label": "Reputation system",
                "points": "+15.0",
                "tone": "caution",
                "detail": "Authority, search visibility, reach, engagement, and registry stability. Current subsystem score: 44/100."
            },
            {
                "label": "Safety system",
                "points": "+32.0",
                "tone": "good",
                "detail": "Fraud, spam, and trust signals from infrastructure, crawl, and registry evidence. Current subsystem score: 100/100."
            },
            {
                "label": "Risk clamp",
                "points": "-3.0",
                "tone": "risk",
                "detail": "Safety thresholds capped the final score until the risk profile improves."
            }
        ],
        "evidence_cards": [
            {
                "label": "Authority and trust",
                "value": "47/100 · trust 72/100",
                "tone": "caution",
                "detail": "185 monthly visitors, 67 organic keywords, brand completeness 50/100, engagement 78/100."
            },
            {
                "label": "Backlink and search evidence",
                "value": "5 referring domains",
                "tone": "good",
                "detail": "5 backlinks across 5 referring domains. Diversity 95/100; spam penalty 0."
            },
            {
                "label": "Registry and domain stability",
                "value": "4.5 years old",
                "tone": "good",
                "detail": "Stability 100/100 · age 4.5 years · registrar NameCheap, Inc. · expires in 2,003 days."
            },
            {
                "label": "Safety and fraud posture",
                "value": "Safety 100/100 · fraud 0/100",
                "tone": "good",
                "detail": "Primary tag T · safety 100/100 · fraud 0/100."
            }
        ],
        "positives": [
            "Established domain age: 4.5 years.",
            "Low registrar / ownership churn with solid registry stability.",
            "Healthy crawl quality and on-page completeness.",
            "Registry history looks stable, which supports legitimacy and trust.",
            "HTTPS is working, so the site clears a basic transport-security check.",
            "Backlink diversity looks broad enough to strengthen authority confidence."
        ],
        "risks": [],
        "freshness": [
            {
                "label": "Crawl evidence",
                "value": "2026-04-17 11:31:12",
                "tone": "good",
                "detail": "Crawl and page content sample. Age: 5h ago."
            },
            {
                "label": "WHOIS snapshot",
                "value": "2026-04-17 11:31:01",
                "tone": "good",
                "detail": "Registry profile and stability signals. Age: 5h ago."
            },
            {
                "label": "Keyword view",
                "value": "2026-04-17 16:47:03",
                "tone": "good",
                "detail": "Estimated visibility until tracked keyword snapshots exist. Age: 0s ago."
            },
            {
                "label": "Rank history",
                "value": "2026-04-17 16:47:03",
                "tone": "good",
                "detail": "Estimated trend derived from current profile and crawl signals. Age: 0s ago."
            },
            {
                "label": "Audience geography",
                "value": "Not captured yet",
                "tone": "unknown",
                "detail": "Audience mix is estimated from available signals rather than first-party audience logs."
            }
        ],
        "section_notes": {
            "audience": "Audience geography is estimated from category, country, traffic mix, and brand signals until first-party audience data is collected.",
            "keywords": "Top keywords are estimated from crawl language, brand, category, and visibility signals until tracked keyword snapshots are stored.",
            "history": "Rank history is estimated from the current profile because no stored history exists for this domain yet."
        },
        "base_weighted_score": 71,
        "fraud_clamp_penalty": 3,
        "final_score": 68
    },
    "insight_snapshot": {
        "version": 1,
        "generated_at": "2026-04-17T16:47:03+00:00",
        "domain": "susam.net",
        "display_name": "Susam Pal",
        "is_tracked": false,
        "is_estimated": true,
        "overall_score": 68,
        "authority_score": 47,
        "trust_score": 72,
        "safety_score": 100,
        "fraud_score": 0,
        "confidence_score": 100,
        "traffic_confidence": 57,
        "last_crawled_at": "2026-04-17 11:31:12",
        "crawl_blocked": false,
        "summary": "susam.net currently scores 68/100. The score is being shaped by a mixed signal profile rather than one dominant factor. Evidence confidence is strong enough for a relatively stable read. This is an estimated profile rather than a manually tracked one. Crawler access looks clean.",
        "badges": [
            {
                "label": "Profile",
                "value": "Estimated profile",
                "tone": "unknown",
                "detail": null
            },
            {
                "label": "Evidence confidence",
                "value": "High confidence",
                "tone": "good",
                "detail": "100/100"
            },
            {
                "label": "Traffic confidence",
                "value": "Moderate confidence",
                "tone": "caution",
                "detail": "57/100"
            },
            {
                "label": "Crawler access",
                "value": "Clean visibility",
                "tone": "good",
                "detail": null
            }
        ],
        "top_positive_signals": [
            "Established domain age: 4.5 years.",
            "Low registrar / ownership churn with solid registry stability.",
            "Healthy crawl quality and on-page completeness.",
            "Registry history looks stable, which supports legitimacy and trust.",
            "HTTPS is working, so the site clears a basic transport-security check."
        ],
        "top_risk_signals": [],
        "freshness": [
            {
                "label": "Crawl evidence",
                "value": "2026-04-17 11:31:12",
                "tone": "good",
                "detail": "Crawl and page content sample. Age: 5h ago."
            },
            {
                "label": "WHOIS snapshot",
                "value": "2026-04-17 11:31:01",
                "tone": "good",
                "detail": "Registry profile and stability signals. Age: 5h ago."
            },
            {
                "label": "Keyword view",
                "value": "2026-04-17 16:47:03",
                "tone": "good",
                "detail": "Estimated visibility until tracked keyword snapshots exist. Age: 0s ago."
            },
            {
                "label": "Rank history",
                "value": "2026-04-17 16:47:03",
                "tone": "good",
                "detail": "Estimated trend derived from current profile and crawl signals. Age: 0s ago."
            },
            {
                "label": "Audience geography",
                "value": "Not captured yet",
                "tone": "unknown",
                "detail": "Audience mix is estimated from available signals rather than first-party audience logs."
            }
        ],
        "top_tags": [
            {
                "code": "T",
                "label": "Trusted",
                "tone": "good"
            },
            {
                "code": "Uncertain",
                "label": "Uncertain",
                "tone": "unknown"
            }
        ]
    },
    "is_tracked": false,
    "is_estimated": true,
    "live_state": {
        "status": "processing",
        "status_label": "Cache build running",
        "message": "The refreshed page cache is still being built for this domain.",
        "updated_at": "2026-04-19T10:43:13+00:00"
    },
    "refresh_state": {
        "canRequest": false,
        "queued": true,
        "processing": true,
        "stageKey": "cache-queued",
        "stageLabel": "Cache build running",
        "cooldownUntil": null,
        "message": "The refreshed page cache is still being built for this domain.",
        "action": "/domain/susam.net/refresh",
        "isGuestCooldown": false,
        "cooldownSeconds": 0
    },
    "urlscan_report": {
        "domain": "susam.net",
        "status": "idle",
        "submitted_at": null,
        "completed_at": null,
        "last_checked_at": null,
        "last_error": "",
        "submitted_url": "https://susam.net/",
        "uuid": "",
        "result_url": "",
        "api_result_url": "",
        "visibility": "public",
        "summary": "No urlscan.io report has been requested for this domain yet.",
        "report": [],
        "report_summary": [],
        "is_fresh": false,
        "can_retry": true,
        "poll_after_seconds": 20
    }
}