{"id":84,"date":"2009-04-01T21:32:52","date_gmt":"2009-04-02T06:32:52","guid":{"rendered":"https:\/\/www.kellyrob99.com\/blog\/?p=84"},"modified":"2009-04-21T20:21:28","modified_gmt":"2009-04-22T05:21:28","slug":"the-first-two-chapters-of-griffon-in-action","status":"publish","type":"post","link":"https:\/\/www.kellyrob99.com\/blog\/2009\/04\/01\/the-first-two-chapters-of-griffon-in-action\/","title":{"rendered":"The first two chapters of Griffon In Action"},"content":{"rendered":"<p>Documentation up until now has been sparse to be sure, but judging by the first two chapters of the <a href=\"http:\/\/www.manning.com\/about\/meap.html\">MEAP<\/a> for <a href=\"http:\/\/www.manning.com\/almiray\/\">Griffon in Action<\/a>, this book is going to be worth every penny.<\/p>\n<p>I&#8217;ve experimented a bit with <a class=\"zem_slink\" title=\"Griffon (framework)\" rel=\"homepage\" href=\"http:\/\/groovy.codehaus.org\/Griffon\">Griffon<\/a> a bit lately, but still being somewhat of a <a href=\"http:\/\/groovy.codehaus.org\/\">Groovy<\/a> noob, I don&#8217;t think that the full impact hit me until I started reading the book. Maybe part of the problem is not that it&#8217;s hard to understand, but that it&#8217;s hard to believe that it&#8217;s so easy.<\/p>\n<p>A very clearly defined way of separating the classic <a class=\"zem_slink\" title=\"Model-view-controller\" rel=\"wikipedia\" href=\"http:\/\/en.wikipedia.org\/wiki\/Model-view-controller\">MVC<\/a>. Injection of views, models, controllers &#8211; all available by convention not by annotation, xml configuration or even having to a refer to a component by name. The transparent access to a variety of builder actions through plugins makes a large toolset available with little or no cost. Clear architectural boundaries exist that guide you to where your code should be developed. The Griffon framework, created with gracious acknowledgement to its forerunner <a class=\"zem_slink\" title=\"Grails (framework)\" rel=\"homepage\" href=\"http:\/\/grails.org\">Grails<\/a> strives to do one thing above all &#8211; make Swing easy.<\/p>\n<p>The power and versatility of Swing has always been obvious to me. The &#8216;magic sauce&#8217; that makes large scale Java Swing applications behave in any sane way has been a little more hazy. The advent of SwingWorker and other enhancements to the Swing toolset and the availability of better documentation have certainly made the landscape a lot more tolerable, but at the end of the day, it&#8217;s still hard to even find good examples of large Swing apps to use as a guideline(well at least it has been for me.) On the other side of the spectrum, I&#8217;m not sure there IS such a thing as a small Swing app. The amount of boilerplate code required is cumbersame, to say the least, and between anonymous inner classes for actions\/listeners and correct handling of business logic and the <a class=\"zem_slink\" title=\"Event dispatching thread\" rel=\"wikipedia\" href=\"http:\/\/en.wikipedia.org\/wiki\/Event_dispatching_thread\">EDT<\/a> by the time you&#8217;ve finished doing anything moderately significant you&#8217;re already a couple 1000 lines in.<\/p>\n<p>Griffon takes all that and hides it behind a curtain. Expanding on the already powerful SwingBuilder capabilities, it provides a quick and easy way to develop complex Swing applications. Utilizing @Binding to provide easy view\/model interaction and baking the Observer pattern right into the framework make it beyond simple to deal with <a class=\"zem_slink\" title=\"Graphical user interface\" rel=\"wikipedia\" href=\"http:\/\/en.wikipedia.org\/wiki\/Graphical_user_interface\">GUI<\/a> events. And the pattern for dealing with EDT issues couldn&#8217;t be much more straightforward.<\/p>\n<pre class=\"brush: groovy; title: ; notranslate\" title=\"\">\r\n\r\ndoOutside {\r\n.... do whatever you need to do off of the EDT\r\ndoLater { ... come back to the EDT when you're done to update widgets }\r\n}\r\n\r\n<\/pre>\n<p>I&#8217;m pretty sure that&#8217;s an easy enough pattern that I will never again forget the cost of doing&#8230; well pretty much anything that takes +1 second while blocking the EDT.<\/p>\n<p>Personally, I&#8217;ve run into a couple of unexpected results when trying to utilize the webstart version of the application, but other than that everything has worked exactly as advertised. And at the end of the day I&#8217;m willing to chalk that up to my misuse of the system. I&#8217;ll tell you for sure when I get to that chapter of the book. Which will probably be about 2 days after the authors publish it.<\/p>\n<p>\ud83d\ude42<\/p>\n<p>So far my impression of the pre-release chapters of the book are pretty good &#8211; well written, clear and above all &#8211; the code samples work. Kudos to the authors <a href=\"http:\/\/www.jroller.com\/aalmiray\/\">Andres Almiray<\/a>,<a href=\"http:\/\/shemnon.com\/speling\/\"> Danno Ferrin<\/a> and <a href=\"http:\/\/blogs.sun.com\/geertjan\/\">Geertjan Wielenga<\/a>.&nbsp; Look forward to the rest of the book boys, and to writing some new Swing apps with Griffon!<\/p>\n<div class=\"zemanta-pixie\"><a class=\"zemanta-pixie-a\" href=\"http:\/\/reblog.zemanta.com\/zemified\/07d75949-b8da-4090-a057-6c9c6b02b056\/\" title=\"Reblog this post [with Zemanta]\"><img data-recalc-dims=\"1\" decoding=\"async\" class=\"zemanta-pixie-img\" src=\"https:\/\/i0.wp.com\/img.zemanta.com\/reblog_c.png\" alt=\"Reblog this post [with Zemanta]\" \/><\/a><span class=\"zem-script more-related pretty-attribution\"><script type=\"text\/javascript\" src=\"http:\/\/static.zemanta.com\/readside\/loader.js\" defer=\"defer\"><\/script><\/span><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Documentation up until now has been sparse to be sure, but judging by the first two chapters of the MEAP for Griffon in Action, this book is going to be worth every penny. I&#8217;ve experimented a bit with Griffon a bit lately, but still being somewhat of a Groovy noob, I don&#8217;t think that the [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[6],"tags":[259,258,17,35,18,34],"class_list":["post-84","post","type-post","status-publish","format-standard","hentry","category-dev","tag-grails","tag-java","tag-model-view-controller","tag-programming","tag-swing","tag-swingworker"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"Overview of a new book from Manning publication by Andres Almiray, Geertjan Wielenga and Danno Ferrin. Griffon - an application framework for Swing!\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"TheKaptain\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.kellyrob99.com\/blog\/2009\/04\/01\/the-first-two-chapters-of-griffon-in-action\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"The Kaptain on ... stuff | Tales of development, life and the folly that goes along with both\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"The first two chapters of Griffon In Action | The Kaptain on ... stuff\" \/>\n\t\t<meta property=\"og:description\" content=\"Overview of a new book from Manning publication by Andres Almiray, Geertjan Wielenga and Danno Ferrin. Griffon - an application framework for Swing!\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.kellyrob99.com\/blog\/2009\/04\/01\/the-first-two-chapters-of-griffon-in-action\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2009-04-02T06:32:52+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2009-04-22T05:21:28+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:title\" content=\"The first two chapters of Griffon In Action | The Kaptain on ... stuff\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Overview of a new book from Manning publication by Andres Almiray, Geertjan Wielenga and Danno Ferrin. Griffon - an application framework for Swing!\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.kellyrob99.com\\\/blog\\\/2009\\\/04\\\/01\\\/the-first-two-chapters-of-griffon-in-action\\\/#article\",\"name\":\"The first two chapters of Griffon In Action | The Kaptain on ... stuff\",\"headline\":\"The first two chapters of Griffon In Action\",\"author\":{\"@id\":\"https:\\\/\\\/www.kellyrob99.com\\\/blog\\\/author\\\/admin\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/www.kellyrob99.com\\\/blog\\\/#organization\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"http:\\\/\\\/img.zemanta.com\\\/reblog_c.png?x-id=07d75949-b8da-4090-a057-6c9c6b02b056\",\"@id\":\"https:\\\/\\\/www.kellyrob99.com\\\/blog\\\/2009\\\/04\\\/01\\\/the-first-two-chapters-of-griffon-in-action\\\/#articleImage\"},\"datePublished\":\"2009-04-01T21:32:52-09:00\",\"dateModified\":\"2009-04-21T20:21:28-09:00\",\"inLanguage\":\"en-US\",\"commentCount\":2,\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.kellyrob99.com\\\/blog\\\/2009\\\/04\\\/01\\\/the-first-two-chapters-of-griffon-in-action\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.kellyrob99.com\\\/blog\\\/2009\\\/04\\\/01\\\/the-first-two-chapters-of-griffon-in-action\\\/#webpage\"},\"articleSection\":\"Development, Grails, Java, Model-view-controller, Programming, Swing, SwingWorker\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.kellyrob99.com\\\/blog\\\/2009\\\/04\\\/01\\\/the-first-two-chapters-of-griffon-in-action\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.kellyrob99.com\\\/blog#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.kellyrob99.com\\\/blog\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.kellyrob99.com\\\/blog\\\/category\\\/dev\\\/#listItem\",\"name\":\"Development\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.kellyrob99.com\\\/blog\\\/category\\\/dev\\\/#listItem\",\"position\":2,\"name\":\"Development\",\"item\":\"https:\\\/\\\/www.kellyrob99.com\\\/blog\\\/category\\\/dev\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.kellyrob99.com\\\/blog\\\/2009\\\/04\\\/01\\\/the-first-two-chapters-of-griffon-in-action\\\/#listItem\",\"name\":\"The first two chapters of Griffon In Action\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.kellyrob99.com\\\/blog#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.kellyrob99.com\\\/blog\\\/2009\\\/04\\\/01\\\/the-first-two-chapters-of-griffon-in-action\\\/#listItem\",\"position\":3,\"name\":\"The first two chapters of Griffon In Action\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.kellyrob99.com\\\/blog\\\/category\\\/dev\\\/#listItem\",\"name\":\"Development\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.kellyrob99.com\\\/blog\\\/#organization\",\"name\":\"The Kaptain on ... stuff\",\"description\":\"Tales of development, life and the folly that goes along with both\",\"url\":\"https:\\\/\\\/www.kellyrob99.com\\\/blog\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.kellyrob99.com\\\/blog\\\/author\\\/admin\\\/#author\",\"url\":\"https:\\\/\\\/www.kellyrob99.com\\\/blog\\\/author\\\/admin\\\/\",\"name\":\"TheKaptain\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/www.kellyrob99.com\\\/blog\\\/2009\\\/04\\\/01\\\/the-first-two-chapters-of-griffon-in-action\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e41f09f3548f065fe6967ac904d3ea2a638614c16d879cac47cfad64e5b1426a?s=96&d=monsterid&r=g\",\"width\":96,\"height\":96,\"caption\":\"TheKaptain\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.kellyrob99.com\\\/blog\\\/2009\\\/04\\\/01\\\/the-first-two-chapters-of-griffon-in-action\\\/#webpage\",\"url\":\"https:\\\/\\\/www.kellyrob99.com\\\/blog\\\/2009\\\/04\\\/01\\\/the-first-two-chapters-of-griffon-in-action\\\/\",\"name\":\"The first two chapters of Griffon In Action | The Kaptain on ... stuff\",\"description\":\"Overview of a new book from Manning publication by Andres Almiray, Geertjan Wielenga and Danno Ferrin. Griffon - an application framework for Swing!\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.kellyrob99.com\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.kellyrob99.com\\\/blog\\\/2009\\\/04\\\/01\\\/the-first-two-chapters-of-griffon-in-action\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/www.kellyrob99.com\\\/blog\\\/author\\\/admin\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/www.kellyrob99.com\\\/blog\\\/author\\\/admin\\\/#author\"},\"datePublished\":\"2009-04-01T21:32:52-09:00\",\"dateModified\":\"2009-04-21T20:21:28-09:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.kellyrob99.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.kellyrob99.com\\\/blog\\\/\",\"name\":\"The Kaptain on ... stuff\",\"description\":\"Tales of development, life and the folly that goes along with both\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.kellyrob99.com\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"The first two chapters of Griffon In Action | The Kaptain on ... stuff","description":"Overview of a new book from Manning publication by Andres Almiray, Geertjan Wielenga and Danno Ferrin. Griffon - an application framework for Swing!","canonical_url":"https:\/\/www.kellyrob99.com\/blog\/2009\/04\/01\/the-first-two-chapters-of-griffon-in-action\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.kellyrob99.com\/blog\/2009\/04\/01\/the-first-two-chapters-of-griffon-in-action\/#article","name":"The first two chapters of Griffon In Action | The Kaptain on ... stuff","headline":"The first two chapters of Griffon In Action","author":{"@id":"https:\/\/www.kellyrob99.com\/blog\/author\/admin\/#author"},"publisher":{"@id":"https:\/\/www.kellyrob99.com\/blog\/#organization"},"image":{"@type":"ImageObject","url":"http:\/\/img.zemanta.com\/reblog_c.png?x-id=07d75949-b8da-4090-a057-6c9c6b02b056","@id":"https:\/\/www.kellyrob99.com\/blog\/2009\/04\/01\/the-first-two-chapters-of-griffon-in-action\/#articleImage"},"datePublished":"2009-04-01T21:32:52-09:00","dateModified":"2009-04-21T20:21:28-09:00","inLanguage":"en-US","commentCount":2,"mainEntityOfPage":{"@id":"https:\/\/www.kellyrob99.com\/blog\/2009\/04\/01\/the-first-two-chapters-of-griffon-in-action\/#webpage"},"isPartOf":{"@id":"https:\/\/www.kellyrob99.com\/blog\/2009\/04\/01\/the-first-two-chapters-of-griffon-in-action\/#webpage"},"articleSection":"Development, Grails, Java, Model-view-controller, Programming, Swing, SwingWorker"},{"@type":"BreadcrumbList","@id":"https:\/\/www.kellyrob99.com\/blog\/2009\/04\/01\/the-first-two-chapters-of-griffon-in-action\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/www.kellyrob99.com\/blog#listItem","position":1,"name":"Home","item":"https:\/\/www.kellyrob99.com\/blog","nextItem":{"@type":"ListItem","@id":"https:\/\/www.kellyrob99.com\/blog\/category\/dev\/#listItem","name":"Development"}},{"@type":"ListItem","@id":"https:\/\/www.kellyrob99.com\/blog\/category\/dev\/#listItem","position":2,"name":"Development","item":"https:\/\/www.kellyrob99.com\/blog\/category\/dev\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.kellyrob99.com\/blog\/2009\/04\/01\/the-first-two-chapters-of-griffon-in-action\/#listItem","name":"The first two chapters of Griffon In Action"},"previousItem":{"@type":"ListItem","@id":"https:\/\/www.kellyrob99.com\/blog#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/www.kellyrob99.com\/blog\/2009\/04\/01\/the-first-two-chapters-of-griffon-in-action\/#listItem","position":3,"name":"The first two chapters of Griffon In Action","previousItem":{"@type":"ListItem","@id":"https:\/\/www.kellyrob99.com\/blog\/category\/dev\/#listItem","name":"Development"}}]},{"@type":"Organization","@id":"https:\/\/www.kellyrob99.com\/blog\/#organization","name":"The Kaptain on ... stuff","description":"Tales of development, life and the folly that goes along with both","url":"https:\/\/www.kellyrob99.com\/blog\/"},{"@type":"Person","@id":"https:\/\/www.kellyrob99.com\/blog\/author\/admin\/#author","url":"https:\/\/www.kellyrob99.com\/blog\/author\/admin\/","name":"TheKaptain","image":{"@type":"ImageObject","@id":"https:\/\/www.kellyrob99.com\/blog\/2009\/04\/01\/the-first-two-chapters-of-griffon-in-action\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/e41f09f3548f065fe6967ac904d3ea2a638614c16d879cac47cfad64e5b1426a?s=96&d=monsterid&r=g","width":96,"height":96,"caption":"TheKaptain"}},{"@type":"WebPage","@id":"https:\/\/www.kellyrob99.com\/blog\/2009\/04\/01\/the-first-two-chapters-of-griffon-in-action\/#webpage","url":"https:\/\/www.kellyrob99.com\/blog\/2009\/04\/01\/the-first-two-chapters-of-griffon-in-action\/","name":"The first two chapters of Griffon In Action | The Kaptain on ... stuff","description":"Overview of a new book from Manning publication by Andres Almiray, Geertjan Wielenga and Danno Ferrin. Griffon - an application framework for Swing!","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/www.kellyrob99.com\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/www.kellyrob99.com\/blog\/2009\/04\/01\/the-first-two-chapters-of-griffon-in-action\/#breadcrumblist"},"author":{"@id":"https:\/\/www.kellyrob99.com\/blog\/author\/admin\/#author"},"creator":{"@id":"https:\/\/www.kellyrob99.com\/blog\/author\/admin\/#author"},"datePublished":"2009-04-01T21:32:52-09:00","dateModified":"2009-04-21T20:21:28-09:00"},{"@type":"WebSite","@id":"https:\/\/www.kellyrob99.com\/blog\/#website","url":"https:\/\/www.kellyrob99.com\/blog\/","name":"The Kaptain on ... stuff","description":"Tales of development, life and the folly that goes along with both","inLanguage":"en-US","publisher":{"@id":"https:\/\/www.kellyrob99.com\/blog\/#organization"}}]},"og:locale":"en_US","og:site_name":"The Kaptain on ... stuff | Tales of development, life and the folly that goes along with both","og:type":"article","og:title":"The first two chapters of Griffon In Action | The Kaptain on ... stuff","og:description":"Overview of a new book from Manning publication by Andres Almiray, Geertjan Wielenga and Danno Ferrin. Griffon - an application framework for Swing!","og:url":"https:\/\/www.kellyrob99.com\/blog\/2009\/04\/01\/the-first-two-chapters-of-griffon-in-action\/","article:published_time":"2009-04-02T06:32:52+00:00","article:modified_time":"2009-04-22T05:21:28+00:00","twitter:card":"summary","twitter:title":"The first two chapters of Griffon In Action | The Kaptain on ... stuff","twitter:description":"Overview of a new book from Manning publication by Andres Almiray, Geertjan Wielenga and Danno Ferrin. Griffon - an application framework for Swing!"},"aioseo_meta_data":{"post_id":"84","title":"The first two chapters of Griffon In Action | #site_title","description":"Overview of a new book from Manning publication by Andres Almiray, Geertjan Wielenga and Danno Ferrin. Griffon - an application framework for Swing!","keywords":[{"label":"Groovy","value":"Groovy"},{"label":"Griffon","value":"Griffon"},{"label":"Java","value":"Java"},{"label":"Swing","value":"Swing"},{"label":"SwingBuilder","value":"SwingBuilder"}],"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"location":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":null,"created":"2021-02-09 05:16:03","updated":"2025-11-29 20:22:42","seo_analyzer_scan_date":null,"focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.kellyrob99.com\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.kellyrob99.com\/blog\/category\/dev\/\" title=\"Development\">Development<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tThe first two chapters of Griffon In Action\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.kellyrob99.com\/blog"},{"label":"Development","link":"https:\/\/www.kellyrob99.com\/blog\/category\/dev\/"},{"label":"The first two chapters of Griffon In Action","link":"https:\/\/www.kellyrob99.com\/blog\/2009\/04\/01\/the-first-two-chapters-of-griffon-in-action\/"}],"jetpack_publicize_connections":[],"jetpack_shortlink":"https:\/\/wp.me\/prjtg-1m","jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/www.kellyrob99.com\/blog\/wp-json\/wp\/v2\/posts\/84","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kellyrob99.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.kellyrob99.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.kellyrob99.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kellyrob99.com\/blog\/wp-json\/wp\/v2\/comments?post=84"}],"version-history":[{"count":19,"href":"https:\/\/www.kellyrob99.com\/blog\/wp-json\/wp\/v2\/posts\/84\/revisions"}],"predecessor-version":[{"id":101,"href":"https:\/\/www.kellyrob99.com\/blog\/wp-json\/wp\/v2\/posts\/84\/revisions\/101"}],"wp:attachment":[{"href":"https:\/\/www.kellyrob99.com\/blog\/wp-json\/wp\/v2\/media?parent=84"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kellyrob99.com\/blog\/wp-json\/wp\/v2\/categories?post=84"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kellyrob99.com\/blog\/wp-json\/wp\/v2\/tags?post=84"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}