<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8697429285282980308</id><updated>2011-10-06T12:14:43.243-07:00</updated><title type='text'>The Fastware Project</title><subtitle type='html'>Discussion of authoring and content for Scott Meyers' book on producing &lt;i&gt;fast&lt;/i&gt; software</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://fastwareproject.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://fastwareproject.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Scott Meyers</name><uri>http://www.blogger.com/profile/05280964633768289328</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YMc9zPJlncw/S33UIUUqQGI/AAAAAAAAADg/IthdyZwO5_Q/S220/sdm-small.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>39</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8697429285282980308.post-9196525490182101481</id><published>2010-07-19T14:56:00.000-07:00</published><updated>2010-07-19T14:56:14.562-07:00</updated><title type='text'>Blog End</title><content type='html'>When I started this blog, my short-term goal was to have a place to think out loud about the uncertainty I felt as an author of technical material in a publishing world that was on the brink of making the transition from black-ink-on-white-paper to whatever comes next. I can't say I'm now feeling a lot less uncertain, and in fact the pace of change in the publishing world has only accelerated, as electronic publication assumes increasing importance, but I no longer feel as angsty about it.&amp;nbsp; This counts as progress.&lt;br /&gt;&lt;br /&gt;My longer-term goal was to engage in a dialogue with people interested in the production of fast software systems such that I could do a better job with the content of &lt;i&gt;Fastware!&lt;/i&gt;.&amp;nbsp; Doing that, however, requires that I write up reasonable initial blog posts to spur discussion, and I've found that this is not something I enjoy.&amp;nbsp; To be honest, I view it as overhead.&amp;nbsp; Given a choice between doing background research to learn more about a topic (typically reading something, but possibly also viewing a technical presentation, listening to a technical podcast, or exchanging email with a technical expert) or writing up a blog entry to open discussion, I find myself almost invariably doing the research. One reason for this is that I feel obliged to have done some research before I post, anyway, and I typically find that once I'm done with the research, writing something up as a standalone blog entry is an enterprise that consumes more time than I'm willing to give it.&amp;nbsp; It's typically easier to write the result up in the form of a technical presentation, then give the presentation and get feedback that way.&amp;nbsp; This, for example, is what I did with &lt;a href="http://fastwareproject.blogspot.com/2010/05/notes-for-portland-code-camp-talk-now.html"&gt;my work on CPU caches&lt;/a&gt;.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;My work on &lt;i&gt;Fastware!&lt;/i&gt; will continue, but I don't expect to make any more blog entries about it here.&amp;nbsp; Instead, I'll fall back on my usual policy of not making an announcement about anything until whatever it is I have to announce is fairly well-baked.&amp;nbsp; If you're interested in announcements of those type, I suggest you follow my &lt;a href="http://scottmeyers.blogspot.com/"&gt;"Professional Announcments" blog&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Scott&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8697429285282980308-9196525490182101481?l=fastwareproject.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fastwareproject.blogspot.com/feeds/9196525490182101481/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8697429285282980308&amp;postID=9196525490182101481&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/9196525490182101481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/9196525490182101481'/><link rel='alternate' type='text/html' href='http://fastwareproject.blogspot.com/2010/07/blog-end.html' title='Blog End'/><author><name>Scott Meyers</name><uri>http://www.blogger.com/profile/05280964633768289328</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YMc9zPJlncw/S33UIUUqQGI/AAAAAAAAADg/IthdyZwO5_Q/S220/sdm-small.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8697429285282980308.post-819966694014605815</id><published>2010-05-21T15:53:00.000-07:00</published><updated>2010-05-21T15:53:23.784-07:00</updated><title type='text'>Notes for Portland Code Camp Talk Now Available</title><content type='html'>My presentation isn't until tomorrow, but I somehow managed to finish the materials for it today.&amp;nbsp; If you're interested in what I have to say on the topic "CPU Caches and Why You Care," I encourage you to &lt;a href="http://aristeia.com/TalkNotes/PDXCodeCamp2010.pdf"&gt;download the presentation materials&lt;/a&gt; (PDF) and take a look.&amp;nbsp; If you find that you have something to say in return, I encourage you to post your comments here or to send me email directly (&lt;a href="mailto:smeyers@aristeia.com"&gt;smeyers@aristeia.com&lt;/a&gt;).&amp;nbsp; &lt;br /&gt;&lt;br /&gt;I'd like to say a lot more than is in the presentation (and certainly there's a lot more to be said), but the length of the presentation is only 75 minutes, and I'm shooting to talk for only about an hour to allow time for questions.&lt;br /&gt;&lt;br /&gt;I'll face a similar constraint when I write about hardware caches in &lt;i&gt;Fastware!&lt;/i&gt;, because I can devote only part of one chapter to the topic, and, as Ulrich Drepper demonstrated in &lt;a href="http://people.redhat.com/drepper/cpumemory.pdf"&gt;&lt;i&gt;What Every Programmer Should Know About Memory&lt;/i&gt;&lt;/a&gt;, there's an enormous number of things that can be said.&amp;nbsp; If you have comments on what developers really need to understand (because it is likely to affect how they design and implement their systems), please let me know.&lt;br /&gt;&lt;br /&gt;Scott&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8697429285282980308-819966694014605815?l=fastwareproject.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fastwareproject.blogspot.com/feeds/819966694014605815/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8697429285282980308&amp;postID=819966694014605815&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/819966694014605815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/819966694014605815'/><link rel='alternate' type='text/html' href='http://fastwareproject.blogspot.com/2010/05/notes-for-portland-code-camp-talk-now.html' title='Notes for Portland Code Camp Talk Now Available'/><author><name>Scott Meyers</name><uri>http://www.blogger.com/profile/05280964633768289328</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YMc9zPJlncw/S33UIUUqQGI/AAAAAAAAADg/IthdyZwO5_Q/S220/sdm-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8697429285282980308.post-1592414347030462691</id><published>2010-05-13T16:51:00.000-07:00</published><updated>2010-05-13T16:53:41.351-07:00</updated><title type='text'>A Thought About Minimizing System Latency</title><content type='html'>When programmers think about optimizing things, they often think about optimizing &lt;i&gt;code&lt;/i&gt;.&amp;nbsp; After all, code is where they live.&amp;nbsp; It's what they do.&amp;nbsp; If it's not the code that's to be optimized, what is?&amp;nbsp; I confess that this was my way of thinking for many years.&amp;nbsp; &lt;i&gt;Many&lt;/i&gt; years. Want to know how to make things faster?&amp;nbsp; Fire up the profiler!&lt;br /&gt;&lt;br /&gt;I no longer think that way.&amp;nbsp; Now I think about optimizing the &lt;i&gt;system&lt;/i&gt;.&amp;nbsp; (This recognition, in fact, has convinced me that I'm going to have to give &lt;i&gt;Fastware!&lt;/i&gt; a new subtitle. It's currently "Straight Talk about Fast Code," which I think has a nice ring to it, but that's too codecentric.&amp;nbsp; I'll have to find a way to say something catchy that corresponds to "Straight Talk about Fast Systems." But I digress.)&lt;br /&gt;&lt;br /&gt;In rare cases, the system is a single executable over which you have complete control, so, sure, fire up the profiler. More commonly, the system consists of multiple cooperating components, often broken across multiple executables.&amp;nbsp; Web-based systems, for example, may have different components handling network traffic, business logic, database queries, etc.&amp;nbsp; In that case, if the system is slow, it's the &lt;i&gt;system&lt;/i&gt; that's slow, so before you fire up the profiler, you need to know where to point it.&lt;br /&gt;&lt;br /&gt;At first glance, the general way you approach this problem is to start a timer when an event brings the system into action (e.g., a browser sends a request to your web site), stop the timer when the system produces the appropriate response (e.g., packets are sent back to the browser), then look at how much time was taken in the various parts of the system.&amp;nbsp; The problem is that in many cases, this is the wrong way to think about things.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://stevesouders.com/bio.php"&gt;Steve Souders &lt;/a&gt;has done a great job of demonstrating one aspect of this idea as it applies to web sites, describing in various forms (&lt;span id="goog_2027297713"&gt;&lt;/span&gt;&lt;a href="http://www.amazon.com/gp/product/B0028N4WHY?ie=UTF8&amp;amp;tag=scottmeyersho-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=B0028N4WHY"&gt;book&lt;/a&gt;&lt;span id="goog_2027297714"&gt;&lt;/span&gt;, &lt;a href="http://queue.acm.org/detail.cfm?id=1466450"&gt;article&lt;/a&gt;, &lt;a href="http://www.youtube.com/watch?v=BTHvs3V8DBA"&gt;video&lt;/a&gt;) how he derived what he calls the &lt;i&gt;Performance Golden Rule&lt;/i&gt;:&lt;br /&gt;&lt;blockquote&gt;Only 10-20% of the end user response time is spent downloading the HTML document.&amp;nbsp; The other 80-90% is spent downloading all the components in the page.&lt;/blockquote&gt;His approach takes the view that you start the timer when the initial request for an HTML page comes in, but you don't stop it until everything on the page has been rendered in the browser.&amp;nbsp; From a user's point of view, this is much more reasonable.&amp;nbsp; After all, until the page has been displayed, he or she is still waiting, even if the web site itself thinks the job was finished long ago.&lt;br /&gt;&lt;br /&gt;One of the most interesting implications of this observation is that a critical part of the user's perception of the system's performance is determined by software (in this case, the browser) over which "the system" has no control.&amp;nbsp; For example, a big part of how fast a site like Yahoo (where Souders worked when he wrote &lt;a href="http://www.amazon.com/gp/product/B0028N4WHY?ie=UTF8&amp;amp;tag=scottmeyersho-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=B0028N4WHY"&gt;&lt;i&gt;High Performance Web Sites&lt;/i&gt;&lt;/a&gt;;&amp;nbsp; he's at Google now) seems to be is determined by the user's browser, and of course Yahoo has no control over which browser the user has chosen to use.&amp;nbsp; The idea that the performance of a system is influenced by software over which it has no control generalizes.&amp;nbsp; Even native applications, for example, are typically at some degree of mercy with respect to the libraries they link with and the operating system they run on.&lt;br /&gt;&lt;br /&gt;But that's an issue for another day.&amp;nbsp; What I want to pose now is the idea that when determining the latency of an interactive system, the timer should not be started when something triggers the system, it should be triggered when the person using that system &lt;i&gt;decides&lt;/i&gt; that they want to do something.&amp;nbsp; Once you've decided you want to do something, everything between then and when you actually get it done is wait time, even if during that time you're typing in commands or pulling down menus or wading through search results, etc.&amp;nbsp; One of the nice things about thinking about things this way is that it offers a framework for thinking about such disparate performance issues as UI design (minimize the time needed to get from &lt;b&gt;deciding &lt;/b&gt;what you want to do and &lt;b&gt;expressing &lt;/b&gt;it) and prefetching and speculative execution (both of which entail satisfying requests that have not yet been expressed).&lt;br /&gt;&lt;br /&gt;Scott&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8697429285282980308-1592414347030462691?l=fastwareproject.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fastwareproject.blogspot.com/feeds/1592414347030462691/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8697429285282980308&amp;postID=1592414347030462691&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/1592414347030462691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/1592414347030462691'/><link rel='alternate' type='text/html' href='http://fastwareproject.blogspot.com/2010/05/thought-about-minimizing-system-latency.html' title='A Thought About Minimizing System Latency'/><author><name>Scott Meyers</name><uri>http://www.blogger.com/profile/05280964633768289328</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YMc9zPJlncw/S33UIUUqQGI/AAAAAAAAADg/IthdyZwO5_Q/S220/sdm-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8697429285282980308.post-6967719883516404215</id><published>2010-05-13T10:44:00.000-07:00</published><updated>2010-05-13T23:09:05.405-07:00</updated><title type='text'>Fastware!-Related Talk at Portland Code Camp</title><content type='html'>After a year-long digression to work on C++0x, I'm finally able to get back to &lt;i&gt;Fastware!&lt;/i&gt;, and on May 22 (a week from Saturday), I expect to have something to show for it.&amp;nbsp; I'll be giving a talk at &lt;a href="http://www.portlandcodecamp.org/"&gt;Portland Code Camp&lt;/a&gt;, in Portland, Oregon. &amp;nbsp; The topic will be&amp;nbsp;&lt;a href="http://www.portlandcodecamp.org/2010/Sessions/Details/77"&gt;CPU Caches and Why You Care&lt;/a&gt;, and the material will be primarily taken from the &lt;i&gt;Fastware!&lt;/i&gt; chapter on hardware, although I also plan to touch on the impact of cache considerations on algorithm and data structure design.&lt;br /&gt;&lt;br /&gt;Like all Code Camps, Portland Code Camp is free, so if you live near Portland, Oregon, and don't mind devoting a Saturday to all things code-related, I encourage you to &lt;a href="http://devsat.eventbrite.com/"&gt;register&lt;/a&gt;, then come by my session for a crash course in CPU caches.&amp;nbsp; It should be interesting to see how it goes, given that the talk currently exists only in my head.&amp;nbsp; But in my head, it's &lt;i&gt;really &lt;/i&gt;good :-)&lt;br /&gt;&lt;br /&gt;Scott&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8697429285282980308-6967719883516404215?l=fastwareproject.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fastwareproject.blogspot.com/feeds/6967719883516404215/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8697429285282980308&amp;postID=6967719883516404215&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/6967719883516404215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/6967719883516404215'/><link rel='alternate' type='text/html' href='http://fastwareproject.blogspot.com/2010/05/fastware-related-talk-at-portland-code.html' title='&lt;i&gt;Fastware!&lt;/i&gt;-Related Talk at Portland Code Camp'/><author><name>Scott Meyers</name><uri>http://www.blogger.com/profile/05280964633768289328</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YMc9zPJlncw/S33UIUUqQGI/AAAAAAAAADg/IthdyZwO5_Q/S220/sdm-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8697429285282980308.post-791418195645539878</id><published>2010-05-05T16:42:00.000-07:00</published><updated>2010-05-05T16:47:48.887-07:00</updated><title type='text'>"New Publishing Project" Unveiled</title><content type='html'>In February, I said that I'd been spending a lot of time on a new publishing project and that I'd say more here when there was more to say.&amp;nbsp; There's now more to say, but, because I recently said it to my mailing list (which I've since migrated to &lt;a href="http://scottmeyers.blogspot.com/"&gt;a blog for my professional announcements&lt;/a&gt;), I'll make this posting brief and simply refer you to &lt;a href="http://scottmeyers.blogspot.com/2010/04/my-training-materials-for-c0x-etc-now.html"&gt;my longer posting there&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_YMc9zPJlncw/S-IBxxbC5NI/AAAAAAAAAEA/KDhkfZUz1lw/s1600/C%2B%2B0xThumbnail.gif" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_YMc9zPJlncw/S-IBxxbC5NI/AAAAAAAAAEA/KDhkfZUz1lw/s320/C%2B%2B0xThumbnail.gif" /&gt;&lt;/a&gt;&lt;/div&gt;I've started publishing &lt;a href="http://www.aristeia.com/Licensing/personalUse.html"&gt;annotated versions of my training materials &lt;/a&gt;on selected topics.&amp;nbsp; Currently there are materials on &lt;a href="http://www.artima.com/shop/overview_of_the_new_cpp"&gt;C++0x&lt;/a&gt; and on &lt;a href="http://www.artima.com/shop/effective_cpp_in_an_embedded_environment"&gt;making effective use of C++ in embedded systems&lt;/a&gt;, and soon my materials on improving software quality (regardless of your programming language) will become available.&amp;nbsp; Viewed as a traditional publication, &lt;a href="http://pkisensee.spaces.live.com/Blog/cns%213C84486A9D832EB7%21813.entry"&gt;Pete Isensee described the C++0x materials &lt;/a&gt;as "&lt;span id="ctl00_MainContentPlaceholder_ctl01_ctl00_lblEntry"&gt;not a book, and not a slide show -- it's something in between," but there are two untraditional characteristics of these materials that I hope will make them appealing:&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_YMc9zPJlncw/S-ICqGs9w9I/AAAAAAAAAEg/UIXC0fJyFLw/s1600/EmbeddedThumbnail.gif" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_YMc9zPJlncw/S-ICqGs9w9I/AAAAAAAAAEg/UIXC0fJyFLw/s320/EmbeddedThumbnail.gif" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;span id="ctl00_MainContentPlaceholder_ctl01_ctl00_lblEntry"&gt;&lt;b&gt;No DRM, plus a very flexible license&lt;/b&gt;.&amp;nbsp; Make as many copies as you want, mark them up in any way you like, print them till your toner runs dry, that's all fine.&amp;nbsp; Pretty much the only restriction is that the materials are for your personal use only, so please, no sharing.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span id="ctl00_MainContentPlaceholder_ctl01_ctl00_lblEntry"&gt;&lt;b&gt;Free updates for life&lt;/b&gt;.&amp;nbsp; I maintain my training materials for my own use, and you're entitled to every revised version I come out with. There will never be a "second edition" to buy anew.&amp;nbsp; Pay once, and you get free updates as long as I produce them.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_YMc9zPJlncw/S-IC0udMuuI/AAAAAAAAAEo/Kb8IK91oQ80/s1600/BSThumbnail.gif" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_YMc9zPJlncw/S-IC0udMuuI/AAAAAAAAAEo/Kb8IK91oQ80/s320/BSThumbnail.gif" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span id="ctl00_MainContentPlaceholder_ctl01_ctl00_lblEntry"&gt;There's more to the sales pitch, but you can get the full spiel &lt;a href="http://www.aristeia.com/Licensing/personalUse.html"&gt;here&lt;/a&gt;.&amp;nbsp; The complete background story is available &lt;a href="http://scottmeyers.blogspot.com/2010/04/my-training-materials-for-c0x-etc-now.html"&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span id="ctl00_MainContentPlaceholder_ctl01_ctl00_lblEntry"&gt;From a &lt;i&gt;Fastware!&lt;/i&gt; point of view, the fact that I can now put development of C++0x materials and preparing them for publication behind me means I can finally get back to work on &lt;i&gt;Fastware!&lt;/i&gt;, and in fact I've already done so.&amp;nbsp; I'm currently working on a presentation entitled "CPU Caches and Why You Care," which is directly tied to material I plan to put in &lt;i&gt;Fastware!&lt;/i&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span id="ctl00_MainContentPlaceholder_ctl01_ctl00_lblEntry"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span id="ctl00_MainContentPlaceholder_ctl01_ctl00_lblEntry"&gt;Scott&lt;/span&gt;&lt;br /&gt;&lt;span id="ctl00_MainContentPlaceholder_ctl01_ctl00_lblEntry"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span id="ctl00_MainContentPlaceholder_ctl01_ctl00_lblEntry"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span id="ctl00_MainContentPlaceholder_ctl01_ctl00_lblEntry"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8697429285282980308-791418195645539878?l=fastwareproject.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fastwareproject.blogspot.com/feeds/791418195645539878/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8697429285282980308&amp;postID=791418195645539878&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/791418195645539878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/791418195645539878'/><link rel='alternate' type='text/html' href='http://fastwareproject.blogspot.com/2010/05/new-publishing-project-unveiled.html' title='&quot;New Publishing Project&quot; Unveiled'/><author><name>Scott Meyers</name><uri>http://www.blogger.com/profile/05280964633768289328</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YMc9zPJlncw/S33UIUUqQGI/AAAAAAAAADg/IthdyZwO5_Q/S220/sdm-small.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_YMc9zPJlncw/S-IBxxbC5NI/AAAAAAAAAEA/KDhkfZUz1lw/s72-c/C%2B%2B0xThumbnail.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8697429285282980308.post-6240608271755250654</id><published>2010-02-18T15:55:00.000-08:00</published><updated>2010-02-18T15:57:23.490-08:00</updated><title type='text'>Updated Fastware!-Related Information Sources</title><content type='html'>Almost exactly one year ago, I uploaded an Excel spreadsheet summarizing sources of information I'd consulted as research for what I still claim will become a book.  The blog has been silent since my promise last July to return to work on the book later that month, and while it's true that other projects have soaked up most of my time since then, I have managed to add some sources to the spreadsheet.   I've uploaded the revised version, and, as before, you'll find a link to that spreadsheet at the &lt;a href="http://fastwarebook.com/"&gt;&lt;span style="font-style: italic;"&gt;Fastware!&lt;/span&gt; web site&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I still plan to get back to &lt;span style="font-style: italic;"&gt;Fastware!&lt;/span&gt; as my primary project soon, but that's been the case for months, so I'm not going to make any predictions regarding when it will actually take place.  I will say that one of the things taking up a lot of my time has been a new publishing project that I expect to be able to announce within the next few weeks.  It's not specifically related to &lt;span style="font-style: italic;"&gt;Fastware!&lt;/span&gt;, but it does relate to the publishing-related issues I've raised in this blog. &lt;br /&gt;&lt;br /&gt;When there's more to say, I'll say it here.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8697429285282980308-6240608271755250654?l=fastwareproject.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fastwareproject.blogspot.com/feeds/6240608271755250654/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8697429285282980308&amp;postID=6240608271755250654&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/6240608271755250654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/6240608271755250654'/><link rel='alternate' type='text/html' href='http://fastwareproject.blogspot.com/2010/02/updated-fastware-related-information.html' title='Updated &lt;em&gt;Fastware!&lt;/em&gt;-Related Information Sources'/><author><name>Scott Meyers</name><uri>http://www.blogger.com/profile/05280964633768289328</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YMc9zPJlncw/S33UIUUqQGI/AAAAAAAAADg/IthdyZwO5_Q/S220/sdm-small.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8697429285282980308.post-8275974465498627365</id><published>2009-07-13T10:03:00.000-07:00</published><updated>2009-07-13T10:08:40.930-07:00</updated><title type='text'>Fastware! has to Time-Share</title><content type='html'>For better or for worse, my work on &lt;span style="font-style: italic;"&gt;Fastware!&lt;/span&gt; must sometimes give way to other duties I have, and one of the obligations I signed up for at the beginning of the year was development of a new training course on &lt;a href="http://en.wikipedia.org/wiki/C%2B%2B0x"&gt;C++0x&lt;/a&gt;.  I expected that to take about a month.  Oops.  Development of a full draft (&lt;span style="font-style: italic;"&gt;draft!&lt;/span&gt;) turned out to take closer to three months, which is why this blog has been silent since mid-April.  I expect to get back to &lt;span style="font-style: italic;"&gt;Fastware!&lt;/span&gt; later this month, so worry not, the project is still very much alive.&lt;br /&gt;&lt;br /&gt;Should you happen to have an interest in the C++0x training course I'm finishing up, feel free to visit &lt;a href="http://www.aristeia.com/C++0x.html"&gt;its web page&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8697429285282980308-8275974465498627365?l=fastwareproject.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fastwareproject.blogspot.com/feeds/8275974465498627365/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8697429285282980308&amp;postID=8275974465498627365&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/8275974465498627365'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/8275974465498627365'/><link rel='alternate' type='text/html' href='http://fastwareproject.blogspot.com/2009/07/fastware-has-to-time-share.html' title='&lt;em&gt;Fastware!&lt;/em&gt; has to Time-Share'/><author><name>Scott Meyers</name><uri>http://www.blogger.com/profile/05280964633768289328</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YMc9zPJlncw/S33UIUUqQGI/AAAAAAAAADg/IthdyZwO5_Q/S220/sdm-small.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8697429285282980308.post-1552302264236257915</id><published>2009-04-12T19:05:00.000-07:00</published><updated>2009-04-12T19:10:38.324-07:00</updated><title type='text'>TOC Talk Now Available Online</title><content type='html'>The talk I gave at the &lt;a href="http://www.toccon.com/toc2009"&gt;Tools of Change in Publishing Conference&lt;/a&gt; in February is now available online.  It runs about 46 minutes.  If you've been reading this blog, you won't get anything new from the talk, but if you're interested in the "live" presentation, you can find it &lt;a href="http://blip.tv/file/1976570"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8697429285282980308-1552302264236257915?l=fastwareproject.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fastwareproject.blogspot.com/feeds/1552302264236257915/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8697429285282980308&amp;postID=1552302264236257915&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/1552302264236257915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/1552302264236257915'/><link rel='alternate' type='text/html' href='http://fastwareproject.blogspot.com/2009/04/toc-talk-now-available-online.html' title='TOC Talk Now Available Online'/><author><name>Scott Meyers</name><uri>http://www.blogger.com/profile/05280964633768289328</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YMc9zPJlncw/S33UIUUqQGI/AAAAAAAAADg/IthdyZwO5_Q/S220/sdm-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8697429285282980308.post-7469472856601777225</id><published>2009-03-18T14:16:00.000-07:00</published><updated>2009-03-18T14:38:08.557-07:00</updated><title type='text'>Jakob Nielsen Post on Kindle-Friendly Content</title><content type='html'>The &lt;a href="http://toc.oreilly.com/2009/03/jakob-nielsen-kindle-content-m.html"&gt;TOC Blog&lt;/a&gt; pointed me to Jakob Nielsen's recent post, "&lt;a href="http://www.useit.com/alertbox/kindle-writing.html"&gt;Kindle Content Design&lt;/a&gt;."  Nielsen raises a number of interesting issues, and in general I think we're in violent agreement, but his post ends with this:&lt;br /&gt;&lt;blockquote&gt;Since I started writing Alertbox in 1995, it's been a recurring theme to &lt;strong&gt;design for the medium&lt;/strong&gt;. In the beginning, this meant "don't design your website like a glossy brochure." (I.e., &lt;a href="http://www.useit.com/alertbox/990124.html" title="Alertbox: Differences Between Print Design and Web Design" class="old"&gt;print design is different than online design&lt;/a&gt;.) &lt;p&gt; For Kindle, it's certainly unacceptable to simply &lt;a href="http://www.useit.com/alertbox/print-vs-online-content.html" title="Alertbox: Writing Style for Print vs. Web" class="old"&gt;repurpose print content&lt;/a&gt;. But you can't repurpose website content, either. For good Kindle usability, you have to design for the Kindle. Write Kindle-specific headlines and create Kindle-specific article structures. &lt;/p&gt;&lt;/blockquote&gt;I fully agree with the part about designing for the medium, but I don't think Kindle is a medium in and of itself.  There are a number of other dedicated book-reading devices, and my guess is that they are similar enough to one another that it's possible to design for the entire category.   As an author, I don't want to try to create content on a device-by-device basis, I want to do it on a device-category-by-device-category basis.  That may not yield optimal content presentation for every device, but it should yield acceptable presentation for devices I know about as well as devices I don't know about (e.g., that are introduced after I've finished writing).  Yes, my software development roots keep showing:  I approach cross-platform content authoring the same way I approach cross-platform software authoring.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8697429285282980308-7469472856601777225?l=fastwareproject.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fastwareproject.blogspot.com/feeds/7469472856601777225/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8697429285282980308&amp;postID=7469472856601777225&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/7469472856601777225'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/7469472856601777225'/><link rel='alternate' type='text/html' href='http://fastwareproject.blogspot.com/2009/03/jakob-nielsen-post-on-kindle-friendly.html' title='Jakob Nielsen Post on Kindle-Friendly Content'/><author><name>Scott Meyers</name><uri>http://www.blogger.com/profile/05280964633768289328</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YMc9zPJlncw/S33UIUUqQGI/AAAAAAAAADg/IthdyZwO5_Q/S220/sdm-small.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8697429285282980308.post-1038188537053286638</id><published>2009-03-03T21:13:00.000-08:00</published><updated>2009-03-03T21:14:04.236-08:00</updated><title type='text'>Saving Myself from Physical Formatting</title><content type='html'>I've been reviewing my FrameMaker source files for &lt;span style="font-style: italic;"&gt;Fastware!&lt;/span&gt;, looking out for single-sourcing no-nos.  High on the list is the use of physical styles instead of logical ones, the poster child for which is the use of italics to style text instead of a logical style like "Book Title."  The problem is that the use of italics can be for emphasis, for the title of a publication, for the introduction of a new term, and more.  A well-styled manuscript will use only logical style names -- never raw italics. &lt;br /&gt;&lt;br /&gt;Alas, nearly every authoring system I know goes out of its way to make it easy to italicize text.  WYSIWYG systems (at least those on Windows) define ^I to mean "italicize the selection", HTML offers &lt;span style="font-family: arial;"&gt;\i&lt;/span&gt;, LaTeX  has &lt;span style="font-family: arial;"&gt;\it&lt;/span&gt;, reST offers &lt;span style="font-family: arial;"&gt;*text*&lt;/span&gt;, etc.  It's a similar situation for making things bold or underlined,  both of which are also physical styles and should thus be avoided. &lt;br /&gt;&lt;br /&gt;From what I can tell, there is no notion of "italicization" in the DocBook or DTBook schemas, and the &lt;a href="http://www.oxygenxml.com/wysiwyg_docbook_editor.html"&gt;screen shot for oXygen's XML Author for DocBook&lt;/a&gt; shows a toolbar button only to emphasize&lt;span style="font-style: italic;"&gt; &lt;/span&gt;text, not italicize it.  Score one for XML.&lt;br /&gt;&lt;br /&gt;I've decided to use FrameMaker, not XML, so I'll be working in WYSIWYGland.  I'm still committed to using only logical styles, and although I'm a pretty disciplined guy, I have no illusions that I'm perfect.  If I don't find a way to keep myself from doing it, I know I'll occasionally type ^I (or ^B for bold) in FrameMaker without thinking about it.  I won't notice my formatting &lt;span style="font-style: italic;"&gt;faux pas &lt;/span&gt;(note use of italics to indicate a foreign expression, which is quite different from using them to emphasize something or to indicate a book title), because everything in my WYSIWYG world will look right.  The situation would likely be the same in an italics-supporting markup-based world such as LaTeX or reST. &lt;br /&gt;&lt;br /&gt;Fortunately, FrameMaker's keyboard and menu command set is determined by configuration files, so, with some guidance from the kind folks at the &lt;a href="http://www.adobeforums.com/webx/.ee6b312/"&gt;FrameMaker forum&lt;/a&gt;, I was able to excise keyboard and toolbar commands for  italics, bold, and underlining.  Now, should I foolishly try to italicize something via the errant ^I, nothing happens.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8697429285282980308-1038188537053286638?l=fastwareproject.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fastwareproject.blogspot.com/feeds/1038188537053286638/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8697429285282980308&amp;postID=1038188537053286638&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/1038188537053286638'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/1038188537053286638'/><link rel='alternate' type='text/html' href='http://fastwareproject.blogspot.com/2009/03/saving-myself-from-physical-formatting.html' title='Saving Myself from Physical Formatting'/><author><name>Scott Meyers</name><uri>http://www.blogger.com/profile/05280964633768289328</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YMc9zPJlncw/S33UIUUqQGI/AAAAAAAAADg/IthdyZwO5_Q/S220/sdm-small.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8697429285282980308.post-6114007220880218436</id><published>2009-03-03T08:55:00.000-08:00</published><updated>2009-03-03T09:53:15.227-08:00</updated><title type='text'>Experience Report:  My C++ Books on Kindle</title><content type='html'>I recently announced to &lt;a href="http://www.aristeia.com/MailingList/"&gt;my mailing list&lt;/a&gt; that, unbeknownst to me (and, as it turns out, my editor), two of my C++ books have been made available on Kindle:&lt;br /&gt;&lt;blockquote&gt;Two of my books -- Effective C++ and Effective STL -- are now available for Amazon's Kindle. I haven't seen these editions myself, so I can't tell you anything about them. Since I don't have a Kindle, this is unlikely to change anytime soon. If you try these editions, please let me know what you think of them. You'll find links to the Kindle editions of these books at &lt;a href="http://www.aristeia.com/books.html"&gt;http://www.aristeia.com/books.html&lt;/a&gt; .&lt;/blockquote&gt;Shortly thereafter, &lt;a href="http://www.gotw.ca/"&gt;Herb Sutter&lt;/a&gt; wrote me as follows:&lt;br /&gt;&lt;blockquote&gt;I downloaded a Kindle sample of one of your books, which included enough to see some source code examples. In general it looks good, except for one thing: Source code is rendered badly. The text is clear, but the two problems are:&lt;br /&gt;&lt;br /&gt;a) Line length (though not as bad as narrow magazine columns &amp;amp; what iPhone would be like): Medium-long lines have bad wraps that make the examples a pain to read. But line length is probably going to be an issue for all small-form-factor devices.&lt;br /&gt;&lt;br /&gt;b) Proportional font =&gt; comments don’t line up. It’s possible to get fixed-width fonts on Kindle but you have to try hard and use the &amp;lt;pre&gt; tag explicitly. For more, see &lt;a href="http://www.knowing.net/index.php/2009/02/09/photo-kindle-font-improvements/"&gt;Larry O’Brien’s recent blog note&lt;/a&gt; about targeting technical docs to Kindle, including the comment about getting Greek text to work by explicitly using UTF-8.&lt;br /&gt;&lt;/blockquote&gt;Herb included a couple of quick-and-dirty screen shots, including this one:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_YMc9zPJlncw/SabhHQ2SVyI/AAAAAAAAADQ/AdTqPK-tOvc/s1600-h/IMG_0197.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 300px; height: 400px;" src="http://4.bp.blogspot.com/_YMc9zPJlncw/SabhHQ2SVyI/AAAAAAAAADQ/AdTqPK-tOvc/s400/IMG_0197.jpg" alt="" id="BLOGGER_PHOTO_ID_5307176725800703778" border="0" /&gt;&lt;/a&gt;The code examples, which I'd carefully formatted for the font and page width of the printed book, were apparently moved to the Kindle without any reformatting consideration, so the Kindle tossed in new line breaks wherever it felt they were needed.  The result, unsurprisingly, is awful.  This is consistent with my belief that the chances of writing a book with anything beyond straight prose that looks good on multiple devices is close to zero.  The more special formatting that's needed (e.g., for recipes, poetry, code, etc.), the more care an author (and his or her publisher) is likely to need to take.&lt;br /&gt;&lt;br /&gt;Bearing in mind that my recent C++ books use two ink colors (black plus a red highlight color for places where I want to focus readers' attention), Herb wrote:&lt;br /&gt;&lt;blockquote&gt;Some text that I think you had as red or some other color looks gray on Kindle. It’s still readable, if a little less distinct. Probably the best that can be done given that Kindle 1 only has a 4-level gray scale. It’d probably look slightly better on a Kindle 2 with a 16-level gray scale, but only slightly since you do have to make it gray enough to be distinct and so I’d imagine you couldn’t just use levels 14 and 16 for example.&lt;br /&gt;&lt;/blockquote&gt;I discussed the problem of writing for devices with different capabilities such as color in &lt;a href="http://fastwareproject.blogspot.com/2008/11/conditional-formatting.html"&gt;an earlier post&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Herb concluded:&lt;br /&gt;&lt;blockquote&gt;If you’re serious about thinking of targeting devices like Kindle or iPhone, it’s worth having one.&lt;br /&gt;&lt;/blockquote&gt;I replied:&lt;br /&gt;&lt;blockquote&gt;Practically speaking, I'm sure you're right, but this is the kind of thing I'd like my publisher to address for me.  I want to focus on content, not device-dependent presentation issues.  One of the things my publisher should do is investigate the landscape of output devices, then give me advice on what I should or should not do in my ms to keep it cross-platform-friendly.&lt;br /&gt;&lt;/blockquote&gt;I thank Herb for his mini-review of my books on Kindle and for his permission to use his material here.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8697429285282980308-6114007220880218436?l=fastwareproject.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fastwareproject.blogspot.com/feeds/6114007220880218436/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8697429285282980308&amp;postID=6114007220880218436&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/6114007220880218436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/6114007220880218436'/><link rel='alternate' type='text/html' href='http://fastwareproject.blogspot.com/1999/03/experience-report-my-c-books-on-kindle.html' title='Experience Report:  My C++ Books on Kindle'/><author><name>Scott Meyers</name><uri>http://www.blogger.com/profile/05280964633768289328</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YMc9zPJlncw/S33UIUUqQGI/AAAAAAAAADg/IthdyZwO5_Q/S220/sdm-small.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_YMc9zPJlncw/SabhHQ2SVyI/AAAAAAAAADQ/AdTqPK-tOvc/s72-c/IMG_0197.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8697429285282980308.post-6454083886220525983</id><published>2009-03-02T14:55:00.000-08:00</published><updated>2009-03-02T14:56:35.025-08:00</updated><title type='text'>IO</title><content type='html'>When I first started thinking about &lt;span style="font-style: italic;"&gt;Fastware!&lt;/span&gt;, I knew I'd have a chapter on IO, but I was concerned that it would take me a while to have much to say about the topic, and I expected it to be one of the last chapters I attacked.  Since then, my view has changed, and in part due to the excitement I got from reading Tom Leighton's article in &lt;span style="font-style: italic;"&gt;CACM&lt;/span&gt; (and &lt;span style="font-style: italic;"&gt;ACM Queue&lt;/span&gt; -- sometimes recycling isn't so great, sigh) about &lt;a href="http://doi.acm.org/10.1145/1461928.1461944"&gt;improving performance using the Internet&lt;/a&gt;, I'm now ready to draft a chapter on IO.&lt;br /&gt;&lt;br /&gt;It's an interesting question to try to define IO.  Technically, IO is probably anything that communicates with something off-chip, so accessing main memory can be considered IO, although I don't plan to treat it that way.  My current plan is to focus on disk and network issues, but even there things are beginning to get fuzzy, because &lt;a href="http://en.wikipedia.org/wiki/Solid-state_drive"&gt;solid state drives&lt;/a&gt; use a traditional disk API, but don't have anything akin to rotational latency.  At some point I may decide to create a chapter focusing on storage  (cache, memory, and "disks," regardless of technology) and another on network IO, but for now, the traditional view that IO largely means disk and network access seems reasonable to me.  I welcome comments on the best way to organize these issues.&lt;br /&gt;&lt;br /&gt;So what are the topics relevant to the creation of sizzling disk and network IO?  Here are the main ones on my list:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Prefetching, buffering, and caching (by hardware, drivers, OSes, language runtime systems, and applications)&lt;/li&gt;&lt;li&gt;Asynchronous and concurrent reads/writes (including disk striping)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Memory-mapping files&lt;/li&gt;&lt;li&gt;Avoiding disk fragmentation&lt;/li&gt;&lt;li&gt;Network protocol choices (e.g., TCP vs UDP)&lt;/li&gt;&lt;li&gt;Doing IO on deltas instead of full data sets&lt;/li&gt;&lt;li&gt;Reducing network distances (e.g., via CDNs)&lt;/li&gt;&lt;li&gt;Data compression and "bundling" (e.g., CSS sprites)&lt;/li&gt;&lt;li&gt;Latency vs. Bandwidth&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;I welcome suggestions for issues related to the design and implementation of low-latency IO.  Because &lt;span style="font-style: italic;"&gt;Fastware!&lt;/span&gt; is a language-independent book, I expect to make at most passing references to language-specific techniques (e.g., using C++ &lt;span style="font-family: arial;"&gt;rdbuf &lt;/span&gt;or &lt;span style="font-family: arial;"&gt;istreambuf_iterator&lt;/span&gt;s), but I'm still interested in hearing about them, because it's not uncommon for different languages to have their own approaches to a more general issue, and I want to include discussions of as many general issues as I can.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8697429285282980308-6454083886220525983?l=fastwareproject.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fastwareproject.blogspot.com/feeds/6454083886220525983/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8697429285282980308&amp;postID=6454083886220525983&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/6454083886220525983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/6454083886220525983'/><link rel='alternate' type='text/html' href='http://fastwareproject.blogspot.com/2009/03/io.html' title='IO'/><author><name>Scott Meyers</name><uri>http://www.blogger.com/profile/05280964633768289328</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YMc9zPJlncw/S33UIUUqQGI/AAAAAAAAADg/IthdyZwO5_Q/S220/sdm-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8697429285282980308.post-8797639842197282299</id><published>2009-02-21T14:33:00.000-08:00</published><updated>2009-02-22T18:33:39.758-08:00</updated><title type='text'>FrameMaker.  Again.</title><content type='html'>At the end of the day, if you're going to write a book using some kind of authoring technology, you must decide on the technology you're going to use.  I have real-world experience with FrameMaker, LaTeX, and Open Office, and I've looked into or played around with reST, XML with DocBook or DTBook (via &lt;a href="http://www.daisy.org/"&gt;Daisy&lt;/a&gt;), and Microsoft Word.  I've tried to weigh their strengths and weaknesses with respect to issues I've discussed in this blog:  &lt;a href="http://fastwareproject.blogspot.com/2008/11/content-and-presentation-not.html"&gt;conditional content&lt;/a&gt;, &lt;a href="http://fastwareproject.blogspot.com/2008/11/conditional-formatting.html"&gt;conditional&lt;/a&gt; and &lt;a href="http://fastwareproject.blogspot.com/2008/11/color-personalization-and.html"&gt;personalized&lt;/a&gt; formatting, &lt;a href="http://fastwareproject.blogspot.com/2008/11/wysiwyg-in-multi-target-world.html"&gt;WYSIWYG versus markup&lt;/a&gt;, &lt;a href="http://fastwareproject.blogspot.com/2008/11/two-projects-in-one.html"&gt;multiple-platform publication&lt;/a&gt;, etc.  The day has been long, but the time has come to end it, and my conclusion is that none of my choices is particularly attractive.  Were I made of the same stuff as Donald Knuth, my solution would be to invent my own authoring technology, but I'm no Knuth, so I'm going to hold my nose  and choose the least objectionable of the available options.  For me, that's FrameMaker.  Again.  Sigh.&lt;br /&gt;&lt;br /&gt;To a large degree, the decision boiled down to choosing the devil I know over the devils I don't.  The more I looked into XML-based approaches, the more I became convinced that I'd have to educate myself in XML, XSLT, and CSS, technologies I don't know.  (Not knowing them puts me horribly out of step with the modern world, but  I've been busy with other things. If you want to know about the interaction of relaxed hardware memory models on C++ compiler optimizations, how to efficiently make use of the STL, or how to model embedded-system FSAs in C++, I'm your guy.  I can also tell you a thing or two about the challenges of multiple-platform authoring.)  I could learn those technologies, of course, and it would be interesting and useful for me to do so.  But if I honestly want to get &lt;span style="font-style: italic;"&gt;Fastware!&lt;/span&gt; written, I have to focus on that, and XML, XSLT, and CSS don't fall within that focus.  Besides, I suspect (but have not confirmed) that when using an XML schema, I'm constrained to using the style (element?) names defined by the schema, and I'd prefer to use book-specific style names instead of generic names.&lt;br /&gt;&lt;br /&gt;Regarding reST and LaTeX, the former I don't know, and the latter I've mostly forgotten.  Both would require dealing with learning curves that would ultimately leave me in a place where I still would be unlikely to be able to achieve everything I wanted.  Neither is WYSIWYG, for example, and a short time with reST revealed that it's &lt;a href="http://fastwareproject.blogspot.com/2008/12/look-at-restructuredtext.html"&gt;not as expressive&lt;/a&gt; as I'd like.&lt;br /&gt;&lt;br /&gt;Microsoft Word doesn't really do conditional content (though there is apparently an &lt;a href="http://www.livelinx.com/contentmanagement/conditional-text.html"&gt;add-on that makes the feature available&lt;/a&gt;), and it has the irritating constraint that certain of its style names can't be deleted, but the real problem is that, based on my limited experience with it, the learning curve is both steep and essentially limitless.  (In &lt;a href="http://fastwareproject.blogspot.com/2008/12/reining-in-requirements.html"&gt;an earlier post&lt;/a&gt;, I likened it to that of C++.)  It doesn't help that &lt;span style="font-style: italic;"&gt;many &lt;/span&gt;authors with Word experience talk about it as if they were the victims of unusually sadistic domestic abuse.&lt;br /&gt;&lt;br /&gt;My &lt;a href="http://fastwareproject.blogspot.com/2008/11/wysiwyg-in-multi-target-world.html"&gt;experience with Open Office&lt;/a&gt; led me to conclude that it simply isn't up to authoring the kind of book I want to write.&lt;br /&gt;&lt;br /&gt;FrameMaker I already know.  It's lacking in the areas of conditional formatting, per-copy personalization, and separation of content from presentation, but I have some ideas for how to deal with these limitations.  Furthermore, FM can generate MIF, a textual representation of its documents, and MIF can be transformed into other formats if you throw enough programming effort at it.  There's also the FDK (FrameMaker Developer Kit), an API for FM documents, so, again, there's a programmatic hook to do things myself that FrameMaker can't do.  I've never tried to transform MIF or use the FDK, so if I have to go that route, I'm back in the land of learning curves, but I think there's a learning curve in front of me no matter what technology I choose.  My sense is that, overall, the ratio of time spent writing to time spent fighting with the authoring technology is likely to be best with FrameMaker.&lt;br /&gt;&lt;br /&gt;The more things change, the more they stay the same, the saying goes, and certainly that's been the case for me and book-writing.  For at least the last 10 years, each time I've finished a book using FM, I've vowed not to use it again.  The next time I got ready to start a book, I investigated the alternatives and talked to authors for recommendations.  Each time I came away with the impression that there was no choice I was likely to find less unpleasant than Frame.   The stuff I'm made of is apparently closer to Britney Spears than Donald Knuth, because &lt;a href="http://en.wikipedia.org/wiki/Oops%21..._I_Did_It_Again_%28album%29"&gt;oops, I'm going to do it again.&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8697429285282980308-8797639842197282299?l=fastwareproject.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fastwareproject.blogspot.com/feeds/8797639842197282299/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8697429285282980308&amp;postID=8797639842197282299&amp;isPopup=true' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/8797639842197282299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/8797639842197282299'/><link rel='alternate' type='text/html' href='http://fastwareproject.blogspot.com/2009/02/framemaker-again.html' title='FrameMaker.  Again.'/><author><name>Scott Meyers</name><uri>http://www.blogger.com/profile/05280964633768289328</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YMc9zPJlncw/S33UIUUqQGI/AAAAAAAAADg/IthdyZwO5_Q/S220/sdm-small.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8697429285282980308.post-7868339801547614997</id><published>2009-02-20T11:30:00.000-08:00</published><updated>2009-02-23T09:51:28.490-08:00</updated><title type='text'>Sources for Fastware!-Related Information</title><content type='html'>One of the reasons I want to write &lt;span style="font-style: italic;"&gt;Fastware!&lt;/span&gt; is that I don't know of any existing book that covers the breadth of topics I think are important for developers of speedy systems.   To date, most of my blog entries have focused on authoring issues, but most of the time I've devoted to &lt;span style="font-style: italic;"&gt;Fastware!&lt;/span&gt; since beginning the project nearly two years ago has been spent on collecting and organizing the information that the book will contain.&lt;br /&gt;&lt;br /&gt;The information has come from many sources.  I began with personal interviews with several groups and individuals working on speed-sensitive systems -- a fascinating experience.  That gave me a good base from which to begin my search for further information, information I've found in the form of articles, conference papers, blog entries, podcasts, videos, and more.  The most relevant sources of information I've been recording in an Excel spreadsheet, and I've decided to make this spreadsheet available at the (primitive, but I'm working on it)  &lt;a href="http://fastwarebook.com/"&gt;&lt;span style="font-style: italic;"&gt;Fastware!&lt;/span&gt; web site&lt;/a&gt;  from time to time.  I've just uploaded the initial snapshot, which has 75 entries in it.&lt;br /&gt;&lt;br /&gt;It's going to take me a while to write &lt;span style="font-style: italic;"&gt;Fastware!&lt;/span&gt;, but if you're interested in speed-related information in the meantime, I hope my list of sources will be useful to you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8697429285282980308-7868339801547614997?l=fastwareproject.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fastwareproject.blogspot.com/feeds/7868339801547614997/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8697429285282980308&amp;postID=7868339801547614997&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/7868339801547614997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/7868339801547614997'/><link rel='alternate' type='text/html' href='http://fastwareproject.blogspot.com/2009/02/sources-for-fastware-related.html' title='Sources for Fastware!-Related Information'/><author><name>Scott Meyers</name><uri>http://www.blogger.com/profile/05280964633768289328</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YMc9zPJlncw/S33UIUUqQGI/AAAAAAAAADg/IthdyZwO5_Q/S220/sdm-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8697429285282980308.post-3126450536424102731</id><published>2009-02-16T21:10:00.000-08:00</published><updated>2009-02-16T21:10:00.720-08:00</updated><title type='text'>Post-TOC Thoughts</title><content type='html'>Last week I attended the &lt;a href="http://www.toccon.com/toc2009"&gt;Tools of Change for Publishing conference&lt;/a&gt; (TOC), during which I gave &lt;a href="http://www.toccon.com/toc2009/public/schedule/detail/4952"&gt;a talk&lt;/a&gt; discussing some of the authoring challenges I've written about in this blog.  I came away more convinced than ever that writing primarily for electronic publication (while keeping print publication in mind) is best for everyone:  authors, publishers, and readers.  I also came away further convinced that authors should think about audio distribution as they write, a conclusion reinforced by Amazon's inclusion of automatic text-to-speech (TTS) capability in the &lt;a href="http://www.amazon.com/Kindle-Amazons-Wireless-Reading-Generation/dp/B00154JDAI"&gt;Kindle 2&lt;/a&gt;.  (This feature has caused &lt;a href="http://www.fastcompany.com/blog/kit-eaton/technomix/kindle-2s-text-speech-infringes-copyright-says-authors-guild"&gt;a bit of a rights-related stir&lt;/a&gt; among some in the publishing industry, but I believe it's in everybody's interest to work this issue out, so I'm confident that it won't take long for most content to be available in this form.  Contracts for future books will address this issue directly, and in a couple of years, no one will think twice about this.)&lt;br /&gt;&lt;br /&gt;One of the things I got from the conference is that authors would be well-advised to assume that as time goes on, more and more people will consume content on small devices.  Currently we call such devices "mobile phones," but in reality, they're truly personal, truly portable computers -- the general-purpose devices people will have with them almost all the time.  As such, electronic books in whatever format will be increasingly viewed on small screens.&lt;br /&gt;&lt;br /&gt;Think of what that means for content that normally features complex diagrams, large tables, etc.   In the past, I've written my books knowing that the content would fit on physical pages of about 9 x 7 inches.  After taking margins into account, I had pages of about 7.25 x 4.75 inches to tell my story, and I designed things to fit within those constraints.   An iPhone screen is about 3 x 2 inches, meaning that if I want my content to work well on that device, I have to make sure it will (1) fit and (2) be comprehensible when it's displayed there.  Prose is not a problem, but other things could be:  source code listings, diagrams, tables, graphs, etc.&lt;br /&gt;&lt;br /&gt;It seems unlikely that people will want to read lengthy ("long-form") content on a tiny screen, and usage data suggest that people generally read using such devices during "between times," i.e., while commuting, while waiting for a meeting to start, etc. -- generally no more than about 20 minutes a pop.  The best content for such reading is "short form," and this suggests that authors who want to make their content small-screen-friendly need to find a way to break their presentations into comparatively small chunks that are naturally consumable more or less independently.&lt;br /&gt;&lt;br /&gt;Interestingly, this is one of the characteristics that my "Effective" books tend to have, because the material is generally broken down into Items of 4-6 pages that pretty much stand on their own.  This is a popular feature of these books, something I didn't realize until I wrote some much longer Items in my second book (&lt;a href="http://www.amazon.com/gp/product/020163371X?ie=UTF8tag=aristeia.com-20linkCode=as2camp=1789creative=9325creativeASIN=020163371X"&gt;&lt;span style="font-style: italic;"&gt;More Effective C++&lt;/span&gt;&lt;/a&gt;), and people complained about it.   This suggests that a naturally chunkable presentation not only makes things more small-screen-friendly, it can also be a benefit in print form.  &lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;br /&gt;Fastware!&lt;/span&gt; won't be broken down into Items, because I don't think that's the best way to cover the material I want to discuss, but I'll definitely be thinking of ways to structure the material so that it can be easily consumed in relatively small, self-contained chunks.&lt;br /&gt;&lt;br /&gt;On small screens.&lt;br /&gt;&lt;br /&gt;Or as audio.&lt;br /&gt;&lt;br /&gt;In addition to ink-on-paper form :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8697429285282980308-3126450536424102731?l=fastwareproject.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fastwareproject.blogspot.com/feeds/3126450536424102731/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8697429285282980308&amp;postID=3126450536424102731&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/3126450536424102731'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/3126450536424102731'/><link rel='alternate' type='text/html' href='http://fastwareproject.blogspot.com/2009/02/post-toc-thoughts.html' title='Post-TOC Thoughts'/><author><name>Scott Meyers</name><uri>http://www.blogger.com/profile/05280964633768289328</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YMc9zPJlncw/S33UIUUqQGI/AAAAAAAAADg/IthdyZwO5_Q/S220/sdm-small.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8697429285282980308.post-2141807793706169219</id><published>2008-12-27T21:33:00.000-08:00</published><updated>2008-12-27T21:33:44.002-08:00</updated><title type='text'>Notes from Effective C++ CD</title><content type='html'>During 1998, much of my time was devoted to designing and helping supervise the implementation of an electronic version of two of my books.  The result was &lt;span style="font-style: italic;"&gt;&lt;a href="http://www.amazon.com/gp/product/0201310155?ie=UTF8tag=aristeia.com-20linkCode=as2camp=1789creative=9325creativeASIN=0201310155"&gt;Effective C++ CD&lt;/a&gt;, &lt;/span&gt;an HTML implementation of the books and some associated magazine articles, where links connected everything on the CD.  In our work, we addressed some content issues and many presentation issues, and we produced enough innovations to merit &lt;a href="http://www.aristeia.com/Papers/MIND_Oct_1999.pdf"&gt;an article for practitioners&lt;/a&gt; in &lt;span style="font-style: italic;"&gt;Microsoft Internet Developer&lt;/span&gt; and &lt;a href="http://zing.ncsl.nist.gov/hfweb/proceedings/meyers-jones/index.html"&gt;a paper for academics&lt;/a&gt; in &lt;em&gt;Proceedings of the 5th Conference on Human Factors &amp;amp; the Web&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;I recently found myself in the directory with the CD's files, and I took the opportunity to review the notes I'd made regarding how we could improve the CD were we to undertake the project again (e.g., as a second edition).  Most of the comments were specific either to the content of the CD or to the web-browser-as-book-viewer  decisions we made (hence not germane to my work on &lt;span style="font-style: italic;"&gt;Fastware!&lt;/span&gt;), but some remain relevant today.  Here they are (in no particular order):&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Text in graphics should be visible to search engines.  (This generalizes:  text in figures, tables, diagrams, animations, etc., should be visible to search engines.)&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Electronic versions of books are essentially software and, like contemporary software, they should be updatable via the net.  When bugs are fixed in an electronic version of a book, owners of that book have a right to expect to be able to incorporate those bug fixes into the book they've purchased.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The books on my CD are organized into either 35 or 50 "Items," which are essentially technical essays.  Each book has an extensive set of cross references among its Items, so Item 22 might refer to Item 21 and Item 8.  Within a book, this was fine, but when I added links between the books' Items (a feature exclusive to the CD), I had to make clear which book had the Item I was referring to.  That is "Item 22" was unambiguous within a print book, but it wasn't unambiguous on a CD with two books, each of which had such an Item.  I addressed this by prepending a book-specific letter to the Item number for Items outside the current book, e.g., "Item 22" is in the current book, but "Item M22" or "Item E22" is in the other book. &lt;br /&gt;&lt;br /&gt;A fair number of people found this confusing.  One way to address this problem would have been to always use the E or M prefix on all Item cross references, but this would have introduced syntactic noise and led to the electronic books not looking the same as their print versions.&lt;br /&gt;&lt;br /&gt;The real problem, I think, is trying to figure out how to write for something that might stand alone (as, e.g., a print book) but that might also be part of a collection of interlinked documents.  Readers of the standalone version shouldn't be bothered with cross reference disambiguation overhead that's needed only in non-standalone environments, but books they know from their standalone versions should look essentially the same as the versions they encounter in linked environments.  (For a related discussion, consult &lt;a href="http://fastwareproject.blogspot.com/2008/11/vision-for-ebooks-circa-2007.html"&gt;my vision for electronic books&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Because link text generally looks different from non-link text, it calls attention to itself.  That's the point of it looking different:  to communicate, "Hey, I'm clickable!" Unfortunately, when too much text tries to get your attention at the same time, it intrudes on the reading experience.  For example, contrast this, where every reference to Amazon is linked,&lt;br /&gt;&lt;blockquote&gt;You can buy lots of stuff at &lt;a href="http://www.amazon.com/"&gt;Amazon&lt;/a&gt;.  That's because &lt;a href="http://www.amazon.com/"&gt;Amazon&lt;/a&gt; sells lots of stuff. &lt;a href="http://www.amazon.com/"&gt;Amazon&lt;/a&gt; customers expect lots of stuff at &lt;a href="http://www.amazon.com/"&gt;Amazon&lt;/a&gt;, because that's what &lt;a href="http://www.amazon.com/"&gt;Amazon&lt;/a&gt; is know for.  Yay, &lt;a href="http://www.amazon.com/"&gt;Amazon&lt;/a&gt;!&lt;br /&gt;&lt;/blockquote&gt;with this, where only the first reference is linked:&lt;br /&gt;&lt;blockquote&gt;You can buy lots of stuff at &lt;a href="http://www.amazon.com/"&gt;Amazon&lt;/a&gt;.  That's because Amazon sells lots of stuff.  Amazon customers expect lots of stuff at Amazon, because that's what Amazon is know for.  Yay, Amazon!&lt;br /&gt;&lt;/blockquote&gt;Failing to make links out of text that's already been made a link recently is, to me, akin to using pronouns to refer to nouns that have been recently introduced.  Pronouns make text more interesting and less repetitive, but harder to understand out of context.  Non-link text is similar:  it avoids visual repetition, but it makes the text harder to understand out of context.&lt;br /&gt;&lt;br /&gt;There are two additional issues relating to whether repeated text should be made active at each point of repetition.  The first has to do with consistency.  More than one reader of my CD complained that I was inconsistent about what text was linked and what was not.  These readers seemed to expect all naturally linkable text to be linked, no matter how many times that text occurred, even within a short space.&lt;br /&gt;&lt;br /&gt;The other additional issue concerns search engines, which can plop you down in an arbitrary location in an arbitrary document.  If you start reading and you encounter a pronoun, you naturally scan backwards looking for the antecedent.  But if you encounter text that seems like it should be a link, my guess is that you don't scan backwards looking for the same text in link form.  Rather, you get annoyed at the author for failing to make the text you're looking at a link.  That leads to the challenge:  how do you avoid the visual clutter that accompanies making every occurrence of naturally linkable text into a link while also meeting the link-related expectations of readers who use search engines to take them to the point in a document where they start reading?&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Clicking on naturally linkable text like "Item 5" or "Section 3.5.1" or "Chapter 4," where the target of the link generally has a title, leads to some readers wanting to see the title without having to traverse the link.  Instead of&lt;br /&gt;&lt;blockquote&gt;As you'll see in Chapter 4, ...&lt;br /&gt;&lt;/blockquote&gt;they'd prefer to see:&lt;br /&gt;&lt;blockquote&gt;As you'll see in Chapter 4 ("Giant Anteaters"), ...&lt;br /&gt;&lt;/blockquote&gt;Some authors do this in print, but I find it distracting as a reader.  As the author of an electronic book, I can offer the title as an option by, e.g., displaying it when the mouse hovers over the link text.  But that means I have to make sure that capability is provided when my book is prepared for electronic publication.  (A similar capability can be used to avoid making readers turn to a glossary to see a term's definition.)&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;If I'm looking at an nth-level index entry, it would be nice to have an easy way to get to the n-1st level, i.e., essentially a way to move to the parent entry for a child index entry.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;One reader wrote:&lt;br /&gt;&lt;blockquote&gt;It would be great if you can have a table of content showing in the navigation area, and there is a toc synchronization function (much like Microsoft Workshops), so that the readers will have a better idea of where they are in the book.&lt;br /&gt;&lt;/blockquote&gt;This is one way to address the "where am I?" problem that can arise as the result of a search or when following a link from one part of a document to another (or from one document to another).&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8697429285282980308-2141807793706169219?l=fastwareproject.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fastwareproject.blogspot.com/feeds/2141807793706169219/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8697429285282980308&amp;postID=2141807793706169219&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/2141807793706169219'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/2141807793706169219'/><link rel='alternate' type='text/html' href='http://fastwareproject.blogspot.com/2008/12/notes-from-effective-c-cd.html' title='Notes from &lt;em&gt;Effective C++ CD&lt;/em&gt;'/><author><name>Scott Meyers</name><uri>http://www.blogger.com/profile/05280964633768289328</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YMc9zPJlncw/S33UIUUqQGI/AAAAAAAAADg/IthdyZwO5_Q/S220/sdm-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8697429285282980308.post-5428318120497870095</id><published>2008-12-15T19:58:00.000-08:00</published><updated>2008-12-15T20:52:26.497-08:00</updated><title type='text'>An Introduction to Fastware!</title><content type='html'>All my blog entries to date have been about issues related to authoring:  things that affect my choices among writing tools and my strategies for effectively conveying the information I want to get across to my readers.  (As I've noted before, the term "reader" is misleading, because one of the forms in which I'd like &lt;em&gt;Fastware!&lt;/em&gt; to be usable is audible.  The proper term is probably "content consumer," but I'll stick with "reader," in part because it's a lot less ugly, in part because it better reminds me that I'm primarily writing for humans, not machines.)  This blog entry is a bridge between authoring concerns and content issues, because it touches both.&lt;br /&gt;&lt;br /&gt;Experienced authors and publishers will tell you that you usually write a book's introduction last, because you can't really know what needs to be introduced until you've written it.  When working on &lt;a href="http://www.aristeia.com/books.html"&gt;my past books&lt;/a&gt;, I used the placeholder introductory chapter as a dumping ground for terms that needed to be defined, assumptions that needed to be explained, conventions that needed to be described, etc.  When the book proper was done, I'd go back and sift through the debris that had made its way to what was to become the Introduction, take a deep breath, and do my best to make a coherent narrative out of the odds and ends I found there.&lt;br /&gt;&lt;br /&gt;For &lt;em&gt;Fastware!&lt;/em&gt;, I chose a different approach.  My experience has been that the need for a book on how to write software that runs quickly is not self-evident to many people.  That bothered me. I view the case as overwhelmingly strong, and I felt compelled to make that case right away.  As a result, I wrote &lt;em&gt;Fastware!&lt;/em&gt;'s Introduction first, and I've now made a draft available at &lt;a href="http://fastwarebook.com/"&gt;the book's web site&lt;/a&gt;.  In its current form, the chapter is more manifesto than Introduction, and I know I'll have to add more material once I've written the rest of the book, but it should give you a good idea of what I envision the book to ultimately be.&lt;br /&gt;&lt;br /&gt;There are two parts to that vision, content and presentation, and the Introduction should give you a glimpse of both.  (If you've been following this blog, you know that I believe that content and presentation are not really separable.  If you haven't been following the blog and are interested in this view, check out &lt;a href="http://fastwareproject.blogspot.com/2008/11/content-and-presentation-not.html"&gt;this &lt;/a&gt;and &lt;a href="http://fastwareproject.blogspot.com/2008/12/look-at-restructuredtext.html"&gt;this&lt;/a&gt;.)  The content should be self-explanatory. If it's not, I've botched my job, and please let me know about it, either as comments on this blog or as email to &lt;a href="mailto:smeyers@aristeia.com"&gt;smeyers@aristeia.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Regarding the draft presentation, here are a few things I think worth pointing out:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold; color: rgb(153, 51, 0);"&gt;The book is about speed, and visually, it should come across that way.&lt;/span&gt;  One way I've tried to convey this is the use of italics in the chapter title, section and sidebar heads, and the footer.  Like runners striving to move faster, italic letters lean forward.  Another way is the fireball behind the chapter numbers.  This is cheesy in its current form, but I have no illusions that I'm an artist; the fireball is a placeholder.  My original idea was to have flames shooting out the back of the page numbers, and I'd ultimately like to do something more like that.  Another problem with the fireball is that it's too prominent, but that can be toned down in various ways (e.g., increase the transparency of the image).  The main thing is to come up with subtle ways to suggest movement -- &lt;span style="font-style: italic;"&gt;fast&lt;/span&gt; movement -- through the book's layout and formatting.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold; color: rgb(153, 51, 0);"&gt;"Voice of Experience" sidebars reinforce material in the chapter they accompany.&lt;/span&gt;  This is one of the ideas for &lt;span style="font-style: italic;"&gt;Fastware!&lt;/span&gt; I'm particularly enthusiastic about, and it straddles the line between content and presentation.  The book will contain lots of suggestions about how to write fast software, and after a while, I expect readers to roll their eyes and mutter, "Yeah, yeah, yeah..."  Some of the suggestions may strike some readers as less important than I know them to be, and I worry that such readers will skip the muttering and simply roll their eyes.&lt;br /&gt;&lt;br /&gt;Some authors, to reinforce the points they make, offer fictional examples demonstrating how things could play out in practice.  Other authors give real examples from their own experience.  Few authors have the background to personally vouch for the full range of topics I'll cover in &lt;span style="font-style: italic;"&gt;Fastware!&lt;/span&gt;, and, alas, I'm not one of them.  The "Voice of Experience" sidebars are my way of bringing in guest speakers who, in their own words, can back up what &lt;span style="font-style: italic;"&gt;Fastware!&lt;/span&gt; tells them.   My plan is to have two sidebars per chapter, although I currently have only one in the draft Introduction.&lt;br /&gt;&lt;br /&gt;The sidebars are designed to have a different look to them, and not just to make it clear that they are sidebars.  For readers reading straight through, I want them to pop up from time to time as visual and semantic treats.  For readers flipping through the book, I want them to stand out as easy-to-find nuggets that stand on their own and provide useful "from the factory floor" information.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold; color: rgb(153, 51, 0);"&gt;Color output is the default.&lt;/span&gt;  Especially as time goes on, I expect more and more readers to experience &lt;span style="font-style: italic;"&gt;Fastware!&lt;/span&gt; on a color-capable device, so the primary presentation format should take advantage of color.  In the draft Introduction, I sometimes use color to bring out semantics (e.g., for clickable URLs and email addresses, although they are not active in the PDF I posted, sorry).  In other cases, I use color simply to make the work more  visually engaging.  Some will pooh-pooh this use of color, but it has as great an impact on a prospective reader's  evaluation of a book as do things like font choices, interline leading, footnotes vs. endnotes, etc.  Black electronic text on a white electronic page looks as anachronistic to contemporary readers as black and white TV shows do to contemporary TV viewers.  In my draft introduction, I use color in a number of ways to enliven the visual effect:  for section headers, for bold-faced text, for sidebar backgrounds, in the line above the footer, in the page number fireball, in "The Voice of Experience" photographs.   My goal is to produce a book that looks somewhat less like a traditional book and somewhat more like magazines and web pages. &lt;/li&gt;&lt;/ul&gt;If you have any comments on my vision for &lt;span style="font-style: italic;"&gt;Fastware!&lt;/span&gt; (content or presentation) or about the draft Introduction, please let me know, either as comments on this blog or via email to &lt;a href="mailto:smeyers@aristeia.com"&gt;smeyers@aristeia.com&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8697429285282980308-5428318120497870095?l=fastwareproject.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fastwareproject.blogspot.com/feeds/5428318120497870095/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8697429285282980308&amp;postID=5428318120497870095&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/5428318120497870095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/5428318120497870095'/><link rel='alternate' type='text/html' href='http://fastwareproject.blogspot.com/2008/12/introduction-to-fastware.html' title='An Introduction to &lt;em&gt;Fastware!&lt;/em&gt;'/><author><name>Scott Meyers</name><uri>http://www.blogger.com/profile/05280964633768289328</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YMc9zPJlncw/S33UIUUqQGI/AAAAAAAAADg/IthdyZwO5_Q/S220/sdm-small.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8697429285282980308.post-2193259244124322949</id><published>2008-12-05T10:30:00.000-08:00</published><updated>2008-12-05T10:30:01.085-08:00</updated><title type='text'>XML, Structure, and DocBook</title><content type='html'>In my last post, I mentioned that all I really need to be able to produce is PDF and XML.  PDF can be generated from suitable XML, and a colleague who works extensively with the publishing industry remarked that my leaning towards LaTeX was out of step with the industry's move towards XML-based content representation. In and of itself, that didn't strike me as terribly interesting.  As I wrote to my colleague:&lt;br /&gt;&lt;blockquote&gt;I don't doubt your observation that publishers are converging on XML as a representation format, but I don't think it's very meaningful.  XML is just text in a particular syntactic format, and anything can be translated into XML:  FrameMaker, Word, LaTeX, reST, HTML, you name it.   Making sense of an XML document requires knowing the schema that assigns semantics to the document's elements, and my sense is that the publishing world is not converging on a common schema.  O'Reilly uses DocBook.  The Pragmatic Programmers use PML.  Presumably Pearson uses something else.   If I take my book in DocBook/XML format and give it to somebody whose tool chain expects XML using a different schema, that tool chain will be unable to do anything interesting with the document until it's been translated from DocBook XML to OtherSchema XML.   Such a translation may be easy or difficult, depending on how well the semantic elements of the two schemas correspond.&lt;br /&gt;&lt;/blockquote&gt;Still, I started poking into information about generating XML from FrameMaker (what I've used for my previous books), and that led into a detour about the difference between Unstructured FrameMaker (the variant I've been using, where there is no document schema) and Structured FrameMaker (the variant that uses document schemas).  Both can generate XML, but then I read &lt;a href="http://www.scriptorium.com/whitepapers/fm_xml/fm_xml2.html"&gt;an article at scriptorium.com&lt;/a&gt; that yielded an XML epiphany.  The XML generated by Unstructured FrameMaker consists of a flat sequence of paragraphs identified by their styles, e.g.,&lt;pre&gt;Book Title&lt;br /&gt;Book Author&lt;br /&gt;Book Chapter&lt;br /&gt;Chapter Intro&lt;br /&gt;Chapter Section&lt;br /&gt;Section Para&lt;br /&gt;Section Para&lt;br /&gt;Chapter Section&lt;br /&gt;Section para&lt;br /&gt;Book Chapter&lt;br /&gt;Chapter Intro&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;For purposes of generating PDF, this is fine, because all we need to know is how to format each paragraph style.  But the flat sequence of paragraphs fails to reflect the underlying structure of the document.  That looks more like this:&lt;pre&gt;Book Title&lt;br /&gt;Book Author&lt;br /&gt;Book Chapter&lt;br /&gt;  Chapter Intro&lt;br /&gt;  Chapter Section&lt;br /&gt;    Section Para&lt;br /&gt;    Section Para&lt;br /&gt;  Chapter Section&lt;br /&gt;    Section para&lt;br /&gt;Book Chapter&lt;br /&gt;  Chapter Intro&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;The structural information isn't needed for typesetting, but it's present in my head as I write, and it's reflected in the eventual formatting (e.g., chapter titles are typeset bigger than section titles, which are typeset bigger than subsection titles, etc.), so having it present in the XML seems like a pretty reasonable notion.  Furthermore, XML schemas used by the publishing industry for book representation are doubtless going to contain such information, so if I want to facilitate transformation of my book's XML into whatever XML a publisher might want, my XML needs to have the structural information the target XML will require. &lt;br /&gt;&lt;br /&gt;In short, there XML and there's XML, and XML without structural information about the book content it represents almost certainly imposes serious restrictions on what can be done with it.  Going down that road seems foolish.&lt;br /&gt;&lt;br /&gt;My need, then, is to be able to generate XML that reflects the logical structure of my book.  I thus need an XML schema that defines that structure.  I could come up with one from scratch, but I'm not so näive as to believe that that's a simple task, or, more precisely, a simple task to do &lt;span style="font-style: italic;"&gt;well&lt;/span&gt;.  Call me a reuse buff, but I want to pick up a pre-fab book schema, assume that the people who developed it knew what they were doing, and get on to the real work of producing content.  Which pretty much takes me back to DocBook and the search for a DocBook-aware XML editor.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8697429285282980308-2193259244124322949?l=fastwareproject.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fastwareproject.blogspot.com/feeds/2193259244124322949/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8697429285282980308&amp;postID=2193259244124322949&amp;isPopup=true' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/2193259244124322949'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/2193259244124322949'/><link rel='alternate' type='text/html' href='http://fastwareproject.blogspot.com/2008/12/xml-structure-and-docbook.html' title='XML, Structure, and DocBook'/><author><name>Scott Meyers</name><uri>http://www.blogger.com/profile/05280964633768289328</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YMc9zPJlncw/S33UIUUqQGI/AAAAAAAAADg/IthdyZwO5_Q/S220/sdm-small.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8697429285282980308.post-8907874455619818622</id><published>2008-12-04T20:40:00.000-08:00</published><updated>2008-12-04T21:15:59.750-08:00</updated><title type='text'>Reining in Requirements</title><content type='html'>In &lt;a href="http://fastwareproject.blogspot.com/2008/11/color-personalization-and.html"&gt;an earlier post&lt;/a&gt; regarding support for custom color combinations, I wrote:&lt;blockquote&gt;Being a software person, I'm going to give in to my inclination to generalize and assume that any given set of color choices is going to be problematic for some portion of my readership.&lt;/blockquote&gt;No problem, I still think that's reasonable.  The problem is this part:&lt;blockquote&gt;Being a software person, I'm going to give in to my inclination to generalize....&lt;/blockquote&gt;A friend who's been following this blog, who's an author who has prepared CRC (camera-ready copy) for several books, and who's currently working on a book where he'd like to satisfy many of the same requirements I would, suggested I consider -- I am not making this up -- Microsoft Word.  Hope springing eternal, I posted a message to a couple of Word newsgroups asking whether Word was up to the task of producing multiple PDFs from a single document, where each PDF might have custom page dimensions and custom style definitions.  To date I've seen no useful responses, but it occurred to me sometime after I'd posted my query that I'd made a classic software development mistake:  I'd generalized my problem to the point where what I said I wanted to do was almost certainly beyond anything I'd ever need to do.&lt;br /&gt;&lt;br /&gt;Sure, I want to produce content that can be viewed on devices of different physical sizes, and certainly that will result in different page sizes, but does that require different PDFs?  I had the nagging feeling that it might not, and a little research into the formats employed by various electronic reading devices (e.g., Kindle, Sony Reader, iPhone, etc.)  revealed that all break lines dynamically.  Such "reflowable text" is a foundation of the &lt;a href="http://www.openebook.org/"&gt;epub standard&lt;/a&gt;.  It's also contradictory to the idea behind PDF, which inherently assumes the existence of physical pages with a fixed size. Unsurprisingly electronic devices for reading hate PDF. The &lt;a href="http://www.mobipocket.com/dev/article.asp?BaseFolder=prcgen&amp;amp;File=building.htm"&gt;Mobipocket Developer Center&lt;/a&gt;, for example, lists six formats that can be used as the basis for importing content in order of desirability.  PDF is number six.&lt;br /&gt;&lt;br /&gt;Ebook devices tend to prefer some flavor of XML (often XHTML) as their content format, and that means that what I really need is a way for my authoring toolchain to produce two things:   a single fixed-dimension PDF for print publication (which, with some minor processing, can perform double-duty as a directly-consumable eformat) and XML (or something directly convertible to XML).  That combination of requirements is much less demanding than what I'd been thinking I needed.&lt;br /&gt;&lt;br /&gt;In fact, now that I'm in a "what do I &lt;span style="font-style: italic;"&gt;really &lt;/span&gt;need" mood, I can probably dump the per-order custom-color requirement, too.  In a perfect world, yes, I'd offer each reader their choice of color combinations.  In practice, I can probably make almost everybody happy by offering (1) a color document for color output devices and for people who don't suffer from any kind of color blindness and (2) a monochrome document for monochrome output devices and for people with any kind of color blindness.  Where the color document uses color, the monochrome document could (for text) use underlining or changes in font face and (for diagrams) use different line thicknesses and fill styles.  If &lt;span style="font-style: italic;"&gt;Fastware!&lt;/span&gt; unexpectedly turns out to have nontrivial code examples where syntax coloring would be useful, I could offer variants using the most commonly employed color combinations, thus yielding e.g., (1a) color using Eclipse syntax highlighting, (1b) color using Visual Studio syntax highlighting, etc.  As I said, I'd &lt;span style="font-style: italic;"&gt;like &lt;/span&gt;to offer color customization on a per copy basis, but that's not a &lt;span style="font-style: italic;"&gt;requirement&lt;/span&gt;, it's a &lt;span style="font-style: italic;"&gt;desideratum&lt;/span&gt;.  Those are different things. It's important that I not confuse them.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8697429285282980308-8907874455619818622?l=fastwareproject.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fastwareproject.blogspot.com/feeds/8907874455619818622/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8697429285282980308&amp;postID=8907874455619818622&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/8907874455619818622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/8907874455619818622'/><link rel='alternate' type='text/html' href='http://fastwareproject.blogspot.com/2008/12/reining-in-requirements.html' title='Reining in Requirements'/><author><name>Scott Meyers</name><uri>http://www.blogger.com/profile/05280964633768289328</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YMc9zPJlncw/S33UIUUqQGI/AAAAAAAAADg/IthdyZwO5_Q/S220/sdm-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8697429285282980308.post-2867452195037595426</id><published>2008-12-02T17:00:00.000-08:00</published><updated>2009-02-20T12:06:41.158-08:00</updated><title type='text'>A Look at reStructuredText</title><content type='html'>Several comments on this blog referred me to reStructuredText (reST) as a markup alternative to LaTeX and DocBook.  reST is part of the &lt;a href="http://docutils.sourceforge.net/"&gt;Docutils project&lt;/a&gt;, which, probably because I am not a Python programmer, I had not heard of.&lt;br /&gt;&lt;br /&gt;I've now spent a little time reading about reST, examing some of its output, looking at some document source files, writing and processing some trivial examples, and posting questions to the Docutils mailing list.  On a scale of knowledgability about reST that runs from 1 to 100, that puts me at about 1.1.  Still, I've come to a few conclusions:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;For common things like numbered or bulleted lists, reST markup is less verbose (hence less intrusive) than LaTeX's.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;For inline style-based markup, they seem to be about the same.  reST's &lt;span style="color: rgb(255, 102, 0); font-weight: bold;"&gt;:foo:`&lt;/span&gt;&lt;span style="font-style: italic;"&gt;Text&lt;/span&gt;&lt;span style="color: rgb(255, 102, 0); font-weight: bold;"&gt;`&lt;/span&gt; is LaTeX's &lt;span style="font-weight: bold; color: rgb(255, 102, 0);"&gt;{\foo&lt;/span&gt; &lt;span style="font-style: italic;"&gt;Text&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(255, 102, 0);"&gt;}&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;The LaTeX user community seems to be larger than reST's, and while there are several books on LaTeX, there don't seem to be any dedicated to reST or Docutils.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;reST documents are typically viewed as HTML, LaTeX documents as PDF.  This is noteworthy, because I currently expect PDF generation to be more important for &lt;span style="font-style: italic;"&gt;Fastware!&lt;/span&gt; than HTML generation.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;reST more rigorously separates content from presentation.&lt;/li&gt;&lt;/ul&gt;This last point may be the most interesting.  As part of my kicking of reST's tires, I looked at some documents I'd written using LaTeX, trying to figure out how I'd be able to achieve the same effect in reST.  I generally had little trouble, but then I noticed a table I'd included in &lt;a href="http://ieeexplore.ieee.org/Xplore/login.jsp?url=/iel1/52/2296/00062932.pdf?arnumber=62932"&gt;an &lt;span style="font-style: italic;"&gt;IEEE Software&lt;/span&gt; paper from long ago&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_YMc9zPJlncw/STXKMonYIFI/AAAAAAAAACQ/R7EwhITrnIc/s1600-h/ieee+software+table.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 134px;" src="http://2.bp.blogspot.com/_YMc9zPJlncw/STXKMonYIFI/AAAAAAAAACQ/R7EwhITrnIc/s400/ieee+software+table.jpg" alt="" id="BLOGGER_PHOTO_ID_5275344856944222290" border="0" /&gt;&lt;/a&gt;Each entry here is centered both horizontally and vertically, and it occurred to me that I'd never noticed such layout in tables generated from reST.  I started googling around for centering support in reST, and, thanks to help from the Docutils mailing list, I eventually came to understand that there is no notion of "centering" in reST.  Whether something is centered isn't content, it's presentation, and presentation decisions are made downstream from reST, e.g., by CSS style sheets for presentation via HTML.&lt;br /&gt;&lt;br /&gt;Something else that became apparent is that while the above table could be produced from reST by slapping an appropriate "centering" attribute on the entire table, reST doesn't really have a way to express metadata (e.g., presentation information) on a cell-by-cell basis.  So if I wanted some cells' content to be centered and others' to be, say, left-justified, reST isn't up to that.  I can't think of a case where I'd want to do that, but I know of lots of cases where I create spreadsheets where some rows or columns use different justification settings.  Here's part of the spreadsheet I've been using to compare link-related features of various electronic books:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_YMc9zPJlncw/STXNWc_gQHI/AAAAAAAAACg/YnXDmBE-mSs/s1600-h/link+features.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 169px;" src="http://1.bp.blogspot.com/_YMc9zPJlncw/STXNWc_gQHI/AAAAAAAAACg/YnXDmBE-mSs/s400/link+features.jpg" alt="" id="BLOGGER_PHOTO_ID_5275348324157767794" border="0" /&gt;&lt;/a&gt;Note that some columns are horizontally left-justified, while others are horizontally center-justified.&lt;br /&gt;&lt;br /&gt;This takes us back to a topic I covered in one of my earliest posts:  &lt;a href="http://fastwareproject.blogspot.com/2008/11/content-and-presentation-not.html"&gt;the lack of strict separation of content and presentation&lt;/a&gt;.  The way information is placed in a table can help comprehension or it can hurt it, and as an author, I want to make sure that the presentation helps.  Certainly the proper presentation of table information can vary from row to row and column to column within a table or between tables, and the fact that both Excel and LaTeX also offer per-cell formatting support strongly suggests that there are situations where content creators feel that such control is useful.&lt;br /&gt;&lt;br /&gt;In response to one of my requests for information on the Docutils mailing list, David Goodger commented:&lt;br /&gt;&lt;blockquote&gt;In terms of expressive power, LaTex &gt; reST.  In terms of readability and convenience, reST &gt; LaTeX.  Take your pick.  If you're picky about the formatting details, reST may not be for you.&lt;br /&gt;&lt;/blockquote&gt;Alas, I &lt;span style="font-style: italic;"&gt;am &lt;/span&gt;picky about formatting details, in part because I'm a control freak, but in part because I believe that formatting is related to comprehensibility, and, fundamentally, comprehensibility is pretty much the only thing that matters.  (Okay, accuracy is kind of important, too.)  An author's job is to convey his or her message as effectively as possible.  That requires an expressive medium in which to represent that message.  My concern is not so much that reST is less expressive than LaTeX, it's that it's less expressive than what I think I might reasonably want.  I don't need the most expressive book-writing system available, I just need one that's &lt;span style="font-style: italic;"&gt;adequately&lt;/span&gt; expressive.  If reST doesn't offer a way for me to produce tables in a form I already know I employ, that's a problem.&lt;br /&gt;&lt;br /&gt;reST looks to be a nice markup language, easy to learn and use for many purposes, especially the production of web pages.  I was impressed with the low barrier to entry:  I downloaded and installed Python and docutils and was producing HTML from reST in under an hour.  It's not hard to find impressive-looking decidedly nontrivial web pages generated from reST (e..g, the &lt;a href="http://docs.python.org/library/multiprocessing.html"&gt;Python multiprocessing documentation&lt;/a&gt; pointed out by David Niergarth or &lt;a href="http://www.siafoo.net/"&gt;the pages at Saifoo&lt;/a&gt;).  Still, I can't shake the doubt that if I go with reST, I'll eventually bump into something I want to be able to express, but can't.  I'm therefore still leaning towards LaTeX.&lt;br /&gt;&lt;br /&gt;Besides, I still have that friend who's offered to be my personal LaTeX consultant :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8697429285282980308-2867452195037595426?l=fastwareproject.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fastwareproject.blogspot.com/feeds/2867452195037595426/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8697429285282980308&amp;postID=2867452195037595426&amp;isPopup=true' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/2867452195037595426'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/2867452195037595426'/><link rel='alternate' type='text/html' href='http://fastwareproject.blogspot.com/2008/12/look-at-restructuredtext.html' title='A Look at reStructuredText'/><author><name>Scott Meyers</name><uri>http://www.blogger.com/profile/05280964633768289328</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YMc9zPJlncw/S33UIUUqQGI/AAAAAAAAADg/IthdyZwO5_Q/S220/sdm-small.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_YMc9zPJlncw/STXKMonYIFI/AAAAAAAAACQ/R7EwhITrnIc/s72-c/ieee+software+table.jpg' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8697429285282980308.post-5251469915025445764</id><published>2008-11-29T19:05:00.000-08:00</published><updated>2008-11-29T19:08:24.147-08:00</updated><title type='text'>Leaning Towards LaTeX</title><content type='html'>About three weeks ago I wrote that one of my goals was to make it easy to generate &lt;a href="http://fastwareproject.blogspot.com/2008/11/color-personalization-and.html"&gt;versions of my book using custom colors&lt;/a&gt;, in part because approximately 10% of the male population suffers from some kind of color blindness. Since that time, I find that achieving this goal has become increasingly important to me.  Most of the world's problems are beyond my control, but &lt;span style="font-style: italic;"&gt;this&lt;/span&gt; I can do something about.  I concluded before that wanting to offer color customization on a per-copy basis pretty much commits me to markup-based authoring, a commitment &lt;a href="http://fastwareproject.blogspot.com/2008/11/wysiwyg-in-multi-target-world.html"&gt;I don't have much enthusiasm for&lt;/a&gt;, but the inconveniences associated with markup-based authoring can't compare with the inconveniences associated with color blindness, so I'm in no position to whine.  (Not that it means I won't.)  I suspect that the use of markup will ultimately allow me to do other things I'll find useful, but at the end of the day, I find that I can't get away from the idea that if I can make it possible for color blind people to see things in a way that works for them and isn't too onerous for me, I have a moral obligation to do it.  I guess it's my way of adapting the &lt;a href="http://en.wikipedia.org/wiki/Americans_with_Disabilities_Act_of_1990"&gt;ADA&lt;/a&gt;'s "reasonable accommodation" rule to publishing.&lt;br /&gt;&lt;br /&gt;As I wrote before, the choices in MarkupLand seem to boil down to XML+DocBook and LaTeX.  I was leaning towards DocBook, but then two things happened.  The first is that I went to my local technical bookstore to get a book on DocBook, and &lt;span style="font-style: italic;"&gt;it didn't have any&lt;/span&gt;. Bad sign, very bad, especially since my local technical bookstore is &lt;a href="http://www.powells.com/technicalbooks"&gt;Powell's&lt;/a&gt;, which is &lt;span style="font-style: italic;"&gt;not&lt;/span&gt; a small store.   That Powell's didn't have any books on DocBook gave me the kind of "you're in this alone" feeling that's anything but warm and fuzzy.  (Yes, there are lots of online resources, and yes, the two big books on DocBook are online, but (1) I like physical books and (2) I can't shake the feeling that the availability of physical books tends to bear a correlation to the size of the user community.)&lt;br /&gt;&lt;br /&gt;The second thing that happened is that a friend of mine who's been pushing me to choose LaTeX agreed to act as my personal LaTeX consultant.  That's key.  Having a person I know agree to help me is much more reassuring than having only the faceless masses of the Internet to turn to.  I have a lot of respect for those faceless masses, and I've found them tremendously helpful on many occasions, but I find that the more specialized my interests, the less likely I am to get help online.  When I was working with OpenOffice Writer, for example, it didn't take much time for me to go beyond what I was able to find online, and it didn't take much longer than that for me to start stumping the consultant I was working with.  "Huh, nobody has ever wanted to do that before..." is not really the kind of feedback I want to start getting on a regular basis.&lt;br /&gt;&lt;br /&gt;And then there's this one silly thing:  because DocBook is XML, every paragraph has to be started with &amp;lt;para&amp;gt; and ended with &amp;lt;/para&amp;gt;.  This is inhuman.  Literally.  It's fine for machines, but not for humans.  LaTeX, in contrast, while not without its own syntactic ideosyncracies, interprets a blank line as a paragraph separator.  That's vastly more natural for a writer.  Working with XML requires that I be aware that I'm building a tree structure that happens to have nodes of text in it.  Judging from the online demos for WYSIWYG DocBook editors like &lt;a href="http://www.oxygenxml.com/demo/DocbookEditingInAuthor/docbookEditing.html"&gt;oXygen&lt;/a&gt; and  &lt;a href="http://www.xmlmind.com/xmleditor/flash_demos/demo1.htm"&gt;XMLMind&lt;/a&gt;, this is the case even if you're not typing the markup in manually.  When I write, I want to think of sequences of paragraph, not nodes in trees.  LaTeX lets me.  I'm concerned that DocBook won't.&lt;br /&gt;&lt;br /&gt;My current plan, then, is to take my draft Introduction for &lt;span style="font-style: italic;"&gt;Fastware!&lt;/span&gt; and translate it into LaTeX.   We'll see how it goes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8697429285282980308-5251469915025445764?l=fastwareproject.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fastwareproject.blogspot.com/feeds/5251469915025445764/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8697429285282980308&amp;postID=5251469915025445764&amp;isPopup=true' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/5251469915025445764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/5251469915025445764'/><link rel='alternate' type='text/html' href='http://fastwareproject.blogspot.com/2008/11/leaning-towards-latex.html' title='Leaning Towards LaTeX'/><author><name>Scott Meyers</name><uri>http://www.blogger.com/profile/05280964633768289328</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YMc9zPJlncw/S33UIUUqQGI/AAAAAAAAADg/IthdyZwO5_Q/S220/sdm-small.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8697429285282980308.post-4521700079298702316</id><published>2008-11-29T09:00:00.000-08:00</published><updated>2008-12-10T19:09:36.148-08:00</updated><title type='text'>EPub State of the Practice, Part 3: Special Features</title><content type='html'>[Here "EPub" refers to electronic publishing in general, not specifically to the &lt;a href="http://www.idpf.org/"&gt;epub format&lt;/a&gt; for electronic documents.  At the time I wrote this blog entry, I was not aware that "epub" already had a meaning for many people in the world of, well, EPub.]&lt;br /&gt;&lt;br /&gt;Fundamentally, live links and reasonable applications of color -- the topics of my last two posts -- are both "Well, duh" features in electronic publication.  Along with full-text searching, the ability to print excerpts and copy text, and, for PDF documents, the ability to add comments and define new bookmarks, they should surprise readers only if they are absent.  That they are missing from many of the books I examined is a commentary on how badly the publishing industry trails what readers have a right to expect from ebooks.&lt;br /&gt;&lt;br /&gt;However, I found a few features in a few books that take advantage of the capabilities of epublication in interesting ways -- features that go beyond the "Well, duh" threshhold.&lt;br /&gt;&lt;br /&gt;The first of these is one-click access to code examples.  In an &lt;a href="http://fastwareproject.blogspot.com/2008/11/beyond-static-passive-presentation.html"&gt;earlier post&lt;/a&gt;, I remarked that CodeProject articles allow code to be copied to the Windows clipboard in a single click (for IE users;  the option is unavailable for FF users, sigh).  This is one way to give readers access to code, but it's not the only way.  &lt;a href="http://www.relisoft.com/book/"&gt;&lt;span style="font-style: italic;"&gt;C++ in Action&lt;/span&gt;&lt;/a&gt; offers single-click downloads of zip files that contain one or more source files, and several titles from The Pragmatic Programmers (e.g., &lt;a href="http://pragprog.com/titles/jaerlang/programming-erlang"&gt;&lt;span style="font-style: italic;"&gt;Programming Erlang&lt;/span&gt;&lt;/a&gt; and &lt;a href="http://pragprog.com/titles/sdgmapi2/google-maps-api-v2"&gt;&lt;span style="font-style: italic;"&gt;Google Maps API V2&lt;/span&gt;&lt;/a&gt;) open web browser windows on code examples when the correspoinding download links are clicked.   These are steps in the right direction, but I think what readers would really like would be single-click access to ready-to-run code examples in their preferred development environment.  Selecting a code example in an ebook might, for example, open Eclipse or Visual Studio or, for throwbacks like me, Emacs (or, God forbid, vi) on the code.  The "ready-to-run" proviso means that if the code requires auxillary code or other scaffolding before it's ready to execute, that code or scaffolding would automatically be provided.  (For my C++ books, virtually every code example would require such scaffolding, because I almost always show code fragments that won't compile by themselves.)&lt;br /&gt;&lt;br /&gt;An interesting feature offered by &lt;a href="http://www.artima.com/shop/programming_in_scala"&gt;&lt;span style="font-style: italic;"&gt;Programming in Scala&lt;/span&gt;&lt;/a&gt; is that clicking on the introduction of a term (indicated to readers both by the traditional italicization of the term as well as the application of link color to the term) whisks the reader to the definition of that term in the glossary. I think a better approach would be a pop-up window containing the definition (such as I've seen in some Windows applications), but the notion that readers of ebooks shouldn't have to waste time looking up term definitions strikes me as a good one.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Programming in Scala&lt;/span&gt; also has a set of navigation links at the bottom of each page, making it easy to get to the beginning of the book, a course-grained TOC, a fine-grained TOC, the glossary, and the index.  This is similar to the navigation links typically found on web pages, but I didn't see a similar feature on any of the other PDFs I looked at.  I might quibble with the choice of including a link to the cover of the book, because my PDF viewer (Acrobat) already gives me such a link for all PDF files, but, well, there's a reason I say it'd be a quibble.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Programming in Scala&lt;/span&gt; includes two other links at the bottom of each page, one of which is also essentially present in the newer titles I saw from The Pragmatic Programmers:  a one-click mechanism for offering page-specific feedback.  Clicking on "Suggest" (for &lt;span style="font-style: italic;"&gt;Programming in Scala &lt;/span&gt;) or "Report erratum" (for the PragProg titles) opens a web form prefilled with book information (title and version) and the page number on which you're offering feedback.   Nifty!  The PragProg form even lists the errata that have already been reported for that page, a feature that cuts both ways:  it can save readers the trouble of reporting a problem that's already known, but it also performs a subtle shift of the burden of filtering out duplicate reports from the author/publisher to the readers.  (The author(s) and publisher have to do the filtering, anyway, because there's no guarantee that readers will read the list of known errata before filing a report, but with the way the web form is currently formatted -- known errata above the fields for filing a new report -- I'm reminded of how I feel when I call tech support and have to wait on hold and be chided by a disembodied voice that I should check their online FAQ and knowledge base before trying to actually &lt;span style="font-style: italic;"&gt;talk&lt;/span&gt; to them.)  It's possible that &lt;span style="font-style: italic;"&gt;Programming in Scala &lt;/span&gt;behaves the same way, but I don't know.  I never saw that behavior, but maybe I just didn't try it on a page with known errata.&lt;br /&gt;&lt;br /&gt;I will say that I prefer the more generic "Suggest" link from &lt;span style="font-style: italic;"&gt;Programming in Scala&lt;/span&gt; to the PragProg "Report erratum" link.  I've been getting feedback from my readers since 1992, and while most comments come in the form of bug reports, not all do.  Making it easy for readers to offer page-specific feedback seems like a great idea, but I don't think it should be limited to errata reports.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8697429285282980308-4521700079298702316?l=fastwareproject.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fastwareproject.blogspot.com/feeds/4521700079298702316/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8697429285282980308&amp;postID=4521700079298702316&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/4521700079298702316'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/4521700079298702316'/><link rel='alternate' type='text/html' href='http://fastwareproject.blogspot.com/2008/11/epub-state-of-practice-part-3-special.html' title='EPub State of the Practice, Part 3: Special Features'/><author><name>Scott Meyers</name><uri>http://www.blogger.com/profile/05280964633768289328</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YMc9zPJlncw/S33UIUUqQGI/AAAAAAAAADg/IthdyZwO5_Q/S220/sdm-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8697429285282980308.post-2995701533729558379</id><published>2008-11-28T17:05:00.000-08:00</published><updated>2008-12-10T19:08:55.640-08:00</updated><title type='text'>EPub State of the Practice, Part 2: Color</title><content type='html'>[Here "EPub" refers to electronic publishing in general, not specifically to the &lt;a href="http://www.idpf.org/"&gt;epub format&lt;/a&gt; for electronic documents.  At the time I wrote this blog entry, I was not aware that "epub" already had a meaning for many people in the world of, well, EPub.]&lt;br /&gt;&lt;br /&gt;As I noted in my previous blog entry, I've been looking at electronic versions of several books, and because I'm viewing them on a device offering color (my computer monitor), I expect the books to use color where color makes sense.  Such use is one of the "Well, duh" features I mentioned last time.&lt;br /&gt;&lt;br /&gt;One can argue about when using color makes sense, but I hope we can agree that one place where it does is screen shots, and I was surprised to find that three of the nine books where I found screen shots showed them only in monochrome.  I hope we can also agree that most programmers these days are used to seeing their code syntax-highlighted (i.e., in color), and of the 13 books that show code, only four show syntax highlighting.  The intersection of these sets -- those books that show screen shots in color and that also use color for syntax highlighting code -- is only 3 books, all of which were published by &lt;a href="http://pragprog.com/"&gt;The Pragmatic Programmers&lt;/a&gt; in the last two years.&lt;br /&gt;&lt;br /&gt;I also checked for the use of color for live links.  Because links on web pages are traditionally rendered in a special color (typically blue, in contrast to non-link text, which is typically black), I believe that the active behavior of link text is likely to be overlooked by many readers if it looks the same as regular text.  I thus believe that link text should be distinguished in some visual way.  This point could be argued, i.e., one might claim that with a little experience, readers would begin to intuit which text is "linky" (e.g., cross-references, URLs, initial definitions of terms, etc.) and which text is not, and that visually distinguishing linky text wouldn't really do anything except add visual noise.  One could also argue that even if linky text is to be visually distinguished, color isn't necessarily the best way to do it.  (One could use, e.g., underlining or a different font face instead.)  Rather than argue the point one way or the other, I'll simply remark that among the books I looked at were several that do use a special color for link text as well as several that do not.&lt;br /&gt;&lt;br /&gt;Mine do, and I spent a lot of time trying to come up with a color that was visually recognizable while at the same time being unobtrusive.  My goal was to employ something that looked and acted more or less like a web page for people who were scanning for links, while simultaneously looking and acting more or less like a standard book for people who were reading straight through.  I ultimately chose a dark blue for links, which is, I hope, different enough from the surrounding black text to be distinguishable, but similar enough to it to recede into the background.  Here's a sample from &lt;a href="http://scottmeyers-ebooks.com/"&gt;&lt;span style="font-style: italic;"&gt;Effective C++&lt;/span&gt;&lt;/a&gt;.  There are three links in the text shown.  (The red text is used to focus readers' attention on the topic at hand and has nothing to do with links).&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_YMc9zPJlncw/STCKyF0YeXI/AAAAAAAAABw/7M_xf18BA7k/s1600-h/EC%2B%2B+page+160.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 279px; height: 400px;" src="http://3.bp.blogspot.com/_YMc9zPJlncw/STCKyF0YeXI/AAAAAAAAABw/7M_xf18BA7k/s400/EC%2B%2B+page+160.jpg" alt="" id="BLOGGER_PHOTO_ID_5273867756810828146" border="0" /&gt;&lt;/a&gt;A different approach is taken in &lt;a href="http://pragprog.com/titles/rails2/agile-web-development-with-rails"&gt;&lt;span style="font-style: italic;"&gt;Agile Web Development with Rails 2E&lt;/span&gt;&lt;/a&gt;, where link text is a shade of red or pink, depending on whether the link is an internal cross-reference or a URL:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_YMc9zPJlncw/STCKySIhM-I/AAAAAAAAAB4/jN7VPMw--HM/s1600-h/AWD+with+Rails+page+93.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 150px;" src="http://1.bp.blogspot.com/_YMc9zPJlncw/STCKySIhM-I/AAAAAAAAAB4/jN7VPMw--HM/s400/AWD+with+Rails+page+93.jpg" alt="" id="BLOGGER_PHOTO_ID_5273867760116511714" border="0" /&gt;&lt;/a&gt;One of my concerns is that when you combine such use of color with other uses, such as syntax-colored code, the result can be chromatically rather busy.   For example, here's a page from &lt;a href="http://pragprog.com/titles/jaerlang/programming-erlang"&gt;&lt;span style="font-style: italic;"&gt;Programming Erlang &lt;/span&gt;&lt;/a&gt;where, in addition to black, text appears in pink, grey, blue, brown, and red:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_YMc9zPJlncw/STCINh4uuzI/AAAAAAAAABo/_Nhu6dJmHPQ/s1600-h/Programming+Erland+page+94.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 334px; height: 400px;" src="http://3.bp.blogspot.com/_YMc9zPJlncw/STCINh4uuzI/AAAAAAAAABo/_Nhu6dJmHPQ/s400/Programming+Erland+page+94.jpg" alt="" id="BLOGGER_PHOTO_ID_5273864929666841394" border="0" /&gt;&lt;/a&gt;I'm not saying that's too much, but I remember the horrors that arose when multiple font faces became available, so I worry about analogous things happening with font colors.&lt;br /&gt;&lt;br /&gt;Incidentally, both &lt;span style="font-style: italic;"&gt;Agile Web Development with Rails 2E&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;Programming Erlang&lt;/span&gt; are published by The Pragmatic Programmers which, from what I can tell, is leading the pack in thinking about ways to adapt conventional book authoring and publishing for a mixed-delivery-mechanism world.  When I discuss their use of red and pink for links and their use of many colors on a page, I'm not criticizing them, I'm taking advantage of the fact that they're doing things that nobody else seems to be.  The publishing world doesn't have a lot of experience with books as electronic entities, so the fact that I chose dark blue for my links and they chose pink and red says nothing about which is better. Five years from now, maybe it will be obvious that pink and red is the better choice.  Or that blue is.  Or that both are inferior to something else.  The only way to find out is to try various options and see which ones work best.&lt;br /&gt;&lt;br /&gt;Another color-related aspect of the  ebooks I examined was whether they use color in display elements like figures, tables, and sidebars.  I found that many books use  it cosmetically, but far fewer use  it semantically.  That is, the use of color to visually set display elements off from the primary text flow or to make the display elements more visually attractive was common, but the use of color to help readers understand the information in the display elements was a lot less common.  To my surprise, some of the best examples of such use came from &lt;a href="http://www.informit.com/store/product.aspx?isbn=0132361132"&gt;&lt;span style="font-style: italic;"&gt;SOA Principles of Service Design&lt;/span&gt;&lt;/a&gt;, a book whose application of semantically-meaningful color in figures contrasts sharply with its rejection of color for links, screen shots, or code fragments.  Here's a sample figure from the book:&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_YMc9zPJlncw/STCOpS7WWXI/AAAAAAAAACA/tC_WrW_jm4M/s1600-h/SOA+PoSD+Figure+7.7.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 187px;" src="http://2.bp.blogspot.com/_YMc9zPJlncw/STCOpS7WWXI/AAAAAAAAACA/tC_WrW_jm4M/s400/SOA+PoSD+Figure+7.7.jpg" alt="" id="BLOGGER_PHOTO_ID_5273872003757398386" border="0" /&gt;&lt;/a&gt;One of my goals is to learn how to take advantage of color in figures, diagrams, tables, etc., to help get my information across to my readers.  Whether I do the work myself (as I've done in the past) or have a professional illustrator do it, I need to break out of a monochrome way of thinking about depicting information.  A good way to do that, I hope, is to pay attention to what others are doing and then shamelessly apply the &lt;a href="http://www.bartleby.com/59/3/imitationist.html"&gt;sincerest form of flattery&lt;/a&gt; to the matter :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8697429285282980308-2995701533729558379?l=fastwareproject.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fastwareproject.blogspot.com/feeds/2995701533729558379/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8697429285282980308&amp;postID=2995701533729558379&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/2995701533729558379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/2995701533729558379'/><link rel='alternate' type='text/html' href='http://fastwareproject.blogspot.com/2008/11/epub-state-of-practice-part-2-color.html' title='EPub State of the Practice, Part 2: Color'/><author><name>Scott Meyers</name><uri>http://www.blogger.com/profile/05280964633768289328</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YMc9zPJlncw/S33UIUUqQGI/AAAAAAAAADg/IthdyZwO5_Q/S220/sdm-small.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_YMc9zPJlncw/STCKyF0YeXI/AAAAAAAAABw/7M_xf18BA7k/s72-c/EC%2B%2B+page+160.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8697429285282980308.post-2505155675064022060</id><published>2008-11-27T16:15:00.000-08:00</published><updated>2008-12-10T19:07:53.308-08:00</updated><title type='text'>EPub State of the Practice, Part 1:  Links</title><content type='html'>[Here "EPub" refers to electronic publishing in general, not specifically to the &lt;a href="http://www.idpf.org/"&gt;epub format&lt;/a&gt; for electronic documents.  At the time I wrote this blog entry, I was not aware that "epub" already had a meaning for many people in the world of, well, EPub.]&lt;br /&gt;&lt;br /&gt;I've spent a fair amount of time recently playing around with various electronic versions (primarily PDF) of technical books in an attempt to get a handle on the special "beyond print" features that are offered.  In addition to the &lt;a href="http://scottmeyers-ebooks.com/"&gt;PDF versions of my books&lt;/a&gt;, I looked at the following books (listed in no particular order):&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a style="font-style: italic;" href="http://www.artima.com/shop/programming_in_scala"&gt;Programming in Scala&lt;/a&gt; by Artima Press.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.informit.com/store/product.aspx?isbn=0132361132"&gt;&lt;span style="font-style: italic;"&gt;SOA Principles of Service Design&lt;/span&gt; &lt;/a&gt;by Prentice Hall.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a style="font-style: italic;" href="http://www.informit.com/title/0321518438"&gt;Continuous Integration&lt;/a&gt; by Addison-Wesley.&lt;/li&gt;&lt;li&gt;&lt;a style="font-style: italic;" href="http://java.sun.com/docs/books/jls/download/langspec-3.0.pdf"&gt;The Java Language Specification 3E&lt;/a&gt; by Addison-Wesley.&lt;/li&gt;&lt;li&gt;&lt;a href="http://pragprog.com/titles/rails2/agile-web-development-with-rails"&gt;&lt;span style="font-style: italic;"&gt;Agile Web Development with Rails 2E&lt;/span&gt;&lt;/a&gt; by The Pragmatic Programmers.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://pragprog.com/titles/jaerlang/programming-erlang"&gt;&lt;span style="font-style: italic;"&gt;Programming Erlang&lt;/span&gt;&lt;/a&gt; by The Pragmatic Programmers.&lt;/li&gt;&lt;li&gt;&lt;a href="http://pragprog.com/titles/sdgmapi2/google-maps-api-v2"&gt;&lt;span style="font-style: italic;"&gt;Google Maps API V2&lt;/span&gt;&lt;/a&gt; by The Pragmatic Programmers.&lt;/li&gt;&lt;li&gt;&lt;a href="http://pragprog.com/titles/ruby/programming-ruby"&gt;&lt;span style="font-style: italic;"&gt;Programming Ruby 2E&lt;/span&gt;&lt;/a&gt; by The Pragmatic Programmers.&lt;/li&gt;&lt;li&gt;&lt;a style="font-style: italic;" href="http://www.misra.org.uk/public.htm"&gt;MISRA C&lt;/a&gt; by MISRA.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a style="font-style: italic;" href="http://www.misra.org.uk/public.htm"&gt;MISRA C++&lt;/a&gt; by MISRA.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a style="font-style: italic;" href="http://www.relisoft.com/book/"&gt;C++ in Action&lt;/a&gt; by Bartosz Milewski.&lt;/li&gt;&lt;li&gt;&lt;a style="font-style: italic;" href="http://www.cs.brown.edu/%7Esk/Publications/Books/ProgLangs/"&gt;Programming Languages, Application and Interpretation&lt;/a&gt; by Shriram Krishnamurthi.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;All of these are in PDF format except for &lt;span style="font-style: italic;"&gt;C++ in Action&lt;/span&gt;, which is published on the web.&lt;br /&gt;&lt;br /&gt;There was nothing scientific about this selection.  Some books are available for free, some I had purchased for my own use, and some were given to me by the publisher for one reason or another.  I choose to assume they are representative of what is available, though that may not be true.  Publication years range from 2001-2008, with newer titles generally offering more features.  If you know of other books I should take a look at, please let me know.&lt;br /&gt;&lt;br /&gt;My primary interest in looking at these books was to get a sense for the "reader experience," with a focus on (1) things I need to keep in mind as an author in order to be able to offer the feature  and (2)  "obvious" features that were missing, i.e., things I want to be sure to avoid.  An example of (1) would be initial definitions of terms that link to glossary entries (much easier to create when writing the book than to go back and add later).  An example of (2) would be URLs in the book that aren't live links.&lt;br /&gt;&lt;br /&gt;I generally refer to "obvious" features -- the things readers should be able to expect -- as the "Well, duh" features.  At the top of the list is that "linky" things should be live links.  That includes TOC and index entries, cross-references within a book, and URLs and email addresses.  Readers should be able to take for granted that they can click on all these things and be magically whisked to the right place.  As a general rule, most books make most of these things links, but I was surprised that only my books make the "see" and "see also" entries in the index live.  Color me picky, but I can't understand why, if I see this in the index,&lt;br /&gt;&lt;pre&gt;  transaction, see atomic transaction&lt;br /&gt;&lt;/pre&gt;I should have to manually slog my way back to the beginning of the index to find the entry for "atomic transaction".   Hello, computer!  You &lt;span style="font-style: italic;"&gt;know&lt;/span&gt; what entry I want to look at.  Freakin' take me there!  (Having gone through the process of making these links live in books never written for electronic publication, I can tell you that it was a lot of work, but failing to support the "Well, duh" epub features would be embarrassing, and I hate being embarrassed.)&lt;br /&gt;&lt;br /&gt;I was also surprised to find that only my books make email addresses live.  I don't get it.  What's the point of putting an email address in a book but not making it clickable to send to it?&lt;br /&gt;&lt;br /&gt;As a general rule, page numbers in the indices were live, but they were treated in different ways.  If, in the index, you see that "transaction" is discussed on page 44 and you click on the 44, where do you expect to be taken?  Some books take you to the top of page 44.  Some books take you to the beginning of the content of page 44, meaning that the running header on the page has just scrolled off the top of the window.  Still others take you to the precise point on page 44 where you discuss "transaction." (To be more precise, they take you to the point on the page where the metadata causing the index entry to be generated is located.)   From personal experience I can tell you that where you go when you click on a page number in an index can be determined by the author, the indexer, the software used to write the book, the PDF generation process, or some combination of these.   What I don't know is what the "proper" behavior is.  Jumping to the point on the page where the metadata is located sounds like it's the most accurate, but making sense of the text you find there generally requires backing up to at least the beginning of the paragraph to pick up the context of the use.  Physical books have this problem, too:  if the index refers you to page n, but the discussion on page n is at the top of the page, you often have to start reading on page n-1 in order to make sense of what you read.  If you have ideas on how links from index page numbers should behave, please let me know.&lt;br /&gt;&lt;br /&gt;I checked only four of the books (beyond mine) to see how footnotes were handled, in part because it's generally not that easy to find footnotes (especially if the book doesn't have any).  Of the four, only one made the footnote number a live link, and none had a back link from the footnote text to the point of reference.  (My books don't make footnotes live in either direction.)  For books with static page breaks (such as PDF) non-live footnotes may be defensible, but where page breaks are dynamically determined and pages may be long (e.g., web pages), links in both directions (a la Wikipedia) seems like a more useful approach.  I'm inclined to think that bidirectional footnote links should be provided.  After all, if they're not intrusive, readers who don't want to use them can just ignore them.  If the links are missing, of course, and a reader wants them, that reader is out of luck, and I have a strong disinclination to render my readers unlucky.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8697429285282980308-2505155675064022060?l=fastwareproject.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fastwareproject.blogspot.com/feeds/2505155675064022060/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8697429285282980308&amp;postID=2505155675064022060&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/2505155675064022060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/2505155675064022060'/><link rel='alternate' type='text/html' href='http://fastwareproject.blogspot.com/2008/11/epub-state-of-practice-part-1-links.html' title='EPub State of the Practice, Part 1:  Links'/><author><name>Scott Meyers</name><uri>http://www.blogger.com/profile/05280964633768289328</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YMc9zPJlncw/S33UIUUqQGI/AAAAAAAAADg/IthdyZwO5_Q/S220/sdm-small.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8697429285282980308.post-6547432902683146486</id><published>2008-11-27T12:20:00.000-08:00</published><updated>2008-11-27T13:09:10.762-08:00</updated><title type='text'>Indices in Ebooks</title><content type='html'>I've been looking through a number of ebooks recently, and one of the things I've been examining has been each book's index. Assuming the book has an index. Some don't.  Which raises the question:  given full-text search (e.g., via book-viewing software or desktop search tools), do indices continue to be useful?  Or are they an artifact of print technology that makes little sense in an electronic environment?&lt;br /&gt;&lt;br /&gt;I'm committed to producing indices for my books, because one of the output media I target is print.  Indices in print are of proven value, so I'm on the hook for them regardless.  But I think they make sense even for electronic-only publication.  The reason is that good indices reference not just text, but &lt;span style="font-style: italic;"&gt;concepts&lt;/span&gt;.  &lt;span style="font-style: italic;"&gt;Fastware!&lt;/span&gt;, for example, is about how to write software that runs quickly, but there are lots of words that correspond to that idea:  speed, efficiency, performance, scalability, responsiveness, latency, etc.  If you're interested in reducing memory latency, and I happen to say something important in a passage where I'm discussing how to improve the hit rate of the instruction cache, you want the index entry under "latency" to point you to that passage (or, more accurately, &lt;span style="font-style: italic;"&gt;I&lt;/span&gt; want the index entry under "latency" to point you to that passage), even if I somehow never manage to use the word "latency" in the passage.&lt;br /&gt;&lt;br /&gt;Many technical books have awful indices, a situation I attribute to the facts that (1) most indices are prepared by professional indexers, who typically have no understanding of the book's content -- they literally don't know what many of the nouns and verbs mean; (2) these indexers are paid unbelievably badly (typically only a few hundred dollars to index technical books of up to a thousand pages), so they have little incentive to do more than a cursory job; and (3) the quality of a book's index doesn't seem to affect sales, so there is no economic incentive to change the situation.  My guess is that as ebooks become more common, indices will fall by the wayside, because it will be easy for authors and publishers to reason that textual searches obviate the need for separate indices, and given the sorry state of most indices, this will probably be true.  I'm an old-fashioned guy, however, and I think that a &lt;span style="font-style: italic;"&gt;good &lt;/span&gt;index improves the usability of a book, and I also believe that the whole point of a book is to serve the interests of its readers, so for the foreseeable future, I plan to produce indices for my books, even though index preparation is, to be honest, probably the single most unpleasant part of writing a book.&lt;br /&gt;&lt;br /&gt;So I'm going to produce an index for &lt;span style="font-style: italic;"&gt;Fastware!&lt;/span&gt;, and that takes me back to page numbers.  In an earlier blog entry I worried about &lt;a href="http://fastwareproject.blogspot.com/2008/11/post-publication-page-break-problem.html"&gt;the problem of referring to page numbers&lt;/a&gt; in a book that may be published in multiple forms, hence have multiple sets of page numbers.  Two people commented that the solution is simple:  refer to something like section numbers or paragraph numbers instead of page numbers.  This is clearly the correct approach, but think of what this means for an index.  A single index entry often corresponds to multiple locations in the book, which is traditionally represented as a list of page numbers.  If page numbers go away, and if we assume that locations in a book are represented in the form &lt;span style="font-style: italic;"&gt;c.p&lt;/span&gt;, where &lt;span style="font-style: italic;"&gt;c&lt;/span&gt; is the chapter number and &lt;span style="font-style: italic;"&gt;p&lt;/span&gt; is the paragraph number within that chapter, we end with index entries that might look like this:&lt;br /&gt;&lt;pre&gt;  containers, standard&lt;br /&gt;    C++  4.3, 4.55, 5.18-22, 7.23&lt;br /&gt;    C#   4.4, 4.80-99, 7.65&lt;br /&gt;    Java  4.3, 4.60, 5.22-25&lt;br /&gt;&lt;/pre&gt;It looks a bit odd to me, but I can't think of a reason why there is anything wrong with it.  Can you?&lt;br /&gt;&lt;br /&gt;Of course, we could also use the form &lt;span style="font-style: italic;"&gt;c:p&lt;/span&gt;, which would make references look somewhat biblical, hence possibly enhancing their appearance of authority :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8697429285282980308-6547432902683146486?l=fastwareproject.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fastwareproject.blogspot.com/feeds/6547432902683146486/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8697429285282980308&amp;postID=6547432902683146486&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/6547432902683146486'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/6547432902683146486'/><link rel='alternate' type='text/html' href='http://fastwareproject.blogspot.com/2008/11/indices-in-ebooks.html' title='Indices in Ebooks'/><author><name>Scott Meyers</name><uri>http://www.blogger.com/profile/05280964633768289328</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YMc9zPJlncw/S33UIUUqQGI/AAAAAAAAADg/IthdyZwO5_Q/S220/sdm-small.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8697429285282980308.post-1925259794566283304</id><published>2008-11-14T15:12:00.000-08:00</published><updated>2008-11-14T15:36:31.456-08:00</updated><title type='text'>Beyond Static, Passive Presentation</title><content type='html'>I use Firefox for browsing, falling back on IE only when I find a site that doesn't seem to work properly with FF.  I happened to be using IE the other day when I visited &lt;a href="http://www.codeproject.com/KB/winhelp/docbook_howto.aspx"&gt;Jim Crafton's CodeProject article on using DocBook on Windows&lt;/a&gt;, and I noticed something I'd never seen before:  the ability to copy code examples from the article to the clipboard with a single mouse click:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_YMc9zPJlncw/SR4GAw32FsI/AAAAAAAAABI/mH6fp-Y0QOg/s1600-h/codeproject+copy+code+ie.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 107px;" src="http://2.bp.blogspot.com/_YMc9zPJlncw/SR4GAw32FsI/AAAAAAAAABI/mH6fp-Y0QOg/s320/codeproject+copy+code+ie.jpg" alt="" id="BLOGGER_PHOTO_ID_5268655224258959042" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The "Copy Code" option doesn't exist under FF, alas, but the idea of making it easy for readers to work with an electronic book in a natural fashion is a good one.&lt;br /&gt;&lt;br /&gt;In fact, it's an example of a more general idea:  presentation of a book's content should take advantage of the natural capabilities of the presentation medium.  Another example is also shown in the image above:  the ability to dynamically collapse and expand a code fragment.  Such presentation capabilities don't affect the fundamental content of a book, but authors do need to keep them in mind, because authors can often do a better job of specifying the natural "copy to clipboard" or "collapse/expand" chunks.  (At CodeProject, the chunks are presumably determined by the content in some HTML block.)&lt;br /&gt;&lt;br /&gt;The fundamental idea is this: although the content of a book is essentially static, the presentation of that content need not be.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8697429285282980308-1925259794566283304?l=fastwareproject.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fastwareproject.blogspot.com/feeds/1925259794566283304/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8697429285282980308&amp;postID=1925259794566283304&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/1925259794566283304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/1925259794566283304'/><link rel='alternate' type='text/html' href='http://fastwareproject.blogspot.com/2008/11/beyond-static-passive-presentation.html' title='Beyond Static, Passive Presentation'/><author><name>Scott Meyers</name><uri>http://www.blogger.com/profile/05280964633768289328</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YMc9zPJlncw/S33UIUUqQGI/AAAAAAAAADg/IthdyZwO5_Q/S220/sdm-small.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_YMc9zPJlncw/SR4GAw32FsI/AAAAAAAAABI/mH6fp-Y0QOg/s72-c/codeproject+copy+code+ie.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8697429285282980308.post-1184501060094965882</id><published>2008-11-09T08:57:00.000-08:00</published><updated>2008-11-27T13:10:03.246-08:00</updated><title type='text'>What can go in a Book?</title><content type='html'>I explained in my last entry that an ink-on-paper book (i.e., a book&lt;sub&gt;&lt;i&gt;p&lt;/i&gt;&lt;/sub&gt;) is simply a physical manifestation of the book content (i.e., book&lt;sub&gt;&lt;i&gt;c&lt;/i&gt;&lt;/sub&gt;) an author has produced. Other manifestations offer different characteristics.  Publication as PDF (to be viewed on a traditional monitor) allows the use of multiple colors with no greater cost than the use of black only.  Publication as an audio stream eliminates concerns about page breaks, but makes display elements like tables, figures, and code listings problematic. Publication as a web page makes pretty much anything possible:  dynamically generated content, full-motion animations and video, interactive elements, etc.  &lt;br /&gt;&lt;br /&gt;What does it means to write a book (i.e., a book&lt;sub&gt;&lt;i&gt;c&lt;/i&gt;&lt;/sub&gt;), given that you can't assume it will be packaged as a book&lt;sub&gt;&lt;i&gt;p&lt;/i&gt;&lt;/sub&gt;? The question is important, because I can't very well author a book if I don't know which content forms I'm permitted to include and which I'm not.&lt;br /&gt;&lt;br /&gt;My answer to this question, perhaps counterintuitively, is based on a book&lt;sub&gt;&lt;i&gt;p&lt;/i&gt;&lt;/sub&gt;.  Whatever it means to write a "book," the result should be recognizable as what we currently understand a book to be. We could call TV "radio with pictures," but we don't, and we could call theatrical plays "live TV," but we don't do that, either.  I don't see any sense in defining "book" such that somebody familiar with a book&lt;sub&gt;&lt;i&gt;p&lt;/i&gt;&lt;/sub&gt; wouldn't be able to see the connection between what they know and what I've defined.&lt;br /&gt;&lt;br /&gt;So here's my initial working definition of a book (i.e., a book&lt;sub&gt;&lt;i&gt;c&lt;/i&gt;&lt;/sub&gt;):  it can be reasonably represented as a book&lt;sub&gt;&lt;i&gt;p&lt;/i&gt;&lt;/sub&gt;.  That is, if I say "I'm writing a book," you can assume that whatever I produce can be reasonably represented in ink-on-paper form.  So we're talking static content.  All the usual book stuff is included, i.e., text, diagrams, tables, pictures, etc.  Dynamically generated content is out.  So are interactive elements.  But audio, video, and animations may make the cut, depending on the form they take.&lt;br /&gt;&lt;br /&gt;A video of a talking head, for example, can be represented in a book&lt;sub&gt;&lt;i&gt;p&lt;/i&gt;&lt;/sub&gt; as a frame from the video (i.e., a photo of the speaker) accompanied by a transcript of what the speaker says.  Readers lose the sound and cadence, etc., of the speaker's voice, and they're deprived of seeing how the speaker's face moves as he or she talks, but -- assuming such information was never the point of the video -- the essential content has been preserved in ink-on-paper form.  Talking head videos are thus permissible in a book&lt;sub&gt;&lt;i&gt;c&lt;/i&gt;&lt;/sub&gt; (and would be delivered as such on output devices where that's possible).&lt;br /&gt;&lt;br /&gt;Similarly, transcripts of the audio-only equivalent of talking heads ("speaking voices?") make such audio permissible in a book&lt;sub&gt;&lt;i&gt;c&lt;/i&gt;&lt;/sub&gt;.  Many podcasts could thus be considered book&lt;sub&gt;&lt;i&gt;c&lt;/i&gt;&lt;/sub&gt; manifestations.  (If books in recorded form (i.e., audiobooks) are still books, then textual representations of speech are still speech ("textaudio"?), and since textual representations of speech can be published as recognizable book&lt;sub&gt;&lt;i&gt;p&lt;/i&gt;&lt;/sub&gt;s, recorded speech is legit in a book&lt;sub&gt;&lt;i&gt;c&lt;/i&gt;&lt;/sub&gt;.)  The way people express things in spoken versus written form typically differs qualitatively, so transcribing spoken audio and publishing it in book form is likely to yield a lousy book, but my goal here is to figure out what's in my author's toolbox and what's not.  If something's in, part of my job as an author is to make sure I don't just use it willy-nilly;  I'm responsible for using it well.&lt;br /&gt;&lt;br /&gt;I find animations to be a particularly interesting case.  As a book author, may I include animations?  Consider, for example, &lt;a href="http://www.geocities.com/SiliconValley/Network/1854/Rbt.html"&gt;David Howard's animation of the behavior of a red-black tree&lt;/a&gt;.  Can such an animation be part of a book&lt;sub&gt;&lt;i&gt;c&lt;/i&gt;&lt;/sub&gt;? &lt;br /&gt;&lt;br /&gt;I'm inclined to think that it can.  Books have long contained "before" and "after" diagrams to help explain how a transformation between two states occurs.  You'll find several in the &lt;a href="http://en.wikipedia.org/wiki/Red_black_tree"&gt;Wikipedia entry for red-black trees&lt;/a&gt;.  (Well, you will if you look  right now.  What the page will look like if much time has elapsed between when I write this and you read it is anybody's guess.) It's easy to imagine such diagrams being frames extracted from an animation.  If, as an author, I have enough &lt;a href="http://fastwareproject.blogspot.com/2008/11/content-and-presentation-not.html"&gt;conditional content control&lt;/a&gt; to be able to say&lt;br /&gt;&lt;pre&gt;  if (rendering for a device that can show animation)&lt;br /&gt;    show this animation along with this explanatory text&lt;br /&gt;  else&lt;br /&gt;    show these animation frames along with this other explanatory text&lt;br /&gt;&lt;/pre&gt; then at least some animations are within the purview of a book&lt;sub&gt;&lt;i&gt;c&lt;/i&gt;&lt;/sub&gt;.&lt;br /&gt;&lt;br /&gt;The set of acceptable entities in a book&lt;sub&gt;&lt;i&gt;c&lt;/i&gt;&lt;/sub&gt; is thus a superset of those that are directly expressible in a book&lt;sub&gt;&lt;i&gt;p&lt;/i&gt;&lt;/sub&gt;.  The information content of everything in a book&lt;sub&gt;&lt;i&gt;c&lt;/i&gt;&lt;/sub&gt; must be representable in a book&lt;sub&gt;&lt;i&gt;p&lt;/i&gt;&lt;/sub&gt;, but if a trivial tranformation needs to be applied (e.g., video is replaced by a selected frame, audio of speech is replaced by a transcript)  or even if a nontrivial-but-straightforward transformation needs to be applied (e.g., animation + description replaced by animation frames + alternate description), such content is still valid, hence part of my toolkit as a book author.  Writing a multiple-platform book&lt;sub&gt;&lt;i&gt;c&lt;/i&gt;&lt;/sub&gt; thus gives me more choices for expressing myself than I'd have if I restricted myself to book&lt;sub&gt;&lt;i&gt;p&lt;/i&gt;&lt;/sub&gt; publication.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8697429285282980308-1184501060094965882?l=fastwareproject.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fastwareproject.blogspot.com/feeds/1184501060094965882/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8697429285282980308&amp;postID=1184501060094965882&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/1184501060094965882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/1184501060094965882'/><link rel='alternate' type='text/html' href='http://fastwareproject.blogspot.com/2008/11/what-can-go-in-book.html' title='What can go in a Book?'/><author><name>Scott Meyers</name><uri>http://www.blogger.com/profile/05280964633768289328</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YMc9zPJlncw/S33UIUUqQGI/AAAAAAAAADg/IthdyZwO5_Q/S220/sdm-small.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8697429285282980308.post-5999666541072260905</id><published>2008-11-08T13:43:00.000-08:00</published><updated>2008-11-08T18:08:59.964-08:00</updated><title type='text'>Bookp versus Bookc</title><content type='html'>Consider these two statements:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;I wrote a book.&lt;/li&gt;&lt;li&gt;The book I wrote is on my shelf.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-style: italic;"&gt;B&lt;/span&gt;&lt;span style="font-style: italic;"&gt;ook&lt;/span&gt; does not mean the same things here, and increasingly I feel that this ambiguity causes problems.  Technological changes are causing the meanings to drift further apart, so I think it's important to clarify the two meanings that &lt;span style="font-style: italic;"&gt;book&lt;/span&gt; can have.&lt;br /&gt;&lt;br /&gt;I'll call the meanings book&lt;sub&gt;&lt;i&gt;p&lt;/i&gt;&lt;/sub&gt; and book&lt;sub&gt;&lt;i&gt;c&lt;/i&gt;&lt;/sub&gt;.  A book&lt;sub&gt;&lt;i&gt;p&lt;/i&gt;&lt;/sub&gt; is a physical object. It consists of pages of paper with ink on them.  The pages are bound together and held between two covers.  Book&lt;sub&gt;&lt;i&gt;p&lt;/i&gt;&lt;/sub&gt;s are what bookstores and libraries are filled with.&lt;br /&gt;&lt;br /&gt;A book&lt;sub&gt;&lt;i&gt;c&lt;/i&gt;&lt;/sub&gt; is not a physical object.  The &lt;i&gt;c&lt;/i&gt; stands for &lt;span style="font-style: italic;"&gt;content&lt;/span&gt;, and if we assume that the content of a book is a simple stream of text (which is essentially true for most novels), book&lt;sub&gt;&lt;i&gt;c&lt;/i&gt;&lt;/sub&gt; is that stream of text.  The text might get printed on pages that are bound together, thus yielding a book&lt;sub&gt;&lt;i&gt;p&lt;/i&gt;&lt;/sub&gt;, but the text might also get spoken aloud and recorded as an audiobook.  It might get distributed over a set of web pages, thus forming a web site.  The content of a book is independent of its packaging, and in fact &lt;span style="font-style: italic;"&gt;packaging&lt;/span&gt; is what the &lt;span style="font-style: italic;"&gt;p&lt;/span&gt; in book&lt;sub&gt;&lt;i&gt;p&lt;/i&gt;&lt;/sub&gt; stands for.  A book&lt;sub&gt;&lt;i&gt;p&lt;/i&gt;&lt;/sub&gt; is simply one of many different ways of packaging a book&lt;sub&gt;&lt;i&gt;c&lt;/i&gt;&lt;/sub&gt;.&lt;br /&gt;&lt;br /&gt;Authors don't generally write book&lt;sub&gt;&lt;i&gt;p&lt;/i&gt;&lt;/sub&gt;s, although I suppose those who self-publish and keep boxes of books in their garage do. Rather, authors write book&lt;sub&gt;&lt;i&gt;c&lt;/i&gt;&lt;/sub&gt;s.  The semantics of the statements above, then, can be depicted this way:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;I wrote a book&lt;sub&gt;&lt;i&gt;c&lt;/i&gt;&lt;/sub&gt;.&lt;/li&gt;&lt;li&gt;The book&lt;sub&gt;&lt;i&gt;p&lt;/i&gt;&lt;/sub&gt; I wrote is on my shelf.&lt;/li&gt;&lt;/ul&gt;With this distinction in mind, consider Doug McCune's statement that &lt;a href="http://dougmccune.com/blog/2007/03/23/why-i-dont-read-books/"&gt;he doesn't read books&lt;/a&gt; or  Joel Spolsky's thesis that &lt;a href="http://www.joelonsoftware.com/items/2008/04/16.html"&gt;programmers seem to have stopped reading books&lt;/a&gt; (both of which I found out about thanks to &lt;a href="http://www.codinghorror.com/blog/"&gt;Jeff Atwood's blog&lt;/a&gt;.)  I think  these statements refer to book&lt;sub&gt;&lt;i&gt;p&lt;/i&gt;&lt;/sub&gt;s, not book&lt;sub&gt;&lt;i&gt;c&lt;/i&gt;&lt;/sub&gt;s, and that opens the door to the possibility that people who claim to not read books or people who appear to not read books actually do read them, they just don't read them in book&lt;sub&gt;&lt;i&gt;p&lt;/i&gt;&lt;/sub&gt; form.&lt;br /&gt;&lt;br /&gt;Like Mulder, I want to believe, because I happen to like writing books (i.e., book&lt;sub&gt;&lt;i&gt;c&lt;/i&gt;&lt;/sub&gt;s). Other entries in this blog make clear that I think a lot about book&lt;sub&gt;&lt;i&gt;p&lt;/i&gt;&lt;/sub&gt;s, but that's simple pragmatics.  The publishing industry is changing, but it's currently set up to produce, market, distribute, and sell books in printed form.  Remaining mindful of authoring constraints arising from printing considerations is no different from remaining mindful of software constraints arising from Windows considerations (assuming,  in both cases, you want to maximize the number of platforms on which you can deliver what you produce). &lt;br /&gt;&lt;br /&gt;Authors who leave all the layout decisions to their publishers (i.e., most of them) worry only about book&lt;sub&gt;&lt;i&gt;c&lt;/i&gt;&lt;/sub&gt; considerations. Authors such as me who can't keep themselves from delving into layout matters have to keep book&lt;sub&gt;&lt;i&gt;p&lt;/i&gt;&lt;/sub&gt; issues in mind, but it doesn't change the fact that, fundamentally, &lt;span style="font-weight: bold;"&gt;writing a book means writing a book&lt;/span&gt;&lt;sub style="font-weight: bold;"&gt;&lt;i&gt;c&lt;/i&gt;&lt;/sub&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8697429285282980308-5999666541072260905?l=fastwareproject.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fastwareproject.blogspot.com/feeds/5999666541072260905/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8697429285282980308&amp;postID=5999666541072260905&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/5999666541072260905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/5999666541072260905'/><link rel='alternate' type='text/html' href='http://fastwareproject.blogspot.com/2008/11/book-p-versus-book-c.html' title='Book&lt;sub&gt;&lt;i&gt;p&lt;/i&gt;&lt;/sub&gt; versus Book&lt;sub&gt;&lt;i&gt;c&lt;/i&gt;&lt;/sub&gt;'/><author><name>Scott Meyers</name><uri>http://www.blogger.com/profile/05280964633768289328</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YMc9zPJlncw/S33UIUUqQGI/AAAAAAAAADg/IthdyZwO5_Q/S220/sdm-small.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8697429285282980308.post-8845696095560726860</id><published>2008-11-08T11:10:00.000-08:00</published><updated>2008-11-08T13:42:16.567-08:00</updated><title type='text'>The Post-Publication Page Break Problem</title><content type='html'>Traditionally, books are published, and that's that.  As I've noted before, however, I typically modify my books for new printings, so the content changes over time.  Each change is small and localized: an added, removed, or rewritten sentence here; a touched-up code example there; the addition of an occasional footnote; etc.  From a software development point of view,  new printings are the publishing equivalent of bug fix releases.&lt;br /&gt;&lt;br /&gt;Sometimes even small, localized changes can have extensive implications.  Adding or removing a sentence on a page can cause the page breaks for that and subsequent pages to change, and when page breaks change, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;TOC&lt;/span&gt; and index entries can change, too;  content that used to be on page &lt;span style="font-style: italic;"&gt;n&lt;/span&gt; might now find itself on page &lt;span style="font-style: italic;"&gt;n-1&lt;/span&gt; or &lt;span style="font-style: italic;"&gt;n+1&lt;/span&gt;.  (There are scenarios where it can change even more than that, but we don't need to worry about those.)&lt;br /&gt;&lt;br /&gt;Assuming the existence of a &lt;a href="http://fastwareproject.blogspot.com/2008/11/single-source-automatic-building-is.html"&gt;single-source automated build process&lt;/a&gt; for the book, each printing should be completely consistent (i.e., all &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;TOC&lt;/span&gt; and index entries should be correct), but even overlooking the fact that a fully automatic pagination process might yield &lt;a href="http://fastwareproject.blogspot.com/2008/11/page-break-problem.html"&gt;unfortunate page breaks&lt;/a&gt;, we still have a problem. &lt;br /&gt;&lt;br /&gt;Readers shouldn't have to worry about which printing of a book they have.  If Person A has a copy of &lt;span style="font-style: italic;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Fastware&lt;/span&gt;!&lt;/span&gt; and Person B also has a copy of &lt;span style="font-style: italic;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;Fastware&lt;/span&gt;!&lt;/span&gt;, they have the same book, as far as they're concerned.  The fact that there might be minor differences between the two because Person A happens to have the first printing and Person B has the tenth shouldn't matter to them.  Heck, people have enough trouble remembering that different &lt;span style="font-style: italic;"&gt;editions &lt;/span&gt;look different.  It's not reasonable to ask them to remember that different printings of the same edition might, too.&lt;br /&gt;&lt;br /&gt;Given that they think they have the same book (even though they might not), I want to maximize the likelihood that if Person A says something like, "As you can see on page 44, where Meyers brilliantly demonstrates that a cache-unfriendly traversal can have a significant impact on performance...," Person B can go to page 44 and find the passage Person A is referring to.  The way to maximize that likelihood is to ensure that once a book is published, page breaks change as little as possible.  So if between the first and tenth printings, I removed some text from, say, page 18, it's better to let page 18 be a little short (or increase the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;interparagraph&lt;/span&gt; or interline spacing on the page) than to have some text from page 19 move onto page 18 (plus the associated potential cascading text movement on subsequent pages).  Similarly, if I add text to a page, it's best to prevent any existing text from moving across a page boundary. &lt;br /&gt;&lt;br /&gt;Practically speaking, once the first printing of a book goes out, I want the page breaks to remain static, even if I tweak the content of the book such that the page breaks would fall in different locations if I were to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;repaginate&lt;/span&gt; from scratch.  Not only would this help preserve the illusion that Person A's first printing and Person B's tenth printing are the same book, it would also preserve any hand-tweaking of page breaks that had been done prior to initial publication (as I discussed in my &lt;a href="http://fastwareproject.blogspot.com/2008/11/page-break-problem.html"&gt;earlier blog entry on page breaks&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Which leads to the inevitable question:  how can I preserve initial-publication page breaks across multiple publication platforms (i.e., print, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;epub&lt;/span&gt;, etc.), use an automatic build process, and    still preserve the ability to modify content for new printings?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8697429285282980308-8845696095560726860?l=fastwareproject.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fastwareproject.blogspot.com/feeds/8845696095560726860/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8697429285282980308&amp;postID=8845696095560726860&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/8845696095560726860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/8845696095560726860'/><link rel='alternate' type='text/html' href='http://fastwareproject.blogspot.com/2008/11/post-publication-page-break-problem.html' title='The Post-Publication Page Break Problem'/><author><name>Scott Meyers</name><uri>http://www.blogger.com/profile/05280964633768289328</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YMc9zPJlncw/S33UIUUqQGI/AAAAAAAAADg/IthdyZwO5_Q/S220/sdm-small.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8697429285282980308.post-2682468287315886670</id><published>2008-11-07T20:11:00.000-08:00</published><updated>2008-11-07T21:04:18.641-08:00</updated><title type='text'>XML ¬⇒  ¬LaTeX!</title><content type='html'>One of the attractions of LaTeX is that it produces wonderful output.  In all likelihood, TeX employs the best line/paragraph/page layout algorithms in the business.  Furthermore, LaTeX is terrifically expressive, something I know even though my familiarity with it is limited.  (I did a lot of writing with LaTeX in my academic days, but I tended to learn only enough to do what I wanted to do.  Unlike many Computer Science graduate students, I never really sat down and &lt;span style="font-style: italic;"&gt;studied&lt;/span&gt; it.)  I know, for example, that LaTeX allows authors to float displays (e.g., figures, tables, listings, etc.) to the top of a page, the bottom of a page, or both.  In fact, this is the default, meaning that unless authors disable such flexibility, LaTeX will float displays to the next "good" location.  (Experienced LaTeXies  know I'm lying a bit, but it's close to the truth, and the actual truth doesn't add anything here.)  This behavior seemed so natural and obvious to me, I took it for granted for many years.  Only when I started using less capable systems (among them FrameMaker, OpenOffice Writer, and, from what I can tell from varous comments on the web, Microsoft Word) that offered much more limited support for floats, did I realize I'd been spoiled by LaTeX.&lt;br /&gt;&lt;br /&gt;Because LaTeX is so expressive and its output is so good, I was reluctant to dismiss it in favor of an XML-based approach such as DocBook.  But then, in one of those &lt;span style="font-style: italic;"&gt;Duh!&lt;/span&gt; moments that happen now and again, I realized that as long as there is a way to take a DocBook document and transform it into a LaTeX document, I could use XML as my document representation and LaTeX as my print rendering engine.  In fact, I'm pretty sure that this is what the Pragmatic Programmers do:  write books in PML (their book schema), then transform them into LaTeX source for ink-on-paper rendering.&lt;br /&gt;&lt;br /&gt;Assuming this line of reasoning is valid, DocBook becomes a pretty appealing option, because it means I can take advantage of all the work done by and tools developed for the DocBook and XML communities, but I can still hold out hope for the layout quality of LaTeX.  Such hope can exist only if DocBook offers sufficient expressiveness, however, because there's nothing to be gained by the possibility of using LaTeX as a rendering engine if I can't express what I want it to do via DocBook.  My next step, therefore, is to install DocBook and see if it will let me say what I want to say.  I already have a pretty good idea of what I want &lt;span style="font-style: italic;"&gt;Fastware!&lt;/span&gt; to look like, because I've done preliminary page layout in both OpenOffice and FrameMaker.  If I can get DocBook to produce the output I want, I can then try translating my &lt;a href="http://www.artima.com/cppsource/codefeatures.html"&gt;recent C++ article&lt;/a&gt; into DocBook, which will be a good way to see if its support for floating displays, cross-references, and bibliographies is up to snuff.  If so, DocBook will look like a reasonable book representation format, and I can move on to  seeing whether I can find a decent WYSIWYG front end for it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8697429285282980308-2682468287315886670?l=fastwareproject.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fastwareproject.blogspot.com/feeds/2682468287315886670/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8697429285282980308&amp;postID=2682468287315886670&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/2682468287315886670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/2682468287315886670'/><link rel='alternate' type='text/html' href='http://fastwareproject.blogspot.com/2008/11/xml.html' title='XML &amp;not;&amp;rArr;  &amp;not;LaTeX!'/><author><name>Scott Meyers</name><uri>http://www.blogger.com/profile/05280964633768289328</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://3.bp.blogspot.com/_YMc9zPJlncw/S33UIUUqQGI/AAAAAAAAADg/IthdyZwO5_Q/S220/sdm-small.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8697429285282980308.post-41365169531342327</id><published>2008-11-07T11:25:00.000-08:00</published><updated>2008-11-07T11:58:23.414-08:00</updated><title type='text'>LaTeX, DocBook, or Something Else?</title><content type='html'>Some publishers already produce books for multiple platforms (i.e., print form as well as at least one electronic format) from a single master source, and in some cases I know (or at least believe I know) the format:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;O'Reilly&lt;/span&gt;: XML using the DocBook schema.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Pragmatic Programmer&lt;/span&gt;: XML using the PML ("pragmatic markup language," presumably) schema.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Artima Press&lt;/span&gt;: LaTeX.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;I'd be very interested to know of decisions other publishers have made (even if the "publisher" is an individual) for master document source formats for multiple-platform publication.  I'd also be very interested in comments on the advantages and disadvantages of any specific formats, including DocBook, LaTeX, and any others you have experience with.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8697429285282980308-41365169531342327?l=fastwareproject.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fastwareproject.blogspot.com/feeds/41365169531342327/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8697429285282980308&amp;postID=41365169531342327&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/41365169531342327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/41365169531342327'/><link rel='alternate' type='text/html' href='http://fastwareproject.blogspot.com/2008/11/latex-docbook-or-something-else.html' title='LaTeX, DocBook, or Something Else?'/><author><name>Scott Meyers</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.aristeia.com/images/sdm-big.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8697429285282980308.post-8823737577540051749</id><published>2008-11-06T21:47:00.000-08:00</published><updated>2008-11-08T09:06:52.494-08:00</updated><title type='text'>Conditional Formatting</title><content type='html'>Because I want to write for multiple output devices, some of which support color and some of which do not, I'd like to be able to specify &lt;span style="font-style: italic;"&gt;conditional formatting&lt;/span&gt; as I write.  In a &lt;a href="http://www.artima.com/cppsource/codefeatures.html"&gt;recent article&lt;/a&gt;, for example, I use blue as my standard code color with red as a highlight color:&lt;br /&gt;&lt;pre class="indentcourier"&gt;&lt;span style="color:blue;"&gt;  void g(&lt;span style="color:red;"&gt;MakeFeatures&amp;lt;tepsafe&amp;gt;::type features&lt;/span&gt;)&lt;br /&gt;  {&lt;br /&gt;    int xVal, yVal;&lt;br /&gt;    ...&lt;br /&gt;    f(xVal, yVal, &lt;span style="color:red;"&gt;features&lt;/span&gt;);&lt;br /&gt;    ...&lt;br /&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;If I were writing for a device with no color support, I'd probably use black as my standard code color and something like bold as a highlighting technique:&lt;br /&gt;&lt;pre class="indentcourier"&gt;  void g(&lt;span style="font-weight: bold;"&gt;MakeFeatures&amp;lt;tepsafe&amp;gt;::type features&lt;/span&gt;)&lt;br /&gt;  {&lt;br /&gt;    int xVal, yVal;&lt;br /&gt;    ...&lt;br /&gt;    f(xVal, yVal, &lt;span style="font-weight: bold;"&gt;features&lt;/span&gt;);&lt;br /&gt;    ...&lt;br /&gt;  }&lt;br /&gt;&lt;/pre&gt;I don't know whether traditional WYSIWYG word processors support this kind of thing.  As far as I know, FrameMaker doesn't, but perhaps there is a way to coax it into exhibiting this behavior.&lt;br /&gt;&lt;br /&gt;More problematic, I think, is conditional formatting in figures and diagrams.  Here's a figure from the same article:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_YMc9zPJlncw/SRXFrlp-thI/AAAAAAAAAAo/DDba62ca5aM/s1600-h/figure+color.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 278px;" src="http://4.bp.blogspot.com/_YMc9zPJlncw/SRXFrlp-thI/AAAAAAAAAAo/DDba62ca5aM/s320/figure+color.jpg" alt="" id="BLOGGER_PHOTO_ID_5266332691912898066" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;If I wanted to express the same highlighting information in a black and white presentation, I could "bold-face" the lines:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_YMc9zPJlncw/SRXFsBhxrCI/AAAAAAAAAAw/SXA0HpNFJ2s/s1600-h/figure+b%26w.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 282px;" src="http://1.bp.blogspot.com/_YMc9zPJlncw/SRXFsBhxrCI/AAAAAAAAAAw/SXA0HpNFJ2s/s320/figure+b%26w.jpg" alt="" id="BLOGGER_PHOTO_ID_5266332699394681890" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The problem is, I don't know of any software that will let me specify named line styles and define them differently for different contexts.  In the figure above (there's only one figure, it's just expressed in two different ways), I want to define and apply a "highlight graphic" line style for some arrows and rectangles, using different definitions of this style.&lt;br /&gt;&lt;br /&gt;I can think of a couple of workarounds.  I could create different versions of the diagram and use conditional content constructs to choose the one I want.  The problem with that approach is that it violates my &lt;a href="http://fastwareproject.blogspot.com/2008/11/single-source-automatic-building-is.html"&gt;single-source constraint&lt;/a&gt;:  I don't want to maintain multiple copies of the same figure with different formatting any more than I want to maintain multiple copies of the same text with different formatting.&lt;br /&gt;&lt;br /&gt;Another workaround would be to have a single diagram that uses, say, lines that are both colored and dashed, so they'd be distinguishable on both color and non-color output devices.  (On non-color devices, they'd simply look dashed.)  For text, I could use both coloring and underlining.  (On non-color devices, such text would simply be underlined.)   This approach has the advantage that it works, but it really strikes me as kind of a hack.&lt;br /&gt;&lt;br /&gt;How do you suggest I handle the problem of conditional formatting?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8697429285282980308-8823737577540051749?l=fastwareproject.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fastwareproject.blogspot.com/feeds/8823737577540051749/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8697429285282980308&amp;postID=8823737577540051749&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/8823737577540051749'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/8823737577540051749'/><link rel='alternate' type='text/html' href='http://fastwareproject.blogspot.com/2008/11/conditional-formatting.html' title='Conditional Formatting'/><author><name>Scott Meyers</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.aristeia.com/images/sdm-big.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_YMc9zPJlncw/SRXFrlp-thI/AAAAAAAAAAo/DDba62ca5aM/s72-c/figure+color.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8697429285282980308.post-330612001309007695</id><published>2008-11-06T21:12:00.000-08:00</published><updated>2008-11-06T21:45:47.801-08:00</updated><title type='text'>Single-Source, Automatic Building is Essential</title><content type='html'>When I say a book is ready to be published, there are, as far as I know, no errors in it.  Actually, that's not true.  I'm sure there are errors in it, but I don't know what they are.  (If I knew, I'd fix them.)  Shortly after publication, the situation changes, because readers tell me about mistakes I didn't know about.  The problems might be factual, they might be grammatical, they might be expository (e.g., I might have written something that can be interpreted differently from what I intended).  I collect the problems I know about in errata lists, and when my publisher tells me that a new printing is planned, I modify the book to eliminate as many errors as I can.  I then deliver fresh camera-ready copy to my publisher.&lt;br /&gt;&lt;br /&gt;I write my books with a goal of their remaining useful for at least five years, and there are generally at least one or two reprints each year, so camera-ready copy for one of my books should have to be produced at least 10 times.  It's often more than that.  &lt;span style="font-style: italic;"&gt;More Effective C++&lt;/span&gt;, which I wrote in 1996, is now in its 26th printing.&lt;br /&gt;&lt;br /&gt;Until the recent release of the &lt;a href="http://scottmeyers-ebooks.com/"&gt;PDF versions of my books&lt;/a&gt;, my books had been laid out for only a single output device:  ink on paper.  One book thus yielded one PDF.  The ebook PDFs double that to two PDFs per book.  For &lt;span style="font-style: italic;"&gt;Fastware!&lt;/span&gt;, I hope to produce not just an ink-on-paper version, but also multiple electronic versions.  To keep these varous versions consistent when I make updates, it's crucial that I have a &lt;span style="font-weight: bold;"&gt;single master source&lt;/span&gt; for each book, and it's also crucial that the various target versions of the book can be &lt;span style="font-weight: bold;"&gt;automatically built&lt;/span&gt; from the single master source.  If this sounds like the usual requirement for cross-platform software development, it should, because that's exactly how I think of it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8697429285282980308-330612001309007695?l=fastwareproject.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fastwareproject.blogspot.com/feeds/330612001309007695/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8697429285282980308&amp;postID=330612001309007695&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/330612001309007695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/330612001309007695'/><link rel='alternate' type='text/html' href='http://fastwareproject.blogspot.com/2008/11/single-source-automatic-building-is.html' title='Single-Source, Automatic Building is Essential'/><author><name>Scott Meyers</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.aristeia.com/images/sdm-big.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8697429285282980308.post-3239113541899142771</id><published>2008-11-06T17:21:00.000-08:00</published><updated>2008-11-06T21:09:55.985-08:00</updated><title type='text'>The Page Break Problem</title><content type='html'>One of the last things I do before finalizing a book's camera-ready copy is walk through the book looking for bad page breaks.  Within a printed book, there are two kinds of page breaks:  those between facing pages (i.e., between a left and right page) and those between non-facing pages (i.e., between a right and left page).  There are probably official terms for these different kinds of breaks, but I don't know what they are, and at any rate, they probably won't take me where I want to go.  I'm going to call the breaks between facing pages &lt;span style="font-style: italic;"&gt;easy&lt;/span&gt; and breaks between non-facing pages &lt;span style="font-style: italic;"&gt;difficult&lt;/span&gt;.  The names are motivated by the amount of trouble they cause me as an author.&lt;br /&gt;&lt;br /&gt;Some kinds of text are naturally split across lines, yet semantically belong together.  Examples include mailing addresses, lists of ingredients in recipes, and, in programming texts, function and class definitions.  If you're reading this blog, you probably have some programming experience, so consider this:&lt;br /&gt;&lt;pre&gt; &lt;span style="color: rgb(51, 51, 153);"&gt;template&amp;lt;typename IterT, typename DistT&amp;gt;  &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt; void doAdvance(IterT&amp;amp; iter, DistT d,     &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;                std::input_iterator_tag)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;   if (d &amp;lt; 0 ) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;     throw std::out_of_range("Negative distance");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;   }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;   while (d--) ++iter;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt; }&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;If this code happens to occur near the bottom of a page, it might be broken across two pages.   Suppose it happens to get broken as follows:&lt;br /&gt;&lt;pre&gt;  &lt;span style="color: rgb(51, 51, 153);"&gt;template&amp;lt;typename IterT, typename DistT&amp;gt;   &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;  void doAdvance(IterT&amp;amp; iter, DistT d,      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;                 std::input_iterator_tag)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;  {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;    if (d &amp;lt; 0 ) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;      throw std::out_of_range("Negative distance"); &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;[------------------------ Page Break Here ------------------------]&lt;br /&gt;&lt;br /&gt; &lt;span style="color: rgb(51, 51, 153);"&gt;while (d--) ++iter;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;This is fairly grotesque, but it will serve as an example.&lt;br /&gt;&lt;br /&gt;If the page break is easy, it means that the reader can still see everything at once, because easy breaks are between facing pages.  The result of this particular break is ugly, but it doesn't really prevent a reader from understanding whatever it is that's being discussed.  As an author evaluating the break, I might, depending on how tired I am at the time, simply roll my eyes and let it go.&lt;br /&gt;&lt;br /&gt;If it's a difficult break (i.e., across non-facing pages), eye-rolling won't suffice.  Making sense of the function requires being able to see the declaration of the parameters while looking at the function body.  Asking a reader to flip a page back and forth to see the whole function is unacceptable.  They're already working hard to understand the material, and at any rate, making the stuff easy to follow is what they pay me for when they buy the book.  If this is a difficult page break, I have to intervene.&lt;br /&gt;&lt;br /&gt;I might manually move the break so that the entire function fits on the second page.  I might rewrite some text on the first page so that the break moves to an acceptable location.  I might move the bottom page margin down on the first page so that the entire function fits.  There are several options.  Torturing my readers by doing nothing is not one of them.&lt;br /&gt;&lt;br /&gt;As &lt;a href="http://fastwareproject.blogspot.com/2008/11/two-projects-in-one.html"&gt;I mentioned in an earlier blog entry&lt;/a&gt;, I want to write for multiple output devices, of which ink on paper is only one.  For some of those devices, all page breaks are easy.  For others, all are difficult.  For still others, it depends on the configuration of the software being used to access the book:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Hardcopy books&lt;/span&gt;:  As explained above, some page breaks are easy, some are difficult.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Kindle&lt;/span&gt;: My understanding is that Kindle shows only one page at a time and that scrolling is not supported, so all page breaks are difficult.  Whether this applies to other dedicated ebook-reading devices, I don't know.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;PDF on a computer monitor&lt;/span&gt;:  Using Acrobat Reader, documents can be viewed as facing pages (in which case some page breaks are easy and some are difficult), as single pages (whereby all page breaks are difficult), or as a continuous stream of pages (in which case all page breaks are easy).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Audio stream&lt;/span&gt;: There are no pages, so the issue doesn't really arise, but one can think of all page breaks as being easy.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;So here's the problem:  I want to write a book to be viewed on multiple output devices; different devices have different characteristics regarding the existence of difficult page breaks; different devices have different page sizes, so it is, in general, not possible for me to know the location of all page breaks; and I want to never have text break unacceptably across a difficult page break.&lt;br /&gt;&lt;br /&gt;How do I achieve that?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8697429285282980308-3239113541899142771?l=fastwareproject.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fastwareproject.blogspot.com/feeds/3239113541899142771/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8697429285282980308&amp;postID=3239113541899142771&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/3239113541899142771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/3239113541899142771'/><link rel='alternate' type='text/html' href='http://fastwareproject.blogspot.com/2008/11/page-break-problem.html' title='The Page Break Problem'/><author><name>Scott Meyers</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.aristeia.com/images/sdm-big.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8697429285282980308.post-1476721793462487108</id><published>2008-11-06T16:00:00.000-08:00</published><updated>2008-11-06T17:20:14.127-08:00</updated><title type='text'>A Vision for Ebooks (circa 2007)</title><content type='html'>I recently blogged that we've released &lt;a href="http://scottmeyers-ebooks.com/"&gt;PDF versions of my books&lt;/a&gt;.  These PDFs are essentially replacements for the &lt;a href="http://www.amazon.com/gp/product/0201310155?ie=UTF8tag=aristeia.com-20linkCode=as2camp=1789creative=9325creativeASIN=0201310155"&gt;CD version of two of my books&lt;/a&gt; that came out in 1999.  When the idea of updating the CD arose in early 2007, I sent the following to my publisher. It sketches a vision for ebooks being accessed by readers using conventional computer systems, i.e., it doesn't consider issues that would arise for devices like Kindle, a mobile phone, etc.&lt;br /&gt;&lt;br /&gt;The PDFs we ultimately produced don't follow the vision outlined below, but I think the ideas are still interesting, so, for the record, here they are.&lt;br /&gt;&lt;blockquote&gt;As a reader, I want access to my ebook at all times.  This means an internet-only approach (such as &lt;a href="http://safari.awprofessional.com/home"&gt;Safari &lt;/a&gt;or &lt;a href="http://www.amazon.com/upgrade"&gt;Amazon Upgrade&lt;/a&gt;) is unacceptable.  I want access to the latest version of the ebook, including all changes made since I bought the book.  I want access to a complete changelog of everything that has been modified in the book since it was published, ideally along with a rationale for each change.  (This should sound like an errata list, which many authors already maintain.)  I want to be able to make bookmarks and add comments to the book.  I want to be able to see comments others have made about the book, and I want to be able to see others' comments on my comments. I want to be able to comment on their comments.  (If this sounds like reader comments on blog entries or like newsgroup discussions, that's not an accident.)  I want to be able to view ebook content in a way that suits me on a device that suits me, which means I want control over text and image size, etc., and I want line breaks to be determined dynamically.  I want to be able to print chunks of the ebook.  I want to be able to perform full-text searches with at least the power of Google.  I want all cross-references to be links or similar (e.g., words in the glossary might have their definition pop up if I hold the mouse over them).  I want to be able to use the ebook as effortlessly as a real book or web page (unlike my current CD, which has a LONG introduction explaining how the darn thing works).  I want to be able to buy access to the ebook for a modest additional fee if I've already shelled out for the hardcopy book.  I want to be able to easily take an example or code fragment and get access to it in such a way that I can play around with it, e.g., copy a fully compilable version into my development environment.&lt;br /&gt;&lt;br /&gt;That's not all I want as a reader, but it's enough to get us started.&lt;br /&gt;&lt;br /&gt;The current CD has two books and some magazine articles.   In terms of content, one of the things the CD offers that the paper books do not is links among the books and the articles.  That's because the paper books are standalone, but on the CD, I know that readers have both books and a bunch of articles, so it's safe to add references among them.  Adding such references is not a lot of work for me, and I think it makes the CD more attractive.&lt;br /&gt;&lt;br /&gt;Eclipse is a framework that does nothing but allow functional components to be plugged in.  By itself, it does nothing, but it facilitates the cooperation of other independently-developed components.  I think the same architecture is a good way to approach ebook publication.  Create a framework into which ebooks can be plugged in.  Use a web browser as the UI, because everybody already has one and knows how to use it.   Also make it possible for comments to be plugged into the framework, i.e., a way to specify "put this comment at this location in this book."  A "comment" is a general notion, one that can be simple text, but can also contain a link ("link to this URL or this location in this other book (or the same book) using this text") and could even invoke a program ("run this flash animation explaining how this code works when this text is clicked on").  The framework takes the ebooks and the comments and produces the HTML that the user views, typically omitting comments that refer to books they don't own.  So if the user owns EC++/3E (&lt;span style="font-style: italic;"&gt;Effective C++, 3rd Edition&lt;/span&gt;) and MEC++ (&lt;span style="font-style: italic;"&gt;More Effective C++&lt;/span&gt;) but not ESTL (&lt;span style="font-style: italic;"&gt;Effective STL&lt;/span&gt;), they see electronic versions of those two books, any comments within or between those two books, comments from those books to the internet in general, but no comments leading to or from ESTL.  If they then buy ESTL, shazaam!, comments involving ESTL suddenly appear in their UI.  (They were probably always there -- they shipped with the books they owned -- but they were not shown, at least not by default.)&lt;br /&gt;&lt;br /&gt;As an author, the only additional work I have to do to prepare a book for such a framework is to create a file of comments, and if I don't want to do that for some reason, that's okay, the book will still show up in the framework.  But if somebody else wants to create comments to or from my book, users can install those comments, and shazaam!, they'll see them.  The framework will probably have to offer a way to filter comments, e.g., "I only want to see comments approved by AW" or "I don't want to see any comments by that Meyers guy".&lt;br /&gt;&lt;br /&gt;One of the nice things about this approach is that any document can be plugged in, so the framework can support free books, online articles, etc., and they can coexist with ebooks that have been sold.&lt;br /&gt;&lt;br /&gt;Another nice thing about this framework is the more content it has, the more useful it is (like a Wiki), so readers are implicitly encouraged to buy more books to fill out the framework.  This can be especially the case if links to uninstalled content are shown (which should be optionally possible), because then readers will be constantly reminded of all the good stuff they'd have access to if they'd just plunk down a bit more cash.&lt;br /&gt;&lt;br /&gt;The ebook content would normally be stored at an online server (as with Safari and Amazon Upgrade), but local copies could also be cached, so if internet access was unavailable, the cached copies would be used.  This solves the "access anywhere" problem and reinforces that when readers buy an ebook, they own an actual copy, not just access to a copy stored elsewhere.  In fact, you can separate payment for the two:  for, say, $n you can buy an ebook (assuming you've already purchased the paper version), and for an additional $m/year or $n for your lifetime you can have online access to the very latest version, comments from the author, etc.&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8697429285282980308-1476721793462487108?l=fastwareproject.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fastwareproject.blogspot.com/feeds/1476721793462487108/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8697429285282980308&amp;postID=1476721793462487108&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/1476721793462487108'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/1476721793462487108'/><link rel='alternate' type='text/html' href='http://fastwareproject.blogspot.com/2008/11/vision-for-ebooks-circa-2007.html' title='A Vision for Ebooks (circa 2007)'/><author><name>Scott Meyers</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.aristeia.com/images/sdm-big.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8697429285282980308.post-2123553640809945618</id><published>2008-11-06T15:15:00.000-08:00</published><updated>2008-11-06T15:57:26.789-08:00</updated><title type='text'>Color, Personalization, and Content/Presentation Separation</title><content type='html'>In 2001, I published my first two-color book.  In it, I used red text to focus readers' attention on particular parts of code examples. Since then I've received a steady trickle of comments about my use of color, including this from a recent missive:&lt;br /&gt;&lt;blockquote&gt;Nearly 10% of the male population (and a much smaller fraction of the female population) is one form of color-blind or another. By far the most common is basic red-green color deficiency where reds and/or greens are harder to detect/less vibrant colors.&lt;br /&gt;&lt;br /&gt;The dark red chosen as a highlight color in &lt;span style="font-style: italic;"&gt;Effective C++&lt;/span&gt; has nearly the same intrinsic darkness as the black it is meant to contrast with and is not an especially vibrant shade of red. As such it is not easily distinguishable from the main text (at least by this particular color deficient male).&lt;br /&gt;&lt;/blockquote&gt;Goal #1: I'd like to avoid this problem. Being a software person, I'm going to give in to my inclination to generalize and assume that any given set of color choices is going to be problematic for some portion of my readership.&lt;br /&gt;&lt;br /&gt;Consider next syntax highlighting of code.  If you use vanilla Visual Studio, you're used to your code being colored in a certain way.  If you use vanilla Eclipse, you're also used to your code being colored in a certain way, but probably not the same way.  If you use Emacs or some other text or programmer's editor, you're probably used to your code being colored yet another way. I assume that all these code editing environments give you the ability to customize how syntax highlighting is performed, meaning that what you're used to seeing in your editor could be unique to you.  If you read a book on a device supporting color, you'd probably prefer that the colors you see match the colors you are used to seeing.  Goal #2: I want you to be able to do this.&lt;br /&gt;&lt;br /&gt;Addison-Wesley and I recently released &lt;a href="http://scottmeyers-ebooks.com/"&gt;PDF versions of my books&lt;/a&gt;, and, like many other publishers, we eschewed restrictive DRM in favor of &lt;span style="font-style: italic;"&gt;personalization&lt;/span&gt;:  when you buy a PDF, each page shows your name.  The idea is that you're a lot less likely to post your PDF to the world if everybody can see your name, so we do that instead of imposing technical restrictions on what you can do with the PDF you buy. &lt;br /&gt;&lt;br /&gt;The need to personalize an ebook for each purchaser means that some kind of time-of-sale processing has to occur, so my feeling is that we might as well go ahead and generate a custom copy of the book at that point.  (This is what I think should happen for &lt;span style="font-style: italic;"&gt;Fastware!&lt;/span&gt;  It's not what's done for the PDF versions of my current books.)  And as long as we're going to do that, we might as well let you specify how color should be used.  By default you might get black text on a white background with red highlighting and Eclipse-style syntax formatting, but if you want yellow text on a black background with green highlighting and syntax highlighting that we allow you to painstakingly specify on a construct-by-construct basis, what the heck, we'll generate it for you.  It's not like the software cares what the output looks like, and I'm not about to tell you what works best for you. &lt;br /&gt;&lt;br /&gt;For this to be practical, I think there has to be a physical separation of book content from presentation information, much as web page content tends to go in .html files and presentation information tends to go in .css files.  From the point of view of me choosing software in which to author &lt;span style="font-style: italic;"&gt;Fastware!&lt;/span&gt;, I think this rules out programs like FrameMaker, Word, and Writer, because, as far as I know, there is no practical way to get them to automatically (i.e., without human intervention) generate PDF from a document using some custom specification of how formats/styles for paragraphs/characters should be rendered.  If that's true, I think we're pretty much talking markup-based approaches, notably LaTeX and DocBook. &lt;br /&gt;&lt;br /&gt;Is this a valid conclusion?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8697429285282980308-2123553640809945618?l=fastwareproject.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fastwareproject.blogspot.com/feeds/2123553640809945618/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8697429285282980308&amp;postID=2123553640809945618&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/2123553640809945618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/2123553640809945618'/><link rel='alternate' type='text/html' href='http://fastwareproject.blogspot.com/2008/11/color-personalization-and.html' title='Color, Personalization, and Content/Presentation Separation'/><author><name>Scott Meyers</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.aristeia.com/images/sdm-big.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8697429285282980308.post-7809871642471891813</id><published>2008-11-06T10:19:00.000-08:00</published><updated>2008-12-02T11:26:03.878-08:00</updated><title type='text'>Content and Presentation: Not Independent</title><content type='html'>One would like to believe that content decisions and presentation decisions are independent, but they are not. If I want to get a point across, do I present it in prose, as a code example, as a diagram, as a picture, or in some other way? If I want to focus a reader's attention on a particular aspect of a code example, do I change the font style of the relevant text (e.g., to bold or italic), the font background (i.e., to make it look like it's highlighted), or the font color? Or do I leave the font alone, give each line in the code example a number, then use prose before or after the example to describe what I want my readers to see? Depending on exactly what I want to do, I make different decisions. For recent examples, check out &lt;a href="http://www.artima.com/cppsource/codefeatures2.html"&gt;the code listings on one of the pages of a recent C++ article&lt;/a&gt; I published.&lt;br /&gt;&lt;br /&gt;Speaking of code listings, one of the most important presentation decisions I have to make involves code formatting. Decisions on indentation and line breaks are critical, and my experience over many years with a number of publishers is that letting anybody edit my code examples is a sure way to publish broken code. (When I was a columnist for &lt;span style="font-style: italic;"&gt;C++ Report&lt;/span&gt;, I had to fight over every column with some ninny who had "editor" on his business card and hence felt qualified to edit what I wrote, notwithstanding the fact that he didn't know C++ and was unable to understand what I was writing about.) In retrospect, this may be why I've become so accustomed to producing camera-ready copy: it avoids my having to verify that what I wrote is what ultimately gets published. I'm not perfect, of course, and &lt;a href="http://www.aristeia.com/books.html#errataLinks"&gt;my books' errata lists&lt;/a&gt; provide ample testimony to that, but my experience is that I am much more careful about what goes out with my name on it than anybody else.&lt;br /&gt;&lt;br /&gt;One of the places where authors must make critical presentation decisions involves content that is dependent on the capabilities of the output device being used to present the content. For example, here's a table I used in a recent article:&lt;img src="file:///D:/Fastware/Authoring%20Issues/Images%20used%20in%20Blog/table%20as%20published.jpg" alt="" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_YMc9zPJlncw/SRe8Mm0RMlI/AAAAAAAAABA/iuQOQMa14n8/s1600-h/table+as+published.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 193px;" src="http://1.bp.blogspot.com/_YMc9zPJlncw/SRe8Mm0RMlI/AAAAAAAAABA/iuQOQMa14n8/s320/table+as+published.jpg" alt="" id="BLOGGER_PHOTO_ID_5266885213997314642" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Actually, that's what was published.  What I submitted looked a lot nicer, in my opinion:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_YMc9zPJlncw/SRe8MfJl5dI/AAAAAAAAAA4/3fsYnJnfImw/s1600-h/table+as+submitted.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 176px;" src="http://4.bp.blogspot.com/_YMc9zPJlncw/SRe8MfJl5dI/AAAAAAAAAA4/3fsYnJnfImw/s320/table+as+submitted.jpg" alt="" id="BLOGGER_PHOTO_ID_5266885211939268050" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;But consider how this table would "appear" if rendered as speech.  (For an example of how a table can sound, click on the "listen" link at the top of Mike Hendrickson's &lt;a href="http://radar.oreilly.com/2008/02/state-of-the-computer-book-mar-20.html"&gt;"State of the Computer Book Market" blog entry from February 22&lt;/a&gt;, download the mp3, and start listening about 3 minutes into the audio stream.)&lt;br /&gt;&lt;br /&gt;As an author, I know that the point of the table is to demonstrate that the "empty" objects I'm discussing in the article may be quite large:  up to several thousand bytes.  The table is a good way to show that to readers, but for listeners, I'd omit the table and use a prose summary instead.  In fact, I already have such a summary in the article:&lt;br /&gt;&lt;blockquote&gt;If such objects are not optimized away, Table 1 demonstrates that their size could be significant (up to many thousands of bytes per feature set), an artifact of the use of virtual inheritance in the current implementation.&lt;br /&gt;&lt;/blockquote&gt;For an audio stream, I'd simply omit the table and modify the text above as follows:&lt;br /&gt;&lt;blockquote&gt;If such objects are not optimized away, their size could be significant (up to many thousands of bytes per feature set), an artifact of the use of virtual inheritance in the current implementation.&lt;br /&gt;&lt;/blockquote&gt;This suggests another feature I want to have as an author:  conditional content.  I want to be able to say:&lt;br /&gt;&lt;pre&gt;  if (rendering for a print device)&lt;br /&gt;   produce this text and show this table&lt;br /&gt; else&lt;br /&gt;   produce this other text and don't show the table&lt;br /&gt;&lt;/pre&gt;In both cases, the conceptual content is the same.  It's the way that information is presented that differs, and it's a decision I, as an author, am best in a position to make.  (If I could find an editor who'd make such decisions for me such that I'd be happy with the results of the decisions, I'd gladly turn such decision-making over to him or her.  As they say in the old movies, alas, good help is hard to find.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8697429285282980308-7809871642471891813?l=fastwareproject.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fastwareproject.blogspot.com/feeds/7809871642471891813/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8697429285282980308&amp;postID=7809871642471891813&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/7809871642471891813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/7809871642471891813'/><link rel='alternate' type='text/html' href='http://fastwareproject.blogspot.com/2008/11/content-and-presentation-not.html' title='Content and Presentation: Not Independent'/><author><name>Scott Meyers</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.aristeia.com/images/sdm-big.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_YMc9zPJlncw/SRe8Mm0RMlI/AAAAAAAAABA/iuQOQMa14n8/s72-c/table+as+published.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8697429285282980308.post-162876835048334416</id><published>2008-11-05T21:33:00.000-08:00</published><updated>2008-12-05T07:30:31.173-08:00</updated><title type='text'>WYSIWYG in a Multi-Target World</title><content type='html'>Markup or WYSIWYG, that is the question.  I've done it both ways.  In my academic life, I wrote extensively using markup languages, including runoff, Scribe, and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;LaTeX&lt;/span&gt;.  The editing itself was done using Emacs (the One True Text Editor).  I've also done a lot of writing using WYSIWYG systems, primarily &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;FrameMaker&lt;/span&gt;.  WYSIWYG is better.&lt;br /&gt;&lt;br /&gt;It's better for two reasons, but before I get to those, I have to address the markup bigots who argue that WYSIWYG editing mixes structure identification (e.g., "this is a subsection")  with presentation decisions (e.g., "subsections should be in 11 point bold &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Palatino&lt;/span&gt; and numbered n.m"), a situation sometimes derided as &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;WYSIAYG&lt;/span&gt; ("What You See is All You've Got").  Sure, people can do this, but paragraph and character formats (as &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;FrameMaker&lt;/span&gt; calls them) or styles (as Microsoft Word and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;OpenOffice&lt;/span&gt; Writer do) also make it possible to separate structure and presentation, and anybody writing something as long as a book will soon learn to do so.  There's no dichotomy between WYSIWYG editing and separating structure and presentation.&lt;br /&gt;&lt;br /&gt;I should also mention that I generally produce camera-ready copy for my books.  That means I'm making most of the decisions about presentation myself:  page layout, font choices, all that fun stuff.  I've observed elsewhere that &lt;a href="http://www.aristeia.com/authorAdvice.html#bookPrepProcess"&gt;preparing camera-ready copy is probably not a good use of an author's time&lt;/a&gt; (scroll down to "Typeset"), but I have my reasons for doing it (or at least most of it), so ignoring the details of what things look like is not a practical option for me.&lt;br /&gt;&lt;br /&gt;WYSIWYG authoring is better than markup-based authoring for two reasons.  The first is latency in error detection.  Suppose I want to specify that a paragraph is a second-level bullet point.  With a WYSIWYG system, if I select the wrong paragraph or I don't specify a second-level bullet, I see the result of my mistake immediately, and I can correct it without further ado.  With markup, I don't notice that I've done something wrong until I submit my document to the document formatting engine and look at its output.  Call me a renegade, but I don't enjoy finding out several minutes after failing to close an italicized (er, excuse me, I mean &lt;i&gt;emphasized&lt;/i&gt;) section of text that my entire document is now in italics.  I'd rather see the problem the instant I specify that something is to be italicized/emphasized.&lt;br /&gt;&lt;br /&gt;The second reason I prefer WYSIWYG editing is that what I see on my screen matches what I see on paper.  This is important when editing.  Having printed a section or chapter and annotated the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;hardcopy&lt;/span&gt; with changes to be made, if I need to reword a sentence at the end of page 2, I want to go to the end of page 2 on my screen and start editing.  With WYSIWYG, I can. With markup, what I see in Emacs bears no resemblance to what I see on paper, so before I can do my editing, I have to search for a phrase in the text near where I want to edit, then map what I see on the screen to what I see on the paper.  Only then can I start editing.  It's primitive and a waste of my time.&lt;br /&gt;&lt;br /&gt;When looking for authoring software, then, I really want a WYSIWYG system.  Unfortunately, I'm not happy with my options.  I run Windows (so sue me), so I need something that runs on that platform.  I've written my books since 1992 using &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;FrameMaker&lt;/span&gt;, and let me just say that I hate it.  I don't really know Microsoft Word, but I've heard enough bad things about it to consider it a low-percentage option, and my limited experience with it reminds me of C++:  you can do pretty much anything, but almost everything is complicated by the fact that features interact in ways that make sense only if you understand absolutely everything.   I wanted to use &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;OpenOffice&lt;/span&gt; Writer, but I wrote an article using it, and that experience demonstrated that Writer just isn't up to what I want to do.  (Cross referencing was painful, and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;PDF&lt;/span&gt; output was essentially &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;nondeterministic&lt;/span&gt; when the layout included floating display elements like figures, listings, and tables.)&lt;br /&gt;&lt;br /&gt;I've recently been looking at WYSIWYG XML editors supporting &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;DocBook&lt;/span&gt;, but since one of the advantages of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;DocBook&lt;/span&gt; is that it can be transformed for display on different output devices (something I definitely want), I began to realize that the meaning of WYSIWYG is less clear when you'll be "getting" different things for different output devices.   Presumably this an issue familiar to web designers who (properly) employ "liquid layout," i.e., allow line breaks to be determined dynamically, because that means that the appearance of their web pages is affected by the width of the window in which it is displayed -- something over which they have no control.&lt;br /&gt;&lt;br /&gt;I find myself seeking a WYSIWYG editing interface for a document that may be formatted for several different output devices with varying capabilities and characteristics (e.g., font selection, support for color, physical size, etc.).  What do you think I should do?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8697429285282980308-162876835048334416?l=fastwareproject.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fastwareproject.blogspot.com/feeds/162876835048334416/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8697429285282980308&amp;postID=162876835048334416&amp;isPopup=true' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/162876835048334416'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/162876835048334416'/><link rel='alternate' type='text/html' href='http://fastwareproject.blogspot.com/2008/11/wysiwyg-in-multi-target-world.html' title='WYSIWYG in a Multi-Target World'/><author><name>Scott Meyers</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.aristeia.com/images/sdm-big.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8697429285282980308.post-2420056204681501075</id><published>2008-11-05T21:23:00.000-08:00</published><updated>2008-11-05T21:24:30.960-08:00</updated><title type='text'>Two Projects in One</title><content type='html'>I'm working on &lt;span style="font-style: italic;"&gt;Fastware!&lt;/span&gt;, a book about how to write software that runs quickly.  Unlike &lt;a href="http://www.aristeia.com/books.html"&gt;my C++ books&lt;/a&gt;, &lt;span style="font-style: italic;"&gt;Fastware!&lt;/span&gt; will be language-independent, and it will cover a much broader range of topics than just code. (At one extreme, for example, it will consider hardware memory hierarchies, and at the other, separate processes potentially written in different languages.) I've already got a detailed outline, a sample chapter, a growing bibliography, and a ton of material I'm looking forward to incorporating. The first part of "The Fastware Project" is the normal stuff that goes into writing a book: figuring out what to include, learning enough to explain it well, and expressing it in words, diagrams, examples, etc.&lt;br /&gt;&lt;br /&gt;The second part is the authoring itself, and my writing has been stalled for quite some time as I've wrestled with the question of what it means to write a book these days. For conventional print books, things are easy for an author, because the game is pretty well understood: ink is black, paper is white, standard font size is around 10 point, page dimensions are generally around 9"x6" with maybe a margin of around 1" on all sides. Experience tells us that we shouldn't mix too many fonts in a book, and physical constraints tell us that if we have a spreadsheet with 100 columns in it, shrinking it down to fit on a single page will likely render its content incomprehensible. So authors avoid trying to do things like that.&lt;br /&gt;&lt;br /&gt;But I don't think the ink-on-paper world is the one I want to write for any more. I still want to write something that is recognizably a book, but I want to think of ink on paper as but one of many possible output devices. Others include computer screens (big with color support), portable ebook readers like Kindle (smaller and currently with no color support), and portable devices that happen to support text (e.g., iPhones -- very small with color support). I also want to try to support audio as an output device, because text-to-speech systems make the automatic generation of audiobooks practical, and I think this is a form of information consumption that is likely to increase in popularity.&lt;br /&gt;&lt;br /&gt;How does one write for such a variety of output devices, and what authoring tools exist to facilitate the task? What's the proper use of color, given that it may or may not be available? What's to be done about diagrams and tables when the output form is audio? These are the kinds of questions I'm trying to think about before I do any more writing, and they're the issues I expect to address in my initial blog entries. I hope you'll help me find my way by offering comments on the issues I raise.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8697429285282980308-2420056204681501075?l=fastwareproject.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fastwareproject.blogspot.com/feeds/2420056204681501075/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8697429285282980308&amp;postID=2420056204681501075&amp;isPopup=true' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/2420056204681501075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8697429285282980308/posts/default/2420056204681501075'/><link rel='alternate' type='text/html' href='http://fastwareproject.blogspot.com/2008/11/two-projects-in-one.html' title='Two Projects in One'/><author><name>Scott Meyers</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://www.aristeia.com/images/sdm-big.jpg'/></author><thr:total>10</thr:total></entry></feed>
