{
  "aemonge.com": {
    "/": {
      "date": "2026-02-07T06:33:39Z",
      "httpProtocol": "h2, tls/1.3",
      "httpStatus": 200,
      "ipAddress": "162.0.212.2",
      "ipASN": "Namecheap, Inc.",
      "ipCountry": "United States",
      "httpHeaderHash": "BJKDGMCLPPSKMC3QGW4QG44GLS4XIT7Q",
      "httpHeaderTechnologies": [
        "HSTS",
        "Fastly",
        "Varnish",
        "GitHub Pages"
      ],
      "httpHeaderUrls": [
        "a580:1416E9:5DBBFD:6565F6:6986DCC2"
      ],
      "httpHeaderByteSize": 902,
      "httpBodyHash": "YEKUJ7KL4NYESZS7HX4VGSBPMN3UTORK",
      "httpBodyTechnologies": [],
      "httpBodyUrls": [
        "/articles/python/performance/build.html",
        "/articles/python/performance/timeit.html",
        "/articles/python/types/diamond_issue.html",
        "home.html",
        "avatar.png",
        "/assets/iframe-hash-sync.js",
        "/articles/databases/sql/file_io.html",
        "/articles/devops/git/cheatsheet.html",
        "/assets/style.css",
        "/assets/code-console-overrides.css",
        "/articles/python/dspy/basic_modules.html",
        "/articles/python/dspy/summarization_metrics.html",
        "/articles/python/debug/logging.html",
        "/articles/python/numpy/downsampling.html",
        "/articles/quarto/render/colorfull-output.html",
        "/articles/python/asyncio/async.html",
        "/articles/python/types/casting.html",
        "/articles/devops/build/git-revert.html",
        "/articles/python/performance/annotations.html",
        "/articles/python/performance/concurrency.html",
        "/articles/devops/pipelines/canary-carousel.html",
        "/articles/devops/git/maintenance.html",
        "/articles/python/types/dataclass.html",
        "/articles/python/unittest/mock_name_attr.html",
        "/articles/unix/network/networkless_commands.html",
        "/articles/devops/build/python.html",
        "/articles/python/fastapi/generic_responses.html",
        "/articles/python/funtools/unpacking_literals.html",
        "backend-engineer_mentor-craftsman_andres-monge.pdf",
        "/assets/burger_responsive_menu.css",
        "/assets/close-burger.js",
        "/articles/python/funtools/partial.html"
      ],
      "httpBodyMetaTags": {
        "description": "Python TSeasoned Python specialist with 15+ years of experience designing robust backend systems across AI/ML platforms, financial services, and SaaS products. I bridge DevOps, databases, and architecture while maintaining deep Python expertise, prioritizing craftsmanship and elegant solutions in every project—from SOC2-compliant platforms to containerized AI workloads.chnical Lead specializing in machine learning, MLOps, and architectural d esign."
      },
      "httpBodyByteSize": 14942,
      "httpBodyPageTitle": "Andres Monge | Backend Engineering Specialist (Python), Mentor and Software Craftsman, Functional Paradigm (Elixir/Gleam) Enthusiast"
    },
    "/articles/python/unittest/mock_name_attr.html": {
      "date": "2026-02-07T08:16:40Z",
      "httpProtocol": "h2, tls/1.3",
      "httpStatus": 200,
      "ipAddress": "162.0.212.2",
      "ipASN": "Namecheap, Inc.",
      "ipCountry": "United States",
      "httpHeaderHash": "S7QQ4BRPX52CATN35HX5PGTE7WFPANKF",
      "httpHeaderTechnologies": [
        "Varnish",
        "GitHub Pages",
        "HSTS",
        "Fastly"
      ],
      "httpHeaderUrls": [],
      "httpHeaderByteSize": 876,
      "httpBodyHash": "EJLIWGWIMOLEWSKNDRXYW6ZLHHUBJXK6",
      "httpBodyTechnologies": [
        "Popper",
        "Bootstrap",
        "Clipboard.js",
        "Quarto:1.7.6"
      ],
      "httpBodyUrls": [
        "#cb7-71",
        "#cb7-82",
        "#cb1-5",
        "#cb5-6",
        "#cb5-8",
        "#cb7-75",
        "#cb7-80",
        "/assets/code-console-overrides.css",
        "/articles/libs/bootstrap/bootstrap-icons.css",
        "#cb7-38",
        "#cb7-66",
        "#cb5-4",
        "#cb7-1",
        "#cb7-33",
        "#cb5-10",
        "#cb5-11",
        "#cb3-1",
        "#cb7-2",
        "#cb7-16",
        "#cb7-50",
        "#cb7-55",
        "#cb7-13",
        "#cb7-15",
        "#cb7-51",
        "#cb7-58",
        "#cb7-60",
        "#cb3-3",
        "#cb5-2",
        "#cb5-12",
        "#cb5-13",
        "#cb7-35",
        "#cb7-64",
        "#cb5-5",
        "#cb7-49",
        "#cb7-77",
        "#cb7-83",
        "#cb7-74",
        "#cb7-3",
        "#cb7-8",
        "#cb7-41",
        "#cb7-67",
        "#cb7-76",
        "#cb7-9",
        "#cb7-20",
        "#cb7-54",
        "#cb7-78",
        "#cb7-4",
        "/articles/libs/quarto-html/quarto.js",
        "#cb7-32",
        "#cb7-62",
        "#cb7-72",
        "#cb7-73",
        "/articles/libs/clipboard/clipboard.min.js",
        "#cb1-3",
        "#cb7-70",
        "#cb7-14",
        "#cb7-19",
        "#cb7-81",
        "/articles/libs/quarto-html/tippy.css",
        "#cb7-5",
        "#cb7-45",
        "#cb7-68",
        "#cb7-84",
        "#cb7-26",
        "/assets/style.css",
        "#cb7-17",
        "#cb7-36",
        "#cb7-43",
        "#cb7-47",
        "#cb7-12",
        "#cb7-21",
        "#cb7-23",
        "#cb7-48",
        "/articles/libs/quarto-html/quarto-syntax-highlighting.css",
        "#cb1-1",
        "#cb5-7",
        "#cb7-7",
        "#cb7-24",
        "#cb7-25",
        "#cb3-2",
        "#cb5-1",
        "#cb5-3",
        "#cb7-56",
        "#cb7-44",
        "#cb7-59",
        "#cb7-79",
        "/articles/libs/quarto-html/anchor.min.js",
        "/articles/libs/quarto-html/tippy.umd.min.js",
        "#cb7-30",
        "#cb7-18",
        "#cb7-31",
        "#cb7-46",
        "#cb7-63",
        "/articles/libs/quarto-html/popper.min.js",
        "#cb7-6",
        "#cb7-22",
        "#cb7-65",
        "/articles/libs/bootstrap/bootstrap.min.css",
        "#cb7-61",
        "/articles/libs/quarto-html/zenscroll-min.js",
        "#cb7-10",
        "#cb7-34",
        "#cb7-42",
        "javascript:void(0)",
        "#cb1-2",
        "#cb1-4",
        "#cb7-11",
        "#cb7-57",
        "#cb7-69",
        "/articles/libs/bootstrap/bootstrap.min.js",
        "#cb5-9",
        "#cb7-29",
        "#cb7-37"
      ],
      "httpBodyMetaTags": {},
      "httpBodyByteSize": 41122,
      "httpBodyPageTitle": "Unittest: Enhancing Mock Objects with Names in Unittest"
    }
  },
  "bammey.com": {
    "/research/polar/": {
      "date": "2026-02-07T11:08:20Z",
      "httpProtocol": "h2, tls/1.3",
      "httpStatus": 200,
      "ipAddress": "109.234.165.180",
      "ipASN": "O2switch SAS",
      "ipCountry": "France",
      "httpHeaderHash": "IYU7TCNMCZLBELZORK5ODRMRRHWWLPV4",
      "httpHeaderTechnologies": [],
      "httpHeaderUrls": [],
      "httpHeaderByteSize": 237,
      "httpBodyHash": "2LRYA23FQZ6EAFD7PGV5U7IWG5PB6SCP",
      "httpBodyTechnologies": [
        "Ruby",
        "Jekyll:4.3.3"
      ],
      "httpBodyUrls": [
        "/assets/js/hydejack-9.1.6.js",
        "/research/",
        "/research/reproducible_research/",
        "/assets/bower_components/katex/dist/katex.min.css",
        "/feed.xml",
        "/outreach/",
        "https://www.epfl.ch/",
        "/assets/img/profile.jpeg",
        "/research/polar/",
        "/assets/img/swipe.svg",
        "/assets/icomoon/style.css",
        "https://www.epfl.ch/labs/ivrl/",
        "https://fonts.googleapis.com/css?family=Fira+Code:wght@300;400;500;600;700%7CYsabeau+Infant:ital,wght@0,1;0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;0,1000;1,1;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900;1,1000\u0026display=swap",
        "/news/",
        "/students/",
        "/publications/",
        "https://fonts.gstatic.com",
        "https://github.com/qbammey",
        "/assets/icons/icon-192x192.png",
        "/teaching/",
        "/assets/img/pds.png",
        "/research/forensics/",
        "_site/assets/img/profile.jpg",
        "/assets/js/search-worker-9.1.6.js",
        "/",
        "/assets/img/ipol.png",
        "/assets/css/hydejack-9.1.6.css",
        "/assets/img/forgery_detection.png",
        "/assets/js/LEGACY-hydejack-9.1.6.js",
        "https://www.linkedin.com/in/quentin-bammey-802290173",
        "https://scholar.google.fr/citations?user=gLEhMQQAAAAJ",
        "https://www.ipol.im/",
        "https://fonts.googleapis.com",
        "#",
        "#_drawer--opened",
        "/assets/site.webmanifest",
        "/assets/icons/favicon.ico"
      ],
      "httpBodyMetaTags": {
        "description": "I invented POsitional LeARning (Polar), a novel training scheme for CNNs that implicitly reveals underlying spatial or spectral information and can highlight its inconsistencies. Positional learning has already been applied successfully to AI-generated image detection, and mosaic inconsistency detection, for image forensics.",
        "og:description": "I invented POsitional LeARning (Polar), a novel training scheme for CNNs that implicitly reveals underlying spatial or spectral information and can highlight its inconsistencies. Positional learning has already been applied successfully to AI-generated image detection, and mosaic inconsistency detection, for image forensics."
      },
      "httpBodyByteSize": 38791,
      "httpBodyPageTitle": "Positional Learning | Quentin Bammey"
    },
    "/research/reproducible_research/": {
      "date": "2026-02-07T10:08:56Z",
      "httpProtocol": "h2, tls/1.3",
      "httpStatus": 200,
      "ipAddress": "109.234.165.180",
      "ipASN": "O2switch SAS",
      "ipCountry": "France",
      "httpHeaderHash": "F4KTZKBEJC66YOJQP3YDRMUG7Z6TXHZ4",
      "httpHeaderTechnologies": [],
      "httpHeaderUrls": [],
      "httpHeaderByteSize": 247,
      "httpBodyHash": "37IABY2WAQA44KORFZA7P3PVDJSPFYTB",
      "httpBodyTechnologies": [
        "Ruby",
        "Jekyll:4.3.3"
      ],
      "httpBodyUrls": [
        "https://tomasz.matters.today",
        "https://www.inria.fr/en/soda",
        "/assets/css/hydejack-9.1.6.css",
        "https://www.epfl.ch/labs/ivrl/",
        "https://scikit-learn.fondation-inria.fr/home/",
        "/assets/js/hydejack-9.1.6.js",
        "/outreach/",
        "/publications/",
        "http://ar-ai.org/",
        "https://fonts.gstatic.com",
        "https://github.com/qbammey",
        "https://drsandor.net/",
        "https://mlbriefs.com/",
        "https://fonts.googleapis.com",
        "/assets/img/forgery_detection.png",
        "/assets/js/LEGACY-hydejack-9.1.6.js",
        "https://www.linkedin.com/in/quentin-bammey-802290173",
        "https://www.ipol.im/",
        "/assets/site.webmanifest",
        "/assets/bower_components/katex/dist/katex.min.css",
        "#",
        "https://www.epfl.ch/",
        "/assets/img/swipe.svg",
        "/assets/img/profile.jpeg",
        "https://www.lisn.upsaclay.fr/",
        "/assets/icons/icon-192x192.png",
        "https://scholar.google.fr/citations?user=gLEhMQQAAAAJ",
        "/news/",
        "#_drawer--opened",
        "/research/forensics/",
        "/assets/icomoon/style.css",
        "/assets/icons/favicon.ico",
        "/assets/js/search-worker-9.1.6.js",
        "https://www.nvidia.com/en-us/about-nvidia/#About%20Us",
        "https://fonts.googleapis.com/css?family=Fira+Code:wght@300;400;500;600;700%7CYsabeau+Infant:ital,wght@0,1;0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;0,1000;1,1;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900;1,1000\u0026display=swap",
        "/",
        "/research/polar/",
        "/assets/img/pds.png",
        "/assets/img/ipol.png",
        "https://gael-varoquaux.info/",
        "https://github.com/qbammey/ipol-local-demorunner",
        "/feed.xml",
        "/research/",
        "/teaching/",
        "/research/reproducible_research/",
        "/students/",
        "http://www.ipol.im/",
        "_site/assets/img/profile.jpg"
      ],
      "httpBodyMetaTags": {
        "description": "I am heavily invested in the IPOL (Image Processing On Line) journal and demo system for open science and reproducible research, where scientists can create online demos of existing methods and publish companion technical articles describing the implementation. In particular, I cofounded and have been organizing the IPOL MLBriefs workshop and hackhathon since its creation in April 2022.",
        "og:description": "I am heavily invested in the IPOL (Image Processing On Line) journal and demo system for open science and reproducible research, where scientists can create online demos of existing methods and publish companion technical articles describing the implementation. In particular, I cofounded and have been organizing the IPOL MLBriefs workshop and hackhathon since its creation in April 2022."
      },
      "httpBodyByteSize": 38722,
      "httpBodyPageTitle": "Reproducible research | Quentin Bammey"
    },
    "/teaching/computational_photography_2025/isp/": {
      "date": "2026-02-07T11:12:22Z",
      "httpProtocol": "h2, tls/1.3",
      "httpStatus": 200,
      "ipAddress": "109.234.165.180",
      "ipASN": "O2switch SAS",
      "ipCountry": "France",
      "httpHeaderHash": "ZDCTQKEYBRYTTAEJWCR4E2MOEXYVEJ4V",
      "httpHeaderTechnologies": [],
      "httpHeaderUrls": [],
      "httpHeaderByteSize": 237,
      "httpBodyHash": "YHAPDOXK2NDSEOCJF4Q6Q53OZS4QNSGO",
      "httpBodyTechnologies": [
        "Popper",
        "math.js",
        "Lightbox",
        "Reveal.js",
        "Clipboard.js",
        "Highlight.js",
        "Quarto:1.7.6"
      ],
      "httpBodyUrls": [
        "index_files/libs/quarto-html/tippy.css",
        "https://ipolcore.ipol.im/demo/clientApp/demo.html?id=45\u0026archive=780471",
        "index_files/libs/revealjs/dist/theme/quarto-3e9c2d153c487394578596645bad243a.css",
        "images/moire.gif",
        "index_files/libs/quarto-html/light-border.css",
        "index_files/libs/revealjs/plugin/quarto-line-highlight/line-highlight.css",
        "images/raw2rendered/cfa.png",
        "https://en.wikipedia.org/wiki/Image_processor",
        "index_files/libs/quarto-contrib/glightbox/glightbox.min.js",
        "index_files/libs/revealjs/plugin/quarto-line-highlight/line-highlight.js",
        "http://www.astropy.org/ccd-reduction-and-photometry-guide/v/dev/notebooks/00-00-Preface.html",
        "index_files/figure-revealjs/cell-5-output-1.png",
        "https://ipolcore.ipol.im/demo/clientApp/demo.html?id=274\u0026archive=780481",
        "index_files/libs/revealjs/dist/reset.css",
        "index_files/libs/quarto-contrib/glightbox/glightbox.min.css",
        "index_files/libs/revealjs/dist/reveal.js",
        "images/raw2rendered/dsnu.png",
        "https://ipolcore.ipol.im/demo/clientApp/demo.html?id=22\u0026archive=780466",
        "https://ipolcore.ipol.im/demo/clientApp/demo.html?id=358\u0026archive=780480",
        "images/ha_demosaic.png",
        "https://www.ipol.im/pub/art/2011/bcms-ssdd/",
        "index_files/libs/revealjs/plugin/notes/notes.js",
        "index_files/figure-revealjs/cell-4-output-1.png",
        "raw-to-rendered.html",
        "https://en.wikipedia.org/wiki/Aliasing",
        "index_files/libs/revealjs/plugin/reveal-menu/menu.css",
        "https://ipolcore.ipol.im/demo/clientApp/demo.html?id=65\u0026archive=780472",
        "#tabset-1-1",
        "images/mosaiced_zoom.png",
        "index_files/libs/quarto-contrib/glightbox/lightbox.css",
        "index_files/libs/revealjs/plugin/quarto-support/footer.css",
        "https://ipolcore.ipol.im/demo/clientApp/demo.html?id=45\u0026archive=780470",
        "https://en.wikipedia.org/wiki/Color_filter_array#List_of_color_filter_arrays",
        "https://en.wikipedia.org/wiki/Moir%C3%A9_pattern",
        "index_files/libs/revealjs/plugin/pdf-export/pdfexport.js",
        "index_files/libs/quarto-html/tabby.min.js",
        "index_files/libs/revealjs/dist/reveal.css",
        "index_files/libs/clipboard/clipboard.min.js",
        "index_files/libs/quarto-html/tippy.umd.min.js",
        "index_files/figure-revealjs/cell-3-output-1.png",
        "index_files/libs/quarto-contrib/nutshell-1.0.7/nutshell.js",
        "https://www.teledynevisionsolutions.com/learn/learning-center/imaging-fundamentals/pattern-noise-dsnu-and-prnu/",
        "images/demosaiced.png",
        "index_files/libs/revealjs/plugin/math/math.js",
        "index_files/libs/revealjs/plugin/zoom/zoom.js",
        "index_files/libs/revealjs/plugin/reveal-menu/menu.js",
        "index_files/libs/revealjs/plugin/reveal-menu/quarto-menu.css",
        "#tabset-1-2",
        "images/oecf.png",
        "index_files/libs/quarto-html/popper.min.js",
        "index_files/figure-revealjs/cell-7-output-1.png",
        "index_files/libs/revealjs/plugin/search/search.js",
        "index_files/libs/revealjs/plugin/reveal-menu/quarto-menu.js",
        "index_files/libs/quarto-contrib/nutshell-1.0.7/nutshell_options.js",
        "images/mosaiced.png",
        "index_files/figure-revealjs/cell-6-output-1.png",
        "index_files/libs/revealjs/plugin/quarto-support/support.js",
        "index_files/libs/quarto-html/quarto-syntax-highlighting-dark-d0a9048d95e02c7ff9c82715fd5ddea4.css"
      ],
      "httpBodyMetaTags": {},
      "httpBodyByteSize": 48244,
      "httpBodyPageTitle": "Computational Photography: Image Signal Processor I"
    }
  }
}