{"title":"Blacklight Inspection","page_title":"Ruan Bekker's Blog","uri_ins":"http://ruan.dev/","uri_dest":"https://ruan.dev/","uri_redirects":["http://ruan.dev/"],"secure_connection":{},"host":"ruan.dev","config":{"emulateDevice":{"name":"iPhone 14 Pro Max","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1","viewport":{"width":430,"height":739,"deviceScaleFactor":3,"isMobile":true,"hasTouch":true,"isLandscape":false}},"cleareCache":true,"captureHar":true,"captureLinks":false,"enableAdBlock":false,"saveBrowserProfile":false,"numPages":2,"defaultTimeout":35000,"defaultWaitUntil":"networkidle2","headless":true,"headers":{},"extraChromiumArgs":["--disable-features=TrackingProtection3pcd","--website-analysis-scan=9e235c39-9501-4b2e-bfd6-9285279e6f4f"],"extraPuppeteerOptions":{}},"browser":{"name":"Chromium","version":"Chrome/127.0.6533.88","user_agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/127.0.0.0 Safari/537.36","platform":{"name":"Linux","version":"4.4.302+"}},"script":{"host":"f55531b6c604","version":{"npm":"3.11.0","commit":"dev"},"node_version":"v24.20.0"},"start_time":"2026-09-11T05:18:16.632Z","end_time":"2026-09-11T05:18:38.955Z","browsing_history":["https://ruan.dev/","https://ruan.dev/tags/qa","https://ruan.dev/tags/python"],"hosts":{"requests":{"first_party":["ruan.dev","umami-analytics.ruan.dev"],"third_party":["cdn.carbonads.com","analytics.umami.is","www.googletagmanager.com","srv.carbonads.net","cloud.umami.is","region1.google-analytics.com"]}},"reports":{"behaviour_event_listeners":{"KEYBOARD":{"https://ruan.dev/_next/static/chunks/app/layout-ccce6f197a5b4252.js":["keydown"],"https://ruan.dev/_next/static/chunks/fd9d1056-45c1d1d33afce4a4.js":["keyup","keypress","keydown","input"]},"MOUSE":{"https://ruan.dev/_next/static/chunks/fd9d1056-45c1d1d33afce4a4.js":["dblclick","scroll","mouseup","mousemove","mousedown","click"]},"TOUCH":{"https://ruan.dev/_next/static/chunks/fd9d1056-45c1d1d33afce4a4.js":["touchmove","touchstart","touchend","touchcancel"]}},"canvas_fingerprinters":{"data_url":{},"fingerprinters":[],"styles":{},"texts":{}},"canvas_font_fingerprinters":{"canvas_font":{},"text_measure":{}},"cookies":[{"name":"_ga_GBW0KS3BZH","value":"GS2.1.s1789103915$o1$g0$t1789103915$j60$l0$h0","domain":"ruan.dev","path":"/","expires":"2027-10-16T05:18:35.298Z","size":59,"httpOnly":false,"secure":false,"session":false,"priority":"Medium","sameParty":false,"sourceScheme":"Secure","sourcePort":443,"type":"js","third_party":false},{"name":"_ga","value":"GA1.1.316687776.1789103915","domain":"ruan.dev","path":"/","expires":"2027-10-16T05:18:35.300Z","size":29,"httpOnly":false,"secure":false,"session":false,"priority":"Medium","sameParty":false,"sourceScheme":"Secure","sourcePort":443,"type":"js","third_party":false}],"fb_pixel_events":[],"tiktok_pixel_events":[],"twitter_pixel_events":[],"google_analytics_events":[],"key_logging":{},"session_recorders":{},"third_party_trackers":[{"data":{"body":{},"filter":"||google-analytics.com^$third-party","listName":"easyprivacy.txt","query":{"_ee":1,"_eu":"EA","_fv":1,"_nsi":1,"_p":1789103915137,"_s":1,"_ss":1,"are":1,"cid":316687776.1789104,"dl":"https://ruan.dev/tags/python","dma":1,"dma_cps":"a","dt":"python | Ruan Bekker's Blog","en":"page_view","frm":0,"gcd":"13l3l3l2l1l1","gtm":"45je6992v9110505163za200zd9110505163","ir":1,"ngs":1,"npa":1,"pscdl":"","rcb":4,"sct":1,"seg":0,"sid":1789103915,"sr":"430x739","tag_exp":"115938466~115938469~118897920~118897930~120213116~120385423~120469145~120469153","tfd":1937,"tid":"G-GBW0KS3BZH","uaa":"","uab":"","uafvl":"","uam":"","uamb":0,"uap":"","uapv":"","uaw":0,"ul":"en-us","v":2}},"stack":[{"fileName":"https://ruan.dev/tags/python","source":"ThirdPartyTracker RequestHandler"}],"type":"TrackingRequest","url":"https://region1.google-analytics.com/g/collect?v=2&tid=G-GBW0KS3BZH&gtm=45je6992v9110505163za200zd9110505163&_p=1789103915137&gcd=13l3l3l2l1l1&npa=1&dma_cps=a&dma=1&_eu=EA&are=1&cid=316687776.1789103915&frm=0&ir=1&ngs=1&pscdl=&rcb=4&sr=430x739&uaa=&uab=&uafvl=&uam=&uamb=0&uap=&uapv=&uaw=0&ul=en-us&_s=1&tag_exp=115938466~115938469~118897920~118897930~120213116~120385423~120469145~120469153&sid=1789103915&sct=1&seg=0&dl=https%3A%2F%2Fruan.dev%2Ftags%2Fpython&dt=python%20%7C%20Ruan%20Bekker%27s%20Blog&en=page_view&_fv=1&_nsi=1&_ss=1&_ee=1&tfd=1937"},{"data":{"body":{},"filter":"||googletagmanager.com^","listName":"easyprivacy.txt","query":{"id":"G-GBW0KS3BZH"}},"stack":[{"fileName":"https://ruan.dev/tags/python","source":"ThirdPartyTracker RequestHandler"}],"type":"TrackingRequest","url":"https://www.googletagmanager.com/gtag/js?id=G-GBW0KS3BZH"},{"data":{"body":{},"filter":"||carbonads.com^","listName":"easylist.txt","query":{"placement":"blogruanbekkercom","serve":"CEAIP2JL"}},"stack":[{"fileName":"https://ruan.dev/tags/python","source":"ThirdPartyTracker RequestHandler"}],"type":"TrackingRequest","url":"https://cdn.carbonads.com/carbon.js?serve=CEAIP2JL&placement=blogruanbekkercom"},{"data":{"body":{},"filter":"||google-analytics.com^$third-party","listName":"easyprivacy.txt","query":{"_ee":1,"_eu":"EA","_fv":1,"_nsi":1,"_p":1789103908337,"_s":1,"_ss":1,"are":1,"cid":1151060763.1789105,"dl":"https://ruan.dev/tags/qa","dma":1,"dma_cps":"a","dt":"qa | Ruan Bekker's Blog","en":"page_view","frm":0,"gcd":"13l3l3l2l1l1","gtm":"45je6992v9110505163za208zd9110505163","ir":1,"ngs":1,"npa":1,"pscdl":"","rcb":9,"sct":1,"seg":0,"sid":1789103908,"sr":"430x739","tag_exp":"115938465~115938468~118897920~118897930~119793973~120213116~120385422~120469145~120469153~120591197","tfd":1179,"tid":"G-GBW0KS3BZH","uaa":"","uab":"","uafvl":"","uam":"","uamb":0,"uap":"","uapv":"","uaw":0,"ul":"en-us","v":2}},"stack":[{"fileName":"https://ruan.dev/tags/qa","source":"ThirdPartyTracker RequestHandler"}],"type":"TrackingRequest","url":"https://region1.google-analytics.com/g/collect?v=2&tid=G-GBW0KS3BZH&gtm=45je6992v9110505163za208zd9110505163&_p=1789103908337&gcd=13l3l3l2l1l1&npa=1&dma_cps=a&dma=1&_eu=EA&are=1&cid=1151060763.1789103909&frm=0&ir=1&ngs=1&pscdl=&rcb=9&sr=430x739&uaa=&uab=&uafvl=&uam=&uamb=0&uap=&uapv=&uaw=0&ul=en-us&_s=1&tag_exp=115938465~115938468~118897920~118897930~119793973~120213116~120385422~120469145~120469153~120591197&sid=1789103908&sct=1&seg=0&dl=https%3A%2F%2Fruan.dev%2Ftags%2Fqa&dt=qa%20%7C%20Ruan%20Bekker%27s%20Blog&en=page_view&_fv=1&_nsi=1&_ss=1&_ee=1&tfd=1179"},{"data":{"body":{},"filter":"||googletagmanager.com^","listName":"easyprivacy.txt","query":{"id":"G-GBW0KS3BZH"}},"stack":[{"fileName":"https://ruan.dev/tags/qa","source":"ThirdPartyTracker RequestHandler"}],"type":"TrackingRequest","url":"https://www.googletagmanager.com/gtag/js?id=G-GBW0KS3BZH"},{"data":{"body":{},"filter":"||carbonads.com^","listName":"easylist.txt","query":{"placement":"blogruanbekkercom","serve":"CEAIP2JL"}},"stack":[{"fileName":"https://ruan.dev/tags/qa","source":"ThirdPartyTracker RequestHandler"}],"type":"TrackingRequest","url":"https://cdn.carbonads.com/carbon.js?serve=CEAIP2JL&placement=blogruanbekkercom"},{"data":{"body":{},"filter":"||google-analytics.com^$third-party","listName":"easyprivacy.txt","query":{"_ee":1,"_eu":"EA","_fv":1,"_nsi":1,"_p":1789103903251,"_s":1,"_ss":1,"are":1,"cid":365752866.1789104,"dl":"https://ruan.dev/","dma":1,"dma_cps":"a","dt":"Ruan Bekker's Blog","en":"page_view","frm":0,"gcd":"13l3l3l2l1l1","gtm":"45je69a0h2v9110505163za200zd9110505163","ir":1,"ngs":1,"npa":1,"pscdl":"","rcb":9,"sct":1,"seg":0,"sid":1789103903,"sr":"430x739","tag_exp":"115938465~115938468~118897920~118897930~120213116~120385422~120469145~120469153","tfd":1366,"tid":"G-GBW0KS3BZH","uaa":"","uab":"","uafvl":"","uam":"","uamb":0,"uap":"","uapv":"","uaw":0,"ul":"en-us","v":2}},"stack":[{"fileName":"https://ruan.dev/","source":"ThirdPartyTracker RequestHandler"}],"type":"TrackingRequest","url":"https://region1.google-analytics.com/g/collect?v=2&tid=G-GBW0KS3BZH&gtm=45je69a0h2v9110505163za200zd9110505163&_p=1789103903251&gcd=13l3l3l2l1l1&npa=1&dma_cps=a&dma=1&_eu=EA&are=1&cid=365752866.1789103904&frm=0&ir=1&ngs=1&pscdl=&rcb=9&sr=430x739&uaa=&uab=&uafvl=&uam=&uamb=0&uap=&uapv=&uaw=0&ul=en-us&_s=1&tag_exp=115938465~115938468~118897920~118897930~120213116~120385422~120469145~120469153&sid=1789103903&sct=1&seg=0&dl=https%3A%2F%2Fruan.dev%2F&dt=Ruan%20Bekker%27s%20Blog&en=page_view&_fv=1&_nsi=1&_ss=1&_ee=1&tfd=1366"},{"data":{"body":{},"filter":"||googletagmanager.com^","listName":"easyprivacy.txt","query":{"id":"G-GBW0KS3BZH"}},"stack":[{"fileName":"https://ruan.dev/","source":"ThirdPartyTracker RequestHandler"}],"type":"TrackingRequest","url":"https://www.googletagmanager.com/gtag/js?id=G-GBW0KS3BZH"},{"data":{"body":{},"filter":"||carbonads.com^","listName":"easylist.txt","query":{"placement":"blogruanbekkercom","serve":"CEAIP2JL"}},"stack":[{"fileName":"https://ruan.dev/","source":"ThirdPartyTracker RequestHandler"}],"type":"TrackingRequest","url":"https://cdn.carbonads.com/carbon.js?serve=CEAIP2JL&placement=blogruanbekkercom"}]}}