{"id":5835,"date":"2018-04-11T11:57:03","date_gmt":"2018-04-11T11:57:03","guid":{"rendered":"https:\/\/www.anychart.com\/blog\/?p=5835"},"modified":"2018-04-12T05:03:15","modified_gmt":"2018-04-12T05:03:15","slug":"clojure-clojurescript-anychart","status":"publish","type":"post","link":"https:\/\/www.anychart.com\/blog\/2018\/04\/11\/clojure-clojurescript-anychart\/","title":{"rendered":"How AnyChart Team Makes Use of Clojure and ClojureScript"},"content":{"rendered":"<p><img decoding=\"async\" class=\"alignnone size-full wp-image-5849\" src=\"https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2018\/04\/clojure_cs.png\" alt=\"How AnyChart Team Makes Use of Clojure and ClojureScript\" width=\"100%\" srcset=\"https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2018\/04\/clojure_cs.png 978w, https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2018\/04\/clojure_cs-300x191.png 300w, https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2018\/04\/clojure_cs-768x488.png 768w\" sizes=\"(max-width: 978px) 100vw, 978px\" \/><br \/>\nThe prime directive of AnyChart team is to develop the best interactive charts possible. While doing so, we create and use a number of different tools and technologies, and we always search for the new technologies that may help us and make our work more efficient. In this article, we want to talk about the way we make use of Clojure and ClojureScript, and why.<\/p>\n<p><!--more--><\/p>\n<h2>What Are Clojure and ClojureScript<\/h2>\n<p><a href=\"https:\/\/clojure.org\/\" rel=\"nofollow\" target=\"_blank\">Clojure<\/a> is a dialect of the Lisp programming language; it is a dynamic, general-purpose language that combines the approachability and interactive development of a scripting language with an efficient and robust infrastructure for multithreaded programming. Clojure is now widely used in industry by firms such as Walmart, Puppet, and others. It is commercially supported by Cognitect, and though the company&#8217;s CTO Rich Hickey is the original author of the language, Clojure current development process is community-driven.<\/p>\n<p><a href=\"https:\/\/clojurescript.org\/\" rel=\"nofollow\" target=\"_blank\">ClojureScript<\/a> is a compiler for Clojure that targets JavaScript. It emits JavaScript code which is compatible with the advanced compilation mode of the Google Closure optimizing compiler.<\/p>\n<p>As Wayne Douglas Gretzky said: \u201c<em>A good hockey player plays where the puck is. A great hockey player plays where the puck is going to be.<\/em>\u201d Clojure and ClojureScript coupling is a multifunctional and convenient development tool that becomes more and more popular, and AnyChart team decided to go for it.<\/p>\n<h2>AnyChart Clojure-based Projects<\/h2>\n<ul>\n<li><a href=\"https:\/\/api.anychart.com\/\" target=\"_blank\" rel=\"nofollow\">AnyChart API Reference<\/a><\/li>\n<li><a href=\"https:\/\/docs.anychart.com\" target=\"_blank\" rel=\"nofollow\">AnyChart Documentation<\/a><\/li>\n<li><a href=\"https:\/\/playground.anychart.com\/\" target=\"_blank\" rel=\"nofollow\">AnyChart Playground<\/a><\/li>\n<li><a href=\"https:\/\/docs.anychart.com\/Common_Settings\/Server-side_Rendering\" target=\"_blank\" rel=\"nofollow\">AnyChart Export Server<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/AnyChart\/link-checker\" target=\"_blank\" rel=\"nofollow\">Link Checker<\/a><\/li>\n<\/ul>\n<p>Now we will speak a little bit more about how exactly we are using Clojure in these projects and why.<\/p>\n<h3>AnyChart API Reference<\/h3>\n<p><a href=\"https:\/\/api.anychart.com\/\" target=\"_blank\" rel=\"nofollow\">AnyChart API Reference<\/a> is an online reference of all namespaces, methods, classes, objects, enums, and events that are available in AnyChart libraries. Before we built our own parser and generator for AnyChart API Reference, we had used JSDoc3 for generating pages from code and had AngularJS-based frontend.<\/p>\n<p>Now, we have our own Clojure-based parser that processes JSDoc descriptions of namespaces, classes, and libraries. And then there is a ClojureScript web part that displays the reference.<\/p>\n<p>Both <a href=\"https:\/\/github.com\/AnyChart\/reference-engine\" target=\"_blank\" rel=\"nofollow\">AnyChart API Reference Engine<\/a> and <a href=\"https:\/\/github.com\/AnyChart\/api.anychart.com\" target=\"_blank\" rel=\"nofollow\">AnyChart API<\/a> are open and available on GitHub.<\/p>\n<h3>AnyChart Documentation<\/h3>\n<p><a href=\"https:\/\/docs.anychart.com\/\" target=\"_blank\" rel=\"nofollow\">AnyChart Documentation<\/a> is a set of articles and tutorials that users may need while working with AnyChart products. There are a number of ways to handle the documentation, and while there are a lot of commercial and free solutions for that, we decided to go on with our own so we could have the full control of the engine and\u00a0the ability to maintain strict versioning.<\/p>\n<p>The articles of AnyChart Documentation are stored in\u00a0the\u00a0<a href=\"https:\/\/github.com\/AnyChart\/docs.anychart.com\" target=\"_blank\" rel=\"nofollow\">AnyChart Documentation repository,<\/a>\u00a0in our special, slightly extended version of <a href=\"https:\/\/en.wikipedia.org\/wiki\/Markdown\" target=\"_blank\" rel=\"nofollow\">Markdown<\/a>. Each branch\u00a0of the repository is automatically processed by\u00a0a Clojure-based parser, the parsing results are stored in the Postgresql database, and the content is indexed using the Sphinx search engine.<\/p>\n<p>Both <a href=\"https:\/\/github.com\/AnyChart\/docs-engine\" target=\"_blank\" rel=\"nofollow\">AnyChart Docs Engine<\/a> and <a href=\"https:\/\/github.com\/AnyChart\/docs.anychart.com\" target=\"_blank\" rel=\"nofollow\">AnyChart API<\/a> are open and available on GitHub.<\/p>\n<h3>AnyChart Playground<\/h3>\n<p><a href=\"https:\/\/playground.anychart.com\/\" target=\"_blank\" rel=\"nofollow\">AnyChart Playground<\/a> is an online tool for testing and showcasing any HTML, CSS and JavaScript code. Basically, it is a project similar to JSFiddle or CodePen but built specifically to handle AnyChart HTML5 charts right there and then easily share them.<\/p>\n<p>AnyChart Playground is used to show samples from <a href=\"https:\/\/docs.anychart.com\/\" target=\"_blank\" rel=\"nofollow\">AnyChart Documentation<\/a>, <a href=\"https:\/\/api.anychart.com\/\" target=\"_blank\" rel=\"nofollow\">AnyChart API Reference<\/a>, <a href=\"https:\/\/www.anychart.com\/products\/anychart\/gallery\/\">AnyChart Charts Gallery<\/a>, and <a href=\"https:\/\/www.anychart.com\/chartopedia\/\">AnyChart Chartopedia<\/a>. Users can modify and fork any samples, and save them in AnyChart Playground Cloud Storage.<\/p>\n<p>Playground&#8217;s backend consists of three parts:<\/p>\n<ol>\n<li>Web part, the site itself and the editor.<\/li>\n<li><a href=\"https:\/\/github.com\/AnyChart\/playground-samples-parser\" target=\"_blank\" rel=\"nofollow\">Generator<\/a>, a parser that is used to get samples from different repositories (API, Documentation, Gallery and so on).<\/li>\n<li>PhantomJS-based preview image generator.<\/li>\n<\/ol>\n<p>Redis queues are used to handle interactions between the parts, and all this backend certainly can\u2019t do without Clojure.<\/p>\n<p>On the frontend, we are using ClojureScript along with <a href=\"https:\/\/reagent-project.github.io\/\" rel=\"nofollow\" target=\"_blank\">Reagent<\/a> and <a href=\"https:\/\/github.com\/Day8\/re-frame\" rel=\"nofollow\" target=\"_blank\">re-frame<\/a>.<\/p>\n<p><a href=\"https:\/\/github.com\/AnyChart\/playground\" target=\"_blank\" rel=\"nofollow\">AnyChart Playground Engine<\/a> repo is open on GitHub.<\/p>\n<h3>Link Checker<\/h3>\n<p>When creating articles in the AnyChart documentation, we often have to put in links to the pages on our website or in the API reference that do not exist yet. To avoid cases when such links go into production, we created Link Checker, a small Clojure library to check if there are any broken links on a site. Check out the\u00a0<a href=\"https:\/\/github.com\/AnyChart\/link-checker\" target=\"_blank\" rel=\"nofollow\">Link Checker<\/a> repository to find out how it works.<\/p>\n<hr \/>\n<p>We love Clojure for the speed of development, for the ability to use a large number of libraries (because we deal with Java platform here) and to write common code that is used both on the backend and on the frontend. And of course, we love Clojure for the great pleasure it gives when we work with it. By the way, recently we\u2019ve started using <a href=\"https:\/\/github.com\/nathanmarz\/specter\" rel=\"nofollow\" target=\"_blank\">Specter<\/a> and <a href=\"https:\/\/github.com\/Engelberg\/instaparse\" rel=\"nofollow\" target=\"_blank\">Instaparse<\/a> libraries, which is a new step forward for us. The former is designed to operate complex data structures and the latter \u2014 to create parsers.<\/p>\n<p>We hope you learned something interesting and helpful from this article. And maybe you already fell in love with Clojure as we did. Never stop growing, keep searching for new tools and new ideas that may make your work better. Stay tuned and thanks for your attention!<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>The prime directive of AnyChart team is to develop the best interactive charts possible. While doing so, we create and use a number of different tools and technologies, and we always search for the new technologies that may help us and make our work more efficient. In this article, we want to talk about the [&hellip;]<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":13,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[53,258,299,300,54,32,55,144,36,56],"class_list":["post-5835","post","type-post","status-publish","format-standard","hentry","category-anychart-charting-component","tag-anychart","tag-charts","tag-clojure","tag-clojurescript","tag-data-visualization","tag-html5","tag-html5-charts","tag-infographics","tag-javascript","tag-js-charts","wpautop"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>How AnyChart Team Makes Use of Clojure and ClojureScript<\/title>\n<meta name=\"description\" content=\"To develop the best interactive charts possible, we create and utilize various tools and technologies. Now, I&#039;ll tell you how we use Clojure &amp; ClojureScript\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.anychart.com\/blog\/2018\/04\/11\/clojure-clojurescript-anychart\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How AnyChart Team Makes Use of Clojure and ClojureScript\" \/>\n<meta property=\"og:description\" content=\"To develop the best interactive charts possible, we create and utilize various tools and technologies. Now, I&#039;ll tell you how we use Clojure &amp; ClojureScript\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.anychart.com\/blog\/2018\/04\/11\/clojure-clojurescript-anychart\/\" \/>\n<meta property=\"og:site_name\" content=\"AnyChart News\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/AnyCharts\" \/>\n<meta property=\"article:published_time\" content=\"2018-04-11T11:57:03+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2018-04-12T05:03:15+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2018\/04\/clojure_cs.png\" \/>\n\t<meta property=\"og:image:width\" content=\"978\" \/>\n\t<meta property=\"og:image:height\" content=\"622\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Irina Maximova\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@AnyChart\" \/>\n<meta name=\"twitter:site\" content=\"@AnyChart\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Irina Maximova\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.anychart.com\/blog\/2018\/04\/11\/clojure-clojurescript-anychart\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.anychart.com\/blog\/2018\/04\/11\/clojure-clojurescript-anychart\/\"},\"author\":{\"name\":\"Irina Maximova\",\"@id\":\"https:\/\/www.anychart.com\/blog\/#\/schema\/person\/c79061b5c43d09368b8d44b36842b058\"},\"headline\":\"How AnyChart Team Makes Use of Clojure and ClojureScript\",\"datePublished\":\"2018-04-11T11:57:03+00:00\",\"dateModified\":\"2018-04-12T05:03:15+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.anychart.com\/blog\/2018\/04\/11\/clojure-clojurescript-anychart\/\"},\"wordCount\":859,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/www.anychart.com\/blog\/2018\/04\/11\/clojure-clojurescript-anychart\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2018\/04\/clojure_cs.png\",\"keywords\":[\"AnyChart\",\"charts\",\"clojure\",\"clojurescript\",\"Data Visualization\",\"HTML5\",\"html5 charts\",\"infographics\",\"JavaScript\",\"js charts\"],\"articleSection\":[\"AnyChart Charting Component\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.anychart.com\/blog\/2018\/04\/11\/clojure-clojurescript-anychart\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.anychart.com\/blog\/2018\/04\/11\/clojure-clojurescript-anychart\/\",\"url\":\"https:\/\/www.anychart.com\/blog\/2018\/04\/11\/clojure-clojurescript-anychart\/\",\"name\":\"How AnyChart Team Makes Use of Clojure and ClojureScript\",\"isPartOf\":{\"@id\":\"https:\/\/www.anychart.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.anychart.com\/blog\/2018\/04\/11\/clojure-clojurescript-anychart\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.anychart.com\/blog\/2018\/04\/11\/clojure-clojurescript-anychart\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2018\/04\/clojure_cs.png\",\"datePublished\":\"2018-04-11T11:57:03+00:00\",\"dateModified\":\"2018-04-12T05:03:15+00:00\",\"author\":{\"@id\":\"https:\/\/www.anychart.com\/blog\/#\/schema\/person\/c79061b5c43d09368b8d44b36842b058\"},\"description\":\"To develop the best interactive charts possible, we create and utilize various tools and technologies. Now, I'll tell you how we use Clojure & ClojureScript\",\"breadcrumb\":{\"@id\":\"https:\/\/www.anychart.com\/blog\/2018\/04\/11\/clojure-clojurescript-anychart\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.anychart.com\/blog\/2018\/04\/11\/clojure-clojurescript-anychart\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.anychart.com\/blog\/2018\/04\/11\/clojure-clojurescript-anychart\/#primaryimage\",\"url\":\"https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2018\/04\/clojure_cs.png\",\"contentUrl\":\"https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2018\/04\/clojure_cs.png\",\"width\":978,\"height\":622},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.anychart.com\/blog\/2018\/04\/11\/clojure-clojurescript-anychart\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.anychart.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How AnyChart Team Makes Use of Clojure and ClojureScript\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.anychart.com\/blog\/#website\",\"url\":\"https:\/\/www.anychart.com\/blog\/\",\"name\":\"AnyChart News\",\"description\":\"AnyChart JS Charts\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.anychart.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.anychart.com\/blog\/#\/schema\/person\/c79061b5c43d09368b8d44b36842b058\",\"name\":\"Irina Maximova\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.anychart.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/023075cf0bac635343d009a289d4c3d32138b5a3890d10f09ed59755e59bc065?s=96&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/023075cf0bac635343d009a289d4c3d32138b5a3890d10f09ed59755e59bc065?s=96&r=g\",\"caption\":\"Irina Maximova\"},\"url\":\"https:\/\/www.anychart.com\/blog\/author\/irina-maximova\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How AnyChart Team Makes Use of Clojure and ClojureScript","description":"To develop the best interactive charts possible, we create and utilize various tools and technologies. Now, I'll tell you how we use Clojure & ClojureScript","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.anychart.com\/blog\/2018\/04\/11\/clojure-clojurescript-anychart\/","og_locale":"en_US","og_type":"article","og_title":"How AnyChart Team Makes Use of Clojure and ClojureScript","og_description":"To develop the best interactive charts possible, we create and utilize various tools and technologies. Now, I'll tell you how we use Clojure & ClojureScript","og_url":"https:\/\/www.anychart.com\/blog\/2018\/04\/11\/clojure-clojurescript-anychart\/","og_site_name":"AnyChart News","article_publisher":"https:\/\/www.facebook.com\/AnyCharts","article_published_time":"2018-04-11T11:57:03+00:00","article_modified_time":"2018-04-12T05:03:15+00:00","og_image":[{"width":978,"height":622,"url":"https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2018\/04\/clojure_cs.png","type":"image\/png"}],"author":"Irina Maximova","twitter_card":"summary_large_image","twitter_creator":"@AnyChart","twitter_site":"@AnyChart","twitter_misc":{"Written by":"Irina Maximova","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.anychart.com\/blog\/2018\/04\/11\/clojure-clojurescript-anychart\/#article","isPartOf":{"@id":"https:\/\/www.anychart.com\/blog\/2018\/04\/11\/clojure-clojurescript-anychart\/"},"author":{"name":"Irina Maximova","@id":"https:\/\/www.anychart.com\/blog\/#\/schema\/person\/c79061b5c43d09368b8d44b36842b058"},"headline":"How AnyChart Team Makes Use of Clojure and ClojureScript","datePublished":"2018-04-11T11:57:03+00:00","dateModified":"2018-04-12T05:03:15+00:00","mainEntityOfPage":{"@id":"https:\/\/www.anychart.com\/blog\/2018\/04\/11\/clojure-clojurescript-anychart\/"},"wordCount":859,"commentCount":0,"image":{"@id":"https:\/\/www.anychart.com\/blog\/2018\/04\/11\/clojure-clojurescript-anychart\/#primaryimage"},"thumbnailUrl":"https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2018\/04\/clojure_cs.png","keywords":["AnyChart","charts","clojure","clojurescript","Data Visualization","HTML5","html5 charts","infographics","JavaScript","js charts"],"articleSection":["AnyChart Charting Component"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.anychart.com\/blog\/2018\/04\/11\/clojure-clojurescript-anychart\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.anychart.com\/blog\/2018\/04\/11\/clojure-clojurescript-anychart\/","url":"https:\/\/www.anychart.com\/blog\/2018\/04\/11\/clojure-clojurescript-anychart\/","name":"How AnyChart Team Makes Use of Clojure and ClojureScript","isPartOf":{"@id":"https:\/\/www.anychart.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.anychart.com\/blog\/2018\/04\/11\/clojure-clojurescript-anychart\/#primaryimage"},"image":{"@id":"https:\/\/www.anychart.com\/blog\/2018\/04\/11\/clojure-clojurescript-anychart\/#primaryimage"},"thumbnailUrl":"https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2018\/04\/clojure_cs.png","datePublished":"2018-04-11T11:57:03+00:00","dateModified":"2018-04-12T05:03:15+00:00","author":{"@id":"https:\/\/www.anychart.com\/blog\/#\/schema\/person\/c79061b5c43d09368b8d44b36842b058"},"description":"To develop the best interactive charts possible, we create and utilize various tools and technologies. Now, I'll tell you how we use Clojure & ClojureScript","breadcrumb":{"@id":"https:\/\/www.anychart.com\/blog\/2018\/04\/11\/clojure-clojurescript-anychart\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.anychart.com\/blog\/2018\/04\/11\/clojure-clojurescript-anychart\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.anychart.com\/blog\/2018\/04\/11\/clojure-clojurescript-anychart\/#primaryimage","url":"https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2018\/04\/clojure_cs.png","contentUrl":"https:\/\/www.anychart.com\/blog\/wp-content\/uploads\/2018\/04\/clojure_cs.png","width":978,"height":622},{"@type":"BreadcrumbList","@id":"https:\/\/www.anychart.com\/blog\/2018\/04\/11\/clojure-clojurescript-anychart\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.anychart.com\/blog\/"},{"@type":"ListItem","position":2,"name":"How AnyChart Team Makes Use of Clojure and ClojureScript"}]},{"@type":"WebSite","@id":"https:\/\/www.anychart.com\/blog\/#website","url":"https:\/\/www.anychart.com\/blog\/","name":"AnyChart News","description":"AnyChart JS Charts","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.anychart.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.anychart.com\/blog\/#\/schema\/person\/c79061b5c43d09368b8d44b36842b058","name":"Irina Maximova","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.anychart.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/023075cf0bac635343d009a289d4c3d32138b5a3890d10f09ed59755e59bc065?s=96&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/023075cf0bac635343d009a289d4c3d32138b5a3890d10f09ed59755e59bc065?s=96&r=g","caption":"Irina Maximova"},"url":"https:\/\/www.anychart.com\/blog\/author\/irina-maximova\/"}]}},"_links":{"self":[{"href":"https:\/\/www.anychart.com\/blog\/wp-json\/wp\/v2\/posts\/5835","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.anychart.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.anychart.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.anychart.com\/blog\/wp-json\/wp\/v2\/users\/13"}],"replies":[{"embeddable":true,"href":"https:\/\/www.anychart.com\/blog\/wp-json\/wp\/v2\/comments?post=5835"}],"version-history":[{"count":21,"href":"https:\/\/www.anychart.com\/blog\/wp-json\/wp\/v2\/posts\/5835\/revisions"}],"predecessor-version":[{"id":5909,"href":"https:\/\/www.anychart.com\/blog\/wp-json\/wp\/v2\/posts\/5835\/revisions\/5909"}],"wp:attachment":[{"href":"https:\/\/www.anychart.com\/blog\/wp-json\/wp\/v2\/media?parent=5835"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.anychart.com\/blog\/wp-json\/wp\/v2\/categories?post=5835"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.anychart.com\/blog\/wp-json\/wp\/v2\/tags?post=5835"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}