{"title":"Blacklight Inspection","page_title":"Mark Campbell - Elixir and Ruby Enthusiast","uri_ins":"http://www.markcampbell.me/","uri_dest":"https://www.markcampbell.me/","uri_redirects":["http://www.markcampbell.me/"],"secure_connection":{},"host":"www.markcampbell.me","config":{"emulateDevice":{"name":"iPhone 12 Pro","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Mobile/15E148 Safari/604.1","viewport":{"width":390,"height":844,"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=47db6a51-ec78-4912-9a2e-b41d9cb6b341"],"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-13T17:23:13.483Z","end_time":"2026-09-13T17:23:30.483Z","browsing_history":["https://www.markcampbell.me/","https://www.markcampbell.me/2016/04/18/decoding-the-ruby-on-rails-signed-session-cookie.html","https://www.markcampbell.me/tutorial/2014/05/12/using-airbrake-with-rake-and-not-rails.html"],"hosts":{"requests":{"first_party":["www.markcampbell.me"],"third_party":["www.google-analytics.com","www.googletagmanager.com","region1.google-analytics.com"]}},"reports":{"behaviour_event_listeners":{},"canvas_fingerprinters":{"data_url":{},"fingerprinters":[],"styles":{},"texts":{}},"canvas_font_fingerprinters":{"canvas_font":{},"text_measure":{}},"cookies":[{"name":"_ga","value":"GA1.2.418931985.1789320207","domain":"markcampbell.me","path":"/","expires":"2027-10-18T17:23:26.759Z","size":29,"httpOnly":false,"secure":false,"session":false,"priority":"Medium","sameParty":false,"sourceScheme":"Secure","sourcePort":443,"type":"js","third_party":false},{"name":"_gid","value":"GA1.2.919703183.1789320207","domain":"markcampbell.me","path":"/","expires":"2026-09-14T17:23:26.000Z","size":30,"httpOnly":false,"secure":false,"session":false,"priority":"Medium","sameParty":false,"sourceScheme":"Secure","sourcePort":443,"type":"js","third_party":false},{"name":"_gat","value":"1","domain":"markcampbell.me","path":"/","expires":"2026-09-13T17:24:26.000Z","size":5,"httpOnly":false,"secure":false,"session":false,"priority":"Medium","sameParty":false,"sourceScheme":"Secure","sourcePort":443,"type":"js","third_party":false},{"name":"_ga_GECFLYKFHQ","value":"GS2.2.s1789320207$o1$g0$t1789320207$j60$l0$h0","domain":"markcampbell.me","path":"/","expires":"2027-10-18T17:23:27.232Z","size":59,"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":"EBAI","_fv":1,"_p":1789320207033,"_s":1,"_ss":1,"are":1,"cid":418931985.178932,"dl":"https://www.markcampbell.me/tutorial/2014/05/12/using-airbrake-with-rake-and-not-rails.html","dma":1,"dma_cps":"a","dt":"Using Airbrake with Rake and not Rails","en":"page_view","frm":0,"gcd":"13l3l3l2l2l1","gtm":"45je6992h1v9124923821za20g","ir":1,"ngs":1,"npa":0,"pscdl":"","rcb":4,"sct":1,"seg":0,"sid":1789320207,"sr":"390x844","tag_exp":"115938466~115938469~118897920~118897930~120213116~120385422~120469145~120469153","tfd":773,"tid":"G-GECFLYKFHQ","uaa":"","uab":"","uafvl":"","uam":"","uamb":0,"uap":"","uapv":"","uaw":0,"ul":"en-us","v":2}},"stack":[{"fileName":"https://www.markcampbell.me/tutorial/2014/05/12/using-airbrake-with-rake-and-not-rails.html","source":"ThirdPartyTracker RequestHandler"}],"type":"TrackingRequest","url":"https://region1.google-analytics.com/g/collect?v=2&tid=G-GECFLYKFHQ&gtm=45je6992h1v9124923821za20g&_p=1789320207033&gcd=13l3l3l2l2l1&npa=0&dma_cps=a&dma=1&_eu=EBAI&are=1&cid=418931985.1789320207&frm=0&ir=1&ngs=1&pscdl=&rcb=4&sr=390x844&uaa=&uab=&uafvl=&uam=&uamb=0&uap=&uapv=&uaw=0&ul=en-us&_s=1&tag_exp=115938466~115938469~118897920~118897930~120213116~120385422~120469145~120469153&dl=https%3A%2F%2Fwww.markcampbell.me%2Ftutorial%2F2014%2F05%2F12%2Fusing-airbrake-with-rake-and-not-rails.html&dt=Using%20Airbrake%20with%20Rake%20and%20not%20Rails&sid=1789320207&sct=1&seg=0&en=page_view&_fv=1&_ss=1&_ee=1&tfd=773"},{"data":{"body":{},"filter":"||googletagmanager.com^","listName":"easyprivacy.txt","query":{"_slc":1,"cx":"c","id":"G-GECFLYKFHQ"}},"stack":[{"fileName":"https://www.markcampbell.me/tutorial/2014/05/12/using-airbrake-with-rake-and-not-rails.html","source":"ThirdPartyTracker RequestHandler"}],"type":"TrackingRequest","url":"https://www.googletagmanager.com/gtag/js?id=G-GECFLYKFHQ&cx=c&_slc=1"},{"data":{"body":{},"filter":"||google-analytics.com^$third-party","listName":"easyprivacy.txt","query":{"_gid":919703183.1789321,"_r":1,"_s":1,"_slc":1,"_u":"IEBAAAABAAAAACAAI~","_v":"j102","a":1670313883,"cid":418931985.178932,"dl":"https://www.markcampbell.me/tutorial/2014/05/12/using-airbrake-with-rake-and-not-rails.html","dt":"Using Airbrake with Rake and not Rails","gjid":1118843587,"jid":1085312043,"sr":"390x844","t":"pageview","tid":"UA-41059130-1","ul":"en-us","v":1,"vp":"390x844","z":913426690}},"stack":[{"fileName":"https://www.markcampbell.me/tutorial/2014/05/12/using-airbrake-with-rake-and-not-rails.html","source":"ThirdPartyTracker RequestHandler"}],"type":"TrackingRequest","url":"https://www.google-analytics.com/j/collect?v=1&_v=j102&a=1670313883&t=pageview&_s=1&dl=https%3A%2F%2Fwww.markcampbell.me%2Ftutorial%2F2014%2F05%2F12%2Fusing-airbrake-with-rake-and-not-rails.html&ul=en-us&dt=Using%20Airbrake%20with%20Rake%20and%20not%20Rails&sr=390x844&vp=390x844&_u=IEBAAAABAAAAACAAI~&jid=1085312043&gjid=1118843587&cid=418931985.1789320207&tid=UA-41059130-1&_gid=919703183.1789320207&_r=1&_slc=1&z=913426690"},{"data":{"body":{},"filter":"||google-analytics.com^$third-party","listName":"easyprivacy.txt","query":{}},"stack":[{"fileName":"https://www.markcampbell.me/tutorial/2014/05/12/using-airbrake-with-rake-and-not-rails.html","source":"ThirdPartyTracker RequestHandler"}],"type":"TrackingRequest","url":"https://www.google-analytics.com/analytics.js"},{"data":{"body":{},"filter":"||google-analytics.com^$third-party","listName":"easyprivacy.txt","query":{"_ee":1,"_eu":"EBAI","_fv":1,"_p":1789320202947,"_s":1,"_ss":1,"are":1,"cid":983236034.1789321,"dl":"https://www.markcampbell.me/2016/04/18/decoding-the-ruby-on-rails-signed-session-cookie.html","dma":1,"dma_cps":"a","dt":"Decoding the Ruby on Rails signed session cookie","en":"page_view","frm":0,"gcd":"13l3l3l2l2l1","gtm":"45je6992h1v9124923821za20g","ir":1,"ngs":1,"npa":0,"pscdl":"","rcb":9,"sct":1,"seg":0,"sid":1789320203,"sr":"390x844","tag_exp":"115938465~115938469~118897920~118897930~120213116~120385423~120469145~120469153","tfd":774,"tid":"G-GECFLYKFHQ","uaa":"","uab":"","uafvl":"","uam":"","uamb":0,"uap":"","uapv":"","uaw":0,"ul":"en-us","v":2}},"stack":[{"fileName":"https://www.markcampbell.me/2016/04/18/decoding-the-ruby-on-rails-signed-session-cookie.html","source":"ThirdPartyTracker RequestHandler"}],"type":"TrackingRequest","url":"https://region1.google-analytics.com/g/collect?v=2&tid=G-GECFLYKFHQ&gtm=45je6992h1v9124923821za20g&_p=1789320202947&gcd=13l3l3l2l2l1&npa=0&dma_cps=a&dma=1&_eu=EBAI&are=1&cid=983236034.1789320203&frm=0&ir=1&ngs=1&pscdl=&rcb=9&sr=390x844&uaa=&uab=&uafvl=&uam=&uamb=0&uap=&uapv=&uaw=0&ul=en-us&_s=1&tag_exp=115938465~115938469~118897920~118897930~120213116~120385423~120469145~120469153&dl=https%3A%2F%2Fwww.markcampbell.me%2F2016%2F04%2F18%2Fdecoding-the-ruby-on-rails-signed-session-cookie.html&dt=Decoding%20the%20Ruby%20on%20Rails%20signed%20session%20cookie&sid=1789320203&sct=1&seg=0&en=page_view&_fv=1&_ss=1&_ee=1&tfd=774"},{"data":{"body":{},"filter":"||googletagmanager.com^","listName":"easyprivacy.txt","query":{"_slc":1,"cx":"c","id":"G-GECFLYKFHQ"}},"stack":[{"fileName":"https://www.markcampbell.me/2016/04/18/decoding-the-ruby-on-rails-signed-session-cookie.html","source":"ThirdPartyTracker RequestHandler"}],"type":"TrackingRequest","url":"https://www.googletagmanager.com/gtag/js?id=G-GECFLYKFHQ&cx=c&_slc=1"},{"data":{"body":{},"filter":"||google-analytics.com^$third-party","listName":"easyprivacy.txt","query":{"_gid":274555502.178932,"_r":1,"_s":1,"_slc":1,"_u":"IEBAAAABAAAAACAAI~","_v":"j102","a":2076887201,"cid":983236034.1789321,"dl":"https://www.markcampbell.me/2016/04/18/decoding-the-ruby-on-rails-signed-session-cookie.html","dt":"Decoding the Ruby on Rails signed session cookie","gjid":1935046067,"jid":1364333417,"sr":"390x844","t":"pageview","tid":"UA-41059130-1","ul":"en-us","v":1,"vp":"390x844","z":1594958196}},"stack":[{"fileName":"https://www.markcampbell.me/2016/04/18/decoding-the-ruby-on-rails-signed-session-cookie.html","source":"ThirdPartyTracker RequestHandler"}],"type":"TrackingRequest","url":"https://www.google-analytics.com/j/collect?v=1&_v=j102&a=2076887201&t=pageview&_s=1&dl=https%3A%2F%2Fwww.markcampbell.me%2F2016%2F04%2F18%2Fdecoding-the-ruby-on-rails-signed-session-cookie.html&ul=en-us&dt=Decoding%20the%20Ruby%20on%20Rails%20signed%20session%20cookie&sr=390x844&vp=390x844&_u=IEBAAAABAAAAACAAI~&jid=1364333417&gjid=1935046067&cid=983236034.1789320203&tid=UA-41059130-1&_gid=274555502.1789320203&_r=1&_slc=1&z=1594958196"},{"data":{"body":{},"filter":"||google-analytics.com^$third-party","listName":"easyprivacy.txt","query":{}},"stack":[{"fileName":"https://www.markcampbell.me/2016/04/18/decoding-the-ruby-on-rails-signed-session-cookie.html","source":"ThirdPartyTracker RequestHandler"}],"type":"TrackingRequest","url":"https://www.google-analytics.com/analytics.js"},{"data":{"body":{},"filter":"||google-analytics.com^$third-party","listName":"easyprivacy.txt","query":{"_ee":1,"_eu":"EBAI","_fv":1,"_p":1789320199987,"_s":1,"_ss":1,"are":1,"cid":294722401.178932,"dl":"https://www.markcampbell.me/","dma":1,"dma_cps":"a","dt":"Mark Campbell - Elixir and Ruby Enthusiast","en":"page_view","frm":0,"gcd":"13l3l3l2l2l1","gtm":"45je6992v9124923821za20g","ir":1,"ngs":1,"npa":0,"pscdl":"","rcb":10,"sct":1,"seg":0,"sid":1789320200,"sr":"390x844","tag_exp":"115938465~115938468~118897920~118897930~120213116~120385423~120469145~120469153","tfd":1264,"tid":"G-GECFLYKFHQ","uaa":"","uab":"","uafvl":"","uam":"","uamb":0,"uap":"","uapv":"","uaw":0,"ul":"en-us","v":2}},"stack":[{"fileName":"https://www.markcampbell.me/","source":"ThirdPartyTracker RequestHandler"}],"type":"TrackingRequest","url":"https://region1.google-analytics.com/g/collect?v=2&tid=G-GECFLYKFHQ&gtm=45je6992v9124923821za20g&_p=1789320199987&gcd=13l3l3l2l2l1&npa=0&dma_cps=a&dma=1&_eu=EBAI&are=1&cid=294722401.1789320200&frm=0&ir=1&ngs=1&pscdl=&rcb=10&sr=390x844&uaa=&uab=&uafvl=&uam=&uamb=0&uap=&uapv=&uaw=0&ul=en-us&_s=1&tag_exp=115938465~115938468~118897920~118897930~120213116~120385423~120469145~120469153&dl=https%3A%2F%2Fwww.markcampbell.me%2F&dt=Mark%20Campbell%20-%20Elixir%20and%20Ruby%20Enthusiast&sid=1789320200&sct=1&seg=0&en=page_view&_fv=1&_ss=1&_ee=1&tfd=1264"},{"data":{"body":{},"filter":"||googletagmanager.com^","listName":"easyprivacy.txt","query":{"_slc":1,"cx":"c","id":"G-GECFLYKFHQ"}},"stack":[{"fileName":"https://www.markcampbell.me/","source":"ThirdPartyTracker RequestHandler"}],"type":"TrackingRequest","url":"https://www.googletagmanager.com/gtag/js?id=G-GECFLYKFHQ&cx=c&_slc=1"},{"data":{"body":{},"filter":"||google-analytics.com^$third-party","listName":"easyprivacy.txt","query":{"_gid":283897774.178932,"_r":1,"_s":1,"_slc":1,"_u":"IEBAAAABAAAAACAAI~","_v":"j102","a":534388029,"cid":294722401.178932,"dl":"https://www.markcampbell.me/","dt":"Mark Campbell - Elixir and Ruby Enthusiast","gjid":751522793,"jid":1200232344,"sr":"390x844","t":"pageview","tid":"UA-41059130-1","ul":"en-us","v":1,"vp":"390x844","z":1519544682}},"stack":[{"fileName":"https://www.markcampbell.me/","source":"ThirdPartyTracker RequestHandler"}],"type":"TrackingRequest","url":"https://www.google-analytics.com/j/collect?v=1&_v=j102&a=534388029&t=pageview&_s=1&dl=https%3A%2F%2Fwww.markcampbell.me%2F&ul=en-us&dt=Mark%20Campbell%20-%20Elixir%20and%20Ruby%20Enthusiast&sr=390x844&vp=390x844&_u=IEBAAAABAAAAACAAI~&jid=1200232344&gjid=751522793&cid=294722401.1789320200&tid=UA-41059130-1&_gid=283897774.1789320200&_r=1&_slc=1&z=1519544682"},{"data":{"body":{},"filter":"||google-analytics.com^$third-party","listName":"easyprivacy.txt","query":{}},"stack":[{"fileName":"https://www.markcampbell.me/","source":"ThirdPartyTracker RequestHandler"}],"type":"TrackingRequest","url":"https://www.google-analytics.com/analytics.js"}]}}