{"id":515,"date":"2020-01-23T00:45:32","date_gmt":"2020-01-23T00:45:32","guid":{"rendered":"https:\/\/stuff.tamius.net\/sacred-texts\/?p=515"},"modified":"2020-01-23T00:45:34","modified_gmt":"2020-01-23T00:45:34","slug":"revising-the-spectacle-hack-fix","status":"publish","type":"post","link":"https:\/\/stuff.tamius.net\/sacred-texts\/2020\/01\/23\/revising-the-spectacle-hack-fix\/","title":{"rendered":"Revising the spectacle hack-fix"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Not too long ago I talked about <a href=\"https:\/\/stuff.tamius.net\/sacred-texts\/wp-admin\/post.php?post=467&amp;action=edit\">my quick and dirty workaround for KDE&#8217;s screenshot capture utility being &#8230; less useful than I&#8217;d like<\/a> thanks to a(n upstream) Qt bug.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To recap: <\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>When you try to capture rectangular region of the screen, Spectacle (said screenshot utility) will freeze the entire desktop and allow you to draw a square<\/li><li>If you&#8217;re running a multi-monitor setup with high PPI monitor(s) under Xorg, the image of your frozen desktop will be moved partly off-screen.<\/li><li>This means that you will not be able to see or select a certain portion of the screen<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">My solution amounted to a few console commands bashed together that move the frozen desktop frame back where it&#8217;s supposed to be.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This has downsides. For example, the issue only gets fixed when you trigger screen capture with a keyboard shortcut. If you tell Spectacle to capture a screenshot after a timeout, the issue won&#8217;t get fixed. It&#8217;s also not guaranteed to work if you have multiple Spectacle windows already open from previous screen captures.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That&#8217;s not good enough.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What about fixing the problem at the source?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">From this point forward, there are roughly two options. I can try to use Xlib (with which I had <a href=\"https:\/\/stuff.tamius.net\/sacred-texts\/2019\/11\/24\/reimplementing-touchpad-gliding-the-pleb-way-the-first-attempt\/\">a very brief encounter<\/a> some time ago) and watch for new Windows getting launched, or I can do the right way and fix Spectacle. After all, we are talking about open source software.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Thus I go ahead and clone Spectacle&#8217;s <a href=\"https:\/\/github.com\/KDE\/spectacle\">github repo<\/a>. I start looking at the code and notice the first problem: it&#8217;s written in C++. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I&#8217;m doing javascript\/typescript by the day, bash on a very odd weekend, python if I <em>really<\/em> have to. C# has been sitting on a shelf since my diploma, Java for longer (though it&#8217;s getting dusted off lately). C is a faded memory from like three classes in entire university. Obviously advanced C is the last program language I&#8217;d prefer to use.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Still, I dig through the code, trying to find if there&#8217;s any place I can see that sets the spawn position of the frozen frame. One and a half hour later, I just give up. It&#8217;s time for Xlib. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">X gon give it to ya<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">After giving up on Spectacle, I go back to whipping up my dirty hacks. I start shopping for functions that I want and incorporate them into my program. Eventually, I&#8217;m far enough to do a test compile. This is where I get to witness this bullshit.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2020\/01\/image-5.png\" alt=\"\" class=\"wp-image-518\" width=\"1756\" height=\"369\" srcset=\"https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2020\/01\/image-5.png 1756w, https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2020\/01\/image-5-300x63.png 300w, https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2020\/01\/image-5-1024x215.png 1024w, https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2020\/01\/image-5-768x161.png 768w, https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2020\/01\/image-5-1536x323.png 1536w, https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2020\/01\/image-5-1200x252.png 1200w\" sizes=\"auto, (max-width: 1756px) 100vw, 1756px\" \/><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">We are witnessing a missing import. The question on the table is which. As we start looking for an answer, we run into another problem: C and Xorg were both designed <em>before<\/em> stackoverflow existed.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">They were designed in a time where people assumed people will actually read the _entire_ documentation before trying to write their first &#8220;hello world&#8221; thing. The &#8220;you need to import this file&#8221; will be hidden as an offhand mention in one of the two tutorials you were linked to kick things off (and it&#8217;s always gonna only be in the tutorial you didn&#8217;t check), and then never again.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you&#8217;re doing your function-shopping on stackoverflow code or by browsing the list of functions on websites that are basically manpages but with links, you <em>will<\/em> miss that. Documentation and manpages for functions will treat the necessary import as if it were a recipe for coca-cola.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It&#8217;s <code>X11\/Xutil.h<\/code>. Is it really that hard to put on a manpage, or am I just missing something because I have literally no experience?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Anyway, back to track. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The program is set to log window titles, which it does &#8230; Except the values aren&#8217;t quite what we&#8217;d want. We expect to see &#8220;Spectacle&#8221; appear (and nothing else) \u2014 but nothing of the sort pops up:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2020\/01\/image-8.png\" alt=\"\" class=\"wp-image-521\" width=\"880\" height=\"457\" srcset=\"https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2020\/01\/image-8.png 880w, https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2020\/01\/image-8-300x156.png 300w, https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2020\/01\/image-8-768x399.png 768w\" sizes=\"auto, (max-width: 880px) 100vw, 880px\" \/><figcaption><br><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">What gives? There&#8217;s two thing, actually. One: we&#8217;re requesting &#8220;WM_NAME&#8221; property, when we really want &#8220;_NET_WM_NAME.&#8221; Second: we&#8217;re requesting CreateNotify events, but Qt may be changing titles (and geometry) <em>after<\/em> creating windows. This means we need to catch ConfigureNotify events as well.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">When we listen for ConfigureNotify events as well, we finally get what we want:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2020\/01\/image-11.png\" alt=\"\" class=\"wp-image-524\" width=\"1106\" height=\"371\" srcset=\"https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2020\/01\/image-11.png 1106w, https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2020\/01\/image-11-300x101.png 300w, https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2020\/01\/image-11-1024x343.png 1024w, https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2020\/01\/image-11-768x258.png 768w\" sizes=\"auto, (max-width: 1106px) 100vw, 1106px\" \/><figcaption>When we log _NET_WM_TITLE and WM_TITLE during the process of taking a screenshot, we can clearly see that title &#8216;Spectacle&#8217; doesn&#8217;t get set immediately after window creation.<\/figcaption><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">The hard part seems to be over now. All we need is another strcmp to compare _NET_WM_TITLE with  and XMoveWindow, both pretty straightforward. (And we can&#8217;t forget to set up an error handler, because BadWindow will happen every now and then. We can ignore this error). <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Now let&#8217;s try to figure if this hack can work with vlc and smplayer as well &#8230;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">(Code is available on <a href=\"https:\/\/github.com\/tamius-han\/ghetto-spectacle-offset-fix\">github<\/a>)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Not too long ago I talked about my quick and dirty workaround for KDE&#8217;s screenshot capture utility being &#8230; less useful than I&#8217;d like thanks to a(n upstream) Qt bug. To recap: When you try to capture rectangular region of the screen, Spectacle (said screenshot utility) will freeze the entire desktop and allow you to draw a square If you&#8217;re running a multi-monitor setup<span class=\"more-dots\">&#8230;<\/span> <span class=\"more-tag d-block mt-05\"><a class=\"more-link\" href=\"https:\/\/stuff.tamius.net\/sacred-texts\/2020\/01\/23\/revising-the-spectacle-hack-fix\/\">Continue Reading...<span class=\"screen-reader-text\"> \"Revising the spectacle hack-fix\"<\/span><\/a><\/span><!-- .more-tag --><\/p>\n","protected":false},"author":1,"featured_media":328,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"pgc_sgb_lightbox_settings":"","footnotes":""},"categories":[1],"tags":[],"class_list":["post-515","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Revising the spectacle hack-fix - Tamius&#039; sacred texts<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/stuff.tamius.net\/sacred-texts\/2020\/01\/23\/revising-the-spectacle-hack-fix\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Revising the spectacle hack-fix - Tamius&#039; sacred texts\" \/>\n<meta property=\"og:description\" content=\"Not too long ago I talked about my quick and dirty workaround for KDE&#8217;s screenshot capture utility being &#8230; less useful than I&#8217;d like thanks to a(n upstream) Qt bug. To recap: When you try to capture rectangular region of the screen, Spectacle (said screenshot utility) will freeze the entire desktop and allow you to draw a square If you&#8217;re running a multi-monitor setup...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/stuff.tamius.net\/sacred-texts\/2020\/01\/23\/revising-the-spectacle-hack-fix\/\" \/>\n<meta property=\"og:site_name\" content=\"Tamius&#039; sacred texts\" \/>\n<meta property=\"article:published_time\" content=\"2020-01-23T00:45:32+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-01-23T00:45:34+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2019\/08\/code_header.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"4039\" \/>\n\t<meta property=\"og:image:height\" content=\"2272\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Tamius Han\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Tamius Han\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/2020\\\/01\\\/23\\\/revising-the-spectacle-hack-fix\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/2020\\\/01\\\/23\\\/revising-the-spectacle-hack-fix\\\/\"},\"author\":{\"name\":\"Tamius Han\",\"@id\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/#\\\/schema\\\/person\\\/4677d05a4f45974f27cd21481c561c21\"},\"headline\":\"Revising the spectacle hack-fix\",\"datePublished\":\"2020-01-23T00:45:32+00:00\",\"dateModified\":\"2020-01-23T00:45:34+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/2020\\\/01\\\/23\\\/revising-the-spectacle-hack-fix\\\/\"},\"wordCount\":815,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/2020\\\/01\\\/23\\\/revising-the-spectacle-hack-fix\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/wp-content\\\/uploads\\\/2019\\\/08\\\/code_header.jpg\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/2020\\\/01\\\/23\\\/revising-the-spectacle-hack-fix\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/2020\\\/01\\\/23\\\/revising-the-spectacle-hack-fix\\\/\",\"url\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/2020\\\/01\\\/23\\\/revising-the-spectacle-hack-fix\\\/\",\"name\":\"Revising the spectacle hack-fix - Tamius&#039; sacred texts\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/2020\\\/01\\\/23\\\/revising-the-spectacle-hack-fix\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/2020\\\/01\\\/23\\\/revising-the-spectacle-hack-fix\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/wp-content\\\/uploads\\\/2019\\\/08\\\/code_header.jpg\",\"datePublished\":\"2020-01-23T00:45:32+00:00\",\"dateModified\":\"2020-01-23T00:45:34+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/#\\\/schema\\\/person\\\/4677d05a4f45974f27cd21481c561c21\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/2020\\\/01\\\/23\\\/revising-the-spectacle-hack-fix\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/2020\\\/01\\\/23\\\/revising-the-spectacle-hack-fix\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/2020\\\/01\\\/23\\\/revising-the-spectacle-hack-fix\\\/#primaryimage\",\"url\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/wp-content\\\/uploads\\\/2019\\\/08\\\/code_header.jpg\",\"contentUrl\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/wp-content\\\/uploads\\\/2019\\\/08\\\/code_header.jpg\",\"width\":4039,\"height\":2272},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/2020\\\/01\\\/23\\\/revising-the-spectacle-hack-fix\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Revising the spectacle hack-fix\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/#website\",\"url\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/\",\"name\":\"Tamius&#039; sacred texts\",\"description\":\"... containing one of the weirdest mix of pointless topics.\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/#\\\/schema\\\/person\\\/4677d05a4f45974f27cd21481c561c21\",\"name\":\"Tamius Han\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1ce12569905c4aff5d48778af8527565f1175c254ad56cc5e5221666ff1e222b?s=96&d=blank&r=pg\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1ce12569905c4aff5d48778af8527565f1175c254ad56cc5e5221666ff1e222b?s=96&d=blank&r=pg\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1ce12569905c4aff5d48778af8527565f1175c254ad56cc5e5221666ff1e222b?s=96&d=blank&r=pg\",\"caption\":\"Tamius Han\"},\"url\":\"https:\\\/\\\/stuff.tamius.net\\\/sacred-texts\\\/author\\\/tamius-han\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Revising the spectacle hack-fix - Tamius&#039; sacred texts","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/stuff.tamius.net\/sacred-texts\/2020\/01\/23\/revising-the-spectacle-hack-fix\/","og_locale":"en_US","og_type":"article","og_title":"Revising the spectacle hack-fix - Tamius&#039; sacred texts","og_description":"Not too long ago I talked about my quick and dirty workaround for KDE&#8217;s screenshot capture utility being &#8230; less useful than I&#8217;d like thanks to a(n upstream) Qt bug. To recap: When you try to capture rectangular region of the screen, Spectacle (said screenshot utility) will freeze the entire desktop and allow you to draw a square If you&#8217;re running a multi-monitor setup...","og_url":"https:\/\/stuff.tamius.net\/sacred-texts\/2020\/01\/23\/revising-the-spectacle-hack-fix\/","og_site_name":"Tamius&#039; sacred texts","article_published_time":"2020-01-23T00:45:32+00:00","article_modified_time":"2020-01-23T00:45:34+00:00","og_image":[{"width":4039,"height":2272,"url":"https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2019\/08\/code_header.jpg","type":"image\/jpeg"}],"author":"Tamius Han","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Tamius Han","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/stuff.tamius.net\/sacred-texts\/2020\/01\/23\/revising-the-spectacle-hack-fix\/#article","isPartOf":{"@id":"https:\/\/stuff.tamius.net\/sacred-texts\/2020\/01\/23\/revising-the-spectacle-hack-fix\/"},"author":{"name":"Tamius Han","@id":"https:\/\/stuff.tamius.net\/sacred-texts\/#\/schema\/person\/4677d05a4f45974f27cd21481c561c21"},"headline":"Revising the spectacle hack-fix","datePublished":"2020-01-23T00:45:32+00:00","dateModified":"2020-01-23T00:45:34+00:00","mainEntityOfPage":{"@id":"https:\/\/stuff.tamius.net\/sacred-texts\/2020\/01\/23\/revising-the-spectacle-hack-fix\/"},"wordCount":815,"commentCount":0,"image":{"@id":"https:\/\/stuff.tamius.net\/sacred-texts\/2020\/01\/23\/revising-the-spectacle-hack-fix\/#primaryimage"},"thumbnailUrl":"https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2019\/08\/code_header.jpg","inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/stuff.tamius.net\/sacred-texts\/2020\/01\/23\/revising-the-spectacle-hack-fix\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/stuff.tamius.net\/sacred-texts\/2020\/01\/23\/revising-the-spectacle-hack-fix\/","url":"https:\/\/stuff.tamius.net\/sacred-texts\/2020\/01\/23\/revising-the-spectacle-hack-fix\/","name":"Revising the spectacle hack-fix - Tamius&#039; sacred texts","isPartOf":{"@id":"https:\/\/stuff.tamius.net\/sacred-texts\/#website"},"primaryImageOfPage":{"@id":"https:\/\/stuff.tamius.net\/sacred-texts\/2020\/01\/23\/revising-the-spectacle-hack-fix\/#primaryimage"},"image":{"@id":"https:\/\/stuff.tamius.net\/sacred-texts\/2020\/01\/23\/revising-the-spectacle-hack-fix\/#primaryimage"},"thumbnailUrl":"https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2019\/08\/code_header.jpg","datePublished":"2020-01-23T00:45:32+00:00","dateModified":"2020-01-23T00:45:34+00:00","author":{"@id":"https:\/\/stuff.tamius.net\/sacred-texts\/#\/schema\/person\/4677d05a4f45974f27cd21481c561c21"},"breadcrumb":{"@id":"https:\/\/stuff.tamius.net\/sacred-texts\/2020\/01\/23\/revising-the-spectacle-hack-fix\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/stuff.tamius.net\/sacred-texts\/2020\/01\/23\/revising-the-spectacle-hack-fix\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/stuff.tamius.net\/sacred-texts\/2020\/01\/23\/revising-the-spectacle-hack-fix\/#primaryimage","url":"https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2019\/08\/code_header.jpg","contentUrl":"https:\/\/stuff.tamius.net\/sacred-texts\/wp-content\/uploads\/2019\/08\/code_header.jpg","width":4039,"height":2272},{"@type":"BreadcrumbList","@id":"https:\/\/stuff.tamius.net\/sacred-texts\/2020\/01\/23\/revising-the-spectacle-hack-fix\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/stuff.tamius.net\/sacred-texts\/"},{"@type":"ListItem","position":2,"name":"Revising the spectacle hack-fix"}]},{"@type":"WebSite","@id":"https:\/\/stuff.tamius.net\/sacred-texts\/#website","url":"https:\/\/stuff.tamius.net\/sacred-texts\/","name":"Tamius&#039; sacred texts","description":"... containing one of the weirdest mix of pointless topics.","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/stuff.tamius.net\/sacred-texts\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/stuff.tamius.net\/sacred-texts\/#\/schema\/person\/4677d05a4f45974f27cd21481c561c21","name":"Tamius Han","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/1ce12569905c4aff5d48778af8527565f1175c254ad56cc5e5221666ff1e222b?s=96&d=blank&r=pg","url":"https:\/\/secure.gravatar.com\/avatar\/1ce12569905c4aff5d48778af8527565f1175c254ad56cc5e5221666ff1e222b?s=96&d=blank&r=pg","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1ce12569905c4aff5d48778af8527565f1175c254ad56cc5e5221666ff1e222b?s=96&d=blank&r=pg","caption":"Tamius Han"},"url":"https:\/\/stuff.tamius.net\/sacred-texts\/author\/tamius-han\/"}]}},"_links":{"self":[{"href":"https:\/\/stuff.tamius.net\/sacred-texts\/wp-json\/wp\/v2\/posts\/515","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/stuff.tamius.net\/sacred-texts\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/stuff.tamius.net\/sacred-texts\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/stuff.tamius.net\/sacred-texts\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/stuff.tamius.net\/sacred-texts\/wp-json\/wp\/v2\/comments?post=515"}],"version-history":[{"count":2,"href":"https:\/\/stuff.tamius.net\/sacred-texts\/wp-json\/wp\/v2\/posts\/515\/revisions"}],"predecessor-version":[{"id":526,"href":"https:\/\/stuff.tamius.net\/sacred-texts\/wp-json\/wp\/v2\/posts\/515\/revisions\/526"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/stuff.tamius.net\/sacred-texts\/wp-json\/wp\/v2\/media\/328"}],"wp:attachment":[{"href":"https:\/\/stuff.tamius.net\/sacred-texts\/wp-json\/wp\/v2\/media?parent=515"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/stuff.tamius.net\/sacred-texts\/wp-json\/wp\/v2\/categories?post=515"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/stuff.tamius.net\/sacred-texts\/wp-json\/wp\/v2\/tags?post=515"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}