{"id":8694,"date":"2021-10-08T13:49:58","date_gmt":"2021-10-08T17:49:58","guid":{"rendered":"https:\/\/blogs.library.duke.edu\/bitstreams\/?p=8694"},"modified":"2021-10-08T13:49:58","modified_gmt":"2021-10-08T17:49:58","slug":"using-an-m1-mac-for-development-work","status":"publish","type":"post","link":"https:\/\/blogs.library.duke.edu\/bitstreams\/2021\/10\/08\/using-an-m1-mac-for-development-work\/","title":{"rendered":"Using an M1 Mac for development work"},"content":{"rendered":"<p>Due to a battery issue with my work laptop (an Intel-based MacBook pro), I had an opportunity to try using a newer (ARM-based) M1 Mac to do development work. Since roughly a year had passed since these new machines had been introduced I assumed the kinks would have been generally worked out and I was excited to give my speedy new M1 Mac Mini a test run at some serious work. However, upon trying to do make some updates to a <a href=\"https:\/\/gitlab.oit.duke.edu\/dul-its\/dul-directory-admin\">recent project<\/a> (by the way, we launched our <a href=\"https:\/\/directory.library.duke.edu\/\">new staff directory<\/a>!) I ran into many stumbling blocks. <\/p>\n<figure id=\"attachment_8708\" aria-describedby=\"caption-attachment-8708\" style=\"width: 1019px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blogs.library.duke.edu\/bitstreams\/files\/2021\/10\/mac_mini.jpg\" alt=\"\" width=\"1019\" height=\"764\" class=\"size-full wp-image-8708\" srcset=\"https:\/\/blogs.library.duke.edu\/bitstreams\/files\/2021\/10\/mac_mini.jpg 1019w, https:\/\/blogs.library.duke.edu\/bitstreams\/files\/2021\/10\/mac_mini-300x225.jpg 300w, https:\/\/blogs.library.duke.edu\/bitstreams\/files\/2021\/10\/mac_mini-768x576.jpg 768w\" sizes=\"auto, (max-width: 1019px) 100vw, 1019px\" \/><figcaption id=\"caption-attachment-8708\" class=\"wp-caption-text\">M1 Mac Mini ensconced beneath multitudes of cables in my home office<\/figcaption><\/figure>\n<p>My first step in starting with a new machine was to get my development environment setup. On my old laptop I&#8217;d typically use homebrew for managing packages and RVM (and previously rbenv) for ruby version management in different projects. I tried installing the tools normally and ran into multitudes of weirdness. <a href=\"https:\/\/soffes.blog\/homebrew-on-apple-silicon\">Some<\/a> <a href=\"https:\/\/5balloons.info\/correct-way-to-install-and-use-homebrew-on-m1-macs\/\">guides<\/a> suggested setting up a parallel version of homebrew (ibrew) using Rosetta (which is a translation layer for running Intel-native code). So I tried that &#8211; and then ran into all kinds of issues with managing Ruby versions. Oh and also apparently RVM \/ rbenv are no longer cool and you should be using <a href=\"https:\/\/github.com\/postmodern\/chruby\">chruby<\/a> or <a href=\"https:\/\/github.com\/asdf-vm\/asdf-ruby\">asdf<\/a>. So I tried those too, and ran into more problems. In the end, I stumbled on <a href=\"https:\/\/github.com\/monfresh\/laptop\">this amazing script<\/a> by Moncef Belyamani. It was really simple to run and it just worked, plain and simple. Yay &#8211; working dev environment!<\/p>\n<p>We&#8217;ve been using <a href=\"https:\/\/www.docker.com\/\">Docker<\/a> extensively in our recent library projects over the past few years and the Staff Directory was setup to run inside a container on our local machines. So my next step was to get Docker up and running. The light research I&#8217;d done suggested that Docker was more or less working now with M1 macs so I dived in thinking things would go smoothly. I installed Docker Desktop (hopefully not a <a href=\"https:\/\/www.docker.com\/pricing\/faq\">bad idea<\/a>) and tried to build the project, but <code>bundle install<\/code> failed. The staff directory project is built in ruby on rails, and in this instance was using <a href=\"https:\/\/github.com\/rubyjs\/therubyracer\">therubyracer gem<\/a>, which embeds the V8 JS library. However, I learned that the particular version of the V8 library used by therubyracer is not compiled for ARM and breaks the build. And as you tend to do when running into questions like these, I went down a rabbit hole of potential work-arounds. I tried manually installing a different version of the V8 library and getting the bundle process to use that instead, but never quite got it working. I also explored using a different gem (like <a href=\"https:\/\/github.com\/rubyjs\/mini_racer\">mini racer<\/a>) that would correctly compile for ARM, or just using Node instead of V8, but neither was a good option for this project. So I was stuck.<\/p>\n<figure id=\"attachment_8711\" aria-describedby=\"caption-attachment-8711\" style=\"width: 1019px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blogs.library.duke.edu\/bitstreams\/files\/2021\/10\/docker.jpg\" alt=\"\" width=\"1019\" height=\"594\" class=\"size-full wp-image-8711\" srcset=\"https:\/\/blogs.library.duke.edu\/bitstreams\/files\/2021\/10\/docker.jpg 1019w, https:\/\/blogs.library.duke.edu\/bitstreams\/files\/2021\/10\/docker-300x175.jpg 300w, https:\/\/blogs.library.duke.edu\/bitstreams\/files\/2021\/10\/docker-768x448.jpg 768w\" sizes=\"auto, (max-width: 1019px) 100vw, 1019px\" \/><figcaption id=\"caption-attachment-8711\" class=\"wp-caption-text\">Building the Staff Directory app in Docker<\/figcaption><\/figure>\n<p>My text attempt at a solution was to try setting up a remote Docker host. I&#8217;ve got a file server at home running <a href=\"https:\/\/www.truenas.com\/\">TrueNAS<\/a>, so I was able to easily spin up a Ubuntu VM on that machine and setup Docker there. You could do something similar using Duke&#8217;s <a href=\"https:\/\/vcm.duke.edu\/\">VCM service<\/a>. I <a href=\"https:\/\/www.cloudsavvyit.com\/11185\/how-and-why-to-use-a-remote-docker-host\/\">followed<\/a> <a href=\"https:\/\/help.dreamhost.com\/hc\/en-us\/articles\/216499537-How-to-configure-passwordless-login-in-Mac-OS-X-and-Linux\">various<\/a> guides, setup user accounts and permissions, generated ssh keys, and with some trial and error I was finally able to get things running correctly. You can setup a <a href=\"https:\/\/docs.docker.com\/engine\/context\/working-with-contexts\/\">context<\/a> for a Docker remote host and switch to it (something like: <code>docker context use ubuntu<\/code>), and then your subsequent Docker commands point to that remote making development work entirely seamless. It&#8217;s kind of amazing. And it worked great when testing with a hello-world app like <a href=\"https:\/\/hub.docker.com\/r\/containous\/whoami\">whoami<\/a>. Running <code>docker run --rm -it -p 80:80 containous\/whoami<\/code> worked flawlessly. But anything that was more complicated, like running an app that used two containers as was the case with the Staff Dir app, seemed to break. So stuck again.<\/p>\n<p>After consulting with a few of my brilliant colleagues, another option was suggested and this ended up being the best work around. Take my same ubuntu VM and instead of setting it up as a docker remote host, use it as the development server and setup a tunnel connection (something like: <code>ssh -N -L localhost:8080:localhost:80 docker@ip.of.VM.machine<\/code>) to it such that I would be able to view running webpages at <code>localhost:8080<\/code>. This approach requires the extra step of pushing code up to the git repository from the Mac and then pulling it back down on the VM, but that only takes a few extra keystrokes. And having a viable dev environment is well worth the hassle IMHO! <\/p>\n<p>As apple moves away from Intel-based machines &#8211; <a href=\"https:\/\/www.macrumors.com\/2021\/10\/07\/when-is-october-apple-event\/\">rumors seem to indicate<\/a> that the new MacBook Pros coming out this fall will be ARM-only &#8211; I think these development issues will start to be talked about more widely. And hopefully some smart people will be able to get everything working well with ARM. But in the meantime, running Docker on a Linux VM via a tunnel connection seems like a relatively painless way to ensure that more complicated Docker\/Rails projects can be worked on locally using an M1 Mac.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Due to a battery issue with my work laptop (an Intel-based MacBook pro), I had an opportunity to try using a newer (ARM-based) M1 Mac to do development work. Since roughly a year had passed since these new machines had been introduced I assumed the kinks would have been generally worked out and I was &hellip; <a href=\"https:\/\/blogs.library.duke.edu\/bitstreams\/2021\/10\/08\/using-an-m1-mac-for-development-work\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Using an M1 Mac for development work<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":157,"featured_media":8698,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10,14,12],"tags":[],"class_list":["post-8694","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-behindscenes","category-equipment","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>Using an M1 Mac for development work - 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\/2021\/10\/08\/using-an-m1-mac-for-development-work\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Using an M1 Mac for development work - Bitstreams: The Digital Collections Blog\" \/>\n<meta property=\"og:description\" content=\"Due to a battery issue with my work laptop (an Intel-based MacBook pro), I had an opportunity to try using a newer (ARM-based) M1 Mac to do development work. Since roughly a year had passed since these new machines had been introduced I assumed the kinks would have been generally worked out and I was &hellip; Continue reading Using an M1 Mac for development work &rarr;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.library.duke.edu\/bitstreams\/2021\/10\/08\/using-an-m1-mac-for-development-work\/\" \/>\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=\"2021-10-08T17:49:58+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blogs.library.duke.edu\/bitstreams\/files\/2021\/10\/m1_mac_header_2021.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1010\" \/>\n\t<meta property=\"og:image:height\" content=\"400\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Michael Daul\" \/>\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=\"Michael Daul\" \/>\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\/2021\/10\/08\/using-an-m1-mac-for-development-work\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/blogs.library.duke.edu\/bitstreams\/2021\/10\/08\/using-an-m1-mac-for-development-work\/\"},\"author\":{\"name\":\"Michael Daul\",\"@id\":\"https:\/\/blogs.library.duke.edu\/bitstreams\/#\/schema\/person\/dd0dc5c45d72f8f12efc639f8ed3bd59\"},\"headline\":\"Using an M1 Mac for development work\",\"datePublished\":\"2021-10-08T17:49:58+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/blogs.library.duke.edu\/bitstreams\/2021\/10\/08\/using-an-m1-mac-for-development-work\/\"},\"wordCount\":863,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/blogs.library.duke.edu\/bitstreams\/2021\/10\/08\/using-an-m1-mac-for-development-work\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/blogs.library.duke.edu\/bitstreams\/files\/2021\/10\/m1_mac_header_2021.jpg\",\"articleSection\":[\"Behind the Scenes\",\"Equipment\",\"Technology\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/blogs.library.duke.edu\/bitstreams\/2021\/10\/08\/using-an-m1-mac-for-development-work\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blogs.library.duke.edu\/bitstreams\/2021\/10\/08\/using-an-m1-mac-for-development-work\/\",\"url\":\"https:\/\/blogs.library.duke.edu\/bitstreams\/2021\/10\/08\/using-an-m1-mac-for-development-work\/\",\"name\":\"Using an M1 Mac for development work - Bitstreams: The Digital Collections Blog\",\"isPartOf\":{\"@id\":\"https:\/\/blogs.library.duke.edu\/bitstreams\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blogs.library.duke.edu\/bitstreams\/2021\/10\/08\/using-an-m1-mac-for-development-work\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blogs.library.duke.edu\/bitstreams\/2021\/10\/08\/using-an-m1-mac-for-development-work\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/blogs.library.duke.edu\/bitstreams\/files\/2021\/10\/m1_mac_header_2021.jpg\",\"datePublished\":\"2021-10-08T17:49:58+00:00\",\"author\":{\"@id\":\"https:\/\/blogs.library.duke.edu\/bitstreams\/#\/schema\/person\/dd0dc5c45d72f8f12efc639f8ed3bd59\"},\"breadcrumb\":{\"@id\":\"https:\/\/blogs.library.duke.edu\/bitstreams\/2021\/10\/08\/using-an-m1-mac-for-development-work\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blogs.library.duke.edu\/bitstreams\/2021\/10\/08\/using-an-m1-mac-for-development-work\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blogs.library.duke.edu\/bitstreams\/2021\/10\/08\/using-an-m1-mac-for-development-work\/#primaryimage\",\"url\":\"https:\/\/blogs.library.duke.edu\/bitstreams\/files\/2021\/10\/m1_mac_header_2021.jpg\",\"contentUrl\":\"https:\/\/blogs.library.duke.edu\/bitstreams\/files\/2021\/10\/m1_mac_header_2021.jpg\",\"width\":1010,\"height\":400},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blogs.library.duke.edu\/bitstreams\/2021\/10\/08\/using-an-m1-mac-for-development-work\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/blogs.library.duke.edu\/bitstreams\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Using an M1 Mac for development work\"}]},{\"@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\/dd0dc5c45d72f8f12efc639f8ed3bd59\",\"name\":\"Michael Daul\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blogs.library.duke.edu\/bitstreams\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/80a458de67b238c20ae41edaf3e13f09b746bcafcb9fe282c7801c551ea01b4c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/80a458de67b238c20ae41edaf3e13f09b746bcafcb9fe282c7801c551ea01b4c?s=96&d=mm&r=g\",\"caption\":\"Michael Daul\"},\"url\":\"https:\/\/blogs.library.duke.edu\/bitstreams\/author\/md169duke-edu\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Using an M1 Mac for development work - 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\/2021\/10\/08\/using-an-m1-mac-for-development-work\/","og_locale":"en_US","og_type":"article","og_title":"Using an M1 Mac for development work - Bitstreams: The Digital Collections Blog","og_description":"Due to a battery issue with my work laptop (an Intel-based MacBook pro), I had an opportunity to try using a newer (ARM-based) M1 Mac to do development work. Since roughly a year had passed since these new machines had been introduced I assumed the kinks would have been generally worked out and I was &hellip; Continue reading Using an M1 Mac for development work &rarr;","og_url":"https:\/\/blogs.library.duke.edu\/bitstreams\/2021\/10\/08\/using-an-m1-mac-for-development-work\/","og_site_name":"Bitstreams: The Digital Collections Blog","article_publisher":"https:\/\/www.facebook.com\/dukedigitalcoll","article_published_time":"2021-10-08T17:49:58+00:00","og_image":[{"width":1010,"height":400,"url":"https:\/\/blogs.library.duke.edu\/bitstreams\/files\/2021\/10\/m1_mac_header_2021.jpg","type":"image\/jpeg"}],"author":"Michael Daul","twitter_card":"summary_large_image","twitter_creator":"@dukedigitalcoll","twitter_site":"@dukedigitalcoll","twitter_misc":{"Written by":"Michael Daul","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blogs.library.duke.edu\/bitstreams\/2021\/10\/08\/using-an-m1-mac-for-development-work\/#article","isPartOf":{"@id":"https:\/\/blogs.library.duke.edu\/bitstreams\/2021\/10\/08\/using-an-m1-mac-for-development-work\/"},"author":{"name":"Michael Daul","@id":"https:\/\/blogs.library.duke.edu\/bitstreams\/#\/schema\/person\/dd0dc5c45d72f8f12efc639f8ed3bd59"},"headline":"Using an M1 Mac for development work","datePublished":"2021-10-08T17:49:58+00:00","mainEntityOfPage":{"@id":"https:\/\/blogs.library.duke.edu\/bitstreams\/2021\/10\/08\/using-an-m1-mac-for-development-work\/"},"wordCount":863,"commentCount":0,"image":{"@id":"https:\/\/blogs.library.duke.edu\/bitstreams\/2021\/10\/08\/using-an-m1-mac-for-development-work\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.library.duke.edu\/bitstreams\/files\/2021\/10\/m1_mac_header_2021.jpg","articleSection":["Behind the Scenes","Equipment","Technology"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blogs.library.duke.edu\/bitstreams\/2021\/10\/08\/using-an-m1-mac-for-development-work\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blogs.library.duke.edu\/bitstreams\/2021\/10\/08\/using-an-m1-mac-for-development-work\/","url":"https:\/\/blogs.library.duke.edu\/bitstreams\/2021\/10\/08\/using-an-m1-mac-for-development-work\/","name":"Using an M1 Mac for development work - Bitstreams: The Digital Collections Blog","isPartOf":{"@id":"https:\/\/blogs.library.duke.edu\/bitstreams\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.library.duke.edu\/bitstreams\/2021\/10\/08\/using-an-m1-mac-for-development-work\/#primaryimage"},"image":{"@id":"https:\/\/blogs.library.duke.edu\/bitstreams\/2021\/10\/08\/using-an-m1-mac-for-development-work\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.library.duke.edu\/bitstreams\/files\/2021\/10\/m1_mac_header_2021.jpg","datePublished":"2021-10-08T17:49:58+00:00","author":{"@id":"https:\/\/blogs.library.duke.edu\/bitstreams\/#\/schema\/person\/dd0dc5c45d72f8f12efc639f8ed3bd59"},"breadcrumb":{"@id":"https:\/\/blogs.library.duke.edu\/bitstreams\/2021\/10\/08\/using-an-m1-mac-for-development-work\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.library.duke.edu\/bitstreams\/2021\/10\/08\/using-an-m1-mac-for-development-work\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blogs.library.duke.edu\/bitstreams\/2021\/10\/08\/using-an-m1-mac-for-development-work\/#primaryimage","url":"https:\/\/blogs.library.duke.edu\/bitstreams\/files\/2021\/10\/m1_mac_header_2021.jpg","contentUrl":"https:\/\/blogs.library.duke.edu\/bitstreams\/files\/2021\/10\/m1_mac_header_2021.jpg","width":1010,"height":400},{"@type":"BreadcrumbList","@id":"https:\/\/blogs.library.duke.edu\/bitstreams\/2021\/10\/08\/using-an-m1-mac-for-development-work\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blogs.library.duke.edu\/bitstreams\/"},{"@type":"ListItem","position":2,"name":"Using an M1 Mac for development work"}]},{"@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\/dd0dc5c45d72f8f12efc639f8ed3bd59","name":"Michael Daul","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blogs.library.duke.edu\/bitstreams\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/80a458de67b238c20ae41edaf3e13f09b746bcafcb9fe282c7801c551ea01b4c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/80a458de67b238c20ae41edaf3e13f09b746bcafcb9fe282c7801c551ea01b4c?s=96&d=mm&r=g","caption":"Michael Daul"},"url":"https:\/\/blogs.library.duke.edu\/bitstreams\/author\/md169duke-edu\/"}]}},"_links":{"self":[{"href":"https:\/\/blogs.library.duke.edu\/bitstreams\/wp-json\/wp\/v2\/posts\/8694","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\/157"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.library.duke.edu\/bitstreams\/wp-json\/wp\/v2\/comments?post=8694"}],"version-history":[{"count":16,"href":"https:\/\/blogs.library.duke.edu\/bitstreams\/wp-json\/wp\/v2\/posts\/8694\/revisions"}],"predecessor-version":[{"id":8715,"href":"https:\/\/blogs.library.duke.edu\/bitstreams\/wp-json\/wp\/v2\/posts\/8694\/revisions\/8715"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.library.duke.edu\/bitstreams\/wp-json\/wp\/v2\/media\/8698"}],"wp:attachment":[{"href":"https:\/\/blogs.library.duke.edu\/bitstreams\/wp-json\/wp\/v2\/media?parent=8694"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.library.duke.edu\/bitstreams\/wp-json\/wp\/v2\/categories?post=8694"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.library.duke.edu\/bitstreams\/wp-json\/wp\/v2\/tags?post=8694"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}