{"id":1795,"date":"2012-06-07T00:39:41","date_gmt":"2012-06-07T04:39:41","guid":{"rendered":"http:\/\/patorjk.com\/blog\/?p=1795"},"modified":"2014-01-25T17:46:38","modified_gmt":"2014-01-25T21:46:38","slug":"taag-reboot","status":"publish","type":"post","link":"https:\/\/patorjk.com\/blog\/2012\/06\/07\/taag-reboot\/","title":{"rendered":"TAAG Reboot"},"content":{"rendered":"<p>The HTML Frameset tag is officially <a href=\"http:\/\/www.w3.org\/TR\/html5-diff\/#obsolete-elements\">obsolete<\/a> in HTML5. Since their inception, frames have drawn the <a href=\"http:\/\/budugllydesign.com\/frame9806\/m1-50.html\">ire<\/a> <a href=\"http:\/\/www.faeriekeeper.net\/footnote26.htm\">of<\/a> <a href=\"http:\/\/www.weballey.net\/frames\/badthings.html\">many<\/a> <a href=\"http:\/\/www.yourhtmlsource.com\/frames\/goodorbad.html\">web<\/a> <a href=\"http:\/\/users.ipa.net\/~djhill\/frmain.html\">designers<\/a>, though I&#8217;ve always had a soft spot for them. When I first learned how to use the frameset tag back in &#8217;98, I thought it was the coolest thing ever. I was able to do all sorts of trickery with it, like creating an online midi player and storing data between page loads. When I heard people go on about how they <a href=\"http:\/\/www.useit.com\/alertbox\/9612.html\">sucked<\/a>, I ultimately knew they were right, but I felt like they were throwing the baby out with the bathwater.<\/p>\n<p>Times have changed though, and as HTML has evolved, the gap framesets filled has been replaced by better technologies. Knowing their fate was sealed, I decided to overhaul the one app I had here that was still using them &#8211; the <a href=\"http:\/\/patorjk.com\/software\/taag\/\">Text to ASCII Art Generator (TAAG)<\/a>*. The new version was written from scratch, but with the aim to keep the same look-and-feel. This time around I also wanted to implement the full <a href=\"http:\/\/patorjk.com\/software\/taag\/docs\/figfont.txt\">FIGfont spec<\/a>, which surprisingly has a lot to it.<\/p>\n<p>The main part of the spec that I didn&#8217;t implement last time was the vertical layout rules. These rules allow font authors to &#8220;smush&#8221; letters together vertically. Below you can see an example done in the &#8220;Standard&#8221; font.<\/p>\n<pre style=\"font-family:Courier New;\">\r\n  _____ _   _ _   _ \r\n |  ___| | | | \\ | |\r\n | |_  | | | |  \\| |\r\n |  _| | |_| | |\\  |\r\n |_\/ _|_\\___\/|_|_\\_|\r\n  | |_| | | | '_ \\  \r\n  |  _| |_| | | | | \r\n  |_|  \\__,_|_| |_| \r\n<\/pre>\n<p>This can be fun to play around with, but it&#8217;s not always what you want. Therefore, I decided to also allow users to control which horizontal and vertical layouts they wanted a font to use. Exploring what layout looks best is actually kind of fun. <\/p>\n<p>The other main part of the spec I left out last time was the loading of non-standard letters. Most fonts don&#8217;t implement characters outside the normal ASCII range, but the FIGlet spec allows authors to define whatever unicode character they want, and some fonts implement quite a few extra characters. For fun, I went ahead and added unicode character #3232 to a few of the fonts, so that people could make a FIGlet <a href=\"http:\/\/knowyourmeme.com\/memes\/%E0%B2%A0%E0%B2%A0-look-of-disapproval\">look of disapproval<\/a>:<\/p>\n<pre style=\"font-family:Courier New;\">\r\n   _____)      _____)\r\n  \/_ ___\/     \/_ ___\/\r\n  \/ _ \\       \/ _ \\  \r\n | (_) |     | (_) | \r\n  \\___\/ _____ \\___\/  \r\n       |_____|       \r\n<\/pre>\n<p>I&#8217;m probably too easily amused. Anyway, there are quite a few other updates, but if you&#8217;re interested you can read about them <a href=\"http:\/\/patorjk.com\/software\/taag\/#p=whatsnew\">here<\/a>.<\/p>\n<p>I&#8217;ve also decided to open source the JavaScript FIGlet driver I wrote for this app. There were no other open source full-spec implementations of FIGlet that I could find, so I figured it could be useful. If you&#8217;re interested, it can be found <a href=\"http:\/\/patorjk.com\/software\/taag\/misc\/figlet-js-lib.zip\">here<\/a> or <a href=\"https:\/\/github.com\/patorjk\/figlet.js\">here<\/a>.<\/p>\n<p>If you have any suggestions for the app please let me know. Also, I haven&#8217;t forgotten about the <a href=\"http:\/\/patorjk.com\/keyboard-layout-analyzer\/\">Keyboard Layout Analyzer<\/a>, so don&#8217;t think this reboot means I wont be adding any more to that.<\/p>\n<p>Oh, and as a final side note, it was interesting to learn that frames can be a drag on the loading of page. The additional HTTP requests should make this obvious, but that combined with whatever else the browser has to do to accommodate them, makes for a non-optimal load time. And interestingly enough, even though the new app has a heavier page weight (190k vs 114k), it loads much, much quicker &#8211; though I should say that frames are definitely not the only factor to influencing this.<\/p>\n<p>* It&#8217;s former name was &#8220;Text Ascii Art Generator&#8221;. I noticed some people calling it &#8220;Text to ASCII Art Generator&#8221; and thought that was a better name.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The HTML Frameset tag is officially obsolete in HTML5. Since their inception, frames have drawn the ire of many web designers, though I&#8217;ve always had a soft spot for them. When I first learned how to use the frameset tag back in &#8217;98, I thought it was the coolest thing ever. I was able to &hellip; <a href=\"https:\/\/patorjk.com\/blog\/2012\/06\/07\/taag-reboot\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">TAAG Reboot<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[31,26],"tags":[],"class_list":["post-1795","post","type-post","status-publish","format-standard","hentry","category-development-thoughts","category-web-apps"],"_links":{"self":[{"href":"https:\/\/patorjk.com\/blog\/wp-json\/wp\/v2\/posts\/1795","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/patorjk.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/patorjk.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/patorjk.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/patorjk.com\/blog\/wp-json\/wp\/v2\/comments?post=1795"}],"version-history":[{"count":35,"href":"https:\/\/patorjk.com\/blog\/wp-json\/wp\/v2\/posts\/1795\/revisions"}],"predecessor-version":[{"id":1831,"href":"https:\/\/patorjk.com\/blog\/wp-json\/wp\/v2\/posts\/1795\/revisions\/1831"}],"wp:attachment":[{"href":"https:\/\/patorjk.com\/blog\/wp-json\/wp\/v2\/media?parent=1795"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/patorjk.com\/blog\/wp-json\/wp\/v2\/categories?post=1795"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/patorjk.com\/blog\/wp-json\/wp\/v2\/tags?post=1795"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}