{"id":3712,"date":"2014-03-15T15:22:14","date_gmt":"2014-03-15T05:22:14","guid":{"rendered":"https:\/\/www.flamingspork.com\/blog\/?p=3712"},"modified":"2014-03-15T15:22:14","modified_gmt":"2014-03-15T05:22:14","slug":"the-joy-of-unicode","status":"publish","type":"post","link":"https:\/\/www.flamingspork.com\/blog\/2014\/03\/15\/the-joy-of-unicode\/","title":{"rendered":"The joy of Unicode"},"content":{"rendered":"<p>So, back in late 2008, rather soon after we got to start working on <a href=\"http:\/\/www.drizzle.org\">Drizzle<\/a> full time, someone discovered <a href=\"http:\/\/unicodesnowmanforyou.com\">unicodesnowmanforyou.com<\/a>, or:<\/p>\n<div style=\"font-size: 1000%; text-align: center;\">\u00e2\u02dc\u0192<\/div>\n<p>Since we had decided that Drizzle was going to be UTF-8 everywhere,(after seeing for years how hard it was for people to get character sets correct in MySQL) we soon added \u00e2\u02dc\u0192.test to the tree, which tried a few interesting things:<\/p>\n<p><tt>CREATE TABLE \u00e2\u02dc\u0192; CREATE DATABASE \u00e2\u02dc\u0192; etc etc<br \/>\n<\/tt><\/p>\n<p>Because what better to show off UTF-8 than using odd Unicode characters for table names, database names and file names. Well&#8230; it turns out we were all good except if you attempted to check out the source tree on Solaris. It was some combination of Python, Bazaar and Solaris that meant you just got python stacktraces and no source tree. So, if you look now it&#8217;s actually snowman.test and has been since the end of 2008, because Solaris 10.<\/p>\n<p>A little while later, I was talking to Anthony Baxter at OSDC in Sydney and he mentioned Unicode above 2^16 in UTF-8&#8230;. so, we had clef.test (we&#8217;d learned since \u00e2\u02dc\u0192 and we were not going to tall it \u00f0\u009d\u201e\u00a2.test).<\/p>\n<p>Fast forward a few years to, well, this week, and I was talking to Jeremy Kerr about <a href=\"https:\/\/www.kernel.org\/pub\/linux\/kernel\/people\/geoff\/petitboot\/petitboot.html\">petitboot<\/a> and telling the tail of snowman.test. So out came the crazy Unicode characters:<\/p>\n<ul>\n<li>U+1F4A9 PILE OF POO <span style=\"font-size: 500%;\">\u00f0\u0178\u2019\u00a9<\/span><\/li>\n<li>U+1F435 MONKEY FACE <span style=\"font-size: 500%;\">\u00f0\u0178\u0090\u00b5<\/span><\/li>\n<li>U+1F431 CAT FACE <span style=\"font-size: 500%;\">\u00f0\u0178\u0090\u00b1<\/span><\/li>\n<li>U+1F602 FACE WITH TEARS OF JOY <span style=\"font-size: 500%;\">\u00f0\u0178\u02dc\u201a<\/span><\/li>\n<li>U+1F639 CAT FACE WITH TEARS OF JOY <span style=\"font-size: 500%;\">\u00f0\u0178\u02dc\u00b9<\/span><\/li>\n<\/ul>\n<p>But guess what, there is no MONKEY FACE WITH TEARS OF JOY! I know, this is just <strong>unacceptable<\/strong> &#8211; TEARS OF JOY should be a modifier, because you may need U+1F6B9 MENS SYMBOL <span style=\"font-size: 500%;\">\u00f0\u0178\u0161\u00b9<\/span> with a TEARS OF JOY modifier at some point in your life.<\/p>\n<p>Anyway, another place with tests involving odd Unicode characters is good for everyone, but still lacking if you need to boot an Operating System that&#8217;s MONKEY FACE WITH TEARS OF JOY.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>So, back in late 2008, rather soon after we got to start working on Drizzle full time, someone discovered unicodesnowmanforyou.com, or: \u00e2\u02dc\u0192 Since we had decided that Drizzle was going to be UTF-8 everywhere,(after seeing for years how hard it &hellip; <a href=\"https:\/\/www.flamingspork.com\/blog\/2014\/03\/15\/the-joy-of-unicode\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[75,14],"tags":[70,141,628,569],"class_list":["post-3712","post","type-post","status-publish","format-standard","hentry","category-drizzle-work-et-al","category-mysql","tag-drizzle","tag-linux","tag-mysql","tag-petitboot"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p5a6n8-XS","jetpack-related-posts":[{"id":2323,"url":"https:\/\/www.flamingspork.com\/blog\/2011\/03\/17\/things-ive-done-in-drizzle\/","url_meta":{"origin":3712,"position":0},"title":"Things I&#8217;ve done in Drizzle","author":"Stewart Smith","date":"2011-03-17","format":false,"excerpt":"When writing my Dropping ACID: Eating Data in a Web 2.0 Cloud World talk for LCA2011 I came to the realisation that I had forgotten a lot of the things I had worked on in MySQL and MySQL Cluster. So, as a bit of a retrospective as part of the\u2026","rel":"","context":"In &quot;drizzle&quot;","block_context":{"text":"drizzle","link":"https:\/\/www.flamingspork.com\/blog\/category\/work-et-al\/drizzle-work-et-al\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1313,"url":"https:\/\/www.flamingspork.com\/blog\/2008\/12\/16\/fixing-drizzle-on-linux-sparc\/","url_meta":{"origin":3712,"position":1},"title":"fixing drizzle on linux sparc","author":"Stewart Smith","date":"2008-12-16","format":false,"excerpt":"Since I got fed up with Solaris the other day, the T1000 is running Debian. This means that \"I'll care about Drizzle on Linux Sparc\". OMG were things broken in the most \"trivial\" ways. A good quick intro to the issues is Memory alignment on SPARC, or a 300x speedup!\u2026","rel":"","context":"In &quot;drizzle&quot;","block_context":{"text":"drizzle","link":"https:\/\/www.flamingspork.com\/blog\/category\/work-et-al\/drizzle-work-et-al\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":2362,"url":"https:\/\/www.flamingspork.com\/blog\/2011\/04\/21\/http-json-alsosql-interface-to-drizzle\/","url_meta":{"origin":3712,"position":2},"title":"HTTP JSON AlsoSQL interface to Drizzle","author":"Stewart Smith","date":"2011-04-21","format":false,"excerpt":"So... I had another one of those \"hrrm... this shouldn't be hard to hack a proof-of-concept\" moments. Web apps are increasingly speaking JSON all around the place. Why can't we speak JSON to\/from the database? Why? Seriously, why not? One reason why MongoDB has found users is that JSON is\u2026","rel":"","context":"In &quot;drizzle&quot;","block_context":{"text":"drizzle","link":"https:\/\/www.flamingspork.com\/blog\/category\/work-et-al\/drizzle-work-et-al\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.flamingspork.com\/blog\/wp-content\/uploads\/2011\/04\/Screenshot-11-300x230.png?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":2329,"url":"https:\/\/www.flamingspork.com\/blog\/2011\/03\/23\/multi-tenancy-drizzle\/","url_meta":{"origin":3712,"position":3},"title":"Multi-tenancy Drizzle","author":"Stewart Smith","date":"2011-03-23","format":false,"excerpt":"My previous post focused on some of the problems of doing multi-tenant MySQL. One of the reasons why I started hacking on Drizzle was that the multi-tenancy options for MySQL just weren't very good (this is also the reason why I run my blog in a VM and not a\u2026","rel":"","context":"In &quot;drizzle&quot;","block_context":{"text":"drizzle","link":"https:\/\/www.flamingspork.com\/blog\/category\/work-et-al\/drizzle-work-et-al\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":2253,"url":"https:\/\/www.flamingspork.com\/blog\/2011\/01\/05\/is-your-storage-engine-buggy-or-the-database-server\/","url_meta":{"origin":3712,"position":4},"title":"Is your Storage Engine buggy or the database server?","author":"Stewart Smith","date":"2011-01-05","format":false,"excerpt":"If your storage engine returns an error from rnd_init (or doStartTableScan as it's named in Drizzle) and does not save this error and return it in any subsequent calls to rnd_next, your engine is buggy. Namely it is buggy in that a) an error may not be reported back to\u2026","rel":"","context":"In &quot;code&quot;","block_context":{"text":"code","link":"https:\/\/www.flamingspork.com\/blog\/category\/code\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":2320,"url":"https:\/\/www.flamingspork.com\/blog\/2011\/03\/16\/drizzle7\/","url_meta":{"origin":3712,"position":5},"title":"Drizzle7","author":"Stewart Smith","date":"2011-03-16","format":false,"excerpt":"We've released Drizzle7! Not only that, we're now calling it Generally Available - a GA release. What does this mean? What does this GA label mean? You could view as a GA label being \"we're pretty confident people aren't going to on mass ask for our heads when they start\u2026","rel":"","context":"In &quot;drizzle&quot;","block_context":{"text":"drizzle","link":"https:\/\/www.flamingspork.com\/blog\/category\/work-et-al\/drizzle-work-et-al\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/posts\/3712","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/comments?post=3712"}],"version-history":[{"count":1,"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/posts\/3712\/revisions"}],"predecessor-version":[{"id":3713,"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/posts\/3712\/revisions\/3713"}],"wp:attachment":[{"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/media?parent=3712"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/categories?post=3712"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/tags?post=3712"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}