{"id":1693,"date":"2014-11-12T15:33:25","date_gmt":"2014-11-12T20:33:25","guid":{"rendered":"http:\/\/blogs.library.duke.edu\/bitstreams\/?p=1693"},"modified":"2014-11-12T15:33:25","modified_gmt":"2014-11-12T20:33:25","slug":"new-angles-avenues-bitstreams","status":"publish","type":"post","link":"https:\/\/blogs.library.duke.edu\/bitstreams\/2014\/11\/12\/new-angles-avenues-bitstreams\/","title":{"rendered":"New Angles &#038; Avenues for Bitstreams"},"content":{"rendered":"<p>This week, we added a display of our most recent Bitstreams blog posts to our Digital Collections homepage (<a href=\"http:\/\/library.duke.edu\/digitalcollections\">example<\/a>), and likewise, a view of posts relevant to a given collection on the respective collection\u2019s homepage (<a href=\"http:\/\/library.duke.edu\/digitalcollections\/behindtheveil\/\">example<\/a>).<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-1699\" src=\"http:\/\/blogs.library.duke.edu\/bitstreams\/files\/2014\/11\/Screen-Shot-2014-11-12-at-1.19.56-PM.png\" alt=\"Screen Shot 2014-11-12 at 1.19.56 PM\" width=\"650\" height=\"305\" srcset=\"https:\/\/blogs.library.duke.edu\/bitstreams\/files\/2014\/11\/Screen-Shot-2014-11-12-at-1.19.56-PM.png 708w, https:\/\/blogs.library.duke.edu\/bitstreams\/files\/2014\/11\/Screen-Shot-2014-11-12-at-1.19.56-PM-300x140.png 300w\" sizes=\"auto, (max-width: 650px) 100vw, 650px\" \/><\/p>\n<h2>Background<\/h2>\n<p>Our Digital Projects &amp; Production team has been writing in <a href=\"http:\/\/blogs.library.duke.edu\/bitstreams\">Bitstreams<\/a> at least weekly since February 2014. We\u2019ve had some excellent guest contributors, too. Some posts share updates about new digital collections or additions, while others share insights, lessons learned, and behind-the-scenes looks at the projects we\u2019re currently tackling.<\/p>\n<p>Many of our posts have been featured on our <a href=\"http:\/\/library.duke.edu\">library homepage<\/a> and <a href=\"http:\/\/blogs.library.duke.edu\">library news site<\/a>. But until now, we haven\u2019t been able to display any of them\u2014not even the ones about new digital collections\u2014alongside the collections themselves. So, if you visited the <a href=\"http:\/\/library.duke.edu\/digitalcollections\/dukengineer\/\">DukEngineer<\/a> collection in the past, you likely missed out on <a href=\"http:\/\/blogs.library.duke.edu\/bitstreams\/2014\/04\/30\/announcing-the-dukengineer-digital-collection\/\">Melanie\u2019s excellent overview<\/a>, which puts the magazine in context and highlights the best of what\u2019s inside.<\/p>\n<h3>Past Solutions<\/h3>\n<p>Syndicating tagged blog posts for display elsewhere is a pretty common use case, and we\u2019ve used a bunch of different solutions as our platforms have evolved. Each solution has naturally been painstakingly tailored to accommodate the inner workings of both the source and the destination. Seven years ago, we were writing custom XSLT to create and then consume our own RSS feeds in Cascade Server CMS. We have since hopped over to\u00a0Wordpress for managing news and blogs (whew!). An older version of our digital collections app used WordPress\u2019 XML-RPC API to get tagged posts and parsed them with Python.<\/p>\n<p>These days, our library website does blog syndication by using\u00a0a combo of <a href=\"http:\/\/codex.wordpress.org\/WordPress_Feeds\">WordPress RSS<\/a>, Drupal\u2019s <a href=\"https:\/\/www.drupal.org\/documentation\/modules\/aggregator\">feed aggregator module<\/a>, and occasionally <a href=\"http:\/\/pipes.yahoo.com\/\">Yahoo! Pipes<\/a> for data mashing and munging. It works well in Drupal, but other platforms require\u00a0other approaches.<\/p>\n<h2>Under the Hood: Angular.js and\u00a0Wordpress JSON API<\/h2>\n<p>Bret Davidson\u2019s Code4Lib 2014 presentation,\u00a0<a href=\"http:\/\/code4lib.org\/conference\/2014\/davidson\">Towards Pasta Code Nirvana: Using JavaScript MVC to Fill Your Programming Ravioli<\/a> \u00a0(<a href=\"http:\/\/code4lib.org\/files\/towards_pasta_code_nirvana.pdf\">slides<\/a>)\u00a0made me hungry. Hungry for pasta, yes, but also for knowledge.\u00a0I wanted to:<\/p>\n<ol>\n<li>Experiment with one of the Javascript MVC frameworks to learn how they work, and in the process&#8230;<\/li>\n<li>Build something potentially useful for digital collections that could be ported over to a new application framework in the future (e.g., from our current Django app to a future Ruby on Rails app).<\/li>\n<\/ol>\n<p>From the <a href=\"http:\/\/todomvc.com\/\">many possibilities<\/a>, I chose <a href=\"https:\/\/angularjs.org\/\">AngularJS<\/a>.\u00a0It seemed well-documented, <a href=\"http:\/\/www.airpair.com\/js\/javascript-framework-comparison\">increasingly popular<\/a>, and with\u00a0Google\u2019s backing, it seems like it&#8217;ll be around for awhile.<\/p>\n<h3>WordPress JSON API<\/h3>\n<p>Among Angular\u2019s virtues is that it really simplifies the process of getting and using\u00a0JSON data from an API. I found\u00a0Wordpress\u2019 <a href=\"https:\/\/wordpress.org\/plugins\/json-api\/\">JSON API plugin<\/a>, which was interestingly developed by staff at MoMA so they could use WordPress as a back-end to a <a href=\"http:\/\/www.moma.org\/explore\/inside_out\">site with a Rails front-end<\/a>. So we first had to enable\u00a0that for our Bitstreams blog.<\/p>\n<h3>AngularJS<\/h3>\n<p><a href=\"http:\/\/blogs.library.duke.edu\/bitstreams\/files\/2014\/11\/angularjs.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright wp-image-1698 size-thumbnail\" src=\"http:\/\/blogs.library.duke.edu\/bitstreams\/files\/2014\/11\/angularjs-150x150.png\" alt=\"angularjs\" width=\"150\" height=\"150\" srcset=\"https:\/\/blogs.library.duke.edu\/bitstreams\/files\/2014\/11\/angularjs-150x150.png 150w, https:\/\/blogs.library.duke.edu\/bitstreams\/files\/2014\/11\/angularjs-300x300.png 300w, https:\/\/blogs.library.duke.edu\/bitstreams\/files\/2014\/11\/angularjs.png 500w\" sizes=\"auto, (max-width: 150px) 100vw, 150px\" \/><\/a>AngularJS definitely helps keep code clean, especially by abstracting the model (the blogposts &amp; associated\u00a0characteristics, as well as the page state) from the view (indicates how to display the data) from the\u00a0controller (gets and refines the data into\u00a0the model, updates the model upon interactions with the view).\u00a0I\u2019ve done several projects in the past using jQuery and DOM manipulation to retrieve and display data. It usually works, but in the process I create a veritable rat\u2019s nest of spaghetti code wherein \/* no amount of commenting *\/ can truly help disentangle what\u2019s happening.<\/p>\n<p>Angular also supercharges HTML with more useful attributes to control a display. I&#8217;ve only just scratched the surface, but it&#8217;s clear that built-in directives like <code>ng-repeat<\/code> and filters like <code>limitTo<\/code> spare me from writing a ton of Javascript, e.g.,\u00a0<code>&lt;li ng-repeat=\"post in blogposts | limitTo:pageSize\"&gt;<\/code>. After the initial learning curve, the markup is visually intuitive. And it&#8217;s nice that directives and filters are extensible so you can make your own.<\/p>\n<p><em>Source code<\/em>: <a href=\"http:\/\/library.duke.edu\/digitalcollections\/media\/app\/js\/angular\/main.js\">controller<\/a>\u00a0js, <a href=\"http:\/\/library.duke.edu\/digitalcollections\">HTML<\/a>\u00a0(view source)<\/p>\n<h2>Initial Lessons Learned<\/h2>\n<ul>\n<li>AngularJS has a steeper learning curve than I\u2019d expected; I assumed I could do this mini-project\u00a0in a few\u00a0hours, but it took a couple days to really get a handle on the basic pieces I needed for this project.<\/li>\n<li>Writing an Angular app within a Django app is tricky. Both use {{ variable }} template tags so I had to <a href=\"http:\/\/www.mattthered.com\/post\/52138145009\/handling-conflicting-django-angularjs-template-tags\">change Angular to use [[ variable ]]<\/a>\u00a0instead.<\/li>\n<\/ul>\n<h2>Looking Ahead<\/h2>\n<p>I consider this an encouraging proof of concept. While our own blog posts can be interesting, there are many other sources of valuable data out in the world that are relevant to our collections that\u00a0would add value for our researchers if we were able to easily get and display them. AngularJS won&#8217;t be the answer to all of these needs, but it&#8217;s nice to have in the toolset.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This week, we added a display of our most recent Bitstreams blog posts to our Digital Collections homepage (example), and likewise, a view of posts relevant to a given collection on the respective collection\u2019s homepage (example). Background Our Digital Projects &amp; Production team has been writing in Bitstreams at least weekly since February 2014. We\u2019ve &hellip; <a href=\"https:\/\/blogs.library.duke.edu\/bitstreams\/2014\/11\/12\/new-angles-avenues-bitstreams\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">New Angles &#038; Avenues for Bitstreams<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":103,"featured_media":1704,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[45,15,12],"tags":[],"class_list":["post-1693","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-digital-collections","category-projects","category-tech"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>New Angles &amp; Avenues for Bitstreams - Bitstreams: The Digital Collections Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blogs.library.duke.edu\/bitstreams\/2014\/11\/12\/new-angles-avenues-bitstreams\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"New Angles &amp; Avenues for Bitstreams - Bitstreams: The Digital Collections Blog\" \/>\n<meta property=\"og:description\" content=\"This week, we added a display of our most recent Bitstreams blog posts to our Digital Collections homepage (example), and likewise, a view of posts relevant to a given collection on the respective collection\u2019s homepage (example). Background Our Digital Projects &amp; Production team has been writing in Bitstreams at least weekly since February 2014. We\u2019ve &hellip; Continue reading New Angles &#038; Avenues for Bitstreams &rarr;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.library.duke.edu\/bitstreams\/2014\/11\/12\/new-angles-avenues-bitstreams\/\" \/>\n<meta property=\"og:site_name\" content=\"Bitstreams: The Digital Collections Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/dukedigitalcoll\" \/>\n<meta property=\"article:published_time\" content=\"2014-11-12T20:33:25+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blogs.library.duke.edu\/bitstreams\/files\/2014\/11\/angulardc.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"717\" \/>\n\t<meta property=\"og:image:height\" content=\"661\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Sean Aery\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@dukedigitalcoll\" \/>\n<meta name=\"twitter:site\" content=\"@dukedigitalcoll\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Sean Aery\" \/>\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:\/\/blogs.library.duke.edu\/bitstreams\/2014\/11\/12\/new-angles-avenues-bitstreams\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/blogs.library.duke.edu\/bitstreams\/2014\/11\/12\/new-angles-avenues-bitstreams\/\"},\"author\":{\"name\":\"Sean Aery\",\"@id\":\"https:\/\/blogs.library.duke.edu\/bitstreams\/#\/schema\/person\/b1cdd20f3c85d271cfb87386a1dd28fe\"},\"headline\":\"New Angles &#038; Avenues for Bitstreams\",\"datePublished\":\"2014-11-12T20:33:25+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/blogs.library.duke.edu\/bitstreams\/2014\/11\/12\/new-angles-avenues-bitstreams\/\"},\"wordCount\":804,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/blogs.library.duke.edu\/bitstreams\/2014\/11\/12\/new-angles-avenues-bitstreams\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/blogs.library.duke.edu\/bitstreams\/files\/2014\/11\/angulardc.jpg\",\"articleSection\":[\"Digital Collections\",\"Projects\",\"Technology\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/blogs.library.duke.edu\/bitstreams\/2014\/11\/12\/new-angles-avenues-bitstreams\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blogs.library.duke.edu\/bitstreams\/2014\/11\/12\/new-angles-avenues-bitstreams\/\",\"url\":\"https:\/\/blogs.library.duke.edu\/bitstreams\/2014\/11\/12\/new-angles-avenues-bitstreams\/\",\"name\":\"New Angles & Avenues for Bitstreams - Bitstreams: The Digital Collections Blog\",\"isPartOf\":{\"@id\":\"https:\/\/blogs.library.duke.edu\/bitstreams\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blogs.library.duke.edu\/bitstreams\/2014\/11\/12\/new-angles-avenues-bitstreams\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blogs.library.duke.edu\/bitstreams\/2014\/11\/12\/new-angles-avenues-bitstreams\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/blogs.library.duke.edu\/bitstreams\/files\/2014\/11\/angulardc.jpg\",\"datePublished\":\"2014-11-12T20:33:25+00:00\",\"author\":{\"@id\":\"https:\/\/blogs.library.duke.edu\/bitstreams\/#\/schema\/person\/b1cdd20f3c85d271cfb87386a1dd28fe\"},\"breadcrumb\":{\"@id\":\"https:\/\/blogs.library.duke.edu\/bitstreams\/2014\/11\/12\/new-angles-avenues-bitstreams\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blogs.library.duke.edu\/bitstreams\/2014\/11\/12\/new-angles-avenues-bitstreams\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blogs.library.duke.edu\/bitstreams\/2014\/11\/12\/new-angles-avenues-bitstreams\/#primaryimage\",\"url\":\"https:\/\/blogs.library.duke.edu\/bitstreams\/files\/2014\/11\/angulardc.jpg\",\"contentUrl\":\"https:\/\/blogs.library.duke.edu\/bitstreams\/files\/2014\/11\/angulardc.jpg\",\"width\":717,\"height\":661},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blogs.library.duke.edu\/bitstreams\/2014\/11\/12\/new-angles-avenues-bitstreams\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/blogs.library.duke.edu\/bitstreams\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"New Angles &#038; Avenues for Bitstreams\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blogs.library.duke.edu\/bitstreams\/#website\",\"url\":\"https:\/\/blogs.library.duke.edu\/bitstreams\/\",\"name\":\"Bitstreams: The Digital Collections Blog\",\"description\":\"Notes from the Duke University Libraries Digital Projects Team\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blogs.library.duke.edu\/bitstreams\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blogs.library.duke.edu\/bitstreams\/#\/schema\/person\/b1cdd20f3c85d271cfb87386a1dd28fe\",\"name\":\"Sean Aery\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blogs.library.duke.edu\/bitstreams\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/de490821e24542e00ba40994017cf2414ed2510c15138b471561acc5fdff47f6?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/de490821e24542e00ba40994017cf2414ed2510c15138b471561acc5fdff47f6?s=96&d=mm&r=g\",\"caption\":\"Sean Aery\"},\"url\":\"https:\/\/blogs.library.duke.edu\/bitstreams\/author\/seanaeryduke-edu\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"New Angles & Avenues for Bitstreams - Bitstreams: The Digital Collections Blog","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:\/\/blogs.library.duke.edu\/bitstreams\/2014\/11\/12\/new-angles-avenues-bitstreams\/","og_locale":"en_US","og_type":"article","og_title":"New Angles & Avenues for Bitstreams - Bitstreams: The Digital Collections Blog","og_description":"This week, we added a display of our most recent Bitstreams blog posts to our Digital Collections homepage (example), and likewise, a view of posts relevant to a given collection on the respective collection\u2019s homepage (example). Background Our Digital Projects &amp; Production team has been writing in Bitstreams at least weekly since February 2014. We\u2019ve &hellip; Continue reading New Angles &#038; Avenues for Bitstreams &rarr;","og_url":"https:\/\/blogs.library.duke.edu\/bitstreams\/2014\/11\/12\/new-angles-avenues-bitstreams\/","og_site_name":"Bitstreams: The Digital Collections Blog","article_publisher":"https:\/\/www.facebook.com\/dukedigitalcoll","article_published_time":"2014-11-12T20:33:25+00:00","og_image":[{"width":717,"height":661,"url":"https:\/\/blogs.library.duke.edu\/bitstreams\/files\/2014\/11\/angulardc.jpg","type":"image\/jpeg"}],"author":"Sean Aery","twitter_card":"summary_large_image","twitter_creator":"@dukedigitalcoll","twitter_site":"@dukedigitalcoll","twitter_misc":{"Written by":"Sean Aery","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blogs.library.duke.edu\/bitstreams\/2014\/11\/12\/new-angles-avenues-bitstreams\/#article","isPartOf":{"@id":"https:\/\/blogs.library.duke.edu\/bitstreams\/2014\/11\/12\/new-angles-avenues-bitstreams\/"},"author":{"name":"Sean Aery","@id":"https:\/\/blogs.library.duke.edu\/bitstreams\/#\/schema\/person\/b1cdd20f3c85d271cfb87386a1dd28fe"},"headline":"New Angles &#038; Avenues for Bitstreams","datePublished":"2014-11-12T20:33:25+00:00","mainEntityOfPage":{"@id":"https:\/\/blogs.library.duke.edu\/bitstreams\/2014\/11\/12\/new-angles-avenues-bitstreams\/"},"wordCount":804,"commentCount":0,"image":{"@id":"https:\/\/blogs.library.duke.edu\/bitstreams\/2014\/11\/12\/new-angles-avenues-bitstreams\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.library.duke.edu\/bitstreams\/files\/2014\/11\/angulardc.jpg","articleSection":["Digital Collections","Projects","Technology"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blogs.library.duke.edu\/bitstreams\/2014\/11\/12\/new-angles-avenues-bitstreams\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blogs.library.duke.edu\/bitstreams\/2014\/11\/12\/new-angles-avenues-bitstreams\/","url":"https:\/\/blogs.library.duke.edu\/bitstreams\/2014\/11\/12\/new-angles-avenues-bitstreams\/","name":"New Angles & Avenues for Bitstreams - Bitstreams: The Digital Collections Blog","isPartOf":{"@id":"https:\/\/blogs.library.duke.edu\/bitstreams\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.library.duke.edu\/bitstreams\/2014\/11\/12\/new-angles-avenues-bitstreams\/#primaryimage"},"image":{"@id":"https:\/\/blogs.library.duke.edu\/bitstreams\/2014\/11\/12\/new-angles-avenues-bitstreams\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.library.duke.edu\/bitstreams\/files\/2014\/11\/angulardc.jpg","datePublished":"2014-11-12T20:33:25+00:00","author":{"@id":"https:\/\/blogs.library.duke.edu\/bitstreams\/#\/schema\/person\/b1cdd20f3c85d271cfb87386a1dd28fe"},"breadcrumb":{"@id":"https:\/\/blogs.library.duke.edu\/bitstreams\/2014\/11\/12\/new-angles-avenues-bitstreams\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.library.duke.edu\/bitstreams\/2014\/11\/12\/new-angles-avenues-bitstreams\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blogs.library.duke.edu\/bitstreams\/2014\/11\/12\/new-angles-avenues-bitstreams\/#primaryimage","url":"https:\/\/blogs.library.duke.edu\/bitstreams\/files\/2014\/11\/angulardc.jpg","contentUrl":"https:\/\/blogs.library.duke.edu\/bitstreams\/files\/2014\/11\/angulardc.jpg","width":717,"height":661},{"@type":"BreadcrumbList","@id":"https:\/\/blogs.library.duke.edu\/bitstreams\/2014\/11\/12\/new-angles-avenues-bitstreams\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blogs.library.duke.edu\/bitstreams\/"},{"@type":"ListItem","position":2,"name":"New Angles &#038; Avenues for Bitstreams"}]},{"@type":"WebSite","@id":"https:\/\/blogs.library.duke.edu\/bitstreams\/#website","url":"https:\/\/blogs.library.duke.edu\/bitstreams\/","name":"Bitstreams: The Digital Collections Blog","description":"Notes from the Duke University Libraries Digital Projects Team","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blogs.library.duke.edu\/bitstreams\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/blogs.library.duke.edu\/bitstreams\/#\/schema\/person\/b1cdd20f3c85d271cfb87386a1dd28fe","name":"Sean Aery","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blogs.library.duke.edu\/bitstreams\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/de490821e24542e00ba40994017cf2414ed2510c15138b471561acc5fdff47f6?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/de490821e24542e00ba40994017cf2414ed2510c15138b471561acc5fdff47f6?s=96&d=mm&r=g","caption":"Sean Aery"},"url":"https:\/\/blogs.library.duke.edu\/bitstreams\/author\/seanaeryduke-edu\/"}]}},"_links":{"self":[{"href":"https:\/\/blogs.library.duke.edu\/bitstreams\/wp-json\/wp\/v2\/posts\/1693","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.library.duke.edu\/bitstreams\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.library.duke.edu\/bitstreams\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.library.duke.edu\/bitstreams\/wp-json\/wp\/v2\/users\/103"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.library.duke.edu\/bitstreams\/wp-json\/wp\/v2\/comments?post=1693"}],"version-history":[{"count":9,"href":"https:\/\/blogs.library.duke.edu\/bitstreams\/wp-json\/wp\/v2\/posts\/1693\/revisions"}],"predecessor-version":[{"id":1706,"href":"https:\/\/blogs.library.duke.edu\/bitstreams\/wp-json\/wp\/v2\/posts\/1693\/revisions\/1706"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.library.duke.edu\/bitstreams\/wp-json\/wp\/v2\/media\/1704"}],"wp:attachment":[{"href":"https:\/\/blogs.library.duke.edu\/bitstreams\/wp-json\/wp\/v2\/media?parent=1693"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.library.duke.edu\/bitstreams\/wp-json\/wp\/v2\/categories?post=1693"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.library.duke.edu\/bitstreams\/wp-json\/wp\/v2\/tags?post=1693"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}