{"id":2177,"date":"2010-02-03T18:08:51","date_gmt":"2010-02-04T02:08:51","guid":{"rendered":"http:\/\/multimedia.cx\/eggs\/?p=2177"},"modified":"2010-02-04T12:49:34","modified_gmt":"2010-02-04T20:49:34","slug":"whats-so-hard-about-0xa9","status":"publish","type":"post","link":"https:\/\/multimedia.cx\/eggs\/whats-so-hard-about-0xa9\/","title":{"rendered":"What&#8217;s So Hard About 0xA9?"},"content":{"rendered":"<p>No matter how much I think I know about about character encoding or trying to work around issues arising from the same, I&#8217;ll always get bitten.<\/p>\n<p>For a long time, one particular <a href=\"http:\/\/fate.multimedia.cx\/\">FATE<\/a> configuration has shown 87\/127 tests succeeding, even though the total number of test specs has crept up over to 300. I investigated this errant configuration on the client side and concluded that it was, in fact, executing all of the tests and sending all the results over the server in one neat package. Apparently, the problem was on the server side. Since it was an older Intel C compiler configuration, I didn&#8217;t care about investigating much further.<\/p>\n<p>At one point, some bad bit of code was checked into FFmpeg and all of the results started showing xy\/127 tests succeeded. This made the issue a bit more pressing. <a href=\"http:\/\/hardwarebug.org\/\">Mans<\/a> discovered that the problem had to do with the <a href=\"http:\/\/fate.multimedia.cx\/index.php?test_spec=143\">svq3 test spec<\/a> failing. The bad code affecting the SVQ3 test was quickly fixed so I didn&#8217;t worry about it again until yesterday when, once again, FATE&#8217;s various configs were only reporting that 127 tests had been run.<\/p>\n<p>Here&#8217;s what was happening: FATE stores the stderr output of a test <em>only if<\/em> the test spec fails. This is a key data point since everything is fine when the test is successful and FATE tosses the output. The sample used for the SVQ3 test outputs the following metadata (among other data) in the stderr (seen, for example, <a href=\"http:\/\/fate.multimedia.cx\/index.php?test_result=42170676\">in this test result<\/a>):<\/p>\n<pre>\r\n    copyright       : <em>?<\/em> Vertical Online 2001\r\n    copyright-eng   : <em>?<\/em> Vertical Online 2001\r\n<\/pre>\n<p>Those mystery characters map to the byte 0xA9 which is the c-in-a-circle copyright symbol according to UTF tables I can find (at least, U+00A9 is). That byte is making the system choke somewhere along the line, which annoys me greatly. When the client-side Python script executes the test and stuffs the stdout and stderr into the SQLite database, the relevant field is supposed to be a blob&#8211; a <em>binary large object<\/em>. The receiving PHP script on the server is also supposed to honor that blob schema.<\/p>\n<p>Mans&#8217; solution is to specifically encode the stdout\/stderr blobs as UTF8 strings in the client-side Python script. That fixes this problem. But I&#8217;m confused as to why this is necessary in the first place. Was the PHP script doing its best to interpret the data inside the blob and falling over? Or was the SQLite engine on the server confused by the 0xA9 character in the blob?<\/p>\n<p>Also, I suddenly find myself wondering how <a href=\"http:\/\/a9.com\/\">the A9 search company<\/a> got its name.<\/p>\n<p><strong>Update:<\/strong> Thanks for MichaelK. for pointing out the problem. While I was properly converting (since that&#8217;s necessary) stdout\/stderr from build records to binary type, I never did the same for test result stdout\/stderr. I had to do it for the build record output since that was compressed before going into the database. Since the test result data is &#8220;just strings&#8221;, or so I thought, no reason to do so.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>0xA9 breaks FATE<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[101],"tags":[],"class_list":["post-2177","post","type-post","status-publish","format-standard","hentry","category-fate-server"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"0xA9 breaks FATE\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Multimedia Mike\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/multimedia.cx\/eggs\/whats-so-hard-about-0xa9\/\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Breaking Eggs And Making Omelettes | Topics On Multimedia Technology and Reverse Engineering\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"What\u2019s So Hard About 0xA9? | Breaking Eggs And Making Omelettes\" \/>\n\t\t<meta property=\"og:description\" content=\"0xA9 breaks FATE\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/multimedia.cx\/eggs\/whats-so-hard-about-0xa9\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2010-02-04T02:08:51+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2010-02-04T20:49:34+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:title\" content=\"What\u2019s So Hard About 0xA9? | Breaking Eggs And Making Omelettes\" \/>\n\t\t<meta name=\"twitter:description\" content=\"0xA9 breaks FATE\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/whats-so-hard-about-0xa9\\\/#article\",\"name\":\"What\\u2019s So Hard About 0xA9? | Breaking Eggs And Making Omelettes\",\"headline\":\"What&#8217;s So Hard About 0xA9?\",\"author\":{\"@id\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/author\\\/multimedia-mike\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/#organization\"},\"datePublished\":\"2010-02-03T18:08:51-08:00\",\"dateModified\":\"2010-02-04T12:49:34-08:00\",\"inLanguage\":\"en-US\",\"commentCount\":3,\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/whats-so-hard-about-0xa9\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/whats-so-hard-about-0xa9\\\/#webpage\"},\"articleSection\":\"FATE Server\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/whats-so-hard-about-0xa9\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/category\\\/fate-server\\\/#listItem\",\"name\":\"FATE Server\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/category\\\/fate-server\\\/#listItem\",\"position\":2,\"name\":\"FATE Server\",\"item\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/category\\\/fate-server\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/whats-so-hard-about-0xa9\\\/#listItem\",\"name\":\"What&#8217;s So Hard About 0xA9?\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/whats-so-hard-about-0xa9\\\/#listItem\",\"position\":3,\"name\":\"What&#8217;s So Hard About 0xA9?\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/category\\\/fate-server\\\/#listItem\",\"name\":\"FATE Server\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/#organization\",\"name\":\"Breaking Eggs And Making Omelettes\",\"description\":\"Topics On Multimedia Technology and Reverse Engineering\",\"url\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/author\\\/multimedia-mike\\\/#author\",\"url\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/author\\\/multimedia-mike\\\/\",\"name\":\"Multimedia Mike\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/whats-so-hard-about-0xa9\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2eb93f7cada658f7986b5092062849fa255779eada3342c8f6b9a40764b95fdd?s=96&d=identicon&r=g\",\"width\":96,\"height\":96,\"caption\":\"Multimedia Mike\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/whats-so-hard-about-0xa9\\\/#webpage\",\"url\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/whats-so-hard-about-0xa9\\\/\",\"name\":\"What\\u2019s So Hard About 0xA9? | Breaking Eggs And Making Omelettes\",\"description\":\"0xA9 breaks FATE\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/whats-so-hard-about-0xa9\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/author\\\/multimedia-mike\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/author\\\/multimedia-mike\\\/#author\"},\"datePublished\":\"2010-02-03T18:08:51-08:00\",\"dateModified\":\"2010-02-04T12:49:34-08:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/#website\",\"url\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/\",\"name\":\"Breaking Eggs And Making Omelettes\",\"description\":\"Topics On Multimedia Technology and Reverse Engineering\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/multimedia.cx\\\/eggs\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"What\u2019s So Hard About 0xA9? | Breaking Eggs And Making Omelettes","description":"0xA9 breaks FATE","canonical_url":"https:\/\/multimedia.cx\/eggs\/whats-so-hard-about-0xa9\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/multimedia.cx\/eggs\/whats-so-hard-about-0xa9\/#article","name":"What\u2019s So Hard About 0xA9? | Breaking Eggs And Making Omelettes","headline":"What&#8217;s So Hard About 0xA9?","author":{"@id":"https:\/\/multimedia.cx\/eggs\/author\/multimedia-mike\/#author"},"publisher":{"@id":"https:\/\/multimedia.cx\/eggs\/#organization"},"datePublished":"2010-02-03T18:08:51-08:00","dateModified":"2010-02-04T12:49:34-08:00","inLanguage":"en-US","commentCount":3,"mainEntityOfPage":{"@id":"https:\/\/multimedia.cx\/eggs\/whats-so-hard-about-0xa9\/#webpage"},"isPartOf":{"@id":"https:\/\/multimedia.cx\/eggs\/whats-so-hard-about-0xa9\/#webpage"},"articleSection":"FATE Server"},{"@type":"BreadcrumbList","@id":"https:\/\/multimedia.cx\/eggs\/whats-so-hard-about-0xa9\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/multimedia.cx\/eggs\/#listItem","position":1,"name":"Home","item":"https:\/\/multimedia.cx\/eggs\/","nextItem":{"@type":"ListItem","@id":"https:\/\/multimedia.cx\/eggs\/category\/fate-server\/#listItem","name":"FATE Server"}},{"@type":"ListItem","@id":"https:\/\/multimedia.cx\/eggs\/category\/fate-server\/#listItem","position":2,"name":"FATE Server","item":"https:\/\/multimedia.cx\/eggs\/category\/fate-server\/","nextItem":{"@type":"ListItem","@id":"https:\/\/multimedia.cx\/eggs\/whats-so-hard-about-0xa9\/#listItem","name":"What&#8217;s So Hard About 0xA9?"},"previousItem":{"@type":"ListItem","@id":"https:\/\/multimedia.cx\/eggs\/#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/multimedia.cx\/eggs\/whats-so-hard-about-0xa9\/#listItem","position":3,"name":"What&#8217;s So Hard About 0xA9?","previousItem":{"@type":"ListItem","@id":"https:\/\/multimedia.cx\/eggs\/category\/fate-server\/#listItem","name":"FATE Server"}}]},{"@type":"Organization","@id":"https:\/\/multimedia.cx\/eggs\/#organization","name":"Breaking Eggs And Making Omelettes","description":"Topics On Multimedia Technology and Reverse Engineering","url":"https:\/\/multimedia.cx\/eggs\/"},{"@type":"Person","@id":"https:\/\/multimedia.cx\/eggs\/author\/multimedia-mike\/#author","url":"https:\/\/multimedia.cx\/eggs\/author\/multimedia-mike\/","name":"Multimedia Mike","image":{"@type":"ImageObject","@id":"https:\/\/multimedia.cx\/eggs\/whats-so-hard-about-0xa9\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/2eb93f7cada658f7986b5092062849fa255779eada3342c8f6b9a40764b95fdd?s=96&d=identicon&r=g","width":96,"height":96,"caption":"Multimedia Mike"}},{"@type":"WebPage","@id":"https:\/\/multimedia.cx\/eggs\/whats-so-hard-about-0xa9\/#webpage","url":"https:\/\/multimedia.cx\/eggs\/whats-so-hard-about-0xa9\/","name":"What\u2019s So Hard About 0xA9? | Breaking Eggs And Making Omelettes","description":"0xA9 breaks FATE","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/multimedia.cx\/eggs\/#website"},"breadcrumb":{"@id":"https:\/\/multimedia.cx\/eggs\/whats-so-hard-about-0xa9\/#breadcrumblist"},"author":{"@id":"https:\/\/multimedia.cx\/eggs\/author\/multimedia-mike\/#author"},"creator":{"@id":"https:\/\/multimedia.cx\/eggs\/author\/multimedia-mike\/#author"},"datePublished":"2010-02-03T18:08:51-08:00","dateModified":"2010-02-04T12:49:34-08:00"},{"@type":"WebSite","@id":"https:\/\/multimedia.cx\/eggs\/#website","url":"https:\/\/multimedia.cx\/eggs\/","name":"Breaking Eggs And Making Omelettes","description":"Topics On Multimedia Technology and Reverse Engineering","inLanguage":"en-US","publisher":{"@id":"https:\/\/multimedia.cx\/eggs\/#organization"}}]},"og:locale":"en_US","og:site_name":"Breaking Eggs And Making Omelettes | Topics On Multimedia Technology and Reverse Engineering","og:type":"article","og:title":"What\u2019s So Hard About 0xA9? | Breaking Eggs And Making Omelettes","og:description":"0xA9 breaks FATE","og:url":"https:\/\/multimedia.cx\/eggs\/whats-so-hard-about-0xa9\/","article:published_time":"2010-02-04T02:08:51+00:00","article:modified_time":"2010-02-04T20:49:34+00:00","twitter:card":"summary","twitter:title":"What\u2019s So Hard About 0xA9? | Breaking Eggs And Making Omelettes","twitter:description":"0xA9 breaks FATE"},"aioseo_meta_data":{"post_id":"2177","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"location":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":null,"created":"2020-12-31 21:59:32","updated":"2025-12-31 18:53:26","seo_analyzer_scan_date":null,"focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/multimedia.cx\/eggs\/\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/multimedia.cx\/eggs\/category\/fate-server\/\" title=\"FATE Server\">FATE Server<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tWhat\u2019s So Hard About 0xA9?\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/multimedia.cx\/eggs\/"},{"label":"FATE Server","link":"https:\/\/multimedia.cx\/eggs\/category\/fate-server\/"},{"label":"What&#8217;s So Hard About 0xA9?","link":"https:\/\/multimedia.cx\/eggs\/whats-so-hard-about-0xa9\/"}],"_links":{"self":[{"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/posts\/2177","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/comments?post=2177"}],"version-history":[{"count":5,"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/posts\/2177\/revisions"}],"predecessor-version":[{"id":2181,"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/posts\/2177\/revisions\/2181"}],"wp:attachment":[{"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/media?parent=2177"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/categories?post=2177"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/multimedia.cx\/eggs\/wp-json\/wp\/v2\/tags?post=2177"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}