Month: August 2013

  • TypeMetal 1.1.1

    …fixes some bugs to make Find and Replace work as they should. This latest TypeMetal version is now live on the App Store, and I’ve updated the free TypeMetal Demo build to match. (The release notes for the latest version of TypeMetal are always available to view here, by the way.)

    I’m hard at work on a number of other improvements that will appear in future updates, with user-reported issues getting top priority — so if you don’t see a reported problem that’s troubling you addressed in this build, please rest assured that help will be on the way shortly. Thanks again to TypeMetal’s amazing and growing user base for your support and feedback. Please continue bringing your questions and concerns to the TypeMetal Support Forum, where I’m usually able to notice and respond to posts within hours if not minutes (during my generally long waking hours, at least!). :-)

  • TypeMetal and Semantic Markup

    Posted yesterday and well worth contemplating if you write HTML: a Smashing Magazine article on HTML/CSS philosophy. Author Heydon Pickering briefly touches on one of the main issues that drove me to develop TypeMetal and make snippets-as-first-class-completions a key feature — the difficulty of remembering and consistently applying one’s own CSS “class” names — even as he proposes a strongly “class”-averse approach to markup and styling. Pickering’s objection to use or overuse of class attributes is a philosophical one, that’s well worth giving some thought to. My interest has been in solving the practical problem of how one can apply class-element pairings more easily and consistently, in cases where they’re an appropriate tool for the job.

    I find a lot to recommend in Pickering’s discussion, actually, even though I take a less strict approach to coinage and use of “class” attributes. I agree substantially with the general premise — it makes a great deal of sense to leverage HTML’s existing semantics, in preference to reinventing the wheel, wherever a suitable element exists for a given purpose. (Among other significant benefits, doing so tends to make your content more intelligible to screen readers.) And Pickering’s article does a great job showing just how far one can get, styling-wise, using CSS descendant and attribute selectors alone. I tend to favor that approach whenever it seems reasonable, but there are cases where I think it’s useful and appropriate to leverage the extensibility that HTML provides for, by developing and applying a consistent vocabulary of “class” names. The best approach to doing so, in fact, incorporates a respect for appropriate usage of HTML’s element set — employing “class” identifiers to add further semantic specificity to an appropriately chosen element that’s already in the right neighborhood of meaning. This means avoiding the generic <span> and <div> whenever possible, in favor of more meaning-infused elements such as <code>, <kbd>, <article>, and <section> (to name just a few). While I think the lofty goal of class-free or nearly-class-free markup is in great measure worth striving for, I also think there are inevitably places where it’s useful to be able to express concepts that HTML’s standard vocabulary doesn’t, and can’t be expected to, intrinsically provide for.

    In TypeMetal’s User Guide, for example, I wanted a convention for marking up the names of menu items — in large part, so that I could style them all consistently, and later restyle them at will, but also because being able to find or index menu item references might come in handy someday. HTML’s <menuitem> element being unsuitable, despite a name that might seem to suggest otherwise (<menuitem> is for commands that a page visitor can choose), I went with <strong> (to make menu items likely to stand out from surrounding text, even if one views a User Guide page without its accompanying stylesheet), annotated with a “class” attribute of “menuitem”.

    When you apply class-based styling like this, it’s a given that the class names you’ve chosen, while meaningful to you, are unlikely to mean much at all to Web crawlers and other software that isn’t versed in your particular custom styling vocabulary. That’s part of the tradeoff. My use of <strong class=“menuitem”> is an imperfect choice, but preferable, I think, to not annotating menu item names at all.

    There are many such cases one can readily think of, especially when you get into writing about specialized areas of knowledge. Each has its own objects of interest, that can be useful to identify with formal markup. When you have a writing tool that helps you develop and remember your styling vocabulary, and apply it easily and consistently across a body of work, the potential to do such things becomes much more feasible to realize in actual practice. That’s been a substantial part of my goal in developing TypeMetal, and an area where it’s become tremendously helpful to me. I’m excited to finally have it out in the world, where it can help other HTML authors to achieve the same productivity boost.

    I’d love to hear about cases where people find TypeMetal’s approach helpful, and how it might be improved to provide even more convenience and agility. Please feel welcome to tweet @CoherenceLabs, email “support” at coherencelabs.com, or post in the TypeMetal Support Forum! — Thanks!

  • Try TypeMetal for Free!

    We realize it can be hard to judge an editor without trying it firsthand. So have at it. We’ve just released a free evaluation version of TypeMetal.

  • TypeMetal 1.1

    …is now live on the App Store! This update adds a feature that I’ve understandably had many requests for: spelling and grammar checking! Let’s just say that in the course of living without spell-check, I’ve learned that I’m a much less consistent typist than I believed myself to be. If you’re in the same boat as me, or if you inherit documents from people like me, TypeMetal 1.1 will be a welcome update. (Not coincidentally, this update also brings spelling fixes to nearly every page of TypeMetal’s in-app Help / User Guide.)

    An interesting aspect of HTML is that it’s set up to allow for mixed-language documents, in which the language of each text run can be explicitly indicated using a “lang” or “xml:lang” attribute on an element that wraps it. You aren’t required to annotate your documents with these attributes, but when they’re present, TypeMetal 1.1 uses the language identification they provide to ensure that each part of your document is checked against a language-appropriate dictionary and grammar rule set. When explicit language identification isn’t present, TypeMetal can still usually make a good best guess based on the document’s content and your OS X language preferences. But if you’re writing mixed-language content, you might want to make a practice of applying “lang” or “xml:lang” attributes where appropriate, to assist browsers and Web-crawlers that might be able to take advantage of such language info. (Per the HTML 5 spec, by the way, the value for either of these attributes is a “BCP 47” language tag, which in common practice just means an abbreviation with optional region qualifier, such as “en” for English, “fr” for French, “pt-PT” for Portuguese as spoken in Portugal, “pt-BR” for Brazilian Portuguese, etc.)

    Grammar checking is mostly working in this build, with one glitch to watch out for: If you begin a grammar-check operation from a mid-sentence insertion point or selection, grammar-check may falsely indicate that you have a sentence fragment. Either disregard such indications or position the insertion point at the start of a sentence before initiating grammar checking for now. I’ll be fixing this in a future update, and I didn’t want to delay the release of spell-checking because of it.

    One thing I haven’t yet implemented in 1.1 is the red-underlining, continuous spell-checking that you’re probably accustomed to using in other writing apps. For now, you’ll want to remember to hit Cmd+; once in a while (especially before publishing), to check your document for suspected misspellings.

    Adding that nifty red underlining requires character-/glyph-level line layout information that the public WebKit API doesn’t currently provide. To date, I’ve managed to achieve a great deal without having to embed a custom WebKit build in TypeMetal, and there are numerous worthwhile benefits to sticking with OS X’s WebKit if I possibly can, but there are also things I’d like to do that seemingly can’t be done otherwise. So I face a decision point, that’s going to take a little longer to sort out. Manually-invoked spelling and grammar checking seemed worth releasing in the meantime, and I hope users won’t find it too inconvenient to revive the old Cmd+; habit as I have, while I do some further work on this.

    I hope you’ll enjoy this newest version of TypeMetal! As always, please feel welcome to bring questions and feedback to the TypeMetal Support Forum! — Thanks again for your support!

  • TypeMetal’s Unique Editing Engine

    One of TypeMetal’s most unique features is in large part invisible: a modern HTML editing engine unlike any other, that I’ve devoted over a year and a half to developing and refining. Appreciating the motivation and design philosophy behind TypeMetal’s engine will help you understand the challenges TypeMetal is uniquely positioned to solve, and get a feel for what it is and isn’t.

    I developed TypeMetal to be an app I’ve long wanted to have: a Mac-native writing tool that lives and breathes modern, streamlined, professional-grade HTML as its model. I wanted an easy way to dash off bits of top-quality HTML, without having to manually manage the mechanics of markup syntax and formatting. I also wanted an app that helped me to develop, and consistently apply, semantic CSS styling vocabularies, in the course of producing a large, stylistically cohesive body of work — such as TypeMetal’s User Guide, or the News posts on this site. It’s struck me as odd that writing HTML by hand, or writing shorthands other than HTML to get an HTML result, is still so common. Can’t we do better? I felt compelled to find out, and TypeMetal 1.0 is the first result.

    Needless to say, in the process of developing TypeMetal, I quickly found out why the app I’d wished for hadn’t already been written: There were a number of fundamental challenges to solve. In particular: Undoable editing of a tree-structured document model, such as HTML’s, is a whole level of complexity beyond working with a flat attributed-text model. Every operation — from applying styling (which, in HTML, means wrapping content in elements) to simple Find and Replace — is substantially more complicated than with simple, linear text. WebKit provides the field-tested HTML parsing, layout, and rendering that underpins TypeMetal, but TypeMetal’s editing functionality and UI are entirely its own. The challenges inherent in their development were many, but the rewards of persisting through tackling them have been great — for much of HTML’s utility and expressiveness lies in its inherently tree-structured document model. Sectioning of content for layout and styling depends on that model, and there is great potential, both in use and yet-to-be-fully-realized, for automated document processing to leverage it.

    One thing I haven’t done with TypeMetal is try to solve every possible use case for an HTML development tool. Solving problems well in software requires focus. Without it, you get lost in a swamp of intractable generality and likely don’t find your way out to a finished or comprehensible product. I didn’t want my efforts to end that way.

    TypeMetal’s focus is content editing: providing a helpful, productive, and rewarding way to write the text, interleaved with images and other media, that is a website’s entire reason for existing. That’s what TypeMetal really strives, above all else, to shine at.

    Within that focus, I’ve gone to great lengths to make TypeMetal as general as possible, all the way down to its foundations. TypeMetal will work with any HTML file or fragment you give it, and puts the expressive power of HTML’s entire element and attribute vocabulary at your fingertips. Block Mode’s exacting selection capabilities make some remarkably general structural editing feats possible, making it much easier to assemble trees of nested <section>s, <div>s, and other elements. You could leverage this capability to build or prototype a page template for a site, but that’s straying a bit outside the realm of what TypeMetal is really designed to be best at. Similarly, TypeMetal doesn’t attempt to be a visual layout editor or CSS editor. Those problem domains have been well explored by other apps, and have more to do with establishing or changing the look of a site than producing the content that the site will host. TypeMetal’s entire focus is crafting exacting HTML content that meets your highest standards, and is suitable for use either as standalone pages, or with whatever templating, styling, and content management system you use. (As I’ve mentioned before, I write all the News posts for coherencelabs.com using TypeMetal, then incorporate them into my WordPress workflow as described here.)

    The first version of TypeMetal has gone a very long way toward achieving my goals. I have exciting things in store for the future, but have also been greatly enjoying the chance to finally use the app that TypeMetal already is. I hope many others will find it as handy and helpful as I do. Your support means everything to TypeMetal’s future (Thank you!), and I’m committed to continuing to refine its user experience based on users’ feedback.

    Whether you’re using TypeMetal already, or weighing the possible purchase and looking to learn more about it, please accept this invitation to drop by the TypeMetal Support Forum, where I reply to questions daily. It’s an excellent place to post any questions you may have about what TypeMetal is and isn’t, drop suggestions for ways it could be extended, and get all manner of other help.

    I also encourage you to subscribe to the RSS feed for News posts like this one. And if you use Twitter, please feel invited to message us @CoherenceLabs!

    Happy content editing!