Rob Weir, a former IBM engineer, writes about document formats like ODF, algorithms, and humor.
HN commenters cite his Microsoft browser ballot shuffle analysis as a bad, non-uniform shuffle, and quote his "Songs of the IBM" post.
Exhibit A: MS Word "fast save" format: https://web.archive.org/web/20160308183811/http://1017.songtrellisopml.com/whatsbeenwroughtusingpiecetables
https://www.joelonsoftware.com/2008/02/19/why-are-the-microsoft-office-file-formats-so-complicated-and-some-workarounds/
From CS perspective, it's an impressive feat of engineering. They used persistent data structures to optimize in-memory operations, and essentially a write-ahead log of these same structures to optimize commits to disk.
They also created "OLE" technology in the OS+libraries to support embedding live documents one in another - remarkably not unlike Phantom's goals.
The trouble is, they did these in document interchange formats! Office succeeded, and the insane complexity of reverse-engineering its formats actually became a great business "moat".
But decades later, after switching the surface structure from binary insanity to XML, it still contains attributes like `autoSpaceLikeWord95` and `footnoteLayoutLikeWW8` :-(
http://www.robweir.com/blog/2007/01/how-to-hire-guillaume-portes.html
A lot has been written assuming malice in OOXML, but you can also argue it'd require unbelievable competence to evolve their codebase to anything other than this!
If you never needed pervasive dump/load abstractions, your formats map to 1:1 to your semantics, and the only way to evolve is keeping old semantics around, forever...
EDIT: I can't help copy pasting more from the last link:
- lineWrapLikeWord6 (Emulate Word 6.0…
Like running a criminal monopoly.
The problem with monopolies in the technical area is that they have a business reason to be incompatible (otherwise, they'll be cloned). That means they build over complex systems which have finicky compatibility problems.
For a typical example, see this:
http://www.robweir.com/blog/2009/05/update-on-odf-spreadsheet.html
The monopolist's need for obscurity and complexity doesn't just cost the developing company money, it hurts people trying to use their systems or interact with their systems.
Also, it hurts the speed of technological change. When an area is owned by a monopolist, the development investments are moved to an area that isn't owned yet -- paid for by milking the safe income. That means the owned areas (like web browsers) languish.
In short, unethical monopolies hurts my life quality in multiple ways, since I get to work with worse systems (well, not that I work with Windows any longer).
Edit: Grammar, clarity.
It can be extremely biased, and the results can depend on the sort algorithm, because what you're randomizing is the comparison results, not the order. Consider insertion sort: https://en.wikipedia.org/wiki/Insertion_sort
As the list is sorted, elements are inserted from the back by finding the first element that the new element is smaller than. The last element to be inserted is the one at the end of the unsorted array, and, with a random comparator, it has a 50% chance of being "larger" than the biggest of the rest of the elements, and thus remaining at the end of the list.
Microsoft used this technique to "randomize" a list of browsers back in 2010, but, when viewing the page in IE, it ended up putting IE in the last position (out of a set of five browsers) 50% of the time: http://www.robweir.com/blog/2010/02/microsoft-random-browser-ballot.html
Fully respect the history, but often these days as the corp has waned/is nothing more than a bygone great, I can't help but think of Songs of the I.B.M. (https://www.robweir.com/blog/2011/06/songs-of-the-ibm.html)
i.e
Ever onward! ever onward! that's the spirit that has brought us fame. we're big but bigger we will be, we can't fail for all can see, that to serve humanity has been our aim. our products now are known in every zone. our reputation sparkles like a gem. we've fought our way through and new fields we're sure to conquer, too, for the ever onward IBM!
The random return used in the comparison passed into an Array.sort() function would depend on the sort algorithm used by the JavaScript engine, since the comparisons being returned aren't "honest". Is it a merge sort, for example? Plus, it's kinda broken because if X > Y for one permutation, it should follow that Y < X if those same values are passed back in, and in this case, they' really not.
MS took advantage of this when selecting a random browser for the browser ballot years ago.
http://www.robweir.com/blog/2010/02/microsoft-random-browser-ballot.html
There are places where it says the equivalent of "Works the same as Word 95" [3], but does not specify in the specification what that means.
It's essentially a serialization of the binary format to XML.
ODF 1.4 is around 1,100 pages across all 4 parts whereas OOXML is over 6,000.
[1] https://stephesblog.blogs.com/my_weblog/2007/08/microsofts-fail.html
[2] https://ooxmlisdefectivebydesign.blogspot.com/2007/08/microsoft-office-xml-formats-defective.html
[3] https://www.robweir.com/blog/2007/01/how-to-hire-guillaume-portes.html