{"id":50,"date":"2007-01-03T10:30:00","date_gmt":"2007-01-03T14:30:00","guid":{"rendered":"http:\/\/2d823b65bb.nxcli.io\/2007\/01\/how-to-hire-guillaume-portes.html"},"modified":"2010-11-02T23:05:39","modified_gmt":"2010-11-03T03:05:39","slug":"how-to-hire-guillaume-portes","status":"publish","type":"post","link":"https:\/\/www.robweir.com\/blog\/2007\/01\/how-to-hire-guillaume-portes.html","title":{"rendered":"How to hire Guillaume Portes"},"content":{"rendered":"<p>You want to hire a new programmer and you have the perfect candidate in mind, your old college roommate, Guillaume Portes.   Unfortunately you can&#8217;t just go out and offer him the job.  That would get you in trouble with your corporate HR policies which require that you first create a job description, advertise the position, interview and rate candidates and choose the most qualified person.    So much paperwork!  But you really want Guillaume and only Guillaume.<\/p>\n<p>So what can you do?<\/p>\n<p>The solution is simple.  Create a job description that is written specifically to your friend&#8217;s background and skills.  The more specific and longer you make the job description, the fewer candidates will be eligible.  Ideally you would write a job description that no one else in the world could possibly match.  Don&#8217;t describe the job requirements.  Describe the person you want.  That&#8217;s the trick.<\/p>\n<p>So you end up with something like this:<\/p>\n<ul>\n<li>5 years experience with Java, J2EE and web development, PHP, XSLT<\/li>\n<li>Fluency in French and Corsican<\/li>\n<li>Experience with the Llama farming industry<\/li>\n<li>Mole on left shoulder<\/li>\n<li>Sister named Bridgette<\/li>\n<\/ul>\n<p>Although this technique may be familiar, in practice it is usually not taken to this extreme.   Corporate policies, employment law and common sense usually prevent one from making entirely irrational hiring decisions or discriminating against other applicants for things unrelated to the legitimate requirements of the job.<\/p>\n<p>But evidently in the realm of standards there are no practical limits to the application of this technique.  It is quite possible to write a standard that allows only a single implementation.  By focusing entirely on the capabilities of a single application and documenting it in infuriatingly useless detail, you can <a href=\"https:\/\/2d823b65bb.nxcli.io\/blog\/2006\/12\/how-to-write-standard-if-you-must.html\">easily create<\/a> a \u201cStandard of One\u201d.<\/p>\n<p>Of course, this begs the question of what is essential and what is not.  This really needs to be determined by domain analysis, requirements gathering and consensus building.  Let&#8217;s just say that anyone who says  that a single existing implementation is all one needs to look at is missing the point.  The art of specification is to generalize and simplify.  Generalizing allows you to do more with less, meeting more needs with fewer constraints.<\/p>\n<p>Let&#8217;s take a simplified example.  You are writing a specification for a file format for a very simple drawing program, ShapeMaster 2007.   It can draw circles and squares, and they can have solid or dashed lines.    That&#8217;s all it does.  Let&#8217;s consider two different ways of specifying a file format.<\/p>\n<p>In the first case, we&#8217;ll simply dump out what ShapeMaster does in the most literal way possible.   Since it allows only two possible shapes and only two possible line styles, and we&#8217;re not considering any other use, the file format will look like this:<\/p>\n<pre>&lt;document&gt;\r\n&lt;shape iscircle=\"true\" isdotted=\"false\"\/&gt;\r\n&lt;shape iscircle=\"false\" isdotted=\"true\"\/&gt;\r\n&lt;\/document&gt;<\/pre>\n<p>Although this format is very specific and very accurate, it lacks generality, extensibility and flexibility.  Although it may be useful for ShapeMaster 2007, it will hardly be useful for anyone else, unless they merely want to create data for ShapeMaster 2007.  It is not a portable, cross-application, open format.  It is a narrowly-defined, single application format.  It may be in XML.  It may even be reviewed by a standards committee.  But it is by its nature, closed and inflexible.<\/p>\n<p>How could this have been done in a way which works for ShapeMaster 2007 but also is more flexible,  extensible and considerate of the needs of different applications?  One possibility is to generalize and simplify:<\/p>\n<pre>&lt;document&gt;\r\n&lt;shape type=\"circle\" lineStyle=\"solid\"\/&gt;\r\n&lt;shape type=\"square\" lineStyle=\"dotted\"\/&gt;\r\n&lt;\/document&gt;<\/pre>\n<p>Rather than hard-code the specific behavior of ShapeMaster, generalize it.  Make the required specific behavior be a special case of something more general.  In this way we solve the requirements of ShapeMaster 2007, but also accommodate the needs of other applications, such as OpenShape, ShapePerfect and others.  For example, it can easily accommodate additional shapes and line styles:<\/p>\n<pre>&lt;document&gt;\r\n&lt;shape type=\"circle\" lineStyle=\"solid\"\/&gt;\r\n&lt;shape type=\"square\" lineStyle=\"dotted\"\/&gt;\r\n&lt;shape type=\"triangle\" lineStyle=\"dashed\"\/&gt;\r\n&lt;\/document&gt;<\/pre>\n<p>This is a running criticism I have of Microsoft&#8217;s Office Open XML (OOXML).  It has been narrowly crafted to accommodate a single vendor&#8217;s applications.  Its extreme length (over 6,000 pages) stems from it having detailed every wart of MS Office in an inextensible, inflexible manner.  This is not a specification; this is a DNA sequence.<\/p>\n<p>The ShapeMaster example given above is very similar to how OOXML handles \u201cArt Page Borders\u201d in a tedious, inflexible way, where a more general solution would have been both more flexible, but also far easier to specify and implement.  I&#8217;ve written on this in more detail <a href=\"https:\/\/2d823b65bb.nxcli.io\/blog\/2006\/07\/game-of-zendo.html\">elsewhere<\/a>.<\/p>\n<p>Here are some other examples of where the OOXML \u201cStandard\u201d has bloated its specification with features that no one but Microsoft will be able to interpret:<\/p>\n<blockquote><p>2.15.3.6 autoSpaceLikeWord95 (Emulate Word 95 Full-Width Character Spacing)<\/p>\n<p>This element specifies that applications shall emulate the behavior of a previously existing word processing application (Microsoft Word 95) when determining the spacing between full-width East Asian characters in a document&#8217;s content.<\/p>\n<p>[Guidance: To faithfully replicate this behavior, applications must imitate the behavior of that application, which involves many possible behaviors and cannot be faithfully placed into narrative for this Office Open XML Standard. If applications wish to match this behavior, they must utilize and duplicate the output of those applications. It is recommended that applications not intentionally replicate this behavior as it was deprecated due to issues with its output, and is maintained only for compatibility with existing documents from that application. end guidance]<\/p><\/blockquote>\n<p>(This example and the following examples brought to my attention by <a href=\"http:\/\/www.geniisoft.com\/showcase.nsf\/archive\/20061027-0829\">this post<\/a> from Ben at Genii.)<\/p>\n<p>What should we make of that?   Not only must an interoperable OOXML application support Word 12&#8217;s style of spacing, but it must also support a different way of doing it in Word 95.  And by the way, Microsoft is not going to tell you how it was done in Word 95, even though they are the only ones in a position to do so.<\/p>\n<p>Similarly, we have:<\/p>\n<blockquote><p>2.15.3.26 footnoteLayoutLikeWW8 (Emulate Word 6.x\/95\/97 Footnote Placement)<\/p>\n<p>This element specifies that applications shall emulate the behavior of a previously existing word processing application (Microsoft Word 6.x\/95\/97) when determining the placement of the contents of footnotes relative to the page on which the footnote reference occurs. This emulation typically involves some and\/or all of the footnote being inappropriately placed on the page following the footnote reference.<\/p>\n<p>[Guidance: To faithfully replicate this behavior, applications must imitate the behavior of that application, which involves many possible behaviors and cannot be faithfully placed into narrative for this Office Open XML Standard. If applications wish to match this behavior, they must utilize and duplicate the output of those applications. It is recommended that applications not intentionally replicate this behavior as it was deprecated due to issues with its output, and is maintained only for compatibility with existing documents from that application. end guidance]<\/p><\/blockquote>\n<p>Again, in order to support OOXML fully, and provide support for all those legacy documents, we need to divine the behavior of exactly how Word 6.x \u201cinappropriately\u201d placed footnotes.  The \u201cStandard\u201d is no help in telling us how to do this.  In fact it recommends that we don&#8217;t even try.  However, Microsoft continues to claim that the benefit of OOXML and the reason why it deserves ISO approval is that it is the only format that is 100% backwards compatible with the billions of legacy documents.  But how can this be true if the specification merely enumerates compatibility attributes like this without defining them ?  Does the specification really specify what it claims to specify?<\/p>\n<p>The fact that this and other legacy features are dismissed in the specification as \u201cdeprecated\u201d is no defense.  If a document contains this element, what is a consuming application to do?  If you ignore it, the document will not be formatted correctly.  It is that simple.  Deprecated doesn&#8217;t mean \u201cnot important\u201d or \u201cignorable\u201d.  It just means that new documents authored in Office 2007 will not have it.  But billions of legacy documents, when converted to OOXML format, may very well have them.   How well will a competing word processor do in the market if it cannot handle these legacy tags?<\/p>\n<p>So I&#8217;d argue that these legacy tags are some of the most important ones in the specification.  But they remain undefined, and by this ruse Microsoft has arranged things so that their lock on legacy documents extends to even when those legacy documents are converted to OOXML.   We are ruled by the dead hand of the past.<\/p>\n<p>Let&#8217;s go back even further in time to Word 5.0:<\/p>\n<blockquote><p>2.15.3.32 mwSmallCaps (Emulate Word 5.x for the Macintosh Small Caps Formatting)<\/p>\n<p>This element specifies that applications shall emulate the behavior of a previously existing word processing application (Microsoft Word 5.x for the Macintosh) when determining the resulting formatting when the smallCaps element (\u00a72.3.2.31) is applied to runs of text within this WordprocessingML document. This emulation typically results in small caps which are smaller than typical small caps at most font sizes.<\/p>\n<p>[Guidance: To faithfully replicate this behavior, applications must imitate the behavior of that application, which involves many possible behaviors and cannot be faithfully placed into narrative for this Office Open XML Standard. If applications wish to match this behavior, they must utilize and duplicate the output of those applications. It is recommended that applications not intentionally replicate this behavior as it was deprecated due to issues with its output, and is maintained only for compatibility with existing documents from that application. end guidance]<\/p><\/blockquote>\n<p>You&#8217;ll need to take my word for it that \u201cThis emulation typically results in small caps which are smaller than typical small caps at most font sizes\u201d falls well short of the level of specificity and determinism that is typical of ISO specifications.<\/p>\n<p>Further:<\/p>\n<blockquote><p>2.15.3.51 suppressTopSpacingWP (Emulate WordPerfect 5.x Line Spacing)<\/p>\n<p>This element specifies that applications shall emulate the behavior of a previously existing word processing application (WordPerfect 5.x) when determining the resulting spacing between lines in a paragraph using the spacing element (\u00a72.3.1.33). This emulation typically results in line spacing which is reduced from its normal size.<\/p>\n<p>[Guidance: To faithfully replicate this behavior, applications must imitate the behavior of that application, which involves many possible behaviors and cannot be faithfully placed into narrative for this Office Open XML Standard. If applications wish to match this behavior, they must utilize and duplicate the output of those applications. It is recommended that applications not intentionally replicate this behavior as it was deprecated due to issues with its output, and is maintained only for compatibility with existing documents from that application. end guidance]<\/p><\/blockquote>\n<p>So not only must an interoperable OOXML implementation first acquire and reverse-engineer a 14-year old version of Microsoft Word, it must also do the same thing with a 16-year old version of WordPerfect.  Good luck.<\/p>\n<p>My tolerance for cutting and pasting examples goes only so far, so suffice it for me to merely list some other examples of this pattern:<\/p>\n<ul>\n<li><strong>lineWrapLikeWord6<\/strong> (Emulate Word 6.0 Line Wrapping for East Asian Text)<\/li>\n<li><strong>mwSmallCaps<\/strong> (Emulate Word 5.x for Macintosh Small Caps Formatting)<\/li>\n<li><strong>shapeLayoutLikeWW8<\/strong> (Emulate Word 97 Text Wrapping Around Floating Objects)<\/li>\n<li><strong>truncateFontHeightsLikeWP6<\/strong> (Emulate WordPerfect 6.x Font Height Calculation)<\/li>\n<li><strong>useWord2002TableStyleRules<\/strong> (Emulate Word 2002 Table Style Rules)<\/li>\n<li><strong>useWord97LineBreakRules<\/strong> (Emulate Word 97 East Asian Line Breaking)<\/li>\n<li><strong>wpJustification<\/strong> (Emulate WordPerfect 6.x Paragraph Justification)<\/li>\n<li><span style=\"font-weight: bold;\">shapeLayoutLikeWW8<\/span> (Emulate Word 97 Text Wrapping Around Floating Objects)<\/li>\n<\/ul>\n<p>This is the way to craft a job description so you hire only the person you earmarked in advance.  With requirements like the above, no others need apply.<\/p>\n<p>As I&#8217;ve stated before, if this were just a Microsoft specification that they put up on MSDN for their customers to use, this would be par for the course, and not worth my attention.  But this is different.  Microsoft has started calling this a Standard, and has submitted this format to ISO for approval as an International Standard.  It must be judged by those greater expectations.<\/p>\n<hr \/>\n<p>Update:<\/p>\n<p>1\/14\/2007 \u2014 This post was featured on <a href=\"http:\/\/developers.slashdot.org\/article.pl?sid=07\/01\/05\/0041212\">Slashdot<\/a> on 1\/4\/07 where you can go for additional comments and debate.  I&#8217;ve summarized the comments and provided some additional analysis <a href=\"https:\/\/2d823b65bb.nxcli.io\/blog\/2007\/01\/guillaume-portes-redux.html\">here<\/a>.<\/p>\n<p>2\/16\/2007 \u2014 fixed some typo&#8217;s, tightened up some of the phrases.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>You want to hire a new programmer and you have the perfect candidate in mind, your old college roommate, Guillaume Portes. Unfortunately you can&#8217;t just go out and offer him the job. That would get you in trouble with your corporate HR policies which require that you first create a job description, advertise the position, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[6,198],"tags":[],"class_list":{"0":"post-50","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-ooxml","7":"category-popular","8":"entry"},"_links":{"self":[{"href":"https:\/\/www.robweir.com\/blog\/wp-json\/wp\/v2\/posts\/50","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.robweir.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.robweir.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.robweir.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.robweir.com\/blog\/wp-json\/wp\/v2\/comments?post=50"}],"version-history":[{"count":4,"href":"https:\/\/www.robweir.com\/blog\/wp-json\/wp\/v2\/posts\/50\/revisions"}],"predecessor-version":[{"id":334,"href":"https:\/\/www.robweir.com\/blog\/wp-json\/wp\/v2\/posts\/50\/revisions\/334"}],"wp:attachment":[{"href":"https:\/\/www.robweir.com\/blog\/wp-json\/wp\/v2\/media?parent=50"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.robweir.com\/blog\/wp-json\/wp\/v2\/categories?post=50"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.robweir.com\/blog\/wp-json\/wp\/v2\/tags?post=50"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}